{"version":3,"sources":["%3Cdefine:__ATHENA_JS_BUILD_PROVENANCE__%3E","../src/billing/errors.ts","../src/auth/contract/operations.ts","../src/billing/runtime/environment.ts","../src/billing/safety/registry.ts","../package.json","../src/sdk-version.ts","../src/config/errors.ts","../src/env/index.ts","../src/auth/app-identity.ts","../src/auth/bridge/code.ts","../src/auth/schema/generation.ts","../src/auth/contract/index.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/node-crypto.ts","../src/postgres/connection-string.ts","../src/postgres/driver.ts","../src/postgres/pool/deadline.ts","../src/runtime/error/generated/billing.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/import/automatic.ts","../src/billing/ingestion/types.ts","../src/billing/ingestion/urls.ts","../src/billing/ingestion/config.ts","../src/billing/ingestion/ownership.ts","../src/billing/observability/config.ts","../src/billing/import/errors.ts","../src/billing/reconciliation/retry.ts","../src/billing/reconciliation/scheduler.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/subject/postgres.ts","../src/billing/runtime/hal-link-href.ts","../src/billing/runtime/local/connections/identity.ts","../src/billing/runtime/local/connections/coordinator.ts","../src/billing/runtime/local/connections/convergence-controller.ts","../src/billing/runtime/local/connections/materialize.ts","../src/billing/observability/audit.ts","../src/billing/observability/traces.ts","../src/billing/reconciliation/context.ts","../src/billing/reconciliation/lease.ts","../src/billing/reconciliation/types.ts","../src/billing/reconciliation/policy.ts","../src/billing/reconciliation/resources.ts","../src/billing/observability/events.ts","../src/billing/observability/validate.ts","../src/billing/reconciliation/semantic-audit.ts","../src/billing/reconciliation/coordinator.ts","../src/billing/reconciliation/webhook.ts","../src/billing/reconciliation/index.ts","../src/billing/runtime/local/providers/mollie/config.ts","../src/billing/runtime/local/providers/mollie/profile-target.ts","../src/billing/safety/retry.ts","../src/runtime/diagnostics/sanitize-external.ts","../src/billing/runtime/local/providers/mollie/errors.ts","../src/billing/runtime/local/providers/mollie/sdk/contracts.ts","../src/billing/runtime/local/providers/mollie/sdk/assertions.ts","../src/billing/runtime/local/providers/mollie/sdk/client-factory.ts","../src/billing/import/audit.ts","../src/billing/import/types.ts","../src/billing/import/candidate-resolver.ts","../src/billing/import/apply.ts","../src/billing/import/confidence.ts","../src/billing/import/planner.ts","../src/billing/import/project.ts","../src/billing/import/importer.ts","../src/billing/import/database.ts","../src/billing/import/postgres.ts","../src/billing/runtime/local/providers/mollie/projection/links.ts","../src/billing/runtime/local/providers/mollie/cursor.ts","../src/billing/runtime/local/providers/mollie/dialect/customers.ts","../src/billing/runtime/local/providers/mollie/sdk/errors.ts","../src/billing/runtime/local/providers/mollie/sdk/invoke.ts","../src/billing/runtime/local/providers/mollie/sdk/call.ts","../src/billing/runtime/local/providers/mollie/sdk/page.ts","../src/billing/import/providers/mollie.ts","../src/billing/import/assemble.ts","../src/billing/ingestion/reconciliation/lifecycle.ts","../src/billing/ingestion/reconciliation/repository.ts","../src/billing/runtime/local/providers/mollie/webhook-capability.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/index.ts","../src/admin/query.ts","../src/gateway/routes.ts","../src/result/mutation-meta.ts","../src/auth/index.ts","../src/runtime/authorization/capabilities.ts","../src/rights/matching.ts","../src/runtime/authorization/capability-rights.ts","../src/rights/key.ts","../src/rights/errors.ts","../src/runtime/authorization/parse-snapshot.ts","../src/auth/authorization/result.ts","../src/runtime/authorization/role-invariants.ts","../src/auth/runtime-error.ts","../src/runtime/authorization/catalog.ts","../src/billing/runtime/rights.ts","../src/runtime/authorization/decisions.ts","../src/billing/runtime/invocation-authority.ts","../src/billing/runtime/operation-policy.ts","../src/billing/rights-catalog.ts","../src/storage/rights-catalog.ts","../src/rights/authority.ts","../src/rights/resolver.ts","../src/rights/ir/canonicalize.ts","../src/rights/ir/validate.ts","../src/rights/types.ts","../src/rights/definitions.ts","../src/auth/capabilities.ts","../src/auth/contract/operations.generated.ts","../src/auth/email/index.ts","../src/auth/email/builtins.ts","../src/auth/email/events.ts","../src/auth/email/catalog.ts","../src/auth/email/contract.ts","../src/auth/email/emit.ts","../src/email/errors.ts","../src/auth/email/renderer.ts","../src/auth/email/errors.ts","../src/auth/hooks/index.ts","../src/auth/hooks/define.ts","../src/auth/hooks/events.ts","../src/auth/limits.ts","../src/auth/react-email.ts","../src/auth/server.ts","../src/cookies/index.ts","../src/cookies/base64.ts","../src/cookies/cookie-utils.ts","../src/cookies/crypto.ts","../src/cookies/session-store.ts","../src/auth/session-controller.ts","../src/auth/client/session-persistence.ts","../src/auth/session-store.ts","../src/auth/session-errors.ts","../src/auth/token-provider.ts","../src/auxiliaries.ts","../src/gateway/errors.ts","../src/error/classify.ts","../src/error/types.ts","../src/utils/parse-boolean-flag.ts","../src/auxiliaries/retry.ts","../src/error/normalize.ts","../src/billing/index.ts","../src/billing/module.ts","../src/billing/runtime/remote/project-capabilities.ts","../src/billing/runtime/remote/runtime.ts","../src/billing/safety/prepare.ts","../src/billing/safety/environment.ts","../src/billing/safety/validators.ts","../src/billing/runtime/self/checkout-lines.ts","../src/billing/safety/idempotency.ts","../src/billing/safety/money.ts","../src/billing/runtime/admin/unavailable.ts","../src/billing/runtime/dispatch.ts","../src/billing/runtime/self/unavailable.ts","../src/billing/runtime/remote/transport.ts","../src/gateway/url.ts","../src/utils/athena-request-headers.ts","../src/billing/runtime/self/return-query.ts","../src/billing/types.ts","../src/chat/module.ts","../src/chat/error.ts","../src/chat/remote/runtime.ts","../src/http/parse-response-body.ts","../src/chat/capabilities.ts","../src/chat/realtime/session.ts","../src/cloudflare/execution-mode.ts","../src/compatibility/report.ts","../src/release/identity.ts","../src/contracts/v1/index.ts","../src/contracts/v1/errors.ts","../src/contracts/v1/pagination.ts","../src/db/transaction/index.ts","../src/db/transaction/begin-sql.ts","../src/db/transaction/errors.ts","../src/db/transaction/cache.ts","../src/db/transaction/compile.ts","../src/db/transaction/types.ts","../src/db/transaction/coordinator.ts","../src/db/transaction/options.ts","../src/email/index.ts","../src/email/capabilities.ts","../src/email/delivery-port.ts","../src/email/module.ts","../src/email/normalize-config.ts","../src/email/provider.ts","../src/email/runtime.ts","../src/email/templates.ts","../src/email/providers/index.ts","../src/email/providers/console.ts","../src/email/providers/attachments.ts","../src/email/providers/http.ts","../src/email/providers/encoding.ts","../src/email/providers/resend.ts","../src/gateway/client.ts","../src/query/engine/ast.ts","../src/query/engine/errors.ts","../src/query/contract-v1.ts","../src/gateway/serialize-ast.ts","../src/query/engine/capabilities.ts","../src/query/engine/normalize.ts","../src/query/engine/validate.ts","../src/query-ast.ts","../src/gateway/serialize-update.ts","../src/gateway/transaction.ts","../src/gateway/types.ts","../src/generator/index.ts","../src/generator/artifact-merge.ts","../src/generator/config.ts","../src/config/project-helpers.ts","../src/migrations/constants.ts","../src/generator/config-ir.ts","../src/generator/schema-selection.ts","../src/generator/table-selection.ts","../src/generator/config-file.ts","../src/migrations/managed-auth.ts","../src/auth/local/schema.ts","../src/migrations/checksum.ts","../src/migrations/commands.ts","../src/runtime/authorization/postgres.ts","../src/auth/local/database.ts","../src/postgres/owned-runtime.ts","../src/runtime/ownership.ts","../src/postgres/pool/manager.ts","../src/postgres/pool/lease.ts","../src/postgres/pool/poison.ts","../src/postgres/runtime.ts","../src/auth/local/errors.ts","../src/auth/local/request-timing.ts","../src/auth/local/organization-invariants.ts","../src/roles/index.ts","../src/roles/builtin.ts","../src/roles/id.ts","../src/roles/errors.ts","../src/roles/key.ts","../src/roles/ir/canonicalize.ts","../src/roles/ir/validate.ts","../src/roles/types.ts","../src/roles/ir/fingerprint.ts","../src/roles/persistence.ts","../src/roles/projection.ts","../src/runtime/authorization/assignment-replace.ts","../src/runtime/authorization/templates.ts","../src/runtime/authorization/assignment-snapshot.ts","../src/runtime/authorization/catalog-state.ts","../src/rights/ir/fingerprint.ts","../src/runtime/authorization/clone-source.ts","../src/runtime/authorization/role-descriptor.ts","../src/runtime/authorization/snapshot-catalog.ts","../src/auth/schema/migrations.ts","../src/auth/local/authorization-sql.ts","../src/auth/local/email/schema-sql.ts","../src/auth/local/signing-keys-sql.ts","../src/auth/local/ledger-health.ts","../src/auth/local/schema-inspect.ts","../src/auth/local/schema-manifest.ts","../src/migrations/ensure-directory.ts","../src/generator/database-authority.ts","../src/generator/schema-discovery.ts","../src/v3-client-assembly.ts","../src/auth/hooks/assert-local.ts","../src/auth/resolve-routing.ts","../src/node-env.ts","../src/utils/athena-auth-url.ts","../src/client/config/normalize.ts","../src/cloudflare/capabilities.ts","../src/capabilities/client-projection.ts","../src/capabilities/assembly.ts","../src/auth/capability-contributions.ts","../src/capabilities/contribution.ts","../src/capabilities/key.ts","../src/chat/capability-contributions.ts","../src/db/transaction/capability-contributions.ts","../src/billing/runtime/capability-contributions.ts","../src/capabilities/resolver.ts","../src/capabilities/types.ts","../src/capabilities/ir/canonicalize.ts","../src/capabilities/ir/validate.ts","../src/query/engine/capability-contributions.ts","../src/storage/runtime/capability-contributions.ts","../src/cloudflare/d1/transport.ts","../src/result/strip-null-properties.ts","../src/cloudflare/types.ts","../src/cloudflare/d1/compile-fetch.ts","../src/query/engine/index.ts","../src/query/engine/relation-result-shape.ts","../src/query/engine/plan.ts","../src/query/engine/relations.ts","../src/query/engine/relational-serializer.ts","../src/cloudflare/d1/compile-ast.ts","../src/sql-identifiers.ts","../src/cloudflare/d1/sql.ts","../src/query/legacy-boolean.ts","../src/sqlite-local/binds.ts","../src/cloudflare/d1/relation-catalog.ts","../src/cloudflare/d1/runner.ts","../src/cloudflare/d1/statement-classifier.ts","../src/cloudflare/d1/sql-rewrite.ts","../src/cloudflare/d1/transaction.ts","../src/storage/runtime.ts","../src/client/config/predicates.ts","../src/sqlite-local/materialize.ts","../src/sqlite-local/transport.ts","../src/runtime/error/index.ts","../src/runtime/error/classifier.ts","../src/runtime/error/data.ts","../src/runtime/error/failure.ts","../src/runtime/error/registry.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/instance.ts","../src/sqlite-local/compiler.ts","../src/sqlite-local/compatibility.ts","../src/sqlite-local/errors.ts","../src/billing/runtime/self/request-port.ts","../src/billing/runtime/self/delegated-principal.ts","../src/billing/runtime/browser-transport.ts","../src/runtime/data/discovery-document.ts","../src/runtime/transport/http/client.ts","../src/runtime/transport/http/request-compiler.ts","../src/runtime/transport/http/url.ts","../src/runtime/transport/http/response-parser.ts","../src/runtime/transport/http.ts","../src/billing/runtime/http-error.ts","../src/billing/subject/errors.ts","../src/billing/runtime/resolve-mode.ts","../src/client/context.ts","../src/auth/client.ts","../src/auth/authorization/client-module.ts","../src/auth/client/accounts.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-mutations.ts","../src/auth/client/sessions.ts","../src/auth/client/errors.ts","../src/http/upstream-html-error.ts","../src/auth/client/social.ts","../src/auth/client/transport.ts","../src/auth/client/mutation.ts","../src/auth/client/request.ts","../src/auth/client/query.ts","../src/auth/client/response.ts","../src/auth/client/two-factor.ts","../src/auth/client/user.ts","../src/auth/passkey/client-module.ts","../src/auth/passkey/browser/ceremony.ts","../src/auth/passkey/browser/diagnostic.ts","../src/auth/passkey/browser/options.ts","../src/auth/passkey/browser/serialize.ts","../src/auth/passkey/normalize.ts","../src/auth/passkey/metadata/index.ts","../src/auth/passkey/metadata/catalog.ts","../src/auth/passkey/metadata/resolve.ts","../src/auth/passkey/requests.ts","../src/client/fluent/index.ts","../src/client/fluent/table-builder.ts","../src/result/cardinality.ts","../src/result/read.ts","../src/client-sql.ts","../src/query-transport.ts","../src/gateway/structured-select.ts","../src/query/include-select.ts","../src/query/descriptor.ts","../src/schema/resource.ts","../src/query/canonicalize.ts","../src/query-debug-ast.ts","../src/query-tracing.ts","../src/query/execution/select.ts","../src/query/execution/canonical-select.ts","../src/client/fluent/mutation-query.ts","../src/query/execution/mutation.ts","../src/client/fluent/filters.ts","../src/client/fluent/state.ts","../src/client/fluent/query-builder.ts","../src/compatibility/query-builder.ts","../src/client/fluent/rpc-builder.ts","../src/client-result.ts","../src/result/formatter.ts","../src/client-request.ts","../src/db/transaction/interactive-gateway.ts","../src/client/transactions.ts","../src/query/execution/operation.ts","../src/schema/model-target.ts","../src/storage/module.ts","../src/http/append-query.ts","../src/storage/backup.ts","../src/storage/errors.ts","../src/storage/file.ts","../src/storage/direct-upload.ts","../src/storage/xhr-put.ts","../src/storage/live-http-routes.json","../src/runtime/authorization/normalize-config.ts","../src/runtime/authorization/application-rights.ts","../src/runtime/authorization/binding-registry.ts","../src/runtime/data/model-registry.ts","../src/runtime/authorization/binding-errors.ts","../src/runtime/authorization/model-binding.ts","../src/runtime/authorization/config.ts","../src/runtime/authorization/state.ts","../src/cloudflare/r2/storage.ts","../src/context/merge.ts","../src/diagnostics.ts","../src/notifications/http-adapter.ts","../src/notifications/module.ts","../src/notifications/catalog.ts","../src/notifications/types.ts","../src/notifications/contract/operations.ts","../src/notifications/errors.ts","../src/notifications/events-store.ts","../src/notifications/memory-store.ts","../src/notifications/store.ts","../src/notifications/preference-apply.ts","../src/notifications/preference-batch.ts","../src/notifications/resolve.ts","../src/query/explain.ts","../src/react/query-client.ts","../src/query/entity-graph.ts","../src/query/model-identity.ts","../src/react/query-client/entity-store.ts","../src/react/query-client/graph-index.ts","../src/query/query-index.ts","../src/react/query-client/mutation-store.ts","../src/react/utils.ts","../src/react/query-client/query-store.ts","../src/runtime/client-internals.ts","../src/runtime/data/lifecycle/assert.ts","../src/client/compose/notifications.ts","../src/storage/runtime/index.ts","../src/storage/runtime/bind.ts","../src/storage/runtime/types.ts","../src/storage/runtime/browser-transport.ts","../src/storage/runtime/bytes-envelope.ts","../src/storage/runtime/errors.ts","../src/storage/runtime/nucleus.ts","../src/policy/decide.ts","../src/policy/match-principal.ts","../src/storage/runtime/rights.ts","../src/storage/runtime/overlays.ts","../src/storage/runtime/object-ops.ts","../src/storage/object-keys.ts","../src/generator/env.ts","../src/generator/pipeline.ts","../src/generator/generated-file-header.ts","../src/generator/providers.ts","../src/schema/postgres-introspection-core.ts","../src/schema/diff/normalize.ts","../src/schema/diff/types.ts","../src/schema/postgres-provider.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/mappers/index.ts","../src/mappers/errors.ts","../src/mappers/pagination.ts","../src/organization/index.ts","../src/organization/ensure-active-organization.ts","../src/query/model-view.ts","../src/query/read-query-descriptor.ts","../src/query/read-query.ts","../src/query/read-query-compat.ts","../src/query/read-query-public.ts","../src/runtime/index.ts","../src/runtime/parse.ts","../src/runtime/schemas.ts","../src/schema/index.ts","../src/schema/definitions.ts","../src/schema/diff/index.ts","../src/schema/diff/diff.ts","../src/schema/ir/canonicalize.ts","../src/schema/ir/identity.ts","../src/schema/ir/validate.ts","../src/schema/ir/version.ts","../src/schema/ir/compatibility.ts","../src/schema/model-sql.ts","../src/schema/diff/identity.ts","../src/schema/diff/summary.ts","../src/schema/diff/validate.ts","../src/schema/diff/errors.ts","../src/schema/diff/from-introspection.ts","../src/schema/diff/from-models.ts","../src/schema/model-form.ts","../src/schema/table-builder.ts","../src/schema/table-columns.ts","../src/schema/table-schemas.ts","../src/schema/model-sql-write.ts","../src/sqlite-local/host-compiler.ts","../src/tables/index.ts","../src/tables/catalog.ts","../src/tables/schema-handlers.ts","../src/v3-client.ts","../src/capabilities/ir/fingerprint.ts","../src/auth/http/proxy.ts","../src/auth/local/email/template-store.ts","../src/auth/local/runtime.ts","../src/auth/local/request-middleware.ts","../src/auth/observability/traces.ts","../src/auth/local/memory-stores.ts","../src/runtime/authorization/memory.ts","../src/auth/local/authentication-context.ts","../src/auth/local/runtime-helpers.ts","../src/auth/local/security.ts","../src/auth/local/router.ts","../src/auth/hooks/sanitize.ts","../src/auth/local/api-key.ts","../src/auth/local/models.ts","../src/auth/observability/snapshots.ts","../src/auth/local/admin-contract.ts","../src/auth/local/admin-routes.ts","../src/auth/local/cookies.ts","../src/auth/local/password.ts","../src/auth/local/argon2.node.ts","../src/auth/local/admin-store.ts","../src/auth/local/authorization-guard.ts","../src/auth/local/authorization-routes.ts","../src/auth/local/authorization-server/routes.ts","../src/auth/authorization-server/index.ts","../src/auth/authorization-server/errors.ts","../src/auth/authorization-server/metadata.ts","../src/auth/authorization-server/pkce.ts","../src/auth/oauth2/pkce.ts","../src/auth/utils/base64.ts","../src/auth/authorization-server/redirect-uri.ts","../src/auth/authorization-server/resource.ts","../src/auth/authorization-server/scopes.ts","../src/auth/authorization-server/tokens.ts","../src/auth/local/bridge/revoke.ts","../src/auth/local/bridge/routes.ts","../src/auth/bridge/service.ts","../src/auth/local/credential-password-routes.ts","../src/auth/local/email/user-routes.ts","../src/auth/local/email/routes.ts","../src/auth/email/attachments.ts","../src/email/blocked-ip.ts","../src/auth/email/bindings.ts","../src/auth/local/extended-routes.ts","../src/auth/local/totp.ts","../src/auth/local/organization-invitation-routes.ts","../src/auth/local/passkey/generate-authenticate-options.ts","../src/auth/local/passkey/challenge-store.ts","../src/auth/local/stores.ts","../src/auth/local/passkey/repository.ts","../src/auth/passkey/metadata.ts","../src/auth/passkey/transports.ts","../src/auth/local/passkey/generate-register-options.ts","../src/auth/local/passkey/registration-transaction.ts","../src/auth/local/passkey/manage-passkeys.ts","../src/auth/local/credential-viability.ts","../src/auth/local/passkey/view.ts","../src/auth/local/passkey/related-origins.ts","../src/auth/local/passkey/verify-authentication.ts","../src/auth/local/passkey/wire.ts","../src/auth/local/passkey/verify-registration.ts","../src/auth/passkey/aaguid.ts","../src/auth/local/social/routes.ts","../src/auth/social/server/errors.ts","../src/auth/social/server/provider-registry.ts","../src/auth/social-providers/registry.ts","../src/auth/social-providers/apple.ts","../src/auth/env/index.ts","../src/auth/env/logger.ts","../src/auth/error/index.ts","../src/auth/error/api-error.ts","../src/auth/error/athena-auth-error.ts","../src/auth/oauth2/index.ts","../src/auth/oauth2/reject-redirects.ts","../src/auth/fetch/index.ts","../src/auth/fetch/athena-fetch.ts","../src/auth/fetch/body.ts","../src/auth/oauth2/create-authorization-url.ts","../src/auth/oauth2/utils.ts","../src/auth/oauth2/client-id.ts","../src/auth/oauth2/token-utils.ts","../src/auth/oauth2/refresh-access-token.ts","../src/auth/oauth2/validate-authorization-code.ts","../src/auth/social-providers/apple-crypto.ts","../src/auth/social-providers/apple-keys.ts","../src/auth/social-providers/helpers/get-jwks-public-key.ts","../src/auth/social-providers/athena.ts","../src/auth/oidc-discovery.ts","../src/auth/social-providers/helpers/trim-trailing-slash.ts","../src/auth/social-providers/atlassian.ts","../src/auth/social-providers/cognito.ts","../src/auth/social-providers/cognito-keys.ts","../src/auth/social-providers/discord.ts","../src/auth/social-providers/dropbox.ts","../src/auth/social-providers/facebook.ts","../src/auth/social-providers/facebook-verify.ts","../src/auth/social-providers/figma.ts","../src/auth/social-providers/github.ts","../src/auth/social-providers/gitlab.ts","../src/auth/social-providers/google.ts","../src/auth/social-providers/google-verify.ts","../src/auth/social-providers/google-keys.ts","../src/auth/social-providers/google-types.ts","../src/auth/social-providers/helpers/merge-scopes.ts","../src/auth/social-providers/huggingface.ts","../src/auth/social-providers/kakao.ts","../src/auth/social-providers/kick.ts","../src/auth/social-providers/line.ts","../src/auth/social-providers/linear.ts","../src/auth/social-providers/linkedin.ts","../src/auth/social-providers/microsoft-entra-id.ts","../src/auth/social-providers/microsoft-keys.ts","../src/auth/social-providers/microsoft-types.ts","../src/auth/social-providers/naver.ts","../src/auth/social-providers/notion.ts","../src/auth/social-providers/paybin.ts","../src/auth/social-providers/paypal.ts","../src/auth/social-providers/paypal-keys.ts","../src/auth/social-providers/polar.ts","../src/auth/social-providers/railway.ts","../src/auth/social-providers/reddit.ts","../src/auth/social-providers/roblox.ts","../src/auth/social-providers/salesforce.ts","../src/auth/social-providers/slack.ts","../src/auth/social-providers/spotify.ts","../src/auth/social-providers/tiktok.ts","../src/auth/social-providers/twitch.ts","../src/auth/social-providers/twitter.ts","../src/auth/social-providers/vercel.ts","../src/auth/social-providers/vk.ts","../src/auth/social-providers/wechat.ts","../src/auth/social-providers/zoom.ts","../src/auth/social/server/generic-oidc-provider.ts","../src/auth/social/server/redirect.ts","../src/auth/social/server/transaction-store.ts","../src/auth/local/social/pkce-encryption.ts","../src/auth/local/social/runtime.ts","../src/auth/social/server/engine.ts","../src/auth/local/social/memory-store.ts","../src/auth/local/social/postgres-store.ts","../src/auth/local/runtime-dependencies.ts","../src/runtime/authority/oauth-verifier.ts","../src/auth/local/clock.ts","../src/auth/hooks/execute.ts","../src/auth/domain/catalog.ts","../src/auth/observability/validate.ts","../src/auth/hooks/runner.ts","../src/auth/observability/audit.ts","../src/auth/passkey/server/relying-party.ts","../src/auth/local/athena-token-authority.ts","../src/auth/local/token-key-store.ts","../src/auth/local/authorization-server/memory-stores.ts","../src/auth/local/authorization-server/postgres-stores.ts","../src/auth/local/authorization-server/service.ts","../src/auth/local/bridge/memory-store.ts","../src/auth/local/bridge/postgres-store.ts","../src/auth/local/email/postgres-store.ts","../src/auth/local/email/store.ts","../src/auth/local/keyring.ts","../src/auth/local/sqlite-stores.ts","../src/auth/local/sqlite-schema.ts","../src/auth/local/mutation-transaction.ts","../src/auth/local/postgres-token-key-store.ts","../src/auth/local/token-key-crypto.ts","../src/auth/local/protocol-runtime.ts","../src/auth/local/token-authority.ts","../src/auth/social/node/social-config.ts","../src/billing/ingestion/application-id.ts","../src/billing/runtime/local/process-ownership.ts","../src/notifications/postgres-store.ts","../src/runtime/authorization/model-index.ts","../src/runtime/materializers/billing.ts","../src/billing/runtime/facade.ts","../src/billing/runtime/local/materialize.ts","../src/client/create-client.ts","../src/runtime/materializers/database.ts","../src/postgres/constants.ts","../src/postgres/transport.ts","../src/postgres/compile-fetch.ts","../src/postgres/compile-ast.ts","../src/postgres/sql.ts","../src/postgres/identity.ts","../src/postgres/relation-catalog.ts","../src/postgres/errors.ts","../src/postgres/transaction.ts","../src/postgres/execute.ts","../src/runtime/construction/resolve.ts","../src/storage/runtime/providers/s3-provider.ts","../src/runtime/readiness/index.ts","../src/runtime/plan/normalize.ts","../src/runtime/plan/resolve.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/observability/retention.ts","../src/billing/observability/schema-guard.ts","../src/billing/self-enrollment.ts","../src/billing/workflows/plan-change/plan-change-recovery-runtime.ts","../src/billing/runtime/self/change.ts","../src/billing/subject/connection-affinity.ts","../src/billing/subject/principal-user.ts","../src/billing/runtime/local/execute/price-list.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/local/execute/subscriptions.ts","../src/billing/workflows/plan-change/plan-change-coordinator.ts","../src/billing/workflows/plan-change/plan-change-repository.ts","../src/billing/workflows/plan-change/plan-change-state.ts","../src/billing/workflows/plan-change/provider-effect-repository.ts","../src/billing/workflows/plan-change/plan-change-reconciliation.ts","../src/billing/runtime/self/checkout-intent.ts","../src/billing/runtime/self/enroll.ts","../src/billing/subject/ensure-provider-customer.ts","../src/billing/runtime/local/execute/customers.ts","../src/billing/subject/contact.ts","../src/billing/runtime/local/execute/product-list.ts","../src/billing/runtime/self/checkout-payment.ts","../src/billing/runtime/local/execute/payments.ts","../src/billing/runtime/self/checkout-snapshot.ts","../src/billing/runtime/self/checkout-presentation.ts","../src/billing/runtime/self/enrollment-session.ts","../src/billing/runtime/self/checkout-intent-hash.ts","../src/billing/runtime/self/enrollment-reservation.ts","../src/billing/runtime/self/redirect-url.ts","../src/runtime/data/origin.ts","../src/billing/runtime/self/return-token.ts","../src/billing/runtime/self/subscriptions.ts","../src/billing/workflows/plan-change/plan-change-recovery.ts","../src/billing/runtime/diagnostics.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/ingestion/observability/delivery-health.ts","../src/billing/runtime/self/advance-enrollment.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/providers/create-registry.ts","../src/billing/runtime/local/catalog/normalize.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/billing/runtime/local/runtime.ts","../src/billing/runtime/admin/execute.ts","../src/billing/ingestion/observability/operational-status.ts","../src/billing/ingestion/reconciliation/health.ts","../src/billing/runtime/admin/operations.ts","../src/billing/runtime/health.ts","../src/billing/runtime/self/runtime.ts","../src/billing/runtime/self/checkout.ts","../src/billing/runtime/local/execute/relation-list.ts","../src/billing/runtime/self/checkout-settlement.ts","../src/billing/runtime/self/checkout-workflow.ts","../src/billing/runtime/self/composition.ts","../src/billing/runtime/self/customer.ts","../src/billing/runtime/self/dispatch.ts","../src/billing/runtime/self/entitlements.ts","../src/billing/runtime/self/invoices.ts","../src/billing/runtime/self/payments.ts","../src/billing/runtime/self/resume.ts","../src/billing/runtime/self/persist-owned-payment.ts","../src/billing/subject/sole-connection.ts","../src/billing/workflows/plan-change/change-operation.ts","../src/billing/runtime/local/execute/index.ts","../src/billing/runtime/local/execute/invoices.ts","../src/billing/runtime/local/execute/payment-links.ts","../src/billing/runtime/local/execute/refunds.ts","../src/billing/runtime/local/execute/webhooks.ts","../src/runtime/materializers/storage.ts","../src/storage/local.ts","../src/storage/runtime/providers/local-provider.ts","../src/storage/runtime/providers/r2-provider.ts","../src/runtime/plan/materialize.ts","../src/runtime/materializers/chat.ts","../src/chat/local/database.ts","../src/chat/local/principal.ts","../src/runtime/authority/index.ts","../src/runtime/authority/headers.ts","../src/runtime/authority/resolve.ts","../src/runtime/data/athena-session.ts","../src/runtime/authorization/shadow.ts","../src/runtime/data/rights-resolution.ts","../src/runtime/authorization/types.ts","../src/runtime/authorization/store.ts","../src/runtime/data/principal.ts","../src/runtime/data/rights-diagnostics.ts","../src/chat/local/errors.ts","../src/chat/local/runtime.ts","../src/chat/authorization.ts","../src/chat/observability.ts","../src/devtools/buffer/index.ts","../src/devtools/sanitize/index.ts","../src/chat/local/mutation.ts","../src/chat/local/postgres-store.ts","../src/chat/events.ts","../src/chat/search.ts","../src/chat/local/store.ts","../src/chat/local/realtime.ts","../src/runtime/plan/validate.ts","../src/runtime/plan/types.ts"],"names":["isRecord","AthenaBillingError","AthenaConfigurationError","init_errors","path","asRecord","asString","id","init_config","selection","policy","asStringList","originFromConfiguredUrl","assertSocialConfigObject","normalizeOptional","text","cached","isLoopbackHost","POSTGRES_PROTOCOLS","slot","formatProviderLabel","credentialKind","nonEmpty","trimTrailingSlash","isAbsoluteHttpUrl","createHash","connectionId","init_registry","body","row","run","randomBytes","activeTraceStorage","sampleAllows","errorCodeOf","createActiveTrace","AsyncLocalStorage","DEFAULT_TTL_MS","init_types","init_policy","subject","isPresentSnapshot","init_validate","auditError","init_coordinator","table","init_retry","result","REDACTED","client","jsonValue","init_audit","readString","metadata","asBinding","init_postgres","base64","isLoopbackHostname","mapRow","index","init_planner","existing","init_automatic","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","definition","listeners","emit","failure","hooks","now","request","isDynamicBaseURLConfig","snapshot","resolve","parseBooleanFlag","message","constraint","gatewayCode","kind","resolveBillingEnvironment","priceId","connectionQuery","SDK_NAME","SDK_HEADER_VALUE","report","log","line","predicate","column","pagination","IDENTIFIER","isRelationSelectNode","nonEmptyString","resolveRequestId","resolveErrorMessage","queryText","buildHeaders","block","existsSync","readFileSync","fieldName","fileURLToPath","require","pathToFileURL","monotonicNow","options","invalid","rank","bytesToHex","sha256","utf8ToBytes","semanticDefinition","actorRights","applied","conflictCount","formatted","join","mkdir","writeFile","readdir","readFile","stripTrailingSlashes","requestOrigin","socialProviders","rejectUnknownKeys","requireEnum","compareStrings","outputAlias","identifier","aliasIdentifier","baseIdentifier","splitTopLevel","unwrapBalancedParens","compilePredicate","RESPONSE_ALIAS_PATTERN","SQL_ALIAS_PATTERN","conditionToWhere","clause","parts","assignments","quoteIdent","key","sum","j","rows","isIdentChar","hasPaginationBounds","i","depth","inSingle","inDouble","inBacktick","inBracket","errorResponse","mapped","storage","isD1Binding","readFirstEnvHttpUrl","classifyAthenaError","value","returning","isExplicitGatewayMode","json","error","input","unlink","refreshToken","requireUserId","sessions","token","session","toBase64Url","rowValue","trimOptional","columns","logger","debugAst","stringifyFilterValue","normalizeSelectColumnsInput","filterMethods","filters","firstNonEmptyString","resolveStructuredErrorPayload","mergeOptions","parsed","appendQuery","date","toHex","sourceName","readProcessEnv","headerValue","withPathParam","resolveErrorHint","isBlobBody","encodeBase64","collectModels","byResource","unsupported","relative","nowIso","requireTopic","requireChannel","requirePair","normalizeDigest","payload","items","serialized","sleep","retryDelay","normalizeAthenaError","sourceData","selectedData","next","AthenaStorageError","asExecutorTransport","unwrap","OVERLAY_PRINCIPAL","readFirstEnv","appendPath","normalizeUniversalCreateClientConfig","absolutePath","dirname","readEnvStringValue","capitalize","posix","renderModelArtifact","normalizeTypeLabel","relationKey","isAbsolute","win32","sep","realpath","lstat","basename","relationColumns","z","POSTGRES_INTERVAL_QUALIFIERS","columnNames","tableId","isObject","REFERENTIAL_ACTIONS","schemaName","tableName","nativeType","tableKey","allow","tableIdentityKey","rename","item","createTableBuilder","spawn","escapeSqlLiteral","buildSchemaArrayLiteral","inlineSchemaLiteral","parsePostgresArrayLiteral","coerceStringArray","errorMessage","transport","role","memberUserId","normalizePath","argon2id","restored","outcome","asStringArray","bytesToBase64","base64ToBytes","grant","requireAdmin","created","hydrateUser","isAthenaAuthDatabase","clone","generateAuthenticationOptions","asDate","resolvePostgresDatabase","CHALLENGE_BYTES","toLooseExtensions","toWireOptions","generateRegistrationOptions","extensions","asTransportList","requireNonEmptyString","decodeClientDataJSON","isoBase64URL","verifyAuthenticationResponse","uuid","isUniqueViolation","parseJsonValue","normalizeWebAuthnResponsePayload","toArrayBufferBytes","challengeHashFromClientData","decodeAttestationObject","parseAuthenticatorData","asStringField","verifyRegistrationResponse","authorizationEndpoint","tokenEndpoint","sha256Hex","importJWK","decodeJwt","decodeProtectedHeader","jwtVerify","profile","userMap","createRemoteJWKSet","userinfoEndpoint","z3","user","account","TEXT_ENCODER","generateKeyPair","exportJWK","SignJWT","cloneRecord","hydrate","asIso","aesGcmKey","cloneMap","replaceMap","stores","oauthStores","TABLE","toOverride","createClientWithNormalizer","Binder","assertEffectiveMutationBounds","limitOffsetClause","quoteSelectTokenStrict","selectClause","wantsReturning","buildWhere","orderClause","rejectStructuredRelations","resolveBoundedIdentityColumn","extractAthenaCount","parseOnConflictColumns","appendOnConflict","SAFE_QUALIFIED","qualifyTable","qualifyColumn","compileCondition","compileRelationPredicate","compileRelationScope","compileEffectivePlanFilters","compileInnerRelationFilters","joinPredicate","compileSelectList","compileOrder","SAFE_IDENT","RESOLVE_BARE_RELATION_SQL","resolveStripNulls","successResponse","compileErrorResponse","compileOptionsForBoundedMutation","normalizePrefix","toPhysicalKey","toLogicalKey","assertSafeObjectKey","normalizeUniversalConfig","resolveUnifiedRemoteRoot","createCipheriv","createDecipheriv","query","withCredentials","configuredProviderNames","provider","randomUUID","nullableString","nullableTimestamp","assertCreateIdentity","leaseToken","mollieInterval","persisted","UUID_RE","uuidOrNull","iso","createHmac","timingSafeEqual","optionalString","serializationRetry","projectMoney","projected","stage","claimed","encodeBase64Url","decodeBase64Url","configured","audit","ir","entry","expiresAt","payment","checkoutUrl","requireString","unavailable","verifiedBillingContact","ownership","runAutomaticBillingWebhookReconcileIfEnabled","runAutomaticBillingCustomerImportIfEnabled","toBytes","isBinarySource","isFileListLike","fileNameOf","sourceSizeOf","progressSnapshot","rel","stat","putBytes","uploaded","rm","file","metadataRecord","hasAssignment","asJson","createClient"],"mappings":"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","file":"index.cjs","sourcesContent":["{\"buildRevision\":\"1dcc2d81535ca3b866b570c1c63af2d9ef5125e5\",\"buildTimestamp\":\"2026-09-26T15:33:33.073Z\",\"dirty\":true,\"version\":\"5.6.10\"}","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","/**\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","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","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","{\"version\":\"5.6.10\"}","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 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","/**\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 * 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","/**\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","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","/**\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","/**\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","/* 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 { 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","export function shouldAutomaticallyImportBillingCustomers(input?: {\n  enabled?: boolean;\n  mode?: \"automatic\" | \"manual\";\n}): boolean {\n  if (input?.enabled !== true) {\n    return false;\n  }\n  return input.mode !== \"manual\";\n}\n\nexport function scheduleDeferredBillingCustomerImport(input: {\n  delayMs?: number;\n  enabled: boolean;\n  mode?: \"automatic\" | \"manual\";\n  run: () => Promise<void>;\n}): { cancel(): void } | null {\n  if (!shouldAutomaticallyImportBillingCustomers(input)) {\n    return null;\n  }\n  const delayMs = input.delayMs ?? 60_000;\n  const timer = setTimeout(() => {\n    void input.run();\n  }, delayMs);\n  timer.unref?.();\n  return {\n    cancel() {\n      clearTimeout(timer);\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","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 { 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 {\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 { isAthenaBillingCredentialError } from \"../errors.ts\";\nimport { shouldAutomaticallyImportBillingCustomers } from \"../import/automatic.ts\";\nimport { AthenaBillingReconciliationError } from \"./retry.ts\";\n\nexport type BillingImportExecutionMode = \"embedded\" | \"external\";\n\nexport interface BillingReconciliationSchedule {\n  intervalMs: number;\n  jitterMs: number;\n}\n\nexport interface BillingSchedulerHandle {\n  cancel(): void;\n  drain(): Promise<void>;\n  runNow(trigger?: \"bootstrap\" | \"scheduled\"): Promise<void>;\n}\n\nexport interface BillingDesiredScheduler {\n  readonly enabled: boolean;\n  readonly execution?: BillingImportExecutionMode;\n  readonly isCurrent?: () => boolean;\n  readonly key: string;\n  readonly run: (trigger: \"bootstrap\" | \"scheduled\") => Promise<void>;\n  readonly schedule?: Partial<BillingReconciliationSchedule>;\n}\n\nexport interface BillingSchedulerSet {\n  list(): readonly BillingSchedulerHandle[];\n  reconcile(desired: readonly BillingDesiredScheduler[]): void;\n  stop(key?: string): void;\n}\n\nexport function createBillingSchedulerSet(): BillingSchedulerSet {\n  const handles = new Map<string, BillingSchedulerHandle>();\n  return {\n    list() {\n      return Object.freeze([...handles.values()]);\n    },\n    reconcile(desired) {\n      const desiredKeys = new Set(\n        desired.filter((entry) => entry.enabled).map((entry) => entry.key)\n      );\n      for (const [key, handle] of handles) {\n        if (!desiredKeys.has(key)) {\n          handle.cancel();\n          handles.delete(key);\n        }\n      }\n      for (const entry of desired) {\n        if (!entry.enabled || handles.has(entry.key)) {\n          continue;\n        }\n        const handle = registerEmbeddedBillingScheduler(entry);\n        if (handle) {\n          handles.set(entry.key, handle);\n        }\n      }\n    },\n    stop(key) {\n      if (key == null) {\n        for (const handle of handles.values()) {\n          handle.cancel();\n        }\n        handles.clear();\n        return;\n      }\n      const handle = handles.get(key);\n      if (handle) {\n        handle.cancel();\n        handles.delete(key);\n      }\n    },\n  };\n}\n\nexport const DEFAULT_BILLING_RECONCILIATION_SCHEDULE: BillingReconciliationSchedule =\n  {\n    intervalMs: 600_000,\n    jitterMs: 60_000,\n  };\n\nexport const DEFAULT_BILLING_WEBHOOK_RECONCILIATION_SCHEDULE: BillingReconciliationSchedule =\n  {\n    intervalMs: 10_800_000,\n    jitterMs: 300_000,\n  };\n\nexport const DEFAULT_BILLING_PLAN_CHANGE_RECOVERY_SCHEDULE: BillingReconciliationSchedule =\n  {\n    intervalMs: 30_000,\n    jitterMs: 1_000,\n  };\n\nfunction jitterDelay(jitterMs: number): number {\n  if (jitterMs <= 0) {\n    return 0;\n  }\n  return Math.floor(Math.random() * jitterMs);\n}\n\nexport function logEmbeddedBillingSchedulerError(error: unknown): void {\n  const payload = {\n    error: error instanceof Error ? error.message : String(error),\n  };\n  if (isAthenaBillingCredentialError(error)) {\n    console.warn(\"[athena-billing] skipping scheduled reconciliation\", payload);\n    return;\n  }\n  if (\n    error instanceof AthenaBillingReconciliationError &&\n    error.kind === \"lease_lost\"\n  ) {\n    console.warn(\"[athena-billing] skipping scheduled reconciliation\", payload);\n    return;\n  }\n  console.error(\"[athena-billing] scheduled reconciliation failed\", payload);\n}\n\nexport function registerEmbeddedBillingScheduler(input: {\n  enabled: boolean;\n  execution?: BillingImportExecutionMode;\n  isCurrent?: () => boolean;\n  onError?: (error: unknown) => void;\n  run: (trigger: \"bootstrap\" | \"scheduled\") => Promise<void>;\n  schedule?: Partial<BillingReconciliationSchedule>;\n}): BillingSchedulerHandle | null {\n  if (!input.enabled) {\n    return null;\n  }\n  if ((input.execution ?? \"embedded\") !== \"embedded\") {\n    return null;\n  }\n  const intervalMs =\n    input.schedule?.intervalMs ??\n    DEFAULT_BILLING_RECONCILIATION_SCHEDULE.intervalMs;\n  const jitterMs =\n    input.schedule?.jitterMs ??\n    DEFAULT_BILLING_RECONCILIATION_SCHEDULE.jitterMs;\n  const onError = input.onError ?? logEmbeddedBillingSchedulerError;\n  let cancelled = false;\n  let interval: ReturnType<typeof setInterval> | undefined;\n  let running: Promise<void> | undefined;\n  const runOnce = (trigger: \"bootstrap\" | \"scheduled\"): Promise<void> => {\n    if (cancelled || running) {\n      return running ?? Promise.resolve();\n    }\n    if (input.isCurrent && !input.isCurrent()) {\n      return Promise.resolve();\n    }\n    const started = Promise.resolve().then(() => input.run(trigger));\n    const tracked = started\n      .catch((error) => {\n        onError(error);\n      })\n      .finally(() => {\n        running = undefined;\n      });\n    running = tracked;\n    return tracked;\n  };\n  const runSafe = (trigger: \"bootstrap\" | \"scheduled\"): void => {\n    void runOnce(trigger);\n  };\n  const bootstrap = setTimeout(() => {\n    if (cancelled) {\n      return;\n    }\n    runSafe(\"bootstrap\");\n    interval = setInterval(() => {\n      if (!cancelled) {\n        runSafe(\"scheduled\");\n      }\n    }, intervalMs);\n    interval.unref?.();\n  }, jitterDelay(jitterMs));\n  bootstrap.unref?.();\n  return {\n    cancel() {\n      cancelled = true;\n      clearTimeout(bootstrap);\n      if (interval) {\n        clearInterval(interval);\n      }\n    },\n    async drain() {\n      while (running) {\n        await running;\n      }\n    },\n    runNow(trigger = \"scheduled\") {\n      return runOnce(trigger);\n    },\n  };\n}\n\nexport function registerBillingReconciliationScheduler(input: {\n  enabled: boolean;\n  execution?: BillingImportExecutionMode;\n  mode?: \"automatic\" | \"manual\";\n  onError?: (error: unknown) => void;\n  run: () => Promise<void>;\n  schedule?: Partial<BillingReconciliationSchedule>;\n}): BillingSchedulerHandle | null {\n  if (!shouldAutomaticallyImportBillingCustomers(input)) {\n    return null;\n  }\n  return registerEmbeddedBillingScheduler({\n    enabled: true,\n    execution: input.execution,\n    onError: input.onError,\n    run: () => input.run(),\n    schedule: input.schedule,\n  });\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 { 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","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 { BillingProviderName } from \"../../../types.ts\";\n\nexport type BillingConnectionProvider = BillingProviderName;\nexport type BillingConnectionEnvironment = \"test\" | \"live\";\n\n/**\n * Durable slot for a configured billing connection. Materialize upserts\n * on `provider + environment + credentialReference` (plus tenant owner),\n * never \"the active row for this provider\".\n */\nexport interface BillingConnectionIdentity {\n  credentialReference: string;\n  environment: BillingConnectionEnvironment;\n  provider: BillingConnectionProvider;\n  scopeKey?: string;\n}\n\nexport type ConfiguredBillingProviderAccountScope = string;\n\n/**\n * Deterministic connection identity for application-configured providers.\n * Same app + provider + environment + scope always yields the same\n * `account_reference`. Never derive this from credential material.\n */\nexport function deriveConfiguredProviderAccountReference(input: {\n  applicationId: string;\n  environment: BillingConnectionEnvironment;\n  provider: string;\n  scope?: ConfiguredBillingProviderAccountScope;\n}): string {\n  const applicationId = input.applicationId.trim();\n  const provider = input.provider.trim();\n  const scope = input.scope?.trim();\n  if (scope == null || scope.length === 0 || scope === \"organization\") {\n    return `${applicationId}-${provider}-${input.environment}`;\n  }\n  return `${applicationId}-${provider}-${scope}-${input.environment}`;\n}\n","import type { BillingProviderName } from \"../../../types.ts\";\nimport type { BillingConfiguredProviderSlot } from \"../providers/configuration/ir.ts\";\nimport { deriveConfiguredProviderAccountReference } from \"./identity.ts\";\n\nexport interface BillingConnectionIntent {\n  readonly environment: \"test\" | \"live\";\n  readonly localIdentity: {\n    readonly accountReference: string;\n  };\n  readonly metadata: {\n    readonly managedBy: \"application_config\";\n  };\n  readonly owner: {\n    readonly id: string;\n    readonly kind: \"tenant\";\n  };\n  readonly provider: BillingProviderName;\n  readonly providerIdentity: {\n    readonly accountId: string | null;\n  };\n  readonly slot: {\n    readonly credentialKind: string;\n    readonly credentialReference: string;\n    readonly key: string | null;\n  };\n}\n\nexport function createBillingConnectionIntent(input: {\n  applicationId: string;\n  environment: \"test\" | \"live\";\n  slot: BillingConfiguredProviderSlot;\n}): BillingConnectionIntent {\n  return {\n    environment: input.environment,\n    localIdentity: {\n      accountReference: deriveConfiguredProviderAccountReference({\n        applicationId: input.applicationId,\n        environment: input.environment,\n        provider: input.slot.provider,\n        scope: input.slot.slotKey ?? \"organization\",\n      }),\n    },\n    metadata: { managedBy: \"application_config\" },\n    owner: { id: input.applicationId, kind: \"tenant\" },\n    provider: input.slot.provider,\n    providerIdentity: { accountId: null },\n    slot: {\n      credentialKind: input.slot.credentialKind,\n      credentialReference: input.slot.credentialReference,\n      key: input.slot.slotKey,\n    },\n  };\n}\n\nexport interface BillingConnectionRepository<TConnection> {\n  upsertDeclared(intent: BillingConnectionIntent): Promise<TConnection>;\n}\n\nexport interface BillingConnectionConvergenceResult<TConnection> {\n  readonly connections: readonly TConnection[];\n  readonly intents: readonly BillingConnectionIntent[];\n}\n\nexport interface BillingConnectionCoordinatorInput<TConnection> {\n  readonly applicationId: string;\n  readonly environment: \"test\" | \"live\";\n  readonly intents: readonly BillingConnectionIntent[];\n  readonly repository: BillingConnectionRepository<TConnection>;\n}\n\nexport async function convergeBillingConnections<TConnection>(\n  input: BillingConnectionCoordinatorInput<TConnection>\n): Promise<BillingConnectionConvergenceResult<TConnection>> {\n  const connections: TConnection[] = [];\n  const seen = new Set<string>();\n  for (const intent of input.intents) {\n    const identity = [\n      intent.owner.kind,\n      intent.owner.id,\n      intent.provider,\n      intent.environment,\n      intent.slot.credentialReference,\n    ].join(\"\\0\");\n    if (seen.has(identity)) {\n      throw new Error(`Duplicate billing connection intent: ${identity}`);\n    }\n    seen.add(identity);\n    connections.push(await input.repository.upsertDeclared(intent));\n  }\n  return { connections, intents: input.intents };\n}\n","export type BillingConvergenceState = \"running\" | \"succeeded\" | \"failed\";\n\nexport interface BillingConvergenceAttempt<T> {\n  readonly error?: unknown;\n  readonly generation: number;\n  readonly promise: Promise<T>;\n  readonly result?: T;\n  readonly state: BillingConvergenceState;\n}\n\nexport interface BillingConvergenceController<T> {\n  current(key: string): BillingConvergenceAttempt<T> | undefined;\n  retry(key: string, run: () => Promise<T>): Promise<T>;\n  start(key: string, run: () => Promise<T>): Promise<T>;\n}\n\ninterface MutableAttempt<T> {\n  error?: unknown;\n  generation: number;\n  promise: Promise<T>;\n  result?: T;\n  state: BillingConvergenceState;\n}\n\nfunction snapshot<T>(\n  attempt: MutableAttempt<T>\n): BillingConvergenceAttempt<T> {\n  return {\n    ...(attempt.error === undefined ? {} : { error: attempt.error }),\n    generation: attempt.generation,\n    promise: attempt.promise,\n    ...(attempt.result === undefined ? {} : { result: attempt.result }),\n    state: attempt.state,\n  };\n}\n\nexport function createBillingConvergenceController<\n  T,\n>(): BillingConvergenceController<T> {\n  const attempts = new Map<string, MutableAttempt<T>>();\n\n  const execute = (\n    key: string,\n    generation: number,\n    run: () => Promise<T>\n  ): Promise<T> => {\n    const attempt: MutableAttempt<T> = {\n      generation,\n      promise: Promise.resolve().then(run),\n      state: \"running\",\n    };\n    attempts.set(key, attempt);\n    attempt.promise = attempt.promise.then(\n      (result) => {\n        if (attempts.get(key) === attempt) {\n          attempt.result = result;\n          attempt.state = \"succeeded\";\n        }\n        return result;\n      },\n      (error: unknown) => {\n        if (attempts.get(key) === attempt) {\n          attempt.error = error;\n          attempt.state = \"failed\";\n        }\n        throw error;\n      }\n    );\n    attempt.promise.catch(() => undefined);\n    return attempt.promise;\n  };\n\n  return {\n    current(key) {\n      const attempt = attempts.get(key);\n      return attempt == null ? undefined : snapshot(attempt);\n    },\n    retry(key, run) {\n      const current = attempts.get(key);\n      if (current?.state === \"running\") {\n        return current.promise;\n      }\n      return execute(key, (current?.generation ?? 0) + 1, run);\n    },\n    start(key, run) {\n      const current = attempts.get(key);\n      if (current != null) {\n        return current.promise;\n      }\n      return execute(key, 1, run);\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 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 { 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","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","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 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 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","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 { 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","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 {\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 { 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 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 { 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  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 { 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 { 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 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 { 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 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\";\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 {\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 {\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 { 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 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 { 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 { billingHalLinkHref as mollieLinkHref } from \"../../../../hal-link-href.ts\";\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","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 { 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 { 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 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 {\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","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 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 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 { 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 { 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","/**\n * athena-js\n *\n * database driver API gateway SDK — Athena client for the Athena HTTP API\n * built by XYLEX Group\n */\n\nexport type {\n  AthenaAdminQueryExecutionMetadata,\n  AthenaAdminQueryInput,\n  AthenaAdminQueryResult,\n  AthenaExpectedQueryShape,\n  AthenaRawQueryDiagnosticsMode,\n  AthenaRawQueryOperation,\n} from \"./admin/query.ts\";\nexport {\n  ATHENA_ADMIN_QUERY_EMPTY_SQL,\n  ATHENA_ADMIN_QUERY_INVALID_SHAPE,\n  ATHENA_ADMIN_QUERY_MULTI_STATEMENT,\n  ATHENA_RAW_SQL_COMPAT_DEPRECATED,\n  classifyRawSqlOperation,\n  createAdminQuery,\n  sqlLooksLikeMultipleStatements,\n} from \"./admin/query.ts\";\nexport type {\n  AthenaAdminEmailCreateRequest,\n  AthenaAdminEmailDeleteRequest,\n  AthenaAdminEmailEventTypeListResponse,\n  AthenaAdminEmailEventTypeRecord,\n  AthenaAdminEmailFailureCreateRequest,\n  AthenaAdminEmailFailureDeleteRequest,\n  AthenaAdminEmailFailureGetQuery,\n  AthenaAdminEmailFailureGetResponse,\n  AthenaAdminEmailFailureListQuery,\n  AthenaAdminEmailFailureListResponse,\n  AthenaAdminEmailFailureUpdateRequest,\n  AthenaAdminEmailFailureUpdateResponse,\n  AthenaAdminEmailGetQuery,\n  AthenaAdminEmailGetResponse,\n  AthenaAdminEmailListQuery,\n  AthenaAdminEmailListResponse,\n  AthenaAdminEmailTemplateCreateRequest,\n  AthenaAdminEmailTemplateDeleteRequest,\n  AthenaAdminEmailTemplateGetQuery,\n  AthenaAdminEmailTemplateGetResponse,\n  AthenaAdminEmailTemplateListQuery,\n  AthenaAdminEmailTemplateListResponse,\n  AthenaAdminEmailTemplateRecord,\n  AthenaAdminEmailTemplateSendRequest,\n  AthenaAdminEmailTemplateSendResponse,\n  AthenaAdminEmailTemplateUpdateRequest,\n  AthenaAdminEmailUpdateRequest,\n  AthenaAdminEmailUpdateResponse,\n  AthenaAdminListUsersFilterOperator,\n  AthenaAdminListUsersQuery,\n  AthenaAdminListUsersSearchOperator,\n  AthenaApiKeyRecord,\n  AthenaAuthAdminLimits,\n  AthenaAuthAdminUserSessionRevokeBinding,\n  AthenaAuthAfterHookPayload,\n  AthenaAuthBaseURLConfig,\n  AthenaAuthBeforeHookPayload,\n  AthenaAuthBindings,\n  AthenaAuthCallOptions,\n  AthenaAuthCapabilitiesFeatures,\n  AthenaAuthCapabilitiesResult,\n  AthenaAuthCapabilitiesSource,\n  AthenaAuthCapabilitiesStatus,\n  AthenaAuthCapabilitiesStore,\n  AthenaAuthClientConfig,\n  AthenaAuthContext,\n  AthenaAuthCookieRuntimeInput,\n  AthenaAuthCredentials,\n  AthenaAuthDatabaseFactory,\n  AthenaAuthDomainEvent,\n  AthenaAuthEmailChangeResponse,\n  AthenaAuthEmailTemplateAttachment,\n  AthenaAuthEmailTemplateBuilder,\n  AthenaAuthEmailTemplateCreateFromDefinitionInput,\n  AthenaAuthEmailTemplateDefinition,\n  AthenaAuthEmailTemplateReactOverrides,\n  AthenaAuthEmailTemplateUpdateFromDefinitionInput,\n  AthenaAuthEmailTemplateVariableBinding,\n  AthenaAuthEndpointPath,\n  AthenaAuthErrorCode,\n  AthenaAuthErrorDetails,\n  AthenaAuthFilterOperator,\n  AthenaAuthGenericInput,\n  AthenaAuthGenericQueryInput,\n  AthenaAuthGetUserResponse,\n  AthenaAuthGuardFailure,\n  AthenaAuthGuardReason,\n  AthenaAuthGuardResult,\n  AthenaAuthGuardSuccess,\n  AthenaAuthHandlerResult,\n  AthenaAuthHookActor,\n  AthenaAuthHookContext,\n  AthenaAuthHookErrorInput,\n  AthenaAuthHooks,\n  AthenaAuthHttpHandlers,\n  AthenaAuthImplementedDomainEvent,\n  AthenaAuthLinkedAccount,\n  AthenaAuthMethod,\n  AthenaAuthOrganization,\n  AthenaAuthOrganizationBindings,\n  AthenaAuthOrganizationInvitation,\n  AthenaAuthOrganizationMember,\n  AthenaAuthorizationRightDefinition,\n  AthenaAuthorizationRoleDetail,\n  AthenaAuthPlugin,\n  AthenaAuthPluginContext,\n  AthenaAuthPluginHandlerContext,\n  AthenaAuthQueryPrimitive,\n  AthenaAuthQueryValue,\n  AthenaAuthReactEmailComponent,\n  AthenaAuthReactEmailConfig,\n  AthenaAuthReactEmailEventPhase,\n  AthenaAuthReactEmailProps,\n  AthenaAuthReactEmailRenderEvent,\n  AthenaAuthReactEmailRenderInput,\n  AthenaAuthReactEmailRenderOptions,\n  AthenaAuthRequestContext,\n  AthenaAuthRequestInput,\n  AthenaAuthReservedDomainEvent,\n  AthenaAuthResetPasswordBinding,\n  AthenaAuthResult,\n  AthenaAuthRevokeSessionRequest,\n  AthenaAuthSearchOperator,\n  AthenaAuthServer,\n  AthenaAuthServerApi,\n  AthenaAuthServerBindings,\n  AthenaAuthServerConfig,\n  AthenaAuthServerRuntimeOptions,\n  AthenaAuthSession,\n  AthenaAuthSessionResponse,\n  AthenaAuthSessionRevokeBinding,\n  AthenaAuthSignInResponse,\n  AthenaAuthSignOutResponse,\n  AthenaAuthSocialProviderConfig,\n  AthenaAuthSocialProviderExtensions,\n  AthenaAuthSocialRedirectResponse,\n  AthenaAuthStatusResponse,\n  AthenaAuthTrustedOrigins,\n  AthenaAuthTrustedProviders,\n  AthenaAuthUser,\n  AthenaChangeEmailRequest,\n  AthenaChangePasswordRequest,\n  AthenaDeleteUserCallbackRequest,\n  AthenaDeleteUserRequest,\n  AthenaDeleteUserResponse,\n  AthenaEmailSignInRequest,\n  AthenaEmailSignUpRequest,\n  AthenaForgetPasswordRequest,\n  AthenaLinkSocialRequest,\n  AthenaOAuthAccountTokenRequest,\n  AthenaOAuthTokenBundle,\n  AthenaPasskeyRecord,\n  AthenaResetPasswordRequest,\n  AthenaSendVerificationEmailRequest,\n  AthenaSocialSignInRequest,\n  AthenaUnlinkAccountRequest,\n  AthenaUpdateUserRequest,\n  AthenaUsernameSignInRequest,\n  AthenaVerifyEmailRequest,\n  AuthBindings,\n  AuthOAuthProvider,\n  AuthorizationCapabilities,\n  AuthorizationSnapshot,\n  AuthSocialProvider,\n  AuthSocialProviderBuiltin,\n  RoleDescriptor,\n} from \"./auth/index.ts\";\nexport {\n  ATHENA_AUTH_ADMIN_LIMITS,\n  ATHENA_AUTH_BASE_ERROR_CODES,\n  ATHENA_AUTH_DOMAIN_EVENTS,\n  ATHENA_AUTH_EMBEDDED_CAPABILITY_SNAPSHOT,\n  ATHENA_AUTH_IMPLEMENTED_DOMAIN_EVENTS,\n  ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n  ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n  ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n  ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n  ATHENA_AUTH_RESERVED_DOMAIN_EVENTS,\n  ATHENA_AUTHORIZATION_SNAPSHOT_INVALID,\n  AthenaAuthOperationError,\n  AUTH_EMAIL_EVENT_CATALOG,\n  AuthorizationSnapshotInvalidError,\n  athenaAuth,\n  authEmailEvents,\n  capabilitiesFromRights,\n  createAthenaAuthCapabilitiesStore,\n  createAuthReactEmailInput,\n  createEmbeddedCapabilitySnapshot,\n  defineAthenaAuthConfig,\n  defineAthenaAuthHooks,\n  defineAuthEmailTemplate,\n  flattenAuthEmailEvents,\n  isAuthorizationAssignmentConflict,\n  isCapabilityEnabled,\n  isPasskeyOnboardingEnabled,\n  isSocialCapabilityEnabled,\n  parseAuthorizationSnapshot,\n  renderAthenaReactEmail,\n  renderAuthEmailFragment,\n  requireAthenaAuthResult,\n  resolveSocialProvidersForUi,\n} from \"./auth/index.ts\";\nexport type {\n  AthenaErrorInput,\n  AthenaOperationContext,\n  IntCoercionOptions,\n  NormalizedAthenaError,\n  RequireAffectedOptions,\n  RetryBackoffStrategy,\n  RetryConfig,\n  UnwrapOneOptions,\n  UnwrapOptions,\n} from \"./auxiliaries.js\";\nexport {\n  AthenaError,\n  AthenaErrorCategory,\n  AthenaErrorCode,\n  AthenaErrorKind,\n  assertInt,\n  coerceInt,\n  isOk,\n  normalizeAthenaError,\n  parseBooleanFlag,\n  requireAffected,\n  requireSuccess,\n  unwrap,\n  unwrapOne,\n  unwrapRows,\n  withRetry,\n} from \"./auxiliaries.js\";\nexport type {\n  AthenaBillingCallOptions,\n  AthenaBillingClientConfig,\n  AthenaBillingEnvelope,\n  AthenaBillingHttpMethod,\n  AthenaBillingJson,\n  AthenaBillingModule,\n  BillingConnectionRefInput,\n  BillingCreateConnectionInput,\n  BillingEnsureCustomerInput,\n  BillingListQuery,\n  BillingProvisionSinksInput,\n  BillingReconcileInput,\n  BillingUpdateConnectionInput,\n  BillingUpdateCustomerInput,\n} from \"./billing/index.ts\";\nexport {\n  AthenaBillingError,\n  billingSdkManifest,\n  createBillingModule,\n} from \"./billing/index.ts\";\nexport {\n  AthenaChatError,\n  chatSdkManifest,\n  unwrapChatMessage,\n  unwrapChatRoom,\n} from \"./chat/module.ts\";\nexport type * from \"./chat/types.js\";\nexport type {\n  AthenaClientAdminModule,\n  AthenaClientSystemModule,\n  AthenaFromOptions,\n  AthenaQueryTraceCallsite,\n  AthenaQueryTraceEvent,\n  AthenaQueryTraceOptions,\n  AthenaRequestMethod,\n  AthenaRequestOptions,\n  AthenaRequestQueryValueMap,\n  AthenaRequestResponse,\n  AthenaRequestService,\n  AthenaResult,\n  AthenaResultError,\n  RpcOrderOptions,\n  RpcQueryBuilder,\n  TableQueryBuilder,\n} from \"./client.js\";\nexport type {\n  AthenaExecutionMode,\n  AthenaExecutionModeInput,\n  AthenaExecutionPrefer,\n  AthenaExecutionPreferInput,\n  AthenaResolvedExecutionMode,\n} from \"./cloudflare/execution-mode.ts\";\nexport { resolveAthenaExecutionMode } from \"./cloudflare/execution-mode.ts\";\nexport type { AthenaClientCapabilities } from \"./cloudflare/types.ts\";\nexport type {\n  AthenaCompatibilityReport,\n  AthenaCompatibilityWarning,\n} from \"./compatibility/report.ts\";\nexport {\n  buildCompatibilityReportFromHealth,\n  buildUndiscoveredCompatibilityReport,\n} from \"./compatibility/report.ts\";\nexport type {\n  AnyPageRequest,\n  AthenaErrorBody,\n  AthenaErrorResponse,\n  AthenaTransportErrorCode as AthenaTransportErrorCodeName,\n  CursorPageRequest,\n  JsonObject,\n  JsonPrimitive,\n  JsonValue,\n  LimitPolicy,\n  OffsetPage,\n  OffsetPageRequest,\n  Page,\n  PaginationLimitPolicyName,\n  SequencePage,\n  SequencePageRequest,\n} from \"./contracts/v1/index.ts\";\nexport {\n  AthenaTransportErrorCode,\n  PaginationLimitPolicy,\n} from \"./contracts/v1/index.ts\";\nexport type {\n  AthenaDbModule,\n  AthenaTransactionClient,\n} from \"./db/module.js\";\nexport type {\n  AthenaExecutableOutput,\n  AthenaTransactionBackend,\n  AthenaTransactionCapabilities,\n  AthenaTransactionErrorCode,\n  AthenaTransactionIsolationLevel,\n  AthenaTransactionOptions,\n  AthenaTransactionResults,\n} from \"./db/transaction/index.ts\";\nexport {\n  AthenaTransactionError,\n  isAthenaTransactionError,\n} from \"./db/transaction/index.ts\";\nexport type {\n  AthenaEmailAttachment,\n  AthenaEmailAttachmentFailureMode,\n  AthenaEmailAttachmentPolicy,\n  AthenaEmailConfig,\n  AthenaEmailDefaults,\n  AthenaEmailDeliveryKind,\n  AthenaEmailDeliveryPort,\n  AthenaEmailDeliveryResult,\n  AthenaEmailDiagnostics,\n  AthenaEmailMessage,\n  AthenaEmailModule,\n  AthenaEmailProvider,\n  AthenaEmailProviderCapabilities,\n  AthenaEmailProviderRuntime,\n  AthenaEmailTemplate,\n  AthenaEmailTemplateRenderInput,\n  AthenaEmailTemplateSelector,\n  AthenaEmailTemplateSendInput,\n  AthenaEmailTemplateStore,\n  AthenaEmailTemplatesConfig,\n  AthenaEmailTemplatesModule,\n  AthenaEmailTemplateVariableBinding,\n  AthenaRenderedEmailTemplate,\n  AthenaResolvedEmailMessage,\n} from \"./email/index.ts\";\nexport {\n  ATHENA_EMAIL_DELIVERY_FAILED,\n  ATHENA_EMAIL_MESSAGE_INVALID,\n  ATHENA_EMAIL_PROVIDER_INVALID,\n  ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n  ATHENA_EMAIL_PROVIDER_UNSUPPORTED_RUNTIME,\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  assertAthenaEmailProviderRuntime,\n  createEmailDeliveryPort,\n  defineAthenaEmailProvider,\n  httpEmailProvider,\n  isAthenaEmailError,\n  isAthenaEmailProvider,\n  resend,\n} from \"./email/index.ts\";\nexport {\n  consoleEmailProvider,\n  consoleEmailProvider as createConsoleEmailProvider,\n} from \"./email/providers/console.ts\";\nexport { verifyAthenaGatewayUrl } from \"./gateway/client.ts\";\nexport { AthenaGatewayError, isAthenaGatewayError } from \"./gateway/errors.ts\";\nexport type {\n  AthenaRouteClassification,\n  AthenaRouteDescriptor,\n  AthenaRouteStatus,\n} from \"./gateway/routes.ts\";\nexport {\n  ATHENA_GATEWAY_ROUTES,\n  ATHENA_ROUTE_MANIFEST,\n  getAthenaRouteDescriptor,\n  isDeprecatedAthenaRoute,\n} from \"./gateway/routes.ts\";\nexport type {\n  AthenaConditionCastType,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayErrorCode,\n  AthenaGatewayErrorDetails,\n  AthenaJsonArray,\n  AthenaJsonObject,\n  AthenaJsonPrimitive,\n  AthenaJsonValue,\n  AthenaRpcCallOptions,\n  AthenaRpcFilter,\n  AthenaRpcFilterOperator,\n  AthenaRpcOrder,\n  AthenaRpcPayload,\n  BackendConfig,\n  BackendType,\n} from \"./gateway/types.js\";\nexport { Backend } from \"./gateway/types.js\";\nexport { normalizeAthenaGatewayBaseUrl } from \"./gateway/url.ts\";\nexport type {\n  AthenaConfig,\n  AthenaGeneratorConfig,\n  AthenaPolicyProjectConfig,\n  AthenaToolingEntrypoints,\n  EnsureGeneratorConfigFileOptions,\n  EnsureGeneratorConfigFileResult,\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  GeneratedManifest,\n  GeneratorArtifactKind,\n  GeneratorConfigEnsureSummary,\n  GeneratorConfigFileAction,\n  GeneratorConfigProviderMode,\n  GeneratorDatabaseAuthorityMode,\n  GeneratorDatabaseAuthoritySource,\n  GeneratorEnvBooleanOptions,\n  GeneratorEnvJsonOptions,\n  GeneratorEnvListOptions,\n  GeneratorEnvOneOfOptions,\n  GeneratorEnvStringOptions,\n  GeneratorExperimentalFlags,\n  GeneratorFeatureFlags,\n  GeneratorFilterConfig,\n  GeneratorInternalConfig,\n  GeneratorNamingConfig,\n  GeneratorOutputConfig,\n  GeneratorOutputFormat,\n  GeneratorOutputPreset,\n  GeneratorOutputTargets,\n  GeneratorProviderConfig,\n  GeneratorSchemaProvenance,\n  GeneratorSchemaSelection,\n  GeneratorTableSelection,\n  LoadAthenaConfigOptions,\n  LoadedAthenaConfig,\n  LoadedGeneratorConfig,\n  LoadGeneratorConfigOptions,\n  NamingStyle,\n  NormalizedAthenaGeneratorConfig,\n  NormalizedGeneratorFilterConfig,\n  NormalizedGeneratorOutputConfig,\n  RenderGeneratedFileHeaderOptions,\n  RenderObjectPropertyOptions,\n  ResolvedGeneratorDatabaseAuthority,\n  ResolveGeneratorDatabaseAuthorityOptions,\n  RunGeneratorOptions,\n  RunGeneratorResult,\n  SkippedGeneratedArtifact,\n  SkippedGeneratedArtifactReason,\n} from \"./generator/index.ts\";\nexport {\n  ATHENA_GENERATED_FILE_PREFIX,\n  ATHENA_GENERATED_ROOT,\n  applyGeneratorProjectEnv,\n  DEFAULT_POSTGRES_SCHEMAS,\n  defineAthenaConfig,\n  defineGeneratorConfig,\n  detectAuthorityMode,\n  detectGeneratorProviderMode,\n  discoverPostgresSchemas,\n  ensureGeneratorConfigFile,\n  filterIntrospectionSnapshot,\n  findGeneratorConfigPath,\n  formatSchemaFallbackMessages,\n  GENERATED_FILE_BANNER,\n  GENERATED_MANIFEST_REL,\n  generateArtifactsFromSnapshot,\n  generatorEnv,\n  isAthenaGeneratedSource,\n  loadAthenaConfig,\n  loadGeneratorConfig,\n  mergeSchemaSelections,\n  normalizeDiscoveredSchemas,\n  normalizeGeneratorConfig,\n  normalizeSchemaSelection,\n  normalizeTableSelection,\n  patchSchemasInConfigSource,\n  renderGeneratedFileHeader,\n  renderGeneratorConfigFile,\n  renderObjectKey,\n  renderObjectLiteral,\n  renderObjectProperty,\n  resolveGeneratorDatabaseAuthority,\n  resolveGeneratorProvider,\n  resolvePostgresColumnType,\n  resolveProviderSchemas,\n  runSchemaGenerator,\n  schemasEqual,\n  stripGeneratedFileHeader,\n  withGeneratedFileBanner,\n} from \"./generator/index.ts\";\nexport {\n  clampPaginationLimit,\n  mapAthenaErrorCodeToTransportCode,\n  mapChatMessagePageWireToSequencePage,\n  mapLimitPlusOneToPage,\n  mapNormalizedAthenaErrorToErrorResponse,\n  mapOffsetWindowToOffsetPage,\n} from \"./mappers/index.ts\";\nexport {\n  athenaNotificationCatalogDemo,\n  NOTIFICATION_CATALOG,\n} from \"./notifications/catalog.ts\";\nexport type {\n  AthenaNotificationsConfig,\n  NotificationCatalogEntry,\n} from \"./notifications/types.ts\";\nexport type {\n  ActiveOrganizationSessionLike,\n  EnsureActiveOrganizationOptions,\n  EnsureActiveOrganizationResult,\n  OrganizationLike,\n} from \"./organization/index.ts\";\nexport { ensureActiveOrganization } from \"./organization/index.ts\";\nexport {\n  canonicalizeAthenaValue,\n  hashAthenaValue,\n} from \"./query/canonicalize.ts\";\nexport type {\n  AthenaCacheContextDescriptor,\n  AthenaCacheScope,\n  AthenaExecutable,\n  AthenaExecuteOptions,\n  AthenaFieldDependency,\n  AthenaFilterDescriptor,\n  AthenaModelDependency,\n  AthenaOrderDescriptor,\n  AthenaPagination,\n  AthenaPredicateNode,\n  AthenaProjectionDescriptor,\n  AthenaProjectionKind,\n  AthenaQueryDependencyDescriptor,\n  AthenaQueryDescriptor,\n  AthenaQueryDescriptorCompileInput,\n  AthenaQueryFieldDependencyKind,\n  AthenaQueryOperation,\n  AthenaQueryTarget,\n  AthenaRangeDescriptor,\n  AthenaRelationDependency,\n  AthenaRelationDescriptor,\n  AthenaSelectionNode,\n} from \"./query/descriptor.ts\";\nexport {\n  ATHENA_EXECUTABLE,\n  buildAthenaModelScopeKey,\n  buildAthenaQueryKey,\n  compileAthenaQueryDescriptor,\n  createCapturedAthenaExecutable,\n  isAthenaExecutable,\n  resolveAthenaQueryTarget,\n} from \"./query/descriptor.ts\";\nexport {\n  type RelationalComparisonOperatorV1,\n  type RelationalPredicateV1,\n  type RelationalQueryRequestV1,\n  type RelationalRelationPredicateV1,\n  type RelationalRelationQuantifierV1,\n  type RelationalRelationReferenceV1,\n  type RelationalRelationSelectionV1,\n  serializeRelationalQueryV1,\n  serializeRelationalQueryV2,\n  type RelationalQueryRequestV2,\n  type RelationalRelationSelectionV2,\n} from \"./query/engine/relational-serializer.ts\";\nexport type { AthenaQueryExplanation } from \"./query/explain.ts\";\nexport { explainAthenaQuery } from \"./query/explain.ts\";\nexport type {\n  AthenaEntityContextIdentity,\n  AthenaEntityKey,\n  AthenaModelIdentity,\n  AthenaPrimaryKey,\n} from \"./query/model-identity.ts\";\nexport {\n  athenaEntityKeyToken,\n  createAthenaEntityKey,\n  entityKeyFromSinglePrimary,\n  modelIdentity,\n} from \"./query/model-identity.ts\";\nexport type {\n  AthenaModelView,\n  AthenaModelViewDefinition,\n  AthenaModelViewField,\n} from \"./query/model-view.ts\";\nexport { defineModelView } from \"./query/model-view.ts\";\nexport {\n  descriptorFromReadQueryDefinition,\n  readQueryDefinitionFromDescriptor,\n} from \"./query/read-query-descriptor.ts\";\nexport * from \"./query/read-query-public.ts\";\nexport type {\n  AthenaFindManyOptions,\n  AthenaFindManyResult,\n  AthenaOrderBy,\n  AthenaRelationOrderBy,\n  AthenaRelationSelectNode,\n  AthenaRelationSelection,\n  AthenaSelectShape,\n  AthenaValidatedSelectShape,\n  AthenaWhere,\n  AthenaWhereBooleanOperand,\n  AthenaWhereOperatorInput,\n} from \"./query-ast.ts\";\nexport type {\n  AthenaDeleteDebugAst,\n  AthenaFindManyDebugAst,\n  AthenaInsertDebugAst,\n  AthenaQueryDebugAst,\n  AthenaRawQueryDebugAst,\n  AthenaRpcBuilderStateAst,\n  AthenaRpcDebugAst,\n  AthenaSelectDebugAst,\n  AthenaSelectDebugTransport,\n  AthenaTableBuilderStateAst,\n  AthenaUpdateDebugAst,\n  AthenaUpsertDebugAst,\n} from \"./query-debug-ast.ts\";\nexport { getAthenaDebugAst } from \"./query-debug-ast.ts\";\nexport type {\n  AthenaNormalizedHealth,\n  AthenaReleaseChannel,\n  AthenaReleaseIdentity,\n} from \"./release/identity.ts\";\nexport {\n  normalizeAthenaHealthPayload,\n  normalizeAthenaReleaseIdentity,\n} from \"./release/identity.ts\";\nexport type {\n  AthenaDataLifecycleConfig,\n  AthenaDataLifecycleEvent,\n  AthenaDataLifecycleHook,\n  AthenaDataLifecycleHooks,\n} from \"./runtime/data/lifecycle/index.ts\";\nexport type { AthenaContractIssue } from \"./runtime/index.ts\";\nexport {\n  AthenaContractParseError,\n  athenaErrorBodySchema,\n  athenaErrorResponseSchema,\n  athenaTransportErrorCodeSchema,\n  cursorPageRequestSchema,\n  jsonObjectSchema,\n  jsonPrimitiveSchema,\n  jsonValueSchema,\n  offsetPageRequestSchema,\n  offsetPageSchema,\n  pageSchema,\n  parseContractOrThrow,\n  safeParseContract,\n  sequencePageRequestSchema,\n  sequencePageSchema,\n} from \"./runtime/index.ts\";\nexport type {\n  AnyColumnBuilder,\n  AthenaClientModelForTableName,\n  AthenaClientModelsInput,\n  AthenaClientTableName,\n  AthenaColumnBuilder,\n  AthenaIdentityColumnBuilder,\n  AthenaLegacyNumberColumnBuilder,\n  AthenaModelTarget,\n  AthenaSchemaSnapshot,\n  AthenaTableDef,\n  AthenaTableSchemaBundle,\n  ColumnRuntimeConfig,\n  DatabaseDef,\n  DecimalColumnOptions,\n  DiffSchemasInput,\n  DiffSchemasOptions,\n  FormValuesFromColumns,\n  FormValuesOf,\n  InsertFromColumns,\n  InsertOf,\n  IntrospectionColumn,\n  IntrospectionInspectOptions,\n  IntrospectionRelation,\n  IntrospectionSchema,\n  IntrospectionSnapshot,\n  IntrospectionTable,\n  IntrospectionTypeKind,\n  ModelAt,\n  ModelColumnKind,\n  ModelColumnMetadata,\n  ModelDef,\n  ModelFormAdapter,\n  ModelFormDefaults,\n  ModelFormNullishMode,\n  ModelFormValues,\n  ModelMetadata,\n  ModelRelationKind,\n  ModelRelationMetadata,\n  ModelSqlDialect,\n  ModelSqlFile,\n  ModelSqlInput,\n  ModelSqlOptions,\n  ModelsToSqlFilesOptions,\n  PostgresIntrospectionProviderOptions,\n  RegistryDef,\n  RowFromColumns,\n  RowOf,\n  SchemaColumn,\n  SchemaColumnType,\n  SchemaDef,\n  SchemaDiff,\n  SchemaDiffErrorCode,\n  SchemaDiffOperation,\n  SchemaDiffOperationKind,\n  SchemaDiffSummary,\n  SchemaForeignKey,\n  SchemaIndex,\n  SchemaIntrospectionProvider,\n  SchemaNamespace,\n  SchemaPrimaryKey,\n  SchemaReferentialAction,\n  SchemaSnapshotFromIntrospectionOptions,\n  SchemaSnapshotFromModelsOptions,\n  SchemaTable,\n  SchemaTableIdentity,\n  SchemaUniqueConstraint,\n  TenantContext,\n  TenantContextValue,\n  TenantKeyMap,\n  ToModelFormDefaultsOptions,\n  ToModelPayloadOptions,\n  UpdateFromColumns,\n  UpdateOf,\n} from \"./schema/index.ts\";\nexport {\n  ATHENA_INTERNAL_SCHEMAS,\n  ATHENA_SCHEMA_SNAPSHOT_VERSION,\n  bigint,\n  boolean,\n  columnsEqual,\n  columnTypesEqual,\n  createModelFormAdapter,\n  createPostgresIntrospectionProvider,\n  decimal,\n  defineDatabase,\n  defineModel,\n  defineRegistry,\n  defineSchema,\n  diffSchemas,\n  emptySchemaSnapshot,\n  enumeration,\n  integer,\n  isSchemaDiffEmpty,\n  json,\n  modelsToSql,\n  modelsToSqlFiles,\n  normalizeDefaultExpression,\n  normalizeReferentialAction,\n  normalizeSchemaColumnType,\n  normalizeSchemaSnapshot,\n  number,\n  numeric,\n  parseSchemaTypeString,\n  primaryKeysEqual,\n  SchemaDiffError,\n  schemaSnapshotFromIntrospection,\n  schemaSnapshotFromModels,\n  smallint,\n  sqlD1,\n  sqlPostgres,\n  sqlSqlite,\n  string,\n  summarizeSchemaDiffOperations,\n  table,\n  tableIdentityKey,\n  toModelFormDefaults,\n  toModelPayload,\n  validateSchemaSnapshot,\n} from \"./schema/index.ts\";\nexport type { WriteModelSqlFilesOptions } from \"./schema/model-sql-write.ts\";\nexport { writeModelSqlFiles } from \"./schema/model-sql-write.ts\";\nexport { identifier } from \"./sql-identifiers.ts\";\nexport {\n  createHostCanonicalQueryCompiler,\n} from \"./sqlite-local/compiler.ts\";\nexport { createProcessCanonicalQueryCompiler } from \"./sqlite-local/host-compiler.ts\";\nexport type {\n  AthenaCanonicalQueryCompiler,\n  AthenaCompiledQuery,\n} from \"./sqlite-local/compiler.ts\";\nexport type {\n  AthenaStorageEnv,\n  AthenaStorageFileConfig,\n  AthenaStorageFileDeleteInput,\n  AthenaStorageFileDownloadInput,\n  AthenaStorageFileListInput,\n  AthenaStorageFileModule,\n  AthenaStorageFileUploadInput,\n  AthenaStorageFileUploadResult,\n  AthenaStoragePathContext,\n  AthenaStoragePrefixPath,\n  AthenaStorageTemplateValue,\n  AthenaStorageTemplateVars,\n  AthenaStorageUploadConstraints,\n  AthenaStorageUploadedFile,\n  AthenaStorageUploadProgress,\n  AthenaStorageUploadProgressHandler,\n  AthenaStorageUploadSource,\n} from \"./storage/file.js\";\nexport {\n  createStorageFileModule,\n  DEFAULT_MULTIPART_PART_SIZE_BYTES,\n  DEFAULT_MULTIPART_THRESHOLD_BYTES,\n  resolveStoragePath,\n} from \"./storage/file.js\";\nexport type * from \"./storage/module.js\";\nexport type {\n  AthenaEnvelope,\n  AthenaStorageBinaryCallOptions,\n  AthenaStorageCallOptions,\n  AthenaStorageClientConfig,\n  AthenaStorageErrorDetails,\n  AthenaStorageErrorHandler,\n  AthenaStorageErrorInput,\n  AthenaStorageModule,\n  CreateStorageCatalogRequest,\n  CreateStorageUploadUrlRequest,\n  CreateStorageUploadUrlsRequest,\n  DeleteStorageFolderRequest,\n  GetStorageFileUrlQuery,\n  ListStorageFilesRequest,\n  ManagedFileRecord,\n  MoveStorageFolderRequest,\n  PresignedFileUrlResponse,\n  S3CatalogItem,\n  S3CredentialListItem,\n  SetStorageFileVisibilityRequest,\n  StorageBatchUploadUrlResponse,\n  StorageFileAccessPurpose,\n  StorageFileMutationResponse,\n  StorageFolderMutationResponse,\n  StorageListFilesResponse,\n  StorageUploadUrlResponse,\n  UpdateStorageCatalogRequest,\n  UpdateStorageFileRequest,\n} from \"./storage/module.js\";\nexport {\n  AthenaStorageError,\n  AthenaStorageErrorCode,\n  createAthenaStorageError,\n  requireStorageManifestRoute,\n  storageLiveHttpRoutes,\n  storageSdkManifest,\n} from \"./storage/module.ts\";\nexport type {\n  AthenaTableCatalogColumn,\n  AthenaTableCatalogQueryClient,\n  AthenaTableCatalogRelation,\n  AthenaTableCatalogResponse,\n  AthenaTableCatalogTable,\n  AthenaTableSchemaConfig,\n  AthenaTableSchemaHandlerOptions,\n  AthenaTableShowcaseConfig,\n  FetchAthenaTableCatalogOptions,\n  TableCatalogColumn,\n  TableCatalogRelation,\n  TableCatalogResponse,\n  TableCatalogTable,\n} from \"./tables/index.ts\";\n// Table schema catalog + App Router handlers (`/api/tables/schema`)\nexport {\n  ATHENA_TABLE_SCHEMA_ROUTE,\n  buildAthenaTableCatalogQueries,\n  createAthenaTableSchemaHandlers,\n  fetchAthenaTableCatalog,\n  fetchTableCatalog,\n  handleAthenaTableSchemaPost,\n  hasAthenaTableSchemaCredentials,\n  isAthenaTableSchemaConfig,\n  parseAthenaTableSchemaScope,\n} from \"./tables/index.ts\";\nexport type {\n  AthenaAuthConfig,\n  AthenaBillingConfig,\n  AthenaChatConfig,\n  AthenaChatMode,\n  AthenaClient,\n  AthenaClientConfig,\n  AthenaClientConfigWithR2,\n  AthenaClientRuntimeConfig,\n  AthenaClientServicesConfig,\n  AthenaClientWithR2Storage,\n  AthenaConfigurationErrorCode,\n  AthenaDbConfig,\n  AthenaRequestContext,\n  AthenaRequestContextProvider,\n  AthenaService,\n  AthenaSqliteBindValue,\n  AthenaSqliteConfig,\n  AthenaSqliteExecutionOptions,\n  AthenaSqliteExecutionResult,\n  AthenaSqliteExecutor,\n  AthenaSqliteExecutorCapabilities,\n  AthenaSqliteStorageValue,\n  AthenaSqliteTransaction,\n  AthenaStorageConfig,\n} from \"./v3-client.ts\";\n// Athena client\nexport { AthenaConfigurationError, createClient } from \"./v3-client.ts\";\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","/**\n * Canonical Athena gateway route descriptors for SDK route selection.\n *\n * Classifications mirror `docs/release/athena-5-route-manifest.json`.\n * Do not invent a second handwritten sunset policy — keep this table aligned\n * with the monorepo manifest when either changes.\n */\n\nexport type AthenaRouteClassification =\n  | \"Retain\"\n  | \"Migrate\"\n  | \"Deprecate\"\n  | \"Remove\"\n  | \"Internalize\"\n  | \"Replace\";\n\nexport type AthenaRouteStatus = \"retained\" | \"deprecated\" | \"removed\";\n\nexport interface AthenaRouteDescriptor {\n  classification: AthenaRouteClassification;\n  methods: readonly string[];\n  path: string;\n  protocol: number;\n  reason: string;\n  replacement: string | null;\n  status: AthenaRouteStatus;\n}\n\nfunction classificationToStatus(\n  classification: AthenaRouteClassification\n): AthenaRouteStatus {\n  if (classification === \"Deprecate\" || classification === \"Migrate\") {\n    return \"deprecated\";\n  }\n  if (classification === \"Remove\") {\n    return \"removed\";\n  }\n  return \"retained\";\n}\n\n/** Structured CRUD + raw query paths used by the JS SDK. */\nexport const ATHENA_GATEWAY_ROUTES = {\n  delete: \"/gateway/delete\",\n  health: \"/health\",\n  insert: \"/gateway/insert\",\n  rawQuery: \"/gateway/query\",\n  root: \"/\",\n  rpc: \"/gateway/rpc\",\n  select: \"/gateway/fetch\",\n  update: \"/gateway/update\",\n} as const;\n\nexport type AthenaGatewayRouteKey = keyof typeof ATHENA_GATEWAY_ROUTES;\n\n/**\n * Inventory sourced from docs/release/athena-5-route-manifest.json (gateway + health).\n * Keep in sync when the monorepo manifest changes.\n */\nexport const ATHENA_ROUTE_MANIFEST: readonly AthenaRouteDescriptor[] = [\n  {\n    classification: \"Retain\",\n    methods: [\"POST\", \"GET\"],\n    path: \"/gateway/fetch\",\n    protocol: 1,\n    reason: \"Canonical structured read API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/insert\",\n    protocol: 1,\n    reason: \"Canonical write API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/update\",\n    protocol: 1,\n    reason: \"Canonical update API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/delete\",\n    protocol: 1,\n    reason: \"Canonical delete API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Deprecate\",\n    methods: [\"POST\"],\n    path: \"/gateway/query\",\n    protocol: 1,\n    reason:\n      \"Raw SQL is harder to secure and bypasses structured metadata ownership\",\n    replacement:\n      \"Structured /gateway/fetch|insert|update|delete with compiled statements\",\n    status: classificationToStatus(\"Deprecate\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"GET\"],\n    path: \"/health\",\n    protocol: 1,\n    reason: \"Diagnostics surface; Athena 5 adds release identity\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n] as const;\n\nexport function getAthenaRouteDescriptor(\n  path: string\n): AthenaRouteDescriptor | undefined {\n  return ATHENA_ROUTE_MANIFEST.find((route) => route.path === path);\n}\n\nexport function isDeprecatedAthenaRoute(path: string): boolean {\n  return getAthenaRouteDescriptor(path)?.status === \"deprecated\";\n}\n","/**\n * Backend-neutral mutation row-count extraction.\n *\n * Public field: AthenaResult.affectedRows\n * Transports feed this helper; fluent builders stay backend-neutral.\n */\n\nconst MUTATION_ENDPOINTS = new Set([\n  \"/gateway/insert\",\n  \"/gateway/update\",\n  \"/gateway/delete\",\n]);\n\nconst PRIMARY_ALIAS_KEYS = [\n  \"affectedRows\",\n  \"affected_rows\",\n  \"row_count\",\n  \"rows_affected\",\n  \"rowCount\",\n  \"rows_written\",\n  \"changes\",\n] as const;\n\nconst FALLBACK_COUNT_KEYS = [\"count\"] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction asFiniteNumber(value: unknown): number | undefined {\n  return typeof value === \"number\" && Number.isFinite(value)\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 {\n  authorizationAffordancesFromRights,\n  capabilitiesFromRights,\n} from \"../runtime/authorization/capabilities.ts\";\nexport {\n  ATHENA_AUTHORIZATION_SNAPSHOT_INVALID,\n  AuthorizationSnapshotInvalidError,\n  parseAuthorizationSnapshot,\n} from \"../runtime/authorization/parse-snapshot.ts\";\nexport type {\n  AthenaAuthorizationRightDefinition,\n  AthenaAuthorizationRoleDetail,\n  AuthorizationCapabilities,\n  AuthorizationSnapshot,\n  RoleDescriptor,\n} from \"../runtime/authorization/types.ts\";\nexport type { AthenaAuthorizationAssignmentConflictError } from \"./authorization/result.ts\";\nexport {\n  AthenaAuthOperationError,\n  isAuthorizationAssignmentConflict,\n  requireAthenaAuthResult,\n} from \"./authorization/result.ts\";\nexport type { BetterAuthCompatibilityAdapter } from \"./better-auth-adapter.ts\";\nexport { createBetterAuthCompatibilityAdapter } from \"./better-auth-adapter.ts\";\nexport type {\n  AthenaAuthCapabilitiesFeatures,\n  AthenaAuthCapabilitiesResult,\n  AthenaAuthCapabilitiesSource,\n  AthenaAuthCapabilitiesStatus,\n  AthenaAuthCapabilitiesStore,\n  AthenaAuthPasskeyCapabilityDetail,\n} from \"./capabilities.ts\";\nexport {\n  ATHENA_AUTH_EMBEDDED_CAPABILITY_SNAPSHOT,\n  createAthenaAuthCapabilitiesStore,\n  createEmbeddedCapabilitySnapshot,\n  isCapabilityEnabled,\n  isPasskeyOnboardingEnabled,\n  isSocialCapabilityEnabled,\n  resolveSocialProvidersForUi,\n} from \"./capabilities.ts\";\nexport {\n  AUTH_EMAIL_EVENT_CATALOG,\n  authEmailEvents,\n  flattenAuthEmailEvents,\n  renderAuthEmailFragment,\n} from \"./email/index.ts\";\nexport type {\n  AthenaAuthAfterHookPayload,\n  AthenaAuthBeforeHookPayload,\n  AthenaAuthDomainEvent,\n  AthenaAuthHookActor,\n  AthenaAuthHookContext,\n  AthenaAuthHookErrorInput,\n  AthenaAuthHooks,\n  AthenaAuthImplementedDomainEvent,\n  AthenaAuthReservedDomainEvent,\n} from \"./hooks/index.ts\";\nexport {\n  ATHENA_AUTH_DOMAIN_EVENTS,\n  ATHENA_AUTH_IMPLEMENTED_DOMAIN_EVENTS,\n  ATHENA_AUTH_RESERVED_DOMAIN_EVENTS,\n  defineAthenaAuthHooks,\n} from \"./hooks/index.ts\";\nexport type { AthenaAuthAdminLimits } from \"./limits.ts\";\nexport {\n  ATHENA_AUTH_ADMIN_LIMITS,\n  ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n  ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n  ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n  ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n} from \"./limits.ts\";\nexport {\n  createAuthReactEmailInput,\n  defineAuthEmailTemplate,\n  renderAthenaReactEmail,\n} from \"./react-email.ts\";\nexport type {\n  AthenaAuthBaseURLConfig,\n  AthenaAuthContext,\n  AthenaAuthCookieRuntimeInput,\n  AthenaAuthDatabaseFactory,\n  AthenaAuthHandlerResult,\n  AthenaAuthPlugin,\n  AthenaAuthPluginContext,\n  AthenaAuthPluginHandlerContext,\n  AthenaAuthRequestContext,\n  AthenaAuthServer,\n  AthenaAuthServerApi,\n  AthenaAuthServerConfig,\n  AthenaAuthServerRuntimeOptions,\n  AthenaAuthSocialProviderConfig,\n  AthenaAuthTrustedOrigins,\n  AthenaAuthTrustedProviders,\n} from \"./server.ts\";\nexport {\n  ATHENA_AUTH_BASE_ERROR_CODES,\n  athenaAuth,\n  defineAthenaAuthConfig,\n} from \"./server.ts\";\nexport type { AthenaAuthSessionController } from \"./session-controller.ts\";\nexport { createAthenaAuthSessionController } from \"./session-controller.ts\";\nexport type {\n  AthenaSessionData,\n  ToSessionDataOptions,\n} from \"./session-data.ts\";\nexport { toSessionData } from \"./session-data.ts\";\nexport type {\n  AthenaSessionErrorCode,\n  AthenaSessionErrorContext,\n  ToAthenaSessionErrorKind,\n} from \"./session-errors.ts\";\nexport {\n  AthenaAuthConfigurationError,\n  AthenaAuthProtocolError,\n  AthenaAuthUpstreamError,\n  AthenaSessionError,\n  AthenaSessionOrganizationError,\n  AthenaUnauthenticatedError,\n  isAbortError,\n  toAthenaSessionError,\n} from \"./session-errors.ts\";\nexport type { SessionInvariantId } from \"./session-invariants.ts\";\nexport {\n  SESSION_INVARIANTS,\n  sessionInvariantMessage,\n} from \"./session-invariants.ts\";\nexport type {\n  AthenaAuthSessionListener,\n  AthenaAuthSessionSnapshot,\n  AthenaAuthSessionStatus,\n  AthenaAuthSessionStore,\n  AthenaInitialAuthState,\n} from \"./session-store.ts\";\nexport { createAthenaAuthSessionStore } from \"./session-store.ts\";\nexport type { DerivedSessionView } from \"./session-view.ts\";\nexport { deriveSessionView } from \"./session-view.ts\";\nexport type {\n  AthenaAuthGetTokenInput,\n  AthenaAuthTokenProvider,\n  AthenaAuthTokenProviderOptions,\n} from \"./token-provider.ts\";\nexport {\n  createAthenaAuthTokenProvider,\n  decodeJwtExpSeconds,\n  normalizeTokenAudiences,\n  tokenNeedsRefresh,\n} from \"./token-provider.ts\";\nexport type {\n  AthenaAdminEmailCreateRequest,\n  AthenaAdminEmailDeleteRequest,\n  AthenaAdminEmailEventTypeListResponse,\n  AthenaAdminEmailEventTypeRecord,\n  AthenaAdminEmailFailureCreateRequest,\n  AthenaAdminEmailFailureDeleteRequest,\n  AthenaAdminEmailFailureGetQuery,\n  AthenaAdminEmailFailureGetResponse,\n  AthenaAdminEmailFailureListQuery,\n  AthenaAdminEmailFailureListResponse,\n  AthenaAdminEmailFailureUpdateRequest,\n  AthenaAdminEmailFailureUpdateResponse,\n  AthenaAdminEmailGetQuery,\n  AthenaAdminEmailGetResponse,\n  AthenaAdminEmailListQuery,\n  AthenaAdminEmailListResponse,\n  AthenaAdminEmailTemplateCreateRequest,\n  AthenaAdminEmailTemplateDeleteRequest,\n  AthenaAdminEmailTemplateGetQuery,\n  AthenaAdminEmailTemplateGetResponse,\n  AthenaAdminEmailTemplateListQuery,\n  AthenaAdminEmailTemplateListResponse,\n  AthenaAdminEmailTemplateRecord,\n  AthenaAdminEmailTemplateSendRequest,\n  AthenaAdminEmailTemplateSendResponse,\n  AthenaAdminEmailTemplateUpdateRequest,\n  AthenaAdminEmailUpdateRequest,\n  AthenaAdminEmailUpdateResponse,\n  AthenaAdminListUsersFilterOperator,\n  AthenaAdminListUsersQuery,\n  AthenaAdminListUsersSearchOperator,\n  AthenaApiKeyRecord,\n  AthenaAuthAdminUserSessionRevokeBinding,\n  AthenaAuthBindings,\n  AthenaAuthCallOptions,\n  AthenaAuthClientConfig,\n  AthenaAuthCloneRoleRequest,\n  AthenaAuthCreateRoleRequest,\n  AthenaAuthCredentials,\n  AthenaAuthDeleteRoleRequest,\n  AthenaAuthEmailChangeResponse,\n  AthenaAuthEmailTemplateAttachment,\n  AthenaAuthEmailTemplateBuilder,\n  AthenaAuthEmailTemplateCreateFromDefinitionInput,\n  AthenaAuthEmailTemplateDefinition,\n  AthenaAuthEmailTemplateReactOverrides,\n  AthenaAuthEmailTemplateUpdateFromDefinitionInput,\n  AthenaAuthEmailTemplateVariableBinding,\n  AthenaAuthEndpointPath,\n  AthenaAuthErrorCode,\n  AthenaAuthErrorDetails,\n  AthenaAuthFilterOperator,\n  AthenaAuthGenericInput,\n  AthenaAuthGenericQueryInput,\n  AthenaAuthGetRoleRequest,\n  AthenaAuthGetTokenRequest,\n  AthenaAuthGetUserResponse,\n  AthenaAuthGuardFailure,\n  AthenaAuthGuardReason,\n  AthenaAuthGuardResult,\n  AthenaAuthGuardSuccess,\n  AthenaAuthHttpHandlers,\n  AthenaAuthLinkedAccount,\n  AthenaAuthMethod,\n  AthenaAuthOrganization,\n  AthenaAuthOrganizationBindings,\n  AthenaAuthOrganizationInvitation,\n  AthenaAuthOrganizationMember,\n  AthenaAuthQueryPrimitive,\n  AthenaAuthQueryValue,\n  AthenaAuthReactEmailComponent,\n  AthenaAuthReactEmailConfig,\n  AthenaAuthReactEmailEventPhase,\n  AthenaAuthReactEmailProps,\n  AthenaAuthReactEmailRenderEvent,\n  AthenaAuthReactEmailRenderInput,\n  AthenaAuthReactEmailRenderOptions,\n  AthenaAuthReplaceRoleRightsRequest,\n  AthenaAuthRequestInput,\n  AthenaAuthResetPasswordBinding,\n  AthenaAuthResult,\n  AthenaAuthRevokeSessionRequest,\n  AthenaAuthSearchOperator,\n  AthenaAuthServerBindings,\n  AthenaAuthSession,\n  AthenaAuthSessionResponse,\n  AthenaAuthSessionRevokeBinding,\n  AthenaAuthSignInResponse,\n  AthenaAuthSignOutResponse,\n  AthenaAuthSocialProviderExtensions,\n  AthenaAuthSocialRedirectResponse,\n  AthenaAuthStatusResponse,\n  AthenaAuthToken,\n  AthenaAuthUpdateRoleRequest,\n  AthenaAuthUser,\n  AthenaChangeEmailRequest,\n  AthenaChangePasswordRequest,\n  AthenaDeleteUserCallbackRequest,\n  AthenaDeleteUserRequest,\n  AthenaDeleteUserResponse,\n  AthenaEmailSignInRequest,\n  AthenaEmailSignUpRequest,\n  AthenaForgetPasswordRequest,\n  AthenaLinkSocialRequest,\n  AthenaOAuthAccountTokenRequest,\n  AthenaOAuthTokenBundle,\n  AthenaPasskeyRecord,\n  AthenaResetPasswordRequest,\n  AthenaSendVerificationEmailRequest,\n  AthenaSocialSignInRequest,\n  AthenaUnlinkAccountRequest,\n  AthenaUpdateUserRequest,\n  AthenaUsernameSignInRequest,\n  AthenaVerifyEmailRequest,\n  AuthBindings,\n  AuthOAuthProvider,\n  AuthSocialProvider,\n  AuthSocialProviderBuiltin,\n} from \"./types.ts\";\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 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 { 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 { 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","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 {\n  type AthenaRightKey,\n  tryParseAthenaRightKey,\n} from \"../../rights/key.ts\";\nimport { capabilitiesFromRights } from \"./capabilities.ts\";\nimport type {\n  AssignedRoleSummary,\n  AuthorizationCapabilities,\n  AuthorizationSnapshot,\n  RoleDescriptor,\n} from \"./types.ts\";\n\nexport const ATHENA_AUTHORIZATION_SNAPSHOT_INVALID =\n  \"ATHENA_AUTHORIZATION_SNAPSHOT_INVALID\";\n\nexport class AuthorizationSnapshotInvalidError extends Error {\n  readonly code = ATHENA_AUTHORIZATION_SNAPSHOT_INVALID;\n\n  constructor(message = \"Authorization snapshot is invalid.\") {\n    super(message);\n    this.name = \"AuthorizationSnapshotInvalidError\";\n  }\n}\n\nconst LEGACY_ROLE_NAME_KEYS = new Set([\n  \"admin\",\n  \"customer\",\n  \"member\",\n  \"owner\",\n  \"unauthorized\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isIntegerAtLeast(value: unknown, min: number): value is number {\n  return typeof value === \"number\" && Number.isInteger(value) && value >= min;\n}\n\nfunction parseNonEmptyId(value: unknown): string | null {\n  return typeof value === \"string\" && value.trim().length > 0 ? value : null;\n}\n\nfunction invalid(): never {\n  throw new AuthorizationSnapshotInvalidError();\n}\n\nfunction parseCapabilities(value: unknown): AuthorizationCapabilities {\n  if (!isRecord(value)) {\n    invalid();\n  }\n  const canChangeMemberRole = value.canChangeMemberRole;\n  const canDeleteOrganization = value.canDeleteOrganization;\n  const canInviteMembers = value.canInviteMembers;\n  const canManageOrganizationRoles = value.canManageOrganizationRoles;\n  const canManagePlatformRoles = value.canManagePlatformRoles;\n  const canRemoveMember = value.canRemoveMember;\n  if (\n    typeof canChangeMemberRole !== \"boolean\" ||\n    typeof canDeleteOrganization !== \"boolean\" ||\n    typeof canInviteMembers !== \"boolean\" ||\n    typeof canManageOrganizationRoles !== \"boolean\" ||\n    typeof canManagePlatformRoles !== \"boolean\" ||\n    typeof canRemoveMember !== \"boolean\"\n  ) {\n    invalid();\n  }\n  return {\n    canChangeMemberRole,\n    canDeleteOrganization,\n    canInviteMembers,\n    canManageOrganizationRoles,\n    canManagePlatformRoles,\n    canRemoveMember,\n  };\n}\n\nfunction parseAssignedRole(value: unknown): AssignedRoleSummary {\n  if (!isRecord(value)) {\n    invalid();\n  }\n  if (\n    typeof value.displayName !== \"string\" ||\n    typeof value.key !== \"string\" ||\n    (value.scopeKind !== \"platform\" && value.scopeKind !== \"organization\")\n  ) {\n    invalid();\n  }\n  assertAssignableRoleKey(value.key);\n  return {\n    displayName: value.displayName,\n    key: value.key,\n    scopeKind: value.scopeKind,\n  };\n}\n\nfunction parseRoleDescriptor(value: unknown): RoleDescriptor {\n  if (!isRecord(value)) {\n    invalid();\n  }\n  const id = parseNonEmptyId(value.id);\n  const organizationId =\n    value.organizationId === null\n      ? null\n      : parseNonEmptyId(value.organizationId);\n  if (\n    typeof value.assignable !== \"boolean\" ||\n    !isIntegerAtLeast(value.assignmentCount, 0) ||\n    (value.description !== undefined &&\n      typeof value.description !== \"string\") ||\n    typeof value.displayName !== \"string\" ||\n    id === null ||\n    typeof value.key !== \"string\" ||\n    (organizationId === null && value.organizationId !== null) ||\n    typeof value.protected !== \"boolean\" ||\n    !isIntegerAtLeast(value.rightCount, 0) ||\n    (value.scopeKind !== \"platform\" && value.scopeKind !== \"organization\") ||\n    (value.systemKind !== null &&\n      value.systemKind !== \"owner\" &&\n      value.systemKind !== \"admin\" &&\n      value.systemKind !== \"member\") ||\n    !isIntegerAtLeast(value.version, 1)\n  ) {\n    invalid();\n  }\n  assertAssignableRoleKey(value.key);\n  if (value.scopeKind === \"platform\" && organizationId !== null) {\n    invalid();\n  }\n  if (value.scopeKind === \"organization\" && organizationId === null) {\n    invalid();\n  }\n  return {\n    assignable: value.assignable,\n    assignmentCount: value.assignmentCount,\n    ...(value.description === undefined\n      ? {}\n      : { description: value.description }),\n    displayName: value.displayName,\n    id,\n    key: value.key,\n    organizationId,\n    protected: value.protected,\n    rightCount: value.rightCount,\n    scopeKind: value.scopeKind,\n    systemKind: value.systemKind,\n    version: value.version,\n  };\n}\n\nfunction assertAssignableRoleKey(key: string): void {\n  if (LEGACY_ROLE_NAME_KEYS.has(key) || !/^[a-z][a-z0-9_]{0,127}$/.test(key)) {\n    invalid();\n  }\n}\n\nfunction capabilitiesMatch(\n  actual: AuthorizationCapabilities,\n  expected: AuthorizationCapabilities\n): boolean {\n  return (\n    actual.canChangeMemberRole === expected.canChangeMemberRole &&\n    actual.canDeleteOrganization === expected.canDeleteOrganization &&\n    actual.canInviteMembers === expected.canInviteMembers &&\n    actual.canManageOrganizationRoles === expected.canManageOrganizationRoles &&\n    actual.canManagePlatformRoles === expected.canManagePlatformRoles &&\n    actual.canRemoveMember === expected.canRemoveMember\n  );\n}\n\n/**\n * Fail-closed wire parser for GET /authorization/snapshot.\n * Browser-safe: rights + capability projection only (no Postgres / Node stores).\n */\nexport function parseAuthorizationSnapshot(\n  value: unknown\n): AuthorizationSnapshot {\n  if (!isRecord(value)) {\n    invalid();\n  }\n  const capabilities = parseCapabilities(value.capabilities);\n  if (!isIntegerAtLeast(value.revision, 1)) {\n    invalid();\n  }\n  if (\n    !(\n      Array.isArray(value.effectiveRights) &&\n      Array.isArray(value.roles) &&\n      Array.isArray(value.assignableRoles)\n    )\n  ) {\n    invalid();\n  }\n  const effectiveRights: AthenaRightKey[] = [];\n  for (const entry of value.effectiveRights) {\n    if (typeof entry !== \"string\") {\n      invalid();\n    }\n    const key = tryParseAthenaRightKey(entry);\n    if (key === undefined) {\n      invalid();\n    }\n    effectiveRights.push(key);\n  }\n  if (\n    !capabilitiesMatch(capabilities, capabilitiesFromRights(effectiveRights))\n  ) {\n    invalid();\n  }\n  const roles: AssignedRoleSummary[] = [];\n  const assignedKeys = new Set<string>();\n  for (const entry of value.roles) {\n    const role = parseAssignedRole(entry);\n    const assignedId = `${role.scopeKind}:${role.key}`;\n    if (assignedKeys.has(assignedId)) {\n      invalid();\n    }\n    assignedKeys.add(assignedId);\n    roles.push(role);\n  }\n  const assignableRoles: RoleDescriptor[] = [];\n  for (const entry of value.assignableRoles) {\n    assignableRoles.push(parseRoleDescriptor(entry));\n  }\n  let activeOrganizationId: string | undefined;\n  if (\n    value.activeOrganizationId !== undefined &&\n    value.activeOrganizationId !== null\n  ) {\n    const parsed = parseNonEmptyId(value.activeOrganizationId);\n    if (parsed === null) {\n      invalid();\n    }\n    activeOrganizationId = parsed;\n    for (const role of assignableRoles) {\n      if (\n        role.scopeKind === \"organization\" &&\n        role.organizationId !== activeOrganizationId\n      ) {\n        invalid();\n      }\n    }\n  }\n  return {\n    ...(activeOrganizationId === undefined ? {} : { activeOrganizationId }),\n    assignableRoles,\n    capabilities,\n    effectiveRights,\n    revision: value.revision,\n    roles,\n  };\n}\n","import { AUTHORIZATION_ASSIGNMENT_VERSION_CONFLICT } from \"../../runtime/authorization/role-invariants.ts\";\nimport type { AthenaAuthErrorDetails, AthenaAuthResult } from \"../types.ts\";\n\nexport class AthenaAuthOperationError extends Error {\n  readonly code: string;\n  readonly details: AthenaAuthErrorDetails | null;\n  readonly retry: boolean;\n  readonly status: number;\n\n  constructor(input: {\n    code: string;\n    details?: AthenaAuthErrorDetails | null;\n    message: string;\n    retry?: boolean;\n    status: number;\n  }) {\n    super(input.message);\n    this.name = \"AthenaAuthOperationError\";\n    this.code = input.code;\n    this.details = input.details ?? null;\n    this.retry = input.retry === true;\n    this.status = input.status;\n  }\n\n  static fromResult(\n    result: AthenaAuthResult<unknown>\n  ): AthenaAuthOperationError {\n    const details = result.errorDetails ?? null;\n    const code = details?.code ?? \"HTTP_ERROR\";\n    return new AthenaAuthOperationError({\n      code,\n      details,\n      message: details?.message ?? result.error ?? \"Auth operation failed\",\n      retry: isRetryableAuthFailure(result.status, code),\n      status: details?.status ?? result.status,\n    });\n  }\n}\n\nexport type AthenaAuthorizationAssignmentConflictError =\n  AthenaAuthOperationError & {\n    code: typeof AUTHORIZATION_ASSIGNMENT_VERSION_CONFLICT;\n  };\n\nexport function requireAthenaAuthResult<T>(result: AthenaAuthResult<T>): T {\n  if (!result.ok) {\n    throw AthenaAuthOperationError.fromResult(result);\n  }\n  return result.data as T;\n}\n\nexport function isAuthorizationAssignmentConflict(\n  error: unknown\n): error is AthenaAuthorizationAssignmentConflictError {\n  if (error instanceof AthenaAuthOperationError) {\n    return error.code === AUTHORIZATION_ASSIGNMENT_VERSION_CONFLICT;\n  }\n  return (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"code\" in error &&\n    (error as { code?: unknown }).code ===\n      AUTHORIZATION_ASSIGNMENT_VERSION_CONFLICT\n  );\n}\n\nfunction isRetryableAuthFailure(status: number, code: string): boolean {\n  if (code === AUTHORIZATION_ASSIGNMENT_VERSION_CONFLICT) {\n    return true;\n  }\n  return status === 429 || status >= 500;\n}\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","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","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","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 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 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 { 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 { 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, 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 { 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 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 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","/**\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","/**\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 { builtinAuthEmailBody, builtinTemplateRow } from \"./builtins.ts\";\nexport {\n  type AuthEmailApplicationView,\n  type AuthEmailTemplateView,\n  type AuthEmailUserView,\n  assertAuthEmailRequiredVariables,\n  type ChangeEmailTemplateData,\n  type DeleteUserConfirmationTemplateData,\n  flattenAuthEmailTemplateData,\n  type OrganizationInvitationTemplateData,\n  type OtpTemplateData,\n  type PasswordResetTemplateData,\n  resolveAuthEmailTemplate,\n  type VerifyEmailTemplateData,\n} from \"./catalog.ts\";\nexport {\n  ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n  type AthenaAuthEmailAttachmentFailureMode,\n  type AthenaAuthEmailFailureRow,\n  type AthenaAuthEmailRecordRow,\n  type AthenaAuthEmailTemplateRow,\n} from \"./contract.ts\";\nexport {\n  createTransactionalMailer,\n  type EmitAuthEmailContext,\n  type EmitAuthEmailInput,\n  emitAuthEmail,\n  type LegacyAuthEmailSend,\n} from \"./emit.ts\";\nexport { AthenaAuthEmailError } from \"./errors.ts\";\nexport {\n  type AthenaAuthEmailEventDefinition,\n  AUTH_EMAIL_EVENT_CATALOG,\n  type AuthEmailEventNested,\n  authEmailEvents,\n  flattenAuthEmailEvents,\n  getAuthEmailEventDefinition,\n} from \"./events.ts\";\nexport { createTestEmailDeliveryPort } from \"./provider.ts\";\nexport { renderAuthEmailFragment } from \"./renderer.ts\";\n","import type { AthenaAuthEmailTemplateRow } from \"./contract.ts\";\nimport { AUTH_EMAIL_EVENT_CATALOG } from \"./events.ts\";\n\nexport interface BuiltinAuthEmailBody {\n  html_template: string;\n  subject_template: string;\n  text_template: string;\n}\n\n/**\n * Must match `default_template_definition` in\n * `services/athena-auth/crates/core/src/email/templates.rs`.\n */\nconst BODIES: Record<string, BuiltinAuthEmailBody> = {\n  account_deletion_confirmation_email: {\n    html_template:\n      '<p>Click the link below to confirm the deletion of your account:</p><p><a href=\"{{verification_url}}\">Confirm Account Deletion</a></p><p>If you did not request this, please ignore this email.</p>',\n    subject_template: \"Confirm account deletion\",\n    text_template: \"Confirm account deletion: {{verification_url}}\",\n  },\n  change_email_confirmation_email: {\n    html_template:\n      '<p>Click the link below to confirm your new email address:</p><p><a href=\"{{verification_url}}\">Confirm Email Change</a></p>',\n    subject_template: \"Confirm your email change\",\n    text_template: \"Confirm your email change: {{verification_url}}\",\n  },\n  magic_link_email: {\n    html_template:\n      '<p>Click the link below to sign in:</p><p><a href=\"{{sign_in_url}}\">Sign in</a></p>',\n    subject_template: \"Sign in to {{app_name}}\",\n    text_template: \"Sign in: {{sign_in_url}}\",\n  },\n  organization_created_email: {\n    html_template:\n      \"<p>Your organization <strong>{{organization_name}}</strong> is ready.</p>\",\n    subject_template: \"{{organization_name}} is ready\",\n    text_template: \"Your organization {{organization_name}} is ready.\",\n  },\n  organization_invitation_email: {\n    html_template:\n      '<p>You were invited to join <strong>{{organization_name}}</strong>.</p><p>Role: <strong>{{role}}</strong></p><p>Invited by: <strong>{{inviter_identity}}</strong></p><p><a href=\"{{invitation_url}}\">Open invitation</a></p><p>If you are not signed in yet, create or verify your account first, then open the invitation link again.</p>',\n    subject_template: \"Invitation to join {{organization_name}}\",\n    text_template:\n      \"You were invited to join {{organization_name}}.\\nRole: {{role}}\\nInvited by: {{inviter_identity}}\\nInvitation link: {{invitation_url}}\",\n  },\n  organization_invitation_reminder_email: {\n    html_template:\n      '<p>This is a reminder to join <strong>{{organization_name}}</strong>.</p><p><a href=\"{{invitation_url}}\">Open invitation</a></p>',\n    subject_template: \"Reminder: join {{organization_name}}\",\n    text_template: \"Reminder to join {{organization_name}}: {{invitation_url}}\",\n  },\n  organization_invitation_revoked_email: {\n    html_template:\n      \"<p>The invitation for <strong>{{invited_email}}</strong> to join <strong>{{organization_name}}</strong> was revoked.</p>\",\n    subject_template: \"Invitation to {{organization_name}} was revoked\",\n    text_template:\n      \"The invitation for {{invited_email}} to join {{organization_name}} was revoked.\",\n  },\n  organization_member_added_email: {\n    html_template:\n      \"<p><strong>{{member_identity}}</strong> was added to <strong>{{organization_name}}</strong>.</p>\",\n    subject_template: \"Added to {{organization_name}}\",\n    text_template: \"{{member_identity}} was added to {{organization_name}}.\",\n  },\n  organization_member_removed_email: {\n    html_template:\n      \"<p><strong>{{member_identity}}</strong> was removed from <strong>{{organization_name}}</strong>.</p>\",\n    subject_template: \"Removed from {{organization_name}}\",\n    text_template:\n      \"{{member_identity}} was removed from {{organization_name}}.\",\n  },\n  organization_member_role_updated_email: {\n    html_template:\n      \"<p><strong>{{member_identity}}</strong> is now <strong>{{new_role}}</strong> in <strong>{{organization_name}}</strong>.</p>\",\n    subject_template: \"Role updated in {{organization_name}}\",\n    text_template:\n      \"{{member_identity}} is now {{new_role}} in {{organization_name}}.\",\n  },\n  password_changed_email: {\n    html_template:\n      \"<p>Your password was changed. If you did not do this, secure your account immediately.</p>\",\n    subject_template: \"Your password was changed\",\n    text_template:\n      \"Your password was changed. If you did not do this, secure your account immediately.\",\n  },\n  password_reset_email: {\n    html_template:\n      '<p>Click the link below to reset your password:</p><p><a href=\"{{reset_url}}\">Reset Password</a></p>',\n    subject_template: \"Reset your password\",\n    text_template: \"Reset your password: {{reset_url}}\",\n  },\n  security_alert_email: {\n    html_template:\n      \"<p><strong>{{alert_title}}</strong></p><p>{{alert_details}}</p>\",\n    subject_template: \"Security alert: {{alert_title}}\",\n    text_template: \"{{alert_title}}\\n{{alert_details}}\",\n  },\n  two_factor_otp_email: {\n    html_template:\n      \"<p>Your 2FA verification code is: <strong>{{otp_code}}</strong></p>\",\n    subject_template: \"Your verification code\",\n    text_template: \"Your 2FA verification code is: {{otp_code}}\",\n  },\n  verification_email: {\n    html_template:\n      '<p>Click the link below to verify your email address:</p><p><a href=\"{{verification_url}}\">Verify Email</a></p>',\n    subject_template: \"Verify your email address\",\n    text_template: \"Verify your email address: {{verification_url}}\",\n  },\n  welcome_email: {\n    html_template: \"<p>Hi {{user_name}},</p><p>Your account is ready.</p>\",\n    subject_template: \"Welcome to {{app_name}}\",\n    text_template: \"Hi {{user_name}}, your account is ready.\",\n  },\n};\n\nexport function builtinAuthEmailBody(\n  templateKey: string | null | undefined\n): BuiltinAuthEmailBody | undefined {\n  if (!templateKey) {\n    return;\n  }\n  return BODIES[templateKey];\n}\n\nexport function builtinTemplateRow(\n  eventType: string,\n  locale: string\n): AthenaAuthEmailTemplateRow | undefined {\n  const definition = AUTH_EMAIL_EVENT_CATALOG.find(\n    (entry) => entry.event_type === eventType\n  );\n  const key = definition?.default_template_key;\n  const body = builtinAuthEmailBody(key);\n  if (!(definition && key && body)) {\n    return;\n  }\n  const stamp = new Date(0).toISOString();\n  return {\n    attachment_failure_mode: \"fail\",\n    attachments: [],\n    created_at: stamp,\n    event_type: eventType,\n    html_template: body.html_template,\n    id: `builtin:${key}:${locale}`,\n    is_active: true,\n    locale,\n    metadata: { builtin: true },\n    subject_template: body.subject_template,\n    template_key: key,\n    text_template: body.text_template,\n    updated_at: stamp,\n    variable_bindings: [],\n    variables: [...definition.required_variables],\n  };\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 type { AthenaAuthEmailStore } from \"../local/email/store.ts\";\nimport { builtinTemplateRow } from \"./builtins.ts\";\nimport type { AthenaAuthEmailTemplateRow } from \"./contract.ts\";\nimport { getAuthEmailEventDefinition } from \"./events.ts\";\n\nexport interface AuthEmailUserView {\n  email?: string;\n  id?: string;\n  name?: string;\n}\n\nexport interface AuthEmailApplicationView {\n  name?: string;\n  url?: string;\n}\n\n/** View for `user.password.reset` / `password_reset_email`. Wire: `reset_url`. */\nexport interface PasswordResetTemplateData {\n  application?: AuthEmailApplicationView;\n  expiresAt?: string;\n  resetUrl: string;\n  user?: AuthEmailUserView;\n}\n\n/** View for `user.email.verify` / `verification_email`. Wire: `verification_url`. */\nexport interface VerifyEmailTemplateData {\n  application?: AuthEmailApplicationView;\n  expiresAt?: string;\n  user?: AuthEmailUserView;\n  verificationUrl: string;\n}\n\n/** View for `user.email.change.confirmation`. Wire: `verification_url`. */\nexport interface ChangeEmailTemplateData {\n  application?: AuthEmailApplicationView;\n  expiresAt?: string;\n  user?: AuthEmailUserView;\n  verificationUrl: string;\n}\n\n/** View for `user.account.delete.confirmation`. Wire: `verification_url`. */\nexport interface DeleteUserConfirmationTemplateData {\n  application?: AuthEmailApplicationView;\n  expiresAt?: string;\n  user?: AuthEmailUserView;\n  verificationUrl: string;\n}\n\n/** View for `organization.member.invite`. */\nexport interface OrganizationInvitationTemplateData {\n  application?: AuthEmailApplicationView;\n  invitationUrl: string;\n  inviterIdentity: string;\n  organizationName: string;\n  role: string;\n  user?: AuthEmailUserView;\n}\n\n/** View for `user.sign-in.otp` / `two_factor_otp_email`. Wire: `otp_code`. */\nexport interface OtpTemplateData {\n  application?: AuthEmailApplicationView;\n  otpCode: string;\n  user?: AuthEmailUserView;\n}\n\nexport type AuthEmailTemplateView =\n  | ChangeEmailTemplateData\n  | DeleteUserConfirmationTemplateData\n  | OrganizationInvitationTemplateData\n  | OtpTemplateData\n  | PasswordResetTemplateData\n  | Record<string, unknown>\n  | VerifyEmailTemplateData;\n\nfunction asString(value: unknown): string | undefined {\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (typeof value === \"number\" || typeof value === \"boolean\") {\n    return String(value);\n  }\n}\n\nfunction toSnakeCase(key: string): string {\n  return key\n    .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n    .replace(/-/g, \"_\")\n    .toLowerCase();\n}\n\nfunction assignIfPresent(\n  out: Record<string, string>,\n  key: string,\n  value: unknown\n): void {\n  const text = asString(value);\n  if (text !== undefined) {\n    out[key] = text;\n  }\n}\n\nfunction flattenRecord(view: Record<string, unknown>): Record<string, string> {\n  const out: Record<string, string> = {};\n  for (const [key, value] of Object.entries(view)) {\n    if (key === \"user\" || key === \"application\") {\n      continue;\n    }\n    if (value && typeof value === \"object\" && !Array.isArray(value)) {\n      continue;\n    }\n    assignIfPresent(out, toSnakeCase(key), value);\n  }\n\n  const user = view.user;\n  if (user && typeof user === \"object\" && !Array.isArray(user)) {\n    const fields = user as Record<string, unknown>;\n    assignIfPresent(out, \"user_id\", fields.id);\n    assignIfPresent(out, \"user_email\", fields.email);\n    assignIfPresent(out, \"user_name\", fields.name);\n  }\n\n  const application = view.application;\n  if (\n    application &&\n    typeof application === \"object\" &&\n    !Array.isArray(application)\n  ) {\n    const fields = application as Record<string, unknown>;\n    assignIfPresent(out, \"app_name\", fields.name);\n    assignIfPresent(out, \"application_url\", fields.url);\n  }\n\n  assignIfPresent(out, \"reset_url\", view.resetUrl);\n  assignIfPresent(out, \"verification_url\", view.verificationUrl);\n  assignIfPresent(out, \"otp_code\", view.otpCode);\n  assignIfPresent(out, \"invitation_url\", view.invitationUrl);\n  assignIfPresent(out, \"inviter_identity\", view.inviterIdentity);\n  assignIfPresent(out, \"organization_name\", view.organizationName);\n  assignIfPresent(out, \"expires_at\", view.expiresAt);\n  assignIfPresent(out, \"sign_in_url\", view.signInUrl);\n  assignIfPresent(out, \"dashboard_url\", view.dashboardUrl);\n  assignIfPresent(out, \"support_url\", view.supportUrl);\n  assignIfPresent(out, \"alert_title\", view.alertTitle);\n  assignIfPresent(out, \"alert_details\", view.alertDetails);\n  assignIfPresent(out, \"organization_url\", view.organizationUrl);\n  assignIfPresent(out, \"member_identity\", view.memberIdentity);\n  assignIfPresent(out, \"actor_identity\", view.actorIdentity);\n  assignIfPresent(out, \"new_role\", view.newRole);\n  assignIfPresent(out, \"previous_role\", view.previousRole);\n  assignIfPresent(out, \"invited_email\", view.invitedEmail);\n  return out;\n}\n\nexport function flattenAuthEmailTemplateData(\n  _eventType: string,\n  view: AuthEmailTemplateView\n): Record<string, string> {\n  return flattenRecord(view as Record<string, unknown>);\n}\n\nexport function assertAuthEmailRequiredVariables(\n  eventType: string,\n  data: Record<string, string>\n): void {\n  const definition = getAuthEmailEventDefinition(eventType);\n  if (!definition) {\n    return;\n  }\n  const missing = definition.required_variables.filter((key) => {\n    const value = data[key];\n    return typeof value !== \"string\" || value.trim().length === 0;\n  });\n  if (missing.length > 0) {\n    throw new Error(\n      `missing required template variables: ${missing.join(\", \")}`\n    );\n  }\n}\n\nfunction localesEqual(left: string, right: string): boolean {\n  return left.trim().toLowerCase() === right.trim().toLowerCase();\n}\n\nfunction pickStoredLocale(\n  rows: AthenaAuthEmailTemplateRow[],\n  locale: string\n): AthenaAuthEmailTemplateRow | undefined {\n  return rows.find((row) => localesEqual(row.locale, locale));\n}\n\n/**\n * Active localized stored override (plus `nl-NL`→`nl` prefix, case-insensitive)\n * → active `en` stored override\n * → reserved localized builtin (none today)\n * → Athena builtin default.\n * Inactive stored rows are excluded by the `is_active: true` filter.\n */\nexport async function resolveAuthEmailTemplate(\n  store: AthenaAuthEmailStore,\n  input: { eventType: string; locale?: string }\n): Promise<AthenaAuthEmailTemplateRow | undefined> {\n  const locale = input.locale?.trim() || \"en\";\n  const definition = getAuthEmailEventDefinition(input.eventType);\n  const templateKey = definition?.default_template_key ?? undefined;\n  if (!templateKey) {\n    return;\n  }\n\n  const rows = await store.listTemplates({\n    event_type: input.eventType,\n    is_active: true,\n    template_key: templateKey,\n  });\n\n  const exact = pickStoredLocale(rows, locale);\n  if (exact) {\n    return exact;\n  }\n\n  if (locale.includes(\"-\")) {\n    const prefix = locale.slice(0, locale.indexOf(\"-\"));\n    const byPrefix = pickStoredLocale(rows, prefix);\n    if (byPrefix) {\n      return byPrefix;\n    }\n  }\n\n  if (!localesEqual(locale, \"en\")) {\n    const fallbackEn = pickStoredLocale(rows, \"en\");\n    if (fallbackEn) {\n      return fallbackEn;\n    }\n  }\n\n  return builtinTemplateRow(input.eventType, locale);\n}\n","import type { AthenaAuthEmailTemplateAttachment } from \"../types.ts\";\n\nexport type AthenaAuthEmailAttachmentFailureMode = \"fail\" | \"skip\";\n\nexport interface AthenaAuthEmailTemplateRow {\n  attachment_failure_mode: AthenaAuthEmailAttachmentFailureMode;\n  attachments: AthenaAuthEmailTemplateAttachment[];\n  created_at: string;\n  event_type: string | null;\n  html_template: string | null;\n  id: string;\n  is_active: boolean;\n  locale: string;\n  metadata: Record<string, unknown>;\n  subject_template: string;\n  template_key: string;\n  text_template: string | null;\n  updated_at: string;\n  variable_bindings: Array<{\n    name: string;\n    required?: boolean;\n    source: string;\n  }>;\n  variables: string[];\n}\n\nexport interface AthenaAuthEmailFailureRow {\n  created_at: string;\n  error_code?: string;\n  error_message: string;\n  flow: string;\n  id: string;\n  metadata: Record<string, unknown>;\n  provider?: string | null;\n  recipient_email: string;\n  resolution_note?: string | null;\n  resolved: boolean;\n  template_id?: string | null;\n  template_key?: string | null;\n  updated_at: string;\n}\n\nexport interface AthenaAuthEmailRecordRow {\n  created_at: string;\n  flow: string | null;\n  from_address: string;\n  from_name: string | null;\n  html_body: string | null;\n  id: string;\n  metadata: Record<string, unknown>;\n  provider: string;\n  recipient_email: string;\n  subject: string;\n  text_body: string | null;\n  updated_at: string;\n}\n\nexport const ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED =\n  \"ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED\";\n","import {\n  ATHENA_EMAIL_MESSAGE_INVALID,\n  ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n  AthenaEmailError,\n} from \"../../email/errors.ts\";\nimport type {\n  AthenaEmailDeliveryPort,\n  AthenaEmailMessage,\n} from \"../../email/types.ts\";\nimport type { AthenaAuthEmailStore } from \"../local/email/store.ts\";\nimport {\n  assertAuthEmailRequiredVariables,\n  flattenAuthEmailTemplateData,\n  resolveAuthEmailTemplate,\n} from \"./catalog.ts\";\nimport { ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED } from \"./contract.ts\";\nimport { renderAuthEmailFragment } from \"./renderer.ts\";\n\nexport interface EmitAuthEmailInput {\n  data: Record<string, string>;\n  eventType: string;\n  flow?: string;\n  locale?: string;\n  recipient: string;\n}\n\nexport type LegacyAuthEmailSend = (message: {\n  subject: string;\n  to: string;\n  type: string;\n  url?: string;\n}) => Promise<void> | void;\n\nexport interface EmitAuthEmailContext {\n  defaultFrom?: string;\n  defaultFromName?: string;\n  delivery?: AthenaEmailDeliveryPort;\n  legacySend?: LegacyAuthEmailSend;\n  store: AthenaAuthEmailStore;\n}\n\nconst LEGACY_TYPE: Record<string, string> = {\n  \"organization.member.invite\": \"organization-invite\",\n  \"user.account.delete.confirmation\": \"delete-account\",\n  \"user.email.change.confirmation\": \"change-email\",\n  \"user.email.verify\": \"verify-email\",\n  \"user.password.reset\": \"reset-password\",\n  \"user.sign-in.email\": \"magic-link\",\n  \"user.sign-in.otp\": \"two-factor-otp\",\n};\n\nfunction nowIso(): string {\n  return new Date().toISOString();\n}\n\nfunction secretsFromData(data: Record<string, string>): string[] {\n  const secrets: string[] = [];\n  if (data.otp_code) {\n    secrets.push(data.otp_code);\n  }\n  for (const value of Object.values(data)) {\n    const token = /[?&]token=([^&]+)/.exec(value)?.[1];\n    if (token) {\n      try {\n        secrets.push(decodeURIComponent(token));\n      } catch {\n        secrets.push(token);\n      }\n    }\n    if (\n      /^(verify_|change_|delete_|reset_)/.test(value) ||\n      /^[0-9a-f-]{36}$/i.test(value)\n    ) {\n      secrets.push(value);\n    }\n  }\n  return [...new Set(secrets.filter((entry) => entry.length >= 6))];\n}\n\nfunction redact(\n  value: string | null | undefined,\n  secrets: string[]\n): string | null {\n  if (!value) {\n    return value ?? null;\n  }\n  let next = value;\n  for (const secret of secrets) {\n    next = next.split(secret).join(\"[redacted]\");\n  }\n  return next;\n}\n\nfunction hookUrl(data: Record<string, string>): string | undefined {\n  return (\n    data.legacy_hook_url ??\n    data.verification_url ??\n    data.reset_url ??\n    data.invitation_url ??\n    data.sign_in_url ??\n    data.otp_code\n  );\n}\n\nexport function authEmailFailureFromDeliveryError(error: unknown): {\n  errorCode: string;\n  errorMessage: string;\n} {\n  if (error instanceof AthenaEmailError) {\n    if (error.code === ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED) {\n      return {\n        errorCode: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n        errorMessage: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n      };\n    }\n    return {\n      errorCode: error.code,\n      errorMessage: error.message,\n    };\n  }\n  return {\n    errorCode: \"ATHENA_EMAIL_DELIVERY_FAILED\",\n    errorMessage: error instanceof Error ? error.message : String(error),\n  };\n}\n\nexport async function emitAuthEmail(\n  input: EmitAuthEmailInput,\n  ctx: EmitAuthEmailContext\n): Promise<{ success: boolean }> {\n  if (!ctx.defaultFrom?.trim() && process.env.NODE_ENV === \"production\") {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_MESSAGE_INVALID,\n      \"Production Auth email requires a from-authority (email.defaults.from).\"\n    );\n  }\n  const locale = input.locale?.trim() || \"en\";\n  const flow = input.flow ?? input.eventType;\n  const template = await resolveAuthEmailTemplate(ctx.store, {\n    eventType: input.eventType,\n    locale,\n  });\n  if (!template) {\n    return { success: false };\n  }\n\n  const data = {\n    app_name: \"Athena\",\n    ...flattenAuthEmailTemplateData(input.eventType, input.data),\n  };\n  const stamp = nowIso();\n  const templateId = template.id.startsWith(\"builtin:\") ? null : template.id;\n  try {\n    assertAuthEmailRequiredVariables(input.eventType, data);\n  } catch (error) {\n    await ctx.store.createFailure({\n      created_at: stamp,\n      error_message: error instanceof Error ? error.message : String(error),\n      flow,\n      id: crypto.randomUUID(),\n      metadata: { event_type: input.eventType },\n      recipient_email: input.recipient,\n      resolved: false,\n      template_id: templateId,\n      template_key: template.template_key,\n      updated_at: stamp,\n    });\n    return { success: false };\n  }\n\n  const subject = renderAuthEmailFragment(template.subject_template, data);\n  const html = template.html_template\n    ? renderAuthEmailFragment(template.html_template, data)\n    : undefined;\n  const text = template.text_template\n    ? renderAuthEmailFragment(template.text_template, data)\n    : undefined;\n  const secrets = secretsFromData(data);\n\n  const invokeLegacy = async () => {\n    if (!ctx.legacySend) {\n      return;\n    }\n    await ctx.legacySend({\n      subject,\n      to: input.recipient,\n      type: LEGACY_TYPE[input.eventType] ?? input.eventType,\n      url: hookUrl(data),\n    });\n  };\n\n  const delivery = ctx.delivery;\n  if (!delivery) {\n    await ctx.store.createFailure({\n      created_at: stamp,\n      error_code: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n      error_message: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n      flow,\n      id: crypto.randomUUID(),\n      metadata: { event_type: input.eventType },\n      recipient_email: input.recipient,\n      resolved: false,\n      template_id: templateId,\n      template_key: template.template_key,\n      updated_at: stamp,\n    });\n    await invokeLegacy();\n    return { success: false };\n  }\n\n  const resolvedFrom = ctx.defaultFrom?.trim() || undefined;\n  const resolvedFromName = ctx.defaultFromName?.trim() || undefined;\n  const message: AthenaEmailMessage = {\n    ...(resolvedFrom ? { from: resolvedFrom } : {}),\n    ...(resolvedFromName ? { fromName: resolvedFromName } : {}),\n    html,\n    metadata: {\n      event_type: input.eventType,\n      flow,\n      template_id: templateId,\n      template_key: template.template_key,\n    },\n    subject,\n    text,\n    to: input.recipient,\n  };\n  const emailId = crypto.randomUUID();\n  const submittedAt = stamp;\n  await ctx.store.createEmail({\n    created_at: submittedAt,\n    flow,\n    from_address: message.from ?? \"athena@localhost\",\n    from_name: message.fromName ?? null,\n    html_body: redact(html, secrets),\n    id: emailId,\n    metadata: {\n      delivery_status: \"submitted\",\n      event_type: input.eventType,\n      template_key: template.template_key,\n    },\n    provider: \"pending\",\n    recipient_email: input.recipient,\n    subject: redact(subject, secrets) ?? subject,\n    text_body: redact(text, secrets),\n    updated_at: submittedAt,\n  });\n\n  const persistFailed = async (failure: {\n    errorCode: string;\n    errorMessage: string;\n    provider?: string | null;\n  }) => {\n    const failedAt = nowIso();\n    const existing = await ctx.store.getEmail(emailId);\n    await ctx.store.updateEmail(emailId, {\n      metadata: {\n        ...(existing?.metadata ?? {}),\n        delivery_status: \"failed\",\n        failure_reason: redact(failure.errorMessage, secrets),\n      },\n      provider: failure.provider ?? \"failed\",\n      updated_at: failedAt,\n    });\n    await ctx.store.createFailure({\n      created_at: failedAt,\n      error_code: failure.errorCode,\n      error_message:\n        redact(failure.errorMessage, secrets) ?? failure.errorMessage,\n      flow,\n      id: crypto.randomUUID(),\n      metadata: { email_id: emailId, event_type: input.eventType },\n      provider: failure.provider,\n      recipient_email: input.recipient,\n      resolved: false,\n      template_id: templateId,\n      template_key: template.template_key,\n      updated_at: failedAt,\n    });\n  };\n\n  let result: Awaited<ReturnType<typeof delivery.send>>;\n  try {\n    result = await delivery.send(message);\n  } catch (error) {\n    const mapped = authEmailFailureFromDeliveryError(error);\n    await persistFailed({\n      errorCode: mapped.errorCode,\n      errorMessage: mapped.errorMessage,\n    });\n    return { success: false };\n  }\n  if (!result.success) {\n    await persistFailed({\n      errorCode: \"ATHENA_EMAIL_DELIVERY_FAILED\",\n      errorMessage: \"Email delivery failed\",\n      provider: result.provider,\n    });\n    return { success: false };\n  }\n  try {\n    const existing = await ctx.store.getEmail(emailId);\n    await ctx.store.updateEmail(emailId, {\n      from_address: result.from ?? message.from ?? \"athena@localhost\",\n      from_name: result.fromName ?? message.fromName ?? null,\n      metadata: {\n        ...(existing?.metadata ?? {}),\n        delivery_status: \"accepted\",\n        ...(result.messageId ? { provider_message_id: result.messageId } : {}),\n      },\n      provider: result.provider,\n      updated_at: nowIso(),\n    });\n  } catch {\n    // Delivery already succeeded; audit errors must not rewrite it.\n  }\n  return { success: true };\n}\n\nexport function createTransactionalMailer(ctx: EmitAuthEmailContext) {\n  return {\n    emit(input: EmitAuthEmailInput) {\n      return emitAuthEmail(input, ctx);\n    },\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","export function renderAuthEmailFragment(\n  fragment: string,\n  variables: Record<string, string>\n): string {\n  let rendered = fragment;\n  for (const [key, value] of Object.entries(variables)) {\n    rendered = rendered.split(`{{${key}}}`).join(value);\n    rendered = rendered.split(`{{ ${key} }}`).join(value);\n  }\n  return rendered;\n}\n","export class AthenaAuthEmailError extends Error {\n  readonly status: number;\n\n  constructor(status: number, message: string) {\n    super(message);\n    this.name = \"AthenaAuthEmailError\";\n    this.status = status;\n  }\n\n  static badRequest(message: string): AthenaAuthEmailError {\n    return new AthenaAuthEmailError(400, message);\n  }\n}\n","export { defineAthenaAuthHooks } from \"./define.ts\";\nexport {\n  ATHENA_AUTH_DOMAIN_EVENTS,\n  ATHENA_AUTH_IMPLEMENTED_DOMAIN_EVENTS,\n  ATHENA_AUTH_RESERVED_DOMAIN_EVENTS,\n  type AthenaAuthDomainEvent,\n  type AthenaAuthDomainEventStatus,\n  type AthenaAuthImplementedDomainEvent,\n  type AthenaAuthReservedDomainEvent,\n} from \"./events.ts\";\nexport type {\n  AthenaAuthAfterHookPayload,\n  AthenaAuthBeforeHookPayload,\n  AthenaAuthHookActor,\n  AthenaAuthHookContext,\n  AthenaAuthHookErrorInput,\n  AthenaAuthHookEventPayloads,\n  AthenaAuthHookHandler,\n  AthenaAuthHookRequest,\n  AthenaAuthHooks,\n} from \"./types.ts\";\n","import type { AthenaAuthImplementedDomainEvent } from \"./events.ts\";\nimport type {\n  AthenaAuthAfterHookPayload,\n  AthenaAuthBeforeHookPayload,\n  AthenaAuthHookErrorInput,\n} from \"./types.ts\";\n\ninterface AthenaAuthHooksInput {\n  after?: {\n    [K in AthenaAuthImplementedDomainEvent]?: (\n      payload: AthenaAuthAfterHookPayload<K>\n    ) => void;\n  };\n  before?: {\n    [K in AthenaAuthImplementedDomainEvent]?: (\n      payload: AthenaAuthBeforeHookPayload<K>\n    ) => void;\n  };\n  onError?: (input: AthenaAuthHookErrorInput) => void;\n}\n\n/**\n * Identity helper so hook callbacks are contextually typed per event.\n * Returning `AthenaAuthHooks` would contextual-type arguments as\n * `handler | handler[]` and make destructured params implicit `any`.\n */\nexport function defineAthenaAuthHooks<T extends AthenaAuthHooksInput>(\n  hooks: T\n): T {\n  return hooks;\n}\n","export const ATHENA_AUTH_DOMAIN_EVENT_STATUS = {\n  implemented: \"implemented\",\n  reserved: \"reserved\",\n} as const;\n\nexport type AthenaAuthDomainEventStatus =\n  (typeof ATHENA_AUTH_DOMAIN_EVENT_STATUS)[keyof typeof ATHENA_AUTH_DOMAIN_EVENT_STATUS];\n\n/**\n * Domain lifecycle events for embedded Auth. Status is mechanical: only\n * `implemented` keys are hookable. Flip status in the same change that\n * migrates the handler through `executeAuthMutation`.\n */\nexport const ATHENA_AUTH_DOMAIN_EVENTS = {\n  \"account.link\": { status: \"implemented\" },\n  \"account.unlink\": { status: \"implemented\" },\n  \"apiKey.create\": { status: \"implemented\" },\n  \"apiKey.delete\": { status: \"implemented\" },\n  \"apiKey.update\": { status: \"implemented\" },\n  \"organization.create\": { status: \"implemented\" },\n  \"organization.delete\": { status: \"implemented\" },\n  \"organization.invitation.accept\": { status: \"implemented\" },\n  \"organization.invitation.cancel\": { status: \"implemented\" },\n  \"organization.invitation.create\": { status: \"implemented\" },\n  \"organization.invitation.reject\": { status: \"implemented\" },\n  \"organization.member.add\": { status: \"implemented\" },\n  \"organization.member.invite.reminder\": { status: \"implemented\" },\n  \"organization.member.remove\": { status: \"implemented\" },\n  \"organization.member.role.update\": { status: \"implemented\" },\n  \"organization.update\": { status: \"implemented\" },\n  \"oauth.authorization.denied\": { status: \"implemented\" },\n  \"oauth.client.disabled\": { status: \"implemented\" },\n  \"oauth.grant.authorized\": { status: \"implemented\" },\n  \"oauth.grant.revoked\": { status: \"implemented\" },\n  \"oauth.refresh.reuse_detected\": { status: \"implemented\" },\n  \"oauth.refresh.rotated\": { status: \"implemented\" },\n  \"passkey.delete\": { status: \"implemented\" },\n  \"passkey.register\": { status: \"implemented\" },\n  \"passkey.update\": { status: \"implemented\" },\n  \"session.activeOrganization.update\": { status: \"implemented\" },\n  \"session.impersonation.end\": { status: \"implemented\" },\n  \"session.impersonation.start\": { status: \"implemented\" },\n  \"session.issue\": { status: \"implemented\" },\n  \"session.revoke\": { status: \"implemented\" },\n  \"twoFactor.disable\": { status: \"implemented\" },\n  \"twoFactor.enable\": { status: \"implemented\" },\n  \"user.ban\": { status: \"implemented\" },\n  \"user.create\": { status: \"implemented\" },\n  \"user.delete\": { status: \"implemented\" },\n  \"user.email.update\": { status: \"implemented\" },\n  \"user.email.verify\": { status: \"implemented\" },\n  \"user.password.change\": { status: \"implemented\" },\n  \"user.password.reset\": { status: \"implemented\" },\n  \"user.role.update\": { status: \"implemented\" },\n  \"user.security.alert\": { status: \"implemented\" },\n  \"user.sign-in.email\": { status: \"implemented\" },\n  \"user.sign-in.social\": { status: \"implemented\" },\n  \"user.unban\": { status: \"implemented\" },\n  \"user.update\": { status: \"implemented\" },\n} as const satisfies Record<\n  string,\n  { readonly status: AthenaAuthDomainEventStatus }\n>;\n\nexport type AthenaAuthDomainEvent = keyof typeof ATHENA_AUTH_DOMAIN_EVENTS;\n\nexport type AthenaAuthImplementedDomainEvent = {\n  [K in AthenaAuthDomainEvent]: (typeof ATHENA_AUTH_DOMAIN_EVENTS)[K][\"status\"] extends \"implemented\"\n  ? K\n  : never;\n}[AthenaAuthDomainEvent];\n\nexport type AthenaAuthReservedDomainEvent = {\n  [K in AthenaAuthDomainEvent]: (typeof ATHENA_AUTH_DOMAIN_EVENTS)[K][\"status\"] extends \"reserved\"\n  ? K\n  : never;\n}[AthenaAuthDomainEvent];\n\nfunction isImplementedEvent(\n  event: AthenaAuthDomainEvent\n): event is AthenaAuthImplementedDomainEvent {\n  return (ATHENA_AUTH_DOMAIN_EVENTS[event].status as string) === \"implemented\";\n}\n\nexport const ATHENA_AUTH_IMPLEMENTED_DOMAIN_EVENTS = (\n  Object.keys(ATHENA_AUTH_DOMAIN_EVENTS) as AthenaAuthDomainEvent[]\n).filter(isImplementedEvent);\n\nexport const ATHENA_AUTH_RESERVED_DOMAIN_EVENTS = (\n  Object.keys(ATHENA_AUTH_DOMAIN_EVENTS) as AthenaAuthDomainEvent[]\n).filter(\n  (event): event is AthenaAuthReservedDomainEvent =>\n    (ATHENA_AUTH_DOMAIN_EVENTS[event].status as string) === \"reserved\"\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 {\n  type AthenaAuthCookies,\n  type AthenaCookieContextRuntime,\n  type AthenaCookieOptions,\n  type AthenaCookiesOptions,\n  deleteSessionCookie,\n  getCookieCache,\n  getCookies,\n  getSessionCookie,\n  parseCookies,\n  setSessionCookie,\n} from \"../cookies/index.ts\";\nimport type { AthenaSessionPair } from \"../cookies/types.ts\";\nimport type { AuthSocialProvider } from \"./types.ts\";\n\ntype AthenaMaybePromise<T> = T | Promise<T>;\ntype AthenaAuthServerCookieOptions = Pick<\n  AthenaCookiesOptions,\n  \"session\" | \"advanced\"\n>;\n\nconst DEFAULT_AUTH_BASE_PATH = \"/api/auth\";\n\nexport const ATHENA_AUTH_BASE_ERROR_CODES = {\n  HANDLER_NOT_CONFIGURED: \"HANDLER_NOT_CONFIGURED\",\n  INVALID_BASE_URL: \"INVALID_BASE_URL\",\n  UNTRUSTED_HOST: \"UNTRUSTED_HOST\",\n} as const;\n\nexport interface AthenaAuthSocialProviderConfig {\n  clientId: string;\n  clientSecret: string;\n  scope?: string[];\n  [key: string]: unknown;\n}\n\nexport interface AthenaAuthPluginContext {\n  context: {\n    returned?: unknown;\n    responseHeaders?: Headers;\n    setSession?: AthenaSessionPair | null;\n    clearSession?: boolean;\n    dontRememberMe?: boolean;\n    cookieOverrides?: Partial<AthenaCookieOptions>;\n    [key: string]: unknown;\n  };\n  headers?: Headers;\n  path?: string;\n}\n\nexport interface AthenaAuthPluginHandlerContext\n  extends AthenaAuthPluginContext {\n  auth: AthenaAuthServer;\n}\n\nexport interface AthenaAuthPlugin {\n  $ERROR_CODES?: Record<string, string>;\n  hooks?: {\n    after?: Array<{\n      matcher: (ctx: AthenaAuthPluginContext) => boolean;\n      handler: (ctx: AthenaAuthPluginHandlerContext) => Promise<void> | void;\n    }>;\n  };\n  id: string;\n  version: string;\n}\n\nexport interface AthenaAuthCookieRuntimeInput {\n  cookies?: AthenaAuthCookies;\n  getCookie?: (name: string) => string | null | undefined;\n  getSignedCookie?: AthenaCookieContextRuntime[\"getSignedCookie\"];\n  headers?: Headers;\n  logger?: AthenaCookieContextRuntime[\"logger\"];\n  responseHeaders?: Headers;\n  setCookie?: (\n    name: string,\n    value: string,\n    attributes: AthenaCookieOptions\n  ) => void;\n  setNewSession?: AthenaCookieContextRuntime[\"context\"][\"setNewSession\"];\n  setSignedCookie?: AthenaCookieContextRuntime[\"setSignedCookie\"];\n}\n\nexport interface AthenaAuthServerRuntimeOptions {\n  basePath: string;\n  baseURL?: string;\n  cookies: AthenaAuthServerCookieOptions;\n  secret: string;\n}\n\nexport type AthenaAuthDatabaseFactory<TDatabase = unknown> = (\n  options: AthenaAuthServerRuntimeOptions\n) => TDatabase;\n\nexport type AthenaAuthBaseURLConfig = AthenaCookiesOptions[\"baseURL\"];\n\nexport type AthenaAuthTrustedOrigins =\n  | string[]\n  | ((request?: Request) => AthenaMaybePromise<string[]>);\n\nexport type AthenaAuthTrustedProviders =\n  | string[]\n  | ((request?: Request) => AthenaMaybePromise<string[]>);\n\nexport interface AthenaAuthHandlerResult {\n  clearSession?: boolean;\n  cookieOverrides?: Partial<AthenaCookieOptions>;\n  dontRememberMe?: boolean;\n  response?: Response;\n  returned?: unknown;\n  setSession?: AthenaSessionPair | null;\n}\n\nexport interface AthenaAuthServerConfig<TDatabase = unknown>\n  extends AthenaAuthServerCookieOptions {\n  api?: Record<string, unknown>;\n  basePath?: string;\n  baseURL?: AthenaAuthBaseURLConfig;\n  database: TDatabase | AthenaAuthDatabaseFactory<TDatabase>;\n  errorCodes?: Record<string, string>;\n  handler?: (\n    ctx: AthenaAuthRequestContext\n  ) => AthenaMaybePromise<Response | AthenaAuthHandlerResult>;\n  plugins?: AthenaAuthPlugin[];\n  secret: string;\n  socialProviders?: Partial<\n    Record<AuthSocialProvider, AthenaAuthSocialProviderConfig>\n  >;\n  trustedOrigins?: AthenaAuthTrustedOrigins;\n  trustedProviders?: AthenaAuthTrustedProviders;\n}\n\ntype ResolveAthenaAuthDatabase<TConfig extends AthenaAuthServerConfig> =\n  TConfig[\"database\"] extends (...args: never[]) => infer TResult\n    ? TResult\n    : TConfig[\"database\"];\n\nexport interface AthenaAuthRequestContext<\n  TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n  auth: AthenaAuthServer<TConfig>;\n  basePath: string;\n  baseURL: string;\n  cookies: AthenaAuthCookies;\n  database: ResolveAthenaAuthDatabase<TConfig>;\n  headers: Headers;\n  options: TConfig;\n  origin: string;\n  path: string;\n  request: Request;\n  runtime: AthenaAuthServerRuntimeOptions;\n  socialProviders: NonNullable<TConfig[\"socialProviders\"]>;\n  trustedOrigins: string[];\n  trustedProviders: string[];\n  url: URL;\n}\n\nexport interface AthenaAuthContext<\n  TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n  auth: AthenaAuthServer<TConfig>;\n  basePath: string;\n  baseURL?: string;\n  cookies: AthenaAuthCookies;\n  database: ResolveAthenaAuthDatabase<TConfig>;\n  options: TConfig;\n  origin?: string;\n  plugins: AthenaAuthPlugin[];\n  runtime: AthenaAuthServerRuntimeOptions;\n  socialProviders: NonNullable<TConfig[\"socialProviders\"]>;\n  trustedOrigins: string[];\n  trustedProviders: string[];\n}\n\nexport interface AthenaAuthServerApi<\n  TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n  applyResponseCookies: AthenaAuthServer<TConfig>[\"applyResponseCookies\"];\n  clearSession: AthenaAuthServer<TConfig>[\"clearSession\"];\n  createCookieContext: AthenaAuthServer<TConfig>[\"createCookieContext\"];\n  getCookieCache: typeof getCookieCache;\n  getSessionCookie: typeof getSessionCookie;\n  resolveRequestContext: AthenaAuthServer<TConfig>[\"resolveRequestContext\"];\n  runAfterHooks: AthenaAuthServer<TConfig>[\"runAfterHooks\"];\n  setSession: AthenaAuthServer<TConfig>[\"setSession\"];\n}\n\nexport interface AthenaAuthServer<\n  TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n  $context: Promise<AthenaAuthContext<TConfig>>;\n  $ERROR_CODES: Record<string, string>;\n  api: AthenaAuthServerApi<TConfig> & Record<string, unknown>;\n  applyResponseCookies: (ctx: AthenaAuthPluginContext) => Promise<Headers>;\n  clearSession: (\n    input?: AthenaAuthCookieRuntimeInput,\n    skipDontRememberMe?: boolean\n  ) => void;\n  config: TConfig;\n  cookies: AthenaAuthCookies;\n  createCookieContext: (\n    input?: AthenaAuthCookieRuntimeInput\n  ) => AthenaCookieContextRuntime;\n  database: ResolveAthenaAuthDatabase<TConfig>;\n  handler: (request: Request) => Promise<Response>;\n  options: TConfig;\n  plugins: AthenaAuthPlugin[];\n  resolveRequestContext: (\n    request: Request\n  ) => Promise<AthenaAuthRequestContext<TConfig>>;\n  runAfterHooks: (\n    ctx: AthenaAuthPluginContext\n  ) => Promise<AthenaAuthPluginContext>;\n  runtime: AthenaAuthServerRuntimeOptions;\n  setSession: (\n    input: AthenaAuthCookieRuntimeInput | undefined,\n    session: AthenaSessionPair,\n    dontRememberMe?: boolean,\n    overrides?: Partial<AthenaCookieOptions>\n  ) => Promise<void>;\n  socialProviders: NonNullable<TConfig[\"socialProviders\"]>;\n}\n\nfunction capitalize(value: string): string {\n  return value.length > 0\n    ? `${value[0]?.toUpperCase()}${value.slice(1)}`\n    : value;\n}\n\nfunction serializeSetCookieValue(\n  name: string,\n  value: string,\n  attributes: AthenaCookieOptions\n): string {\n  const parts = [`${name}=${encodeURIComponent(value)}`];\n  const knownKeys = new Set([\n    \"maxAge\",\n    \"expires\",\n    \"domain\",\n    \"path\",\n    \"secure\",\n    \"httpOnly\",\n    \"partitioned\",\n    \"sameSite\",\n  ]);\n\n  if (attributes.maxAge !== undefined) {\n    parts.push(`Max-Age=${Math.trunc(attributes.maxAge)}`);\n  }\n  if (attributes.expires instanceof Date) {\n    parts.push(`Expires=${attributes.expires.toUTCString()}`);\n  }\n  if (attributes.domain) {\n    parts.push(`Domain=${attributes.domain}`);\n  }\n  if (attributes.path) {\n    parts.push(`Path=${attributes.path}`);\n  }\n  if (attributes.secure) {\n    parts.push(\"Secure\");\n  }\n  if (attributes.httpOnly) {\n    parts.push(\"HttpOnly\");\n  }\n  if (attributes.partitioned) {\n    parts.push(\"Partitioned\");\n  }\n  if (attributes.sameSite) {\n    parts.push(`SameSite=${capitalize(attributes.sameSite)}`);\n  }\n\n  for (const [key, rawValue] of Object.entries(attributes)) {\n    if (\n      knownKeys.has(key) ||\n      rawValue === undefined ||\n      rawValue === null ||\n      rawValue === false\n    ) {\n      continue;\n    }\n    if (rawValue === true) {\n      parts.push(key);\n      continue;\n    }\n    parts.push(`${key}=${String(rawValue)}`);\n  }\n\n  return parts.join(\"; \");\n}\n\nfunction readCookieFromHeaders(\n  headers: Headers | undefined,\n  name: string\n): string | undefined {\n  const cookieHeader = headers?.get(\"cookie\");\n  if (!cookieHeader) {\n    return;\n  }\n  return parseCookies(cookieHeader).get(name);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction resolveSessionCandidate(value: unknown): AthenaSessionPair | null {\n  if (!isRecord(value)) {\n    return null;\n  }\n\n  const session = isRecord(value.session) ? value.session : undefined;\n  const user = isRecord(value.user) ? value.user : undefined;\n  if (\n    session &&\n    typeof session.token === \"string\" &&\n    session.token.length > 0 &&\n    user\n  ) {\n    return {\n      session: session as Record<string, unknown> & { token: string },\n      user: user as Record<string, unknown>,\n    };\n  }\n\n  return null;\n}\n\nfunction inferSessionPair(returned: unknown): AthenaSessionPair | null {\n  return (\n    resolveSessionCandidate(returned) ??\n    (isRecord(returned) ? resolveSessionCandidate(returned.data) : null) ??\n    (isRecord(returned) ? resolveSessionCandidate(returned.session) : null)\n  );\n}\n\nfunction resolveResponseHeaders(ctx: AthenaAuthPluginContext): Headers {\n  if (ctx.context.responseHeaders instanceof Headers) {\n    return ctx.context.responseHeaders;\n  }\n\n  const headers = new Headers();\n  ctx.context.responseHeaders = headers;\n  return headers;\n}\n\nfunction normalizeBaseURL(baseURL: string): string {\n  return baseURL.replace(/\\/$/, \"\");\n}\n\nfunction normalizeBasePath(basePath: string | undefined): string {\n  if (!basePath || basePath === \"/\") {\n    return DEFAULT_AUTH_BASE_PATH;\n  }\n\n  const normalized = basePath.startsWith(\"/\") ? basePath : `/${basePath}`;\n  return normalized.endsWith(\"/\") && normalized.length > 1\n    ? normalized.slice(0, -1)\n    : normalized;\n}\n\nfunction isDynamicBaseURLConfig(\n  baseURL: AthenaAuthBaseURLConfig | undefined\n): baseURL is Exclude<AthenaAuthBaseURLConfig, string | undefined> {\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 getRequestUrl(request: Request): URL {\n  try {\n    return new URL(request.url);\n  } catch {\n    return new URL(\"http://localhost\");\n  }\n}\n\nfunction getRequestHost(request: Request, url: URL): string | null {\n  const forwardedHost = request.headers\n    .get(\"x-forwarded-host\")\n    ?.split(\",\")[0]\n    ?.trim();\n  const host = forwardedHost || request.headers.get(\"host\") || url.host;\n  return host || null;\n}\n\nfunction getRequestProtocol(\n  request: Request,\n  configuredProtocol: \"http\" | \"https\" | \"auto\" | undefined,\n  url: URL\n): \"http\" | \"https\" {\n  if (configuredProtocol === \"http\" || configuredProtocol === \"https\") {\n    return configuredProtocol;\n  }\n\n  const forwardedProto = request.headers\n    .get(\"x-forwarded-proto\")\n    ?.split(\",\")[0]\n    ?.trim();\n  if (forwardedProto === \"http\" || forwardedProto === \"https\") {\n    return forwardedProto;\n  }\n\n  if (url.protocol === \"http:\" || url.protocol === \"https:\") {\n    return url.protocol.slice(0, -1) as \"http\" | \"https\";\n  }\n\n  return \"http\";\n}\n\nfunction resolveRequestBaseURL(\n  baseURL: AthenaAuthBaseURLConfig | undefined,\n  request: Request\n): string | null {\n  if (typeof baseURL === \"string\") {\n    return normalizeBaseURL(baseURL);\n  }\n\n  const requestUrl = getRequestUrl(request);\n  const host = getRequestHost(request, requestUrl);\n  if (!host) {\n    return null;\n  }\n\n  if (isDynamicBaseURLConfig(baseURL)) {\n    const allowedHosts = baseURL.allowedHosts ?? [];\n    if (allowedHosts.length > 0 && !allowedHosts.includes(host)) {\n      return null;\n    }\n  }\n\n  const protocol =\n    typeof baseURL === \"object\" && baseURL !== null\n      ? getRequestProtocol(request, baseURL.protocol, requestUrl)\n      : getRequestProtocol(request, undefined, requestUrl);\n\n  return `${protocol}://${host}`;\n}\n\nfunction getOrigin(baseURL: string | undefined): string | undefined {\n  if (!baseURL) {\n    return;\n  }\n\n  try {\n    return new URL(baseURL).origin;\n  } catch {\n    // Invalid baseURL is treated as no origin.\n  }\n}\n\nasync function resolveTrustedOrigins(\n  config: AthenaAuthServerConfig,\n  baseURL: string | undefined,\n  request?: Request\n): Promise<string[]> {\n  const resolved =\n    typeof config.trustedOrigins === \"function\"\n      ? await config.trustedOrigins(request)\n      : (config.trustedOrigins ?? []);\n\n  const values = [getOrigin(baseURL), ...resolved];\n\n  return Array.from(\n    new Set(\n      values.filter(\n        (value): value is string =>\n          typeof value === \"string\" && value.length > 0\n      )\n    )\n  );\n}\n\nasync function resolveTrustedProviders(\n  config: AthenaAuthServerConfig,\n  request?: Request\n): Promise<string[]> {\n  const configured =\n    typeof config.trustedProviders === \"function\"\n      ? await config.trustedProviders(request)\n      : (config.trustedProviders ?? []);\n\n  const values = [...Object.keys(config.socialProviders ?? {}), ...configured];\n\n  return Array.from(\n    new Set(\n      values.filter(\n        (value): value is string =>\n          typeof value === \"string\" && value.length > 0\n      )\n    )\n  );\n}\n\nfunction createJsonResponse(payload: unknown, init?: ResponseInit): Response {\n  const headers = new Headers(init?.headers);\n  if (!headers.has(\"content-type\")) {\n    headers.set(\"content-type\", \"application/json; charset=utf-8\");\n  }\n  return new Response(JSON.stringify(payload), {\n    ...init,\n    headers,\n  });\n}\n\nfunction mergeResponseHeaders(response: Response, headers: Headers): Response {\n  return new Response(response.body, {\n    headers,\n    status: response.status,\n    statusText: response.statusText,\n  });\n}\n\nexport function defineAthenaAuthConfig<TConfig extends AthenaAuthServerConfig>(\n  config: TConfig\n): TConfig {\n  return config;\n}\n\nexport function athenaAuth<TConfig extends AthenaAuthServerConfig>(\n  config: TConfig\n): AthenaAuthServer<TConfig> {\n  const normalizedBasePath = normalizeBasePath(config.basePath);\n  const staticBaseURL =\n    typeof config.baseURL === \"string\"\n      ? normalizeBaseURL(config.baseURL)\n      : undefined;\n  const runtime: AthenaAuthServerRuntimeOptions = {\n    basePath: normalizedBasePath,\n    baseURL: staticBaseURL,\n    cookies: {\n      advanced: config.advanced,\n      session: config.session,\n    },\n    secret: config.secret,\n  };\n  const resolvedDatabase = (\n    typeof config.database === \"function\"\n      ? config.database(runtime)\n      : config.database\n  ) as ResolveAthenaAuthDatabase<TConfig>;\n  const cookies = getCookies({\n    advanced: config.advanced,\n    baseURL: staticBaseURL ?? config.baseURL,\n    session: config.session,\n  });\n\n  const auth = {} as AthenaAuthServer<TConfig>;\n\n  const createCookieContext: AthenaAuthServer<TConfig>[\"createCookieContext\"] =\n    (input = {}) => {\n      const responseHeaders = input.responseHeaders ?? new Headers();\n      const runtimeHeaders = input.headers;\n      const authCookies = input.cookies ?? auth.cookies;\n\n      const setCookie =\n        input.setCookie ??\n        ((name, value, attributes) => {\n          responseHeaders.append(\n            \"set-cookie\",\n            serializeSetCookieValue(name, value, attributes)\n          );\n        });\n\n      return {\n        context: {\n          authCookies,\n          options: {\n            account: {\n              storeAccountCookie: true,\n            },\n            session: {\n              cookieCache: config.session?.cookieCache,\n            },\n          },\n          secret: runtime.secret,\n          sessionConfig: {\n            expiresIn: config.session?.expiresIn,\n          },\n          setNewSession: input.setNewSession,\n        },\n        getCookie:\n          input.getCookie ??\n          ((name) => readCookieFromHeaders(runtimeHeaders, name)),\n        getSignedCookie: input.getSignedCookie,\n        headers: runtimeHeaders,\n        logger: input.logger,\n        setCookie,\n        setSignedCookie: input.setSignedCookie,\n      };\n    };\n\n  const setSession: AthenaAuthServer<TConfig>[\"setSession\"] = async (\n    input,\n    session,\n    dontRememberMe,\n    overrides\n  ) => {\n    const cookieContext = createCookieContext(input);\n    await setSessionCookie(cookieContext, session, dontRememberMe, overrides);\n  };\n\n  const clearSession: AthenaAuthServer<TConfig>[\"clearSession\"] = (\n    input,\n    skipDontRememberMe\n  ) => {\n    const cookieContext = createCookieContext(input);\n    deleteSessionCookie(cookieContext, skipDontRememberMe);\n  };\n\n  const applyResponseCookies: AthenaAuthServer<TConfig>[\"applyResponseCookies\"] =\n    async (ctx) => {\n      const responseHeaders = resolveResponseHeaders(ctx);\n      const session =\n        ctx.context.setSession ?? inferSessionPair(ctx.context.returned);\n\n      if (ctx.context.clearSession) {\n        clearSession({\n          headers: ctx.headers,\n          responseHeaders,\n        });\n      }\n\n      if (session) {\n        await setSession(\n          {\n            headers: ctx.headers,\n            responseHeaders,\n          },\n          session,\n          ctx.context.dontRememberMe,\n          ctx.context.cookieOverrides\n        );\n      }\n\n      return responseHeaders;\n    };\n\n  const runAfterHooks: AthenaAuthServer<TConfig>[\"runAfterHooks\"] = async (\n    ctx\n  ) => {\n    for (const plugin of auth.plugins) {\n      for (const hook of plugin.hooks?.after ?? []) {\n        if (!hook.matcher(ctx)) {\n          continue;\n        }\n        await hook.handler({\n          ...ctx,\n          auth,\n        });\n      }\n    }\n    return ctx;\n  };\n\n  const resolveRequestContext: AthenaAuthServer<TConfig>[\"resolveRequestContext\"] =\n    async (request) => {\n      const requestUrl = getRequestUrl(request);\n      const resolvedBaseURL = resolveRequestBaseURL(config.baseURL, request);\n      if (!resolvedBaseURL) {\n        throw new Error(\n          isDynamicBaseURLConfig(config.baseURL)\n            ? \"Could not resolve base URL from request. Check allowedHosts/baseURL.\"\n            : \"Could not resolve base URL from request.\"\n        );\n      }\n\n      const requestCookies = getCookies({\n        advanced: config.advanced,\n        baseURL: resolvedBaseURL,\n        session: config.session,\n      });\n      const trustedOrigins = await resolveTrustedOrigins(\n        config,\n        resolvedBaseURL,\n        request\n      );\n      const trustedProviders = await resolveTrustedProviders(config, request);\n\n      return {\n        auth,\n        basePath: normalizedBasePath,\n        baseURL: resolvedBaseURL,\n        cookies: requestCookies,\n        database: auth.database,\n        headers: request.headers,\n        options: config,\n        origin: getOrigin(resolvedBaseURL) ?? resolvedBaseURL,\n        path: requestUrl.pathname,\n        request,\n        runtime: {\n          ...runtime,\n          baseURL: resolvedBaseURL,\n        },\n        socialProviders: auth.socialProviders,\n        trustedOrigins,\n        trustedProviders,\n        url: requestUrl,\n      };\n    };\n\n  const handler: AthenaAuthServer<TConfig>[\"handler\"] = async (request) => {\n    const requestContext = await resolveRequestContext(request);\n\n    if (typeof config.handler !== \"function\") {\n      return createJsonResponse(\n        {\n          basePath: requestContext.basePath,\n          code: ATHENA_AUTH_BASE_ERROR_CODES.HANDLER_NOT_CONFIGURED,\n          error:\n            \"No native auth handler was configured for this Athena auth instance.\",\n          ok: false,\n          path: requestContext.path,\n        },\n        { status: 501 }\n      );\n    }\n\n    const result = await config.handler(requestContext);\n    if (result instanceof Response) {\n      return result;\n    }\n\n    const response =\n      result.response ??\n      (result.returned === undefined\n        ? new Response(null, { status: 204 })\n        : createJsonResponse(result.returned));\n\n    const responseHeaders = new Headers(response.headers);\n    await runAfterHooks({\n      context: {\n        clearSession: result.clearSession,\n        cookieOverrides: result.cookieOverrides,\n        dontRememberMe: result.dontRememberMe,\n        responseHeaders,\n        returned: result.returned,\n        setSession: result.setSession,\n      },\n      headers: request.headers,\n      path: requestContext.path,\n    });\n\n    return mergeResponseHeaders(response, responseHeaders);\n  };\n\n  const api: AthenaAuthServer<TConfig>[\"api\"] = Object.assign(\n    {\n      applyResponseCookies,\n      clearSession,\n      createCookieContext,\n      getCookieCache,\n      getSessionCookie,\n      resolveRequestContext,\n      runAfterHooks,\n      setSession,\n    } satisfies AthenaAuthServerApi<TConfig>,\n    config.api ?? {}\n  );\n\n  const $ERROR_CODES = {\n    ...auth.plugins?.reduce<Record<string, string>>((acc, plugin) => {\n      if (plugin.$ERROR_CODES) {\n        Object.assign(acc, plugin.$ERROR_CODES);\n      }\n      return acc;\n    }, {}),\n    ...(config.errorCodes ?? {}),\n    ...ATHENA_AUTH_BASE_ERROR_CODES,\n  };\n\n  Object.assign(auth, {\n    $ERROR_CODES,\n    api,\n    applyResponseCookies,\n    clearSession,\n    config,\n    cookies,\n    createCookieContext,\n    database: resolvedDatabase,\n    handler,\n    options: config,\n    plugins: [...(config.plugins ?? [])],\n    resolveRequestContext,\n    runAfterHooks,\n    runtime,\n    setSession,\n    socialProviders: (config.socialProviders ?? {}) as NonNullable<\n      TConfig[\"socialProviders\"]\n    >,\n  } satisfies Omit<AthenaAuthServer<TConfig>, \"$context\">);\n\n  auth.$context = Promise.all([\n    resolveTrustedOrigins(config, staticBaseURL),\n    resolveTrustedProviders(config),\n  ]).then(([trustedOrigins, trustedProviders]) => ({\n    auth,\n    basePath: normalizedBasePath,\n    baseURL: staticBaseURL,\n    cookies: auth.cookies,\n    database: auth.database,\n    options: config,\n    origin: getOrigin(staticBaseURL),\n    plugins: auth.plugins,\n    runtime,\n    socialProviders: auth.socialProviders,\n    trustedOrigins,\n    trustedProviders,\n  }));\n\n  return auth;\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","function getAtob(): ((input: string) => string) | undefined {\n  const candidate = (globalThis as { atob?: unknown }).atob;\n  return typeof candidate === \"function\"\n    ? (candidate as (input: string) => string)\n    : undefined;\n}\n\nfunction getBtoa(): ((input: string) => string) | undefined {\n  const candidate = (globalThis as { btoa?: unknown }).btoa;\n  return typeof candidate === \"function\"\n    ? (candidate as (input: string) => string)\n    : undefined;\n}\n\nfunction bytesToBinaryString(bytes: Uint8Array): string {\n  let result = \"\";\n  for (const byte of bytes) {\n    result += String.fromCharCode(byte);\n  }\n  return result;\n}\n\nfunction binaryStringToBytes(binary: string): Uint8Array {\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i);\n  }\n  return bytes;\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n  const btoaFn = getBtoa();\n  if (btoaFn) {\n    return btoaFn(bytesToBinaryString(bytes));\n  }\n  return Buffer.from(bytes).toString(\"base64\");\n}\n\nfunction decodeBase64(base64: string): Uint8Array {\n  const atobFn = getAtob();\n  if (atobFn) {\n    return binaryStringToBytes(atobFn(base64));\n  }\n  return new Uint8Array(Buffer.from(base64, \"base64\"));\n}\n\nexport function encodeBytesToBase64Url(bytes: Uint8Array): string {\n  return encodeBase64(bytes)\n    .replace(/\\+/g, \"-\")\n    .replace(/\\//g, \"_\")\n    .replace(/[=]+$/g, \"\");\n}\n\nexport function encodeStringToBase64Url(value: string): string {\n  const bytes = new TextEncoder().encode(value);\n  return encodeBytesToBase64Url(bytes);\n}\n\nexport function decodeBase64UrlToBytes(value: string): Uint8Array {\n  const normalized = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const paddingLength = normalized.length % 4;\n  const padded =\n    paddingLength === 0\n      ? normalized\n      : `${normalized}${\"=\".repeat(4 - paddingLength)}`;\n  return decodeBase64(padded);\n}\n\nexport function decodeBase64UrlToString(value: string): string {\n  return new TextDecoder().decode(decodeBase64UrlToBytes(value));\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 {\n  decodeBase64UrlToString,\n  encodeBytesToBase64Url,\n  encodeStringToBase64Url,\n} from \"./base64.ts\";\n\ntype JwtPayload = Record<string, unknown>;\n\nconst HS256_ALG = \"HS256\";\n\ninterface SubtleCryptoLike {\n  importKey: (\n    format: \"raw\",\n    keyData: Uint8Array,\n    algorithm: { name: \"HMAC\"; hash: \"SHA-256\" },\n    extractable: boolean,\n    keyUsages: Array<\"sign\" | \"verify\">\n  ) => Promise<unknown>;\n  sign: (\n    algorithm: \"HMAC\",\n    key: unknown,\n    data: Uint8Array\n  ) => Promise<ArrayBuffer>;\n}\n\ninterface WebCryptoLike {\n  subtle?: SubtleCryptoLike;\n}\n\nasync function getSubtleCrypto(): Promise<SubtleCryptoLike> {\n  const globalCrypto = (globalThis as { crypto?: WebCryptoLike }).crypto;\n  if (globalCrypto?.subtle) {\n    return globalCrypto.subtle;\n  }\n  const { webcrypto } = await import(\"node:crypto\");\n  const subtle = (webcrypto as unknown as WebCryptoLike).subtle;\n  if (!subtle) {\n    throw new Error(\"Web Crypto subtle API is unavailable.\");\n  }\n  return subtle;\n}\n\nasync function importHmacKey(\n  secret: string,\n  usage: \"sign\" | \"verify\"\n): Promise<unknown> {\n  const subtle = await getSubtleCrypto();\n  return subtle.importKey(\n    \"raw\",\n    new TextEncoder().encode(secret),\n    {\n      hash: \"SHA-256\",\n      name: \"HMAC\",\n    },\n    false,\n    [usage] as Array<\"sign\" | \"verify\">\n  );\n}\n\nfunction bufferToBytes(buffer: ArrayBuffer): Uint8Array {\n  return new Uint8Array(buffer);\n}\n\nfunction parseJwtPayload(payloadSegment: string): JwtPayload | null {\n  try {\n    const decoded = decodeBase64UrlToString(payloadSegment);\n    const payload = JSON.parse(decoded) as unknown;\n    if (!payload || typeof payload !== \"object\") {\n      return null;\n    }\n    return payload as JwtPayload;\n  } catch {\n    return null;\n  }\n}\n\nfunction isJwtExpired(payload: JwtPayload): boolean {\n  const exp = payload.exp;\n  if (typeof exp !== \"number\") {\n    return false;\n  }\n  return exp < Math.floor(Date.now() / 1000);\n}\n\nexport async function signHmacBase64Url(\n  secret: string,\n  value: string\n): Promise<string> {\n  const subtle = await getSubtleCrypto();\n  const key = await importHmacKey(secret, \"sign\");\n  const signature = await subtle.sign(\n    \"HMAC\",\n    key,\n    new TextEncoder().encode(value)\n  );\n  return encodeBytesToBase64Url(bufferToBytes(signature));\n}\n\nexport async function signJwtHS256(\n  payload: JwtPayload,\n  secret: string,\n  expiresIn = 60 * 5\n): Promise<string> {\n  const now = Math.floor(Date.now() / 1000);\n  const header = { alg: HS256_ALG, typ: \"JWT\" };\n  const fullPayload = {\n    ...payload,\n    exp: now + expiresIn,\n    iat: now,\n  };\n  const headerPart = encodeStringToBase64Url(JSON.stringify(header));\n  const payloadPart = encodeStringToBase64Url(JSON.stringify(fullPayload));\n  const message = `${headerPart}.${payloadPart}`;\n  const signature = await signHmacBase64Url(secret, message);\n  return `${message}.${signature}`;\n}\n\nexport async function verifyJwtHS256<TPayload extends JwtPayload = JwtPayload>(\n  token: string,\n  secret: string\n): Promise<TPayload | null> {\n  const parts = token.split(\".\");\n  if (parts.length !== 3) {\n    return null;\n  }\n\n  const [headerPart, payloadPart, signaturePart] = parts;\n  if (!(headerPart && payloadPart && signaturePart)) {\n    return null;\n  }\n\n  let header: { alg?: string } | null = null;\n  try {\n    header = JSON.parse(decodeBase64UrlToString(headerPart)) as {\n      alg?: string;\n    };\n  } catch {\n    return null;\n  }\n\n  if (!header || header.alg !== HS256_ALG) {\n    return null;\n  }\n\n  const payload = parseJwtPayload(payloadPart);\n  if (!payload) {\n    return null;\n  }\n\n  const expectedSignature = await signHmacBase64Url(\n    secret,\n    `${headerPart}.${payloadPart}`\n  );\n  if (expectedSignature !== signaturePart) {\n    return null;\n  }\n\n  if (isJwtExpired(payload)) {\n    return null;\n  }\n\n  return payload as TPayload;\n}\n","import { decodeBase64UrlToString } from \"./base64.ts\";\nimport { parseCookies } from \"./cookie-utils.ts\";\nimport type {\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n} from \"./types.ts\";\n\nconst ALLOWED_COOKIE_SIZE = 4096;\nconst ESTIMATED_EMPTY_COOKIE_SIZE = 200;\nconst CHUNK_SIZE = ALLOWED_COOKIE_SIZE - ESTIMATED_EMPTY_COOKIE_SIZE;\n\ninterface StoreCookie {\n  attributes: AthenaCookieOptions;\n  name: string;\n  value: string;\n}\n\ntype Chunks = Record<string, string>;\n\nfunction getChunkIndex(cookieName: string): number {\n  const parts = cookieName.split(\".\");\n  const lastPart = parts.at(-1);\n  const index = Number.parseInt(lastPart || \"0\", 10);\n  return Number.isNaN(index) ? 0 : index;\n}\n\nfunction readExistingChunks(\n  cookieName: string,\n  ctx: AthenaCookieContextRuntime\n): Chunks {\n  const chunks: Chunks = {};\n  const cookies = parseCookies(ctx.headers?.get(\"cookie\") || \"\");\n  for (const [name, value] of cookies) {\n    if (name.startsWith(cookieName)) {\n      chunks[name] = value;\n    }\n  }\n  return chunks;\n}\n\nfunction joinChunks(chunks: Chunks): string {\n  const sortedKeys = Object.keys(chunks).sort(\n    (left, right) => getChunkIndex(left) - getChunkIndex(right)\n  );\n  return sortedKeys.map((key) => chunks[key]).join(\"\");\n}\n\nfunction chunkCookie(\n  storeName: string,\n  cookie: StoreCookie,\n  chunks: Chunks,\n  ctx: AthenaCookieContextRuntime\n): StoreCookie[] {\n  const chunkCount = Math.ceil(cookie.value.length / CHUNK_SIZE);\n  if (chunkCount === 1) {\n    chunks[cookie.name] = cookie.value;\n    return [cookie];\n  }\n\n  const cookies: StoreCookie[] = [];\n  for (let index = 0; index < chunkCount; index++) {\n    const name = `${cookie.name}.${index}`;\n    const start = index * CHUNK_SIZE;\n    const value = cookie.value.slice(start, start + CHUNK_SIZE);\n    cookies.push({\n      ...cookie,\n      name,\n      value,\n    });\n    chunks[name] = value;\n  }\n\n  ctx.logger?.debug?.(`CHUNKING_${storeName.toUpperCase()}_COOKIE`, {\n    chunkCount,\n    chunks: cookies.map(\n      (entry) => entry.value.length + ESTIMATED_EMPTY_COOKIE_SIZE\n    ),\n    emptyCookieSize: ESTIMATED_EMPTY_COOKIE_SIZE,\n    message: `${storeName} cookie exceeds allowed ${ALLOWED_COOKIE_SIZE} bytes.`,\n    valueSize: cookie.value.length,\n  });\n\n  return cookies;\n}\n\nfunction getCleanCookies(\n  chunks: Chunks,\n  cookieOptions: AthenaCookieOptions\n): Record<string, StoreCookie> {\n  const cleanedChunks: Record<string, StoreCookie> = {};\n  for (const name of Object.keys(chunks)) {\n    cleanedChunks[name] = {\n      attributes: {\n        ...cookieOptions,\n        maxAge: 0,\n      },\n      name,\n      value: \"\",\n    };\n  }\n  return cleanedChunks;\n}\n\nconst storeFactory =\n  (storeName: string) =>\n  (\n    cookieName: string,\n    cookieOptions: AthenaCookieOptions,\n    ctx: AthenaCookieContextRuntime\n  ) => {\n    const chunks = readExistingChunks(cookieName, ctx);\n\n    return {\n      chunk(\n        value: string,\n        options?: Partial<AthenaCookieOptions>\n      ): StoreCookie[] {\n        const cleanedChunks = getCleanCookies(chunks, cookieOptions);\n        for (const name of Object.keys(chunks)) {\n          delete chunks[name];\n        }\n\n        const cookies: Record<string, StoreCookie> = cleanedChunks;\n        const chunked = chunkCookie(\n          storeName,\n          {\n            attributes: {\n              ...cookieOptions,\n              ...options,\n            },\n            name: cookieName,\n            value,\n          },\n          chunks,\n          ctx\n        );\n        for (const chunk of chunked) {\n          cookies[chunk.name] = chunk;\n        }\n        return Object.values(cookies);\n      },\n      clean(): StoreCookie[] {\n        const cleanedChunks = getCleanCookies(chunks, cookieOptions);\n        for (const name of Object.keys(chunks)) {\n          delete chunks[name];\n        }\n        return Object.values(cleanedChunks);\n      },\n      getValue(): string {\n        return joinChunks(chunks);\n      },\n      hasChunks(): boolean {\n        return Object.keys(chunks).length > 0;\n      },\n      setCookies(cookies: StoreCookie[]): void {\n        for (const cookie of cookies) {\n          ctx.setCookie(cookie.name, cookie.value, cookie.attributes);\n        }\n      },\n    };\n  };\n\nexport const createSessionStore = storeFactory(\"Session\");\nexport const createAccountStore = storeFactory(\"Account\");\n\nexport function getChunkedCookie(\n  ctx: AthenaCookieContextRuntime,\n  cookieName: string\n): string | null {\n  const value = ctx.getCookie?.(cookieName);\n  if (value) {\n    return value;\n  }\n\n  const chunks: Array<{ index: number; value: string }> = [];\n  const cookieHeader = ctx.headers?.get(\"cookie\");\n  if (!cookieHeader) {\n    return null;\n  }\n\n  for (const [name, parsedValue] of parseCookies(cookieHeader)) {\n    if (!name.startsWith(`${cookieName}.`)) {\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      chunks.push({ index, value: parsedValue });\n    }\n  }\n\n  if (chunks.length === 0) {\n    return null;\n  }\n\n  chunks.sort((left, right) => left.index - right.index);\n  return chunks.map((entry) => entry.value).join(\"\");\n}\n\n/**\n * SDK helper to read an account cookie value.\n * - If plain JSON: returns parsed value.\n * - If base64url-encoded JSON: returns parsed value.\n * - Otherwise: returns the raw cookie string.\n */\nexport async function getAccountCookie(\n  ctx: AthenaCookieContextRuntime,\n  cookieName = ctx.context.authCookies.accountData.name\n): Promise<unknown | null> {\n  const value = getChunkedCookie(ctx, cookieName);\n  if (!value) {\n    return null;\n  }\n\n  try {\n    return JSON.parse(value) as unknown;\n  } catch {\n    // Fall through and try base64url payload parsing.\n  }\n\n  try {\n    return JSON.parse(decodeBase64UrlToString(value)) as unknown;\n  } catch {\n    return value;\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","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","/**\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","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","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 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","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 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 { 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 { 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","export {\n  ATHENA_BILLING_AUTHORIZATION_DENIED,\n  ATHENA_BILLING_CONFIG_CONFLICT,\n  ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n  ATHENA_BILLING_OPERATION_UNAVAILABLE,\n  ATHENA_BILLING_PROVIDER_SDK_REQUIRED,\n  AthenaBillingAuthorizationError,\n  AthenaBillingCapabilityError,\n  AthenaBillingError,\n  AthenaBillingProviderRequestError,\n  isAthenaBillingAuthorizationError,\n  isAthenaBillingCapabilityError,\n  isAthenaBillingProviderRequestError,\n} from \"./errors.ts\";\nexport {\n  type BillingLiveHttpRoute,\n  type BillingLiveHttpRoutes,\n  billingLiveHttpRoutes,\n} from \"./live-http-routes.ts\";\nexport type {\n  AthenaBillingCallOptions,\n  AthenaBillingClientConfig,\n  AthenaBillingEnvelope,\n  AthenaBillingHttpMethod,\n  AthenaBillingJson,\n  AthenaBillingModule,\n  BillingConnectionRefInput,\n  BillingCreateConnectionInput,\n  BillingEnsureCustomerInput,\n  BillingListQuery,\n  BillingProvisionSinksInput,\n  BillingReconcileInput,\n  BillingUpdateConnectionInput,\n  BillingUpdateCustomerInput,\n} from \"./module.ts\";\nexport { billingSdkManifest, createBillingModule } from \"./module.ts\";\nexport type {\n  MollieSdkAdapterFactory,\n  MollieSdkClient,\n  MollieSdkClientOptions,\n  MollieSdkConstructor,\n  MollieSdkResourcePort,\n} from \"./providers/types.ts\";\nexport type {\n  BillingCapabilities,\n  BillingOperation,\n  BillingOperationCapability,\n  BillingOperationCapabilityReason,\n  BillingOperationSafety,\n} from \"./runtime/capabilities.ts\";\nexport { assertBillingOperationAvailable } from \"./runtime/capabilities.ts\";\nexport { ATHENA_BILLING_RETURN_QUERY } from \"./runtime/self/return-query.ts\";\nexport type {\n  AthenaBillingRuntime,\n  BillingAdminBootstrapRetryResult,\n  BillingAdminConflictResolveResult,\n  BillingAdminConnectionMaterializeResult,\n  BillingAdminIngestionHealth,\n  BillingAdminPort,\n  BillingAdminWebhookStatus,\n  BillingCatalogPort,\n  BillingCheckoutPort,\n  BillingInvoicePort,\n  BillingPage,\n  BillingPaymentPort,\n  BillingPricePort,\n  BillingProductPort,\n  BillingRelationPort,\n  BillingSelfCheckoutCreateInput,\n  BillingSelfCheckoutLineInput,\n  BillingSelfCheckoutResumeInput,\n  BillingSelfCheckoutResumeResult,\n  BillingSelfPaymentView,\n  BillingSelfPort,\n  BillingSelfSubscriptionChangeInput,\n  BillingSelfSubscriptionChangeOperation,\n  BillingSelfSubscriptionChangeResult,\n  BillingSelfSubscriptionChangeStatus,\n  BillingSelfSubscriptionEnrollInput,\n  BillingSelfSubscriptionEnrollResult,\n  BillingSubscriptionPort,\n  BillingWebhookPort,\n} from \"./runtime/types.ts\";\nexport type {\n  AthenaBillingCatalogConfig,\n  AthenaBillingCatalogPriceInput,\n  AthenaBillingCatalogProductInput,\n  AthenaBillingCatalogRelationInput,\n  BillingCancelSubscriptionInput,\n  BillingCheckout,\n  BillingCreateCheckoutInput,\n  BillingCustomer,\n  BillingInvoice,\n  BillingMoney,\n  BillingOwnershipStatus,\n  BillingPayment,\n  BillingPaymentLink,\n  BillingPaymentStatus,\n  BillingPrice,\n  BillingProduct,\n  BillingProviderName,\n  BillingProviderSubjectKind,\n  BillingRefund,\n  BillingRuntimeMode,\n  BillingSubjectBinding,\n  BillingSubjectBindingSource,\n  BillingSubjectBindingStatus,\n  BillingSubjectRef,\n  BillingSubscription,\n  BillingWebhook,\n  BillingCatalogRelation,\n  BillingCatalogRelationType,\n} from \"./types.ts\";\nexport { BILLING_CATALOG_RELATION_TYPES } from \"./types.ts\";\nexport type { BillingIngressAdmissionPolicy } from \"./ingestion/types.ts\";\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  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 { 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","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","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","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","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 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 { 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 { 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 { 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","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","export const ATHENA_BILLING_RETURN_QUERY = \"athena_billing_return\";\n\nexport function appendBillingReturnToken(url: string, token: string): string {\n  const parsed = new URL(url);\n  parsed.searchParams.set(ATHENA_BILLING_RETURN_QUERY, token);\n  return parsed.href;\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","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","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 { 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","/**\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 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","/**\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 * 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","/**\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 public contracts v1.\n *\n * Breaking changes belong in `contracts/v2/` with explicit adapters.\n * @see docs/adr/0021-layered-contract-policy.md\n */\n\nexport type {\n  AthenaJsonArray,\n  AthenaJsonObject,\n  AthenaJsonPrimitive,\n  AthenaJsonValue,\n  JsonObject,\n  JsonPrimitive,\n  JsonValue,\n  OffsetPage,\n  Page,\n  SequencePage,\n} from \"./common.ts\";\nexport type { AthenaTransportErrorCode as AthenaTransportErrorCodeName } from \"./errors.ts\";\nexport {\n  type AthenaErrorBody,\n  type AthenaErrorResponse,\n  AthenaTransportErrorCode,\n} from \"./errors.ts\";\n\nexport {\n  type AnyPageRequest,\n  type CursorPageRequest,\n  type LimitPolicy,\n  type OffsetPageRequest,\n  PaginationLimitPolicy,\n  type PaginationLimitPolicyName,\n  type SequencePageRequest,\n} from \"./pagination.ts\";\n","/**\n * v1 transport error envelope.\n * Applications must not infer semantics from free-form messages alone.\n */\n\nimport type { JsonObject } from \"./common.ts\";\n\n/**\n * Stable machine-readable transport error codes.\n * Distinct from legacy client {@link AthenaErrorCode} (UNIQUE_VIOLATION, …).\n */\nexport type AthenaTransportErrorCode =\n  | \"validation_error\"\n  | \"authentication_required\"\n  | \"forbidden\"\n  | \"not_found\"\n  | \"conflict\"\n  | \"rate_limited\"\n  | \"transient\"\n  | \"internal\";\n\nexport const AthenaTransportErrorCode = {\n  AuthenticationRequired: \"authentication_required\",\n  Conflict: \"conflict\",\n  Forbidden: \"forbidden\",\n  Internal: \"internal\",\n  NotFound: \"not_found\",\n  RateLimited: \"rate_limited\",\n  Transient: \"transient\",\n  ValidationError: \"validation_error\",\n} as const satisfies Record<string, AthenaTransportErrorCode>;\n\n/** Nested error body inside the transport envelope. */\nexport interface AthenaErrorBody {\n  code: AthenaTransportErrorCode;\n  details?: JsonObject;\n  message: string;\n  requestId?: string;\n  retryable: boolean;\n}\n\n/**\n * Canonical public error response envelope.\n *\n * @example\n * ```json\n * {\n *   \"error\": {\n *     \"code\": \"not_found\",\n *     \"message\": \"File not found\",\n *     \"retryable\": false,\n *     \"requestId\": \"req_abc\"\n *   }\n * }\n * ```\n */\nexport interface AthenaErrorResponse {\n  error: AthenaErrorBody;\n}\n","/**\n * v1 pagination request contracts and limit policy constants.\n * Aligns with real server endpoint defaults/maxima (not coarse service-wide buckets).\n */\n\nimport type { OffsetPage, Page, SequencePage } from \"./common.ts\";\n\n/** Named limit defaults for a single server surface. */\nexport interface LimitPolicy {\n  readonly defaultLimit: number;\n  readonly maxLimit: number;\n  /**\n   * Inclusive lower bound for finite requested limits.\n   * Defaults to 1 when omitted (chat/storage style). Auth list-users allows 0.\n   */\n  readonly minLimit?: number;\n}\n\n/**\n * Endpoint-specific limit policies.\n *\n * Prefer these (or a caller-supplied {@link LimitPolicy}) over any service-wide\n * AUTH/CHAT bucket — list-users, chat list, and chat search disagree on defaults/maxima.\n */\nexport const PaginationLimitPolicy = {\n  /**\n   * Auth admin list-users (`GET /admin/list-users`).\n   * Adapter default 100; allow up to 500. Server uses only .min(max) so 0 is valid\n   * (empty/count-only windows); do not floor to 1.\n   */\n  AUTH_LIST_USERS: { defaultLimit: 100, maxLimit: 500, minLimit: 0 },\n  /**\n   * Chat list messages — `unwrap_or(50).clamp(1, 200)` in athena-chat.\n   */\n  CHAT_LIST_MESSAGES: { defaultLimit: 50, maxLimit: 200, minLimit: 1 },\n  /**\n   * Chat list rooms — `unwrap_or(50).clamp(1, 200)` in athena-chat.\n   */\n  CHAT_LIST_ROOMS: { defaultLimit: 50, maxLimit: 200, minLimit: 1 },\n  /**\n   * Chat search messages — `unwrap_or(25).clamp(1, 100)` in athena-chat.\n   */\n  CHAT_SEARCH_MESSAGES: { defaultLimit: 25, maxLimit: 100, minLimit: 1 },\n  /** Generic SDK fallback. */\n  DEFAULT: { defaultLimit: 50, maxLimit: 500, minLimit: 1 },\n  /** Default storage list/page size policy. */\n  STORAGE: { defaultLimit: 50, maxLimit: 500, minLimit: 1 },\n} as const satisfies Record<string, LimitPolicy>;\n\nexport type PaginationLimitPolicyName = keyof typeof PaginationLimitPolicy;\n\n/** Cursor-style page request (opaque cursor). */\nexport interface CursorPageRequest<TCursor = string> {\n  cursor?: TCursor | null;\n  limit?: number;\n}\n\n/** Offset-style page request (legacy). */\nexport interface OffsetPageRequest {\n  /** 1-based page index; resolved with pageSize/limit into offset when present. */\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  pageSize?: number;\n}\n\n/** Sequence page request. */\nexport interface SequencePageRequest {\n  beforeSeq?: number | null;\n  limit?: number;\n}\n\nexport type AnyPageRequest =\n  | CursorPageRequest\n  | OffsetPageRequest\n  | SequencePageRequest;\n\nexport type { OffsetPage, Page, SequencePage };\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","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","export type AthenaTransactionErrorCode =\n  | \"ATHENA_TRANSACTION_ATOMIC_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_INTERACTIVE_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_ISOLATION_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_NESTING_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_SAVEPOINT_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_EMPTY\"\n  | \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_CONTEXT_OVERRIDE\"\n  | \"ATHENA_TRANSACTION_DOOMED\"\n  | \"ATHENA_TRANSACTION_TIMEOUT\"\n  | \"ATHENA_TRANSACTION_ABORTED\"\n  | \"ATHENA_TRANSACTION_FAILED\";\n\nexport class AthenaTransactionError extends Error {\n  readonly backend?: string;\n  readonly code: AthenaTransactionErrorCode;\n  readonly details: Record<string, unknown>;\n  readonly operationId?: string;\n  readonly operationIndex?: number;\n  readonly requestId?: string;\n  readonly transactionId?: string;\n\n  constructor(\n    code: AthenaTransactionErrorCode,\n    message: string,\n    details: Record<string, unknown> = {}\n  ) {\n    super(message);\n    this.name = \"AthenaTransactionError\";\n    this.code = code;\n    this.details = details;\n    this.backend =\n      typeof details.backend === \"string\" ? details.backend : undefined;\n    this.operationId =\n      typeof details.operationId === \"string\" ? details.operationId : undefined;\n    this.operationIndex =\n      typeof details.operationIndex === \"number\"\n        ? details.operationIndex\n        : undefined;\n    this.requestId =\n      typeof details.requestId === \"string\" ? details.requestId : undefined;\n    this.transactionId =\n      typeof details.transactionId === \"string\"\n        ? details.transactionId\n        : undefined;\n  }\n}\n\nexport function isAthenaTransactionError(\n  value: unknown\n): value is AthenaTransactionError {\n  return value instanceof AthenaTransactionError;\n}\n","import type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport type { AthenaTransactionCacheObserver } from \"./types.ts\";\n\nconst observers = new WeakMap<\n  AthenaGatewayClient,\n  AthenaTransactionCacheObserver\n>();\n\nexport function registerTransactionCacheObserver(\n  gateway: AthenaGatewayClient,\n  observer: AthenaTransactionCacheObserver\n): void {\n  observers.set(gateway, observer);\n}\n\nexport function getTransactionCacheObserver(\n  gateway: AthenaGatewayClient\n): AthenaTransactionCacheObserver | undefined {\n  return observers.get(gateway);\n}\n","import 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 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 {\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","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","export {\n  assertAthenaEmailProviderRuntime,\n  resolveAthenaEmailRuntime,\n} from \"./capabilities.ts\";\nexport { createEmailDeliveryPort } from \"./delivery-port.ts\";\nexport {\n  ATHENA_EMAIL_DELIVERY_FAILED,\n  ATHENA_EMAIL_MESSAGE_INVALID,\n  ATHENA_EMAIL_PROVIDER_INVALID,\n  ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n  ATHENA_EMAIL_PROVIDER_UNSUPPORTED_RUNTIME,\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  isAthenaEmailError,\n} from \"./errors.ts\";\nexport type { CreateEmailModuleOptions } from \"./module.ts\";\nexport {\n  bindAthenaEmailTemplateStore,\n  createEmailModule,\n} from \"./module.ts\";\nexport {\n  type NormalizedAthenaEmailConfig,\n  normalizeAthenaEmailConfig,\n  toAthenaEmailDiagnostics,\n} from \"./normalize-config.ts\";\nexport {\n  defineAthenaEmailProvider,\n  isAthenaEmailProvider,\n} from \"./provider.ts\";\nexport {\n  consoleEmailProvider,\n  httpEmailProvider,\n  resend,\n} from \"./providers/index.ts\";\nexport {\n  resolveAthenaEmailMessage,\n  toPublicEmailDeliveryResult,\n} from \"./runtime.ts\";\nexport { createAthenaEmailTemplates } from \"./templates.ts\";\nexport type {\n  AthenaEmailAttachment,\n  AthenaEmailAttachmentFailureMode,\n  AthenaEmailAttachmentPolicy,\n  AthenaEmailConfig,\n  AthenaEmailDefaults,\n  AthenaEmailDeliveryKind,\n  AthenaEmailDeliveryPort,\n  AthenaEmailDeliveryResult,\n  AthenaEmailDiagnostics,\n  AthenaEmailMessage,\n  AthenaEmailModule,\n  AthenaEmailProvider,\n  AthenaEmailProviderCapabilities,\n  AthenaEmailProviderRuntime,\n  AthenaEmailTemplate,\n  AthenaEmailTemplateRenderInput,\n  AthenaEmailTemplateSelector,\n  AthenaEmailTemplateSendInput,\n  AthenaEmailTemplateStore,\n  AthenaEmailTemplatesConfig,\n  AthenaEmailTemplatesModule,\n  AthenaEmailTemplateVariableBinding,\n  AthenaRenderedEmailTemplate,\n  AthenaResolvedEmailMessage,\n} from \"./types.ts\";\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 type { AthenaEmailDeliveryPort, AthenaEmailModule } from \"./types.ts\";\n\nexport function createEmailDeliveryPort(\n  email: Pick<AthenaEmailModule, \"send\">\n): AthenaEmailDeliveryPort {\n  return {\n    send: (message) => email.send(message),\n  };\n}\n","import {\n  ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n  AthenaEmailError,\n} from \"./errors.ts\";\nimport {\n  type NormalizedAthenaEmailConfig,\n  normalizeAthenaEmailConfig,\n  toAthenaEmailDiagnostics,\n} from \"./normalize-config.ts\";\nimport { deliverAthenaEmail } from \"./runtime.ts\";\nimport { 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","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 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 { 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","export type { ConsoleEmailProviderOptions } from \"./console.ts\";\nexport { consoleEmailProvider } from \"./console.ts\";\nexport type { HttpEmailProviderOptions } from \"./http.ts\";\nexport { httpEmailProvider } from \"./http.ts\";\nexport type { ResendEmailProviderOptions } from \"./resend.ts\";\nexport { resend } from \"./resend.ts\";\n","import { defineAthenaEmailProvider } from \"../provider.ts\";\nimport {\n  envelopeAcceptedRecipients,\n  toPublicEmailDeliveryResult,\n} from \"../runtime.ts\";\nimport type { AthenaEmailProvider } from \"../types.ts\";\nimport { requireSendableBody } from \"./attachments.ts\";\n\nexport interface ConsoleEmailProviderOptions {\n  log?: (line: string) => void;\n}\n\n/**\n * Development/testing provider. Must be constructed explicitly — Athena never\n * installs a console transport by default.\n */\nexport function consoleEmailProvider(\n  options: ConsoleEmailProviderOptions = {}\n): AthenaEmailProvider {\n  const log = options.log ?? ((line: string) => console.info(line));\n  return defineAthenaEmailProvider({\n    capabilities: {\n      delivery: \"console\",\n      runtimes: [\"node\", \"browser\", \"edge\"],\n    },\n    id: \"console\",\n    async send(message) {\n      requireSendableBody(message);\n      const recipients = message.to.join(\",\");\n      log(\n        `[athena/email]\\nprovider=console\\nto=${recipients}\\nsubject=${JSON.stringify(message.subject)}\\n\\n${message.text ?? message.html ?? \"\"}`\n      );\n      return toPublicEmailDeliveryResult(\n        {\n          accepted: envelopeAcceptedRecipients(message),\n          provider: \"console\",\n          rejected: [],\n          success: true,\n        },\n        \"console\"\n      );\n    },\n  });\n}\n","import { ATHENA_EMAIL_MESSAGE_INVALID, AthenaEmailError } from \"../errors.ts\";\nimport type {\n  AthenaEmailAttachment,\n  AthenaResolvedEmailMessage,\n} from \"../types.ts\";\n\nexport function requireSendableBody(message: AthenaResolvedEmailMessage): void {\n  if (!(message.text || message.html)) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_MESSAGE_INVALID,\n      \"Athena email messages require text or html content.\"\n    );\n  }\n}\n\nexport function selectAttachments(\n  message: AthenaResolvedEmailMessage\n): AthenaEmailAttachment[] {\n  const selected: AthenaEmailAttachment[] = [];\n  for (const attachment of message.attachments) {\n    const hasContent =\n      attachment.content !== undefined &&\n      (typeof attachment.content !== \"string\" ||\n        attachment.content.length > 0) &&\n      !(\n        attachment.content instanceof Uint8Array &&\n        attachment.content.byteLength === 0\n      );\n    const hasUrl =\n      typeof attachment.fileUrl === \"string\" &&\n      attachment.fileUrl.trim().length > 0;\n    if (hasContent || hasUrl) {\n      selected.push(attachment);\n      continue;\n    }\n    if (message.attachmentFailureMode === \"skip\") {\n      continue;\n    }\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_MESSAGE_INVALID,\n      \"Athena email attachments require content or fileUrl.\"\n    );\n  }\n  return selected;\n}\n","import {\n  ATHENA_EMAIL_DELIVERY_FAILED,\n  ATHENA_EMAIL_PROVIDER_INVALID,\n  AthenaEmailError,\n} from \"../errors.ts\";\nimport { defineAthenaEmailProvider } from \"../provider.ts\";\nimport {\n  envelopeAcceptedRecipients,\n  toPublicEmailDeliveryResult,\n} from \"../runtime.ts\";\nimport type {\n  AthenaEmailProvider,\n  AthenaResolvedEmailMessage,\n} from \"../types.ts\";\nimport { requireSendableBody, selectAttachments } from \"./attachments.ts\";\nimport { formatEmailMailbox, toBase64 } from \"./encoding.ts\";\n\nexport interface HttpEmailProviderOptions {\n  fetchImpl?: typeof fetch;\n  headers?: Record<string, string>;\n  mapBody?: (message: AthenaResolvedEmailMessage) => unknown;\n  /**\n   * Fetch and response-body deadline in milliseconds. Defaults to 30s.\n   */\n  timeoutMs?: number;\n  url: string;\n}\n\nconst DEFAULT_HTTP_TIMEOUT_MS = 30_000;\n\nfunction httpTimeoutMs(value: number | undefined): number {\n  if (value === undefined) {\n    return DEFAULT_HTTP_TIMEOUT_MS;\n  }\n  if (!Number.isFinite(value) || value <= 0) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_PROVIDER_INVALID,\n      \"HTTP timeoutMs must be a positive number.\"\n    );\n  }\n  return value;\n}\n\nasync function withHttpDeadline<T>(\n  promise: Promise<T>,\n  timeoutMs: number,\n  abort: () => void\n): Promise<T> {\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  try {\n    return await Promise.race([\n      promise,\n      new Promise<never>((_, reject) => {\n        timer = setTimeout(() => {\n          abort();\n          reject(\n            new AthenaEmailError(\n              ATHENA_EMAIL_DELIVERY_FAILED,\n              `HTTP email provider timed out after ${timeoutMs}ms.`\n            )\n          );\n        }, timeoutMs);\n      }),\n    ]);\n  } finally {\n    if (timer !== undefined) {\n      clearTimeout(timer);\n    }\n  }\n}\n\nfunction defaultHttpBody(message: AthenaResolvedEmailMessage): unknown {\n  return {\n    attachments: selectAttachments(message).map((attachment) => ({\n      content:\n        attachment.content === undefined\n          ? undefined\n          : toBase64(attachment.content),\n      contentType: attachment.contentType,\n      filename: attachment.filename,\n      fileUrl: attachment.fileUrl,\n    })),\n    bcc: message.bcc,\n    cc: message.cc,\n    from: formatEmailMailbox(message.from, message.fromName),\n    headers: message.headers,\n    html: message.html,\n    replyTo: message.replyTo,\n    subject: message.subject,\n    text: message.text,\n    to: message.to,\n  };\n}\n\n/**\n * Generic HTTP JSON delivery. Browser/edge-safe (`fetch` only).\n */\nexport function httpEmailProvider(\n  options: HttpEmailProviderOptions\n): AthenaEmailProvider {\n  const url = options.url?.trim();\n  if (!url) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_PROVIDER_INVALID,\n      \"HTTP email provider requires a url.\"\n    );\n  }\n  const fetchImpl = options.fetchImpl;\n  const timeoutMs = httpTimeoutMs(options.timeoutMs);\n  return defineAthenaEmailProvider({\n    capabilities: {\n      delivery: \"http\",\n      runtimes: [\"node\", \"browser\", \"edge\"],\n    },\n    id: \"http\",\n    async send(message) {\n      requireSendableBody(message);\n      const fetchFn = fetchImpl ?? globalThis.fetch;\n      if (typeof fetchFn !== \"function\") {\n        throw new AthenaEmailError(\n          ATHENA_EMAIL_DELIVERY_FAILED,\n          \"HTTP email provider requires fetch.\"\n        );\n      }\n      const controller = new AbortController();\n      const response = await withHttpDeadline(\n        fetchFn(url, {\n          body: JSON.stringify(\n            options.mapBody\n              ? options.mapBody(message)\n              : defaultHttpBody(message)\n          ),\n          headers: {\n            \"content-type\": \"application/json\",\n            ...options.headers,\n          },\n          method: \"POST\",\n          signal: controller.signal,\n        }),\n        timeoutMs,\n        () => {\n          controller.abort();\n        }\n      );\n      const raw: unknown = await withHttpDeadline(\n        response.json().catch(() => null),\n        timeoutMs,\n        () => {\n          controller.abort();\n        }\n      );\n      if (!response.ok) {\n        throw new AthenaEmailError(\n          ATHENA_EMAIL_DELIVERY_FAILED,\n          `HTTP email provider failed (${response.status}).`\n        );\n      }\n      return toPublicEmailDeliveryResult(\n        {\n          accepted: envelopeAcceptedRecipients(message),\n          messageId:\n            raw &&\n            typeof raw === \"object\" &&\n            typeof (raw as { id?: unknown }).id === \"string\"\n              ? (raw as { id: string }).id\n              : undefined,\n          provider: \"http\",\n          rejected: [],\n          success: true,\n        },\n        \"http\"\n      );\n    },\n  });\n}\n","export function formatEmailMailbox(from: string, fromName?: string): string {\n  if (!fromName) {\n    return from;\n  }\n  return `${fromName.replaceAll(/[\\r\\n<>]/g, \"\")} <${from}>`;\n}\n\nexport function toBase64(content: string | Uint8Array): string {\n  if (typeof content === \"string\") {\n    return encodeUtf8Base64(content);\n  }\n  return encodeBytesBase64(content);\n}\n\nfunction encodeUtf8Base64(value: string): string {\n  const bytes = new TextEncoder().encode(value);\n  return encodeBytesBase64(bytes);\n}\n\nfunction encodeBytesBase64(bytes: Uint8Array): string {\n  let binary = \"\";\n  const chunk = 0x80_00;\n  for (let index = 0; index < bytes.length; index += chunk) {\n    const slice = bytes.subarray(index, index + chunk);\n    binary += String.fromCharCode(...slice);\n  }\n  return btoa(binary);\n}\n","import { assertAthenaEmailProviderRuntime } from \"../capabilities.ts\";\nimport {\n  ATHENA_EMAIL_DELIVERY_FAILED,\n  ATHENA_EMAIL_PROVIDER_INVALID,\n  AthenaEmailError,\n} from \"../errors.ts\";\nimport { defineAthenaEmailProvider } from \"../provider.ts\";\nimport {\n  envelopeAcceptedRecipients,\n  toPublicEmailDeliveryResult,\n} from \"../runtime.ts\";\nimport type { AthenaEmailProvider } from \"../types.ts\";\nimport { requireSendableBody, selectAttachments } from \"./attachments.ts\";\nimport { formatEmailMailbox, toBase64 } from \"./encoding.ts\";\n\nconst DEFAULT_RESEND_ENDPOINT = \"https://api.resend.com/emails\";\nconst DEFAULT_RESEND_TIMEOUT_MS = 30_000;\n\nexport interface ResendEmailProviderOptions {\n  apiKey: string;\n  endpoint?: string;\n  fetchImpl?: typeof fetch;\n  /**\n   * Fetch and response-body deadline in milliseconds. Defaults to 30s.\n   */\n  timeoutMs?: number;\n}\n\nfunction resendTimeoutMs(value: number | undefined): number {\n  if (value === undefined) {\n    return DEFAULT_RESEND_TIMEOUT_MS;\n  }\n  if (!Number.isFinite(value) || value <= 0) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_PROVIDER_INVALID,\n      \"Resend timeoutMs must be a positive number.\"\n    );\n  }\n  return value;\n}\n\nasync function withResendDeadline<T>(\n  promise: Promise<T>,\n  timeoutMs: number,\n  abort: () => void\n): Promise<T> {\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  try {\n    return await Promise.race([\n      promise,\n      new Promise<never>((_, reject) => {\n        timer = setTimeout(() => {\n          abort();\n          reject(\n            new AthenaEmailError(\n              ATHENA_EMAIL_DELIVERY_FAILED,\n              `Resend email provider timed out after ${timeoutMs}ms.`\n            )\n          );\n        }, timeoutMs);\n      }),\n    ]);\n  } finally {\n    if (timer !== undefined) {\n      clearTimeout(timer);\n    }\n  }\n}\n\n/**\n * Resend delivery over HTTP (`POST /emails`). Does not import the Resend SDK.\n */\nexport function resend(\n  options: ResendEmailProviderOptions\n): AthenaEmailProvider {\n  const apiKey = options.apiKey?.trim();\n  if (!apiKey) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_PROVIDER_INVALID,\n      \"Resend email provider requires an apiKey.\"\n    );\n  }\n  const endpoint = options.endpoint?.trim() || DEFAULT_RESEND_ENDPOINT;\n  const fetchImpl = options.fetchImpl;\n  const timeoutMs = resendTimeoutMs(options.timeoutMs);\n  const provider = defineAthenaEmailProvider({\n    capabilities: {\n      delivery: \"http\",\n      runtimes: [\"node\", \"edge\"],\n    },\n    id: \"resend\",\n    async send(message) {\n      assertAthenaEmailProviderRuntime(provider);\n      requireSendableBody(message);\n      const fetchFn = fetchImpl ?? globalThis.fetch;\n      if (typeof fetchFn !== \"function\") {\n        throw new AthenaEmailError(\n          ATHENA_EMAIL_DELIVERY_FAILED,\n          \"Resend email provider requires fetch.\"\n        );\n      }\n      const attachments = selectAttachments(message).map((attachment) => ({\n        content:\n          attachment.content === undefined\n            ? undefined\n            : toBase64(attachment.content),\n        content_type: attachment.contentType,\n        filename: attachment.filename,\n        path: attachment.fileUrl,\n      }));\n      const controller = new AbortController();\n      const response = await withResendDeadline(\n        fetchFn(endpoint, {\n          body: JSON.stringify({\n            attachments: attachments.length > 0 ? attachments : undefined,\n            bcc: message.bcc.length > 0 ? message.bcc : undefined,\n            cc: message.cc.length > 0 ? message.cc : undefined,\n            from: formatEmailMailbox(message.from, message.fromName),\n            headers:\n              Object.keys(message.headers).length > 0\n                ? message.headers\n                : undefined,\n            html: message.html,\n            reply_to: message.replyTo,\n            subject: message.subject,\n            text: message.text,\n            to: message.to,\n          }),\n          headers: {\n            authorization: `Bearer ${apiKey}`,\n            \"content-type\": \"application/json\",\n          },\n          method: \"POST\",\n          signal: controller.signal,\n        }),\n        timeoutMs,\n        () => {\n          controller.abort();\n        }\n      );\n      const raw: unknown = await withResendDeadline(\n        response.json().catch(() => null),\n        timeoutMs,\n        () => {\n          controller.abort();\n        }\n      );\n      if (!response.ok) {\n        throw new AthenaEmailError(\n          ATHENA_EMAIL_DELIVERY_FAILED,\n          `Resend email provider failed (${response.status}).`\n        );\n      }\n      const messageId =\n        raw &&\n        typeof raw === \"object\" &&\n        typeof (raw as { id?: unknown }).id === \"string\"\n          ? (raw as { id: string }).id\n          : undefined;\n      return toPublicEmailDeliveryResult(\n        {\n          accepted: envelopeAcceptedRecipients(message),\n          messageId,\n          provider: \"resend\",\n          rejected: [],\n          success: true,\n        },\n        \"resend\"\n      );\n    },\n  });\n  return provider;\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 * 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 {\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  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","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 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 { 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  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 {\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","/**\n * athena gateway types\n *\n * type definitions for the athena gateway api client and react hook\n */\n\nexport type AthenaGatewayMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\nexport type AthenaGatewayEndpointPath =\n  | \"/gateway/fetch\"\n  | \"/gateway/insert\"\n  | \"/gateway/update\"\n  | \"/gateway/delete\"\n  | \"/gateway/rpc\"\n  | \"/gateway/query\"\n  | \"/gateway/query/v1\"\n  | \"/gateway/transaction\"\n  | `/rpc/${string}`\n  | `/storage/${string}`\n  | `/admin/backups${string}`;\n\nexport type AthenaCountOption = \"exact\" | \"planned\" | \"estimated\";\n\nexport type AthenaJsonPrimitive = string | number | boolean | null;\nexport type AthenaJsonValue =\n  | AthenaJsonPrimitive\n  | AthenaJsonObject\n  | AthenaJsonArray;\nexport interface AthenaJsonObject {\n  [key: string]: AthenaJsonValue;\n}\nexport type AthenaJsonArray = AthenaJsonValue[];\n\nexport type AthenaConditionValue = AthenaJsonPrimitive;\nexport type AthenaConditionArrayValue = AthenaConditionValue[];\nexport type AthenaConditionCastType = string;\n\nexport type AthenaConditionOperator =\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  | \"not\"\n  | \"or\";\n\nexport interface AthenaGatewayCondition {\n  column?: string;\n  /**\n   * Optional explicit cast for `column` (for example `\"text\"`).\n   * Used by SDK SQL fallback for typed comparisons.\n   */\n  column_cast?: AthenaConditionCastType;\n  /** Back-compat shape expected by older gateway implementations */\n  eq_column?: string;\n  /** Optional cast hint aligned with legacy eq_* fields */\n  eq_column_cast?: AthenaConditionCastType;\n  eq_value?: AthenaConditionValue | AthenaConditionArrayValue | string;\n  /** Optional cast hint aligned with legacy eq_* fields */\n  eq_value_cast?: AthenaConditionCastType;\n  operator: AthenaConditionOperator;\n  value?: AthenaConditionValue | AthenaConditionArrayValue | string;\n  /**\n   * Optional explicit cast for `value` (for example `\"uuid\"`).\n   * Older gateways ignore unknown fields; newer gateways may use this hint.\n   */\n  value_cast?: AthenaConditionCastType;\n}\n\nexport type AthenaSortDirection = \"ascending\" | \"descending\";\n\nexport interface AthenaSortBy {\n  direction: AthenaSortDirection;\n  field: string;\n}\n\nexport interface AthenaFetchPayload {\n  aggregation_column?: string;\n  aggregation_dedup?: boolean;\n  aggregation_strategy?: \"cumulative_sum\";\n  columns?: string[] | string;\n  conditions?: AthenaGatewayCondition[];\n  count?: AthenaCountOption;\n  current_page?: number;\n  group_by?: string;\n  head?: boolean;\n  limit?: number;\n  offset?: number;\n  orderBy?: AthenaJsonObject | AthenaJsonArray;\n  page_size?: number;\n  select?: string | AthenaJsonObject;\n  sort_by?: AthenaSortBy;\n  strip_nulls?: boolean;\n  table_name?: string;\n  time_granularity?: \"day\" | \"hour\" | \"minute\";\n  total_pages?: number;\n  view_name?: string;\n  where?: AthenaJsonObject;\n}\n\nexport interface AthenaInsertPayload<\n  TInsertBody = AthenaJsonObject,\n  TUpdateBody = AthenaJsonObject,\n> {\n  columns?: string[] | string;\n  count?: AthenaCountOption;\n  default_to_null?: boolean;\n  head?: boolean;\n  insert_body: TInsertBody | TInsertBody[];\n  on_conflict?: string | string[];\n  table_name: string;\n  update_body?: TUpdateBody;\n}\n\nexport interface AthenaDeletePayload {\n  columns?: string[] | string;\n  conditions?: AthenaGatewayCondition[];\n  current_page?: number;\n  /** Fluent `.limit()` / `.range()` bounds (preferred over page_* when both are set). */\n  limit?: number;\n  offset?: number;\n  page_size?: number;\n  resource_id?: string;\n  sort_by?: AthenaSortBy;\n  table_name: string;\n  total_pages?: number;\n}\n\nexport interface AthenaUpdatePayload<TUpdateBody = AthenaJsonObject>\n  extends AthenaFetchPayload {\n  update_body: TUpdateBody;\n}\n\nexport type AthenaRpcFilterOperator =\n  | \"eq\"\n  | \"neq\"\n  | \"gt\"\n  | \"gte\"\n  | \"lt\"\n  | \"lte\"\n  | \"like\"\n  | \"ilike\"\n  | \"is\"\n  | \"in\";\n\nexport interface AthenaRpcFilter {\n  column: string;\n  operator: AthenaRpcFilterOperator;\n  value?: AthenaConditionValue | AthenaConditionArrayValue | string;\n}\n\nexport interface AthenaRpcOrder {\n  ascending?: boolean;\n  column: string;\n}\n\nexport interface AthenaRpcPayload<TArgs = AthenaJsonObject> {\n  args?: TArgs;\n  count?: AthenaCountOption;\n  filters?: AthenaRpcFilter[];\n  function: string;\n  function_name?: string;\n  head?: boolean;\n  limit?: number;\n  offset?: number;\n  order?: AthenaRpcOrder;\n  schema?: string;\n  select?: string;\n}\n\nexport interface AthenaQueryPayload {\n  /**\n   * Expected result shape for shape-aware executors (D1 all vs run).\n   * Athena 4 gateways ignore unknown fields.\n   */\n  expectedShape?: \"rows\" | \"single\" | \"maybe-single\" | \"affected-only\" | \"none\";\n  /**\n   * Explicit raw-SQL operation metadata (Athena 5 / admin.query).\n   * Athena 4 gateways ignore unknown fields.\n   */\n  operation?:\n    | \"select\"\n    | \"insert\"\n    | \"update\"\n    | \"delete\"\n    | \"ddl\"\n    | \"transaction\"\n    | \"unknown\";\n  /** Optional bind parameters (D1 / SQLite-safe query path; HTTP gateways may ignore). */\n  params?: unknown[];\n  query: string;\n}\n\n/** Backend type for Athena client (aligns with athena-rs) */\nexport type BackendType = \"athena\" | \"postgrest\" | \"postgresql\" | \"scylladb\";\n\n/** Backend config: type from SDK + backend-scoped options */\nexport interface BackendConfig {\n  options?: AthenaJsonObject;\n  type: BackendType;\n}\n\n/** Pre-defined backends for lean usage: backend: Backend.Athena */\nexport const Backend = {\n  Athena: { type: \"athena\" } as const,\n  PostgreSQL: { type: \"postgresql\" } as const,\n  Postgrest: { type: \"postgrest\" } as const,\n  ScyllaDB: { type: \"scylladb\" } as const,\n} as const satisfies Record<string, BackendConfig>;\n\nexport type BackendOption = BackendConfig | BackendType;\n\nexport interface AthenaGatewayBaseOptions {\n  apiKey?: string;\n  backend?: BackendOption;\n  baseUrl?: string;\n  bearerToken?: string | null;\n  client?: string;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  /** JDBC/PostgreSQL URI mirrored to `x-athena-jdbc-url` and `x-jdbc-url` compatibility headers. */\n  jdbcUrl?: string | null;\n  organizationId?: string | null;\n  /** Direct PostgreSQL URI forwarded as `x-pg-uri` (OpenAPI preferred routing header). */\n  pgUri?: string | null;\n  publishEvent?: string;\n  /**\n   * Select the semantic query wire protocol for compatible AST reads.\n   *\n   * `auto` uses Query V1 when the endpoint advertises it and falls back to\n   * the legacy fetch route only when the V1 capability is unavailable.\n   */\n  queryProtocol?: \"auto\" | \"legacy\" | \"v1\";\n  sessionToken?: string | null;\n  userId?: string | null;\n}\n\nexport type AthenaGatewayHookConfig = AthenaGatewayBaseOptions;\nexport interface AthenaGatewayCallOptions extends AthenaGatewayBaseOptions {\n  count?: AthenaCountOption;\n  defaultToNull?: boolean;\n  head?: boolean;\n  onConflict?: string | string[];\n  /** Bind parameters for `queryGateway` / `client.query` (edge D1 and SQL-aware gateways). */\n  params?: unknown[];\n  schema?: string;\n  signal?: AbortSignal;\n  stripNulls?: boolean;\n  updateBody?: AthenaJsonObject;\n}\n\nexport interface AthenaRpcCallOptions extends AthenaGatewayCallOptions {\n  count?: AthenaCountOption;\n  get?: boolean;\n}\n\nexport interface AthenaGatewayResponse<T = unknown> {\n  /** Mutation affected-row count. Omitted on reads. */\n  affectedRows?: number | null;\n  count?: number | null;\n  data: T | null;\n  error?: string;\n  errorDetails?: AthenaGatewayErrorDetails | null;\n  ok: boolean;\n  raw: unknown;\n  status: number;\n  statusText?: string | null;\n}\n\nexport type AthenaDiscoveryErrorCode =\n  | \"ATHENA_DISCOVERY_UNAVAILABLE\"\n  | \"ATHENA_DISCOVERY_INCOMPATIBLE\"\n  | \"ATHENA_PROTOCOL_INCOMPATIBLE\"\n  | \"ATHENA_DISCOVERY_CAPABILITY_MISSING\"\n  | \"ATHENA_RUNTIME_UNAVAILABLE\";\n\n/** Data probe succeeded; Auth is disabled or not advertised. Not a discovery failure. */\nexport type AthenaAuthAvailabilityErrorCode = \"ATHENA_AUTH_NOT_AVAILABLE\";\n\nexport type AthenaGatewayTransportErrorCode =\n  | \"NETWORK_ERROR\"\n  | \"INVALID_URL\"\n  | \"HTTP_ERROR\"\n  | \"INVALID_JSON\"\n  | \"UNKNOWN_ERROR\";\n\nexport type AthenaGatewayErrorCode =\n  | AthenaGatewayTransportErrorCode\n  | AthenaDiscoveryErrorCode;\n\nexport interface AthenaGatewayErrorDetails {\n  cause?: string;\n  code: AthenaGatewayErrorCode;\n  endpoint?: AthenaGatewayEndpointPath;\n  hint?: string;\n  message: string;\n  method?: AthenaGatewayMethod;\n  requestId?: string;\n  status: number;\n}\n\nexport interface AthenaGatewayConnectionOptions {\n  headers?: Record<string, string>;\n  path?: `/${string}`;\n  signal?: AbortSignal;\n}\n\nexport interface AthenaGatewayConnectionResult {\n  baseUrl: string;\n  error?: string;\n  errorDetails?: AthenaGatewayErrorDetails | null;\n  ok: boolean;\n  raw: unknown;\n  reachable: boolean;\n  status: number;\n  statusText?: string | null;\n  url: string;\n}\n\nexport interface AthenaGatewayResponseLog extends AthenaGatewayResponse {\n  timestamp: string;\n}\n\nexport interface AthenaGatewayCallLog {\n  endpoint: AthenaGatewayEndpointPath;\n  headers: Record<string, string>;\n  method: AthenaGatewayMethod;\n  payload: unknown;\n  timestamp: string;\n}\n\nexport interface AthenaGatewayHookResult {\n  baseUrl: string;\n  deleteGateway: <T = unknown>(\n    payload: AthenaDeletePayload,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n  error: string | null;\n  fetchGateway: <T = unknown>(\n    payload: AthenaFetchPayload,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n  insertGateway: <T = unknown>(\n    payload: AthenaInsertPayload,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n  isLoading: boolean;\n  lastRequest: AthenaGatewayCallLog | null;\n  lastResponse: AthenaGatewayResponseLog | null;\n  rpcGateway: <T = unknown>(\n    payload: AthenaRpcPayload,\n    options?: AthenaRpcCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n  updateGateway: <T = unknown>(\n    payload: AthenaUpdatePayload,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n}\n","export {\n  mergeProtectedArtifact,\n  resolveArtifactWritePlan,\n} from \"./artifact-merge.ts\";\nexport {\n  ATHENA_GENERATED_ROOT,\n  ATHENA_PROJECT_GENERATED_ROOT,\n  ATHENA_RUNTIME_GENERATED_ROOT,\n  applyGeneratorProjectEnv,\n  DEFAULT_MIGRATIONS_DIRECTORY,\n  defineAthenaConfig,\n  defineGeneratorConfig,\n  findGeneratorConfigPath,\n  GENERATED_MANIFEST_REL,\n  isCurrentAthenaGeneratedPath,\n  isLegacyFlatAthenaGeneratedPath,\n  loadAthenaConfig,\n  loadGeneratorConfig,\n  normalizeGeneratorConfig,\n} from \"./config.ts\";\nexport type {\n  EnsureGeneratorConfigFileOptions,\n  EnsureGeneratorConfigFileResult,\n  GeneratorConfigFileAction,\n  GeneratorConfigProviderMode,\n} from \"./config-file.ts\";\nexport {\n  detectGeneratorProviderMode,\n  ensureGeneratorConfigFile,\n  patchSchemasInConfigSource,\n  renderGeneratorConfigFile,\n} from \"./config-file.ts\";\nexport {\n  toAthenaConfigIr,\n  toAthenaGeneratorConfigIr,\n} from \"./config-ir.ts\";\nexport type {\n  GeneratorDatabaseAuthorityMode,\n  GeneratorDatabaseAuthoritySource,\n  GeneratorSchemaProvenance,\n  ResolvedGeneratorDatabaseAuthority,\n  ResolveGeneratorDatabaseAuthorityOptions,\n} from \"./database-authority.ts\";\nexport {\n  detectAuthorityMode,\n  formatSchemaFallbackMessages,\n  resolveGeneratorDatabaseAuthority,\n} from \"./database-authority.ts\";\nexport type {\n  GeneratorEnvBooleanOptions,\n  GeneratorEnvJsonOptions,\n  GeneratorEnvListOptions,\n  GeneratorEnvOneOfOptions,\n  GeneratorEnvStringOptions,\n} from \"./env.ts\";\nexport { generatorEnv } from \"./env.ts\";\nexport { runSchemaGenerator } from \"./pipeline.ts\";\nexport { resolvePostgresColumnType } from \"./postgres-type-mapping.ts\";\nexport { resolveGeneratorProvider } from \"./providers.ts\";\nexport type {\n  RenderGeneratedFileHeaderOptions,\n  RenderObjectPropertyOptions,\n} from \"./render-shared.ts\";\nexport {\n  ATHENA_GENERATED_FILE_PREFIX,\n  GENERATED_FILE_BANNER,\n  isAthenaGeneratedSource,\n  renderGeneratedFileHeader,\n  renderObjectKey,\n  renderObjectLiteral,\n  renderObjectProperty,\n  stripGeneratedFileHeader,\n  withGeneratedFileBanner,\n} from \"./render-shared.ts\";\nexport { generateArtifactsFromSnapshot } from \"./renderer.ts\";\nexport {\n  DISCOVER_POSTGRES_SCHEMAS_SQL,\n  discoverPostgresSchemas,\n  mergeSchemaSelections,\n  normalizeDiscoveredSchemas,\n  schemasEqual,\n} from \"./schema-discovery.ts\";\nexport {\n  DEFAULT_POSTGRES_SCHEMAS,\n  normalizeSchemaSelection,\n  resolveProviderSchemas,\n} from \"./schema-selection.ts\";\nexport {\n  filterIntrospectionSnapshot,\n  findDuplicateTableSelectors,\n  normalizeTableSelection,\n} from \"./table-selection.ts\";\nexport type {\n  AthenaConfig,\n  AthenaConfigIr,\n  AthenaGeneratorConfig,\n  AthenaLocalRuntimeConfig,\n  AthenaMigrationsConfig,\n  AthenaPolicyProjectConfig,\n  AthenaToolingEntrypoints,\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  GeneratedManifest,\n  GeneratorArtifactKind,\n  GeneratorArtifactWriteConfig,\n  GeneratorArtifactWritePolicy,\n  GeneratorConfigEnsureSummary,\n  GeneratorDiagnostic,\n  GeneratorExperimentalFlags,\n  GeneratorFeatureFlags,\n  GeneratorFilterConfig,\n  GeneratorInternalConfig,\n  GeneratorNamingConfig,\n  GeneratorOutputConfig,\n  GeneratorOutputFormat,\n  GeneratorOutputPreset,\n  GeneratorOutputTargets,\n  GeneratorProviderConfig,\n  GeneratorSchemaSelection,\n  GeneratorTableSelection,\n  LoadAthenaConfigOptions,\n  LoadedAthenaConfig,\n  LoadedGeneratorConfig,\n  LoadGeneratorConfigOptions,\n  NamingStyle,\n  NormalizedAthenaGeneratorConfig,\n  NormalizedAthenaMigrationsConfig,\n  NormalizedGeneratorFilterConfig,\n  NormalizedGeneratorOutputConfig,\n  RunGeneratorOptions,\n  RunGeneratorResult,\n  SkippedGeneratedArtifact,\n  SkippedGeneratedArtifactReason,\n  WrittenGeneratedArtifact,\n  WrittenGeneratedArtifactReason,\n} from \"./types.ts\";\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, 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 type {\n  AthenaConfig,\n  AthenaGeneratorConfig,\n} from \"../generator/types.ts\";\n\n/**\n * Typed identity helper for authoring `athena.config.ts`.\n * Import from `@xylex-group/athena/config` so CLI evaluation does not load Auth/WebAuthn.\n * `provider` is optional; generator commands still validate via\n * {@link defineGeneratorConfig} / `loadGeneratorConfig`.\n */\nexport function defineAthenaConfig<TConfig extends AthenaConfig>(\n  config: TConfig\n): TConfig {\n  return config;\n}\n\n/**\n * @deprecated Prefer {@link defineAthenaConfig} for project files.\n * Strict generator identity — not an alias of {@link defineAthenaConfig}.\n */\nexport function defineGeneratorConfig<TConfig extends AthenaGeneratorConfig>(\n  config: TConfig\n): TConfig {\n  return config;\n}\n","/** Default application SQL migrations directory (project-relative). */\nexport const DEFAULT_MIGRATIONS_DIRECTORY = \"athena/migrations\";\n\n/** Materialized, read-only view of package-owned Embedded Auth generations. */\nexport const DEFAULT_MANAGED_AUTH_MIGRATIONS_DIRECTORY =\n  \"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 } 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 { 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 { 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 { 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","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 {\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","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","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","/**\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","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 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 { 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 { 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","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 { 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","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 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 { 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","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_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 { 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 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 { 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 { 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","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","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","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 { 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 { 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 { 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","/**\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","/** 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","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 * 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 {\n  SchemaExpectation,\n  SchemaForeignKeyAction,\n  SchemaForeignKeyExpectation,\n} 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  constraintDefinitions: Map<string, string>;\n  constraints: Set<string>;\n  foreignKeys: Map<string, CatalogForeignKey>;\n  indexes: Set<string>;\n  schemas: Set<string>;\n  tables: Set<string>;\n}\n\ninterface CatalogForeignKey {\n  columns: readonly string[];\n  onDelete: SchemaForeignKeyAction;\n  onUpdate: SchemaForeignKeyAction;\n  references: {\n    columns: readonly string[];\n    schema: string;\n    table: string;\n  };\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  const foreignKeysResult = assertQueryResult<{\n    columns: string[];\n    condeferrable: boolean;\n    condeferred: boolean;\n    confdeltype: string;\n    confmatchtype: string;\n    confupdtype: string;\n    constraint_name: string;\n    referenced_columns: string[];\n    referenced_schema: string;\n    referenced_table: string;\n    table_name: string;\n    table_schema: string;\n  }>(\n    await db.query<{\n      columns: string[];\n      condeferrable: boolean;\n      condeferred: boolean;\n      confdeltype: string;\n      confmatchtype: string;\n      confupdtype: string;\n      constraint_name: string;\n      referenced_columns: string[];\n      referenced_schema: string;\n      referenced_table: string;\n      table_name: string;\n      table_schema: string;\n    }>(\n      `SELECT source_n.nspname AS table_schema,\n              source_rel.relname AS table_name,\n              pg_con.conname AS constraint_name,\n              ARRAY(\n                SELECT source_att.attname::text\n                FROM unnest(pg_con.conkey) WITH ORDINALITY AS source_key(attnum, position)\n                JOIN pg_catalog.pg_attribute AS source_att\n                  ON source_att.attrelid = pg_con.conrelid\n                 AND source_att.attnum = source_key.attnum\n                ORDER BY source_key.position\n              ) AS columns,\n              referenced_n.nspname AS referenced_schema,\n              referenced_rel.relname AS referenced_table,\n              ARRAY(\n                SELECT referenced_att.attname::text\n                FROM unnest(pg_con.confkey) WITH ORDINALITY AS referenced_key(attnum, position)\n                JOIN pg_catalog.pg_attribute AS referenced_att\n                  ON referenced_att.attrelid = pg_con.confrelid\n                 AND referenced_att.attnum = referenced_key.attnum\n                ORDER BY referenced_key.position\n              ) AS referenced_columns,\n              pg_con.confdeltype,\n              pg_con.confupdtype,\n              pg_con.confmatchtype,\n              pg_con.condeferrable,\n              pg_con.condeferred\n       FROM pg_catalog.pg_constraint AS pg_con\n       JOIN pg_catalog.pg_class AS source_rel\n         ON source_rel.oid = pg_con.conrelid\n       JOIN pg_catalog.pg_namespace AS source_n\n         ON source_n.oid = source_rel.relnamespace\n       JOIN pg_catalog.pg_class AS referenced_rel\n         ON referenced_rel.oid = pg_con.confrelid\n       JOIN pg_catalog.pg_namespace AS referenced_n\n         ON referenced_n.oid = referenced_rel.relnamespace\n       WHERE source_n.nspname = 'athena'\n         AND pg_con.contype = 'f'`\n    ),\n    \"schema-inspect foreign keys\"\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    constraintDefinitions: new Map(\n      constraintDefinitionsResult.rows.map((row) => [\n        `${row.table_schema}.${row.table_name}.${row.constraint_name}`,\n        row.definition,\n      ])\n    ),\n    constraints: new Set(\n      constraintsResult.rows.map(\n        (row) => `${row.table_schema}.${row.table_name}.${row.constraint_name}`\n      )\n    ),\n    foreignKeys: new Map(\n      foreignKeysResult.rows.map((row) => [\n        `${row.table_schema}.${row.table_name}.${row.constraint_name}`,\n        {\n          columns: row.columns,\n          onDelete: foreignKeyAction(row.confdeltype),\n          onUpdate: foreignKeyAction(row.confupdtype),\n          references: {\n            columns: row.referenced_columns,\n            schema: row.referenced_schema,\n            table: row.referenced_table,\n          },\n        },\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      if (expectation.foreignKey != null) {\n        const actual = catalog.foreignKeys.get(expectation.object);\n        if (\n          actual == null ||\n          !foreignKeysMatch(actual, expectation.foreignKey)\n        ) {\n          return {\n            actual,\n            expected: expectation.foreignKey,\n            kind: \"constraint-mismatch\",\n            object: expectation.object,\n          };\n        }\n      }\n      return;\n    }\n    default:\n      return;\n  }\n}\n\nfunction foreignKeyAction(value: string): SchemaForeignKeyAction {\n  switch (value) {\n    case \"c\":\n      return \"cascade\";\n    case \"r\":\n      return \"restrict\";\n    case \"n\":\n      return \"set-null\";\n    case \"d\":\n      return \"set-default\";\n    default:\n      return \"no-action\";\n  }\n}\n\nfunction foreignKeysMatch(\n  actual: CatalogForeignKey,\n  expected: SchemaForeignKeyExpectation\n): boolean {\n  return (\n    arraysEqual(actual.columns, expected.columns) &&\n    arraysEqual(actual.references.columns, expected.references.columns) &&\n    actual.references.schema === expected.references.schema &&\n    actual.references.table === expected.references.table &&\n    (expected.onDelete == null || actual.onDelete === expected.onDelete) &&\n    (expected.onUpdate == null || actual.onUpdate === expected.onUpdate)\n  );\n}\n\nfunction arraysEqual(\n  left: readonly string[],\n  right: readonly string[]\n): boolean {\n  return (\n    left.length === right.length &&\n    left.every((value, index) => value === right[index])\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 type SchemaForeignKeyAction =\n  | \"cascade\"\n  | \"no-action\"\n  | \"restrict\"\n  | \"set-default\"\n  | \"set-null\";\n\nexport interface SchemaForeignKeyExpectation {\n  columns: readonly string[];\n  kind: \"foreign-key\";\n  onDelete?: SchemaForeignKeyAction;\n  onUpdate?: SchemaForeignKeyAction;\n  references: {\n    columns: readonly string[];\n    schema: string;\n    table: string;\n  };\n}\n\nexport interface SchemaExpectation {\n  column?: string;\n  definition?: string;\n  foreignKey?: SchemaForeignKeyExpectation;\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  definitionOrForeignKey?: string | SchemaForeignKeyExpectation\n): SchemaExpectation {\n  return {\n    kind: \"constraint\",\n    name: constraintName,\n    object: `${schemaName}.${tableName}.${constraintName}`,\n    schema: schemaName,\n    table: tableName,\n    ...(typeof definitionOrForeignKey === \"string\"\n      ? { definition: definitionOrForeignKey }\n      : definitionOrForeignKey\n        ? { foreignKey: definitionOrForeignKey }\n        : {}),\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(\"athena\", \"api_keys\", \"api_keys_organization_id_fkey\", {\n      columns: [\"organization_id\"],\n      kind: \"foreign-key\",\n      onDelete: \"cascade\",\n      onUpdate: \"no-action\",\n      references: {\n        columns: [\"id\"],\n        schema: \"athena\",\n        table: \"organization\",\n      },\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 { 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 {\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 { 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","/**\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 { createRequestScopedBillingFacade } from \"./billing/runtime/self/request-port.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 rootBilling = core.internalCore.runtimeBindings?.billing;\n  const requestBilling =\n    userId && core.internalCore.runtimeBindings?.billingRuntime && rootBilling\n      ? createRequestScopedBillingFacade({\n          base: rootBilling,\n          runtime: core.internalCore.runtimeBindings.billingRuntime,\n          userId,\n          ...(organizationId ? { organizationId } : {}),\n        })\n      : undefined;\n  const billingModule: AthenaBillingModule | unknown =\n    requestBilling ??\n    rootBilling ??\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","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 * 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","/**\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 * 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 {\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","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","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","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 { 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","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 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 {\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 { 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 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  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 { 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 { 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","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","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","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","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  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","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 {\n  AthenaCompareConditionAst,\n  AthenaConditionAst,\n  AthenaOrderAst,\n  AthenaResolvedRelationConditionAst,\n  AthenaSelectQueryAst,\n} from \"./ast.ts\";\nimport type { AthenaQueryPlan } from \"./plan.ts\";\nimport type { AthenaRelationDescriptor } from \"./relations.ts\";\nimport { canonicalIdentity, isCanonicalIdentity } from \"./relations.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\nimport { canonicalizePagination } from \"./normalize.ts\";\n\nexport interface RelationalQueryRequestV1 {\n  fields: Array<{ alias?: string; field: string }>;\n  order_by: Array<{ direction: \"asc\" | \"desc\"; field: string }>;\n  pagination: { limit?: number; offset?: number };\n  predicate?: RelationalPredicateV1;\n  relation_predicates: RelationalRelationPredicateV1[];\n  relations: RelationalRelationSelectionV1[];\n  source: { schema?: string; table: string };\n  version: \"v1\";\n}\n\nexport type RelationalPredicateV1 =\n  | { kind: \"constant\"; value: boolean }\n  | {\n      field: string;\n      kind: \"comparison\";\n      operator: RelationalComparisonOperatorV1;\n      value?: unknown;\n      values?: unknown[];\n    }\n  | {\n      conditions: RelationalPredicateV1[];\n      kind: \"and\" | \"or\";\n    }\n  | { condition: RelationalPredicateV1; kind: \"not\" };\n\nexport type RelationalComparisonOperatorV1 =\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\nexport interface RelationalRelationPredicateV1 {\n  predicate: RelationalPredicateV1;\n  quantifier: RelationalRelationQuantifierV1;\n  relation: RelationalRelationReferenceV1;\n}\n\nexport type RelationalRelationQuantifierV1 =\n  | \"some\"\n  | \"none\"\n  | \"every\"\n  | \"exists\"\n  | \"is\"\n  | \"is_not\";\n\nexport interface RelationalRelationReferenceV1 {\n  constraint?: string;\n  direction?: \"forward\" | \"reverse\";\n  relation: string;\n  target?: { schema?: string; table: string };\n}\n\nexport interface RelationalRelationSelectionV1 {\n  alias?: string;\n  fields: Array<{ alias?: string; field: string }>;\n  join?: \"inner\";\n  order_by: Array<{ direction: \"asc\" | \"desc\"; field: string }>;\n  pagination: { limit?: number; offset?: number };\n  predicate?: RelationalPredicateV1;\n  relation: RelationalRelationReferenceV1;\n  relation_predicates: RelationalRelationPredicateV1[];\n  relations: RelationalRelationSelectionV1[];\n}\n\n/** Nested relation projection for Relational V2, including optional first selection. */\nexport interface RelationalRelationSelectionV2\n  extends Omit<RelationalRelationSelectionV1, \"relations\"> {\n  relations: RelationalRelationSelectionV2[];\n  selection?: \"natural\" | \"first\";\n}\n\n/** Relational V2 request envelope. Serializes `selection: \"first\"` without rewriting it as `limit: 1`. */\nexport interface RelationalQueryRequestV2\n  extends Omit<RelationalQueryRequestV1, \"version\" | \"relations\"> {\n  relations: RelationalRelationSelectionV2[];\n  version: \"v2\";\n}\n\n/** Lower a many-cardinality plan onto the Relational V1 wire envelope. */\nexport function serializeRelationalQueryV1(\n  plan: AthenaQueryPlan\n): RelationalQueryRequestV1 {\n  if (plan.cardinality !== \"many\") {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      `Relational V1 does not preserve ${plan.cardinality} query cardinality`\n    );\n  }\n  if (planHasFirstSelection(plan)) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      \"Relational V1 cannot serialize relation first selection without changing array result shape\"\n    );\n  }\n  if (plan.ast.distinct) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      \"Distinct relational selections are not supported by the V1 contract\"\n    );\n  }\n\n  const rootFilter = splitCondition(plan.filter);\n  return {\n    fields: scalarFields(plan),\n    order_by: serializeOrderBy(plan.orderBy),\n    pagination: serializePagination(plan.pagination),\n    predicate: rootFilter.predicate,\n    relation_predicates: rootFilter.relations,\n    relations: plan.selection\n      .filter((field) => field.kind === \"relation\")\n      .map((field) => serializeRelationSelection(field)),\n    source: {\n      schema: plan.source.schema,\n      table: plan.source.table,\n    },\n    version: \"v1\",\n  };\n}\n\n/** Lower a many-cardinality plan onto the Relational V2 wire envelope, including `selection: \"first\"`. */\nexport function serializeRelationalQueryV2(\n  plan: AthenaQueryPlan\n): RelationalQueryRequestV2 {\n  if (plan.cardinality !== \"many\") {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      `Relational V2 does not preserve ${plan.cardinality} query cardinality`\n    );\n  }\n  if (plan.ast.distinct) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      \"Distinct relational selections are not supported by the V2 contract\"\n    );\n  }\n\n  const rootFilter = splitCondition(plan.filter);\n  return {\n    fields: scalarFields(plan),\n    order_by: serializeOrderBy(plan.orderBy),\n    pagination: serializePagination(plan.pagination),\n    predicate: rootFilter.predicate,\n    relation_predicates: rootFilter.relations,\n    relations: plan.selection\n      .filter((field) => field.kind === \"relation\")\n      .map((field) => serializeRelationSelectionV2(field)),\n    source: {\n      schema: plan.source.schema,\n      table: plan.source.table,\n    },\n    version: \"v2\",\n  };\n}\n\nfunction planHasFirstSelection(plan: AthenaQueryPlan): boolean {\n  return plan.selection.some(\n    (field) =>\n      field.kind === \"relation\" &&\n      (field.selection === \"first\" || planHasFirstSelection(field.plan))\n  );\n}\n\nfunction serializeRelationSelectionV2(\n  field: Extract<AthenaQueryPlan[\"selection\"][number], { kind: \"relation\" }>\n): RelationalRelationSelectionV2 {\n  const filter = splitCondition(field.plan.filter);\n  return {\n    alias: field.alias,\n    fields: scalarFields(field.plan),\n    join: field.join === \"inner\" ? \"inner\" : undefined,\n    order_by: serializeOrderBy(field.plan.orderBy),\n    pagination: serializePagination(field.plan.pagination),\n    predicate: filter.predicate,\n    relation: serializeRelationReference(field.descriptor),\n    relation_predicates: filter.relations,\n    relations: field.plan.selection\n      .filter((nested) => nested.kind === \"relation\")\n      .map((nested) => serializeRelationSelectionV2(nested)),\n    selection: field.selection === \"first\" ? \"first\" : undefined,\n  };\n}\n\nfunction serializeRelationSelection(\n  field: Extract<AthenaQueryPlan[\"selection\"][number], { kind: \"relation\" }>\n): RelationalRelationSelectionV1 {\n  const filter = splitCondition(field.plan.filter);\n  return {\n    alias: field.alias,\n    fields: scalarFields(field.plan),\n    join: field.join === \"inner\" ? \"inner\" : undefined,\n    order_by: serializeOrderBy(field.plan.orderBy),\n    pagination: serializePagination(field.plan.pagination),\n    predicate: filter.predicate,\n    relation: serializeRelationReference(field.descriptor),\n    relation_predicates: filter.relations,\n    relations: field.plan.selection\n      .filter((nested) => nested.kind === \"relation\")\n      .map((nested) => serializeRelationSelection(nested)),\n  };\n}\n\nfunction scalarFields(plan: AthenaQueryPlan): Array<{\n  alias?: string;\n  field: string;\n}> {\n  return plan.selection\n    .filter((field) => field.kind === \"column\")\n    .map((field) => ({\n      alias: field.alias,\n      field: field.column,\n    }));\n}\n\nfunction serializeRelationReference(\n  descriptor: AthenaRelationDescriptor\n): RelationalRelationReferenceV1 {\n  const relation = requireCanonicalIdentity(descriptor.id, \"relation\", descriptor);\n  const constraint = descriptor.constraint\n    ? requireCanonicalIdentity(descriptor.constraint, \"constraint\", descriptor)\n    : undefined;\n  return {\n    constraint,\n    direction: descriptor.direction,\n    relation,\n    target: {\n      schema: descriptor.to.schema,\n      table: descriptor.to.table,\n    },\n  };\n}\n\nfunction serializeOrderBy(\n  values?: AthenaOrderAst[]\n): Array<{ direction: \"asc\" | \"desc\"; field: string }> {\n  return (values ?? []).map((value) => ({\n    direction: value.direction,\n    field: value.field.field,\n  }));\n}\n\nfunction serializePagination(\n  value: AthenaSelectQueryAst[\"pagination\"]\n): { limit?: number; offset?: number } {\n  return canonicalizePagination(value);\n}\n\nfunction splitCondition(condition?: AthenaConditionAst): {\n  predicate?: RelationalPredicateV1;\n  relations: RelationalRelationPredicateV1[];\n} {\n  if (!condition) {\n    return { relations: [] };\n  }\n\n  if (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n    return {\n      relations: [serializeRelationPredicate(condition)],\n    };\n  }\n\n  if (condition.kind === \"and\") {\n    const predicates: RelationalPredicateV1[] = [];\n    const relations: RelationalRelationPredicateV1[] = [];\n    for (const child of condition.conditions) {\n      const split = splitCondition(child);\n      if (split.predicate) {\n        predicates.push(split.predicate);\n      }\n      relations.push(...split.relations);\n    }\n    return {\n      predicate:\n        predicates.length === 0\n          ? undefined\n          : predicates.length === 1\n            ? predicates[0]\n            : { conditions: predicates, kind: \"and\" },\n      relations,\n    };\n  }\n\n  if (condition.kind === \"or\" || condition.kind === \"not\") {\n    if (containsRelationCondition(condition)) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n        \"Relation predicates must be top-level conjunctions in the relational wire contract\"\n      );\n    }\n    return {\n      predicate: serializeScalarCondition(condition),\n      relations: [],\n    };\n  }\n\n  return {\n    predicate: serializeScalarCondition(condition),\n    relations: [],\n  };\n}\n\nfunction serializeRelationPredicate(\n  condition:\n    | Extract<AthenaConditionAst, { kind: \"relation\" }>\n    | AthenaResolvedRelationConditionAst\n): RelationalRelationPredicateV1 {\n  const resolved = condition.kind === \"resolved-relation\" ? condition : undefined;\n  const filter = splitCondition(condition.filter);\n  if (filter.relations.length > 0) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      \"Nested relation predicates are not representable in the relational wire contract\"\n    );\n  }\n  return {\n    predicate: filter.predicate ?? { kind: \"constant\", value: true },\n    quantifier:\n      condition.predicate === \"isNot\" ? \"is_not\" : condition.predicate,\n    relation: resolved\n      ? serializeRelationReference({\n          ...resolved.descriptor,\n          direction: resolved.direction,\n        })\n      : {\n          relation: requireCanonicalIdentity(condition.relation, \"relation\"),\n          target: undefined,\n        },\n  };\n}\n\nfunction serializeScalarCondition(\n  condition: AthenaConditionAst\n): RelationalPredicateV1 {\n  switch (condition.kind) {\n    case \"compare\":\n      return serializeComparison(condition);\n    case \"in\":\n      return {\n        field: condition.field.field,\n        kind: \"comparison\",\n        operator: \"in\",\n        values: condition.values,\n      };\n    case \"is-null\":\n      return {\n        field: condition.field.field,\n        kind: \"comparison\",\n        operator: condition.negated ? \"is_not_null\" : \"is_null\",\n      };\n    case \"is-true\":\n    case \"is-false\":\n      return {\n        field: condition.field.field,\n        kind: \"comparison\",\n        operator: condition.kind === \"is-true\" ? \"eq\" : \"neq\",\n        value: true,\n      };\n    case \"contains\":\n    case \"contained-by\":\n      return {\n        field: condition.field.field,\n        kind: \"comparison\",\n        operator:\n          condition.kind === \"contained-by\" ? \"contained_by\" : \"contains\",\n        value: condition.value,\n      };\n    case \"and\":\n    case \"or\":\n      return {\n        conditions: condition.conditions.map(serializeScalarCondition),\n        kind: condition.kind,\n      };\n    case \"not\":\n      return {\n        condition: serializeScalarCondition(condition.condition),\n        kind: \"not\",\n      };\n    case \"relation\":\n    case \"resolved-relation\":\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n        \"Relation predicates must be top-level conjunctions in the relational wire contract\"\n      );\n  }\n}\n\nfunction serializeComparison(\n  condition: AthenaCompareConditionAst\n): RelationalPredicateV1 {\n  return {\n    field: condition.field.field,\n    kind: \"comparison\",\n    operator: condition.operator,\n    value: condition.value,\n  };\n}\n\nfunction containsRelationCondition(condition: AthenaConditionAst): boolean {\n  if (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n    return true;\n  }\n  if (condition.kind === \"and\" || condition.kind === \"or\") {\n    return condition.conditions.some(containsRelationCondition);\n  }\n  if (condition.kind === \"not\") {\n    return containsRelationCondition(condition.condition);\n  }\n  return false;\n}\n\nfunction requireCanonicalIdentity(\n  value: string,\n  kind: \"relation\" | \"constraint\",\n  descriptor?: AthenaRelationDescriptor\n): string {\n  if (value.startsWith(`${kind}:v1/`)) {\n    if (isCanonicalIdentity(value, kind)) {\n      return value;\n    }\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\",\n      `Relational wire requests require a canonical ${kind} identity`\n    );\n  }\n  if (!descriptor) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\",\n      `Relational wire requests require a canonical ${kind} identity`\n    );\n  }\n\n  const identityEnd =\n    descriptor.direction === \"reverse\" ? descriptor.to : descriptor.from;\n  const owner = descriptor.source === \"provider-discovery\" ? \"postgres\" : \"model\";\n  const key =\n    kind === \"relation\"\n      ? descriptor.direction === \"reverse\"\n        ? (descriptor.id.split(\".\").pop() ?? descriptor.name)\n        : descriptor.name\n      : value;\n  return canonicalIdentity(\n    kind,\n    owner,\n    identityEnd.schema,\n    identityEnd.table,\n    key\n  );\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","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 * 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","/**\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","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 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","/**\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","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 * 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","/**\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 { 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","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","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 { 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","/**\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","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","/* 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 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","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  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 {\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 { AthenaBillingModule } from \"../../module.ts\";\nimport type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport type { BillingSelfPort } from \"../types.ts\";\nimport type { AthenaBillingRuntimeDispatch } from \"../dispatch.ts\";\nimport type { SelfBillingOperation } from \"./dispatch.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\n\n/**\n * Rebind only customer self-service Billing for a request view.\n *\n * Local Billing is materialized once for the process, so its ordinary ports\n * retain process ownership. Self operations already have a principal-aware\n * execute boundary; this adapter uses that boundary without changing the\n * process-owned module or its merchant/admin ports.\n */\nexport function createRequestScopedBillingFacade(input: {\n  base: AthenaBillingModule;\n  runtime: AthenaBillingRuntimeDispatch;\n  userId: string;\n  organizationId?: string;\n}): AthenaBillingModule {\n  const subject: AthenaPrincipal = {\n    authenticated: true,\n    grants: [],\n    rights: [],\n    userId: input.userId,\n    ...(input.organizationId ? { organizationId: input.organizationId } : {}),\n  };\n\n  const execute = <T>(operation: SelfBillingOperation) =>\n    (payload: unknown): Promise<T> =>\n      input.runtime.execute(\n        operation,\n        payload,\n        selfDelegatedBillingPrincipal(subject, [operation]),\n      ) as Promise<T>;\n\n  const self = {\n    checkout: {\n      create: execute(\"self.checkout.create\"),\n      resume: execute(\"self.checkout.resume\"),\n    },\n    customer: {\n      get: execute(\"self.customer.get\"),\n    },\n    entitlements: execute(\"self.entitlements\"),\n    invoices: {\n      get: execute(\"self.invoices.get\"),\n      list: execute(\"self.invoices.list\"),\n    },\n    payments: {\n      get: execute(\"self.payments.get\"),\n      list: execute(\"self.payments.list\"),\n    },\n    subscription: {\n      cancel: execute(\"self.subscription.cancel\"),\n      change: execute(\"self.subscription.change\"),\n      enroll: execute(\"self.subscription.enroll\"),\n      get: execute(\"self.subscription.get\"),\n      getChangeOperation: execute(\"self.subscription.get\"),\n    },\n  } as unknown as BillingSelfPort;\n\n  return new Proxy(input.base, {\n    get(target, property, receiver) {\n      return property === \"self\"\n        ? self\n        : Reflect.get(target, property, receiver);\n    },\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 { 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 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","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","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","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 {\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","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","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 {\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 * 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 { AthenaBillingRuntimeDispatch } from \"../billing/runtime/dispatch.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  billingRuntime?: AthenaBillingRuntimeDispatch;\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 { 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","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","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","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","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","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 { 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","/**\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 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 {\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  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 { 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 { 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","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 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","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 { 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","/**\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 {\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","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 { 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","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","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 { 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 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  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 { 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  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 { 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 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","/**\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 {\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 { 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 { 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","export { createMutationQuery } from \"../../query/execution/mutation.ts\";\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","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","export {\n  createCompatibilityQueryBuilder as createQueryBuilder,\n} from \"../../compatibility/query-builder.ts\";\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","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","/**\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 {\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","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","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 {\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 { 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 { 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 * 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 * 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 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","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 {\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","/**\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","{\n  \"consumers\": [\n    \"openapi.yaml\",\n    \"openapi.json\",\n    \"packages/athena-js storageSdkManifest\",\n    \"packages/athena-js/test/storage-route-parity.test.ts\"\n  ],\n  \"description\": \"Live Athena storage HTTP surface claimed by the JS SDK (storageSdkManifest). METHOD+path inventory for exact-set parity. Until a Rust LIVE_HTTP_ROUTES export exists, keep this file in lockstep with packages/athena-js/src/storage/module.ts storageSdkManifest.\",\n  \"domain\": \"storage\",\n  \"routes\": [\n    {\n      \"method\": \"GET\",\n      \"path\": \"/admin/backups\",\n      \"surface\": \"adminBackup\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/admin/backups\",\n      \"surface\": \"adminBackup\"\n    },\n    {\n      \"method\": \"DELETE\",\n      \"path\": \"/admin/backups/{key}\",\n      \"surface\": \"adminBackup\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/admin/backups/{key}/restore\",\n      \"surface\": \"adminBackup\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/admin/backups/jobs\",\n      \"surface\": \"adminBackup\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/admin/backups/schedules\",\n      \"surface\": \"adminBackup\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/audit/list\",\n      \"surface\": \"storageAudit\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/cors\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/cors/delete\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/cors/set\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/create\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/delete\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/lifecycle\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/lifecycle/delete\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/lifecycle/set\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/list\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/policy\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/policy/delete\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/policy/set\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/public-access\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/public-access/delete\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/buckets/public-access/set\",\n      \"surface\": \"storageBuckets\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/catalogs\",\n      \"surface\": \"storageCatalog\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/catalogs\",\n      \"surface\": \"storageCatalog\"\n    },\n    {\n      \"method\": \"DELETE\",\n      \"path\": \"/storage/catalogs/{id}\",\n      \"surface\": \"storageCatalog\"\n    },\n    {\n      \"method\": \"PATCH\",\n      \"path\": \"/storage/catalogs/{id}\",\n      \"surface\": \"storageCatalog\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/credentials\",\n      \"surface\": \"storageCatalog\"\n    },\n    {\n      \"method\": \"DELETE\",\n      \"path\": \"/storage/files/{file_id}\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/files/{file_id}\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"PATCH\",\n      \"path\": \"/storage/files/{file_id}\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/{file_id}/confirm-upload\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/{file_id}/copy\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/files/{file_id}/proxy\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/files/{file_id}/proxy-url\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/files/{file_id}/public-url\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"DELETE\",\n      \"path\": \"/storage/files/{file_id}/purge\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/{file_id}/restore\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/files/{file_id}/retention\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/{file_id}/retention\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"PUT\",\n      \"path\": \"/storage/files/{file_id}/upload\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/files/{file_id}/url\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/files/{file_id}/versions\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"DELETE\",\n      \"path\": \"/storage/files/{file_id}/versions/{version_id}\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/{file_id}/versions/{version_id}/restore\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"PATCH\",\n      \"path\": \"/storage/files/{file_id}/visibility\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/{file_id}/visibility\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/delete-many\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/list\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/search\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/update-many\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/upload-url\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/upload-urls\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/files/visibility-many\",\n      \"surface\": \"storageFiles\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/folders/delete\",\n      \"surface\": \"storageFolders\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/folders/list\",\n      \"surface\": \"storageFolders\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/folders/move\",\n      \"surface\": \"storageFolders\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/folders/tree\",\n      \"surface\": \"storageFolders\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/multipart/abort\",\n      \"surface\": \"storageMultipart\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/multipart/complete\",\n      \"surface\": \"storageMultipart\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/multipart/create\",\n      \"surface\": \"storageMultipart\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/multipart/list-parts\",\n      \"surface\": \"storageMultipart\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/multipart/sign-part\",\n      \"surface\": \"storageMultipart\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/copy\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/delete\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/exists\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/folder\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/folder/delete\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/folder/rename\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/head\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/post-policy\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/public-url\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/update\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/upload-url\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/url\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/validate\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/versions\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/versions/delete\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/objects/versions/restore\",\n      \"surface\": \"storageObjects\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/permissions/check\",\n      \"surface\": \"storagePermissions\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/permissions/grant\",\n      \"surface\": \"storagePermissions\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/permissions/list\",\n      \"surface\": \"storagePermissions\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/permissions/revoke\",\n      \"surface\": \"storagePermissions\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/connections\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/connections\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"DELETE\",\n      \"path\": \"/storage/connections/{id}\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/connections/{id}\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/connections/test\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/providers\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/service/files\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"DELETE\",\n      \"path\": \"/storage/service/files/{file_id}\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/service/files/{file_id}\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/service/files/{file_id}/move\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"GET\",\n      \"path\": \"/storage/service/files/{file_id}/permissions\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/service/files/{file_id}/permissions/grant\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/service/files/{file_id}/permissions/revoke\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"DELETE\",\n      \"path\": \"/storage/service/files/{file_id}/purge\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/service/files/{file_id}/restore\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/service/files/{file_id}/visibility\",\n      \"surface\": \"storageCanonical\"\n    },\n    {\n      \"method\": \"POST\",\n      \"path\": \"/storage/service/files/list\",\n      \"surface\": \"storageCanonical\"\n    }\n  ],\n  \"schemaVersion\": 1,\n  \"sourceOfTruth\": \"packages/athena-js/src/storage/module.ts storageSdkManifest\",\n  \"sources\": [\n    \"packages/athena-js/src/storage/module.ts\",\n    \"packages/athena-js/src/storage/backup.ts\",\n    \"openapi storage + admin backup paths\"\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","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 { 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 { 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 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","/**\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","/**\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","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 {\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 {\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","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","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  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 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 {\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  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 { 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  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","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 } 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 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 {\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 { 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","/**\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","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","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","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 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","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 { 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","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 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 {\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 { 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","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","/**\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 { parseBooleanFlag } from \"../utils/parse-boolean-flag.ts\";\n\ninterface GeneratorEnvBaseOptions<T> {\n  default?: T;\n  optional?: boolean;\n}\n\nexport type GeneratorEnvStringOptions = GeneratorEnvBaseOptions<string>;\n\nexport type GeneratorEnvBooleanOptions = GeneratorEnvBaseOptions<boolean>;\n\nexport interface GeneratorEnvListOptions\n  extends GeneratorEnvBaseOptions<readonly string[]> {\n  separator?: string;\n}\n\nexport type GeneratorEnvJsonOptions<T> = GeneratorEnvBaseOptions<T>;\n\nexport type GeneratorEnvOneOfOptions<T extends string> =\n  GeneratorEnvBaseOptions<T>;\n\ninterface GeneratorEnvHelper {\n  boolean(key: string, options?: GeneratorEnvBooleanOptions): boolean;\n  boolean(\n    key: string,\n    options: GeneratorEnvBooleanOptions & { optional: true }\n  ): boolean | undefined;\n  json<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T;\n  json<T>(\n    key: string,\n    options: GeneratorEnvJsonOptions<T> & { optional: true }\n  ): T | undefined;\n  list(key: string, options?: GeneratorEnvListOptions): string[];\n  list(\n    key: string,\n    options: GeneratorEnvListOptions & { optional: true }\n  ): string[] | undefined;\n  oneOf<const T extends string>(\n    key: string,\n    allowedValues: readonly T[],\n    options?: GeneratorEnvOneOfOptions<T>\n  ): T;\n  oneOf<const T extends string>(\n    key: string,\n    allowedValues: readonly T[],\n    options: GeneratorEnvOneOfOptions<T> & { optional: true }\n  ): T | undefined;\n  (key: string, options?: GeneratorEnvStringOptions): string;\n  (\n    key: string,\n    options: GeneratorEnvStringOptions & { optional: true }\n  ): string | undefined;\n}\n\nfunction readEnvStringValue(key: string): string | undefined {\n  if (typeof process === \"undefined\" || !process.env) {\n    return;\n  }\n\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 throwMissingEnvVar(key: string): never {\n  throw new Error(\n    `Generator config env var ${key} is missing or empty. Set ${key} or provide a default value.`\n  );\n}\n\nfunction resolveEnvValue<T>(\n  key: string,\n  options: GeneratorEnvBaseOptions<T> | undefined,\n  resolver: (rawValue: string) => T\n): T | undefined {\n  const rawValue = readEnvStringValue(key);\n  if (rawValue === undefined) {\n    if (options?.default !== undefined) {\n      return options.default;\n    }\n    if (options?.optional) {\n      return;\n    }\n    return throwMissingEnvVar(key);\n  }\n\n  return resolver(rawValue);\n}\n\nfunction resolveStringEnv(\n  key: string,\n  options?: GeneratorEnvStringOptions\n): string | undefined {\n  return resolveEnvValue(key, options, (value) => value);\n}\n\nfunction resolveBooleanEnv(\n  key: string,\n  options?: GeneratorEnvBooleanOptions\n): boolean | undefined {\n  return resolveEnvValue(key, options, (value) =>\n    parseBooleanFlag(value, false)\n  );\n}\n\nfunction resolveListEnv(\n  key: string,\n  options?: GeneratorEnvListOptions\n): string[] | undefined {\n  return resolveEnvValue(key, options, (value) => {\n    const separator = options?.separator ?? \",\";\n    return value\n      .split(separator)\n      .map((entry) => entry.trim())\n      .filter(\n        (entry, index, entries) =>\n          entry.length > 0 && entries.indexOf(entry) === index\n      );\n  })?.slice();\n}\n\nfunction resolveJsonEnv<T>(\n  key: string,\n  options?: GeneratorEnvJsonOptions<T>\n): T | undefined {\n  return resolveEnvValue(key, options, (value) => {\n    try {\n      return JSON.parse(value) as T;\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      throw new Error(\n        `Generator config env var ${key} must contain valid JSON. ${message}`,\n        { cause: error }\n      );\n    }\n  });\n}\n\nfunction resolveOneOfEnv<T extends string>(\n  key: string,\n  allowedValues: readonly T[],\n  options?: GeneratorEnvOneOfOptions<T>\n): T | undefined {\n  return resolveEnvValue(key, options, (value) => {\n    if (allowedValues.includes(value as T)) {\n      return value as T;\n    }\n\n    throw new Error(\n      `Generator config env var ${key} must be one of: ${allowedValues.join(\", \")}. Received: ${value}.`\n    );\n  });\n}\n\nfunction generatorEnvString(\n  key: string,\n  options?: GeneratorEnvStringOptions\n): string;\nfunction generatorEnvString(\n  key: string,\n  options: GeneratorEnvStringOptions & { optional: true }\n): string | undefined;\nfunction generatorEnvString(\n  key: string,\n  options?: GeneratorEnvStringOptions\n): string | undefined {\n  return resolveStringEnv(key, options);\n}\n\nfunction generatorEnvBoolean(\n  key: string,\n  options?: GeneratorEnvBooleanOptions\n): boolean;\nfunction generatorEnvBoolean(\n  key: string,\n  options: GeneratorEnvBooleanOptions & { optional: true }\n): boolean | undefined;\nfunction generatorEnvBoolean(\n  key: string,\n  options?: GeneratorEnvBooleanOptions\n): boolean | undefined {\n  return resolveBooleanEnv(key, options);\n}\n\nfunction generatorEnvList(\n  key: string,\n  options?: GeneratorEnvListOptions\n): string[];\nfunction generatorEnvList(\n  key: string,\n  options: GeneratorEnvListOptions & { optional: true }\n): string[] | undefined;\nfunction generatorEnvList(\n  key: string,\n  options?: GeneratorEnvListOptions\n): string[] | undefined {\n  return resolveListEnv(key, options);\n}\n\nfunction generatorEnvJson<T>(\n  key: string,\n  options?: GeneratorEnvJsonOptions<T>\n): T;\nfunction generatorEnvJson<T>(\n  key: string,\n  options: GeneratorEnvJsonOptions<T> & { optional: true }\n): T | undefined;\nfunction generatorEnvJson<T>(\n  key: string,\n  options?: GeneratorEnvJsonOptions<T>\n): T | undefined {\n  return resolveJsonEnv(key, options);\n}\n\nfunction generatorEnvOneOf<const T extends string>(\n  key: string,\n  allowedValues: readonly T[],\n  options?: GeneratorEnvOneOfOptions<T>\n): T;\nfunction generatorEnvOneOf<const T extends string>(\n  key: string,\n  allowedValues: readonly T[],\n  options: GeneratorEnvOneOfOptions<T> & { optional: true }\n): T | undefined;\nfunction generatorEnvOneOf<const T extends string>(\n  key: string,\n  allowedValues: readonly T[],\n  options?: GeneratorEnvOneOfOptions<T>\n): T | undefined {\n  return resolveOneOfEnv(key, allowedValues, options);\n}\n\n/**\n * Typed env reader for generator configs. This keeps `athena.config.*` files\n * declarative while preserving exact field types for booleans, lists, unions,\n * and JSON-backed objects.\n */\nexport const generatorEnv = Object.assign(generatorEnvString, {\n  boolean: generatorEnvBoolean,\n  json: generatorEnvJson,\n  list: generatorEnvList,\n  oneOf: generatorEnvOneOf,\n}) as GeneratorEnvHelper;\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","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 {\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 { 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  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","/**\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  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 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","export {\n  mapAthenaErrorCodeToTransportCode,\n  mapNormalizedAthenaErrorToErrorResponse,\n} from \"./errors.ts\";\n\nexport {\n  clampPaginationLimit,\n  mapChatMessagePageWireToSequencePage,\n  mapLimitPlusOneToPage,\n  mapOffsetWindowToOffsetPage,\n} from \"./pagination.ts\";\n","/**\n * Named mappers between legacy SDK error shapes and v1 transport error DTOs.\n */\n\nimport type { AthenaErrorCode, NormalizedAthenaError } from \"../auxiliaries.ts\";\nimport type { JsonObject } from \"../contracts/v1/common.ts\";\nimport type {\n  AthenaErrorResponse,\n  AthenaTransportErrorCode,\n} from \"../contracts/v1/errors.ts\";\n\n/**\n * Map a legacy client {@link AthenaErrorCode} to a stable transport code.\n */\nexport function mapAthenaErrorCodeToTransportCode(\n  code: AthenaErrorCode | string\n): AthenaTransportErrorCode {\n  switch (code) {\n    case \"VALIDATION_FAILED\":\n      return \"validation_error\";\n    case \"AUTH_UNAUTHORIZED\":\n      return \"authentication_required\";\n    case \"AUTH_FORBIDDEN\":\n      return \"forbidden\";\n    case \"NOT_FOUND\":\n      return \"not_found\";\n    case \"UNIQUE_VIOLATION\":\n      return \"conflict\";\n    case \"RATE_LIMITED\":\n      return \"rate_limited\";\n    case \"TRANSIENT_FAILURE\":\n    case \"NETWORK_UNAVAILABLE\":\n      return \"transient\";\n    case \"HTTP_FAILURE\":\n    case \"UNKNOWN\":\n      return \"internal\";\n    default:\n      return \"internal\";\n  }\n}\n\n/**\n * Public transport details must not leak DB schema identifiers (constraint,\n * table). Those stay on NormalizedAthenaError for internal diagnostics only.\n * See ADR 0021 public error envelope.\n */\nfunction detailsFromNormalized(\n  error: NormalizedAthenaError\n): JsonObject | undefined {\n  const details: JsonObject = {};\n  if (error.operation) {\n    details.operation = error.operation;\n  }\n  if (typeof error.status === \"number\") {\n    details.status = error.status;\n  }\n  if (error.category) {\n    details.category = error.category;\n  }\n  if (error.kind) {\n    details.kind = error.kind;\n  }\n  return Object.keys(details).length > 0 ? details : undefined;\n}\n\n/** Stable public messages for transport codes (no schema identifiers). */\nconst PUBLIC_MESSAGE_BY_TRANSPORT_CODE: Record<\n  AthenaTransportErrorCode,\n  string\n> = {\n  authentication_required: \"Authentication required\",\n  conflict: \"Resource conflict\",\n  forbidden: \"Forbidden\",\n  internal: \"Internal error\",\n  not_found: \"Resource not found\",\n  rate_limited: \"Rate limit exceeded\",\n  transient: \"Temporary failure\",\n  validation_error: \"Validation failed\",\n};\n\n/**\n * Detect database-origin text that often embeds constraint/table tokens\n * (Postgres unique violations, foreign keys, relation missing, etc.).\n */\nfunction looksLikeDatabaseOriginMessage(message: string): boolean {\n  const lower = message.toLowerCase();\n  return (\n    lower.includes(\"violates unique constraint\") ||\n    lower.includes(\"duplicate key value\") ||\n    lower.includes(\"violates foreign key constraint\") ||\n    lower.includes(\"violates check constraint\") ||\n    lower.includes(\"violates not-null constraint\") ||\n    /constraint\\s+[\"'`]/.test(lower) ||\n    /relation\\s+[\"'`]/.test(lower) ||\n    /column\\s+[\"'`]/.test(lower)\n  );\n}\n\n/**\n * Public transport message must not copy raw DB text that embeds schema\n * identifiers (constraint names like users_email_key, table names). Prefer a\n * stable public override when:\n * - normalized category is `database` (definitive; covers syntax/auth text\n *   outside phrase heuristics), or\n * - the message is DB-shaped / embeds known schema tokens.\n * See ADR 0021 public error envelope. (P2 #3669238929)\n */\nfunction publicMessageFromNormalized(\n  error: NormalizedAthenaError,\n  transportCode: AthenaTransportErrorCode\n): string {\n  const message = error.message.trim();\n  const embedsConstraint =\n    typeof error.constraint === \"string\" &&\n    error.constraint.length > 0 &&\n    message.includes(error.constraint);\n  const embedsTable =\n    typeof error.table === \"string\" &&\n    error.table.length > 0 &&\n    message.includes(error.table);\n  if (\n    error.category === \"database\" ||\n    looksLikeDatabaseOriginMessage(message) ||\n    embedsConstraint ||\n    embedsTable\n  ) {\n    return PUBLIC_MESSAGE_BY_TRANSPORT_CODE[transportCode];\n  }\n  return message.length > 0\n    ? message\n    : PUBLIC_MESSAGE_BY_TRANSPORT_CODE[transportCode];\n}\n\n/**\n * Prefer kind/retryable for codes that are ambiguous when mapped code-only\n * (e.g. HTTP_FAILURE covers both non-retryable client failures and 5xx outages).\n */\nfunction mapNormalizedToTransportCode(\n  error: NormalizedAthenaError\n): AthenaTransportErrorCode {\n  if (\n    error.code === \"HTTP_FAILURE\" &&\n    (error.kind === \"transient\" || error.retryable === true)\n  ) {\n    return \"transient\";\n  }\n  return mapAthenaErrorCodeToTransportCode(error.code);\n}\n\n/**\n * Map a normalized SDK error to the public {@link AthenaErrorResponse} envelope.\n */\nexport function mapNormalizedAthenaErrorToErrorResponse(\n  error: NormalizedAthenaError,\n  options?: { requestId?: string }\n): AthenaErrorResponse {\n  const details = detailsFromNormalized(error);\n  const code = mapNormalizedToTransportCode(error);\n  return {\n    error: {\n      code,\n      message: publicMessageFromNormalized(error, code),\n      ...(details ? { details } : {}),\n      ...(options?.requestId ? { requestId: options.requestId } : {}),\n      retryable: error.retryable,\n    },\n  };\n}\n","/**\n * Named pagination mappers (limit-plus-one and offset packaging).\n * Mirrors crates/athena-core helpers without inventing wire fields.\n */\n\nimport type { OffsetPage, Page, SequencePage } from \"../contracts/v1/common.ts\";\nimport {\n  type LimitPolicy,\n  PaginationLimitPolicy,\n  type PaginationLimitPolicyName,\n} from \"../contracts/v1/pagination.ts\";\n\nfunction resolveLimitPolicy(\n  policy: PaginationLimitPolicyName | LimitPolicy\n): LimitPolicy {\n  if (typeof policy === \"string\") {\n    return PaginationLimitPolicy[policy];\n  }\n  return policy;\n}\n\n/**\n * Clamp a requested limit using an endpoint-named or caller-supplied policy.\n *\n * Prefer endpoint keys (e.g. `AUTH_LIST_USERS`, `CHAT_LIST_MESSAGES`) or an\n * inline `{ defaultLimit, maxLimit, minLimit? }` aligned to the real server surface.\n */\nexport function clampPaginationLimit(\n  requested: number | undefined,\n  policy: PaginationLimitPolicyName | LimitPolicy = \"DEFAULT\"\n): number {\n  const resolved = resolveLimitPolicy(policy);\n  // Default only for omitted/non-finite input; clamp finite values to [min, max].\n  // minLimit is endpoint-specific (0 for AUTH_LIST_USERS; 1 for chat/default).\n  const minLimit =\n    typeof resolved.minLimit === \"number\" && Number.isFinite(resolved.minLimit)\n      ? Math.trunc(resolved.minLimit)\n      : 1;\n  const raw =\n    typeof requested === \"number\" && Number.isFinite(requested)\n      ? Math.trunc(requested)\n      : resolved.defaultLimit;\n  return Math.min(Math.max(raw, minLimit), resolved.maxLimit);\n}\n\n/**\n * Build a cursor {@link Page} from a limit-plus-one fetch.\n *\n * When the source returns `limit + 1` items, the extra row proves `hasMore`\n * and is dropped from `items`. `nextCursor` is derived from the last kept item.\n */\nexport function mapLimitPlusOneToPage<T, TCursor = string>(\n  rows: readonly T[],\n  limit: number,\n  getCursor: (item: T) => TCursor\n): Page<T, TCursor> {\n  const safeLimit = Math.max(0, Math.trunc(limit));\n  // limit 0: empty items window; hasMore from any returned lookahead row\n  // (matches mapOffsetWindowToOffsetPage limitPlusOne with limit 0).\n  if (safeLimit === 0) {\n    return {\n      hasMore: rows.length > 0,\n      items: [],\n      nextCursor: null,\n    };\n  }\n  const hasMore = rows.length > safeLimit;\n  const items = hasMore ? rows.slice(0, safeLimit) : [...rows];\n  const last = items.length > 0 ? items.at(-1) : undefined;\n  return {\n    hasMore,\n    items,\n    nextCursor: hasMore && last !== undefined ? getCursor(last) : null,\n  };\n}\n\n/**\n * Package an offset window into {@link OffsetPage}.\n */\nexport function mapOffsetWindowToOffsetPage<T>(input: {\n  items: readonly T[];\n  offset: number;\n  limit: number;\n  /** When true, more rows exist after this window (caller already knows). */\n  hasMore?: boolean;\n  /** Optional total when a count was performed. */\n  total?: number;\n  /** When items were fetched with limit+1, set true to auto-trim. */\n  limitPlusOne?: boolean;\n}): OffsetPage<T> {\n  const offset = Math.max(0, Math.trunc(input.offset));\n  const limit = Math.max(0, Math.trunc(input.limit));\n  let items = [...input.items];\n  let hasMore = input.hasMore ?? false;\n\n  // Apply for every nonnegative limit (including 0) so zero-length windows\n  // still auto-trim lookahead, matching mapLimitPlusOneToPage.\n  // Trim independently of the hasMore signal: when callers already know\n  // availability (explicit hasMore), do not overwrite with length inference\n  // (discussion_r3687083537). Infer only when input.hasMore is undefined.\n  if (input.limitPlusOne) {\n    const inferredHasMore = items.length > limit;\n    if (inferredHasMore) {\n      items = items.slice(0, limit);\n    }\n    if (input.hasMore === undefined) {\n      hasMore = inferredHasMore;\n    }\n  } else if (input.hasMore === undefined && typeof input.total === \"number\") {\n    hasMore = offset + items.length < input.total;\n  }\n\n  return {\n    items,\n    limit,\n    offset,\n    ...(typeof input.total === \"number\" ? { total: input.total } : {}),\n    hasMore,\n  };\n}\n\n/**\n * Map athena-chat `MessagePage` wire (`items` + snake_case `next_before_seq`,\n * no `hasMore`) to the canonical camelCase {@link SequencePage} contract.\n *\n * athena-chat `list_messages` returns only LIMIT rows and always supplies\n * `next_before_seq` on nonempty pages without limit+1 lookahead. A full page\n * plus cursor therefore does **not** prove more results exist (exact-multiple\n * terminal pages would spuriously drive load-more UI).\n *\n * `hasMore` is true only when:\n * - the wire includes an explicit `has_more: true`, or\n * - the caller used limit+1 fetch semantics (`limitPlusOne: true`, a finite\n *   `limit`, and `items.length > limit`) when `has_more` is omitted.\n *   Without a finite `limit`, `limitPlusOne` is ignored (no wipe / false hasMore).\n * When `limitPlusOne` is set with a finite `limit`, the extra row is always\n * trimmed - even if an explicit `has_more` is also supplied.\n *\n * Chat limit+1 rows are ASC after reverse (oldest at index 0). The lookahead\n * row is the **leading** oldest item — trim with `slice(-limit)` / drop index 0,\n * not `slice(0, limit)` (which would drop the newest message). After trim,\n * `nextBeforeSeq` is derived from the oldest retained item's `room_seq`/`seq`\n * when present so the cursor matches the retained boundary.\n *\n * Otherwise `hasMore` is false. Cursor is still mapped for callers that page\n * manually. Call this before validating with `sequencePageSchema`.\n */\nexport function mapChatMessagePageWireToSequencePage<T>(wire: {\n  items: readonly T[];\n  next_before_seq?: number | null;\n  /** Request limit used for the list call (required for limit+1 trim). */\n  limit?: number;\n  /** Explicit server availability signal when the wire provides it. */\n  has_more?: boolean;\n  /**\n   * When true and `limit` is a finite number, treat items as limit+1 fetch\n   * and auto-trim. Ignored when `limit` is omitted or non-finite.\n   */\n  limitPlusOne?: boolean;\n}): SequencePage<T> {\n  const raw = wire.next_before_seq;\n  let nextBeforeSeq =\n    typeof raw === \"number\" && Number.isFinite(raw) ? Math.trunc(raw) : null;\n  let items = [...wire.items];\n  // Omitted/non-finite limit must not default to 0 under limitPlusOne (would\n  // wipe items and set hasMore=true). Require a finite limit for lookahead.\n  const hasFiniteLimit =\n    typeof wire.limit === \"number\" && Number.isFinite(wire.limit);\n  const safeLimit = hasFiniteLimit\n    ? Math.max(0, Math.trunc(wire.limit as number))\n    : 0;\n\n  // hasMore signal: explicit has_more wins; else derive from limit+1 length.\n  let hasMore = false;\n  if (wire.has_more === true) {\n    hasMore = true;\n  } else if (wire.has_more === false) {\n    hasMore = false;\n  } else if (wire.limitPlusOne && hasFiniteLimit) {\n    hasMore = items.length > safeLimit;\n  }\n\n  // Trim lookahead independently of has_more (discussion_r3687053473):\n  // both may be set; limitPlusOne still auto-trims to `limit` rows.\n  if (wire.limitPlusOne && hasFiniteLimit && items.length > safeLimit) {\n    // ASC after reverse: drop leading oldest lookahead; keep newest `limit`.\n    items = safeLimit === 0 ? [] : items.slice(-safeLimit);\n    const oldestRetained = items[0];\n    const derived = seqFromChatItem(oldestRetained);\n    if (derived !== null) {\n      nextBeforeSeq = derived;\n    }\n  }\n  // No full-page + cursor heuristic: server does not look ahead.\n\n  return {\n    hasMore,\n    items,\n    nextBeforeSeq,\n  };\n}\n\n/** Prefer chat `room_seq`, then generic `seq`, for sequence-cursor derivation. */\nfunction seqFromChatItem(item: unknown): number | null {\n  if (item === null || typeof item !== \"object\") {\n    return null;\n  }\n  const record = item as Record<string, unknown>;\n  for (const key of [\"room_seq\", \"seq\"] as const) {\n    const value = record[key];\n    if (typeof value === \"number\" && Number.isFinite(value)) {\n      return Math.trunc(value);\n    }\n  }\n  return null;\n}\n","export {\n  type ActiveOrganizationSessionLike,\n  type EnsureActiveOrganizationOptions,\n  type EnsureActiveOrganizationResult,\n  ensureActiveOrganization,\n  type OrganizationLike,\n} from \"./ensure-active-organization.ts\";\n","/**\n * Framework-agnostic active-organization bootstrap.\n *\n * Promoted from consumer apps (e.g. speedrun-formations) so product code only\n * supplies list/set-active + optional org selection policy.\n *\n * Does not call Athena Auth routes itself — inject your client's\n * `auth.organization.list` / `setActive` (or any compatible functions).\n */\n\nexport interface ActiveOrganizationSessionLike {\n  session?: {\n    activeOrganizationId?: string | null;\n  } | null;\n}\n\nexport interface OrganizationLike {\n  id: string;\n}\n\nexport interface EnsureActiveOrganizationOptions<\n  TOrganization extends OrganizationLike,\n> {\n  listOrganizations: () => Promise<readonly TOrganization[]>;\n  onError?: (error: unknown) => void;\n  /**\n   * Choose which org to activate when the session has none.\n   * Default: first organization with a non-empty `id`.\n   */\n  selectOrganizationId?: (\n    organizations: readonly TOrganization[]\n  ) => string | null;\n  session: ActiveOrganizationSessionLike | null | undefined;\n  setActiveOrganization: (organizationId: string) => Promise<unknown>;\n}\n\nexport interface EnsureActiveOrganizationResult {\n  activeOrganizationId: string | null;\n  didSetActiveOrganization: boolean;\n}\n\nfunction normalizeOrganizationId(\n  value: string | null | undefined\n): string | null {\n  if (typeof value !== \"string\") {\n    return null;\n  }\n  const normalized = value.trim();\n  return normalized.length > 0 ? normalized : null;\n}\n\nfunction defaultSelectOrganizationId<TOrganization extends OrganizationLike>(\n  organizations: readonly TOrganization[]\n): string | null {\n  for (const organization of organizations) {\n    const id = normalizeOrganizationId(organization.id);\n    if (id) {\n      return id;\n    }\n  }\n  return null;\n}\n\n/**\n * Ensure the session has an active organization when memberships exist.\n *\n * - If `session.session.activeOrganizationId` is already set → return it (no network).\n * - Else list organizations; if empty → `{ activeOrganizationId: null, didSetActiveOrganization: false }`.\n * - Else select an id (custom or first) and call `setActiveOrganization`.\n * - List/set failures invoke `onError` and return unset (never throw).\n */\nexport async function ensureActiveOrganization<\n  TOrganization extends OrganizationLike,\n>(\n  options: EnsureActiveOrganizationOptions<TOrganization>\n): Promise<EnsureActiveOrganizationResult> {\n  const currentActiveOrganizationId = normalizeOrganizationId(\n    options.session?.session?.activeOrganizationId\n  );\n\n  if (currentActiveOrganizationId) {\n    return {\n      activeOrganizationId: currentActiveOrganizationId,\n      didSetActiveOrganization: false,\n    };\n  }\n\n  let organizations: readonly TOrganization[];\n  try {\n    organizations = await options.listOrganizations();\n  } catch (error) {\n    options.onError?.(error);\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    };\n  }\n\n  if (organizations.length === 0) {\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    };\n  }\n\n  const selectedOrganizationId = normalizeOrganizationId(\n    (options.selectOrganizationId ?? defaultSelectOrganizationId)(organizations)\n  );\n\n  if (!selectedOrganizationId) {\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    };\n  }\n\n  try {\n    await options.setActiveOrganization(selectedOrganizationId);\n    return {\n      activeOrganizationId: selectedOrganizationId,\n      didSetActiveOrganization: true,\n    };\n  } catch (error) {\n    options.onError?.(error);\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    };\n  }\n}\n","import type { AthenaModelTarget } from \"../schema/types.ts\";\n\nexport type AthenaModelViewFieldFormat =\n  | \"text\"\n  | \"datetime\"\n  | \"number\"\n  | \"boolean\"\n  | \"json\";\n\nexport interface AthenaModelViewField {\n  editable?: boolean;\n  format?: AthenaModelViewFieldFormat;\n  label?: string;\n  readonly?: boolean;\n  searchable?: boolean;\n}\n\nexport interface AthenaModelViewDefinition<\n  TModel extends AthenaModelTarget = AthenaModelTarget,\n> {\n  defaultOrder?: { column: string; direction?: \"asc\" | \"desc\" };\n  defaultProjection?: readonly string[];\n  fields?: Record<string, AthenaModelViewField>;\n  label: string;\n  model: TModel;\n  pluralLabel?: string;\n  title?: (row: Record<string, unknown>) => string;\n}\n\nexport type AthenaModelView<\n  TModel extends AthenaModelTarget = AthenaModelTarget,\n> = Readonly<AthenaModelViewDefinition<TModel>>;\n\n/**\n * Presentation metadata for an AthenaModel. The JS SDK owns the definition;\n * Auth UI / tables / forms consume it. This is not a second query language.\n */\nexport function defineModelView<TModel extends AthenaModelTarget>(\n  model: TModel,\n  definition: Omit<AthenaModelViewDefinition<TModel>, \"model\">\n): AthenaModelView<TModel> {\n  return Object.freeze({\n    ...definition,\n    defaultProjection: definition.defaultProjection\n      ? Object.freeze([...definition.defaultProjection])\n      : undefined,\n    fields: definition.fields\n      ? Object.freeze({ ...definition.fields })\n      : undefined,\n    model,\n  });\n}\n","import type { AthenaGatewayCondition, AthenaSortBy } from \"../gateway/types.ts\";\nimport {\n  type AthenaCacheContextDescriptor,\n  type AthenaQueryDescriptor,\n  compileAthenaQueryDescriptor,\n} from \"./descriptor.ts\";\nimport {\n  type AthenaReadQueryDefinition,\n  type AthenaReadQueryFilter,\n  type AthenaReadQueryOrder,\n  normalizeAthenaReadQueryOrderBy,\n} from \"./read-query.ts\";\n\nexport function descriptorFromReadQueryDefinition(\n  definition: AthenaReadQueryDefinition,\n  options?: {\n    context?: AthenaCacheContextDescriptor;\n    page?: number;\n    pageSize?: number;\n  }\n): AthenaQueryDescriptor {\n  const tableName = definition.schema\n    ? `${definition.schema}.${definition.table}`\n    : definition.table;\n  const orders = normalizeAthenaReadQueryOrderBy(definition.orderBy);\n  const primaryOrder = orders[0];\n  const order: AthenaSortBy | undefined = primaryOrder\n    ? {\n        direction:\n          primaryOrder.direction === \"desc\" ? \"descending\" : \"ascending\",\n        field: primaryOrder.column,\n      }\n    : undefined;\n  const conditions: AthenaGatewayCondition[] = (definition.filters ?? []).map(\n    (filter: AthenaReadQueryFilter) => ({\n      column: filter.column,\n      operator: filter.operator ?? \"eq\",\n      value: filter.value as AthenaGatewayCondition[\"value\"],\n    })\n  );\n\n  return compileAthenaQueryDescriptor({\n    conditions,\n    context: options?.context,\n    currentPage: options?.page,\n    limit: definition.limit,\n    offset: undefined,\n    operation: definition.mode === \"select\" ? \"select\" : \"findMany\",\n    order,\n    pageSize: options?.pageSize,\n    projection: definition.columns.map((column) => column.column),\n    tableName,\n  });\n}\n\nexport function readQueryDefinitionFromDescriptor(\n  descriptor: AthenaQueryDescriptor\n): AthenaReadQueryDefinition {\n  const identityColumn = descriptor.dependency.fields.find((field) =>\n    field.roles.includes(\"identity\")\n  )?.column;\n  const columns = descriptor.projection?.star\n    ? [{ column: \"*\", key: \"*\" }]\n    : (descriptor.projection?.columns ?? []).map((column) => ({\n        column,\n        key: column,\n      }));\n  const orderBy: AthenaReadQueryOrder[] | undefined = descriptor.order?.map(\n    (entry) => ({\n      column: entry.column,\n      direction: entry.ascending ? \"asc\" : \"desc\",\n    })\n  );\n\n  return {\n    columns: columns.length > 0 ? columns : [{ column: \"*\", key: \"*\" }],\n    countColumn: identityColumn ?? columns[0]?.column ?? \"id\",\n    filters: descriptor.filters?.map((filter) => ({\n      column: filter.column ?? \"\",\n      operator:\n        filter.operator === \"eq\" ||\n        filter.operator === \"neq\" ||\n        filter.operator === \"gt\" ||\n        filter.operator === \"gte\" ||\n        filter.operator === \"lt\" ||\n        filter.operator === \"lte\" ||\n        filter.operator === \"like\" ||\n        filter.operator === \"ilike\" ||\n        filter.operator === \"is\" ||\n        filter.operator === \"in\"\n          ? filter.operator\n          : \"eq\",\n      value: filter.value as AthenaReadQueryDefinition[\"filters\"] extends\n        | readonly (infer T)[]\n        | undefined\n        ? T extends { value: infer V }\n          ? V\n          : never\n        : never,\n    })),\n    limit: descriptor.range?.limit,\n    mode: descriptor.operation === \"select\" ? \"select\" : \"findMany\",\n    orderBy,\n    schema: descriptor.target.schema,\n    table: descriptor.target.table,\n  };\n}\n","/**\n * Portable Athena read-query definition and executor.\n *\n * Runs findMany / select page queries against `createClient().db` with\n * expression columns, display aliases, filters, order, and total-count handling.\n * UI hooks (pagination, dataProxy, TanStack) live in consumer packages such as\n * athena-auth-ui — this module is the SDK contract only.\n */\n\nimport {\n  type AthenaQueryDebugAst,\n  getAthenaDebugAst,\n} from \"../query-debug-ast.ts\";\n\nexport type AthenaReadQueryMode = \"findMany\" | \"select\";\n\nexport type AthenaReadQueryFilterOperator =\n  | \"eq\"\n  | \"gt\"\n  | \"gte\"\n  | \"ilike\"\n  | \"in\"\n  | \"is\"\n  | \"like\"\n  | \"lt\"\n  | \"lte\"\n  | \"neq\";\n\nexport type AthenaReadQueryOrderDirection = \"asc\" | \"desc\";\n\nexport interface AthenaReadQueryRelationRef {\n  name: string;\n  schema?: string;\n  table: string;\n}\n\n/**\n * One projected field: `column` is the Athena select expression (or base column),\n * `key` is the flat-row alias after execution.\n */\nexport interface AthenaReadQueryColumn {\n  column: string;\n  key: string;\n  label?: string;\n  relation?: AthenaReadQueryRelationRef;\n}\n\nexport type AthenaReadQueryFilterValue =\n  | boolean\n  | number\n  | null\n  | readonly (boolean | number | string | null)[]\n  | string;\n\nexport interface AthenaReadQueryFilter {\n  column: string;\n  operator?: AthenaReadQueryFilterOperator;\n  value: AthenaReadQueryFilterValue;\n}\n\nexport interface AthenaReadQueryOrder {\n  column: string;\n  direction?: AthenaReadQueryOrderDirection;\n}\n\nexport type AthenaReadQueryOrderByInput =\n  | AthenaReadQueryOrder\n  | readonly AthenaReadQueryOrder[];\n\n/**\n * Portable read definition shared by SDK callers, app data proxies, and UI hooks.\n */\nexport interface AthenaReadQueryDefinition {\n  columns: readonly AthenaReadQueryColumn[];\n  countColumn: string;\n  filters?: readonly AthenaReadQueryFilter[];\n  /**\n   * Optional max total rows to expose from the result set.\n   * Caps reported `totalItems` and shortens the last page under that window.\n   * Does **not** replace `pageSize` for per-request page sizing — those fight\n   * when both are applied as SQL LIMIT.\n   */\n  limit?: number;\n  mode?: AthenaReadQueryMode;\n  /** Single order or multi-column order list. */\n  orderBy?: AthenaReadQueryOrderByInput;\n  rowKey?: string;\n  schema?: string;\n  table: string;\n}\n\nexport function normalizeAthenaReadQueryOrderBy(\n  orderBy: AthenaReadQueryOrderByInput | undefined\n): AthenaReadQueryOrder[] {\n  if (!orderBy) {\n    return [];\n  }\n  const list = Array.isArray(orderBy) ? orderBy : [orderBy];\n  return list.filter(\n    (entry) =>\n      entry &&\n      typeof entry.column === \"string\" &&\n      entry.column.trim().length > 0\n  );\n}\n\nexport type AthenaReadQueryFlatRow = Record<string, unknown> & {\n  __rowKey: string;\n};\n\n/**\n * Narrow `db` surface used by portable read-query execution.\n * Does not depend on the public client façade type.\n */\nexport interface AthenaReadQueryBuilder {\n  currentPage: (page: number) => AthenaReadQueryBuilder;\n  findMany: (options: unknown) => Promise<{\n    count?: number | null;\n    data?: unknown;\n  }>;\n  order: (\n    column: string,\n    options: { ascending: boolean }\n  ) => AthenaReadQueryBuilder;\n  pageSize: (size: number) => AthenaReadQueryBuilder;\n  select: (\n    columns?: unknown,\n    options?: { count?: string; head?: boolean }\n  ) => Promise<{\n    count?: number | null;\n    data?: unknown;\n  }>;\n}\n\nexport interface AthenaReadQueryDb {\n  from: (\n    table: string,\n    options?: { schema?: string }\n  ) => AthenaReadQueryBuilder;\n}\n\n/** Minimal client shape: any `createClient()` result (or scoped view) with `.db`. */\nexport interface AthenaReadQueryClient {\n  readonly db: AthenaReadQueryDb;\n}\n\nexport interface AthenaReadQueryExecutionInput {\n  client: AthenaReadQueryClient;\n  page: number;\n  pageSize: number;\n  query: AthenaReadQueryDefinition;\n}\n\nexport interface AthenaReadQueryExecutionResult {\n  debugAst?: AthenaQueryDebugAst;\n  rows: AthenaReadQueryFlatRow[];\n  totalItems: number;\n}\n\ninterface AthenaSelectRelationNode {\n  schema?: string;\n  select: AthenaSelectShape;\n}\n\ntype AthenaSelectShape = Record<string, true | AthenaSelectRelationNode>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction flattenAthenaRowValue(\n  row: Record<string, unknown>,\n  column: AthenaReadQueryColumn\n) {\n  if (!column.relation) {\n    return row[column.column];\n  }\n\n  const relationValue = row[column.relation.name];\n\n  if (Array.isArray(relationValue)) {\n    return relationValue\n      .map((entry) => (isRecord(entry) ? entry[column.column] : undefined))\n      .filter((entry) => entry !== undefined);\n  }\n\n  if (isRecord(relationValue)) {\n    return relationValue[column.column];\n  }\n}\n\nfunction resolveFlatRowKey(\n  row: AthenaReadQueryFlatRow,\n  index: number,\n  preferredKey: string | undefined\n) {\n  const preferredValue =\n    preferredKey && preferredKey in row ? row[preferredKey] : undefined;\n\n  if (\n    preferredValue !== undefined &&\n    preferredValue !== null &&\n    `${preferredValue}`.trim().length > 0\n  ) {\n    return String(preferredValue);\n  }\n\n  for (const [key, value] of Object.entries(row)) {\n    if (key === \"__rowKey\") {\n      continue;\n    }\n\n    if (value === undefined || value === null) {\n      continue;\n    }\n\n    if (Array.isArray(value)) {\n      if (value.length > 0) {\n        return `${key}-${value.join(\"-\")}`;\n      }\n\n      continue;\n    }\n\n    const nextValue = String(value).trim();\n\n    if (nextValue.length > 0) {\n      return nextValue;\n    }\n  }\n\n  return `row-${index + 1}`;\n}\n\nexport function flattenAthenaReadQueryRows(\n  rows: readonly unknown[],\n  columns: readonly AthenaReadQueryColumn[],\n  preferredKey: string | undefined\n) {\n  return rows.map((entry, index) => {\n    const sourceRow = isRecord(entry) ? entry : {};\n    const flatRow = columns.reduce<AthenaReadQueryFlatRow>(\n      (currentRow, column) => {\n        currentRow[column.key] = flattenAthenaRowValue(sourceRow, column);\n        return currentRow;\n      },\n      { __rowKey: \"\" }\n    );\n\n    flatRow.__rowKey = resolveFlatRowKey(flatRow, index, preferredKey);\n\n    return flatRow;\n  });\n}\n\nexport function buildAthenaReadQuerySelectString(\n  columns: readonly AthenaReadQueryColumn[]\n) {\n  const baseColumns = columns\n    .filter((column) => !column.relation)\n    .map((column) => column.column);\n  const relationGroups = new Map<\n    string,\n    { columns: string[]; relation: AthenaReadQueryRelationRef }\n  >();\n\n  for (const column of columns) {\n    if (!column.relation) {\n      continue;\n    }\n\n    const groupKey = [\n      column.relation.name,\n      column.relation.schema ?? \"\",\n      column.relation.table,\n    ].join(\":\");\n    const existingGroup = relationGroups.get(groupKey);\n\n    if (existingGroup) {\n      if (!existingGroup.columns.includes(column.column)) {\n        existingGroup.columns.push(column.column);\n      }\n      continue;\n    }\n\n    relationGroups.set(groupKey, {\n      columns: [column.column],\n      relation: column.relation,\n    });\n  }\n\n  const relationColumns = [...relationGroups.values()].map(\n    ({ columns: relationColumns, relation }) => {\n      const relationTarget = relation.schema\n        ? `${relation.schema}.${relation.table}`\n        : relation.table;\n\n      return `${relation.name}:${relationTarget}(${relationColumns.join(\",\")})`;\n    }\n  );\n\n  return [...baseColumns, ...relationColumns].join(\",\");\n}\n\nexport function buildAthenaReadQueryFindManySelect(\n  columns: readonly AthenaReadQueryColumn[]\n) {\n  const select: AthenaSelectShape = {};\n\n  for (const column of columns) {\n    if (!column.relation) {\n      select[column.column] = true;\n      continue;\n    }\n\n    const existingRelation = select[column.relation.name];\n\n    if (\n      existingRelation &&\n      existingRelation !== true &&\n      isRecord(existingRelation.select)\n    ) {\n      existingRelation.select[column.column] = true;\n      continue;\n    }\n\n    select[column.relation.name] = {\n      ...(column.relation.schema ? { schema: column.relation.schema } : {}),\n      select: {\n        [column.column]: true,\n      },\n    };\n  }\n\n  return select;\n}\n\nexport function buildAthenaReadQueryFindManyWhere(\n  filters: readonly AthenaReadQueryFilter[] | undefined\n) {\n  if (!filters?.length) {\n    return;\n  }\n\n  return filters.reduce<Record<string, AthenaReadQueryFilterValue | object>>(\n    (where, filter) => {\n      const operator = filter.operator ?? \"eq\";\n\n      where[filter.column] =\n        operator === \"eq\" ? filter.value : { [operator]: filter.value };\n\n      return where;\n    },\n    {}\n  );\n}\n\n/**\n * Builds findMany `orderBy` in the Athena SDK object shape.\n * Single-order keeps the legacy `{ column, ascending }` form for back-compat.\n */\nexport function buildAthenaReadQueryFindManyOrderBy(\n  orderBy: AthenaReadQueryOrderByInput | undefined\n):\n  | Record<string, \"asc\" | \"desc\" | { ascending: boolean }>\n  | { ascending: boolean; column: string }\n  | undefined {\n  const normalized = normalizeAthenaReadQueryOrderBy(orderBy);\n  if (normalized.length === 0) {\n    return;\n  }\n\n  if (normalized.length === 1) {\n    const primary = normalized[0];\n    if (!primary) {\n      return;\n    }\n    return {\n      ascending: primary.direction !== \"desc\",\n      column: primary.column,\n    };\n  }\n\n  return Object.fromEntries(\n    normalized.map((entry) => [\n      entry.column,\n      entry.direction === \"desc\" ? \"desc\" : \"asc\",\n    ])\n  );\n}\n\nexport function applyAthenaReadQueryFilters<T extends object>(\n  queryBuilder: T,\n  filters: readonly AthenaReadQueryFilter[] | undefined\n) {\n  if (!filters?.length) {\n    return queryBuilder;\n  }\n\n  return filters.reduce<T>((currentBuilder, filter) => {\n    const operator = filter.operator ?? \"eq\";\n    const builderMethod = (currentBuilder as Record<string, unknown>)[operator];\n\n    if (typeof builderMethod !== \"function\") {\n      return currentBuilder;\n    }\n\n    return builderMethod.call(currentBuilder, filter.column, filter.value) as T;\n  }, queryBuilder);\n}\n\nexport function applyAthenaReadQuerySelectOrder<T extends object>(\n  queryBuilder: T,\n  orderBy: AthenaReadQueryOrderByInput | undefined\n): T {\n  const normalized = normalizeAthenaReadQueryOrderBy(orderBy);\n  if (normalized.length === 0) {\n    return queryBuilder;\n  }\n\n  return normalized.reduce((builder, entry) => {\n    const order = (\n      builder as {\n        order?: (column: string, options: { ascending: boolean }) => T;\n      }\n    ).order;\n    if (typeof order !== \"function\") {\n      return builder;\n    }\n    return order.call(builder, entry.column, {\n      ascending: entry.direction !== \"desc\",\n    });\n  }, queryBuilder);\n}\n\nexport function applyAthenaReadQuerySelectLimit<\n  T extends { limit: (value: number) => T },\n>(queryBuilder: T, limit: number | undefined) {\n  if (!limit || limit < 1) {\n    return queryBuilder;\n  }\n\n  return queryBuilder.limit(limit);\n}\n\nexport function clampAthenaReadQueryTotalItems(\n  totalItems: number,\n  limit: number | undefined\n) {\n  if (!limit || limit < 1) {\n    return totalItems;\n  }\n\n  return Math.min(totalItems, limit);\n}\n\nfunction resolveCountValue(\n  ...candidates: Array<number | null | undefined>\n): number {\n  for (const candidate of candidates) {\n    if (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n      return Math.max(0, Math.trunc(candidate));\n    }\n  }\n  return 0;\n}\n\nfunction resolveTotalItemsFromPage({\n  countCandidates,\n  limit,\n  page,\n  pageSize,\n  rowCount,\n}: {\n  countCandidates: Array<number | null | undefined>;\n  limit: number | undefined;\n  page: number;\n  pageSize: number;\n  rowCount: number;\n}) {\n  const exactCount = resolveCountValue(...countCandidates);\n  if (exactCount > 0) {\n    return clampAthenaReadQueryTotalItems(exactCount, limit);\n  }\n\n  // Prefer a synthetic total over \"0 results\" when the page has rows\n  // (count head failed or returned null while data succeeded).\n  if (rowCount > 0) {\n    const base = (page - 1) * pageSize + rowCount;\n    const synthetic = rowCount >= pageSize ? base + 1 : base;\n    return clampAthenaReadQueryTotalItems(synthetic, limit);\n  }\n\n  return clampAthenaReadQueryTotalItems(exactCount, limit);\n}\n\n/**\n * Resolves the page window for a paged read under an optional total-row cap.\n *\n * - `pageSize` owns the per-request fetch size.\n * - `query.limit` (when set) is a max total window, not a second LIMIT that\n *   overrides pageSize (which previously made the two controls fight).\n */\nexport function resolveAthenaReadQueryPageFetch({\n  page,\n  pageSize,\n  limit,\n}: {\n  page: number;\n  pageSize: number;\n  limit?: number;\n}): { page: number; pageSize: number; shouldFetch: boolean } {\n  const safePage = Math.max(1, Math.trunc(page) || 1);\n  const safePageSize = Math.max(1, Math.trunc(pageSize) || 1);\n\n  if (!limit || limit < 1) {\n    return { page: safePage, pageSize: safePageSize, shouldFetch: true };\n  }\n\n  const totalCap = Math.trunc(limit);\n  const offset = (safePage - 1) * safePageSize;\n\n  if (offset >= totalCap) {\n    return { page: safePage, pageSize: safePageSize, shouldFetch: false };\n  }\n\n  return {\n    page: safePage,\n    pageSize: Math.min(safePageSize, totalCap - offset),\n    shouldFetch: true,\n  };\n}\n\n/**\n * Execute a portable {@link AthenaReadQueryDefinition} against a v3 Athena client.\n *\n * Pass `createClient({ url, key })` or a `withContext` / session-scoped view.\n * Does not construct clients and does not perform HTTP proxy routing.\n */\nexport async function executeAthenaReadQuery({\n  client,\n  page,\n  pageSize,\n  query,\n}: AthenaReadQueryExecutionInput): Promise<AthenaReadQueryExecutionResult> {\n  const db = client.db;\n  const baseBuilder = db.from(query.table, {\n    schema: query.schema,\n  });\n  const countBuilder = applyAthenaReadQueryFilters(\n    db.from(query.table, { schema: query.schema }),\n    query.filters\n  );\n  const countResult = await countBuilder.select(query.countColumn, {\n    count: \"exact\",\n    head: true,\n  });\n\n  const pageFetch = resolveAthenaReadQueryPageFetch({\n    limit: query.limit,\n    page,\n    pageSize,\n  });\n\n  if (!pageFetch.shouldFetch) {\n    return {\n      rows: [],\n      totalItems: resolveTotalItemsFromPage({\n        countCandidates: [countResult.count],\n        limit: query.limit,\n        page: pageFetch.page,\n        pageSize,\n        rowCount: 0,\n      }),\n    };\n  }\n\n  if ((query.mode ?? \"findMany\") === \"select\") {\n    // Do not apply query.limit as builder.limit — pageSize owns the page LIMIT.\n    // query.limit only caps totalItems / shortens the last page via pageFetch.\n    const selectBuilder = applyAthenaReadQuerySelectOrder(\n      applyAthenaReadQueryFilters(baseBuilder, query.filters),\n      query.orderBy\n    );\n    const result = await selectBuilder\n      .currentPage(pageFetch.page)\n      .pageSize(pageFetch.pageSize)\n      .select(buildAthenaReadQuerySelectString(query.columns), {\n        count: \"exact\",\n      });\n    const rows = flattenAthenaReadQueryRows(\n      Array.isArray(result.data) ? result.data : [],\n      query.columns,\n      query.rowKey\n    );\n\n    return {\n      debugAst: getAthenaDebugAst(result) ?? undefined,\n      rows,\n      totalItems: resolveTotalItemsFromPage({\n        countCandidates: [countResult.count, result.count],\n        limit: query.limit,\n        page: pageFetch.page,\n        pageSize,\n        rowCount: rows.length,\n      }),\n    };\n  }\n\n  const findManyOrderBy = buildAthenaReadQueryFindManyOrderBy(query.orderBy);\n  // page/pageSize drive LIMIT/OFFSET. query.limit is a total-window cap only\n  // (see resolveAthenaReadQueryPageFetch) — never both as SQL limits.\n  const findManyOptions: Parameters<typeof baseBuilder.findMany>[0] = {\n    ...(findManyOrderBy ? { orderBy: findManyOrderBy } : {}),\n    select: buildAthenaReadQueryFindManySelect(query.columns) as never,\n    ...(query.filters?.length\n      ? { where: buildAthenaReadQueryFindManyWhere(query.filters) as never }\n      : {}),\n  };\n\n  const result = await baseBuilder\n    .currentPage(pageFetch.page)\n    .pageSize(pageFetch.pageSize)\n    .findMany(findManyOptions);\n  const rows = flattenAthenaReadQueryRows(\n    Array.isArray(result.data) ? result.data : [],\n    query.columns,\n    query.rowKey\n  );\n\n  return {\n    debugAst: getAthenaDebugAst(result) ?? undefined,\n    rows,\n    totalItems: resolveTotalItemsFromPage({\n      countCandidates: [countResult.count, result.count],\n      limit: query.limit,\n      page: pageFetch.page,\n      pageSize,\n      rowCount: rows.length,\n    }),\n  };\n}\n\nexport * from \"./read-query-compat.ts\";\n","/**\n * Deprecated table-oriented read-query names.\n *\n * The canonical implementation lives in `read-query.ts`; this module keeps\n * legacy public names as an explicit compatibility projection.\n */\n\nimport type {\n  AthenaReadQueryClient,\n  AthenaReadQueryColumn,\n  AthenaReadQueryDefinition,\n  AthenaReadQueryExecutionInput,\n  AthenaReadQueryExecutionResult,\n  AthenaReadQueryFilter,\n  AthenaReadQueryFilterOperator,\n  AthenaReadQueryFilterValue,\n  AthenaReadQueryFlatRow,\n  AthenaReadQueryMode,\n  AthenaReadQueryOrder,\n  AthenaReadQueryOrderByInput,\n  AthenaReadQueryOrderDirection,\n  AthenaReadQueryRelationRef,\n} from \"./read-query.ts\";\nimport {\n  applyAthenaReadQueryFilters,\n  applyAthenaReadQuerySelectLimit,\n  applyAthenaReadQuerySelectOrder,\n  buildAthenaReadQueryFindManyOrderBy,\n  buildAthenaReadQueryFindManySelect,\n  buildAthenaReadQueryFindManyWhere,\n  buildAthenaReadQuerySelectString,\n  clampAthenaReadQueryTotalItems,\n  executeAthenaReadQuery,\n  flattenAthenaReadQueryRows,\n  normalizeAthenaReadQueryOrderBy,\n} from \"./read-query.ts\";\n\n/** @deprecated Prefer {@link AthenaReadQueryMode}. */\nexport type AthenaTableQueryMode = AthenaReadQueryMode;\n/** @deprecated Prefer {@link AthenaReadQueryFilterOperator}. */\nexport type AthenaTableFilterOperator = AthenaReadQueryFilterOperator;\n/** @deprecated Prefer {@link AthenaReadQueryOrderDirection}. */\nexport type AthenaTableOrderDirection = AthenaReadQueryOrderDirection;\n/** @deprecated Prefer {@link AthenaReadQueryRelationRef}. */\nexport type AthenaTableRelationRef = AthenaReadQueryRelationRef;\n/** @deprecated Prefer {@link AthenaReadQueryColumn}. */\nexport type AthenaTableQueryColumn = AthenaReadQueryColumn;\n/** @deprecated Prefer {@link AthenaReadQueryFilterValue}. */\nexport type AthenaTableFilterValue = AthenaReadQueryFilterValue;\n/** @deprecated Prefer {@link AthenaReadQueryFilter}. */\nexport type AthenaTableFilter = AthenaReadQueryFilter;\n/** @deprecated Prefer {@link AthenaReadQueryOrder}. */\nexport type AthenaTableOrder = AthenaReadQueryOrder;\n/** @deprecated Prefer {@link AthenaReadQueryOrderByInput}. */\nexport type AthenaTableOrderByInput = AthenaReadQueryOrderByInput;\n/** @deprecated Prefer {@link AthenaReadQueryDefinition}. */\nexport type AthenaTableQueryDefinition = AthenaReadQueryDefinition;\n/** @deprecated Prefer {@link AthenaReadQueryFlatRow}. */\nexport type AthenaTableFlatRow = AthenaReadQueryFlatRow;\n/** @deprecated Prefer {@link AthenaReadQueryClient}. */\nexport type AthenaTableQueryClient = AthenaReadQueryClient;\n/** @deprecated Prefer {@link AthenaReadQueryExecutionInput}. */\nexport type AthenaTableQueryExecutionInput = AthenaReadQueryExecutionInput;\n/** @deprecated Prefer {@link AthenaReadQueryExecutionResult}. */\nexport type AthenaTableQueryExecutionResult = AthenaReadQueryExecutionResult;\n\n/** @deprecated Prefer {@link flattenAthenaReadQueryRows}. */\nexport const flattenAthenaRows = flattenAthenaReadQueryRows;\n/** @deprecated Prefer {@link buildAthenaReadQuerySelectString}. */\nexport const buildAthenaTableSelectString = buildAthenaReadQuerySelectString;\n/** @deprecated Prefer {@link buildAthenaReadQueryFindManySelect}. */\nexport const buildAthenaTableFindManySelect =\n  buildAthenaReadQueryFindManySelect;\n/** @deprecated Prefer {@link buildAthenaReadQueryFindManyWhere}. */\nexport const buildAthenaTableFindManyWhere = buildAthenaReadQueryFindManyWhere;\n/** @deprecated Prefer {@link buildAthenaReadQueryFindManyOrderBy}. */\nexport const buildAthenaTableFindManyOrderBy =\n  buildAthenaReadQueryFindManyOrderBy;\n/** @deprecated Prefer {@link normalizeAthenaReadQueryOrderBy}. */\nexport const normalizeAthenaTableOrderBy = normalizeAthenaReadQueryOrderBy;\n/** @deprecated Prefer {@link applyAthenaReadQueryFilters}. */\nexport const applyAthenaTableFilters = applyAthenaReadQueryFilters;\n/** @deprecated Prefer {@link applyAthenaReadQuerySelectOrder}. */\nexport const applyAthenaTableSelectOrder = applyAthenaReadQuerySelectOrder;\n/** @deprecated Prefer {@link applyAthenaReadQuerySelectLimit}. */\nexport const applyAthenaTableSelectLimit = applyAthenaReadQuerySelectLimit;\n/** @deprecated Prefer {@link clampAthenaReadQueryTotalItems}. */\nexport const clampAthenaTableTotalItems = clampAthenaReadQueryTotalItems;\n/** @deprecated Prefer {@link executeAthenaReadQuery}. */\nexport const executeAthenaTableQuery = executeAthenaReadQuery;\n","/**\n * Public read-query projection shared by the root and browser barrels.\n *\n * Canonical names and deprecated table names intentionally remain separate\n * inside this projection so runtime entrypoints converge without widening the\n * implementation module.\n */\n\nexport type {\n  AthenaReadQueryClient,\n  AthenaReadQueryColumn,\n  AthenaReadQueryDefinition,\n  AthenaReadQueryExecutionInput,\n  AthenaReadQueryExecutionResult,\n  AthenaReadQueryFilter,\n  AthenaReadQueryFilterOperator,\n  AthenaReadQueryFilterValue,\n  AthenaReadQueryFlatRow,\n  AthenaReadQueryMode,\n  AthenaReadQueryOrder,\n  AthenaReadQueryOrderByInput,\n  AthenaReadQueryOrderDirection,\n  AthenaReadQueryRelationRef,\n} from \"./read-query.ts\";\nexport {\n  applyAthenaReadQueryFilters,\n  applyAthenaReadQuerySelectLimit,\n  applyAthenaReadQuerySelectOrder,\n  buildAthenaReadQueryFindManyOrderBy,\n  buildAthenaReadQueryFindManySelect,\n  buildAthenaReadQueryFindManyWhere,\n  buildAthenaReadQuerySelectString,\n  clampAthenaReadQueryTotalItems,\n  executeAthenaReadQuery,\n  flattenAthenaReadQueryRows,\n  normalizeAthenaReadQueryOrderBy,\n  resolveAthenaReadQueryPageFetch,\n} from \"./read-query.ts\";\nexport type {\n  AthenaTableFilter,\n  AthenaTableFilterOperator,\n  AthenaTableFilterValue,\n  AthenaTableFlatRow,\n  AthenaTableOrder,\n  AthenaTableOrderByInput,\n  AthenaTableOrderDirection,\n  AthenaTableQueryClient,\n  AthenaTableQueryColumn,\n  AthenaTableQueryDefinition,\n  AthenaTableQueryExecutionInput,\n  AthenaTableQueryExecutionResult,\n  AthenaTableQueryMode,\n  AthenaTableRelationRef,\n} from \"./read-query-compat.ts\";\nexport {\n  applyAthenaTableFilters,\n  applyAthenaTableSelectLimit,\n  applyAthenaTableSelectOrder,\n  buildAthenaTableFindManyOrderBy,\n  buildAthenaTableFindManySelect,\n  buildAthenaTableFindManyWhere,\n  buildAthenaTableSelectString,\n  clampAthenaTableTotalItems,\n  executeAthenaTableQuery,\n  flattenAthenaRows,\n  normalizeAthenaTableOrderBy,\n} from \"./read-query-compat.ts\";\n","export {\n  type AthenaContractIssue,\n  AthenaContractParseError,\n  parseContractOrThrow,\n  safeParseContract,\n} from \"./parse.ts\";\nexport {\n  type AthenaAuthRuntime,\n  type AthenaChatTransport,\n  type AthenaDbTransport,\n  type AthenaRuntimeDiagnostics,\n  type AthenaRuntimeEnvironment,\n  type AthenaStorageTransport,\n  detectAthenaRuntimeEnvironment,\n  inferEmbeddedAuthMode,\n  type ResolveAthenaRuntimeOptions,\n  type ResolvedAthenaRuntime,\n  resolveAthenaRuntime,\n  resolveDatabaseUri,\n  toAthenaRuntimeDiagnostics,\n} from \"./resolve.ts\";\n\nexport {\n  athenaErrorBodySchema,\n  athenaErrorResponseSchema,\n  athenaTransportErrorCodeSchema,\n  cursorPageRequestSchema,\n  jsonObjectSchema,\n  jsonPrimitiveSchema,\n  jsonValueSchema,\n  offsetPageRequestSchema,\n  offsetPageSchema,\n  PaginationLimitPolicy,\n  pageSchema,\n  sequencePageRequestSchema,\n  sequencePageSchema,\n} from \"./schemas.ts\";\n","/**\n * Runtime parse helpers for contract schemas.\n */\n\nimport type { z } from \"zod\";\n\nexport interface AthenaContractIssue {\n  code: string;\n  message: string;\n  path: PropertyKey[];\n}\n\nexport class AthenaContractParseError extends Error {\n  readonly issues: AthenaContractIssue[];\n  readonly path: string;\n\n  constructor(\n    message: string,\n    issues: AthenaContractIssue[],\n    path = \"body\",\n    options?: { cause?: unknown }\n  ) {\n    super(message, options);\n    this.name = \"AthenaContractParseError\";\n    this.issues = issues;\n    this.path = path;\n  }\n}\n\nfunction toContractIssues(\n  issues: ReadonlyArray<{ code: string; message: string; path: PropertyKey[] }>\n): AthenaContractIssue[] {\n  return issues.map((issue) => ({\n    code: issue.code,\n    message: issue.message,\n    path: [...issue.path],\n  }));\n}\n\n/**\n * Parse unknown input with a Zod schema; throw {@link AthenaContractParseError} on failure.\n * Catches recursive-schema stack overflows (RangeError on cyclic input) and rethrows as\n * {@link AthenaContractParseError} so callers always get structured issues/path.\n */\nexport function parseContractOrThrow<TSchema extends z.ZodTypeAny>(\n  schema: TSchema,\n  input: unknown,\n  path = \"body\"\n): z.infer<TSchema> {\n  try {\n    const result = schema.safeParse(input);\n    if (!result.success) {\n      throw new AthenaContractParseError(\n        `Contract validation failed at ${path}`,\n        toContractIssues(result.error.issues),\n        path\n      );\n    }\n    return result.data;\n  } catch (err) {\n    if (err instanceof AthenaContractParseError) {\n      throw err;\n    }\n    // Recursive JSON schemas can stack-overflow on cyclic objects/arrays.\n    const message =\n      err instanceof RangeError\n        ? \"Cyclic or excessively nested value rejected by contract schema\"\n        : err instanceof Error\n          ? err.message\n          : \"Contract validation failed\";\n    throw new AthenaContractParseError(\n      `Contract validation failed at ${path}`,\n      [{ code: \"invalid_type\", message, path: [] }],\n      path,\n      { cause: err }\n    );\n  }\n}\n\n/**\n * Soft parse: returns `{ success, data }` or `{ success, error }` without throwing.\n * Never throws — including on cyclic inputs that cause Zod recursive schemas to\n * hit stack overflow (RangeError); those map to a single contract issue.\n */\nexport function safeParseContract<TSchema extends z.ZodTypeAny>(\n  schema: TSchema,\n  input: unknown\n):\n  | { success: true; data: z.infer<TSchema> }\n  | { success: false; error: { issues: AthenaContractIssue[] } } {\n  try {\n    const result = schema.safeParse(input);\n    if (result.success) {\n      return { data: result.data, success: true };\n    }\n    return {\n      error: { issues: toContractIssues(result.error.issues) },\n      success: false,\n    };\n  } catch (err) {\n    // Recursive JSON schemas can stack-overflow on cyclic objects/arrays.\n    const message =\n      err instanceof Error ? err.message : \"Contract validation failed\";\n    return {\n      error: {\n        issues: [\n          {\n            code: \"invalid_type\",\n            message:\n              err instanceof RangeError\n                ? \"Cyclic or excessively nested value rejected by contract schema\"\n                : message,\n            path: [],\n          },\n        ],\n      },\n      success: false,\n    };\n  }\n}\n","/**\n * Zod schemas for v1 contracts (JSON, pagination, error envelopes).\n */\n\nimport { z } from \"zod\";\nimport type { JsonObject, JsonValue } from \"../contracts/v1/common.ts\";\nimport { AthenaTransportErrorCode } from \"../contracts/v1/errors.ts\";\nimport { PaginationLimitPolicy } from \"../contracts/v1/pagination.ts\";\n\nexport const jsonPrimitiveSchema = z.union([\n  z.string(),\n  z.number(),\n  z.boolean(),\n  z.null(),\n]);\n\n/** Recursive JSON value; output type matches public {@link JsonValue}. */\nexport const jsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n  z.union([\n    jsonPrimitiveSchema,\n    z.array(jsonValueSchema),\n    z.record(z.string(), jsonValueSchema),\n  ])\n);\n\n/** JSON object map; output type matches public {@link JsonObject}. */\nexport const jsonObjectSchema: z.ZodType<JsonObject> = z.record(\n  z.string(),\n  jsonValueSchema\n);\n\nexport const athenaTransportErrorCodeSchema = z.enum([\n  AthenaTransportErrorCode.ValidationError,\n  AthenaTransportErrorCode.AuthenticationRequired,\n  AthenaTransportErrorCode.Forbidden,\n  AthenaTransportErrorCode.NotFound,\n  AthenaTransportErrorCode.Conflict,\n  AthenaTransportErrorCode.RateLimited,\n  AthenaTransportErrorCode.Transient,\n  AthenaTransportErrorCode.Internal,\n]);\n\n/**\n * Strict error body: unknown keys (e.g. drifted `request_id`) fail validation\n * instead of being stripped. `details` remains an open JsonObject bag.\n */\nexport const athenaErrorBodySchema = z\n  .object({\n    code: athenaTransportErrorCodeSchema,\n    details: jsonObjectSchema.optional(),\n    message: z.string(),\n    requestId: z.string().optional(),\n    retryable: z.boolean(),\n  })\n  .strict();\n\n/** Strict outer envelope: only the `error` key is allowed. */\nexport const athenaErrorResponseSchema = z\n  .object({\n    error: athenaErrorBodySchema,\n  })\n  .strict();\n\n/**\n * Cursor page request schema. Pass a cursor schema when the endpoint uses a\n * non-string cursor (e.g. numeric IDs); defaults to opaque string cursors.\n */\nexport function cursorPageRequestSchema<C extends z.ZodTypeAny = z.ZodString>(\n  cursorSchema: C = z.string() as unknown as C\n) {\n  return z.object({\n    cursor: z.union([cursorSchema, z.null()]).optional(),\n    limit: z.number().int().positive().optional(),\n  });\n}\n\nexport const offsetPageRequestSchema = z.object({\n  currentPage: z.number().int().positive().optional(),\n  // nonnegative so AUTH_LIST_USERS empty/count-only requests (limit 0) validate\n  // after clampPaginationLimit(0, \"AUTH_LIST_USERS\") — aligns with policy minLimit 0.\n  limit: z.number().int().nonnegative().optional(),\n  offset: z.number().int().nonnegative().optional(),\n  pageSize: z.number().int().positive().optional(),\n});\n\n/** Sequence page request schema (`beforeSeq` + `limit`). */\nexport const sequencePageRequestSchema = z.object({\n  beforeSeq: z.union([z.number().int(), z.null()]).optional(),\n  limit: z.number().int().positive().optional(),\n});\n\n/**\n * Cursor page result schema. Second argument selects the cursor wire type so\n * runtime validation matches {@link Page} / `mapLimitPlusOneToPage` generics.\n */\nexport function pageSchema<\n  T extends z.ZodTypeAny,\n  C extends z.ZodTypeAny = z.ZodString,\n>(itemSchema: T, cursorSchema: C = z.string() as unknown as C) {\n  return z.object({\n    hasMore: z.boolean(),\n    items: z.array(itemSchema),\n    nextCursor: z.union([cursorSchema, z.null()]),\n  });\n}\n\nexport function offsetPageSchema<T extends z.ZodTypeAny>(itemSchema: T) {\n  return z.object({\n    hasMore: z.boolean(),\n    items: z.array(itemSchema),\n    limit: z.number().int().nonnegative(),\n    offset: z.number().int().nonnegative(),\n    total: z.number().int().nonnegative().optional(),\n  });\n}\n\nexport function sequencePageSchema<T extends z.ZodTypeAny>(itemSchema: T) {\n  return z.object({\n    hasMore: z.boolean(),\n    items: z.array(itemSchema),\n    nextBeforeSeq: z.union([z.number().int(), z.null()]),\n  });\n}\n\nexport { PaginationLimitPolicy };\n","export {\n  defineDatabase,\n  defineModel,\n  defineRegistry,\n  defineSchema,\n} from \"./definitions.ts\";\nexport type {\n  AthenaSchemaSnapshot,\n  DiffSchemasInput,\n  DiffSchemasOptions,\n  SchemaColumn,\n  SchemaColumnType,\n  SchemaDiff,\n  SchemaDiffErrorCode,\n  SchemaDiffOperation,\n  SchemaDiffOperationKind,\n  SchemaDiffSummary,\n  SchemaForeignKey,\n  SchemaIndex,\n  SchemaNamespace,\n  SchemaPrimaryKey,\n  SchemaReferentialAction,\n  SchemaSnapshotFromIntrospectionOptions,\n  SchemaSnapshotFromModelsOptions,\n  SchemaTable,\n  SchemaTableIdentity,\n  SchemaUniqueConstraint,\n} from \"./diff/index.ts\";\n// Canonical schema snapshot + structured schema diff (library API)\nexport {\n  ATHENA_INTERNAL_SCHEMAS,\n  ATHENA_SCHEMA_SNAPSHOT_VERSION,\n  columnsEqual,\n  columnTypesEqual,\n  diffSchemas,\n  emptySchemaSnapshot,\n  isSchemaDiffEmpty,\n  normalizeDefaultExpression,\n  normalizeReferentialAction,\n  normalizeSchemaColumnType,\n  normalizeSchemaSnapshot,\n  parseSchemaTypeString,\n  primaryKeysEqual,\n  SchemaDiffError,\n  schemaSnapshotFromIntrospection,\n  schemaSnapshotFromModels,\n  summarizeSchemaDiffOperations,\n  tableIdentityKey,\n  validateSchemaSnapshot,\n} from \"./diff/index.ts\";\nexport type {\n  AthenaSchemaIr,\n  NativeTypeDescriptor,\n  PostgresIntervalQualifier,\n  SchemaConstraint,\n  SchemaDatabase,\n  SchemaEnum,\n  SchemaMetadata,\n  SchemaObjectId,\n  SchemaObjectIdentity,\n  SchemaRelation,\n  SchemaType,\n} from \"./ir/index.ts\";\nexport {\n  ATHENA_SCHEMA_IR_KIND,\n  ATHENA_SCHEMA_IR_VERSION,\n  canonicalizeAthenaSchemaIr,\n  fingerprintAthenaSchemaIr,\n  SchemaIrError,\n  schemaIrFromIntrospection,\n  schemaIrFromModels,\n  schemaIrFromSnapshot,\n  schemaIrFromTable,\n  schemaSnapshotFromIr,\n  validateAthenaSchemaIr,\n} from \"./ir/index.ts\";\nexport type {\n  FormValuesOf,\n  ModelFormAdapter,\n  ModelFormDefaults,\n  ModelFormNullishMode,\n  ModelFormValues,\n  ToModelFormDefaultsOptions,\n  ToModelPayloadOptions,\n} from \"./model-form.ts\";\nexport {\n  createModelFormAdapter,\n  toModelFormDefaults,\n  toModelPayload,\n} from \"./model-form.ts\";\nexport type {\n  ModelSqlDialect,\n  ModelSqlFile,\n  ModelSqlInput,\n  ModelSqlOptions,\n  ModelsToSqlFilesOptions,\n} from \"./model-sql.ts\";\nexport {\n  collectModelsFromSqlInput,\n  modelsToSql,\n  modelsToSqlFiles,\n  sqlD1,\n  sqlPostgres,\n  sqlSqlite,\n} from \"./model-sql.ts\";\nexport type { PostgresIntrospectionProviderOptions } from \"./postgres-provider.ts\";\nexport { createPostgresIntrospectionProvider } from \"./postgres-provider.ts\";\nexport type {\n  AthenaResolvedResource,\n  AthenaResourceIdentity,\n  AthenaResourceInput,\n  AthenaResourceKind,\n  AthenaResourceLookup,\n  AthenaResourceRef,\n} from \"./resource.ts\";\nexport {\n  athenaResourceKeys,\n  authResourceIdentity,\n  canonicalAthenaResource,\n  canonicalAthenaResourceIdentity,\n  matchAthenaResource,\n  normalizeAthenaResourceRef,\n  parseAthenaResourceRef,\n  relationResourceIdentity,\n  resolveAthenaResourceFromPayload,\n  resolvedAthenaResource,\n  serviceResourceIdentity,\n  storageObjectResourceIdentity,\n} from \"./resource.ts\";\nexport type {\n  AthenaTableDef,\n  FormValuesFromColumns,\n  InsertFromColumns,\n  RowFromColumns,\n  UpdateFromColumns,\n} from \"./table-builder.ts\";\nexport { table } from \"./table-builder.ts\";\nexport type {\n  AnyColumnBuilder,\n  AthenaColumnBuilder,\n  AthenaIdentityColumnBuilder,\n  AthenaLegacyNumberColumnBuilder,\n  ColumnRuntimeConfig,\n  DecimalColumnOptions,\n} from \"./table-columns.ts\";\nexport {\n  boolean,\n  bigint,\n  decimal,\n  enumeration,\n  integer,\n  json,\n  number,\n  numeric,\n  smallint,\n  string,\n} from \"./table-columns.ts\";\nexport type { AthenaTableSchemaBundle } from \"./table-schemas.ts\";\nexport type {\n  AthenaClientModelForTableName,\n  AthenaClientModelsInput,\n  AthenaClientTableName,\n  AthenaModelTarget,\n  DatabaseDef,\n  InsertOf,\n  IntrospectionColumn,\n  IntrospectionInspectOptions,\n  IntrospectionRelation,\n  IntrospectionSchema,\n  IntrospectionSnapshot,\n  IntrospectionTable,\n  IntrospectionTypeKind,\n  ModelAt,\n  ModelColumnGenerationStrategy,\n  ModelColumnKind,\n  ModelColumnMetadata,\n  ModelDef,\n  ModelMetadata,\n  ModelRelationKind,\n  ModelRelationMetadata,\n  RegistryDef,\n  RowOf,\n  SchemaDef,\n  SchemaIntrospectionProvider,\n  TenantContext,\n  TenantContextValue,\n  TenantKeyMap,\n  UpdateOf,\n} from \"./types.ts\";\n","import type {\n  AnyModelDef,\n  DatabaseDef,\n  ModelDef,\n  ModelMetadata,\n  RegistryDef,\n  SchemaDef,\n} from \"./types.ts\";\n\n/**\n * @deprecated Prefer `table(...).schema(...).columns(...).primaryKey(...)` for\n * new model contracts. `defineModel(...)` is retained for legacy compatibility,\n * manual low-level contracts, and legacy generator output.\n *\n * Declares a model contract with explicit metadata and typed row/insert/update shapes.\n */\nexport function defineModel<\n  Row = Record<string, unknown>,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  Meta extends ModelMetadata<NoInfer<Row>> = ModelMetadata<Row>,\n>(input: { meta: Meta }): ModelDef<Row, Insert, Update, Meta> {\n  return input;\n}\n\n/**\n * Declares a schema-level model map.\n */\nexport function defineSchema<Models extends Record<string, AnyModelDef>>(\n  models: Models\n): SchemaDef<Models> {\n  return { models };\n}\n\n/**\n * Declares a database-level schema map.\n */\nexport function defineDatabase<\n  Schemas extends Record<string, SchemaDef<Record<string, AnyModelDef>>>,\n>(schemas: Schemas): DatabaseDef<Schemas> {\n  return { schemas };\n}\n\n/**\n * Declares a top-level multi-database registry.\n */\nexport function defineRegistry<\n  Databases extends Record<\n    string,\n    DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>\n  >,\n>(databases: Databases): RegistryDef<Databases> {\n  return databases;\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 { 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 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 * 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","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","/** 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","/**\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","/**\n * Emit dialect SQL (CREATE TABLE) from AthenaModels / registries.\n *\n * - {@link sqlPostgres} — schema-qualified Postgres DDL\n * - {@link sqlD1} — bare-table SQLite/D1 DDL (same physical names edge uses)\n * - {@link modelsToSqlFiles} — in-memory `.sql` descriptors (no I/O)\n * - Node: {@link writeModelSqlFiles} in `./model-sql-write.ts`\n */\n\nimport { quoteQualifiedIdentifier } from \"../sql-identifiers.ts\";\nimport { isAthenaModelTarget } from \"./model-target.ts\";\nimport type { NativeTypeDescriptor } from \"./ir/type.ts\";\nimport type {\n  AnyModelDef,\n  ModelColumnDefault,\n  ModelColumnGenerationStrategy,\n  ModelColumnKind,\n  ModelColumnMetadata,\n  ModelMetadataBase,\n} from \"./types.ts\";\n\nexport type ModelSqlDialect = \"postgres\" | \"d1\" | \"sqlite\";\n\nconst POSTGRES_IDENTITY_NATIVE_TYPES = new Set([\n  \"bigint\",\n  \"int8\",\n  \"int2\",\n  \"int4\",\n  \"integer\",\n  \"smallint\",\n]);\n\n/**\n * Anything that can yield one or more models: a single model, list, schema,\n * database, registry, or flat model map.\n */\nexport type ModelSqlInput =\n  | AnyModelDef\n  | readonly AnyModelDef[]\n  | Record<string, unknown>;\n\nexport interface ModelSqlOptions {\n  /**\n   * Emit `CREATE SCHEMA IF NOT EXISTS` for distinct Postgres schemas.\n   * Default: `true` for postgres, ignored for D1/SQLite.\n   */\n  createSchema?: boolean;\n  /** `CREATE TABLE IF NOT EXISTS`. Default: true. */\n  ifNotExists?: boolean;\n  /** Prefix each table with `DROP TABLE IF EXISTS …;`. Default: false. */\n  includeDrop?: boolean;\n}\n\nexport interface ModelSqlFile {\n  readonly content: string;\n  readonly dialect: ModelSqlDialect;\n  /** Relative filename suggestion, e.g. `d1/public/users.sql`. */\n  readonly filename: string;\n  readonly key: string;\n}\n\nexport interface ModelsToSqlFilesOptions extends ModelSqlOptions {\n  /**\n   * Dialects to emit. Default: `[\"postgres\", \"d1\"]`.\n   * `sqlite` is an alias of `d1` content with a `sqlite/` path prefix.\n   */\n  dialects?: readonly ModelSqlDialect[];\n  /**\n   * When true (default), emit one file per table per dialect.\n   * When false, emit one combined script per dialect (`postgres/all.sql`, …).\n   */\n  perTable?: boolean;\n}\n\ninterface ResolvedColumn {\n  defaultValue: ModelColumnDefault;\n  enumValues?: readonly string[];\n  hasDefault: boolean;\n  identity?: \"always\" | \"by-default\";\n  isGenerated: boolean;\n  generationStrategy: ModelColumnGenerationStrategy;\n  kind: ModelColumnKind;\n  nativeType?: NativeTypeDescriptor;\n  /** Authoring key; kept when `name` is remapped to a physical identifier. */\n  logicalName: string;\n  /** Physical column name after `.from(...)` / `columnName`. */\n  name: string;\n  nullable: boolean;\n  precision?: number;\n  scale?: number;\n}\n\ninterface ResolvedTable {\n  columns: ResolvedColumn[];\n  key: string;\n  model: AnyModelDef;\n  primaryKey: string[];\n  schemaName?: string;\n  tableName: string;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction quoteIdent(name: string): string {\n  return quoteQualifiedIdentifier(name);\n}\n\nfunction resolvePhysicalNames(meta: ModelMetadataBase): {\n  schemaName?: string;\n  tableName: string;\n  key: string;\n} {\n  const explicit = meta.tableName?.trim();\n  if (explicit) {\n    const firstDot = explicit.indexOf(\".\");\n    if (firstDot > 0 && firstDot === explicit.lastIndexOf(\".\")) {\n      const schemaName = explicit.slice(0, firstDot).trim();\n      const tableName = explicit.slice(firstDot + 1).trim();\n      if (schemaName && tableName) {\n        return {\n          key: `${schemaName}.${tableName}`,\n          schemaName,\n          tableName,\n        };\n      }\n    }\n    return { key: explicit, tableName: explicit };\n  }\n\n  const tableName = (meta.model ?? \"\").trim();\n  if (!tableName) {\n    throw new Error(\n      \"Model is missing meta.model or meta.tableName; cannot emit SQL\"\n    );\n  }\n  const schemaName = meta.schema?.trim() || undefined;\n  return {\n    key: schemaName ? `${schemaName}.${tableName}` : tableName,\n    schemaName,\n    tableName,\n  };\n}\n\nfunction resolveGenerationStrategy(\n  logicalName: string,\n  column: ModelColumnMetadata | undefined\n): ModelColumnGenerationStrategy {\n  if (column?.generationStrategy !== undefined) {\n    const strategy = column.generationStrategy;\n    if (\n      column.identity !== undefined &&\n      (strategy.kind !== \"identity\" || column.identity !== strategy.mode)\n    ) {\n      throw new Error(\n        `Column \"${logicalName}\" has contradictory generation strategy metadata`\n      );\n    }\n    if (\n      column.isGenerated !== undefined &&\n      column.isGenerated !== (strategy.kind === \"generated-always\")\n    ) {\n      if (strategy.kind === \"identity\" && column.isGenerated) {\n        throw new Error(\n          `PostgreSQL identity column \"${logicalName}\" cannot also be marked as generated`\n        );\n      }\n      throw new Error(\n        `Column \"${logicalName}\" has contradictory generation strategy metadata`\n      );\n    }\n    return strategy;\n  }\n\n  const legacyStrategy: ModelColumnGenerationStrategy =\n    column?.identity !== undefined\n      ? { kind: \"identity\", mode: column.identity }\n      : column?.isGenerated === true\n        ? { kind: \"generated-always\" }\n        : { kind: \"none\" };\n  if (\n    legacyStrategy.kind === \"identity\" &&\n    column?.isGenerated === true\n  ) {\n    throw new Error(\n      `PostgreSQL identity column \"${logicalName}\" cannot also be marked as generated`\n    );\n  }\n  return legacyStrategy;\n}\n\nfunction resolveColumnDefault(\n  logicalName: string,\n  column: ModelColumnMetadata | undefined,\n  generationStrategy: ModelColumnGenerationStrategy\n): ModelColumnDefault {\n  if (generationStrategy.kind === \"identity\") {\n    if (column?.default !== undefined && column.default.kind !== \"none\") {\n      throw new Error(\n        `Identity column \"${logicalName}\" cannot also define an explicit default`\n      );\n    }\n    return { kind: \"none\" };\n  }\n  if (column?.default !== undefined) {\n    return column.default;\n  }\n  return column?.hasDefault === true ? { kind: \"unknown\" } : { kind: \"none\" };\n}\n\nfunction resolveColumns(meta: ModelMetadataBase): ResolvedColumn[] {\n  const columnMeta = meta.columns ?? {};\n  const keys = Object.keys(columnMeta);\n  if (keys.length === 0) {\n    // Legacy defineModel without column metadata: PK-only stub columns.\n    return meta.primaryKey.map((name) => ({\n      defaultValue: { kind: \"none\" as const },\n      generationStrategy: { kind: \"none\" as const },\n      hasDefault: false,\n      identity: undefined,\n      isGenerated: false,\n      kind: \"string\" as const,\n      logicalName: name,\n      name,\n      nullable: false,\n    }));\n  }\n\n  const columns = keys.map((logicalName) => {\n    const col = columnMeta[logicalName] as ModelColumnMetadata | undefined;\n    const generationStrategy = resolveGenerationStrategy(logicalName, col);\n    const identity =\n      generationStrategy.kind === \"identity\"\n        ? generationStrategy.mode\n        : undefined;\n    const isGenerated = generationStrategy.kind === \"generated-always\";\n    if (\n      identity !== undefined &&\n      (!col ||\n        (col.kind !== \"smallint\" &&\n          col.kind !== \"integer\" &&\n          col.kind !== \"bigint\" &&\n          col.kind !== \"number\"))\n    ) {\n      throw new Error(\n        `PostgreSQL identity column \"${logicalName}\" must use an integer builder (legacy number() is also supported); received kind \"${col?.kind ?? \"unknown\"}\"`\n      );\n    }\n    if (identity !== undefined && isGenerated) {\n      throw new Error(\n        `PostgreSQL identity column \"${logicalName}\" cannot also be marked as generated`\n      );\n    }\n    const physical = col?.columnName?.trim() || logicalName;\n    const nullable =\n      col?.nullable === true || meta.nullable?.[logicalName] === true;\n    if (identity !== undefined && nullable) {\n      throw new Error(\n        `PostgreSQL identity column \"${logicalName}\" must be non-nullable`\n      );\n    }\n    if (\n      !nullable &&\n      col?.default?.kind === \"literal\" &&\n      col.default.value === null\n    ) {\n      throw new Error(\n        `Column \"${logicalName}\" has a literal null default but is non-nullable`\n      );\n    }\n    return {\n      defaultValue: resolveColumnDefault(\n        logicalName,\n        col,\n        generationStrategy\n      ),\n      enumValues: col?.enumValues,\n      generationStrategy,\n      hasDefault: col?.hasDefault === true,\n      ...(identity === undefined ? {} : { identity }),\n      isGenerated,\n      kind: col?.kind ?? \"string\",\n      logicalName,\n      name: physical,\n      ...(col?.nativeType === undefined ? {} : { nativeType: col.nativeType }),\n      nullable,\n      ...(col?.precision === undefined ? {} : { precision: col.precision }),\n      ...(col?.scale === undefined ? {} : { scale: col.scale }),\n    };\n  });\n\n  const physicalOwners = new Map<string, string>();\n  for (const column of columns) {\n    const previousLogicalName = physicalOwners.get(column.name);\n    if (previousLogicalName !== undefined && previousLogicalName !== column.logicalName) {\n      throw new Error(\n        `Logical columns \"${previousLogicalName}\" and \"${column.logicalName}\" map to the same physical column \"${column.name}\"`\n      );\n    }\n\n    physicalOwners.set(column.name, column.logicalName);\n  }\n\n  return columns;\n}\n\nfunction resolvePrimaryKey(\n  logicalPrimaryKey: readonly string[],\n  columns: readonly ResolvedColumn[]\n): string[] {\n  const physicalPrimaryKey = logicalPrimaryKey.map((logicalName) => {\n    const column = columns.find((candidate) => candidate.logicalName === logicalName);\n    if (column === undefined) {\n      throw new Error(\n        `Primary key logical column \"${logicalName}\" does not exist in model columns`\n      );\n    }\n    return column.name;\n  });\n\n  const seen = new Set<string>();\n  for (const physicalName of physicalPrimaryKey) {\n    if (seen.has(physicalName)) {\n      throw new Error(\n        `Primary key logical columns map to the same physical column \"${physicalName}\"`\n      );\n    }\n    seen.add(physicalName);\n  }\n\n  return physicalPrimaryKey;\n}\n\nfunction resolveTable(model: AnyModelDef): ResolvedTable {\n  const meta = model.meta;\n  const names = resolvePhysicalNames(meta);\n  const columns = resolveColumns(meta);\n  return {\n    columns,\n    key: names.key,\n    model,\n    primaryKey: resolvePrimaryKey(meta.primaryKey, columns),\n    schemaName: names.schemaName,\n    tableName: names.tableName,\n  };\n}\n\n/**\n * Walk registries / schema maps and collect models with stable keys.\n */\nexport function collectModelsFromSqlInput(\n  input: ModelSqlInput\n): ResolvedTable[] {\n  const seen = new Set<AnyModelDef>();\n  const out: ResolvedTable[] = [];\n\n  const visit = (value: unknown): void => {\n    if (value === null) {\n      return;\n    }\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        visit(item);\n      }\n      return;\n    }\n    if (isAthenaModelTarget(value)) {\n      if (seen.has(value as AnyModelDef)) {\n        return;\n      }\n      seen.add(value as AnyModelDef);\n      out.push(resolveTable(value as AnyModelDef));\n      return;\n    }\n    if (!isPlainObject(value)) {\n      return;\n    }\n\n    // SchemaDef: { models: { users: model } }\n    if (isPlainObject(value.models)) {\n      for (const model of Object.values(value.models)) {\n        visit(model);\n      }\n      return;\n    }\n\n    // DatabaseDef: { schemas: { public: { models } } }\n    if (isPlainObject(value.schemas)) {\n      for (const schema of Object.values(value.schemas)) {\n        visit(schema);\n      }\n      return;\n    }\n\n    // Registry or flat map: recurse values\n    for (const child of Object.values(value)) {\n      if (isAthenaModelTarget(child)) {\n        visit(child);\n        continue;\n      }\n      if (isPlainObject(child) && (\"models\" in child || \"schemas\" in child)) {\n        visit(child);\n        continue;\n      }\n      if (isPlainObject(child)) {\n        const childValues = Object.values(child);\n        if (\n          childValues.length > 0 &&\n          childValues.every((entry) => isAthenaModelTarget(entry))\n        ) {\n          for (const entry of childValues) {\n            visit(entry);\n          }\n        }\n      }\n    }\n  };\n\n  visit(input);\n\n  if (out.length === 0) {\n    throw new Error(\n      \"No AthenaModels found in sql input. Pass a model, model list, schema, database, or registry.\"\n    );\n  }\n\n  out.sort((a, b) => a.key.localeCompare(b.key));\n  return out;\n}\n\nfunction formatNumericSqlType(column: ResolvedColumn): string {\n  if (\n    typeof column.precision === \"number\" &&\n    typeof column.scale === \"number\"\n  ) {\n    return `NUMERIC(${column.precision}, ${column.scale})`;\n  }\n\n  if (typeof column.precision === \"number\") {\n    return `NUMERIC(${column.precision})`;\n  }\n  return \"NUMERIC\";\n}\n\nfunction formatNativePostgresType(\n  nativeType: NativeTypeDescriptor\n): string | undefined {\n  if (nativeType.backend !== \"postgresql\") {\n    return;\n  }\n\n  const rawName = nativeType.name.trim();\n  const name =\n    nativeType.arrayDimensions > 0 && rawName.startsWith(\"_\")\n      ? rawName.slice(1)\n      : rawName;\n  const normalizedName = name.toLowerCase().replace(/\\s+/g, \" \");\n  const datetimeTypmod = normalizedName.match(\n    /^(interval|timestamp|timestamptz|time|timetz)\\s*\\((\\d+)\\)(\\s+(?:with|without)\\s+time\\s+zone)?$/\n  );\n  const normalizedBaseName = datetimeTypmod\n    ? `${datetimeTypmod[1]}${datetimeTypmod[3] ?? \"\"}`.trim()\n    : normalizedName;\n  const inlineDatetimePrecision = datetimeTypmod\n    ? Number(datetimeTypmod[2])\n    : undefined;\n  const baseType =\n    {\n      bool: \"BOOLEAN\",\n      boolean: \"BOOLEAN\",\n      bpchar: \"CHAR\",\n      char: \"CHAR\",\n      \"character varying\": \"VARCHAR\",\n      decimal: \"NUMERIC\",\n      bit: \"BIT\",\n      varbit: \"VARBIT\",\n      \"bit varying\": \"VARBIT\",\n      float4: \"REAL\",\n      float8: \"DOUBLE PRECISION\",\n      bigint: \"BIGINT\",\n      int2: \"SMALLINT\",\n      int4: \"INTEGER\",\n      int8: \"BIGINT\",\n      integer: \"INTEGER\",\n      numeric: \"NUMERIC\",\n      real: \"REAL\",\n      smallint: \"SMALLINT\",\n      text: \"TEXT\",\n      varchar: \"VARCHAR\",\n      interval: \"INTERVAL\",\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    }[normalizedBaseName] ?? quoteQualifiedIdentifier(name);\n\n  let typeSql = baseType;\n  if (normalizedBaseName === \"interval\" && nativeType.intervalQualifier) {\n    const qualifier = nativeType.intervalQualifier.toUpperCase();\n    const precision =\n      typeof nativeType.precision === \"number\" &&\n      nativeType.intervalQualifier.endsWith(\"second\")\n        ? `(${nativeType.precision})`\n        : \"\";\n    typeSql = `INTERVAL ${qualifier}${precision}`;\n  } else if (\n    normalizedName === \"char\" ||\n    normalizedName === \"bpchar\" ||\n    normalizedName === \"varchar\" ||\n    normalizedName === \"bit\" ||\n    normalizedName === \"varbit\" ||\n    normalizedName === \"bit varying\"\n  ) {\n    if (typeof nativeType.length === \"number\") {\n      typeSql = `${baseType}(${nativeType.length})`;\n    }\n  } else if (normalizedName === \"numeric\" || normalizedName === \"decimal\") {\n    if (\n      typeof nativeType.precision === \"number\" &&\n      typeof nativeType.scale === \"number\"\n    ) {\n      typeSql = `${baseType}(${nativeType.precision}, ${nativeType.scale})`;\n    } else if (typeof nativeType.precision === \"number\") {\n      typeSql = `${baseType}(${nativeType.precision})`;\n    }\n  } else if (\n    normalizedBaseName === \"interval\" ||\n    normalizedBaseName === \"time\" ||\n    normalizedBaseName === \"time without time zone\" ||\n    normalizedBaseName === \"time with time zone\" ||\n    normalizedBaseName === \"timestamp\" ||\n    normalizedBaseName === \"timestamp without time zone\" ||\n    normalizedBaseName === \"timestamp with time zone\" ||\n    normalizedBaseName === \"timestamptz\" ||\n    normalizedBaseName === \"timetz\"\n  ) {\n    const precision = nativeType.precision ?? inlineDatetimePrecision;\n    if (typeof precision === \"number\") {\n      typeSql = `${baseType}(${precision})`;\n    }\n  }\n\n  return `${typeSql}${\"[]\".repeat(nativeType.arrayDimensions)}`;\n}\n\nfunction sqlTypePostgres(\n  column: ResolvedColumn,\n  isSoleGeneratedPk: boolean\n): string {\n  if (\n    column.identity !== undefined &&\n    column.nativeType !== undefined &&\n    (column.nativeType.arrayDimensions !== 0 ||\n      column.nativeType.backend !== \"postgresql\" ||\n      !POSTGRES_IDENTITY_NATIVE_TYPES.has(\n        column.nativeType.name.trim().toLowerCase()\n      ))\n  ) {\n    throw new Error(\n      `PostgreSQL identity column \"${column.name}\" must use a scalar zero-dimensional integer native type`\n    );\n  }\n  if (isSoleGeneratedPk) {\n    if (column.kind === \"smallint\") {\n      return \"SMALLSERIAL\";\n    }\n    if (column.kind === \"integer\") {\n      return \"SERIAL\";\n    }\n    if (column.kind === \"bigint\" || column.kind === \"number\") {\n      return \"BIGSERIAL\";\n    }\n  }\n  if (column.identity !== undefined && column.kind === \"number\") {\n    const nativeType = column.nativeType\n      ? formatNativePostgresType(column.nativeType)\n      : undefined;\n    if (nativeType !== undefined) {\n      return nativeType;\n    }\n    return \"BIGINT\";\n  }\n  const nativeType = column.nativeType\n    ? formatNativePostgresType(column.nativeType)\n    : undefined;\n  if (nativeType !== undefined) {\n    return nativeType;\n  }\n  switch (column.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      return formatNumericSqlType(column);\n    case \"json\":\n      return \"JSONB\";\n    default:\n      return \"TEXT\";\n  }\n}\n\nfunction sqlTypeD1(column: ResolvedColumn, isSoleGeneratedPk: boolean): string {\n  if (column.identity !== undefined) {\n    throw new Error(\n      `D1 does not support identity columns (column \"${column.name}\")`\n    );\n  }\n  if (isSoleGeneratedPk && column.kind === \"bigint\") {\n    throw new Error(\n      \"D1 cannot generate bigint primary keys without lossless decoding\"\n    );\n  }\n  if (\n    isSoleGeneratedPk &&\n    (column.kind === \"number\" ||\n      column.kind === \"smallint\" ||\n      column.kind === \"integer\" ||\n      column.kind === \"bigint\")\n  ) {\n    return \"INTEGER\";\n  }\n  switch (column.kind) {\n    case \"boolean\":\n      return \"INTEGER\";\n    case \"number\":\n      return \"REAL\";\n    case \"smallint\":\n    case \"integer\":\n      return \"INTEGER\";\n    case \"bigint\":\n      // D1 returns INTEGER values without column-aware decoding. TEXT keeps\n      // bigint rows lossless, matching the precision-safe decimal strategy.\n      return \"TEXT\";\n    case \"decimal\":\n      // SQLite/D1 has no exact NUMERIC — store as TEXT for precision safety.\n      return \"TEXT\";\n    case \"json\":\n      return \"TEXT\";\n    default:\n      return \"TEXT\";\n  }\n}\n\nfunction isSerialType(typeSql: string): boolean {\n  return (\n    typeSql === \"SMALLSERIAL\" || typeSql === \"SERIAL\" || typeSql === \"BIGSERIAL\"\n  );\n}\n\nfunction renderColumnDefault(\n  column: ResolvedColumn,\n  dialect: ModelSqlDialect\n): string | undefined {\n  switch (column.defaultValue.kind) {\n    case \"none\":\n      return;\n    case \"unknown\":\n      throw new Error(\n        `Cannot emit ${dialect} SQL for column \"${column.logicalName}\": unknown database default`\n      );\n    case \"literal\": {\n      const value = column.defaultValue.value;\n      if (value === null) {\n        return \"NULL\";\n      }\n      if (typeof value === \"string\") {\n        return `'${value.replaceAll(\"'\", \"''\")}'`;\n      }\n      if (typeof value === \"number\") {\n        if (!Number.isFinite(value)) {\n          throw new Error(\n            `Cannot emit ${dialect} SQL for column \"${column.logicalName}\": default number must be finite`\n          );\n        }\n        return String(value);\n      }\n      return value ? \"TRUE\" : \"FALSE\";\n    }\n    case \"sql\": {\n      const expectedDialect = dialect === \"postgres\" ? \"postgres\" : \"sqlite\";\n      const actualDialect =\n        column.defaultValue.dialect === \"d1\"\n          ? \"sqlite\"\n          : column.defaultValue.dialect;\n      const expression = column.defaultValue.expression.trim();\n      if (!expression) {\n        throw new Error(\n          `Cannot emit ${dialect} SQL for column \"${column.logicalName}\": default expression is empty`\n        );\n      }\n      if (actualDialect !== expectedDialect) {\n        throw new Error(\n          `Cannot emit ${dialect} SQL for column \"${column.logicalName}\": default belongs to ${column.defaultValue.dialect}`\n        );\n      }\n      return expression;\n    }\n  }\n}\n\nfunction isAutoIncrementGeneratedColumn(column: ResolvedColumn): boolean {\n  return (\n    column.isGenerated &&\n    column.generationStrategy.kind === \"generated-always\" &&\n    column.defaultValue.kind === \"none\"\n  );\n}\n\nfunction enumCheck(column: ResolvedColumn): string | undefined {\n  if (column.kind !== \"enumeration\" || !column.enumValues?.length) {\n    return;\n  }\n\n  const list = column.enumValues\n    .map((value) => `'${String(value).replace(/'/g, \"''\")}'`)\n    .join(\", \");\n  return `CHECK (${quoteIdent(column.name)} IN (${list}))`;\n}\n\nfunction renderCreateTable(\n  table: ResolvedTable,\n  dialect: ModelSqlDialect,\n  options: Required<Pick<ModelSqlOptions, \"ifNotExists\" | \"includeDrop\">> & {\n    createSchema: boolean;\n  }\n): string {\n  const isPostgres = dialect === \"postgres\";\n  const bareTable = table.tableName;\n  const qualified =\n    isPostgres && table.schemaName\n      ? `${table.schemaName}.${bareTable}`\n      : bareTable;\n  const tableSql = quoteIdent(qualified);\n\n  const pkSet = new Set(table.primaryKey);\n  if (\n    dialect === \"d1\" &&\n    table.primaryKey.some((primaryKeyColumn) =>\n      table.columns.some(\n        (column) =>\n          column.name === primaryKeyColumn &&\n          column.isGenerated &&\n          !isAutoIncrementGeneratedColumn(column)\n      )\n    )\n  ) {\n    throw new Error(\n      \"D1 does not support generated columns in primary keys\"\n    );\n  }\n  const solePk =\n    table.primaryKey.length === 1 ? table.primaryKey[0] : undefined;\n  const soleAutoIncrementPkCol =\n    solePk === undefined\n      ? undefined\n      : table.columns.find(\n          (column) =>\n            column.name === solePk &&\n            isAutoIncrementGeneratedColumn(column) &&\n            (column.kind === \"number\" ||\n              column.kind === \"smallint\" ||\n              column.kind === \"integer\" ||\n              column.kind === \"bigint\")\n        );\n\n  const lines: string[] = [];\n\n  if (options.includeDrop) {\n    lines.push(`DROP TABLE IF EXISTS ${tableSql};`);\n  }\n\n  if (isPostgres && options.createSchema && table.schemaName) {\n    lines.push(`CREATE SCHEMA IF NOT EXISTS ${quoteIdent(table.schemaName)};`);\n  }\n\n  const ifNotExists = options.ifNotExists ? \"IF NOT EXISTS \" : \"\";\n  const columnLines: string[] = [];\n  const tableChecks: string[] = [];\n\n  for (const column of table.columns) {\n    const isSoleGeneratedPk =\n      soleAutoIncrementPkCol !== undefined &&\n      column.name === soleAutoIncrementPkCol.name;\n    const typeSql = isPostgres\n      ? sqlTypePostgres(column, isSoleGeneratedPk)\n      : sqlTypeD1(column, isSoleGeneratedPk);\n\n    let line = `  ${quoteIdent(column.name)} ${typeSql}`;\n    if (isPostgres && column.identity) {\n      line += ` GENERATED ${column.identity === \"always\" ? \"ALWAYS\" : \"BY DEFAULT\"} AS IDENTITY`;\n    }\n    const defaultSql = renderColumnDefault(column, dialect);\n    if (column.isGenerated && defaultSql !== undefined) {\n      line += ` GENERATED ALWAYS AS (${defaultSql}) STORED`;\n    } else if (defaultSql !== undefined) {\n      line += ` DEFAULT ${defaultSql}`;\n    }\n\n    if (isSoleGeneratedPk && !isPostgres) {\n      line += \" PRIMARY KEY AUTOINCREMENT\";\n    } else if (isSoleGeneratedPk && isPostgres && isSerialType(typeSql)) {\n      line += \" PRIMARY KEY\";\n    } else {\n      if (\n        column.identity ||\n        !column.nullable\n      ) {\n        line += \" NOT NULL\";\n      }\n      if (\n        table.primaryKey.length === 1 &&\n        pkSet.has(column.name) &&\n        !isSoleGeneratedPk\n      ) {\n        line += \" PRIMARY KEY\";\n      }\n    }\n\n    columnLines.push(line);\n\n    const check = enumCheck(column);\n    if (check) {\n      tableChecks.push(`  ${check}`);\n    }\n  }\n\n  if (table.primaryKey.length > 1) {\n    const pkCols = table.primaryKey.map((name) => quoteIdent(name)).join(\", \");\n    columnLines.push(`  PRIMARY KEY (${pkCols})`);\n  }\n\n  const body = [...columnLines, ...tableChecks].join(\",\\n\");\n  lines.push(`CREATE TABLE ${ifNotExists}${tableSql} (\\n${body}\\n);`);\n  return lines.join(\"\\n\");\n}\n\nfunction normalizeOptions(\n  options?: ModelSqlOptions\n): Required<\n  Pick<ModelSqlOptions, \"ifNotExists\" | \"includeDrop\" | \"createSchema\">\n> {\n  return {\n    createSchema: options?.createSchema !== false,\n    ifNotExists: options?.ifNotExists !== false,\n    includeDrop: options?.includeDrop === true,\n  };\n}\n\nfunction emitForDialect(\n  tables: ResolvedTable[],\n  dialect: ModelSqlDialect,\n  options?: ModelSqlOptions\n): string {\n  const normalized = normalizeOptions(options);\n  const effective: ModelSqlDialect =\n    dialect === \"sqlite\" ? \"d1\" : dialect === \"postgres\" ? \"postgres\" : \"d1\";\n  const parts: string[] = [];\n  const header =\n    effective === \"postgres\"\n      ? \"-- Generated by @xylex-group/athena from AthenaModels (PostgreSQL)\"\n      : \"-- Generated by @xylex-group/athena from AthenaModels (D1/SQLite)\";\n  parts.push(header);\n\n  if (effective === \"postgres\" && normalized.createSchema) {\n    const schemas = [\n      ...new Set(\n        tables\n          .map((table) => table.schemaName)\n          .filter((schema): schema is string => Boolean(schema))\n      ),\n    ].sort();\n    for (const schema of schemas) {\n      parts.push(`CREATE SCHEMA IF NOT EXISTS ${quoteIdent(schema)};`);\n    }\n    normalized.createSchema = false;\n  }\n\n  for (const table of tables) {\n    parts.push(renderCreateTable(table, effective, normalized));\n  }\n  return `${parts.join(\"\\n\\n\")}\\n`;\n}\n\n/**\n * PostgreSQL DDL for one or more AthenaModels (schema-qualified when meta has schema).\n */\nexport function sqlPostgres(\n  input: ModelSqlInput,\n  options?: ModelSqlOptions\n): string {\n  return emitForDialect(collectModelsFromSqlInput(input), \"postgres\", options);\n}\n\n/**\n * D1/SQLite DDL for one or more AthenaModels (bare table names — edge drop-in).\n */\nexport function sqlD1(input: ModelSqlInput, options?: ModelSqlOptions): string {\n  return emitForDialect(collectModelsFromSqlInput(input), \"d1\", options);\n}\n\n/**\n * SQLite DDL alias of {@link sqlD1} (same SQL; useful for non-Cloudflare SQLite).\n */\nexport function sqlSqlite(\n  input: ModelSqlInput,\n  options?: ModelSqlOptions\n): string {\n  return emitForDialect(collectModelsFromSqlInput(input), \"sqlite\", options);\n}\n\n/**\n * Dialect-generic entry: `modelsToSql(models, \"postgres\" | \"d1\" | \"sqlite\")`.\n */\nexport function modelsToSql(\n  input: ModelSqlInput,\n  dialect: ModelSqlDialect,\n  options?: ModelSqlOptions\n): string {\n  return emitForDialect(collectModelsFromSqlInput(input), dialect, options);\n}\n\nfunction filenameForTable(\n  dialect: ModelSqlDialect,\n  key: string,\n  perTable: boolean\n): string {\n  const folder = dialect;\n  if (!perTable) {\n    return `${folder}/all.sql`;\n  }\n  // public.users → public/users.sql ; users → users.sql\n  const safe = key\n    .split(\".\")\n    .map((segment) => segment.replace(/[^\\w.-]+/g, \"_\"))\n    .join(\"/\");\n  return `${folder}/${safe}.sql`;\n}\n\n/**\n * Build in-memory `.sql` file descriptors (no I/O).\n */\nexport function modelsToSqlFiles(\n  input: ModelSqlInput,\n  options?: ModelsToSqlFilesOptions\n): ModelSqlFile[] {\n  const tables = collectModelsFromSqlInput(input);\n  const dialects = options?.dialects ?? ([\"postgres\", \"d1\"] as const);\n  const perTable = options?.perTable !== false;\n  const files: ModelSqlFile[] = [];\n\n  for (const dialect of dialects) {\n    if (perTable) {\n      for (const table of tables) {\n        const content = emitForDialect([table], dialect, options);\n        files.push({\n          content,\n          dialect,\n          filename: filenameForTable(dialect, table.key, true),\n          key: table.key,\n        });\n      }\n    } else {\n      const content = emitForDialect(tables, dialect, options);\n      files.push({\n        content,\n        dialect,\n        filename: filenameForTable(dialect, \"all\", false),\n        key: \"all\",\n      });\n    }\n  }\n\n  return files;\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","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","/**\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 {\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","import {\n  schemaIrFromModels,\n  schemaSnapshotFromIr,\n} from \"../ir/compatibility.ts\";\nimport type { AthenaSchemaIr } from \"../ir/document.ts\";\nimport type { ModelSqlInput } from \"../model-sql.ts\";\nimport { normalizeSchemaSnapshot } from \"./normalize.ts\";\nimport type { AthenaSchemaSnapshot } from \"./types.ts\";\n\nexport interface SchemaSnapshotFromModelsOptions {\n  /** Backend label stored on the snapshot (default `postgresql`). */\n  readonly backend?: string | null;\n  /** Default schema when model metadata omits schema (default `public`). */\n  readonly defaultSchema?: string;\n}\n\n/**\n * Public structural emit is {@link AthenaSchemaIr} via {@link schemaIrFromModels}.\n * This helper remains the lossy v1 compatibility projection.\n */\nexport function schemaSnapshotFromModels(\n  input: ModelSqlInput,\n  options: SchemaSnapshotFromModelsOptions = {}\n): AthenaSchemaSnapshot {\n  const ir: AthenaSchemaIr = schemaIrFromModels(input, options);\n  return normalizeSchemaSnapshot(schemaSnapshotFromIr(ir));\n}\n","import type { AnyModelDef, InsertOf, RowOf, UpdateOf } from \"./types.ts\";\n\ntype ModelValueRecord = Record<string, unknown>;\n\nexport type ModelFormNullishMode = \"empty-string\" | \"undefined\" | \"null\";\n\ninterface NullishValueByMode {\n  \"empty-string\": \"\";\n  null: null;\n  undefined: undefined;\n}\n\ntype MapNullableToFormValue<\n  TField,\n  TMode extends ModelFormNullishMode,\n> = null extends TField\n  ? Exclude<TField, null> | NullishValueByMode[TMode]\n  : TField;\n\n/**\n * Form value shape derived from a model insert payload.\n * Nullable fields are remapped to the selected nullish representation.\n */\nexport type ModelFormValues<\n  TModel extends AnyModelDef,\n  TMode extends ModelFormNullishMode = \"empty-string\",\n> = {\n  [K in keyof InsertOf<TModel>]: MapNullableToFormValue<\n    InsertOf<TModel>[K],\n    TMode\n  >;\n};\n\n/**\n * Alias for deriving form value types from any model contract.\n */\nexport type FormValuesOf<\n  TModel extends AnyModelDef,\n  TMode extends ModelFormNullishMode = \"empty-string\",\n> = ModelFormValues<TModel, TMode>;\n\n/**\n * Default value shape for form initialization.\n */\nexport type ModelFormDefaults<\n  TModel extends AnyModelDef,\n  TMode extends ModelFormNullishMode = \"empty-string\",\n> = Partial<ModelFormValues<TModel, TMode>>;\n\nexport interface ToModelFormDefaultsOptions<\n  TMode extends ModelFormNullishMode = \"empty-string\",\n> {\n  /**\n   * Controls how nullable model values are represented in form defaults.\n   * - `empty-string` (default): `null -> \"\"`\n   * - `undefined`: `null -> undefined`\n   * - `null`: keeps `null`\n   */\n  nullishMode?: TMode;\n}\n\nexport interface ToModelPayloadOptions {\n  /**\n   * Converts `\"\"` into `null` for nullable model fields.\n   * Defaults to `true`.\n   */\n  emptyStringAsNull?: boolean;\n  /**\n   * Omits `undefined` keys from the outgoing payload.\n   * Defaults to `true`.\n   */\n  stripUndefined?: boolean;\n}\n\nfunction resolveNullishValue(\n  mode: ModelFormNullishMode\n): \"\" | undefined | null {\n  if (mode === \"undefined\") {\n    return;\n  }\n  if (mode === \"null\") {\n    return null;\n  }\n  return \"\";\n}\n\nfunction isRecord(value: unknown): value is ModelValueRecord {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isNullableColumn(model: AnyModelDef, key: string): boolean {\n  const nullable = model.meta.nullable as\n    | Partial<Record<string, boolean>>\n    | undefined;\n  return nullable?.[key] === true;\n}\n\n/**\n * Normalizes model data into form-safe defaults using model nullability metadata.\n */\nexport function toModelFormDefaults<\n  TModel extends AnyModelDef,\n  TMode extends ModelFormNullishMode = \"empty-string\",\n>(\n  model: TModel,\n  values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\n  options?: ToModelFormDefaultsOptions<TMode>\n): ModelFormDefaults<TModel, TMode> {\n  const source = values as ModelValueRecord | null | undefined;\n  if (!isRecord(source)) {\n    return {} as ModelFormDefaults<TModel, TMode>;\n  }\n\n  const mode = options?.nullishMode ?? (\"empty-string\" as TMode);\n  const nullishValue = resolveNullishValue(mode);\n  const result: ModelValueRecord = {};\n\n  for (const [key, value] of Object.entries(source)) {\n    if (value === null && isNullableColumn(model, key)) {\n      result[key] = nullishValue;\n      continue;\n    }\n    result[key] = value;\n  }\n\n  return result as ModelFormDefaults<TModel, TMode>;\n}\n\n/**\n * Normalizes form values back into model-compatible insert/update payloads.\n */\nexport function toModelPayload<TModel extends AnyModelDef>(\n  model: TModel,\n  formValues: Partial<\n    ModelFormValues<TModel, \"empty-string\" | \"undefined\" | \"null\">\n  >,\n  options?: ToModelPayloadOptions\n): Partial<InsertOf<TModel>> {\n  const emptyStringAsNull = options?.emptyStringAsNull ?? true;\n  const stripUndefined = options?.stripUndefined ?? true;\n  const result: ModelValueRecord = {};\n\n  for (const [key, rawValue] of Object.entries(\n    formValues as ModelValueRecord\n  )) {\n    if (rawValue === undefined && stripUndefined) {\n      continue;\n    }\n\n    if (emptyStringAsNull && rawValue === \"\" && isNullableColumn(model, key)) {\n      result[key] = null;\n      continue;\n    }\n\n    result[key] = rawValue;\n  }\n\n  return result as Partial<InsertOf<TModel>>;\n}\n\n/**\n * Runtime form adapter bound to a model contract.\n */\nexport interface ModelFormAdapter<TModel extends AnyModelDef> {\n  model: TModel;\n  toDefaults: <TMode extends ModelFormNullishMode = \"empty-string\">(\n    values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\n    options?: ToModelFormDefaultsOptions<TMode>\n  ) => ModelFormDefaults<TModel, TMode>;\n  toInsert: (\n    values: Partial<\n      ModelFormValues<TModel, \"empty-string\" | \"undefined\" | \"null\">\n    >,\n    options?: ToModelPayloadOptions\n  ) => Partial<InsertOf<TModel>>;\n  toUpdate: (\n    values: Partial<\n      ModelFormValues<TModel, \"empty-string\" | \"undefined\" | \"null\">\n    >,\n    options?: ToModelPayloadOptions\n  ) => Partial<UpdateOf<TModel>>;\n}\n\n/**\n * Creates a small model-aware adapter for form defaults and payload normalization.\n */\nexport function createModelFormAdapter<TModel extends AnyModelDef>(\n  model: TModel\n): ModelFormAdapter<TModel> {\n  return {\n    model,\n    toDefaults(values, options) {\n      return toModelFormDefaults(model, values, options);\n    },\n    toInsert(values, options) {\n      return toModelPayload(model, values, options) as Partial<\n        InsertOf<TModel>\n      >;\n    },\n    toUpdate(values, options) {\n      return toModelPayload(model, values, options) as Partial<\n        UpdateOf<TModel>\n      >;\n    },\n  };\n}\n","import { schemaIrFromModels } from \"./ir/compatibility.ts\";\nimport type { AthenaSchemaIr } from \"./ir/document.ts\";\nimport type { ModelFormNullishMode, ModelFormValues } from \"./model-form.ts\";\nimport {\n  type AnyColumnBuilder,\n  type AthenaColumnBuilder,\n  type COLUMN_CONFIG,\n  getColumnConfig,\n  isColumnBuilder,\n} from \"./table-columns.ts\";\nimport {\n  type AthenaTableSchemaBundle,\n  buildTableSchemaBundle,\n} from \"./table-schemas.ts\";\nimport type {\n  AnyModelDef,\n  ModelColumnMetadata,\n  ModelDef,\n  ModelMetadata,\n} from \"./types.ts\";\n\ntype Simplify<T> = { [K in keyof T]: T[K] } & {};\ntype ExtractColumnConfig<TColumn extends AnyColumnBuilder> =\n  TColumn[typeof COLUMN_CONFIG];\ntype ColumnValue<TColumn extends AnyColumnBuilder> =\n  ExtractColumnConfig<TColumn> extends { __value?: infer TValue }\n    ? TValue\n    : never;\ntype ColumnNullable<TColumn extends AnyColumnBuilder> =\n  ExtractColumnConfig<TColumn> extends {\n    nullable: infer TNullable extends boolean;\n  }\n    ? TNullable\n    : never;\ntype ColumnHasDefault<TColumn extends AnyColumnBuilder> =\n  ExtractColumnConfig<TColumn> extends {\n    hasDefault: infer THasDefault extends boolean;\n  }\n    ? THasDefault\n    : never;\ntype ColumnGenerated<TColumn extends AnyColumnBuilder> =\n  ExtractColumnConfig<TColumn> extends {\n    isGenerated: infer TGenerated extends boolean;\n  }\n    ? TGenerated\n    : never;\ntype ColumnIdentity<TColumn extends AnyColumnBuilder> =\n  ExtractColumnConfig<TColumn> extends {\n    identity?: infer TIdentity;\n  }\n    ? TIdentity\n    : never;\ntype ColumnIsAlwaysIdentity<TColumn extends AnyColumnBuilder> =\n  ColumnIdentity<TColumn> extends \"always\" ? true : false;\n\ntype RowFieldType<TColumn extends AnyColumnBuilder> =\n  ColumnNullable<TColumn> extends true\n    ? ColumnValue<TColumn> | null\n    : ColumnValue<TColumn>;\n\ntype WritableColumnKeys<TColumns extends Record<string, AnyColumnBuilder>> =\n  Extract<\n    {\n      [K in keyof TColumns]-?: ColumnGenerated<TColumns[K]> extends true\n        ? never\n        : ColumnIsAlwaysIdentity<TColumns[K]> extends true\n        ? never\n        : K;\n    }[keyof TColumns],\n    string\n  >;\n\ntype InsertRequiredKeys<TColumns extends Record<string, AnyColumnBuilder>> =\n  Extract<\n    {\n      [K in keyof TColumns]-?: ColumnGenerated<TColumns[K]> extends true\n        ? never\n        : ColumnIdentity<TColumns[K]> extends \"always\"\n          ? never\n        : ColumnHasDefault<TColumns[K]> extends true\n          ? never\n          : ColumnNullable<TColumns[K]> extends true\n            ? never\n            : K;\n    }[keyof TColumns],\n    string\n  >;\n\ntype InsertOptionalKeys<TColumns extends Record<string, AnyColumnBuilder>> =\n  Exclude<WritableColumnKeys<TColumns>, InsertRequiredKeys<TColumns>>;\n\ntype ExtractMappedSchemaName<TMappedName extends string | undefined> =\n  TMappedName extends `${infer TSchema}.${string}` ? TSchema : undefined;\n\ntype ExtractMappedTableName<TMappedName extends string | undefined> =\n  TMappedName extends `${string}.${infer TTable}`\n    ? TTable\n    : TMappedName extends string\n      ? TMappedName\n      : undefined;\n\ntype ResolvedSchemaName<\n  TSchemaName extends string | undefined,\n  TMappedName extends string | undefined,\n> = TSchemaName extends string\n  ? TSchemaName\n  : ExtractMappedSchemaName<TMappedName>;\n\ntype ResolvedTableName<\n  TName extends string,\n  TMappedName extends string | undefined,\n> =\n  ExtractMappedTableName<TMappedName> extends string\n    ? ExtractMappedTableName<TMappedName>\n    : TName;\n\ntype QualifiedTableName<\n  TName extends string,\n  TMappedName extends string | undefined,\n  TSchemaName extends string | undefined,\n> =\n  ResolvedSchemaName<\n    TSchemaName,\n    TMappedName\n  > extends infer TResolvedSchema extends string | undefined\n    ? TResolvedSchema extends string\n      ? `${TResolvedSchema}.${ResolvedTableName<TName, TMappedName>}`\n      : ResolvedTableName<TName, TMappedName>\n    : never;\n\nexport type RowFromColumns<TColumns extends Record<string, AnyColumnBuilder>> =\n  Simplify<{\n    [K in keyof TColumns]: RowFieldType<TColumns[K]>;\n  }>;\n\nexport type InsertFromColumns<\n  TColumns extends Record<string, AnyColumnBuilder>,\n> = Simplify<\n  {\n    [K in InsertRequiredKeys<TColumns>]: ColumnValue<TColumns[K]>;\n  } & {\n    [K in InsertOptionalKeys<TColumns>]?: RowFieldType<TColumns[K]>;\n  }\n>;\n\nexport type UpdateFromColumns<\n  TColumns extends Record<string, AnyColumnBuilder>,\n> = Simplify<{\n  [K in WritableColumnKeys<TColumns>]?: RowFieldType<TColumns[K]>;\n}>;\n\nexport type FormValuesFromColumns<\n  TColumns extends Record<string, AnyColumnBuilder>,\n  TMode extends ModelFormNullishMode = \"empty-string\",\n> = ModelFormValues<AthenaTableDef<TColumns>, TMode>;\n\nexport interface AthenaTableDef<\n  TColumns extends Record<string, AnyColumnBuilder>,\n  TName extends string = string,\n  TMappedName extends string | undefined = undefined,\n  TSchemaName extends string | undefined = undefined,\n> extends ModelDef<\n    RowFromColumns<TColumns>,\n    InsertFromColumns<TColumns>,\n    UpdateFromColumns<TColumns>,\n    ModelMetadata<RowFromColumns<TColumns>>\n  > {\n  readonly columns: Readonly<TColumns>;\n  /** Canonical Schema IR v2 document derived from this table. */\n  readonly ir: AthenaSchemaIr;\n  readonly kind: \"table\";\n  readonly mappedName: TMappedName;\n  readonly name: TName;\n  readonly qualifiedName: QualifiedTableName<TName, TMappedName, TSchemaName>;\n  readonly schemaName: ResolvedSchemaName<TSchemaName, TMappedName>;\n  readonly schemas: AthenaTableSchemaBundle<\n    RowFromColumns<TColumns>,\n    InsertFromColumns<TColumns>,\n    UpdateFromColumns<TColumns>\n  >;\n  readonly tableName: ResolvedTableName<TName, TMappedName>;\n}\n\ninterface AthenaTableBuilder<\n  TName extends string,\n  TMappedName extends string | undefined = undefined,\n  TSchemaName extends string | undefined = undefined,\n> {\n  columns: <TColumns extends Record<string, AnyColumnBuilder>>(\n    columns: TColumns\n  ) => AthenaTableColumnsBuilder<TName, TMappedName, TSchemaName, TColumns>;\n  from: <TNextMappedName extends string>(\n    tableName: TNextMappedName\n  ) => AthenaTableBuilder<TName, TNextMappedName, TSchemaName>;\n  readonly mappedName: TMappedName;\n  readonly name: TName;\n  schema: <TNextSchemaName extends string>(\n    schemaName: TNextSchemaName\n  ) => AthenaTableBuilder<TName, TMappedName, TNextSchemaName>;\n  readonly schemaName: TSchemaName;\n}\n\ninterface AthenaTableColumnsBuilder<\n  TName extends string,\n  TMappedName extends string | undefined,\n  TSchemaName extends string | undefined,\n  TColumns extends Record<string, AnyColumnBuilder>,\n> {\n  readonly columns: Readonly<TColumns>;\n  from: <TNextMappedName extends string>(\n    tableName: TNextMappedName\n  ) => AthenaTableColumnsBuilder<TName, TNextMappedName, TSchemaName, TColumns>;\n  readonly mappedName: TMappedName;\n  readonly name: TName;\n  primaryKey(): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>;\n  primaryKey<\n    TPrimaryKey extends readonly [\n      Extract<keyof TColumns, string>,\n      ...Extract<keyof TColumns, string>[],\n    ],\n  >(\n    ...keys: TPrimaryKey\n  ): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>;\n  schema: <TNextSchemaName extends string>(\n    schemaName: TNextSchemaName\n  ) => AthenaTableColumnsBuilder<TName, TMappedName, TNextSchemaName, TColumns>;\n  readonly schemaName: TSchemaName;\n  withoutPrimaryKey: () => AthenaTableDef<\n    TColumns,\n    TName,\n    TMappedName,\n    TSchemaName\n  >;\n}\n\nfunction assertColumnRecord(columns: Record<string, AnyColumnBuilder>): void {\n  for (const [columnName, column] of Object.entries(columns)) {\n    if (!isColumnBuilder(column)) {\n      throw new Error(`Invalid column definition for \"${columnName}\"`);\n    }\n  }\n}\n\nfunction normalizeMappedNameInput(mappedName: string): string {\n  const normalized = mappedName.trim();\n  if (!normalized) {\n    throw new Error(\"table.from() requires a non-empty table name\");\n  }\n  return normalized;\n}\n\nfunction normalizeSchemaNameInput(schemaName: string): string {\n  const normalized = schemaName.trim();\n  if (!normalized) {\n    throw new Error(\"table.schema() requires a non-empty schema name\");\n  }\n  if (normalized.includes(\".\")) {\n    throw new Error(\n      'table.schema() expects a schema name without dots. Use .schema(\"schema\").from(\"table\") or .from(\"schema.table\").'\n    );\n  }\n  return normalized;\n}\n\nfunction resolveTableTarget(\n  logicalName: string,\n  mappedName?: string,\n  explicitSchemaName?: string\n): {\n  schema?: string;\n  model: string;\n  qualifiedName: string;\n} {\n  const physicalName = (mappedName ?? logicalName).trim();\n  if (!physicalName) {\n    throw new Error(\"table() requires a non-empty name\");\n  }\n\n  const firstDot = physicalName.indexOf(\".\");\n  const lastDot = physicalName.lastIndexOf(\".\");\n  if (firstDot > 0 && firstDot === lastDot) {\n    const inlineSchema = physicalName.slice(0, firstDot).trim();\n    const inlineModel = physicalName.slice(firstDot + 1).trim();\n    if (!(inlineSchema && inlineModel)) {\n      throw new Error(\n        'table.from() schema-qualified names must look like \"schema.table\"'\n      );\n    }\n    if (explicitSchemaName && explicitSchemaName !== inlineSchema) {\n      throw new Error(\n        `table schema \"${explicitSchemaName}\" conflicts with mapped table \"${physicalName}\"`\n      );\n    }\n\n    return {\n      model: inlineModel,\n      qualifiedName: `${explicitSchemaName ?? inlineSchema}.${inlineModel}`,\n      schema: explicitSchemaName ?? inlineSchema,\n    };\n  }\n\n  if (explicitSchemaName) {\n    return {\n      model: physicalName,\n      qualifiedName: `${explicitSchemaName}.${physicalName}`,\n      schema: explicitSchemaName,\n    };\n  }\n\n  return {\n    model: physicalName,\n    qualifiedName: physicalName,\n  };\n}\n\nfunction toColumnMetadata(column: AnyColumnBuilder): ModelColumnMetadata {\n  const config = getColumnConfig(column);\n  return {\n    columnName: config.columnName,\n    ...(config.default === undefined ? {} : { default: config.default }),\n    enumValues: config.enumValues,\n    generationStrategy: config.generationStrategy,\n    hasDefault: config.hasDefault,\n    ...(config.identity === undefined ? {} : { identity: config.identity }),\n    isGenerated: config.isGenerated,\n    kind: config.kind,\n    ...(config.nativeType === undefined\n      ? {}\n      : { nativeType: config.nativeType }),\n    nullable: config.nullable,\n    ...(config.precision === undefined ? {} : { precision: config.precision }),\n    ...(config.scale === undefined ? {} : { scale: config.scale }),\n  };\n}\n\nfunction buildNullableMap(\n  columns: Record<string, AnyColumnBuilder>\n): Record<string, boolean> {\n  return Object.fromEntries(\n    Object.entries(columns).map(([columnName, column]) => [\n      columnName,\n      getColumnConfig(column).nullable,\n    ])\n  );\n}\n\nfunction buildColumnMetadataMap(\n  columns: Record<string, AnyColumnBuilder>\n): Record<string, ModelColumnMetadata> {\n  return Object.fromEntries(\n    Object.entries(columns).map(([columnName, column]) => [\n      columnName,\n      toColumnMetadata(column),\n    ])\n  );\n}\n\nfunction finalizeTable<\n  TName extends string,\n  TMappedName extends string | undefined,\n  TSchemaName extends string | undefined,\n  TColumns extends Record<string, AnyColumnBuilder>,\n>(\n  name: TName,\n  mappedName: TMappedName,\n  schemaName: TSchemaName,\n  columns: TColumns,\n  primaryKey: readonly Extract<keyof TColumns, string>[]\n): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName> {\n  const target = resolveTableTarget(name, mappedName, schemaName);\n  const authored: ModelDef<\n    RowFromColumns<TColumns>,\n    InsertFromColumns<TColumns>,\n    UpdateFromColumns<TColumns>\n  > = {\n    meta: {\n      columns: buildColumnMetadataMap(columns),\n      model: name,\n      nullable: buildNullableMap(columns),\n      primaryKey: [...primaryKey],\n      schema: target.schema,\n      ...(target.model === name ? {} : { tableName: target.model }),\n    },\n  };\n  const ir = schemaIrFromModels([authored]);\n  const irTable = ir.databases[0]?.namespaces[0]?.tables[0];\n  const logical = irTable?.identity.logical;\n  const model: ModelDef<\n    RowFromColumns<TColumns>,\n    InsertFromColumns<TColumns>,\n    UpdateFromColumns<TColumns>\n  > = {\n    meta: {\n      columns: authored.meta.columns,\n      model: logical?.name ?? target.model,\n      nullable: authored.meta.nullable,\n      primaryKey: [...primaryKey],\n      schema: logical?.namespace ?? target.schema,\n      ...(logical?.database && logical.database !== \"default\"\n        ? { database: logical.database }\n        : {}),\n      ...(authored.meta.tableName\n        ? { tableName: authored.meta.tableName }\n        : {}),\n    },\n  };\n\n  const schemas = buildTableSchemaBundle<\n    RowFromColumns<TColumns>,\n    InsertFromColumns<TColumns>,\n    UpdateFromColumns<TColumns>\n  >(model as AnyModelDef, columns);\n\n  return Object.assign(model, {\n    columns,\n    ir,\n    kind: \"table\" as const,\n    mappedName,\n    name,\n    qualifiedName: target.qualifiedName,\n    schemaName: target.schema,\n    schemas,\n    tableName: target.model,\n  }) as AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>;\n}\n\nfunction createColumnsBuilder<\n  TName extends string,\n  TMappedName extends string | undefined,\n  TSchemaName extends string | undefined,\n  TColumns extends Record<string, AnyColumnBuilder>,\n>(\n  name: TName,\n  mappedName: TMappedName,\n  schemaName: TSchemaName,\n  columns: TColumns\n): AthenaTableColumnsBuilder<TName, TMappedName, TSchemaName, TColumns> {\n  assertColumnRecord(columns);\n\n  return {\n    columns,\n    from<TNextMappedName extends string>(tableName: TNextMappedName) {\n      const normalizedTableName = normalizeMappedNameInput(tableName);\n      resolveTableTarget(name, normalizedTableName, schemaName);\n      return createColumnsBuilder(\n        name,\n        normalizedTableName as TNextMappedName,\n        schemaName,\n        columns\n      );\n    },\n    mappedName,\n    name,\n    primaryKey(...keys: Extract<keyof TColumns, string>[]) {\n      return finalizeTable(name, mappedName, schemaName, columns, keys);\n    },\n    schema<TNextSchemaName extends string>(nextSchemaName: TNextSchemaName) {\n      const normalizedSchemaName = normalizeSchemaNameInput(nextSchemaName);\n      resolveTableTarget(name, mappedName, normalizedSchemaName);\n      return createColumnsBuilder(\n        name,\n        mappedName,\n        normalizedSchemaName as TNextSchemaName,\n        columns\n      );\n    },\n    schemaName,\n    withoutPrimaryKey() {\n      return finalizeTable(name, mappedName, schemaName, columns, []);\n    },\n  };\n}\n\nfunction createTableBuilder<\n  TName extends string,\n  TMappedName extends string | undefined,\n  TSchemaName extends string | undefined,\n>(\n  name: TName,\n  mappedName: TMappedName,\n  schemaName: TSchemaName\n): AthenaTableBuilder<TName, TMappedName, TSchemaName> {\n  return {\n    columns<TColumns extends Record<string, AnyColumnBuilder>>(\n      columns: TColumns\n    ) {\n      return createColumnsBuilder(name, mappedName, schemaName, columns);\n    },\n    from<TNextMappedName extends string>(tableName: TNextMappedName) {\n      const normalizedTableName = normalizeMappedNameInput(tableName);\n      resolveTableTarget(name, normalizedTableName, schemaName);\n      return createTableBuilder(\n        name,\n        normalizedTableName as TNextMappedName,\n        schemaName\n      );\n    },\n    mappedName,\n    name,\n    schema<TNextSchemaName extends string>(nextSchemaName: TNextSchemaName) {\n      const normalizedSchemaName = normalizeSchemaNameInput(nextSchemaName);\n      resolveTableTarget(name, mappedName, normalizedSchemaName);\n      return createTableBuilder(\n        name,\n        mappedName,\n        normalizedSchemaName as TNextSchemaName\n      );\n    },\n    schemaName,\n  };\n}\n\nexport function table<TName extends string>(\n  name: TName\n): AthenaTableBuilder<TName, undefined> {\n  if (!name.trim()) {\n    throw new Error(\"table() requires a non-empty name\");\n  }\n\n  return createTableBuilder(name, undefined, undefined);\n}\n\nexport type { AthenaColumnBuilder };\n","import type { ZodType } from \"zod\";\nimport type { NativeTypeDescriptor } from \"./ir/type.ts\";\nimport type {\n  ModelColumnDefault,\n  ModelColumnDefaultInput,\n  ModelColumnGenerationStrategy,\n  ModelColumnIdentity,\n  ModelColumnKind,\n} from \"./types.ts\";\n\nexport const COLUMN_CONFIG = Symbol(\"athena.column.config\");\n\nexport interface ColumnRuntimeConfig<\n  TValue,\n  TNullable extends boolean = false,\n  THasDefault extends boolean = false,\n  TGenerated extends boolean = false,\n  TColumnName extends string | undefined = undefined,\n  TKind extends ModelColumnKind = ModelColumnKind,\n  TIdentity extends ModelColumnIdentity | undefined = undefined,\n> {\n  readonly __value?: TValue;\n  readonly columnName?: TColumnName;\n  readonly default?: ModelColumnDefault;\n  readonly enumValues?: readonly string[];\n  readonly generationStrategy: ModelColumnGenerationStrategy;\n  readonly hasDefault: THasDefault;\n  readonly identity?: TIdentity;\n  readonly isGenerated: TGenerated;\n  readonly jsonSchema?: ZodType<TValue>;\n  readonly kind: TKind;\n  readonly nativeType?: NativeTypeDescriptor;\n  readonly nullable: TNullable;\n  /** Exact-numeric precision (decimal/numeric columns). */\n  readonly precision?: number;\n  /** Exact-numeric scale (decimal/numeric columns). */\n  readonly scale?: number;\n}\n\ninterface ColumnBuilderMethods<\n  TValue,\n  TNullable extends boolean = false,\n  THasDefault extends boolean = false,\n  TGenerated extends boolean = false,\n  TColumnName extends string | undefined = undefined,\n  TKind extends ModelColumnKind = ModelColumnKind,\n  TIdentity extends ModelColumnIdentity | undefined = undefined,\n  TIdentityEnabled extends boolean = false,\n> {\n  nativeType: (\n    descriptor: NativeTypeDescriptor\n  ) => BuilderFor<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind,\n    TIdentity,\n    TIdentityEnabled\n  >;\n  defaulted: (\n    value?: ModelColumnDefaultInput\n  ) => BuilderFor<\n    TValue,\n    TNullable,\n    true,\n    TGenerated,\n    TColumnName,\n    TKind,\n    TIdentity,\n    TIdentityEnabled\n  >;\n  from: <TNextColumnName extends string>(\n    columnName: TNextColumnName\n  ) => BuilderFor<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TNextColumnName,\n    TKind,\n    TIdentity,\n    TIdentityEnabled\n  >;\n  generated: () => BuilderFor<\n    TValue,\n    TNullable,\n    THasDefault,\n    true,\n    TColumnName,\n    TKind,\n    undefined,\n    false\n  >;\n  /**\n   * Configure PostgreSQL identity semantics. The `number()` form is a\n   * deprecated compatibility bridge; new code should use integer builders.\n   */\n  readonly identity: TIdentityEnabled extends true\n    ? TNullable extends true\n      ? never\n      : TGenerated extends true\n      ? never\n      : TIdentity extends ModelColumnIdentity\n        ? never\n        : <TMode extends ModelColumnIdentity = \"by-default\">(\n            mode?: TMode\n          ) => AthenaIdentityColumnBuilder<\n            TValue,\n            false,\n            true,\n            false,\n            TColumnName,\n            TKind,\n            TMode\n          >\n    : never;\n  optional: () => BuilderFor<\n    TValue,\n    true,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind,\n    TIdentity,\n    TIdentityEnabled\n  >;\n  precision: TKind extends \"decimal\"\n    ? (\n        value: number\n      ) => BuilderFor<\n        TValue,\n        TNullable,\n        THasDefault,\n        TGenerated,\n        TColumnName,\n        TKind,\n        TIdentity,\n        TIdentityEnabled\n      >\n    : never;\n  scale: TKind extends \"decimal\"\n    ? (\n        value: number\n      ) => BuilderFor<\n        TValue,\n        TNullable,\n        THasDefault,\n        TGenerated,\n        TColumnName,\n        TKind,\n        TIdentity,\n        TIdentityEnabled\n      >\n    : never;\n  readonly [COLUMN_CONFIG]: ColumnRuntimeConfig<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind,\n    TIdentity\n  >;\n}\n\ntype BuilderFor<\n  TValue,\n  TNullable extends boolean,\n  THasDefault extends boolean,\n  TGenerated extends boolean,\n  TColumnName extends string | undefined,\n  TKind extends ModelColumnKind,\n  TIdentity extends ModelColumnIdentity | undefined,\n  TIdentityEnabled extends boolean,\n> = TIdentityEnabled extends true\n  ? AthenaIdentityColumnBuilder<\n      TValue,\n      TNullable,\n      THasDefault,\n      TGenerated,\n      TColumnName,\n      TKind,\n      TIdentity\n    >\n  : AthenaColumnBuilder<\n      TValue,\n      TNullable,\n      THasDefault,\n      TGenerated,\n      TColumnName,\n      TKind,\n      TIdentity\n    >;\n\nexport interface AthenaColumnBuilder<\n  TValue,\n  TNullable extends boolean = false,\n  THasDefault extends boolean = false,\n  TGenerated extends boolean = false,\n  TColumnName extends string | undefined = undefined,\n  TKind extends ModelColumnKind = ModelColumnKind,\n  TIdentity extends ModelColumnIdentity | undefined = undefined,\n  TIdentityEnabled extends boolean = false,\n> extends ColumnBuilderMethods<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind,\n    TIdentity,\n    TIdentityEnabled\n  > {\n  readonly __athenaColumnBuilder?: never;\n}\n\nexport type AthenaIdentityColumnBuilder<\n  TValue,\n  TNullable extends boolean = false,\n  THasDefault extends boolean = false,\n  TGenerated extends boolean = false,\n  TColumnName extends string | undefined = undefined,\n  TKind extends ModelColumnKind = ModelColumnKind,\n  TIdentity extends ModelColumnIdentity | undefined = undefined,\n> = (TIdentity extends ModelColumnIdentity\n  ? Omit<\n      ColumnBuilderMethods<\n        TValue,\n        TNullable,\n        THasDefault,\n        TGenerated,\n        TColumnName,\n        TKind,\n        TIdentity,\n        true\n      >,\n      \"generated\" | \"optional\" | \"identity\"\n    >\n  : ColumnBuilderMethods<\n      TValue,\n      TNullable,\n      THasDefault,\n      TGenerated,\n      TColumnName,\n      TKind,\n      TIdentity,\n      true\n    >) &\n  object;\n\nexport type AnyColumnBuilder =\n  | AthenaColumnBuilder<\n      unknown,\n      boolean,\n      boolean,\n      boolean,\n      string | undefined,\n      ModelColumnKind,\n      ModelColumnIdentity | undefined\n    >\n  | AthenaIdentityColumnBuilder<\n      unknown,\n      boolean,\n      boolean,\n      boolean,\n      string | undefined,\n      ModelColumnKind,\n      ModelColumnIdentity | undefined\n    >;\n\nexport interface DecimalColumnOptions {\n  precision?: number;\n  scale?: number;\n}\n\nfunction assertNonNegativeInt(label: string, value: number): number {\n  if (!Number.isInteger(value) || value < 0) {\n    throw new Error(\n      `${label} must be a non-negative integer (received ${value})`\n    );\n  }\n  return value;\n}\n\nfunction createColumnBuilder<\n  TValue,\n  TNullable extends boolean,\n  THasDefault extends boolean,\n  TGenerated extends boolean,\n  TColumnName extends string | undefined,\n  TKind extends ModelColumnKind,\n  TIdentity extends ModelColumnIdentity | undefined,\n>(\n  config: ColumnRuntimeConfig<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind,\n    TIdentity\n  >,\n  identityEnabled = false\n): AnyColumnBuilder {\n  const builder = {\n    [COLUMN_CONFIG]: config,\n    nativeType(descriptor: NativeTypeDescriptor) {\n      return createColumnBuilder(\n        {\n          ...config,\n          nativeType: descriptor,\n        },\n        identityEnabled\n      );\n    },\n    defaulted(value?: ModelColumnDefaultInput) {\n      if (value === null && !config.nullable) {\n        throw new Error(\n          \"Literal null defaults require nullable columns; non-nullable columns cannot use a literal null default\"\n        );\n      }\n      return createColumnBuilder(\n        {\n          ...config,\n          ...(value === undefined\n            ? { default: { kind: \"unknown\" as const } }\n            : isSqlDefault(value)\n              ? { default: { kind: \"sql\" as const, ...value } }\n              : { default: { kind: \"literal\" as const, value } }),\n          hasDefault: true,\n        },\n        identityEnabled\n      );\n    },\n    from<TNextColumnName extends string>(columnName: TNextColumnName) {\n      return createColumnBuilder(\n        {\n          ...config,\n          columnName,\n        },\n        identityEnabled\n      );\n    },\n    generated() {\n      if (config.identity !== undefined) {\n        throw new Error(\"Identity columns cannot also be generated\");\n      }\n      return createColumnBuilder(\n        {\n          ...config,\n          generationStrategy: { kind: \"generated-always\" },\n          identity: undefined,\n          isGenerated: true,\n        },\n        false\n      );\n    },\n    optional() {\n      if (config.identity !== undefined) {\n        throw new Error(\"Identity columns cannot be optional\");\n      }\n      return createColumnBuilder(\n        {\n          ...config,\n          nullable: true,\n        },\n        identityEnabled\n      );\n    },\n  };\n\n  if (identityEnabled && config.identity === undefined && !config.isGenerated) {\n    Object.assign(builder, {\n      identity<TMode extends ModelColumnIdentity = \"by-default\">(\n        mode = \"by-default\" as TMode\n      ) {\n        if (config.identity !== undefined) {\n          throw new Error(\"Identity columns can only be configured once\");\n        }\n        if (config.nullable) {\n          throw new Error(\"Identity columns cannot be nullable\");\n        }\n        if (config.isGenerated) {\n          throw new Error(\n            \"Generated columns cannot transition to identity columns\"\n          );\n        }\n        return createColumnBuilder(\n          {\n            ...config,\n            generationStrategy: { kind: \"identity\", mode },\n            hasDefault: true,\n            identity: mode,\n            isGenerated: false,\n            nullable: false,\n          },\n          identityEnabled\n        );\n      },\n    });\n  }\n\n  if (config.kind === \"decimal\") {\n    Object.assign(builder, {\n      precision(value: number) {\n        return createColumnBuilder(\n          {\n            ...config,\n            precision: assertNonNegativeInt(\"precision\", value),\n          },\n          identityEnabled\n        );\n      },\n      scale(value: number) {\n        return createColumnBuilder(\n          {\n            ...config,\n            scale: assertNonNegativeInt(\"scale\", value),\n          },\n          identityEnabled\n        );\n      },\n    });\n  }\n\n  if (!identityEnabled) {\n    return builder as AthenaColumnBuilder<\n      TValue,\n      TNullable,\n      THasDefault,\n      TGenerated,\n      TColumnName,\n      TKind,\n      TIdentity\n    >;\n  }\n\n  return builder as unknown as AthenaIdentityColumnBuilder<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind,\n    TIdentity\n  >;\n}\n\nfunction isSqlDefault(\n  value: ModelColumnDefaultInput\n): value is Exclude<ModelColumnDefaultInput, string | number | boolean | null> {\n  return (\n    typeof value === \"object\" &&\n    value !== null &&\n    \"dialect\" in value &&\n    \"expression\" in value\n  );\n}\n\nexport function isColumnBuilder(value: unknown): value is AnyColumnBuilder {\n  return value !== null && typeof value === \"object\" && COLUMN_CONFIG in value;\n}\n\nexport function getColumnConfig<TColumn extends AnyColumnBuilder>(\n  column: TColumn\n): TColumn[typeof COLUMN_CONFIG] {\n  return column[COLUMN_CONFIG];\n}\n\nexport function string(): AthenaColumnBuilder<\n  string,\n  false,\n  false,\n  false,\n  undefined,\n  \"string\"\n> {\n  return createColumnBuilder({\n    generationStrategy: { kind: \"none\" },\n    hasDefault: false,\n    isGenerated: false,\n    kind: \"string\",\n    nullable: false,\n  }) as AthenaColumnBuilder<string, false, false, false, undefined, \"string\">;\n}\n\nexport type AthenaLegacyNumberColumnBuilder = Omit<\n  AthenaColumnBuilder<\n    number,\n    false,\n    false,\n    false,\n    undefined,\n    \"number\",\n    undefined,\n    true\n  >,\n  \"identity\"\n> & {\n  /** @deprecated Prefer an integer builder for new identity columns. */\n  readonly identity: <TMode extends ModelColumnIdentity = \"by-default\">(\n    mode?: TMode\n  ) => AthenaIdentityColumnBuilder<\n    number,\n    false,\n    true,\n    false,\n    undefined,\n    \"number\",\n    TMode\n  >;\n};\n\n/**\n * Create a legacy JavaScript-number column builder.\n *\n * Its `.identity()` member is retained as a deprecated PostgreSQL `BIGINT`\n * identity compatibility bridge; new identity columns should use an integer\n * builder.\n */\nexport function number(): AthenaLegacyNumberColumnBuilder {\n  return createColumnBuilder(\n    {\n      generationStrategy: { kind: \"none\" },\n      hasDefault: false,\n      isGenerated: false,\n      kind: \"number\",\n      nullable: false,\n    },\n    true\n  ) as AthenaLegacyNumberColumnBuilder;\n}\n\nexport function smallint(): AthenaIdentityColumnBuilder<\n  number,\n  false,\n  false,\n  false,\n  undefined,\n  \"smallint\"\n> {\n  return createColumnBuilder(\n    {\n      generationStrategy: { kind: \"none\" },\n      hasDefault: false,\n      isGenerated: false,\n      kind: \"smallint\",\n      nullable: false,\n    },\n    true\n  ) as AthenaIdentityColumnBuilder<\n    number,\n    false,\n    false,\n    false,\n    undefined,\n    \"smallint\"\n  >;\n}\n\nexport function integer(): AthenaIdentityColumnBuilder<\n  number,\n  false,\n  false,\n  false,\n  undefined,\n  \"integer\"\n> {\n  return createColumnBuilder(\n    {\n      generationStrategy: { kind: \"none\" },\n      hasDefault: false,\n      isGenerated: false,\n      kind: \"integer\",\n      nullable: false,\n    },\n    true\n  ) as AthenaIdentityColumnBuilder<\n    number,\n    false,\n    false,\n    false,\n    undefined,\n    \"integer\"\n  >;\n}\n\nexport function bigint(): AthenaIdentityColumnBuilder<\n  string,\n  false,\n  false,\n  false,\n  undefined,\n  \"bigint\"\n> {\n  return createColumnBuilder(\n    {\n      generationStrategy: { kind: \"none\" },\n      hasDefault: false,\n      isGenerated: false,\n      kind: \"bigint\",\n      nullable: false,\n    },\n    true\n  ) as AthenaIdentityColumnBuilder<\n    string,\n    false,\n    false,\n    false,\n    undefined,\n    \"bigint\"\n  >;\n}\n\n/**\n * Exact decimal / numeric column.\n *\n * Row values are `string` by default so PostgreSQL NUMERIC/DECIMAL precision is\n * preserved at the JS boundary. Use `.precision(n)` / `.scale(n)` (or options)\n * to retain catalog metadata for validation, forms, and schema diffing.\n */\nexport function decimal(\n  options: DecimalColumnOptions = {}\n): AthenaColumnBuilder<string, false, false, false, undefined, \"decimal\"> {\n  return createColumnBuilder({\n    generationStrategy: { kind: \"none\" },\n    hasDefault: false,\n    isGenerated: false,\n    kind: \"decimal\",\n    nullable: false,\n    ...(options.precision === undefined\n      ? {}\n      : { precision: assertNonNegativeInt(\"precision\", options.precision) }),\n    ...(options.scale === undefined\n      ? {}\n      : { scale: assertNonNegativeInt(\"scale\", options.scale) }),\n  }) as AthenaColumnBuilder<string, false, false, false, undefined, \"decimal\">;\n}\n\n/** Alias of {@link decimal} for PostgreSQL `NUMERIC` naming. */\nexport const numeric = decimal;\n\nexport function boolean(): AthenaColumnBuilder<\n  boolean,\n  false,\n  false,\n  false,\n  undefined,\n  \"boolean\"\n> {\n  return createColumnBuilder({\n    generationStrategy: { kind: \"none\" },\n    hasDefault: false,\n    isGenerated: false,\n    kind: \"boolean\",\n    nullable: false,\n  }) as AthenaColumnBuilder<boolean, false, false, false, undefined, \"boolean\">;\n}\n\nexport function json<TValue = unknown>(\n  schema?: ZodType<TValue>\n): AthenaColumnBuilder<TValue, false, false, false, undefined, \"json\"> {\n  return createColumnBuilder({\n    generationStrategy: { kind: \"none\" },\n    hasDefault: false,\n    isGenerated: false,\n    jsonSchema: schema,\n    kind: \"json\",\n    nullable: false,\n  }) as AthenaColumnBuilder<TValue, false, false, false, undefined, \"json\">;\n}\n\nexport function enumeration<\n  const TValues extends readonly [string, ...string[]],\n>(\n  values: TValues\n): AthenaColumnBuilder<\n  TValues[number],\n  false,\n  false,\n  false,\n  undefined,\n  \"enumeration\"\n> {\n  if (values.length === 0) {\n    throw new Error(\"enumeration() requires at least one value\");\n  }\n\n  return createColumnBuilder({\n    generationStrategy: { kind: \"none\" },\n    enumValues: values,\n    hasDefault: false,\n    isGenerated: false,\n    kind: \"enumeration\",\n    nullable: false,\n  }) as AthenaColumnBuilder<\n    TValues[number],\n    false,\n    false,\n    false,\n    undefined,\n    \"enumeration\"\n  >;\n}\n","import { type ZodType, type ZodTypeAny, z } from \"zod\";\nimport { toModelPayload } from \"./model-form.ts\";\nimport { type AnyColumnBuilder, getColumnConfig } from \"./table-columns.ts\";\nimport type { AnyModelDef, ModelColumnKind } from \"./types.ts\";\n\nconst POSTGRES_INT8_MIN = BigInt(\"-9223372036854775808\");\nconst POSTGRES_INT8_MAX = BigInt(\"9223372036854775807\");\n\nfunction createBigintSchema(): ZodTypeAny {\n  return z\n    .string()\n    .refine((value) => {\n      if (!/^[+-]?\\d+$/.test(value)) {\n        return false;\n      }\n      const parsed = BigInt(value);\n      return parsed >= POSTGRES_INT8_MIN && parsed <= POSTGRES_INT8_MAX;\n    });\n}\n\nexport interface AthenaTableSchemaBundle<Row, Insert, Update> {\n  readonly form: ZodType<Insert>;\n  readonly insert: ZodType<Insert>;\n  readonly row: ZodType<Row>;\n  readonly update: ZodType<Update>;\n}\n\nfunction isScalarFormKind(kind: ModelColumnKind): boolean {\n  return (\n    kind === \"string\" ||\n    kind === \"number\" ||\n    kind === \"smallint\" ||\n    kind === \"integer\" ||\n    kind === \"bigint\" ||\n    kind === \"decimal\" ||\n    kind === \"boolean\" ||\n    kind === \"enumeration\"\n  );\n}\n\nfunction createBaseSchema(column: AnyColumnBuilder): ZodTypeAny {\n  const config = getColumnConfig(column);\n\n  switch (config.kind) {\n    case \"boolean\":\n      return z.boolean();\n    case \"number\":\n      return z.number();\n    case \"smallint\":\n      return z.number().int().min(-32768).max(32767);\n    case \"integer\":\n      return z.number().int().min(-2147483648).max(2147483647);\n    case \"bigint\":\n      return createBigintSchema();\n    case \"decimal\":\n      // Precision-safe runtime representation (matches PostgreSQL NUMERIC wire).\n      return z.string();\n    case \"json\":\n      return (config.jsonSchema ?? z.unknown()) as ZodTypeAny;\n    case \"enumeration\":\n      if (!config.enumValues || config.enumValues.length === 0) {\n        return z.string();\n      }\n      return z.enum(config.enumValues as [string, ...string[]]);\n    default:\n      return z.string();\n  }\n}\n\nfunction applyNullable(\n  schema: ZodTypeAny,\n  column: AnyColumnBuilder\n): ZodTypeAny {\n  const config = getColumnConfig(column);\n  return config.nullable ? schema.nullable() : schema;\n}\n\nfunction applyInsertOptional(\n  schema: ZodTypeAny,\n  column: AnyColumnBuilder\n): ZodTypeAny {\n  const config = getColumnConfig(column);\n  return config.nullable || config.hasDefault ? schema.optional() : schema;\n}\n\nfunction createFormFieldSchema(column: AnyColumnBuilder): ZodTypeAny {\n  const config = getColumnConfig(column);\n  const base = createBaseSchema(column);\n\n  let schema: ZodTypeAny;\n  if (config.nullable && isScalarFormKind(config.kind)) {\n    schema = z\n      .union([base, z.literal(\"\")])\n      .transform((value) => (value === \"\" ? null : value));\n  } else {\n    schema = applyNullable(base, column);\n  }\n\n  if (config.nullable || config.hasDefault) {\n    schema = schema.optional();\n  }\n\n  return schema;\n}\n\nexport function buildTableSchemaBundle<Row, Insert, Update>(\n  model: AnyModelDef,\n  columns: Record<string, AnyColumnBuilder>\n): AthenaTableSchemaBundle<Row, Insert, Update> {\n  const rowShape: Record<string, ZodTypeAny> = {};\n  const insertShape: Record<string, ZodTypeAny> = {};\n  const updateShape: Record<string, ZodTypeAny> = {};\n  const formShape: Record<string, ZodTypeAny> = {};\n\n  for (const [columnName, column] of Object.entries(columns)) {\n    const config = getColumnConfig(column);\n    const base = createBaseSchema(column);\n\n    rowShape[columnName] = applyNullable(base, column);\n\n    if (config.identity === \"always\") {\n      // Keep ALWAYS columns visible to Zod so explicit values fail instead of\n      // being silently stripped.\n      insertShape[columnName] = z.never().optional();\n      updateShape[columnName] = z.never().optional();\n      continue;\n    }\n    if (config.isGenerated) {\n      continue;\n    }\n\n    insertShape[columnName] = applyInsertOptional(\n      applyNullable(base, column),\n      column\n    );\n    updateShape[columnName] = applyNullable(base, column).optional();\n    formShape[columnName] = createFormFieldSchema(column);\n  }\n\n  const rowSchema = z.object(rowShape) as ZodType<Row>;\n  const insertSchema = z.object(insertShape) as ZodType<Insert>;\n  const updateSchema = z.object(updateShape) as ZodType<Update>;\n  const formSchema = z\n    .object(formShape)\n    .transform(\n      (value) => toModelPayload(model, value as never) as Insert\n    ) as ZodType<Insert>;\n\n  return {\n    form: formSchema,\n    insert: insertSchema,\n    row: rowSchema,\n    update: updateSchema,\n  };\n}\n","/**\n * Node-only writer for AthenaModels → dialect `.sql` files.\n */\n\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n  type ModelSqlFile,\n  type ModelSqlInput,\n  type ModelsToSqlFilesOptions,\n  modelsToSqlFiles,\n} from \"./model-sql.ts\";\n\nexport interface WriteModelSqlFilesOptions extends ModelsToSqlFilesOptions {\n  /** Directory that receives the `.sql` tree. */\n  outDir: string;\n}\n\n/**\n * Write AthenaModels → dialect `.sql` files under `outDir`.\n *\n * Example layout:\n * ```\n * outDir/\n *   postgres/public/users.sql\n *   d1/public/users.sql   // content uses bare \"users\"\n * ```\n */\nexport async function writeModelSqlFiles(\n  input: ModelSqlInput,\n  options: WriteModelSqlFilesOptions\n): Promise<ModelSqlFile[]> {\n  const outDir = options.outDir?.trim();\n  if (!outDir) {\n    throw new Error(\"writeModelSqlFiles requires options.outDir\");\n  }\n\n  const files = modelsToSqlFiles(input, options);\n  await mkdir(outDir, { recursive: true });\n\n  for (const file of files) {\n    const absolute = path.join(outDir, file.filename);\n    await mkdir(path.dirname(absolute), { recursive: true });\n    await writeFile(absolute, file.content, \"utf8\");\n  }\n\n  return files;\n}\n","import { spawn } from \"node:child_process\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { QueryRequestV1 } from \"../query/contract-v1.ts\";\nimport {\n  assertCompiledQueryV1,\n  type AthenaCanonicalQueryCompiler,\n  type AthenaCompiledQuery,\n  type AthenaCompiledQueryTarget,\n} from \"./compiler.ts\";\n\n/**\n * Optional host adapter: spawn the Rust `athena-query-compile-v1` binary.\n * Not a TypeScript SQL compiler and not a root package native dependency.\n */\nexport function createProcessCanonicalQueryCompiler(input: {\n  command?: string;\n  args?: readonly string[];\n  cwd?: string;\n}): AthenaCanonicalQueryCompiler {\n  const command = input.command ?? \"cargo\";\n  const args = input.args ?? [\n    \"run\",\n    \"-q\",\n    \"-p\",\n    \"athena-query\",\n    \"--bin\",\n    \"athena-query-compile-v1\",\n    \"--\",\n  ];\n  const cwd =\n    input.cwd ??\n    resolve(dirname(fileURLToPath(import.meta.url)), \"../../../..\");\n  return {\n    async compile(\n      request: QueryRequestV1,\n      target: AthenaCompiledQueryTarget,\n    ): Promise<AthenaCompiledQuery> {\n      const payload = JSON.stringify({ request, target });\n      const stdout = await new Promise<string>((resolve, reject) => {\n        const child = spawn(command, [...args], { cwd, stdio: [\"pipe\", \"pipe\", \"pipe\"] });\n        let out = \"\";\n        let err = \"\";\n        child.stdout.setEncoding(\"utf8\");\n        child.stderr.setEncoding(\"utf8\");\n        child.stdout.on(\"data\", (chunk) => {\n          out += chunk;\n        });\n        child.stderr.on(\"data\", (chunk) => {\n          err += chunk;\n        });\n        child.on(\"error\", reject);\n        child.on(\"close\", (code) => {\n          if (code === 0) {\n            resolve(out);\n          } else {\n            reject(new Error(err.trim() || `athena-query compile failed (${code})`));\n          }\n        });\n        child.stdin.end(payload);\n      });\n      return assertCompiledQueryV1(JSON.parse(stdout));\n    },\n  };\n}\n","export {\n  type AthenaTableCatalogQueryClient,\n  buildAthenaTableCatalogQueries,\n  type FetchAthenaTableCatalogOptions,\n  fetchAthenaTableCatalog,\n  fetchTableCatalog,\n  hasAthenaTableSchemaCredentials,\n  isAthenaTableSchemaConfig,\n  parseAthenaTableSchemaScope,\n} from \"./catalog.ts\";\n\nexport {\n  ATHENA_TABLE_SCHEMA_ROUTE,\n  type AthenaTableSchemaHandlerOptions,\n  createAthenaTableSchemaHandlers,\n  handleAthenaTableSchemaPost,\n} from \"./schema-handlers.ts\";\n\nexport type {\n  AthenaTableCatalogColumn,\n  AthenaTableCatalogRelation,\n  AthenaTableCatalogResponse,\n  AthenaTableCatalogTable,\n  AthenaTableSchemaConfig,\n  AthenaTableShowcaseConfig,\n  TableCatalogColumn,\n  TableCatalogRelation,\n  TableCatalogResponse,\n  TableCatalogTable,\n} from \"./types.ts\";\n","import { POSTGRES_CATALOG_SQL } from \"../schema/postgres-introspection-core.ts\";\n// Browser-safe client core: this module is re-exported from the browser entry,\n// so it must not reach the Node-only direct PostgreSQL transport.\nimport { type AthenaClient, createClient } from \"../v3-client-core.ts\";\nimport type {\n  AthenaTableCatalogColumn,\n  AthenaTableCatalogRelation,\n  AthenaTableCatalogResponse,\n  AthenaTableCatalogTable,\n  AthenaTableSchemaConfig,\n} from \"./types.ts\";\n\ninterface ColumnRow {\n  column_name: string;\n  data_type: string;\n  is_nullable: boolean;\n  schema_name: string;\n  table_name: string;\n}\n\ninterface PrimaryKeyRow {\n  columns: string[] | string;\n  schema_name: string;\n  table_name: string;\n}\n\ninterface ForeignKeyRow {\n  constraint_name: string;\n  source_columns: string[] | string;\n  source_schema: string;\n  source_table: string;\n  target_columns: string[] | string;\n  target_schema: string;\n  target_table: string;\n}\n\ntype MutableRelation = Omit<AthenaTableCatalogRelation, \"columns\">;\n\ntype MutableTableCatalog = Omit<AthenaTableCatalogTable, \"relations\"> & {\n  relationMap: Map<string, MutableRelation>;\n};\n\n/** Minimal query surface used by the catalog (v3 client or compatible). */\nexport interface AthenaTableCatalogQueryClient {\n  query: AthenaClient[\"query\"];\n}\n\nexport interface FetchAthenaTableCatalogOptions {\n  /**\n   * Optional pre-built client. When omitted, a short-lived client is created\n   * from `config.gatewayUrl`, `config.gatewayKey`, and `config.clientName`.\n   */\n  client?: AthenaTableCatalogQueryClient;\n}\n\n/**\n * Parse a comma-separated schema scope into unique non-empty names.\n */\nexport function parseAthenaTableSchemaScope(value: string): string[] {\n  return value\n    .split(\",\")\n    .map((entry) => entry.trim())\n    .filter(\n      (entry, index, values) =>\n        entry.length > 0 && values.indexOf(entry) === index\n    );\n}\n\nfunction escapeSqlLiteral(value: string) {\n  return value.replace(/'/g, \"''\");\n}\n\nfunction buildSchemaArrayLiteral(schemas: readonly string[]) {\n  const literals = schemas\n    .map((schema) => `'${escapeSqlLiteral(schema)}'`)\n    .join(\", \");\n\n  return `ARRAY[${literals}]`;\n}\n\nfunction inlineSchemaLiteral(sql: string, schemas: readonly string[]) {\n  return sql.replace(\n    /\\$1::text\\[\\]/g,\n    `${buildSchemaArrayLiteral(schemas)}::text[]`\n  );\n}\n\n/**\n * Build gateway SQL for columns, primary keys, and foreign keys for the\n * given schema list (parameter placeholders inlined for gateway SQL).\n */\nexport function buildAthenaTableCatalogQueries(schemas: readonly string[]) {\n  return {\n    columns: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.columns, schemas),\n    foreignKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.foreignKeys, schemas),\n    primaryKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.primaryKeys, schemas),\n  };\n}\n\nfunction tableKey(schema: string, table: string) {\n  return `${schema}.${table}`;\n}\n\nfunction relationKey(...parts: string[]) {\n  const base = parts\n    .join(\"_\")\n    .replace(/[^A-Za-z0-9_]+/g, \"_\")\n    .replace(/^_+|_+$/g, \"\");\n\n  return base.length > 0 ? base : \"relation\";\n}\n\nfunction parsePostgresArrayLiteral(text: string) {\n  const body = text.slice(1, -1).trim();\n\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\n    if (char === \"\\\\\") {\n      escaped = true;\n      continue;\n    }\n\n    if (char === '\"') {\n      inQuotes = !inQuotes;\n      continue;\n    }\n\n    if (char === \",\" && !inQuotes) {\n      values.push(current);\n      current = \"\";\n      continue;\n    }\n\n    current += char;\n  }\n\n  values.push(current);\n\n  return values\n    .map((value) => value.trim())\n    .filter((value) => value.length > 0);\n}\n\nfunction coerceStringArray(value: string[] | string | null | undefined) {\n  if (value === null) {\n    return [];\n  }\n\n  if (Array.isArray(value)) {\n    return value.map((entry) => entry.trim()).filter(Boolean);\n  }\n\n  if (typeof value !== \"string\") {\n    return [];\n  }\n\n  const trimmedValue = value.trim();\n\n  if (!trimmedValue) {\n    return [];\n  }\n\n  if (trimmedValue.startsWith(\"{\") && trimmedValue.endsWith(\"}\")) {\n    return parsePostgresArrayLiteral(trimmedValue);\n  }\n\n  return trimmedValue\n    .split(\",\")\n    .map((entry) => entry.trim())\n    .filter(Boolean);\n}\n\nfunction createTableCatalog() {\n  const tables = new Map<string, MutableTableCatalog>();\n\n  const ensureTable = (schema: string, name: string) => {\n    const id = tableKey(schema, name);\n    const existingTable = tables.get(id);\n\n    if (existingTable) {\n      return existingTable;\n    }\n\n    const nextTable: MutableTableCatalog = {\n      columns: [],\n      id,\n      name,\n      primaryKey: [],\n      relationMap: new Map(),\n      schema,\n    };\n\n    tables.set(id, nextTable);\n\n    return nextTable;\n  };\n\n  const upsertRelation = (\n    table: MutableTableCatalog,\n    key: string,\n    relation: MutableRelation\n  ) => {\n    table.relationMap.set(key, relation);\n  };\n\n  return {\n    addColumnRows(columnRows: readonly ColumnRow[]) {\n      for (const row of columnRows) {\n        const table = ensureTable(row.schema_name, row.table_name);\n\n        table.columns.push({\n          dataType: row.data_type,\n          isNullable: row.is_nullable,\n          isPrimaryKey: false,\n          name: row.column_name,\n        });\n      }\n    },\n    addForeignKeyRows(foreignKeyRows: readonly ForeignKeyRow[]) {\n      for (const row of foreignKeyRows) {\n        const sourceTable = ensureTable(row.source_schema, row.source_table);\n        const targetTable = ensureTable(row.target_schema, row.target_table);\n\n        upsertRelation(\n          sourceTable,\n          relationKey(row.constraint_name, row.target_table),\n          {\n            name: row.constraint_name,\n            targetSchema: row.target_schema,\n            targetTable: row.target_table,\n          }\n        );\n\n        upsertRelation(targetTable, relationKey(row.source_table), {\n          name: relationKey(row.source_table, row.constraint_name),\n          targetSchema: row.source_schema,\n          targetTable: row.source_table,\n        });\n      }\n    },\n    addManyToManyRows(foreignKeyRows: readonly ForeignKeyRow[]) {\n      const foreignKeysBySourceTable = new Map<\n        string,\n        {\n          foreignKeys: ForeignKeyRow[];\n          schema: string;\n          table: string;\n        }\n      >();\n\n      for (const foreignKey of foreignKeyRows) {\n        const key = tableKey(foreignKey.source_schema, foreignKey.source_table);\n        const current = foreignKeysBySourceTable.get(key) ?? {\n          foreignKeys: [],\n          schema: foreignKey.source_schema,\n          table: foreignKey.source_table,\n        };\n\n        current.foreignKeys.push(foreignKey);\n        foreignKeysBySourceTable.set(key, current);\n      }\n\n      for (const candidate of foreignKeysBySourceTable.values()) {\n        const bridgeTable = tables.get(\n          tableKey(candidate.schema, candidate.table)\n        );\n\n        if (!bridgeTable || candidate.foreignKeys.length !== 2) {\n          continue;\n        }\n\n        const combinedForeignColumns = Array.from(\n          new Set(\n            candidate.foreignKeys.flatMap((foreignKey) =>\n              coerceStringArray(foreignKey.source_columns)\n            )\n          )\n        );\n\n        if (\n          bridgeTable.primaryKey.length === 0 ||\n          combinedForeignColumns.length !== bridgeTable.primaryKey.length ||\n          !bridgeTable.primaryKey.every((column) =>\n            combinedForeignColumns.includes(column)\n          )\n        ) {\n          continue;\n        }\n\n        const [firstForeignKey, secondForeignKey] = candidate.foreignKeys;\n        const firstTarget = tables.get(\n          tableKey(firstForeignKey.target_schema, firstForeignKey.target_table)\n        );\n        const secondTarget = tables.get(\n          tableKey(\n            secondForeignKey.target_schema,\n            secondForeignKey.target_table\n          )\n        );\n\n        if (!(firstTarget && secondTarget)) {\n          continue;\n        }\n\n        upsertRelation(\n          firstTarget,\n          relationKey(candidate.table, secondForeignKey.target_table),\n          {\n            name: relationKey(\n              candidate.table,\n              secondForeignKey.constraint_name\n            ),\n            targetSchema: secondForeignKey.target_schema,\n            targetTable: secondForeignKey.target_table,\n          }\n        );\n\n        upsertRelation(\n          secondTarget,\n          relationKey(candidate.table, firstForeignKey.target_table),\n          {\n            name: relationKey(candidate.table, firstForeignKey.constraint_name),\n            targetSchema: firstForeignKey.target_schema,\n            targetTable: firstForeignKey.target_table,\n          }\n        );\n      }\n    },\n    addPrimaryKeyRows(primaryKeyRows: readonly PrimaryKeyRow[]) {\n      for (const row of primaryKeyRows) {\n        const table = ensureTable(row.schema_name, row.table_name);\n        const primaryKey = coerceStringArray(row.columns);\n\n        table.primaryKey = primaryKey;\n\n        for (const columnName of primaryKey) {\n          const column = table.columns.find(\n            (candidate) => candidate.name === columnName\n          );\n\n          if (column) {\n            column.isPrimaryKey = true;\n          }\n        }\n      }\n    },\n    toResponse(database: string): AthenaTableCatalogResponse {\n      return {\n        database,\n        generatedAt: new Date().toISOString(),\n        tables: [...tables.values()]\n          .map<AthenaTableCatalogTable>((table) => ({\n            columns: [...table.columns].sort(\n              (\n                left: AthenaTableCatalogColumn,\n                right: AthenaTableCatalogColumn\n              ) => left.name.localeCompare(right.name)\n            ),\n            id: table.id,\n            name: table.name,\n            primaryKey: [...table.primaryKey],\n            relations: [...table.relationMap.values()]\n              .map<AthenaTableCatalogRelation>((relation) => ({\n                columns:\n                  tables.get(\n                    tableKey(relation.targetSchema, relation.targetTable)\n                  )?.columns ?? [],\n                name: relation.name,\n                targetSchema: relation.targetSchema,\n                targetTable: relation.targetTable,\n              }))\n              .sort(\n                (\n                  left: AthenaTableCatalogRelation,\n                  right: AthenaTableCatalogRelation\n                ) => left.name.localeCompare(right.name)\n              ),\n            schema: table.schema,\n          }))\n          .sort(\n            (left: AthenaTableCatalogTable, right: AthenaTableCatalogTable) =>\n              left.id.localeCompare(right.id)\n          ),\n      };\n    },\n  };\n}\n\nasync function queryRows<Row extends object>(\n  client: AthenaTableCatalogQueryClient,\n  query: string\n) {\n  const result = await client.query(query);\n\n  if (result.error || result.status < 200 || result.status >= 300) {\n    const errorMessage =\n      typeof result.error === \"string\"\n        ? result.error\n        : result.error &&\n            typeof result.error === \"object\" &&\n            \"message\" in result.error &&\n            typeof result.error.message === \"string\"\n          ? result.error.message\n          : `Athena gateway query failed with status ${result.status}.`;\n\n    throw new Error(errorMessage);\n  }\n\n  return Array.isArray(result.data) ? (result.data as Row[]) : [];\n}\n\n/**\n * Whether `value` has the required string fields for schema catalog config.\n */\nexport function isAthenaTableSchemaConfig(\n  value: unknown\n): value is AthenaTableSchemaConfig {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n\n  const config = value as Record<string, unknown>;\n\n  return (\n    typeof config.gatewayUrl === \"string\" &&\n    typeof config.gatewayKey === \"string\" &&\n    typeof config.gatewayDatabase === \"string\" &&\n    typeof config.schemaScope === \"string\" &&\n    typeof config.clientName === \"string\"\n  );\n}\n\n/**\n * Whether gateway credentials are non-empty after trim.\n */\nexport function hasAthenaTableSchemaCredentials(\n  config: AthenaTableSchemaConfig\n): boolean {\n  return (\n    config.gatewayUrl.trim().length > 0 &&\n    config.gatewayKey.trim().length > 0 &&\n    config.gatewayDatabase.trim().length > 0\n  );\n}\n\n/**\n * Introspect tables, columns, primary keys, and relations for the schemas in\n * `config.schemaScope` via the Athena gateway SQL API.\n */\nexport async function fetchAthenaTableCatalog(\n  config: AthenaTableSchemaConfig,\n  options: FetchAthenaTableCatalogOptions = {}\n): Promise<AthenaTableCatalogResponse> {\n  const schemas = parseAthenaTableSchemaScope(config.schemaScope);\n  if (schemas.length === 0) {\n    return {\n      database: config.gatewayDatabase,\n      generatedAt: new Date().toISOString(),\n      tables: [],\n    };\n  }\n\n  const queries = buildAthenaTableCatalogQueries(schemas);\n  const client =\n    options.client ??\n    (createClient as (c: unknown) => NonNullable<typeof options.client>)({\n      client: config.clientName.trim() || undefined,\n      key: config.gatewayKey.trim(),\n      url: config.gatewayUrl.trim(),\n    });\n\n  const [columnRows, primaryKeyRows, foreignKeyRows] = await Promise.all([\n    queryRows<ColumnRow>(client, queries.columns),\n    queryRows<PrimaryKeyRow>(client, queries.primaryKeys),\n    queryRows<ForeignKeyRow>(client, queries.foreignKeys),\n  ]);\n  const catalog = createTableCatalog();\n\n  catalog.addColumnRows(columnRows);\n  catalog.addPrimaryKeyRows(primaryKeyRows);\n  catalog.addForeignKeyRows(foreignKeyRows);\n  catalog.addManyToManyRows(foreignKeyRows);\n\n  return catalog.toResponse(config.gatewayDatabase);\n}\n\n/** @deprecated Prefer {@link fetchAthenaTableCatalog}. */\nexport const fetchTableCatalog = fetchAthenaTableCatalog;\n","import {\n  type AthenaTableCatalogQueryClient,\n  type FetchAthenaTableCatalogOptions,\n  fetchAthenaTableCatalog,\n  hasAthenaTableSchemaCredentials,\n  isAthenaTableSchemaConfig,\n} from \"./catalog.ts\";\nimport type {\n  AthenaTableCatalogResponse,\n  AthenaTableSchemaConfig,\n} from \"./types.ts\";\n\n/** Default path for the table schema catalog App Router route. */\nexport const ATHENA_TABLE_SCHEMA_ROUTE = \"/api/tables/schema\";\n\nexport interface AthenaTableSchemaHandlerOptions\n  extends FetchAthenaTableCatalogOptions {\n  /**\n   * Optional transform after a valid config is parsed (e.g. fill defaults from\n   * server env). Return `null` to reject with 400.\n   */\n  resolveConfig?: (\n    config: AthenaTableSchemaConfig,\n    request: Request\n  ) => AthenaTableSchemaConfig | null | Promise<AthenaTableSchemaConfig | null>;\n}\n\n/**\n * Build a JSON `Response` with optional status and headers.\n *\n * @internal\n */\nfunction json(\n  body: unknown,\n  init?: {\n    status?: number;\n    headers?: HeadersInit;\n  }\n): Response {\n  const headers = new Headers(init?.headers);\n  if (!headers.has(\"content-type\")) {\n    headers.set(\"content-type\", \"application/json; charset=utf-8\");\n  }\n  return new Response(JSON.stringify(body), {\n    headers,\n    status: init?.status ?? 200,\n  });\n}\n\n/**\n * Handle `POST /api/tables/schema` — introspect gateway table metadata.\n *\n * Expected body: `{ \"config\": AthenaTableSchemaConfig }`.\n *\n * @returns `200` catalog JSON, `400` for invalid config, `500` on failure\n */\nexport async function handleAthenaTableSchemaPost(\n  request: Request,\n  options?: AthenaTableSchemaHandlerOptions\n): Promise<Response> {\n  const payload = (await request.json().catch(() => null)) as {\n    config?: unknown;\n  } | null;\n  let config: AthenaTableSchemaConfig | null = isAthenaTableSchemaConfig(\n    payload?.config\n  )\n    ? payload.config\n    : null;\n\n  if (config && options?.resolveConfig) {\n    config = await options.resolveConfig(config, request);\n  }\n\n  if (!(config && isAthenaTableSchemaConfig(config))) {\n    return json(\n      {\n        error: \"The Athena tables showcase config is invalid.\",\n      },\n      { status: 400 }\n    );\n  }\n\n  if (!hasAthenaTableSchemaCredentials(config)) {\n    return json(\n      {\n        error:\n          \"Gateway URL, API key, and database are required for schema introspection.\",\n      },\n      { status: 400 }\n    );\n  }\n\n  try {\n    const response: AthenaTableCatalogResponse = await fetchAthenaTableCatalog(\n      config,\n      {\n        client: options?.client,\n      }\n    );\n\n    return json(response);\n  } catch (error) {\n    return json(\n      {\n        error:\n          error instanceof Error\n            ? error.message\n            : \"Athena schema introspection failed.\",\n      },\n      { status: 500 }\n    );\n  }\n}\n\n/**\n * Create App Router handlers for the table schema catalog route.\n *\n * Drop into a route file with no additional wiring:\n *\n * @example\n * ```ts\n * // app/api/tables/schema/route.ts\n * import { createAthenaTableSchemaHandlers } from '@xylex-group/athena'\n *\n * export const dynamic = 'force-dynamic'\n * export const { POST } = createAthenaTableSchemaHandlers()\n * ```\n *\n * @param options - Optional client injection or config resolution\n * @returns Object with a `POST` route handler\n */\nexport function createAthenaTableSchemaHandlers(\n  options?: AthenaTableSchemaHandlerOptions\n) {\n  return {\n    POST: (request: Request) => handleAthenaTableSchemaPost(request, options),\n  };\n}\n\nexport type { AthenaTableCatalogQueryClient };\n","/**\n * Node/server Athena client entry.\n *\n * Construction: normalizeUniversalConfig → resolveRuntimePlan →\n * validateRuntimePlan → materializeRuntimePlan → assembleAthenaClient.\n * Node backends live in `src/runtime/materializers/`.\n *\n * Browser-facing entries (`./browser.ts`, `./next/client.ts`,\n * `./react-native/client.ts`, `./tables/catalog.ts`) must import from\n * `./v3-client-core.ts` instead so `pg` / Node built-ins never enter the\n * browser dependency graph.\n */\n\nimport { createEmbeddedCapabilitySnapshot } from \"./auth/capabilities.ts\";\nimport { resolveAthenaClientCapabilitiesIr } from \"./capabilities/assembly.ts\";\nimport { fingerprintAthenaCapabilitiesIr } from \"./capabilities/ir/fingerprint.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 AthenaPasskeyOnboardingOptions,\n  athenaAuthConfig,\n  isDisabledAthenaAuthConfig,\n  isLocalAthenaAuthConfig,\n  normalizeAthenaAuthConfig,\n} from \"./auth/config.ts\";\nimport { assertLocalAuthHooks } from \"./auth/hooks/assert-local.ts\";\nimport type { AthenaAuthHooks } from \"./auth/hooks/types.ts\";\nimport { createAthenaAuthProxyHandlers } from \"./auth/http/proxy.ts\";\nimport { createAuthDatabaseFromRuntime } from \"./auth/local/database.ts\";\nimport { createEmbeddedAuthEmailTemplateStore } from \"./auth/local/email/template-store.ts\";\nimport { createAthenaAuthRuntime } from \"./auth/local/runtime.ts\";\nimport { advertisedSocialProviderIds } from \"./auth/local/social/runtime.ts\";\nimport { assertLocalAuthObservability } from \"./auth/observability/config.ts\";\nimport { normalizeSocialAuthConfig } from \"./auth/social/node/social-config.ts\";\n\nimport type { AthenaAuthServerBindings } from \"./auth/types.ts\";\nimport { resolveBillingWebhookApplicationId } from \"./billing/ingestion/application-id.ts\";\nimport { releaseEmbeddedBillingRuntimeOwner } from \"./billing/runtime/local/process-ownership.ts\";\nimport type { AthenaRootClient } from \"./client-brands.ts\";\nimport type { R2BucketLike } from \"./cloudflare/types.ts\";\nimport { createEmailDeliveryPort } from \"./email/delivery-port.ts\";\nimport { bindAthenaEmailTemplateStore } from \"./email/module.ts\";\nimport type {\n  AthenaEmailModule,\n} from \"./email/types.ts\";\nimport { createPostgresNotificationPreferenceStore } from \"./notifications/postgres-store.ts\";\nimport type { AthenaNotificationsModule } from \"./notifications/types.ts\";\nimport {\n  bindPostgresRuntime,\n  createAthenaPostgresRuntime,\n  getBoundPostgresRuntime,\n} from \"./postgres/owned-runtime.ts\";\nimport type { AthenaPostgresPool } from \"./postgres/driver.ts\";\nimport {\n  attachAthenaClientInternals,\n  createRootClientInternals,\n  getAthenaClientInternals,\n  requireAthenaRootClientInternals,\n} from \"./runtime/client-internals.ts\";\nimport { rolesIrFromAuthorizationGraph } from \"./runtime/authorization/state.ts\";\nimport { normalizeAthenaAuthorizationConfig } from \"./runtime/authorization/normalize-config.ts\";\nimport { createAthenaAuthorizationModelIndex } from \"./runtime/authorization/model-index.ts\";\nimport { assertDataLifecycleConfig } from \"./runtime/data/lifecycle/assert.ts\";\nimport { bootstrapLocalBillingRuntime } from \"./runtime/materializers/billing.ts\";\nimport { disposeMaterializedDatabase } from \"./runtime/materializers/database.ts\";\nimport {\n  createAthenaClientLifecycle,\n  recordAuthRuntimeCreated,\n} from \"./runtime/ownership.ts\";\nimport {\n  type AthenaMaterializedRuntime,\n  materializeRuntimePlan,\n} from \"./runtime/plan/materialize.ts\";\nimport { resolveAthenaConstruction } from \"./runtime/construction/resolve.ts\";\nimport type { AthenaRuntimeConfigBindings } from \"./runtime/construction/types.ts\";\nimport { normalizeUniversalConfig } from \"./runtime/plan/normalize.ts\";\nimport { resolveRuntimePlan } from \"./runtime/plan/resolve.ts\";\nimport { toResolvedAthenaRuntime } from \"./runtime/plan/types.ts\";\nimport { validateRuntimePlan } from \"./runtime/plan/validate.ts\";\nimport { inferEmbeddedAuthMode } from \"./runtime/resolve.ts\";\nimport type { AthenaClientModelsInput } from \"./schema/types.ts\";\nimport {\n  createStorageRuntime,\n  getStorageProvider,\n  getStorageRuntime,\n} from \"./storage/runtime/index.ts\";\nimport {\n  createClientWithNormalizer,\n  type AthenaClient,\n  type AthenaClientConfig,\n  type AthenaClientConfigWithR2,\n  type AthenaClientWithR2Storage,\n} from \"./client/create-client.ts\";\nimport { replaceClientNotificationPreferenceStore } from \"./client/compose/notifications.ts\";\nimport { normalizeOptional } from \"./client/config/predicates.ts\";\nimport { AthenaConfigurationError } from \"./config/errors.ts\";\n\nexport type {\n  AthenaRequestClient,\n  AthenaRequestClientBrand,\n  AthenaRootClient,\n  AthenaRootClientBrand,\n} from \"./client-brands.ts\";\nexport * from \"./v3-client-core.ts\";\n\ntype EmbeddedAuthRuntimeConfigSlice = {\n  hooks?: AthenaAuthHooks;\n  passkey?: {\n    onboarding?: boolean | AthenaPasskeyOnboardingOptions;\n  };\n};\n\nfunction attachRemoteAuthHandlers<TClient extends { auth: unknown }>(\n  client: TClient,\n  config: AthenaClientConfig<AthenaClientModelsInput | undefined>\n): TClient {\n  if (\n    isDisabledAthenaAuthConfig(config.auth) ||\n    isLocalAthenaAuthConfig(config.auth)\n  ) {\n    return client;\n  }\n  const authObject = athenaAuthConfig(config.auth);\n  const authUrl = normalizeOptional(authObject?.url);\n  if (!(authUrl || authObject?.routing === \"same-origin\")) {\n    return client;\n  }\n  const auth = client.auth as object;\n  if (Object.hasOwn(auth, \"handlers\")) {\n    return client;\n  }\n  Object.assign(auth, {\n    handlers: createAthenaAuthProxyHandlers(() => ({ client })),\n  });\n  return client;\n}\n\nfunction rejectUnsupportedEmbeddedAuthFeatures(auth: unknown): void {\n  if (!auth || typeof auth !== \"object\") {\n    return;\n  }\n  const raw = auth as Record<string, unknown>;\n  if (raw.passkeys || raw.webauthn) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_FEATURE_UNSUPPORTED\",\n      \"Embedded Athena Auth does not implement WebAuthn/passkeys. Use dedicated Athena Auth (auth.url) or omit the option.\",\n      \"auth\"\n    );\n  }\n  for (const key of [\"oauth\", \"social\", \"socialProviders\"] as const) {\n    const value = raw[key];\n    if (value === undefined) {\n      continue;\n    }\n    if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_RUNTIME_CONFIG_INVALID\",\n        `auth.${key} must be an object provider map, not ${value === true ? \"true\" : typeof value}.`,\n        \"auth\"\n      );\n    }\n  }\n  if (raw.grants) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_FEATURE_UNSUPPORTED\",\n      \"Embedded Athena Auth does not implement grants. Map authorization to athena.policy / athena-rights, or use dedicated Athena Auth (auth.url).\",\n      \"auth\"\n    );\n  }\n  const emailBag = raw.email;\n  if (emailBag && typeof emailBag === \"object\" && !Array.isArray(emailBag)) {\n    const nested = emailBag as Record<string, unknown>;\n    if (\"provider\" in nested || \"smtp\" in nested || \"resend\" in nested) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_AUTH_FEATURE_UNSUPPORTED\",\n        \"Auth does not own email transport. Configure createClient({ email: { provider } }) and inject the root email module into local Auth.\",\n        \"auth\"\n      );\n    }\n  }\n}\n\nconst AUTH_RUNTIME_CACHE = Symbol.for(\"@xylex-group/athena.authRuntimes\");\n\nfunction authRuntimeCache(): WeakMap<\n  object,\n  ReturnType<typeof createAthenaAuthRuntime>\n> {\n  const holder = globalThis as typeof globalThis & {\n    [AUTH_RUNTIME_CACHE]?: WeakMap<\n      object,\n      ReturnType<typeof createAthenaAuthRuntime>\n    >;\n  };\n  holder[AUTH_RUNTIME_CACHE] ??= new WeakMap();\n  return holder[AUTH_RUNTIME_CACHE];\n}\n\nfunction attachLocalAuthRuntime<\n  TClient extends { auth: unknown; email: AthenaEmailModule },\n>(\n  client: TClient,\n  config: AthenaClientConfig<AthenaClientModelsInput | undefined>,\n  plan = resolveRuntimePlan(config, {\n    environment: \"node\",\n    trustedNode: true,\n  })\n): TClient {\n  if (isDisabledAthenaAuthConfig(config.auth)) {\n    return client;\n  }\n  if (!isLocalAthenaAuthConfig(config.auth)) {\n    assertLocalAuthHooks(athenaAuthConfig(config.auth));\n    assertLocalAuthObservability(athenaAuthConfig(config.auth));\n    return attachRemoteAuthHandlers(client, config);\n  }\n  rejectUnsupportedEmbeddedAuthFeatures(athenaAuthConfig(config.auth));\n  const pgUri = normalizeOptional(config.db?.pgUri);\n  const postgresRuntime =\n    getBoundPostgresRuntime(config.gatewayTransport) ??\n    (pgUri\n      ? createAthenaPostgresRuntime({ connectionString: pgUri })\n      : config.db?.pool\n        ? createAthenaPostgresRuntime({\n            pool: config.db.pool as AthenaPostgresPool,\n          })\n      : undefined);\n  if (!postgresRuntime) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_LOCAL_DATABASE_REQUIRED\",\n      'auth.mode \"local\" requires db.pgUri, databaseUrl, or db.pool.',\n      \"auth\"\n    );\n  }\n  if (config.gatewayTransport) {\n    bindPostgresRuntime(config.gatewayTransport, postgresRuntime);\n  }\n  const normalized = {\n    ...normalizeAthenaAuthConfig(config.auth, {\n      app: config.app,\n      env: config.env,\n    }),\n    social: normalizeSocialAuthConfig(\n      (athenaAuthConfig(config.auth) ?? {}) as Record<string, unknown>\n    ),\n  };\n  const delivery = createEmailDeliveryPort(client.email);\n  const rawAuth = athenaAuthConfig(config.auth) as\n    | EmbeddedAuthRuntimeConfigSlice\n    | undefined;\n  const hooks = rawAuth?.hooks;\n  const passkeyOnboarding = rawAuth?.passkey?.onboarding;\n  const cachedAuth = authRuntimeCache().get(postgresRuntime);\n  if (cachedAuth) {\n    if (cachedAuth.hooksRef !== hooks) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_AUTH_RUNTIME_CONFIG_CONFLICT\",\n        \"Embedded Auth runtime is already cached for this PostgreSQL connection with a different auth.hooks object. Reuse the same hooks reference, or use a distinct database runtime.\",\n        \"auth\"\n      );\n    }\n    cachedAuth.setDelivery(delivery);\n  }\n  const runtime =\n    cachedAuth ??\n    createAthenaAuthRuntime({\n      autoMigrate: normalized.autoMigrate,\n      config: normalized,\n      database: createAuthDatabaseFromRuntime(postgresRuntime),\n      delivery,\n      emailDefaultsFrom: client.email.diagnostics.defaults.from,\n      emailDefaultsFromName: client.email.diagnostics.defaults.fromName,\n      hooks,\n      passkeyOnboarding,\n      secret: normalized.secret,\n    });\n  if (!cachedAuth) {\n    authRuntimeCache().set(postgresRuntime, runtime);\n    recordAuthRuntimeCreated();\n  }\n  bindAthenaEmailTemplateStore(\n    client.email,\n    createEmbeddedAuthEmailTemplateStore(runtime)\n  );\n  const server: AthenaAuthServerBindings = {\n    handle: (request) => runtime.handle(request),\n    handlers: runtime.handlers,\n    migrate: () => {\n      requireAthenaRootClientInternals(client, \"auth.server.migrate\");\n      return runtime.migrate();\n    },\n  };\n  Object.assign(client.auth as object, {\n    handlers: runtime.handlers,\n    server,\n  });\n  const capabilities = (\n    client.auth as {\n      capabilities?: {\n        set: (\n          next: ReturnType<typeof createEmbeddedCapabilitySnapshot>\n        ) => void;\n      };\n    }\n  ).capabilities;\n  capabilities?.set(\n    createEmbeddedCapabilitySnapshot({\n      passkeyEnabled: normalized.passkey.enabled,\n      passkeyOnboarding: normalized.passkey.onboardingEnabled,\n      socialProviders: advertisedSocialProviderIds(normalized.social),\n    })\n  );\n  attachAthenaClientInternals(\n    client,\n    createRootClientInternals({\n      authRuntime: runtime,\n      authorizationConfig: normalizeAthenaAuthorizationConfig(config),\n      authorizationModelIndex: createAthenaAuthorizationModelIndex(\n        normalizeAthenaAuthorizationConfig(config)\n      ),\n      config: config as AthenaClientConfig,\n      gatewayTransport: config.gatewayTransport,\n      getAuthStores: () => runtime.getStores(),\n      getRolesIr: async () => {\n        const stores = await runtime.getStores();\n        const inspectGraph = stores.authorization.inspectGraph;\n        if (!inspectGraph) {\n          return;\n        }\n        const current = getAthenaClientInternals(client);\n        if (!current?.rightsAuthority) {\n          return;\n        }\n        return rolesIrFromAuthorizationGraph(\n          await inspectGraph.call(stores.authorization),\n          current.rightsAuthority\n        );\n      },\n      plan: toResolvedAthenaRuntime(plan),\n      postgresRuntime,\n    })\n  );\n  return client;\n}\n\nfunction prepareNodeRuntimePlan<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): {\n  config: AthenaClientConfig<TModels>;\n  materialized: AthenaMaterializedRuntime<TModels>;\n} {\n  const next = inferEmbeddedAuthMode(normalizeUniversalConfig(config));\n  rejectUnsupportedEmbeddedAuthFeatures(athenaAuthConfig(next.auth));\n  assertLocalAuthHooks(athenaAuthConfig(next.auth));\n  assertLocalAuthObservability(athenaAuthConfig(next.auth));\n  if (\n    isLocalAthenaAuthConfig(next.auth) &&\n    !normalizeOptional(next.db?.pgUri) && !next.db?.pool\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_LOCAL_DATABASE_REQUIRED\",\n      'auth.mode \"local\" requires db.pgUri, databaseUrl, or db.pool. The TypeScript Athena Auth runtime talks to PostgreSQL directly.',\n      \"auth\"\n    );\n  }\n  const plan = resolveRuntimePlan(next, {\n    environment: \"node\",\n    trustedNode: true,\n  });\n  validateRuntimePlan(plan);\n  const construction = resolveAthenaConstruction(next, plan);\n  const materialized = materializeRuntimePlan(construction);\n  return {\n    config: applyRuntimeBindings(next, materialized.bindings),\n    materialized,\n  };\n}\n\nfunction applyRuntimeBindings<\n  TModels extends AthenaClientModelsInput | undefined,\n>(\n  config: AthenaClientConfig<TModels>,\n  bindings: AthenaRuntimeConfigBindings<TModels>,\n): AthenaClientConfig<TModels> {\n  return {\n    ...config,\n    ...(bindings.capabilities ? { capabilities: bindings.capabilities } : {}),\n    ...(bindings.findManyAst === undefined\n      ? {}\n      : { findManyAst: bindings.findManyAst }),\n    ...(bindings.gatewayTransport\n      ? { gatewayTransport: bindings.gatewayTransport }\n      : {}),\n    ...(bindings.key === undefined ? {} : { key: bindings.key }),\n    ...(bindings.db\n      ? { db: { ...config.db, ...bindings.db } }\n      : {}),\n    ...(bindings.storage\n      ? { storage: { ...config.storage, ...bindings.storage } }\n      : {}),\n    ...(bindings.chatRuntime\n      ? { chatRuntime: bindings.chatRuntime }\n      : {}),\n  };\n}\n\nfunction attachLocalNotificationsRuntime(client: {\n  notifications: AthenaNotificationsModule;\n}): void {\n  const internals = getAthenaClientInternals(client);\n  const postgres = internals?.postgresRuntime;\n  if (!postgres) {\n    return;\n  }\n  replaceClientNotificationPreferenceStore(\n    client,\n    createPostgresNotificationPreferenceStore({\n      query: async (text, values) => {\n        const result = await postgres.query(text, values);\n        return { rows: result.rows as Record<string, unknown>[] };\n      },\n      transaction: async (fn) =>\n        postgres.transaction(async (tx) =>\n          fn({\n            query: async (text, values) => {\n              const result = await tx.query(text, values);\n              return { rows: result.rows as Record<string, unknown>[] };\n            },\n          })\n        ),\n    })\n  );\n}\n\nfunction assembleAthenaClient<\n  TModels extends AthenaClientModelsInput | undefined,\n>(\n  prepared: {\n    config: AthenaClientConfig<TModels>;\n    materialized: AthenaMaterializedRuntime<TModels>;\n  },\n):\n  | AthenaRootClient<AthenaClient<TModels>>\n  | AthenaRootClient<AthenaClientWithR2Storage<TModels>> {\n  const { config: resolved, materialized } = prepared;\n  // Nuclear casts: see v3-client-core createClient (TS2589).\n  const factory = createClientWithNormalizer as unknown as (\n    input: unknown,\n    normalizer: (c: unknown) => unknown,\n    runtimeBindings?: { billing?: unknown; billingRuntime?: unknown }\n  ) => unknown;\n  const client: unknown = factory(resolved, (next: unknown) => next, {\n    billing: materialized.billing.module,\n    ...(materialized.billing.kind === \"local\"\n      ? { billingRuntime: materialized.billing.runtime }\n      : {}),\n  });\n  const withAuth = attachLocalAuthRuntime(\n    client as AthenaClient<TModels>,\n    resolved,\n    materialized.plan\n  );\n  const authorizationConfig = normalizeAthenaAuthorizationConfig(resolved);\n  const authorizationModelIndex =\n    createAthenaAuthorizationModelIndex(authorizationConfig);\n  const existing = getAthenaClientInternals(withAuth);\n  const billingProviderRegistry =\n    existing?.billingProviderRegistry ??\n    (materialized.billing.kind === \"local\"\n      ? materialized.billing.registry\n      : undefined);\n  const postgresRuntime =\n    existing?.postgresRuntime ??\n    materialized.database.postgresRuntime ??\n    getBoundPostgresRuntime(resolved.gatewayTransport);\n  const lifecycle = existing?.lifecycle ?? createAthenaClientLifecycle();\n  const provider = getStorageProvider(resolved.storage);\n  const storageRuntime =\n    existing?.storageRuntime ??\n    getStorageRuntime(resolved.storage) ??\n    (provider\n      ? createStorageRuntime({\n          lifecycle: resolved.lifecycle?.storage,\n          provider,\n        })\n      : undefined);\n  let capabilityStoreUnsubscribe: (() => void) | undefined;\n  const close = async (): Promise<void> => {\n    if (lifecycle.closed) {\n      return;\n    }\n    lifecycle.closed = true;\n    capabilityStoreUnsubscribe?.();\n    const currentInternals = getAthenaClientInternals(withAuth);\n    const ownerKey = currentInternals?.billingRuntimeOwnerKey;\n    const generation = currentInternals?.billingRuntimeGeneration;\n    if (ownerKey != null && generation != null) {\n      await releaseEmbeddedBillingRuntimeOwner(ownerKey, generation);\n    } else {\n      currentInternals?.billingPlanChangeRecoveryScheduler?.cancel();\n      await currentInternals?.billingPlanChangeRecoveryScheduler?.drain();\n      for (const handle of currentInternals?.billingSchedulerHandles ?? []) {\n        handle.cancel();\n        await handle.drain();\n      }\n    }\n    await existing?.authRuntime?.close();\n    if (resolved.gatewayTransport) {\n      await disposeMaterializedDatabase(resolved.gatewayTransport);\n    }\n    if (\n      materialized.plan.db.transport === \"sqlite\" &&\n      materialized.plan.db.ownership === \"owned\" &&\n      materialized.database.sqliteExecutor?.close\n    ) {\n      await materialized.database.sqliteExecutor.close();\n    }\n    await postgresRuntime?.close();\n  };\n  attachAthenaClientInternals(\n    withAuth,\n    createRootClientInternals({\n      authRuntime: existing?.authRuntime,\n      authorizationConfig,\n      authorizationModelIndex,\n      billingProviderRegistry,\n      close,\n      config: resolved as AthenaClientConfig,\n      gatewayTransport: resolved.gatewayTransport,\n      getAuthStores: existing?.getAuthStores,\n      getRolesIr: existing?.getRolesIr,\n      lifecycle,\n      plan: toResolvedAthenaRuntime(materialized.plan),\n      postgresRuntime,\n      rightsFingerprint: existing?.rightsFingerprint,\n      rightsIr: existing?.rightsIr,\n      rolesFingerprint: existing?.rolesFingerprint,\n      rolesIr: existing?.rolesIr,\n      runtimeOwnership:\n        postgresRuntime?.ownership === \"borrowed\" ? \"borrowed\" : \"owned\",\n      storageRuntime,\n    })\n  );\n  if (materialized.billing.kind === \"local\") {\n    bootstrapLocalBillingRuntime(withAuth, {\n      applicationId: resolveBillingWebhookApplicationId({\n        app: resolved.app,\n        client: resolved.client,\n      }),\n      appUrl: resolved.app?.url,\n      catalog: resolved.billing?.catalog,\n      configuredProviders: resolved.billing?.providers,\n      customerImport: resolved.billing?.import,\n      ingestion: resolved.billing?.ingestion,\n      mode: resolved.billing?.mode,\n      observability: resolved.billing?.observability,\n      registry: billingProviderRegistry,\n      selfEnrollment: resolved.billing?.selfEnrollment,\n      testMode: resolved.billing?.testMode,\n      binding: materialized.billing,\n    });\n  }\n  attachLocalNotificationsRuntime(withAuth);\n  const assembledInternals = getAthenaClientInternals(withAuth);\n  if (assembledInternals) {\n    const query =\n      materialized.plan.db.transport === \"d1\"\n        ? D1_QUERY_CAPABILITIES\n        : materialized.plan.db.transport === \"postgres\"\n          ? POSTGRES_QUERY_CAPABILITIES\n          : materialized.plan.db.transport === \"sqlite\"\n            ? SQLITE_LOCAL_QUERY_CAPABILITIES\n            : GATEWAY_QUERY_CAPABILITIES;\n    const refreshCapabilities = (): void => {\n      const authCapabilitiesAvailable =\n        Boolean(existing?.authRuntime) ||\n        Boolean(\n          normalizeOptional(athenaAuthConfig(resolved.auth)?.url) ||\n            athenaAuthConfig(resolved.auth)?.routing === \"same-origin\"\n        );\n      const capabilitiesIr = resolveAthenaClientCapabilitiesIr({\n        base: withAuth.capabilities,\n        query,\n        auth:\n          resolved.auth === undefined ||\n          isDisabledAthenaAuthConfig(resolved.auth) ||\n          materialized.plan.auth.runtime === \"disabled\" ||\n          !authCapabilitiesAvailable\n            ? undefined\n            : withAuth.auth.capabilities.getSnapshot(),\n        billingProvider: resolved.billing?.providers\n          ? Object.keys(resolved.billing.providers)[0] ?? \"configured\"\n          : undefined,\n        chat:\n          materialized.plan.chat.transport === \"none\"\n            ? undefined\n            : withAuth.chat.capabilities,\n        storage: {\n          backups: withAuth.capabilities.storage.backups,\n          catalogs: withAuth.capabilities.storage.catalogs,\n          objects:\n            Boolean(storageRuntime) || withAuth.capabilities.storage.objects,\n          source: materialized.plan.storage.transport,\n        },\n      });\n      assembledInternals.capabilitiesIr = capabilitiesIr;\n      assembledInternals.capabilitiesFingerprint =\n        fingerprintAthenaCapabilitiesIr(capabilitiesIr);\n    };\n    refreshCapabilities();\n    if (\n      resolved.auth !== undefined &&\n      !isDisabledAthenaAuthConfig(resolved.auth) &&\n      materialized.plan.auth.runtime !== \"disabled\" &&\n      (Boolean(existing?.authRuntime) ||\n        Boolean(\n          normalizeOptional(athenaAuthConfig(resolved.auth)?.url) ||\n            athenaAuthConfig(resolved.auth)?.routing === \"same-origin\"\n        ))\n    ) {\n      capabilityStoreUnsubscribe =\n        withAuth.auth.capabilities.subscribe(refreshCapabilities);\n    }\n  }\n  return withAuth as\n    | AthenaRootClient<AthenaClient<TModels>>\n    | AthenaRootClient<AthenaClientWithR2Storage<TModels>>;\n}\n\n/**\n * Materialize an Athena client (single public constructor).\n *\n * Node/server runtime: in addition to the universal pipeline, `db.pgUri`\n * selects the direct PostgreSQL transport backed by `pg`.\n *\n * @docsCanonical\n * @docsRuntime node\n * @docsRole root-client-constructor\n * @docsRelated createAthenaNextHandlers\n * @since 5.0.0\n */\nexport function createClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n  config:\n    | (AthenaClientConfig<TModels> & { r2: R2BucketLike })\n    | AthenaClientConfigWithR2<TModels>\n): AthenaRootClient<AthenaClientWithR2Storage<TModels>>;\nexport function createClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaClientConfig<TModels>): AthenaRootClient<AthenaClient<TModels>>;\nexport function createClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n  config: AthenaClientConfig<TModels>\n):\n  | AthenaRootClient<AthenaClient<TModels>>\n  | AthenaRootClient<AthenaClientWithR2Storage<TModels>> {\n  assertDataLifecycleConfig(config);\n  // Nuclear casts: assembleAthenaClient generics overflow TS depth during dts emit (TS2589).\n  const prepare = prepareNodeRuntimePlan as (c: unknown) => unknown;\n  const assemble = assembleAthenaClient as (c: unknown) => unknown;\n  return assemble(prepare(config)) as AthenaRootClient<AthenaClient<TModels>>;\n}\n","import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils.js\";\nimport { canonicalizeAthenaCapabilitiesIr } from \"./canonicalize.ts\";\n\nexport function fingerprintAthenaCapabilitiesIr(value: unknown): string {\n  const canonical = canonicalizeAthenaCapabilitiesIr(value);\n  return bytesToHex(\n    sha256(\n      utf8ToBytes(\n        JSON.stringify({\n          capabilities: canonical.capabilities,\n          irVersion: canonical.irVersion,\n          kind: canonical.kind,\n        })\n      )\n    )\n  );\n}\n","/**\n * Same-origin Athena Auth HTTP proxy (framework-agnostic).\n *\n * Next.js App Router is one consumer; the implementation is not a Next adapter.\n *\n * Prefer:\n *   createAthenaAuthProxyHandlers({ client: athena })\n *\n * Advanced (no client — mutually exclusive):\n *   createAthenaAuthProxyHandlers({ upstreamUrl: \"https://auth.example.com\" })\n */\n\nimport { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport { requireAthenaRootClientInternals } from \"../../runtime/client-internals.ts\";\nimport {\n  ATHENA_AUTH_PATH,\n  type AthenaAuthUpstreamEnv,\n  resolveAthenaAuthUpstreamUrl,\n} from \"../../utils/athena-auth-url.ts\";\nimport { getAttachedAthenaAuthRouting } from \"../resolve-routing.ts\";\n\n/** Options for a single proxy hop (no client). */\nexport interface AthenaAuthProxyTransportOptions {\n  fetchImplementation?: typeof fetch;\n  /**\n   * When true (default for handler factories), strip Domain and relax Secure/SameSite\n   * for local http so the browser stores cookies on the app host.\n   */\n  rewriteSetCookiesToRequestOrigin?: boolean;\n  /** Local route prefix to strip before appending to upstream (default `/api/auth`). */\n  routePrefix?: string;\n  /** Already-resolved upstream origin/base (advanced). */\n  upstreamBaseUrl?: string;\n  /** Absolute upstream base (preferred explicit advanced form). */\n  upstreamUrl?: string | AthenaAuthUpstreamEnv;\n}\n\n/**\n * Preferred: derive upstream from a configured Athena client.\n * Do not pass upstreamUrl alongside client — dual authorities are rejected.\n */\nexport interface AthenaAuthProxyFromClientOptions {\n  client: object;\n  fetchImplementation?: typeof fetch;\n  rewriteSetCookiesToRequestOrigin?: boolean;\n  routePrefix?: string;\n}\n\nexport type AthenaAuthProxyOptions =\n  | AthenaAuthProxyFromClientOptions\n  | AthenaAuthProxyTransportOptions;\n\ntype AthenaAuthProxyHandler = (request: Request) => Promise<Response>;\n\ntype HeadersWithGetSetCookie = Headers & {\n  getSetCookie?: () => string[];\n};\n\nconst ATHENA_AUTH_SESSION_COOKIE_NAMES = [\n  \"athena-auth.session_token\",\n  \"athena-auth.session-token\",\n] as const;\n\nconst STRIP_PROXY_RESPONSE_HEADERS = new Set([\n  \"connection\",\n  \"content-encoding\",\n  \"content-length\",\n  \"keep-alive\",\n  \"proxy-authenticate\",\n  \"proxy-authorization\",\n  \"set-cookie\",\n  \"te\",\n  \"trailer\",\n  \"transfer-encoding\",\n  \"upgrade\",\n]);\n\nfunction stripTrailingSlashes(value: string) {\n  return value.replace(/\\/+$/g, \"\");\n}\n\nfunction isLocalProxyHostname(hostname: string) {\n  return (\n    hostname === \"localhost\" ||\n    hostname === \"127.0.0.1\" ||\n    hostname === \"::1\" ||\n    hostname.endsWith(\".localhost\") ||\n    hostname.endsWith(\".local\")\n  );\n}\n\nfunction escapeRegex(value: string) {\n  return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction stripRoutePrefix(pathname: string, routePrefix: string) {\n  const normalizedPrefix = stripTrailingSlashes(routePrefix.trim()) || \"/\";\n  const prefixPattern = new RegExp(`^${escapeRegex(normalizedPrefix)}\\\\/?`);\n  return pathname.replace(prefixPattern, \"\").replace(/^\\/+/, \"\");\n}\n\nfunction isFromClientOptions(\n  options: AthenaAuthProxyOptions\n): options is AthenaAuthProxyFromClientOptions {\n  return (\n    typeof options === \"object\" &&\n    options !== null &&\n    \"client\" in options &&\n    (options as AthenaAuthProxyFromClientOptions).client != null\n  );\n}\n\n/**\n * Resolve proxy upstream base. Enforces mutual exclusion of client vs explicit upstream.\n */\nexport function resolveAthenaAuthProxyUpstreamBaseUrl(\n  options: AthenaAuthProxyOptions = {}\n): string {\n  if (isFromClientOptions(options)) {\n    if (\"upstreamUrl\" in options || \"upstreamBaseUrl\" in options) {\n      const transport = options as AthenaAuthProxyFromClientOptions &\n        AthenaAuthProxyTransportOptions;\n      if (\n        transport.upstreamBaseUrl?.trim() ||\n        (typeof transport.upstreamUrl === \"string\"\n          ? transport.upstreamUrl.trim()\n          : transport.upstreamUrl)\n      ) {\n        throw new AthenaConfigurationError(\n          \"ATHENA_AUTH_PROXY_CONFIGURATION_INVALID\",\n          \"createAthenaAuthProxyHandlers accepts either { client } or { upstreamUrl }, not both. \" +\n            \"Configure upstream on the Athena client (auth.upstreamUrl / env) and pass only { client }.\",\n          \"auth\"\n        );\n      }\n    }\n\n    const routing = getAttachedAthenaAuthRouting(options.client);\n    if (routing?.proxyUpstreamBaseUrl) {\n      return stripTrailingSlashes(routing.proxyUpstreamBaseUrl);\n    }\n    // Prefer fail-closed: client is the authority. Do not silently proxy to the\n    // hosted default when same-origin was chosen without an upstream.\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_UPSTREAM_REQUIRED\",\n      \"createAthenaAuthProxyHandlers({ client }) needs a proxy upstream on the client. \" +\n        'Configure auth: { routing: \"same-origin\", upstreamUrl: \"https://auth.example.com\" } ' +\n        \"or set ATHENA_AUTH_UPSTREAM_URL (or aliases) before createClient.\",\n      \"auth\"\n    );\n  }\n\n  const transport = options;\n  if (transport.upstreamBaseUrl?.trim()) {\n    return stripTrailingSlashes(transport.upstreamBaseUrl.trim());\n  }\n  if (\n    transport.upstreamUrl !== undefined &&\n    transport.upstreamUrl !== null &&\n    !(\n      typeof transport.upstreamUrl === \"string\" && !transport.upstreamUrl.trim()\n    )\n  ) {\n    return stripTrailingSlashes(\n      resolveAthenaAuthUpstreamUrl(transport.upstreamUrl)\n    );\n  }\n  // Empty advanced options: env + hosted default (scaffold DX).\n  return stripTrailingSlashes(resolveAthenaAuthUpstreamUrl());\n}\n\n/** Decode a single cookie value; returns the raw string if decoding fails. */\nexport function decodeCookieValue(value: string) {\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    return value;\n  }\n}\n\n/**\n * Read one named cookie from a `Cookie` header string.\n * Values are URI-decoded when possible.\n */\nexport function readCookieValue(\n  cookieHeader: string | null | undefined,\n  name: string\n): string | undefined {\n  if (!cookieHeader) {\n    return;\n  }\n\n  for (const cookie of cookieHeader.split(\";\")) {\n    const separatorIndex = cookie.indexOf(\"=\");\n\n    if (separatorIndex === -1) {\n      continue;\n    }\n\n    const cookieName = cookie.slice(0, separatorIndex).trim();\n    if (cookieName !== name) {\n      continue;\n    }\n\n    return decodeCookieValue(cookie.slice(separatorIndex + 1).trim());\n  }\n}\n\n/** Convenience: read a cookie from a `Request`'s `cookie` header. */\nexport function readCookieValueFromRequest(request: Request, name: string) {\n  return readCookieValue(request.headers.get(\"cookie\"), name);\n}\n\nfunction readAthenaAuthSessionTokenCookie(\n  cookieHeader: string | null | undefined\n): string | undefined {\n  for (const cookieName of ATHENA_AUTH_SESSION_COOKIE_NAMES) {\n    const value = readCookieValue(cookieHeader, cookieName);\n    const trimmedValue = value?.trim();\n\n    if (trimmedValue) {\n      return trimmedValue;\n    }\n  }\n}\n\nfunction applySessionCookieAuthorizationHeader(headers: Headers) {\n  if (headers.has(\"authorization\")) {\n    return;\n  }\n\n  const sessionToken = readAthenaAuthSessionTokenCookie(headers.get(\"cookie\"));\n\n  if (sessionToken) {\n    headers.set(\"authorization\", `Bearer ${sessionToken}`);\n  }\n}\n\nfunction rewriteSetCookieForRequestOrigin(cookie: string, requestUrl: URL) {\n  const parts = cookie\n    .split(\";\")\n    .map((part) => part.trim())\n    .filter(Boolean);\n\n  if (parts.length === 0) {\n    return cookie;\n  }\n\n  const rewrittenParts = [parts[0]];\n  const isInsecureLocalRequest =\n    requestUrl.protocol === \"http:\" &&\n    isLocalProxyHostname(requestUrl.hostname);\n\n  for (const part of parts.slice(1)) {\n    const separatorIndex = part.indexOf(\"=\");\n    const attributeName =\n      separatorIndex === -1 ? part : part.slice(0, separatorIndex);\n    const attributeValue =\n      separatorIndex === -1 ? \"\" : part.slice(separatorIndex + 1);\n    const normalizedAttributeName = attributeName.trim().toLowerCase();\n\n    if (normalizedAttributeName === \"domain\") {\n      continue;\n    }\n\n    if (isInsecureLocalRequest && normalizedAttributeName === \"secure\") {\n      continue;\n    }\n\n    if (\n      isInsecureLocalRequest &&\n      normalizedAttributeName === \"samesite\" &&\n      attributeValue.trim().toLowerCase() === \"none\"\n    ) {\n      rewrittenParts.push(\"SameSite=Lax\");\n      continue;\n    }\n\n    rewrittenParts.push(part);\n  }\n\n  return rewrittenParts.join(\"; \");\n}\n\nfunction buildProxyResponseHeaders(\n  source: Headers,\n  requestUrl: URL,\n  rewriteSetCookiesToRequestOrigin: boolean\n) {\n  const headers = new Headers();\n\n  // Avoid Headers.entries() — not present on all DOM lib typings used by fixture tsc.\n  source.forEach((value, key) => {\n    if (STRIP_PROXY_RESPONSE_HEADERS.has(key.toLowerCase())) {\n      return;\n    }\n    headers.set(key, value);\n  });\n\n  const getSetCookie = (source as HeadersWithGetSetCookie).getSetCookie;\n  const setCookies =\n    typeof getSetCookie === \"function\"\n      ? getSetCookie.call(source as HeadersWithGetSetCookie)\n      : [];\n\n  if (setCookies.length > 0) {\n    for (const cookie of setCookies) {\n      headers.append(\n        \"set-cookie\",\n        rewriteSetCookiesToRequestOrigin\n          ? rewriteSetCookieForRequestOrigin(cookie, requestUrl)\n          : cookie\n      );\n    }\n  } else {\n    const setCookie = source.get(\"set-cookie\");\n    if (setCookie) {\n      headers.append(\n        \"set-cookie\",\n        rewriteSetCookiesToRequestOrigin\n          ? rewriteSetCookieForRequestOrigin(setCookie, requestUrl)\n          : setCookie\n      );\n    }\n  }\n\n  return headers;\n}\n\nfunction resolveRewriteFlag(options: AthenaAuthProxyOptions): boolean {\n  if (isFromClientOptions(options)) {\n    return options.rewriteSetCookiesToRequestOrigin ?? true;\n  }\n  return options.rewriteSetCookiesToRequestOrigin ?? true;\n}\n\nfunction resolveRoutePrefix(options: AthenaAuthProxyOptions): string {\n  if (isFromClientOptions(options)) {\n    return options.routePrefix ?? ATHENA_AUTH_PATH;\n  }\n  return options.routePrefix ?? ATHENA_AUTH_PATH;\n}\n\nfunction resolveFetch(options: AthenaAuthProxyOptions): typeof fetch {\n  if (isFromClientOptions(options)) {\n    return options.fetchImplementation ?? fetch;\n  }\n  return options.fetchImplementation ?? fetch;\n}\n\n/** Proxies one incoming request to the Athena Auth upstream and normalizes browser-facing headers. */\nexport async function proxyAthenaAuthRequest(\n  request: Request,\n  options: AthenaAuthProxyOptions = {}\n) {\n  const url = new URL(request.url);\n  const upstreamBaseUrl = resolveAthenaAuthProxyUpstreamBaseUrl(options);\n  const routePrefix = resolveRoutePrefix(options);\n  const rewrite = resolveRewriteFlag(options);\n  const pathname = stripRoutePrefix(url.pathname, routePrefix);\n  const targetBase = `${stripTrailingSlashes(upstreamBaseUrl)}/`;\n  const targetPathWithQuery = pathname\n    ? `${pathname}${url.search}`\n    : url.search;\n  const target = new URL(targetPathWithQuery || \"\", targetBase);\n  const headers = new Headers(request.headers);\n  const fetchImplementation = resolveFetch(options);\n  headers.delete(\"host\");\n  // Prevent compressed upstream bodies from being mis-forwarded as decoded JSON\n  // (Formations / PR #337 class regression). Always request identity encoding.\n  headers.set(\"accept-encoding\", \"identity\");\n  applySessionCookieAuthorizationHeader(headers);\n\n  const canHaveBody = request.method !== \"GET\" && request.method !== \"HEAD\";\n  const body = canHaveBody ? await request.text() : undefined;\n\n  try {\n    const upstreamResponse = await fetchImplementation(target, {\n      body,\n      headers,\n      method: request.method,\n    });\n\n    return new Response(upstreamResponse.body, {\n      headers: buildProxyResponseHeaders(\n        upstreamResponse.headers,\n        url,\n        rewrite\n      ),\n      status: upstreamResponse.status,\n      statusText: upstreamResponse.statusText,\n    });\n  } catch (error) {\n    const message =\n      error instanceof Error ? error.message : \"Unknown upstream proxy error\";\n    return new Response(\n      JSON.stringify({\n        error: \"Athena auth proxy request failed\",\n        message,\n        target: target.toString(),\n        upstream: upstreamBaseUrl,\n      }),\n      {\n        headers: {\n          \"content-type\": \"application/json\",\n        },\n        status: 502,\n      }\n    );\n  }\n}\n\ntype AthenaAuthProxyHandlersResolver = (\n  request: Request\n) => AthenaAuthProxyOptions | Promise<AthenaAuthProxyOptions>;\n\n/**\n * Static options, preferred `{ client }`, advanced `{ upstreamUrl }`, or per-request resolver.\n *\n * Prefer the client form so upstream is a single authority on the Athena client.\n */\nexport type AthenaAuthProxyHandlersOptions =\n  | AthenaAuthProxyOptions\n  | AthenaAuthProxyHandlersResolver;\n\n/**\n * Creates HTTP method handlers for Next.js route modules that proxy Athena Auth.\n *\n * @example\n * ```ts\n * // Preferred — upstream from createClient({ auth: { routing: \"same-origin\", ... } })\n * export const { DELETE, GET, HEAD, PATCH, POST, PUT } =\n *   createAthenaAuthProxyHandlers({ client: athena })\n * ```\n *\n * @example\n * ```ts\n * // Advanced — no client\n * export const { GET, POST, ... } = createAthenaAuthProxyHandlers({\n *   rewriteSetCookiesToRequestOrigin: true,\n *   upstreamUrl: process.env.ATHENA_AUTH_UPSTREAM_URL,\n * })\n * ```\n */\nexport function createAthenaAuthProxyHandlers(\n  options: AthenaAuthProxyHandlersOptions = {}\n) {\n  // Eager validation for static preferred/advanced forms (not function resolvers).\n  if (typeof options !== \"function\") {\n    if (isFromClientOptions(options)) {\n      requireAthenaRootClientInternals(\n        options.client,\n        \"createAthenaAuthProxyHandlers\"\n      );\n    }\n    resolveAthenaAuthProxyUpstreamBaseUrl(options);\n  }\n\n  const handle: AthenaAuthProxyHandler = async (request) => {\n    const resolved =\n      typeof options === \"function\" ? await options(request) : options;\n    if (isFromClientOptions(resolved)) {\n      requireAthenaRootClientInternals(\n        resolved.client,\n        \"createAthenaAuthProxyHandlers\"\n      );\n    }\n    return proxyAthenaAuthRequest(request, resolved);\n  };\n\n  return {\n    DELETE: handle,\n    GET: handle,\n    HEAD: handle,\n    PATCH: handle,\n    POST: handle,\n    PUT: handle,\n  };\n}\n\n/**\n * Advanced Next.js App Router auth proxy handlers (client XOR upstreamUrl).\n * Prefer {@link createAthenaAuthHandlers} for the happy path.\n */\nexport const athenaAuthHandlers = createAthenaAuthProxyHandlers;\n\n/**\n * Opinionated same-origin auth proxy: upstream is derived **only** from the\n * supplied Athena client. Dual-authority upstream overrides are rejected.\n *\n * @example\n * ```ts\n * export const { DELETE, GET, HEAD, PATCH, POST, PUT } =\n *   createAthenaAuthHandlers(athena)\n * ```\n */\nexport function createAthenaAuthHandlers(\n  client: object,\n  extras?: Omit<\n    AthenaAuthProxyFromClientOptions,\n    \"client\" | \"upstreamUrl\" | \"upstreamBaseUrl\"\n  >\n) {\n  requireAthenaRootClientInternals(client, \"createAthenaAuthHandlers\");\n  const localHandlers = (\n    client as {\n      auth?: {\n        server?: {\n          handlers?: Record<string, (request: Request) => Promise<Response>>;\n        };\n      };\n    }\n  ).auth?.server?.handlers;\n  if (localHandlers?.GET && localHandlers.POST) {\n    return localHandlers;\n  }\n\n  if (extras && (\"upstreamUrl\" in extras || \"upstreamBaseUrl\" in extras)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_PROXY_CONFIGURATION_INVALID\",\n      \"createAthenaAuthHandlers(client) derives upstream solely from the client. \" +\n        \"Do not pass upstreamUrl. Use createAthenaAuthProxyHandlers for advanced transport.\",\n      \"auth\"\n    );\n  }\n\n  return createAthenaAuthProxyHandlers({\n    ...(extras ?? {}),\n    client,\n  });\n}\n","import type { AthenaEmailTemplateStore } from \"../../../email/types.ts\";\nimport type { AthenaAuthRuntime } from \"../runtime-types.ts\";\n\nexport function createEmbeddedAuthEmailTemplateStore(\n  runtime: Pick<AthenaAuthRuntime, \"getEmailStore\" | \"getStores\">\n): AthenaEmailTemplateStore {\n  return {\n    listTemplates: async (selector) => {\n      await runtime.getStores();\n      const rows = await runtime.getEmailStore().listTemplates({\n        event_type: selector?.eventType,\n        is_active: true,\n        template_key: selector?.templateKey,\n      });\n      return rows.map((row) => ({\n        attachmentFailureMode: row.attachment_failure_mode ?? undefined,\n        attachments: row.attachments?.map((attachment) => ({\n          fileUrl: attachment.file_url,\n          ...(attachment.filename ? { filename: attachment.filename } : {}),\n        })),\n        eventType: row.event_type ?? undefined,\n        htmlTemplate: row.html_template ?? undefined,\n        id: row.id,\n        isActive: row.is_active,\n        locale: row.locale,\n        subjectTemplate: row.subject_template,\n        templateKey: row.template_key,\n        textTemplate: row.text_template ?? undefined,\n        variableBindings: row.variable_bindings,\n        variables: row.variables,\n      }));\n    },\n  };\n}\n","import type { AthenaAuthDatabase } from \"./database.ts\";\nimport { createAuthRequestMiddleware } from \"./request-middleware.ts\";\nimport { createAuthRouter } from \"./router.ts\";\nimport { createRuntimeDependencies } from \"./runtime-dependencies.ts\";\nimport type {\n  AthenaAuthHttpHandlers,\n  AthenaAuthRuntime,\n  AthenaAuthServerSurface,\n  CreateAthenaAuthRuntimeOptions,\n} from \"./runtime-types.ts\";\n\nexport {\n  createAuthRequestMiddleware,\n  createRequestMiddleware,\n} from \"./request-middleware.ts\";\nexport { createAuthRouter } from \"./router.ts\";\nexport { createRuntimeDependencies } from \"./runtime-dependencies.ts\";\nexport type {\n  AthenaAuthHttpHandlers,\n  AthenaAuthRuntime,\n  AthenaAuthServerSurface,\n  CreateAthenaAuthRuntimeOptions,\n} from \"./runtime-types.ts\";\n\nexport function createAthenaAuthRuntime(\n  options: CreateAthenaAuthRuntimeOptions = {}\n): AthenaAuthRuntime {\n  const deps = createRuntimeDependencies(options);\n  const { handleRoute } = createAuthRouter(deps);\n  const handle = createAuthRequestMiddleware({ deps, handleRoute });\n  const handlers: AthenaAuthHttpHandlers = {\n    DELETE: handle,\n    GET: handle,\n    HEAD: handle,\n    OPTIONS: handle,\n    PATCH: handle,\n    POST: handle,\n    PUT: handle,\n  };\n  return {\n    close: deps.close,\n    config: deps.config,\n    getStores: deps.ensureReady,\n    getEmailStore: deps.getEmailStore,\n    getOAuthRuntimeJwtVerifier: deps.getOAuthRuntimeJwtVerifier,\n    handle,\n    handlers,\n    hooksRef: deps.hooksRef,\n    migrate: deps.migrate,\n    passkeyRelyingParty: deps.passkeyRelyingParty,\n    passkeyResolver: deps.passkeyResolver,\n    setDelivery: deps.setDelivery,\n  };\n}\n\nexport function createAthenaAuth(\n  options: CreateAthenaAuthRuntimeOptions & {\n    database: string | AthenaAuthDatabase;\n  }\n): AthenaAuthRuntime {\n  return createAthenaAuthRuntime({\n    ...options,\n    autoMigrate: options.autoMigrate === true,\n  });\n}\n\nexport function createAthenaAuthHttpHandlers(\n  runtime: AthenaAuthServerSurface\n): AthenaAuthHttpHandlers {\n  return runtime.handlers;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { ATHENA_AUTH_DEFAULT_BASE_PATH } from \"../contract/index.ts\";\nimport {\n  createMemoryAuthTraceRecorder,\n  createNoopTrace,\n  createPostgresAuthTraceRecorder,\n  runWithAuthTrace,\n} from \"../observability/traces.ts\";\nimport {\n  AthenaAuthRuntimeError,\n  createTraceId,\n  errorResponse,\n} from \"./errors.ts\";\nimport { type AthenaAuthStores, MemoryAuthStores } from \"./memory-stores.ts\";\nimport {\n  attachAuthTimingHeaders,\n  bindAuthRequestTimingStore,\n  currentAuthRequestTiming,\n  runWithAuthRequestTiming,\n} from \"./request-timing.ts\";\n\nbindAuthRequestTimingStore(new AsyncLocalStorage());\nimport type { AuthRuntimeDependencies } from \"./runtime-dependencies.ts\";\nimport { normalizePath } from \"./runtime-helpers.ts\";\nimport { enforceOrigin } from \"./security.ts\";\n\nexport interface AuthRequestMiddlewareOptions {\n  deps: AuthRuntimeDependencies;\n  handleRoute: (\n    request: Request,\n    path: string,\n    currentStores: AthenaAuthStores,\n    headers: Headers,\n    traceId: string\n  ) => Promise<Response>;\n}\n\nexport function createAuthRequestMiddleware(\n  options: AuthRequestMiddlewareOptions\n): (request: Request) => Promise<Response> {\n  const { deps, handleRoute } = options;\n  const livenessOkStores = new MemoryAuthStores();\n  return async (request: Request): Promise<Response> => {\n    const { config, observability, ensureReady } = deps;\n    const database = deps.getDatabase();\n\n    const started = performance.now();\n    return runWithAuthRequestTiming(async () => {\n      const parseStarted = performance.now();\n      const traceId =\n        request.headers.get(\"x-athena-trace-id\")?.trim() ||\n        request.headers.get(\"x-request-id\")?.trim() ||\n        createTraceId();\n      currentAuthRequestTiming()?.setTraceId(traceId);\n      const headers = new Headers();\n      headers.set(\"x-athena-trace-id\", traceId);\n      headers.set(\"x-request-id\", traceId);\n      let path = \"/\";\n      try {\n        const url = new URL(request.url);\n        path = normalizePath(\n          url.pathname,\n          config.basePath || ATHENA_AUTH_DEFAULT_BASE_PATH\n        );\n      } catch {\n        path = \"/\";\n      }\n      const method = request.method.toUpperCase();\n      const isLivenessOk =\n        path === \"/ok\" && (method === \"GET\" || method === \"HEAD\");\n      const postgresTraces =\n        observability.traces.enabled && !isLivenessOk ? database : undefined;\n      const traceRecorder = observability.traces.enabled\n        ? postgresTraces\n          ? createPostgresAuthTraceRecorder(\n              postgresTraces,\n              observability.traces.sampleRate\n            )\n          : createMemoryAuthTraceRecorder(\n              { records: [] },\n              observability.traces.sampleRate\n            )\n        : { start: () => createNoopTrace() };\n      const trace = traceRecorder.start({\n        method,\n        path,\n        startedAt: new Date(),\n        traceId,\n      });\n      return runWithAuthTrace(trace, async () => {\n        try {\n          const isStateProtectedSocialCallback =\n            method === \"POST\" && /^\\/callback\\/[^/]+$/.test(path);\n          if (!isStateProtectedSocialCallback) {\n            enforceOrigin(request, config.security.trustedOrigins);\n          }\n          currentAuthRequestTiming()?.addSpan(\n            \"parse\",\n            performance.now() - parseStarted\n          );\n          const currentStores = isLivenessOk\n            ? livenessOkStores\n            : await ensureReady();\n          const response = await handleRoute(\n            request,\n            path,\n            currentStores,\n            headers,\n            traceId\n          );\n          const totalMs = performance.now() - started;\n          await trace.success(response.status, totalMs);\n          return attachAuthTimingHeaders(response, totalMs);\n        } catch (error) {\n          const status =\n            error instanceof AthenaAuthRuntimeError ? error.status : 500;\n          const totalMs = performance.now() - started;\n          await trace.failure(error, status, totalMs);\n          return attachAuthTimingHeaders(\n            errorResponse(error, traceId),\n            totalMs\n          );\n        }\n      });\n    });\n  };\n}\n\nexport function createRequestMiddleware(\n  options: AuthRequestMiddlewareOptions\n): (request: Request) => Promise<Response> {\n  return createAuthRequestMiddleware(options);\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { AthenaAuthActor } from \"../domain/context.ts\";\nimport type { AthenaAuthImplementedDomainEvent } from \"../hooks/events.ts\";\nimport type { AthenaAuthDatabase } from \"../local/database.ts\";\nimport { currentAuthRequestTiming } from \"../local/request-timing.ts\";\nimport type {\n  AthenaAuthTracePhase,\n  AthenaAuthTraceRecord,\n  AthenaAuthTraceStart,\n} from \"./types.ts\";\n\nexport interface AthenaAuthActiveTrace {\n  failure(error: unknown, statusCode: number, totalMs?: number): Promise<void>;\n  phase(name: AthenaAuthTracePhase): { finish(): void };\n  setActor(actor: AthenaAuthActor): void;\n  setEvent(event: AthenaAuthImplementedDomainEvent, eventId: string): void;\n  success(statusCode: number, totalMs?: number): Promise<void>;\n}\n\nexport interface AthenaAuthTraceRecorder {\n  start(input: AthenaAuthTraceStart): AthenaAuthActiveTrace;\n}\n\nconst activeTraceStorage = new AsyncLocalStorage<AthenaAuthActiveTrace>();\n\nexport function currentAuthTrace(): AthenaAuthActiveTrace | undefined {\n  return activeTraceStorage.getStore();\n}\n\nexport function runWithAuthTrace<T>(\n  trace: AthenaAuthActiveTrace,\n  fn: () => Promise<T>\n): Promise<T> {\n  return activeTraceStorage.run(trace, fn);\n}\n\nexport interface MemoryAuthTraceSink {\n  records: AthenaAuthTraceRecord[];\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 createActiveTrace(\n  input: AthenaAuthTraceStart,\n  persist: (record: AthenaAuthTraceRecord) => Promise<void>\n): AthenaAuthActiveTrace {\n  const startedAt = input.startedAt ?? new Date();\n  const startedMs = performance.now();\n  const timings: Partial<Record<AthenaAuthTracePhase, number>> = {};\n  let actor: AthenaAuthActor | undefined;\n  let eventId: string | undefined;\n  let operation = input.operation;\n  let finished = false;\n\n  const persistSafe = async (record: AthenaAuthTraceRecord) => {\n    if (finished) {\n      return;\n    }\n    finished = true;\n    try {\n      await persist(record);\n    } catch (error) {\n      console.error(\"[athena-auth] 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    statusCode: number,\n    error?: unknown,\n    totalMs?: number\n  ) => {\n    const completedAt = new Date();\n    const requestTiming = currentAuthRequestTiming()?.copy();\n    await persistSafe({\n      actorKind: actor?.kind,\n      actorUserId: actor?.userId,\n      afterHooksMs: timings.after_hooks,\n      authorizeMs: timings.authorize ?? requestTiming?.authzMs,\n      beforeHooksMs: timings.before_hooks,\n      completedAt,\n      errorCode: error ? errorCodeOf(error) : undefined,\n      errorPhase: error ? \"request\" : undefined,\n      eventId,\n      id: crypto.randomUUID(),\n      metadata: requestTiming ? { requestTiming } : {},\n      method: input.method,\n      operation,\n      organizationId: actor?.organizationId,\n      outcome,\n      path: input.path,\n      requestTiming,\n      startedAt,\n      statusCode,\n      totalMs: totalMs ?? performance.now() - startedMs,\n      traceId: input.traceId,\n      transactionMs: timings.transaction,\n      validateMs: timings.validate,\n    });\n  };\n\n  return {\n    async failure(error, statusCode, totalMs) {\n      await complete(\"failure\", statusCode, error, totalMs);\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    setActor(next) {\n      actor = next;\n    },\n    setEvent(event, nextEventId) {\n      operation = event;\n      eventId = nextEventId;\n    },\n    async success(statusCode, totalMs) {\n      await complete(\"success\", statusCode, undefined, totalMs);\n    },\n  };\n}\n\nexport function createMemoryAuthTraceRecorder(\n  sink: MemoryAuthTraceSink,\n  sampleRate = 1\n): AthenaAuthTraceRecorder {\n  return {\n    start(input) {\n      if (!sampleAllows(sampleRate)) {\n        return createNoopTrace();\n      }\n      return createActiveTrace(input, async (record) => {\n        sink.records.push(record);\n      });\n    },\n  };\n}\n\nexport function createPostgresAuthTraceRecorder(\n  database: AthenaAuthDatabase,\n  sampleRate = 1\n): AthenaAuthTraceRecorder {\n  return {\n    start(input) {\n      if (!sampleAllows(sampleRate)) {\n        return createNoopTrace();\n      }\n      return createActiveTrace(input, (record) =>\n        insertTraceAuth(database, record)\n      );\n    },\n  };\n}\n\nexport function createNoopTrace(): AthenaAuthActiveTrace {\n  return {\n    async failure() {},\n    phase() {\n      return { finish() {} };\n    },\n    setActor() {},\n    setEvent() {},\n    async success() {},\n  };\n}\n\nexport async function insertTraceAuth(\n  db: AthenaAuthDatabase,\n  record: AthenaAuthTraceRecord\n): Promise<void> {\n  await db.query(\n    `\nINSERT INTO athena.traces_auth (\n\tid,\n\ttrace_id,\n\tevent_id,\n\toperation,\n\tmethod,\n\tpath,\n\tactor_kind,\n\tactor_user_id,\n\torganization_id,\n\toutcome,\n\tstatus_code,\n\tauthorize_ms,\n\tvalidate_ms,\n\tbefore_hooks_ms,\n\ttransaction_ms,\n\tafter_hooks_ms,\n\ttotal_ms,\n\terror_code,\n\terror_phase,\n\tmetadata,\n\tstarted_at,\n\tcompleted_at\n) VALUES (\n\t$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22\n)\n`,\n    [\n      record.id,\n      record.traceId,\n      record.eventId ?? null,\n      record.operation ?? null,\n      record.method,\n      record.path,\n      record.actorKind ?? null,\n      record.actorUserId ?? null,\n      record.organizationId ?? null,\n      record.outcome,\n      record.statusCode ?? null,\n      record.authorizeMs ?? null,\n      record.validateMs ?? null,\n      record.beforeHooksMs ?? null,\n      record.transactionMs ?? null,\n      record.afterHooksMs ?? null,\n      record.totalMs,\n      record.errorCode ?? null,\n      record.errorPhase ?? null,\n      record.metadata,\n      record.startedAt,\n      record.completedAt,\n    ]\n  );\n}\n","import { MemoryAuthorizationStore } from \"../../runtime/authorization/memory.ts\";\nimport {\n  mapLegacyUserRole,\n  resolveMemberAssignmentRole,\n} from \"../../runtime/authorization/templates.ts\";\nimport { resolveAuthenticationContext } from \"./authentication-context.ts\";\nimport type {\n  AuthAccountRow,\n  AuthInvitationRow,\n  AuthMemberRow,\n  AuthOrganizationRow,\n  AuthPasskeyRow,\n  AuthSessionRow,\n  AuthUserRow,\n  AuthVerificationRow,\n} from \"./models.ts\";\nimport type {\n  AuthApiKeyRow,\n  AuthTwoFactorRow,\n  CreateSessionInput,\n  CreateUserInput,\n  UpdateUserPatch,\n} from \"./stores.ts\";\n\nfunction now(): Date {\n  return new Date();\n}\n\nfunction clone<T>(value: T): T {\n  return structuredClone(value);\n}\n\nexport class MemoryAuthStores {\n  readonly authorization = new MemoryAuthorizationStore();\n  readonly accounts = new Map<string, AuthAccountRow>();\n  readonly invitations = new Map<string, AuthInvitationRow>();\n  readonly members = new Map<string, AuthMemberRow>();\n  readonly organizations = new Map<string, AuthOrganizationRow>();\n  readonly sessions = new Map<string, AuthSessionRow>();\n  readonly users = new Map<string, AuthUserRow>();\n  readonly verifications = new Map<string, AuthVerificationRow>();\n  readonly apiKeys = new Map<string, AuthApiKeyRow>();\n  readonly twoFactors = new Map<string, AuthTwoFactorRow>();\n  readonly rateLimits = new Map<string, { count: number; resetAt: number }>();\n  readonly verificationReplacementLocks = new Map<string, Promise<void>>();\n  readonly passkeys = new Map<string, AuthPasskeyRow>();\n  readonly passkeyRegistrationTransactions = new Map<\n    string,\n    {\n      challenge_hash: string;\n      consumed_at: Date | string | null;\n      context: string | null;\n      created_at: Date | string;\n      expires_at: Date | string;\n      id: string;\n      mode: string;\n      rp_id: string;\n      user_handle: string;\n    }\n  >();\n\n  async getUserById(id: string): Promise<AuthUserRow | undefined> {\n    const row = this.users.get(id);\n    return row ? clone(row) : undefined;\n  }\n\n  async getUserByEmail(email: string): Promise<AuthUserRow | undefined> {\n    const needle = email.trim().toLowerCase();\n    for (const user of this.users.values()) {\n      if ((user.email ?? \"\").trim().toLowerCase() === needle) {\n        return clone(user);\n      }\n    }\n  }\n\n  async getUserByUsername(username: string): Promise<AuthUserRow | undefined> {\n    for (const user of this.users.values()) {\n      if (user.username === username) {\n        return clone(user);\n      }\n    }\n  }\n\n  async listUsers(): Promise<AuthUserRow[]> {\n    return [...this.users.values()].map((row) => clone(row));\n  }\n\n  async createUser(input: CreateUserInput): Promise<AuthUserRow> {\n    if (input.email && (await this.getUserByEmail(input.email))) {\n      const error = new Error(\"duplicate key value violates unique constraint\");\n      (error as { code?: string }).code = \"23505\";\n      throw error;\n    }\n    const created = now();\n    const row: AuthUserRow = {\n      ban_expires: null,\n      ban_reason: null,\n      banned: false,\n      created_at: created,\n      display_username: input.displayUsername ?? null,\n      email: input.email ?? null,\n      email_verified: input.emailVerified ?? false,\n      id: input.id,\n      image: input.image ?? null,\n      last_sign_in_at: null,\n      metadata: input.metadata ?? {},\n      name: input.name ?? null,\n      role: null,\n      two_factor_enabled: false,\n      updated_at: created,\n      username: input.username ?? null,\n    };\n    this.users.set(row.id, row);\n    await this.authorization.assignUserRole(\n      row.id,\n      mapLegacyUserRole(row.role)\n    );\n    return clone(row);\n  }\n\n  async updateUser(id: string, patch: UpdateUserPatch): Promise<AuthUserRow> {\n    const existing = this.users.get(id);\n    if (!existing) {\n      throw new Error(\"User not found\");\n    }\n    const next: AuthUserRow = {\n      ...existing,\n      ban_expires:\n        patch.banExpires === undefined\n          ? existing.ban_expires\n          : patch.banExpires,\n      ban_reason:\n        patch.banReason === undefined ? existing.ban_reason : patch.banReason,\n      banned: patch.banned ?? existing.banned,\n      email: patch.email ?? existing.email,\n      email_verified: patch.emailVerified ?? existing.email_verified,\n      image: patch.image === undefined ? existing.image : patch.image,\n      last_sign_in_at: patch.lastSignInAt ?? existing.last_sign_in_at,\n      metadata: patch.metadata ?? existing.metadata,\n      name: patch.name === undefined ? existing.name : patch.name,\n      role: patch.role === undefined ? existing.role : patch.role,\n      two_factor_enabled: patch.twoFactorEnabled ?? existing.two_factor_enabled,\n      updated_at: now(),\n    };\n    this.users.set(id, next);\n    if (patch.role !== undefined) {\n      await this.authorization.assignUserRole(\n        id,\n        mapLegacyUserRole(patch.role)\n      );\n    }\n    return clone(next);\n  }\n\n  async hasAuthorizationAssignment(userId: string): Promise<boolean> {\n    return this.authorization.hasUserAssignment(userId);\n  }\n\n  async resolveEffectiveRights(input: {\n    activeOrganizationId?: string | null;\n    userId: string;\n  }): Promise<readonly string[]> {\n    const rights = await this.authorization.resolveEffectiveRights({\n      activeOrganizationId: input.activeOrganizationId,\n      getMember: (organizationId, memberUserId) =>\n        this.getMember(organizationId, memberUserId),\n      userId: input.userId,\n    });\n    return [...rights];\n  }\n\n  async deleteUser(id: string): Promise<void> {\n    this.users.delete(id);\n    for (const [key, session] of this.sessions) {\n      if (session.user_id === id) {\n        this.sessions.delete(key);\n      }\n    }\n    for (const [key, account] of this.accounts) {\n      if (account.user_id === id) {\n        this.accounts.delete(key);\n      }\n    }\n    for (const [key, member] of this.members) {\n      if (member.user_id === id) {\n        this.members.delete(key);\n      }\n    }\n    this.twoFactors.delete(id);\n    for (const [key, apiKey] of this.apiKeys) {\n      if (apiKey.user_id === id) {\n        this.apiKeys.delete(key);\n      }\n    }\n  }\n\n  async createSession(input: CreateSessionInput): Promise<AuthSessionRow> {\n    const created = now();\n    const authentication = resolveAuthenticationContext(\n      {\n        authenticatedAt: input.authenticatedAt,\n        methods: input.authenticationMethods ?? [],\n      },\n      created\n    );\n    const row: AuthSessionRow = {\n      active: true,\n      active_organization_id: input.activeOrganizationId ?? null,\n      authenticated_at: authentication.authenticatedAt,\n      authentication_methods: [...authentication.methods],\n      created_at: created,\n      expires_at: input.expiresAt,\n      id: input.id,\n      impersonated_by: input.impersonatedBy ?? null,\n      ip_address: input.ipAddress ?? null,\n      token: input.token,\n      updated_at: created,\n      user_agent: input.userAgent ?? null,\n      user_id: input.userId,\n    };\n    this.sessions.set(row.token, row);\n    return clone(row);\n  }\n\n  async getSessionByToken(token: string): Promise<AuthSessionRow | undefined> {\n    const row = this.sessions.get(token);\n    if (!row?.active || new Date(row.expires_at).getTime() <= Date.now()) {\n      return;\n    }\n    return clone(row);\n  }\n\n  async updateSessionExpiry(token: string, expiresAt: Date): Promise<void> {\n    const row = this.sessions.get(token);\n    if (!row) {\n      return;\n    }\n    row.expires_at = expiresAt;\n    row.updated_at = now();\n  }\n\n  async setSessionActiveOrganization(\n    token: string,\n    organizationId: string | null\n  ): Promise<void> {\n    const row = this.sessions.get(token);\n    if (!row) {\n      return;\n    }\n    row.active_organization_id = organizationId;\n    row.updated_at = now();\n  }\n\n  async clearUserActiveOrganization(\n    userId: string,\n    organizationId: string\n  ): Promise<number> {\n    let count = 0;\n    for (const session of this.sessions.values()) {\n      if (\n        session.user_id === userId &&\n        session.active_organization_id === organizationId\n      ) {\n        session.active_organization_id = null;\n        session.updated_at = now();\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  async clearOrganizationActiveSessions(\n    organizationId: string\n  ): Promise<number> {\n    let count = 0;\n    for (const session of this.sessions.values()) {\n      if (session.active_organization_id === organizationId) {\n        session.active_organization_id = null;\n        session.updated_at = now();\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  async listUserSessions(userId: string): Promise<AuthSessionRow[]> {\n    return [...this.sessions.values()]\n      .filter(\n        (session) =>\n          session.user_id === userId &&\n          session.active &&\n          new Date(session.expires_at).getTime() > Date.now()\n      )\n      .map((session) => clone(session));\n  }\n\n  async deleteSession(token: string): Promise<boolean> {\n    return this.sessions.delete(token);\n  }\n\n  async deleteUserSessions(\n    userId: string,\n    exceptToken?: string\n  ): Promise<number> {\n    let count = 0;\n    for (const [token, session] of this.sessions) {\n      if (session.user_id === userId && token !== exceptToken) {\n        this.sessions.delete(token);\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  async createAccount(input: {\n    accountId: string;\n    id: string;\n    password?: string;\n    providerId: string;\n    userId: string;\n  }): Promise<AuthAccountRow> {\n    const created = now();\n    const row: AuthAccountRow = {\n      access_token: null,\n      access_token_expires_at: null,\n      account_id: input.accountId,\n      created_at: created,\n      id: input.id,\n      id_token: null,\n      password: input.password ?? null,\n      provider_id: input.providerId,\n      refresh_token: null,\n      refresh_token_expires_at: null,\n      scope: null,\n      updated_at: created,\n      user_id: input.userId,\n    };\n    this.accounts.set(row.id, row);\n    return clone(row);\n  }\n\n  async listAccounts(userId: string): Promise<AuthAccountRow[]> {\n    return [...this.accounts.values()]\n      .filter((account) => account.user_id === userId)\n      .map((account) => clone(account));\n  }\n\n  async findAccountByProvider(\n    providerId: string,\n    accountId: string\n  ): Promise<AuthAccountRow | undefined> {\n    for (const account of this.accounts.values()) {\n      if (\n        account.provider_id === providerId &&\n        account.account_id === accountId\n      ) {\n        return clone(account);\n      }\n    }\n  }\n\n  async deleteAccount(id: string): Promise<void> {\n    this.accounts.delete(id);\n  }\n\n  async createVerification(input: {\n    expiresAt: Date;\n    id: string;\n    identifier: string;\n    value: string;\n  }): Promise<AuthVerificationRow> {\n    const created = now();\n    const row: AuthVerificationRow = {\n      created_at: created,\n      expires_at: input.expiresAt,\n      id: input.id,\n      identifier: input.identifier,\n      updated_at: created,\n      value: input.value,\n    };\n    this.verifications.set(row.value, row);\n    return clone(row);\n  }\n\n  async replaceVerificationByIdentifier(input: {\n    expiresAt: Date;\n    id: string;\n    identifier: string;\n    value: string;\n  }): Promise<AuthVerificationRow> {\n    const previous = this.verificationReplacementLocks.get(input.identifier);\n    let release!: () => void;\n    const current = new Promise<void>((resolve) => {\n      release = resolve;\n    });\n    const queued = previous ? previous.then(() => current) : current;\n    this.verificationReplacementLocks.set(input.identifier, queued);\n    await previous;\n    try {\n      await this.deleteVerificationsByIdentifier(input.identifier);\n      return await this.createVerification(input);\n    } finally {\n      release();\n      if (this.verificationReplacementLocks.get(input.identifier) === queued) {\n        this.verificationReplacementLocks.delete(input.identifier);\n      }\n    }\n  }\n\n  async deleteVerificationsByIdentifier(identifier: string): Promise<number> {\n    let deleted = 0;\n    for (const [value, row] of this.verifications) {\n      if (row.identifier === identifier) {\n        this.verifications.delete(value);\n        deleted += 1;\n      }\n    }\n    return deleted;\n  }\n\n  async consumeVerification(\n    value: string\n  ): Promise<AuthVerificationRow | undefined> {\n    const row = this.verifications.get(value);\n    if (!row || new Date(row.expires_at).getTime() <= Date.now()) {\n      this.verifications.delete(value);\n      return;\n    }\n    this.verifications.delete(value);\n    return clone(row);\n  }\n\n  async consumeRateLimit(\n    key: string,\n    limit: number,\n    windowMs: number\n  ): Promise<boolean> {\n    const current = Date.now();\n    const existing = this.rateLimits.get(key);\n    if (!existing || existing.resetAt <= current) {\n      this.rateLimits.set(key, { count: 1, resetAt: current + windowMs });\n      return true;\n    }\n    if (existing.count >= limit) {\n      return false;\n    }\n    existing.count += 1;\n    return true;\n  }\n\n  async clearRateLimit(key: string): Promise<void> {\n    this.rateLimits.delete(key);\n  }\n\n  async isRateLimited(key: string, limit: number): Promise<boolean> {\n    const existing = this.rateLimits.get(key);\n    return Boolean(\n      existing && existing.resetAt > Date.now() && existing.count >= limit\n    );\n  }\n\n  async getVerification(\n    value: string\n  ): Promise<AuthVerificationRow | undefined> {\n    const row = this.verifications.get(value);\n    if (!row || new Date(row.expires_at).getTime() <= Date.now()) {\n      return;\n    }\n    return clone(row);\n  }\n\n  async consumeVerificationByIdentifierAndValue(\n    identifier: string,\n    value: string\n  ): Promise<AuthVerificationRow | undefined> {\n    const row = this.verifications.get(value);\n    if (\n      !row ||\n      row.identifier !== identifier ||\n      new Date(row.expires_at).getTime() <= Date.now()\n    ) {\n      return;\n    }\n    this.verifications.delete(value);\n    return clone(row);\n  }\n\n  async expirePasskeyVerifications(now: Date): Promise<number> {\n    const cutoff = now.getTime();\n    let deleted = 0;\n    for (const [key, row] of [...this.verifications.entries()]) {\n      if (\n        row.identifier.startsWith(\"passkey:\") &&\n        new Date(row.expires_at).getTime() <= cutoff\n      ) {\n        this.verifications.delete(key);\n        deleted += 1;\n      }\n    }\n    return deleted;\n  }\n\n  async createOrganization(input: {\n    createdByUserId: string;\n    id: string;\n    name: string;\n    slug: string;\n  }): Promise<AuthOrganizationRow> {\n    if (await this.getOrganizationBySlug(input.slug)) {\n      const error = new Error(\"duplicate key value violates unique constraint\");\n      (error as { code?: string }).code = \"23505\";\n      throw error;\n    }\n    const created = now();\n    const row: AuthOrganizationRow = {\n      created_at: created,\n      created_by_user_id: input.createdByUserId,\n      id: input.id,\n      logo: null,\n      metadata: {},\n      name: input.name,\n      slug: input.slug,\n      updated_at: created,\n    };\n    this.organizations.set(row.id, row);\n    return clone(row);\n  }\n\n  async getOrganization(id: string): Promise<AuthOrganizationRow | undefined> {\n    const row = this.organizations.get(id);\n    return row ? clone(row) : undefined;\n  }\n\n  async getOrganizationBySlug(\n    slug: string\n  ): Promise<AuthOrganizationRow | undefined> {\n    for (const organization of this.organizations.values()) {\n      if (organization.slug === slug) {\n        return clone(organization);\n      }\n    }\n  }\n\n  async listOrganizationsForUser(\n    userId: string\n  ): Promise<AuthOrganizationRow[]> {\n    const orgIds = [...this.members.values()]\n      .filter((member) => member.user_id === userId)\n      .map((member) => member.organization_id);\n    return orgIds\n      .map((id) => this.organizations.get(id))\n      .filter((row): row is AuthOrganizationRow => Boolean(row))\n      .map((row) => clone(row));\n  }\n\n  async updateOrganization(\n    id: string,\n    patch: { logo?: string | null; name?: string; slug?: string }\n  ): Promise<AuthOrganizationRow> {\n    const existing = this.organizations.get(id);\n    if (!existing) {\n      throw new Error(\"Organization not found\");\n    }\n    const next: AuthOrganizationRow = {\n      ...existing,\n      logo: patch.logo === undefined ? existing.logo : patch.logo,\n      name: patch.name ?? existing.name,\n      slug: patch.slug ?? existing.slug,\n      updated_at: now(),\n    };\n    this.organizations.set(id, next);\n    return clone(next);\n  }\n\n  async deleteOrganization(id: string): Promise<void> {\n    this.organizations.delete(id);\n    for (const [key, apiKey] of this.apiKeys) {\n      if (apiKey.organization_id === id) {\n        this.apiKeys.delete(key);\n      }\n    }\n    for (const [key, member] of this.members) {\n      if (member.organization_id === id) {\n        this.members.delete(key);\n      }\n    }\n    for (const [key, invitation] of this.invitations) {\n      if (invitation.organization_id === id) {\n        this.invitations.delete(key);\n      }\n    }\n  }\n\n  async addMember(input: {\n    assignedBy?: string;\n    id: string;\n    organizationId: string;\n    role: string;\n    userId: string;\n  }): Promise<AuthMemberRow> {\n    const created = now();\n    const row: AuthMemberRow = {\n      created_at: created,\n      id: input.id,\n      organization_id: input.organizationId,\n      role: input.role,\n      user_id: input.userId,\n    };\n    this.members.set(row.id, row);\n    await this.authorization.assignMemberRole(\n      row.id,\n      resolveMemberAssignmentRole(row.role),\n      input.assignedBy,\n      input.organizationId\n    );\n    return clone(row);\n  }\n\n  async getMember(\n    organizationId: string,\n    userId: string\n  ): Promise<AuthMemberRow | undefined> {\n    for (const member of this.members.values()) {\n      if (\n        member.organization_id === organizationId &&\n        member.user_id === userId\n      ) {\n        return clone(member);\n      }\n    }\n  }\n\n  async listMembers(organizationId: string): Promise<AuthMemberRow[]> {\n    return [...this.members.values()]\n      .filter((member) => member.organization_id === organizationId)\n      .map((member) => clone(member));\n  }\n\n  async updateMemberRole(\n    organizationId: string,\n    userId: string,\n    role: string\n  ): Promise<AuthMemberRow | undefined> {\n    for (const member of this.members.values()) {\n      if (\n        member.organization_id === organizationId &&\n        member.user_id === userId\n      ) {\n        member.role = role;\n        await this.authorization.assignMemberRole(\n          member.id,\n          resolveMemberAssignmentRole(role),\n          undefined,\n          organizationId\n        );\n        return clone(member);\n      }\n    }\n  }\n\n  async removeMember(organizationId: string, userId: string): Promise<boolean> {\n    for (const [key, member] of this.members) {\n      if (\n        member.organization_id === organizationId &&\n        member.user_id === userId\n      ) {\n        this.members.delete(key);\n        return true;\n      }\n    }\n    return false;\n  }\n\n  async createInvitation(input: {\n    email: string;\n    expiresAt: Date;\n    id: string;\n    inviterId: string;\n    organizationId: string;\n    role: string;\n  }): Promise<AuthInvitationRow> {\n    const created = now();\n    const row: AuthInvitationRow = {\n      created_at: created,\n      email: input.email,\n      expires_at: input.expiresAt,\n      id: input.id,\n      inviter_id: input.inviterId,\n      organization_id: input.organizationId,\n      role: input.role,\n      status: \"pending\",\n    };\n    this.invitations.set(row.id, row);\n    return clone(row);\n  }\n\n  async getInvitation(id: string): Promise<AuthInvitationRow | undefined> {\n    const row = this.invitations.get(id);\n    return row ? clone(row) : undefined;\n  }\n\n  async listInvitations(organizationId: string): Promise<AuthInvitationRow[]> {\n    return [...this.invitations.values()]\n      .filter((invitation) => invitation.organization_id === organizationId)\n      .map((invitation) => clone(invitation));\n  }\n\n  async listInvitationsForEmail(email: string): Promise<AuthInvitationRow[]> {\n    const needle = email.toLowerCase();\n    return [...this.invitations.values()]\n      .filter((invitation) => invitation.email?.toLowerCase() === needle)\n      .map((invitation) => clone(invitation));\n  }\n\n  async updateInvitationStatus(\n    id: string,\n    status: string\n  ): Promise<AuthInvitationRow | undefined> {\n    const row = this.invitations.get(id);\n    if (!row) {\n      return;\n    }\n    row.status = status;\n    return clone(row);\n  }\n\n  async getVerificationByValue(\n    value: string\n  ): Promise<AuthVerificationRow | undefined> {\n    const row = this.verifications.get(value);\n    if (!row || new Date(row.expires_at).getTime() <= Date.now()) {\n      return;\n    }\n    return clone(row);\n  }\n\n  async createTwoFactor(input: {\n    backupCodes?: string;\n    id: string;\n    secret: string;\n    userId: string;\n  }): Promise<AuthTwoFactorRow> {\n    const created = now();\n    const row: AuthTwoFactorRow = {\n      backup_codes: input.backupCodes ?? null,\n      created_at: created,\n      id: input.id,\n      secret: input.secret,\n      updated_at: created,\n      user_id: input.userId,\n    };\n    this.twoFactors.set(input.userId, row);\n    return clone(row);\n  }\n\n  async getTwoFactorByUserId(\n    userId: string\n  ): Promise<AuthTwoFactorRow | undefined> {\n    const row = this.twoFactors.get(userId);\n    return row ? clone(row) : undefined;\n  }\n\n  async updateTwoFactorBackupCodes(\n    userId: string,\n    backupCodes: string\n  ): Promise<void> {\n    const row = this.twoFactors.get(userId);\n    if (row) {\n      row.backup_codes = backupCodes;\n      row.updated_at = now();\n    }\n  }\n\n  async deleteTwoFactor(userId: string): Promise<void> {\n    this.twoFactors.delete(userId);\n  }\n\n  async createApiKey(input: AuthApiKeyRow): Promise<AuthApiKeyRow> {\n    this.apiKeys.set(input.id, { ...input });\n    return clone(input);\n  }\n\n  async getApiKeyByHash(hash: string): Promise<AuthApiKeyRow | undefined> {\n    for (const key of this.apiKeys.values()) {\n      if (key.key === hash) {\n        return clone(key);\n      }\n    }\n  }\n\n  async getApiKeyById(id: string): Promise<AuthApiKeyRow | undefined> {\n    const row = this.apiKeys.get(id);\n    return row ? clone(row) : undefined;\n  }\n\n  async listApiKeys(userId: string): Promise<AuthApiKeyRow[]> {\n    return [...this.apiKeys.values()]\n      .filter((key) => key.user_id === userId)\n      .map((key) => clone(key));\n  }\n\n  async deleteApiKey(id: string): Promise<boolean> {\n    return this.apiKeys.delete(id);\n  }\n\n  async deleteExpiredApiKeys(): Promise<number> {\n    let count = 0;\n    const nowMs = Date.now();\n    for (const [id, key] of this.apiKeys) {\n      if (key.expires_at && new Date(key.expires_at).getTime() <= nowMs) {\n        this.apiKeys.delete(id);\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  async touchApiKey(id: string): Promise<void> {\n    const row = this.apiKeys.get(id);\n    if (row) {\n      row.last_request = now();\n      row.updated_at = now();\n    }\n  }\n\n  async consumeApiKey(id: string): Promise<AuthApiKeyRow | undefined> {\n    const row = this.apiKeys.get(id);\n    if (\n      !row?.enabled ||\n      (row.expires_at && new Date(row.expires_at).getTime() <= Date.now()) ||\n      (row.remaining !== null && row.remaining <= 0)\n    ) {\n      return undefined;\n    }\n    row.last_request = now();\n    row.updated_at = now();\n    if (row.remaining !== null) {\n      row.remaining -= 1;\n    }\n    return clone(row);\n  }\n\n  async updateApiKey(\n    id: string,\n    patch: {\n      enabled?: boolean;\n      metadata?: string | null;\n      name?: string | null;\n      permissions?: string | null;\n    }\n  ): Promise<AuthApiKeyRow | undefined> {\n    const row = this.apiKeys.get(id);\n    if (!row) {\n      return;\n    }\n    if (patch.enabled !== undefined) {\n      row.enabled = patch.enabled;\n    }\n    if (patch.metadata !== undefined) {\n      row.metadata = patch.metadata;\n    }\n    if (patch.name !== undefined) {\n      row.name = patch.name;\n    }\n    if (patch.permissions !== undefined) {\n      row.permissions = patch.permissions;\n    }\n    row.updated_at = now();\n    return clone(row);\n  }\n}\n\nexport type { AthenaAuthStores } from \"./store-contract.ts\";\n","import { 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  cloneOrganizationMemberAssignment,\n  clonePlatformUserAssignment,\n  freezeRoleIds,\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 { assertCloneRoleTenantBoundary } from \"./clone-source.ts\";\nimport type { AthenaAuthorizationInspectGraph } from \"./inspect.ts\";\nimport { toRoleDescriptor, toRoleDetail } from \"./role-descriptor.ts\";\nimport {\n  assertAuthorizationDelegationAllowed,\n  assertExpectedVersion,\n  assertProtectedRoleImmutable,\n  throwAssignmentVersionConflict,\n  throwReassignmentInvalid,\n  throwRoleHasAssignments,\n  throwRoleNotFound,\n} from \"./role-invariants.ts\";\nimport { projectAssignableRoles } from \"./snapshot-catalog.ts\";\nimport type { AthenaAuthorizationStore } from \"./store.ts\";\nimport {\n  BUILTIN_AUTHORIZATION_ROLES,\n  builtinRoleRecord,\n  mapLegacyMemberRole,\n  mapLegacyUserRole,\n  ORGANIZATION_OWNER_ROLE,\n  PLATFORM_ADMIN_ROLE,\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\nfunction uniqueRights(keys: readonly string[]): AthenaRightKey[] {\n  return [...new Set(keys)].flatMap((key) => {\n    const parsed = tryParseAthenaRightKey(key);\n    return parsed ? [parsed] : [];\n  });\n}\n\nexport class MemoryAuthorizationStore implements AthenaAuthorizationStore {\n  private readonly audit: Record<string, unknown>[] = [];\n  private readonly memberOrganizationIds = new Map<string, string>();\n  private readonly memberRoles = new Map<string, Set<string>>();\n  private readonly organizationRevisions = new Map<string, number>();\n  private readonly platformRevision = { value: 1 };\n  private readonly roleRights = new Map<string, Set<string>>();\n  private readonly roles = new Map<string, AthenaAuthorizationRoleRecord>();\n  private readonly userRoles = new Map<string, Set<string>>();\n  private materialized = false;\n\n  async ensureCatalog(): Promise<void> {\n    if (this.materialized) {\n      return;\n    }\n    await this.materialize();\n  }\n\n  async materialize(): Promise<void> {\n    for (const template of BUILTIN_AUTHORIZATION_ROLES) {\n      this.roles.set(template.id, builtinRoleRecord(template));\n      this.roleRights.set(template.id, new Set(template.rights));\n    }\n    this.materialized = true;\n    void AUTHORIZATION_CATALOG_VERSION;\n    void getAthenaAuthorizationRightsIr();\n  }\n\n  async hasUserAssignment(userId: string): Promise<boolean> {\n    await this.ensure();\n    return this.userRoles.has(userId);\n  }\n\n  async assignUserRole(\n    userId: string,\n    roleKey: string,\n    assignedBy?: string\n  ): Promise<void> {\n    await this.ensure();\n    const role = this.requireRole(roleKey);\n    if (role.scopeKind !== \"platform\") {\n      throw new Error(`Role ${roleKey} is not a platform role`);\n    }\n    this.userRoles.set(userId, new Set([role.id]));\n    this.platformRevision.value += 1;\n    this.audit.push({\n      action: \"user.role.assign\",\n      actor_user_id: assignedBy ?? null,\n      after_state: { roleKey },\n      target_id: userId,\n      target_kind: \"user\",\n    });\n  }\n\n  async assignMemberRole(\n    memberId: string,\n    roleKey: string,\n    assignedBy?: string,\n    organizationId?: string | null\n  ): Promise<void> {\n    await this.ensure();\n    const role = this.resolveOrganizationRole(roleKey, organizationId);\n    this.memberRoles.set(memberId, new Set([role.id]));\n    if (organizationId) {\n      this.memberOrganizationIds.set(memberId, organizationId);\n      this.bumpOrganizationRevision(organizationId);\n    }\n    this.audit.push({\n      action: \"member.role.assign\",\n      actor_user_id: assignedBy ?? null,\n      after_state: { roleKey: role.key },\n      organization_id: organizationId ?? null,\n      target_id: memberId,\n      target_kind: \"member\",\n    });\n  }\n\n  async lookupAssignableOrganizationRole(\n    organizationId: string,\n    roleRef: string\n  ): Promise<AthenaAuthorizationRoleRecord | undefined> {\n    await this.ensure();\n    try {\n      return this.resolveOrganizationRole(roleRef, organizationId);\n    } catch {\n      /* role is not registered */\n    }\n  }\n\n  async readUserRoleAssignmentsSnapshot(input?: {\n    userIds?: readonly string[];\n  }): Promise<PlatformUserAssignmentSnapshot> {\n    await this.ensure();\n    const wanted =\n      input?.userIds == null ? [...this.userRoles.keys()] : input.userIds;\n    const assignments = wanted.map((userId) =>\n      clonePlatformUserAssignment({\n        roleIds: freezeRoleIds([...(this.userRoles.get(userId) ?? [])]),\n        userId,\n      })\n    );\n    return Object.freeze({\n      assignments: Object.freeze(assignments),\n      revision: asPlatformAssignmentRevision(this.platformRevision.value),\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    await this.ensure();\n    const assignments: OrganizationMemberRoleAssignment[] = [];\n    for (const [memberId, roleIds] of this.memberRoles.entries()) {\n      const mappedOrg = this.memberOrganizationIds.get(memberId);\n      if (mappedOrg != null && mappedOrg !== input.organizationId) {\n        continue;\n      }\n      assignments.push(\n        cloneOrganizationMemberAssignment({\n          memberId,\n          roleIds: freezeRoleIds([...roleIds]),\n          userId: \"\",\n        })\n      );\n    }\n    return Object.freeze({\n      assignments: Object.freeze(assignments),\n      organizationId: input.organizationId,\n      revision: asOrganizationAssignmentRevision(\n        this.organizationRevisions.get(input.organizationId) ?? 1\n      ),\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    await this.ensure();\n    if (input.expectedVersion !== this.platformRevision.value) {\n      throwAssignmentVersionConflict();\n    }\n    const uniqueIds = [...new Set(input.roleIds)];\n    const roles = uniqueIds.map((id) => this.requireRoleById(id));\n    assertPlatformAssignmentRoles(roles);\n    const afterRights = uniqueIds.flatMap((id) => [\n      ...(this.roleRights.get(id) ?? []),\n    ]);\n    assertAuthorizationDelegationAllowed({\n      actorRights: input.actorRights,\n      afterRights,\n      beforeRights: [],\n      roleScope: \"platform\",\n    });\n    const currentAdmins = [...this.userRoles.entries()]\n      .filter(([, roleIds]) =>\n        [...roleIds].some(\n          (roleId) => this.roles.get(roleId)?.key === PLATFORM_ADMIN_ROLE\n        )\n      )\n      .map(([userId]) => userId);\n    assertNotLastPlatformAdmin({\n      currentAdminUserIds: currentAdmins,\n      nextHasAdmin: roles.some((role) => role.key === PLATFORM_ADMIN_ROLE),\n      targetUserId: input.userId,\n    });\n    this.userRoles.set(input.userId, new Set(uniqueIds));\n    this.platformRevision.value += 1;\n    this.audit.push({\n      action: \"user.roles.replace\",\n      actor_user_id: input.actorUserId,\n      after_state: { roleIds: uniqueIds },\n      target_id: input.userId,\n      target_kind: \"user\",\n    });\n    return { revision: this.platformRevision.value };\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    await this.ensure();\n    const revision = this.organizationRevisions.get(input.organizationId) ?? 1;\n    if (input.expectedVersion !== revision) {\n      throwAssignmentVersionConflict();\n    }\n    const uniqueIds = [...new Set(input.roleIds)];\n    const roles = uniqueIds.map((id) => this.requireRoleById(id));\n    assertOrganizationAssignmentRoles({\n      foundingOwnerUserId: input.foundingOwnerUserId,\n      memberUserId: input.memberUserId,\n      organizationId: input.organizationId,\n      roles,\n    });\n    const afterRights = uniqueIds.flatMap((id) => [\n      ...(this.roleRights.get(id) ?? []),\n    ]);\n    assertAuthorizationDelegationAllowed({\n      actorRights: input.actorRights,\n      afterRights,\n      beforeRights: [],\n      organizationId: input.organizationId,\n      roleScope: \"organization\",\n    });\n    this.memberRoles.set(input.memberId, new Set(uniqueIds));\n    this.memberOrganizationIds.set(input.memberId, input.organizationId);\n    this.bumpOrganizationRevision(input.organizationId);\n    this.audit.push({\n      action: \"member.roles.replace\",\n      actor_user_id: input.actorUserId,\n      after_state: { roleIds: uniqueIds },\n      organization_id: input.organizationId,\n      target_id: input.memberId,\n      target_kind: \"member\",\n    });\n    return {\n      revision: this.organizationRevisions.get(input.organizationId) ?? 1,\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    await this.ensure();\n    const source = this.roles.get(input.sourceRoleId);\n    if (!source) {\n      throw AthenaAuthRuntimeError.badRequest(\"Source role not found\");\n    }\n    const targetOrganizationId = input.organizationId ?? source.organizationId;\n    assertCloneRoleTenantBoundary({\n      sourceOrganizationId: source.organizationId,\n      sourceScopeKind: source.scopeKind,\n      targetOrganizationId,\n    });\n    const sourceRights = [...(this.roleRights.get(source.id) ?? [])];\n    assertAuthorizationDelegationAllowed({\n      actorRights: input.actorRights,\n      afterRights: sourceRights,\n      beforeRights: [],\n      organizationId: targetOrganizationId,\n      roleScope: source.scopeKind,\n      unrestrictedGrant: input.unrestrictedGrant,\n    });\n    const id = crypto.randomUUID();\n    const record: AthenaAuthorizationRoleRecord = {\n      assignable: true,\n      id,\n      key: `custom_${id.slice(0, 8)}`,\n      name: input.name.trim() || `${source.name} copy`,\n      organizationId: targetOrganizationId,\n      protected: false,\n      scopeKind: source.scopeKind,\n      systemKind: null,\n      version: 1,\n    };\n    if (source.scopeKind === \"organization\") {\n      record.organizationId = targetOrganizationId;\n    }\n    this.roles.set(id, record);\n    this.roleRights.set(id, new Set(this.roleRights.get(source.id) ?? []));\n    if (record.organizationId) {\n      this.bumpOrganizationRevision(record.organizationId);\n    } else {\n      this.platformRevision.value += 1;\n    }\n    const rights = [...(this.roleRights.get(id) ?? [])].sort();\n    this.audit.push({\n      action: \"role.clone\",\n      actor_user_id: input.actorUserId,\n      after_state: { rights },\n      organization_id: record.organizationId,\n      target_id: id,\n      target_kind: \"role\",\n    });\n    return record;\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    await this.ensure();\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 record: AthenaAuthorizationRoleRecord = {\n      assignable: true,\n      id,\n      key: `custom_${id.slice(0, 8)}`,\n      name,\n      organizationId:\n        input.scopeKind === \"organization\"\n          ? (input.organizationId ?? null)\n          : null,\n      protected: false,\n      scopeKind: input.scopeKind,\n      systemKind: null,\n      version: 1,\n    };\n    this.roles.set(id, record);\n    this.roleRights.set(\n      id,\n      new Set(rights.map((key) => parseAthenaRightKey(key)))\n    );\n    this.bumpScopeRevision(record.organizationId);\n    this.audit.push({\n      action: \"role.create\",\n      actor_user_id: input.actorUserId,\n      after_state: { rights: [...rights].sort() },\n      organization_id: record.organizationId,\n      target_id: id,\n      target_kind: \"role\",\n    });\n    return record;\n  }\n\n  async getRole(\n    id: string,\n    organizationId?: string | null\n  ): Promise<AthenaAuthorizationRoleDetail | undefined> {\n    await this.ensure();\n    const role = this.roles.get(id);\n    if (!(role && this.roleVisibleInScope(role, organizationId))) {\n      return;\n    }\n    const rights = uniqueRights([...(this.roleRights.get(id) ?? [])]);\n    return toRoleDetail(role, rights, this.assignmentCount(role.id));\n  }\n\n  async listRoles(input: {\n    organizationId?: string | null;\n    scopeKind: \"platform\" | \"organization\";\n  }): Promise<readonly RoleDescriptor[]> {\n    await this.ensure();\n    return [...this.roles.values()]\n      .filter((role) => {\n        if (role.scopeKind !== input.scopeKind) {\n          return false;\n        }\n        return this.roleVisibleInScope(role, input.organizationId);\n      })\n      .map((role) =>\n        toRoleDescriptor(role, {\n          assignmentCount: this.assignmentCount(role.id),\n          rightCount: this.roleRights.get(role.id)?.size ?? 0,\n        })\n      );\n  }\n\n  async listRoleRights(roleId: string): Promise<readonly AthenaRightKey[]> {\n    await this.ensure();\n    return uniqueRights([...(this.roleRights.get(roleId) ?? [])]);\n  }\n\n  async updateRole(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    await this.ensure();\n    const role = this.requireScopedRole(input.id, input.organizationId);\n    assertProtectedRoleImmutable(role);\n    assertExpectedVersion(role, input.expectedVersion);\n    const name = input.name.trim();\n    if (!name) {\n      throw AthenaAuthRuntimeError.badRequest(\"name is required\");\n    }\n    const beforeRights = [...(this.roleRights.get(role.id) ?? [])].sort();\n    if (input.rights) {\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      this.roleRights.set(\n        role.id,\n        new Set(after.map((key) => parseAthenaRightKey(key)))\n      );\n      const next = { ...role, name, version: role.version + 1 };\n      this.roles.set(role.id, next);\n      this.bumpScopeRevision(next.organizationId);\n      this.audit.push({\n        action: \"role.definition.update\",\n        actor_user_id: input.actorUserId,\n        after_state: { name, rights: after },\n        before_state: { name: role.name, rights: beforeRights },\n        organization_id: next.organizationId,\n        target_id: next.id,\n        target_kind: \"role\",\n      });\n      return next;\n    }\n    const next = { ...role, name, version: role.version + 1 };\n    this.roles.set(role.id, next);\n    this.bumpScopeRevision(next.organizationId);\n    this.audit.push({\n      action: \"role.rename\",\n      actor_user_id: input.actorUserId,\n      after_state: { name },\n      before_state: { name: role.name },\n      organization_id: next.organizationId,\n      target_id: next.id,\n      target_kind: \"role\",\n    });\n    return next;\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    await this.ensure();\n    const role = this.requireScopedRole(input.id, input.organizationId);\n    assertProtectedRoleImmutable(role);\n    assertExpectedVersion(role, input.expectedVersion);\n    const before = [...(this.roleRights.get(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    this.roleRights.set(\n      role.id,\n      new Set(after.map((key) => parseAthenaRightKey(key)))\n    );\n    const next = { ...role, version: role.version + 1 };\n    this.roles.set(role.id, next);\n    this.bumpScopeRevision(next.organizationId);\n    this.audit.push({\n      action: \"role.rights.replace\",\n      actor_user_id: input.actorUserId,\n      after_state: { rights: after },\n      before_state: { rights: before },\n      organization_id: next.organizationId,\n      target_id: next.id,\n      target_kind: \"role\",\n    });\n    return next;\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.ensure();\n    const role = this.requireScopedRole(input.id, input.organizationId);\n    assertProtectedRoleImmutable(role);\n    assertExpectedVersion(role, input.expectedVersion);\n    const assigned = this.assignmentCount(role.id);\n    if (assigned > 0) {\n      const replacementId = input.reassignmentRoleId?.trim() ?? \"\";\n      if (!replacementId) {\n        throwRoleHasAssignments();\n      }\n      const replacement = 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        for (const [, roleIds] of this.memberRoles) {\n          if (roleIds.has(role.id)) {\n            roleIds.delete(role.id);\n            roleIds.add(replacement.id);\n          }\n        }\n      } else {\n        for (const [, roleIds] of this.userRoles) {\n          if (roleIds.has(role.id)) {\n            roleIds.delete(role.id);\n            roleIds.add(replacement.id);\n          }\n        }\n      }\n    }\n    const before = [...(this.roleRights.get(role.id) ?? [])].sort();\n    this.roles.delete(role.id);\n    this.roleRights.delete(role.id);\n    this.bumpScopeRevision(role.organizationId);\n    this.audit.push({\n      action: \"role.delete\",\n      actor_user_id: input.actorUserId,\n      before_state: { rights: before },\n      organization_id: role.organizationId,\n      target_id: role.id,\n      target_kind: \"role\",\n    });\n  }\n\n  async inspectGraph(): Promise<AthenaAuthorizationInspectGraph> {\n    await this.ensure();\n    const roles = [...this.roles.values()].map((role) => {\n      const rights = uniqueRights([...(this.roleRights.get(role.id) ?? [])]);\n      return {\n        ...role,\n        assignmentCount: this.assignmentCount(role.id),\n        rightCount: rights.length,\n        rights,\n      };\n    });\n    const assignments = [\n      ...[...this.userRoles.entries()].flatMap(([userId, roleIds]) =>\n        [...roleIds].map((roleId) => {\n          const role = this.roles.get(roleId);\n          return {\n            memberId: null,\n            organizationId: null,\n            roleId,\n            roleKey: role?.key ?? roleId,\n            scopeKind: \"platform\" as const,\n            userId,\n          };\n        })\n      ),\n      ...[...this.memberRoles.entries()].flatMap(([memberId, roleIds]) =>\n        [...roleIds].map((roleId) => {\n          const role = this.roles.get(roleId);\n          return {\n            memberId,\n            organizationId:\n              this.memberOrganizationIds.get(memberId) ??\n              role?.organizationId ??\n              null,\n            roleId,\n            roleKey: role?.key ?? roleId,\n            scopeKind: \"organization\" as const,\n            userId: null,\n          };\n        })\n      ),\n    ];\n    const audit = this.audit\n      .slice(-100)\n      .reverse()\n      .map((entry) => ({\n        action: typeof entry.action === \"string\" ? entry.action : \"unknown\",\n        actorUserId:\n          typeof entry.actor_user_id === \"string\" ? entry.actor_user_id : null,\n        createdAt: null,\n        organizationId:\n          typeof entry.organization_id === \"string\"\n            ? entry.organization_id\n            : null,\n        targetId: typeof entry.target_id === \"string\" ? entry.target_id : null,\n        targetKind:\n          typeof entry.target_kind === \"string\" ? entry.target_kind : null,\n      }));\n    const organizationMax = Math.max(0, ...this.organizationRevisions.values());\n    return {\n      assignments,\n      audit,\n      revision: Math.max(this.platformRevision.value, organizationMax),\n      roles,\n    };\n  }\n\n  async listAudit(input: {\n    limit?: number;\n    organizationId?: string | null;\n  }): Promise<readonly Record<string, unknown>[]> {\n    const scoped = this.audit.filter((entry) => {\n      if (input.organizationId === undefined) {\n        return true;\n      }\n      if (input.organizationId === null) {\n        return entry.organization_id == null;\n      }\n      return entry.organization_id === input.organizationId;\n    });\n    return scoped.slice(-(input.limit ?? 50));\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    await this.ensure();\n    const platformRoleIds = [...(this.userRoles.get(input.userId) ?? [])];\n    const rights = new Set<string>();\n    for (const roleId of platformRoleIds) {\n      this.addRoleRights(roleId, rights);\n    }\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 memberRoleIds = this.memberRoles.get(member.id);\n        if (memberRoleIds && memberRoleIds.size > 0) {\n          for (const memberRoleId of memberRoleIds) {\n            this.addRoleRights(memberRoleId, rights);\n          }\n        } else {\n          this.addRoleRights(\n            this.requireRole(mapLegacyMemberRole(member.role)).id,\n            rights\n          );\n        }\n      }\n    }\n    return uniqueRights([...rights]);\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    const effectiveRights = await this.resolveEffectiveRights(input);\n    const capabilities = capabilitiesFromRights(effectiveRights);\n    const roles: AssignedRoleSummary[] = [];\n    for (const roleId of this.userRoles.get(input.userId) ?? []) {\n      const role = this.roles.get(roleId);\n      if (role) {\n        roles.push({\n          displayName: role.name,\n          key: role.key,\n          scopeKind: role.scopeKind,\n        });\n      }\n    }\n    const organizationId = input.activeOrganizationId?.trim() ?? \"\";\n    if (organizationId.length > 0) {\n      const member = await input.getMember(organizationId, input.userId);\n      if (member) {\n        for (const roleId of this.memberRoles.get(member.id) ?? []) {\n          const role = this.roles.get(roleId);\n          if (role) {\n            roles.push({\n              displayName: role.name,\n              key: role.key,\n              scopeKind: role.scopeKind,\n            });\n          }\n        }\n      }\n    }\n    const members =\n      organizationId.length > 0 ? await input.listMembers(organizationId) : [];\n    const assignableRoles = projectAssignableRoles({\n      activeOrganizationId: organizationId,\n      capabilities,\n      roles: this.listAssignableRoleDescriptors(organizationId, members.length),\n    });\n    return {\n      ...(organizationId.length > 0\n        ? { activeOrganizationId: organizationId }\n        : {}),\n      assignableRoles,\n      capabilities,\n      effectiveRights,\n      revision: organizationId\n        ? (this.organizationRevisions.get(organizationId) ?? 1)\n        : this.platformRevision.value,\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    await this.ensure();\n    const assignedIds = this.memberRoles.get(member.id);\n    const roleId =\n      assignedIds && assignedIds.size > 0\n        ? ([...assignedIds].find((id) => {\n            const assigned = this.roles.get(id);\n            return assigned?.protected === true;\n          }) ?? [...assignedIds][0])\n        : this.requireRole(mapLegacyMemberRole(member.role)).id;\n    const role = this.requireRoleById(roleId);\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      role.key === 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: assignedIds ? [...assignedIds] : [roleId],\n      canChangeRole: denialReasons.changeRole === undefined,\n      canRemove: denialReasons.remove === undefined,\n      denialReasons,\n      roleDisplayName: role.name,\n      roleKey: role.key,\n    };\n  }\n\n  async ensureUserAssigned(\n    userId: string,\n    legacyRole?: string | null\n  ): Promise<void> {\n    await this.ensure();\n    if (!this.userRoles.has(userId)) {\n      await this.assignUserRole(userId, mapLegacyUserRole(legacyRole));\n    }\n  }\n\n  async ensureMemberAssigned(\n    memberId: string,\n    legacyRole?: string | null\n  ): Promise<void> {\n    await this.ensure();\n    if (!this.memberRoles.has(memberId)) {\n      await this.assignMemberRole(memberId, mapLegacyMemberRole(legacyRole));\n    }\n  }\n\n  private listAssignableRoleDescriptors(\n    organizationId: string,\n    memberCount: number\n  ): RoleDescriptor[] {\n    void memberCount;\n    const projected: RoleDescriptor[] = [];\n    for (const role of this.roles.values()) {\n      if (!role.assignable) {\n        continue;\n      }\n      const definition = tryHydrateAthenaRoleDefinition({\n        record: role,\n        rights: [...(this.roleRights.get(role.id) ?? [])],\n      });\n      if (!definition) {\n        continue;\n      }\n      const descriptor = projectAuthorizationSnapshotRole(definition, {\n        activeOrganizationId: organizationId,\n        assignmentCount: this.assignmentCount(role.id),\n        version: role.version,\n      });\n      if (descriptor) {\n        projected.push(descriptor);\n      }\n    }\n    return projected;\n  }\n\n  private requireScopedRole(\n    roleId: string,\n    organizationId?: string | null\n  ): AthenaAuthorizationRoleRecord {\n    const role = this.roles.get(roleId);\n    if (!(role && this.roleVisibleInScope(role, organizationId))) {\n      throwRoleNotFound();\n    }\n    return role;\n  }\n\n  private roleVisibleInScope(\n    role: AthenaAuthorizationRoleRecord,\n    organizationId?: string | null\n  ): boolean {\n    if (organizationId) {\n      if (role.scopeKind !== \"organization\") {\n        return false;\n      }\n      return (\n        role.organizationId === null || role.organizationId === organizationId\n      );\n    }\n    return role.scopeKind === \"platform\" && role.organizationId === null;\n  }\n\n  private assignmentCount(roleId: string): number {\n    let count = 0;\n    for (const roleIds of this.userRoles.values()) {\n      if (roleIds.has(roleId)) {\n        count += 1;\n      }\n    }\n    for (const roleIds of this.memberRoles.values()) {\n      if (roleIds.has(roleId)) {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  private bumpScopeRevision(organizationId: string | null): void {\n    if (organizationId) {\n      this.bumpOrganizationRevision(organizationId);\n      return;\n    }\n    this.platformRevision.value += 1;\n  }\n\n  private resolveOrganizationRole(\n    roleRef: string,\n    organizationId?: string | null\n  ): AthenaAuthorizationRoleRecord {\n    const mapped = resolveMemberAssignmentRole(roleRef);\n    const matches = [...this.roles.values()].filter((role) => {\n      if (role.scopeKind !== \"organization\" || !role.assignable) {\n        return false;\n      }\n      const hit =\n        role.id === roleRef || role.key === roleRef || role.key === mapped;\n      if (!hit) {\n        return false;\n      }\n      return (\n        role.organizationId === null || role.organizationId === organizationId\n      );\n    });\n    const specific = matches.find(\n      (role) => role.organizationId === organizationId\n    );\n    const template = matches.find((role) => role.organizationId === null);\n    const role = specific ?? template;\n    if (!role) {\n      throw new Error(`Unknown role ${roleRef}`);\n    }\n    return role;\n  }\n\n  private bumpOrganizationRevision(organizationId: string): void {\n    this.organizationRevisions.set(\n      organizationId,\n      (this.organizationRevisions.get(organizationId) ?? 1) + 1\n    );\n  }\n\n  private addRoleRights(roleId: string | undefined, into: Set<string>): void {\n    if (!roleId) {\n      return;\n    }\n    for (const key of this.roleRights.get(roleId) ?? []) {\n      into.add(key);\n    }\n  }\n\n  private requireRole(roleKey: string): AthenaAuthorizationRoleRecord {\n    for (const role of this.roles.values()) {\n      if (role.key === roleKey && role.organizationId === null) {\n        return role;\n      }\n    }\n    throw new Error(`Unknown role ${roleKey}`);\n  }\n\n  private requireRoleById(roleId: string): AthenaAuthorizationRoleRecord {\n    const role = this.roles.get(roleId);\n    if (!role) {\n      throw new Error(`Unknown role id ${roleId}`);\n    }\n    return role;\n  }\n\n  private async ensure(): Promise<void> {\n    if (!this.materialized) {\n      await this.materialize();\n    }\n  }\n}\n","export const ATHENA_AUTHENTICATION_METHODS = [\n  \"password\",\n  \"passkey\",\n  \"social\",\n  \"email_link\",\n  \"email_otp\",\n  \"totp\",\n  \"recovery_code\",\n  \"impersonation\",\n] as const;\n\nexport type AthenaAuthenticationMethod =\n  (typeof ATHENA_AUTHENTICATION_METHODS)[number];\n\nexport interface AthenaAuthenticationContext {\n  authenticatedAt: Date;\n  methods: readonly AthenaAuthenticationMethod[];\n}\n\nexport interface IssueSessionAuthentication {\n  authenticatedAt?: Date;\n  methods: readonly AthenaAuthenticationMethod[];\n}\n\nconst METHOD_SET = new Set<string>(ATHENA_AUTHENTICATION_METHODS);\n\nexport function isAthenaAuthenticationMethod(\n  value: string\n): value is AthenaAuthenticationMethod {\n  return METHOD_SET.has(value);\n}\n\nexport function normalizeAuthenticationMethods(\n  value: unknown\n): AthenaAuthenticationMethod[] {\n  if (!Array.isArray(value)) {\n    return [];\n  }\n  const unique: AthenaAuthenticationMethod[] = [];\n  for (const entry of value) {\n    if (typeof entry !== \"string\" || !isAthenaAuthenticationMethod(entry)) {\n      continue;\n    }\n    if (!unique.includes(entry)) {\n      unique.push(entry);\n    }\n  }\n  return unique;\n}\n\nexport function resolveAuthenticationContext(\n  input: IssueSessionAuthentication,\n  now: Date\n): AthenaAuthenticationContext {\n  return {\n    authenticatedAt: input.authenticatedAt ?? now,\n    methods: normalizeAuthenticationMethods(input.methods),\n  };\n}\n\nexport function authenticationContextFromSession(session: {\n  authenticated_at: Date | string;\n  authentication_methods: unknown;\n}): AthenaAuthenticationContext {\n  return {\n    authenticatedAt:\n      session.authenticated_at instanceof Date\n        ? session.authenticated_at\n        : new Date(session.authenticated_at),\n    methods: normalizeAuthenticationMethods(session.authentication_methods),\n  };\n}\n\nexport function impersonationAuthenticationFromActor(session: {\n  authenticated_at: Date | string;\n  authentication_methods: unknown;\n}): AthenaAuthenticationContext {\n  const actor = authenticationContextFromSession(session);\n  return {\n    authenticatedAt: actor.authenticatedAt,\n    methods: [...actor.methods, \"impersonation\"],\n  };\n}\n\nexport function restoredAuthenticationFromImpersonation(session: {\n  authenticated_at: Date | string;\n  authentication_methods: unknown;\n}): AthenaAuthenticationContext {\n  const impersonated = authenticationContextFromSession(session);\n  return {\n    authenticatedAt: impersonated.authenticatedAt,\n    methods: impersonated.methods.filter(\n      (method) => method !== \"impersonation\"\n    ),\n  };\n}\n","export function createSessionToken(): string {\n  return `session_${crypto.randomUUID()}`;\n}\n\nexport function normalizePath(pathname: string, basePath: string): string {\n  const normalizedBase = basePath.replace(/\\/+$/, \"\") || \"\";\n  let path = pathname;\n  if (\n    normalizedBase &&\n    (path === normalizedBase || path.startsWith(`${normalizedBase}/`))\n  ) {\n    path = path.slice(normalizedBase.length) || \"/\";\n  }\n  if (!path.startsWith(\"/\")) {\n    path = `/${path}`;\n  }\n  if (path.length > 1 && path.endsWith(\"/\")) {\n    path = path.slice(0, -1);\n  }\n  return path;\n}\n\nexport function isUniqueViolation(error: unknown): boolean {\n  return Boolean(\n    error &&\n      typeof error === \"object\" &&\n      \"code\" in error &&\n      (error as { code?: string }).code === \"23505\"\n  );\n}\n","import { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\n\nexport interface RateLimitBucket {\n  count: number;\n  resetAt: number;\n}\n\nexport class MemoryRateLimiter {\n  private readonly buckets = new Map<string, RateLimitBucket>();\n\n  constructor(\n    private readonly limit: number,\n    private readonly windowMs: number\n  ) {}\n\n  consume(key: string): boolean {\n    const now = Date.now();\n    const existing = this.buckets.get(key);\n    if (!existing || existing.resetAt <= now) {\n      this.buckets.set(key, { count: 1, resetAt: now + this.windowMs });\n      return true;\n    }\n\n    if (existing.count >= this.limit) {\n      return false;\n    }\n    existing.count += 1;\n    return true;\n  }\n\n  clear(key: string): void {\n    this.buckets.delete(key);\n  }\n\n  isLimited(key: string): boolean {\n    const existing = this.buckets.get(key);\n    return existing !== undefined && existing.resetAt > Date.now() && existing.count >= this.limit;\n  }\n}\n\nexport interface OtpRateLimiter {\n  clear(key: string): Promise<void>;\n  consume(key: string): Promise<boolean>;\n  isLimited(key: string): Promise<boolean>;\n}\n\nexport class StoreRateLimiter implements OtpRateLimiter {\n  private readonly fallback: MemoryRateLimiter;\n\n  constructor(\n    private readonly resolveStores: () => AthenaAuthStores | undefined,\n    private readonly limit: number,\n    private readonly windowMs: number\n  ) {\n    this.fallback = new MemoryRateLimiter(limit, windowMs);\n  }\n\n  async consume(key: string): Promise<boolean> {\n    const stores = this.resolveStores();\n    return stores\n      ? stores.consumeRateLimit(key, this.limit, this.windowMs)\n      : this.fallback.consume(key);\n  }\n\n  async clear(key: string): Promise<void> {\n    const stores = this.resolveStores();\n    if (stores) {\n      await stores.clearRateLimit(key);\n      return;\n    }\n    this.fallback.clear(key);\n  }\n\n  async isLimited(key: string): Promise<boolean> {\n    const stores = this.resolveStores();\n    return stores\n      ? stores.isRateLimited(key, this.limit)\n      : this.fallback.isLimited(key);\n  }\n}\n\nexport function requestClientIp(\n  request: Request,\n  trustedProxy: boolean\n): string | undefined {\n  if (trustedProxy) {\n    const forwarded = request.headers.get(\"x-forwarded-for\");\n    if (forwarded) {\n      return forwarded.split(\",\")[0]?.trim() || undefined;\n    }\n    const realIp = request.headers.get(\"x-real-ip\")?.trim();\n    if (realIp) {\n      return realIp;\n    }\n  }\n}\n\nexport function requestOrigin(request: Request): string | undefined {\n  const origin = request.headers.get(\"origin\")?.trim();\n  if (origin) {\n    return origin.replace(/\\/+$/, \"\");\n  }\n  const referer = request.headers.get(\"referer\")?.trim();\n  if (!referer) {\n    return;\n  }\n  try {\n    const url = new URL(referer);\n    return `${url.protocol}//${url.host}`;\n  } catch {\n    /* invalid Referer */\n  }\n}\n\nexport function isTrustedOrigin(\n  origin: string | undefined,\n  trustedOrigins: string[],\n  requestUrl: URL\n): boolean {\n  if (!origin) {\n    return true;\n  }\n  const allowed = new Set([\n    `${requestUrl.protocol}//${requestUrl.host}`,\n    ...trustedOrigins.map((value) => value.replace(/\\/+$/, \"\")),\n  ]);\n  return allowed.has(origin.replace(/\\/+$/, \"\"));\n}\n\nexport function enforceOrigin(\n  request: Request,\n  trustedOrigins: string[]\n): void {\n  const method = request.method.toUpperCase();\n  if (method === \"GET\" || method === \"HEAD\" || method === \"OPTIONS\") {\n    return;\n  }\n  const origin = requestOrigin(request);\n  if (!isTrustedOrigin(origin, trustedOrigins, new URL(request.url))) {\n    throw AthenaAuthRuntimeError.forbidden(\"Origin is not trusted\");\n  }\n}\n\nexport function resolveTrustedCallbackUrl(input: {\n  callbackUrl?: string | null;\n  requestUrl: string | URL;\n  trustedOrigins: readonly string[];\n  fallbackPath?: string;\n}): string {\n  const trustedOrigins = input.trustedOrigins.map((origin) =>\n    new URL(origin).origin\n  );\n  const trusted = new Set<string>(trustedOrigins);\n  const requestOrigin = new URL(input.requestUrl).origin;\n  const requestOriginIsTrusted = trusted.has(requestOrigin);\n  const canonicalOrigin = trustedOrigins[0] ?? requestOrigin;\n  const raw = input.callbackUrl?.trim();\n  const fallback = input.fallbackPath ?? \"/\";\n  const baseOrigin = requestOriginIsTrusted ? requestOrigin : canonicalOrigin;\n  const candidate = raw\n    ? parseCallbackUrl(raw, new URL(baseOrigin))\n    : new URL(fallback, new URL(baseOrigin));\n  if (\n    candidate.protocol !== \"http:\" &&\n    candidate.protocol !== \"https:\"\n  ) {\n    throw AthenaAuthRuntimeError.badRequest(\"callbackURL is not trusted\");\n  }\n  if (candidate.username || candidate.password) {\n    throw AthenaAuthRuntimeError.badRequest(\"callbackURL is not trusted\");\n  }\n  const noConfiguredOriginCompatibility =\n    trustedOrigins.length === 0 &&\n    candidate.origin === requestOrigin;\n  if (!trusted.has(candidate.origin) && !noConfiguredOriginCompatibility) {\n    throw AthenaAuthRuntimeError.badRequest(\"callbackURL is not trusted\");\n  }\n  return candidate.toString();\n}\n\nfunction parseCallbackUrl(raw: string, base: URL): URL {\n  if (\n    raw.startsWith(\"//\") ||\n    !(raw.startsWith(\"/\") || /^[a-z][a-z\\d+.-]*:/i.test(raw))\n  ) {\n    throw AthenaAuthRuntimeError.badRequest(\"callbackURL is not trusted\");\n  }\n  try {\n    return new URL(raw, base);\n  } catch {\n    throw AthenaAuthRuntimeError.badRequest(\"callbackURL is not trusted\");\n  }\n}\n\nexport async function readJsonBody(\n  request: Request,\n  limitBytes: number\n): Promise<Record<string, unknown>> {\n  const contentLength = request.headers.get(\"content-length\");\n  if (contentLength && Number.parseInt(contentLength, 10) > limitBytes) {\n    throw AthenaAuthRuntimeError.payloadTooLarge();\n  }\n  const text = await request.text();\n  if (new TextEncoder().encode(text).length > limitBytes) {\n    throw AthenaAuthRuntimeError.payloadTooLarge();\n  }\n  if (!text.trim()) {\n    return {};\n  }\n  try {\n    const parsed = JSON.parse(text) as unknown;\n    if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n      throw AthenaAuthRuntimeError.badRequest(\"Invalid JSON body\");\n    }\n    return parsed as Record<string, unknown>;\n  } catch (error) {\n    if (error instanceof AthenaAuthRuntimeError) {\n      throw error;\n    }\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid JSON body\");\n  }\n}\n\nexport async function readFormBody(\n  request: Request,\n  limitBytes: number\n): Promise<Record<string, string>> {\n  const contentType = request.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim();\n  if (contentType !== \"application/x-www-form-urlencoded\") {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"OAuth protocol requests must use application/x-www-form-urlencoded\"\n    );\n  }\n  const contentLength = request.headers.get(\"content-length\");\n  if (contentLength && Number.parseInt(contentLength, 10) > limitBytes) {\n    throw AthenaAuthRuntimeError.payloadTooLarge();\n  }\n  const text = await request.text();\n  if (new TextEncoder().encode(text).length > limitBytes) {\n    throw AthenaAuthRuntimeError.payloadTooLarge();\n  }\n  const parsed = new URLSearchParams(text);\n  const body: Record<string, string> = {};\n  for (const [key, value] of parsed.entries()) {\n    if (Object.hasOwn(body, key)) {\n      throw AthenaAuthRuntimeError.badRequest(\n        `OAuth parameter \"${key}\" must be supplied once`\n      );\n    }\n    body[key] = value;\n  }\n  return body;\n}\n\nexport function asStringField(\n  body: Record<string, unknown>,\n  key: string\n): string | undefined {\n  const value = body[key];\n  return typeof value === \"string\" ? value : undefined;\n}\n\n/**\n * Better Auth organization.update posts `{ data: { name, slug, logo }, organizationId }`.\n * Top-level fields remain accepted for older callers.\n */\nexport function asDataEnvelopeStringField(\n  body: Record<string, unknown>,\n  key: string\n): string | undefined {\n  const nested = body.data;\n  if (nested && typeof nested === \"object\" && !Array.isArray(nested)) {\n    const fromData = asStringField(nested as Record<string, unknown>, key);\n    if (fromData !== undefined) {\n      return fromData;\n    }\n  }\n  return asStringField(body, key);\n}\n\nexport function requireStringField(\n  body: Record<string, unknown>,\n  key: string\n): string {\n  const value = asStringField(body, key)?.trim();\n  if (!value) {\n    throw AthenaAuthRuntimeError.badRequest(`${key} is required`);\n  }\n  return value;\n}\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\nimport { PACKAGE_VERSION } from \"../../sdk-version.ts\";\nimport { createEmbeddedCapabilitySnapshot } from \"../capabilities.ts\";\nimport {\n  ATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n  ATHENA_AUTH_SCHEMA_GENERATION,\n} from \"../contract/index.ts\";\nimport { authEmailEvents } from \"../email/index.ts\";\nimport {\n  sanitizeHookMember,\n  sanitizeHookOrganization,\n  sanitizeHookSession,\n  sanitizeHookUser,\n} from \"../hooks/sanitize.ts\";\nimport { splitPrimaryAndRest } from \"../observability/snapshots.ts\";\nimport { isUserEffectivelyBanned } from \"./admin-contract.ts\";\nimport { handleAdminRoute } from \"./admin-routes.ts\";\nimport { MemoryAdminAuthStore, PostgresAdminAuthStore } from \"./admin-store.ts\";\nimport {\n  apiKeyScopeKind,\n  bindApiKeyAuthorization,\n  isApiKeyScopeUsable,\n} from \"./api-key.ts\";\nimport {\n  requireOrganizationRoleGrant,\n  requireOrgDelete,\n  requireOrgMemberManager,\n} from \"./authorization-guard.ts\";\nimport {\n  buildSnapshot,\n  handleAuthorizationRoute,\n} from \"./authorization-routes.ts\";\nimport { handleAuthorizationServerRoutes } from \"./authorization-server/routes.ts\";\nimport { revokeAuthBridgeCodesForSessions } from \"./bridge/revoke.ts\";\nimport { handleAuthBridgeRoutes } from \"./bridge/routes.ts\";\nimport {\n  createClearSessionCookieHeader,\n  readBearerToken,\n  readSessionTokenFromCookies,\n  shouldSetSecureCookie,\n} from \"./cookies.ts\";\nimport { handleCredentialPasswordRoutes } from \"./credential-password-routes.ts\";\nimport { handleAdminEmailRoutes } from \"./email/routes.ts\";\nimport { handleUserMailRoutes, tokenizedUrl } from \"./email/user-routes.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"./errors.ts\";\nimport { handleExtendedRoute, resolveApiKeyUser } from \"./extended-routes.ts\";\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\nimport { MemoryAuthStores } from \"./memory-stores.ts\";\nimport type { AuthOrganizationRow, AuthUserRow } from \"./models.ts\";\nimport {\n  toPublicAccount,\n  toPublicMember,\n  toPublicMembersWithUsers,\n  toPublicMemberWithUser,\n  toPublicOrganization,\n  toPublicSession,\n  toPublicUser,\n} from \"./models.ts\";\nimport {\n  assertFoundingOwnerMutationAllowed,\n  assertLastOwnerMutationAllowed,\n  resolveFoundingOwnerUserId,\n} from \"./organization-invariants.ts\";\nimport { handleOrganizationInvitationRoutes } from \"./organization-invitation-routes.ts\";\nimport { handleGenerateAuthenticateOptionsRoute } from \"./passkey/generate-authenticate-options.ts\";\nimport { handleGenerateRegisterOptionsRoute } from \"./passkey/generate-register-options.ts\";\nimport {\n  handleDeletePasskeyRoute,\n  handleListUserPasskeysRoute,\n  handleUpdatePasskeyRoute,\n} from \"./passkey/manage-passkeys.ts\";\nimport { handleRelatedOriginsRoute } from \"./passkey/related-origins.ts\";\nimport { handleVerifyAuthenticationRoute } from \"./passkey/verify-authentication.ts\";\nimport { handleVerifyRegistrationRoute } from \"./passkey/verify-registration.ts\";\nimport {\n  extractPasswordHash,\n  validatePassword,\n  withPasswordHash,\n} from \"./password.ts\";\nimport { timeAuthSpan } from \"./request-timing.ts\";\nimport type { AuthRuntimeDependencies } from \"./runtime-dependencies.ts\";\nimport { isUniqueViolation } from \"./runtime-helpers.ts\";\nimport {\n  readAthenaAuthSchemaStatus,\n  toAthenaAuthSchemaCompatibility,\n} from \"./schema.ts\";\nimport {\n  asDataEnvelopeStringField,\n  asStringField,\n  readJsonBody,\n  requestClientIp,\n  requireStringField,\n} from \"./security.ts\";\nimport { handleSocialRoutes } from \"./social/routes.ts\";\nimport { advertisedSocialProviderIds } from \"./social/runtime.ts\";\n\nexport type AuthRouteDomain =\n  | \"authorization-server\"\n  | \"session\"\n  | \"credential\"\n  | \"user\"\n  | \"organization\"\n  | \"passkey\"\n  | \"token\"\n  | \"email\"\n  | \"admin\"\n  | \"social\";\n\nexport type AuthRouteHandler = (\n  request: Request,\n  path: string,\n  method: string,\n  currentStores: AthenaAuthStores,\n  headers: Headers,\n  traceId: string\n) => Promise<Response | undefined>;\n\ntype AthenaSessionEnvelope = {\n  authorization?: Awaited<ReturnType<typeof buildSnapshot>>;\n  grants: readonly string[];\n  rights: readonly AthenaRightKey[];\n  session: Pick<ReturnType<typeof toPublicSession>, \"id\" | \"userId\"> &\n    Partial<\n      Omit<ReturnType<typeof toPublicSession>, \"id\" | \"userId\" | \"token\">\n    > & {\n      token: string | null;\n    };\n  user: ReturnType<typeof toPublicUser>;\n};\n\nfunction resolveAuthRouteDomain(path: string): AuthRouteDomain | undefined {\n  if (\n    path === \"/oauth/authorize\" ||\n    path === \"/oauth/token\" ||\n    path === \"/oauth/revoke\" ||\n    path === \"/.well-known/oauth-authorization-server\" ||\n    path === \"/authorization/grants\" ||\n    /^\\/authorization\\/grants\\/[^/]+\\/revoke$/.test(path)\n  ) {\n    return \"authorization-server\";\n  }\n  if (\n    path === \"/sign-in/social\" ||\n    path === \"/link-social\" ||\n    path === \"/unlink-account\" ||\n    path.startsWith(\"/callback/\")\n  ) {\n    return \"social\";\n  }\n  if (\n    path === \"/forget-password\" ||\n    path === \"/reset-password\" ||\n    path === \"/change-password\" ||\n    path === \"/set-password\" ||\n    path.startsWith(\"/sign-up\") ||\n    path.startsWith(\"/sign-in\") ||\n    path.startsWith(\"/send-sign-in\") ||\n    path.startsWith(\"/send-security\")\n  ) {\n    return \"credential\";\n  }\n  if (path.startsWith(\"/organization\")) {\n    return \"organization\";\n  }\n  if (path.startsWith(\"/admin/\")) {\n    return \"admin\";\n  }\n  if (path.startsWith(\"/passkey\") || path.includes(\"webauthn\")) {\n    return \"passkey\";\n  }\n  if (\n    path === \"/token\" ||\n    path === \"/get-access-token\" ||\n    path === \"/refresh-token\" ||\n    path.startsWith(\"/.well-known/\")\n  ) {\n    return \"token\";\n  }\n  if (\n    path.startsWith(\"/email\") ||\n    path.startsWith(\"/change-email\") ||\n    path.includes(\"verification\")\n  ) {\n    return \"email\";\n  }\n  if (\n    path === \"/get-session\" ||\n    path === \"/sign-out\" ||\n    path.includes(\"session\") ||\n    path.startsWith(\"/authorization\")\n  ) {\n    return \"session\";\n  }\n  if (path === \"/update-user\" || path === \"/list-accounts\") {\n    return \"user\";\n  }\n}\n\nexport function createAuthRouter(deps: AuthRuntimeDependencies) {\n  const domains: Record<AuthRouteDomain, AuthRouteHandler[]> = {\n    admin: [],\n    \"authorization-server\": [],\n    credential: [],\n    email: [],\n    organization: [],\n    passkey: [],\n    session: [],\n    social: [],\n    token: [],\n    user: [],\n  };\n\n  function route(domain: AuthRouteDomain, handler: AuthRouteHandler) {\n    domains[domain].push(handler);\n  }\n\n  route(\"credential\", async (request, path, method, stores, headers, traceId) =>\n    handleCredentialPasswordRoutes(request, path, method, {\n      deps,\n      headers,\n      stores,\n      traceId,\n    })\n  );\n  route(\n    \"organization\",\n    async (request, path, method, stores, headers, traceId) =>\n      handleOrganizationInvitationRoutes(request, path, method, {\n        deps,\n        headers,\n        stores,\n        traceId,\n      })\n  );\n  route(\"session\", async (request, path, method, stores, headers, traceId) =>\n    handleAuthBridgeRoutes(request, path, method, {\n      deps,\n      headers,\n      stores,\n      traceId,\n    })\n  );\n  route(\"social\", async (request, path, method, stores, headers, traceId) =>\n    handleSocialRoutes(request, path, method, {\n      deps,\n      headers,\n      stores,\n      traceId,\n    })\n  );\n  route(\n    \"authorization-server\",\n    async (request, path, method, stores, headers, traceId) =>\n      handleAuthorizationServerRoutes(request, path, method, {\n        deps,\n        headers,\n        stores,\n        traceId,\n      })\n  );\n\n  const handleCore = async (\n    request: Request,\n    path: string,\n    currentStores: AthenaAuthStores,\n    headers: Headers,\n    traceId: string\n  ): Promise<Response> => {\n    const {\n      config,\n      hasher,\n      mutate,\n      hookRequest,\n      issueSession,\n      requireSession,\n      resolveSession,\n      emitMail,\n      emitIfRecipient,\n      identityOf,\n      passkeyOnboarding,\n      passkeyRelyingParty,\n      rateLimiter,\n    } = deps;\n    const database = deps.getDatabase();\n    const emailStore = deps.getEmailStore();\n    const delivery = deps.getDelivery();\n    const method = request.method.toUpperCase();\n    if (method === \"OPTIONS\") {\n      headers.set(\n        \"Access-Control-Expose-Headers\",\n        \"Server-Timing, X-Athena-Time, x-athena-trace-id, x-request-id\"\n      );\n      headers.set(\n        \"Access-Control-Allow-Headers\",\n        \"content-type, authorization, cookie, x-athena-sdk, x-athena-trace-id, x-request-id\"\n      );\n      return new Response(null, { headers, status: 204 });\n    }\n    if (method === \"HEAD\" && path === \"/ok\") {\n      return new Response(null, { headers, status: 200 });\n    }\n\n    if (path === \"/ok\" && method === \"GET\") {\n      return jsonResponse(\n        200,\n        {\n          capabilities: createEmbeddedCapabilitySnapshot({\n            passkeyEnabled: config.passkey.enabled,\n            passkeyOnboarding: config.passkey.onboardingEnabled,\n            socialProviders: advertisedSocialProviderIds(config.social),\n          }),\n          ok: true,\n        },\n        headers\n      );\n    }\n    if (path === \"/health\" && method === \"GET\") {\n      const schema = database\n        ? await readAthenaAuthSchemaStatus(database)\n        : toAthenaAuthSchemaCompatibility(ATHENA_AUTH_SCHEMA_GENERATION);\n      return jsonResponse(\n        200,\n        {\n          schema,\n          service: \"athena-auth\",\n          status: \"ok\",\n          version: PACKAGE_VERSION,\n        },\n        headers\n      );\n    }\n\n    const tokenPath =\n      path === \"/get-access-token\" || path === \"/refresh-token\"\n        ? \"/token\"\n        : path;\n    if (\n      path === \"/token\" ||\n      path === \"/get-access-token\" ||\n      path === \"/refresh-token\" ||\n      path === \"/.well-known/jwks.json\" ||\n      path === \"/.well-known/openid-configuration\"\n    ) {\n      const protocol = await deps.getProtocolRuntime();\n      deps.setTokenAuthority(protocol.legacyToken);\n      const session =\n        tokenPath === \"/token\"\n          ? await resolveSession(request, currentStores)\n          : null;\n      const tokenResponse = await protocol.legacyToken.handle(\n        tokenPath,\n        method,\n        request,\n        session ?? null\n      );\n      if (tokenResponse) {\n        return tokenResponse;\n      }\n    }\n\n    if (path === \"/get-session\" && (method === \"GET\" || method === \"POST\")) {\n      // AUTH-ORG-CTX-001: resolveSession heals a stale activeOrganizationId.\n      const resolved = await resolveSession(request, currentStores);\n      if (resolved) {\n        const authorization = await buildSnapshot(currentStores, resolved);\n        const sessionEnvelope: AthenaSessionEnvelope = {\n          authorization,\n          grants: [],\n          rights: authorization.effectiveRights,\n          session: toPublicSession(resolved.session),\n          user: toPublicUser(resolved.user),\n        };\n        return jsonResponse(200, sessionEnvelope, headers);\n      }\n      const apiKeyUser = await resolveApiKeyUser(request, currentStores);\n      if (\n        apiKeyUser &&\n        (await isApiKeyScopeUsable(apiKeyUser.key, currentStores))\n      ) {\n        const ownerAuthorization = await buildSnapshot(currentStores, {\n          session: {\n            active_organization_id:\n              apiKeyScopeKind(apiKeyUser.key) === \"organization\"\n                ? (apiKeyUser.key.organization_id ?? null)\n                : null,\n          },\n          user: apiKeyUser.user,\n        });\n        const authorization = bindApiKeyAuthorization(\n          ownerAuthorization,\n          apiKeyUser.permissions,\n          apiKeyScopeKind(apiKeyUser.key)\n        );\n        const sessionEnvelope: AthenaSessionEnvelope = {\n          authorization,\n          grants: [],\n          rights: authorization.effectiveRights,\n          session: {\n            id: `api-key:${apiKeyUser.user.id}`,\n            token: null,\n            userId: apiKeyUser.user.id,\n          },\n          user: toPublicUser(apiKeyUser.user),\n        };\n        return jsonResponse(200, sessionEnvelope, headers);\n      }\n      throw AthenaAuthRuntimeError.unauthenticated();\n    }\n\n    if (path === \"/sign-up/email\" && method === \"POST\") {\n      if (!config.emailAndPassword.enabled) {\n        throw AthenaAuthRuntimeError.forbidden(\n          \"User registration is not enabled\"\n        );\n      }\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const email = requireStringField(body, \"email\");\n      const password = requireStringField(body, \"password\");\n      validatePassword(password, {\n        maxLength: config.emailAndPassword.maxPasswordLength,\n        minLength: config.emailAndPassword.minPasswordLength,\n      });\n      if (await currentStores.getUserByEmail(email)) {\n        throw AthenaAuthRuntimeError.conflict(\n          \"A user with this email already exists\"\n        );\n      }\n      const hash = await hasher.hash(password);\n      const name = asStringField(body, \"name\") ?? email.split(\"@\")[0] ?? email;\n      const username = asStringField(body, \"username\");\n      const created = await mutate({\n        context: {\n          actor: { kind: \"user\" },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"user.create\",\n        execute: async (scope) => {\n          let user: AuthUserRow;\n          try {\n            user = await scope.stores.createUser({\n              email,\n              id: crypto.randomUUID(),\n              metadata: withPasswordHash({}, hash),\n              name,\n              username,\n            });\n          } catch (error) {\n            if (isUniqueViolation(error)) {\n              throw AthenaAuthRuntimeError.conflict(\n                \"A user with this email already exists\"\n              );\n            }\n            throw error;\n          }\n          await scope.stores.createAccount({\n            accountId: user.id,\n            id: crypto.randomUUID(),\n            password: hash,\n            providerId: ATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n            userId: user.id,\n          });\n          if (!config.emailAndPassword.autoSignIn) {\n            return { session: undefined, user };\n          }\n          const session = await issueSession(\n            request,\n            scope.stores,\n            user.id,\n            headers,\n            { methods: [\"password\"] }\n          );\n          const refreshed = (await scope.stores.getUserById(user.id)) ?? user;\n          return { session, user: refreshed };\n        },\n        input: { email, name, username },\n        resultOf: ({ user }) => ({ user: sanitizeHookUser(user) }),\n        secondaryEvents: ({ session }) =>\n          session\n            ? [\n                {\n                  event: \"session.issue\" as const,\n                  input: { userId: session.user_id },\n                  result: { session: sanitizeHookSession(session) },\n                },\n              ]\n            : [],\n      });\n      await emitIfRecipient(created.user.email, {\n        data: {\n          user_name: created.user.name ?? created.user.email ?? created.user.id,\n        },\n        eventType: authEmailEvents.user.signUp.welcome,\n      });\n      if (!created.session) {\n        return jsonResponse(\n          200,\n          { session: null, token: null, user: toPublicUser(created.user) },\n          headers\n        );\n      }\n      return jsonResponse(\n        200,\n        {\n          session: toPublicSession(created.session),\n          token: created.session.token,\n          user: toPublicUser(created.user),\n        },\n        headers\n      );\n    }\n\n    if (\n      (path === \"/sign-in/email\" || path === \"/sign-in/username\") &&\n      method === \"POST\"\n    ) {\n      const ip =\n        requestClientIp(request, config.security.trustedProxy) ?? \"local\";\n      if (!rateLimiter.consume(`signin:${ip}`)) {\n        throw AthenaAuthRuntimeError.rateLimited();\n      }\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const password = requireStringField(body, \"password\");\n      const user =\n        path === \"/sign-in/username\"\n          ? await currentStores.getUserByUsername(\n              requireStringField(body, \"username\")\n            )\n          : await currentStores.getUserByEmail(\n              requireStringField(body, \"email\")\n            );\n      if (!user) {\n        throw AthenaAuthRuntimeError.invalidCredentials();\n      }\n      if (user.banned && !isUserEffectivelyBanned(user)) {\n        await currentStores.updateUser(user.id, {\n          banExpires: null,\n          banned: false,\n          banReason: null,\n        });\n        user.banned = false;\n        user.ban_expires = null;\n        user.ban_reason = null;\n      } else if (isUserEffectivelyBanned(user)) {\n        throw AthenaAuthRuntimeError.forbidden(\"User is banned\");\n      }\n      const storedHash =\n        extractPasswordHash(user.metadata) ??\n        (await currentStores.listAccounts(user.id)).find(\n          (account) =>\n            account.provider_id === ATHENA_AUTH_CREDENTIAL_PROVIDER_ID\n        )?.password;\n      if (!(storedHash && (await hasher.verify(password, storedHash)))) {\n        throw AthenaAuthRuntimeError.invalidCredentials();\n      }\n      if (hasher.needsRehash(storedHash)) {\n        const nextHash = await hasher.hash(password);\n        await currentStores.updateUser(user.id, {\n          metadata: withPasswordHash(\n            typeof user.metadata === \"object\" ? user.metadata : {},\n            nextHash\n          ),\n        });\n      }\n      if (user.two_factor_enabled) {\n        const pendingToken = `2fa_${crypto.randomUUID()}`;\n        await currentStores.createVerification({\n          expiresAt: new Date(Date.now() + 5 * 60 * 1000),\n          id: crypto.randomUUID(),\n          identifier: `2fa_pending:${user.id}`,\n          value: pendingToken,\n        });\n        return jsonResponse(\n          200,\n          {\n            token: pendingToken,\n            twoFactorRedirect: true,\n          },\n          headers\n        );\n      }\n      const session = await mutate({\n        context: {\n          actor: { kind: \"user\", userId: user.id },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"session.issue\",\n        execute: (scope) =>\n          issueSession(request, scope.stores, user.id, headers, {\n            methods: [\"password\"],\n          }),\n        input: { userId: user.id },\n        resultOf: (issued) => ({ session: sanitizeHookSession(issued) }),\n      });\n      const refreshed = (await currentStores.getUserById(user.id)) ?? user;\n      return jsonResponse(\n        200,\n        {\n          redirect: false,\n          session: toPublicSession(session),\n          token: session.token,\n          url: null,\n          user: toPublicUser(refreshed),\n        },\n        headers\n      );\n    }\n\n    if (path === \"/sign-out\" && method === \"POST\") {\n      const token =\n        readBearerToken(request.headers.get(\"authorization\")) ??\n        readSessionTokenFromCookies(\n          request.headers.get(\"cookie\"),\n          config.session.cookieName\n        );\n      if (token) {\n        const existing = await currentStores.getSessionByToken(token);\n        if (existing) {\n          await mutate({\n            context: {\n              actor: {\n                kind: \"user\",\n                sessionId: existing.id,\n                userId: existing.user_id,\n              },\n              request: hookRequest(request, path),\n              traceId,\n            },\n            event: \"session.revoke\",\n            execute: async (scope) => {\n              await revokeAuthBridgeCodesForSessions(\n                deps.getBridgeCodeStore(),\n                [existing.id]\n              );\n              await scope.stores.deleteSession(token);\n            },\n            input: { scope: \"one\", userId: existing.user_id },\n            previous: async () => ({\n              session: sanitizeHookSession(existing),\n            }),\n            resultOf: () => ({\n              id: existing.id,\n              revoked: true as const,\n              userId: existing.user_id,\n            }),\n          });\n        }\n      }\n      headers.append(\n        \"set-cookie\",\n        createClearSessionCookieHeader(\n          config.session.cookieName,\n          shouldSetSecureCookie(request, config.security.cookieSecure)\n        )\n      );\n      return jsonResponse(200, { success: true }, headers);\n    }\n\n    if (path === \"/send-sign-in-email\" && method === \"POST\") {\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const email = requireStringField(body, \"email\");\n      const user = await currentStores.getUserByEmail(email);\n      if (user?.email) {\n        const token = Buffer.from(\n          crypto.getRandomValues(new Uint8Array(32))\n        ).toString(\"base64url\");\n        await mutate({\n          context: {\n            actor: { kind: \"user\", userId: user.id },\n            request: hookRequest(request, path),\n            traceId,\n          },\n          event: \"user.sign-in.email\",\n          execute: async (scope) => {\n            await scope.stores.createVerification({\n              expiresAt: new Date(Date.now() + 15 * 60 * 1000),\n              id: crypto.randomUUID(),\n              identifier: `magic:${user.email ?? email}`,\n              value: token,\n            });\n            return { email: user.email ?? email };\n          },\n          input: { email },\n          resultOf: (result) => result,\n        });\n        const origin = new URL(request.url).origin;\n        const redirectTo = asStringField(body, \"callbackURL\");\n        const signInUrl = tokenizedUrl(\n          redirectTo,\n          token,\n          origin,\n          \"/sign-in/magic\",\n          config.security.trustedOrigins\n        );\n        await emitMail({\n          data: { sign_in_url: signInUrl },\n          eventType: authEmailEvents.user.signIn.email,\n          recipient: user.email,\n        });\n      }\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/send-security-alert\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const alertTitle = requireStringField(body, \"alert_title\");\n      const alertDetails = requireStringField(body, \"alert_details\");\n      const email = asStringField(body, \"email\") ?? resolved.user.email;\n      if (!email) {\n        throw AthenaAuthRuntimeError.badRequest(\"email is required\");\n      }\n      if (email !== resolved.user.email && resolved.user.role !== \"admin\") {\n        throw AthenaAuthRuntimeError.forbidden();\n      }\n      await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"user.security.alert\",\n        execute: async () => ({ email }),\n        input: { alertDetails, alertTitle, email },\n        resultOf: (result) => result,\n      });\n      await emitMail({\n        data: {\n          alert_details: alertDetails,\n          alert_title: alertTitle,\n        },\n        eventType: authEmailEvents.user.security.alert,\n        recipient: email,\n      });\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/change-password\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const currentPassword = requireStringField(body, \"currentPassword\");\n      const newPassword = requireStringField(body, \"newPassword\");\n      validatePassword(newPassword, {\n        maxLength: config.emailAndPassword.maxPasswordLength,\n        minLength: config.emailAndPassword.minPasswordLength,\n      });\n      const storedHash = extractPasswordHash(resolved.user.metadata);\n      if (!(storedHash && (await hasher.verify(currentPassword, storedHash)))) {\n        throw AthenaAuthRuntimeError.invalidCredentials();\n      }\n      const hash = await hasher.hash(newPassword);\n      await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"user.password.change\",\n        execute: async (scope) => {\n          await scope.stores.updateUser(resolved.user.id, {\n            metadata: withPasswordHash(\n              typeof resolved.user.metadata === \"object\"\n                ? resolved.user.metadata\n                : {},\n              hash\n            ),\n          });\n          if (body.revokeOtherSessions) {\n            const others = (\n              await scope.stores.listUserSessions(resolved.user.id)\n            ).filter((session) => session.token !== resolved.token);\n            await revokeAuthBridgeCodesForSessions(\n              deps.getBridgeCodeStore(),\n              others.map((session) => session.id)\n            );\n            await scope.stores.deleteUserSessions(\n              resolved.user.id,\n              resolved.token\n            );\n          }\n        },\n        input: { userId: resolved.user.id },\n        resultOf: () => ({ userId: resolved.user.id }),\n      });\n      await emitIfRecipient(resolved.user.email, {\n        data: {},\n        eventType: authEmailEvents.user.password.changed,\n      });\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/set-password\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const newPassword =\n        asStringField(body, \"newPassword\") ??\n        requireStringField(body, \"password\");\n      validatePassword(newPassword, {\n        maxLength: config.emailAndPassword.maxPasswordLength,\n        minLength: config.emailAndPassword.minPasswordLength,\n      });\n      const hash = await hasher.hash(newPassword);\n      await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"user.password.change\",\n        execute: async (scope) => {\n          await scope.stores.updateUser(resolved.user.id, {\n            metadata: withPasswordHash(\n              typeof resolved.user.metadata === \"object\"\n                ? resolved.user.metadata\n                : {},\n              hash\n            ),\n          });\n        },\n        input: { userId: resolved.user.id },\n        resultOf: () => ({ userId: resolved.user.id }),\n      });\n      await emitIfRecipient(resolved.user.email, {\n        data: {},\n        eventType: authEmailEvents.user.password.changed,\n      });\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/update-user\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const image = asStringField(body, \"image\") ?? undefined;\n      const name = asStringField(body, \"name\");\n      const updated = await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"user.update\",\n        execute: (scope) =>\n          scope.stores.updateUser(resolved.user.id, { image, name }),\n        input: { image, name, userId: resolved.user.id },\n        previous: async () => ({ user: sanitizeHookUser(resolved.user) }),\n        resultOf: (user) => ({ user: sanitizeHookUser(user) }),\n      });\n      return jsonResponse(200, { user: toPublicUser(updated) }, headers);\n    }\n\n    if (path === \"/list-sessions\" && method === \"GET\") {\n      const resolved = await requireSession(request, currentStores);\n      const sessions = await currentStores.listUserSessions(resolved.user.id);\n      return jsonResponse(\n        200,\n        sessions.map((session) => toPublicSession(session)),\n        headers\n      );\n    }\n\n    if (path === \"/revoke-session\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const token = requireStringField(body, \"token\");\n      const target = await currentStores.getSessionByToken(token);\n      if (target && target.user_id !== resolved.user.id) {\n        throw AthenaAuthRuntimeError.forbidden();\n      }\n      if (target) {\n        await mutate({\n          context: {\n            actor: {\n              kind: \"user\",\n              sessionId: resolved.session.id,\n              userId: resolved.user.id,\n            },\n            request: hookRequest(request, path),\n            traceId,\n          },\n          event: \"session.revoke\",\n          execute: async (scope) => {\n            await revokeAuthBridgeCodesForSessions(deps.getBridgeCodeStore(), [\n              target.id,\n            ]);\n            await scope.stores.deleteSession(token);\n          },\n          input: { scope: \"one\", userId: resolved.user.id },\n          previous: async () => ({\n            session: sanitizeHookSession(target),\n          }),\n          resultOf: () => ({\n            id: target.id,\n            revoked: true as const,\n            userId: target.user_id,\n          }),\n        });\n      }\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/revoke-sessions\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"session.revoke\",\n        execute: async (scope) => {\n          const live = await scope.stores.listUserSessions(resolved.user.id);\n          await revokeAuthBridgeCodesForSessions(\n            deps.getBridgeCodeStore(),\n            live.map((session) => session.id)\n          );\n          await scope.stores.deleteUserSessions(resolved.user.id);\n          return splitPrimaryAndRest(\n            live.map((session) => sanitizeHookSession(session))\n          );\n        },\n        input: { scope: \"all\", userId: resolved.user.id },\n        previous: async () => ({\n          session: sanitizeHookSession(resolved.session),\n        }),\n        // biome-ignore lint/suspicious/noExplicitAny: revoke partition from splitPrimaryAndRest\n        previousOf: (partitioned: any) =>\n          partitioned\n            ? { session: partitioned.primary }\n            : { session: sanitizeHookSession(resolved.session) },\n        // biome-ignore lint/suspicious/noExplicitAny: revoke partition from splitPrimaryAndRest\n        resultOf: (partitioned: any) => {\n          const primary =\n            partitioned?.primary ?? sanitizeHookSession(resolved.session);\n          return {\n            id: primary.id,\n            revoked: true as const,\n            userId: primary.userId,\n          };\n        },\n        // biome-ignore lint/suspicious/noExplicitAny: revoke partition from splitPrimaryAndRest\n        secondaryEvents: (partitioned: any) =>\n          (partitioned?.rest ?? []).map(\n            (session: { id: string; userId: string }) => ({\n              event: \"session.revoke\" as const,\n              input: { scope: \"all\" as const, userId: resolved.user.id },\n              previous: { session },\n              result: {\n                id: session.id,\n                revoked: true as const,\n                userId: session.userId,\n              },\n            })\n          ),\n        shouldPersistAudit: (partitioned) => partitioned !== undefined,\n      });\n      headers.append(\n        \"set-cookie\",\n        createClearSessionCookieHeader(\n          config.session.cookieName,\n          shouldSetSecureCookie(request, config.security.cookieSecure)\n        )\n      );\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/revoke-other-sessions\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"session.revoke\",\n        execute: async (scope) => {\n          const live = (\n            await scope.stores.listUserSessions(resolved.user.id)\n          ).filter((session) => session.token !== resolved.token);\n          await revokeAuthBridgeCodesForSessions(\n            deps.getBridgeCodeStore(),\n            live.map((session) => session.id)\n          );\n          await scope.stores.deleteUserSessions(\n            resolved.user.id,\n            resolved.token\n          );\n          return splitPrimaryAndRest(\n            live.map((session) => sanitizeHookSession(session))\n          );\n        },\n        input: { scope: \"others\", userId: resolved.user.id },\n        previous: async () => ({\n          session: sanitizeHookSession(resolved.session),\n        }),\n        // biome-ignore lint/suspicious/noExplicitAny: revoke partition from splitPrimaryAndRest\n        previousOf: (partitioned: any) =>\n          partitioned\n            ? { session: partitioned.primary }\n            : { session: sanitizeHookSession(resolved.session) },\n        // biome-ignore lint/suspicious/noExplicitAny: revoke partition from splitPrimaryAndRest\n        resultOf: (partitioned: any) => {\n          const primary =\n            partitioned?.primary ?? sanitizeHookSession(resolved.session);\n          return {\n            id: primary.id,\n            revoked: true as const,\n            userId: primary.userId,\n          };\n        },\n        // biome-ignore lint/suspicious/noExplicitAny: revoke partition from splitPrimaryAndRest\n        secondaryEvents: (partitioned: any) =>\n          (partitioned?.rest ?? []).map(\n            (session: { id: string; userId: string }) => ({\n              event: \"session.revoke\" as const,\n              input: { scope: \"others\" as const, userId: resolved.user.id },\n              previous: { session },\n              result: {\n                id: session.id,\n                revoked: true as const,\n                userId: session.userId,\n              },\n            })\n          ),\n        shouldPersistAudit: (partitioned) => partitioned !== undefined,\n      });\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/list-accounts\" && method === \"GET\") {\n      const resolved = await requireSession(request, currentStores);\n      const accounts = await currentStores.listAccounts(resolved.user.id);\n      return jsonResponse(\n        200,\n        accounts.map((account) => toPublicAccount(account)),\n        headers\n      );\n    }\n\n    if (path === \"/organization/create\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const name = requireStringField(body, \"name\");\n      const slug =\n        asStringField(body, \"slug\") ??\n        name\n          .toLowerCase()\n          .replace(/[^a-z0-9]+/g, \"-\")\n          .replace(/^-|-$/g, \"\");\n      const created = await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"organization.create\",\n        execute: async (scope) => {\n          let organization: AuthOrganizationRow;\n          try {\n            organization = await scope.stores.createOrganization({\n              createdByUserId: resolved.user.id,\n              id: crypto.randomUUID(),\n              name,\n              slug,\n            });\n          } catch (error) {\n            if (isUniqueViolation(error)) {\n              throw AthenaAuthRuntimeError.conflict(\n                \"Organization slug already exists\"\n              );\n            }\n            throw error;\n          }\n          const member = await scope.stores.addMember({\n            id: crypto.randomUUID(),\n            organizationId: organization.id,\n            role: \"owner\",\n            userId: resolved.user.id,\n          });\n          await scope.stores.setSessionActiveOrganization(\n            resolved.token,\n            organization.id\n          );\n          return { member, organization };\n        },\n        input: { name, slug },\n        resultOf: ({ member, organization }) => ({\n          member: sanitizeHookMember(member),\n          organization: sanitizeHookOrganization(organization),\n        }),\n      });\n      await emitIfRecipient(resolved.user.email, {\n        data: { organization_name: created.organization.name },\n        eventType: authEmailEvents.organization.created,\n      });\n      return jsonResponse(\n        200,\n        { organization: toPublicOrganization(created.organization) },\n        headers\n      );\n    }\n\n    if (path === \"/organization/list\" && method === \"GET\") {\n      const resolved = await requireSession(request, currentStores);\n      const organizations = await currentStores.listOrganizationsForUser(\n        resolved.user.id\n      );\n      return jsonResponse(\n        200,\n        organizations.map((organization) => toPublicOrganization(organization)),\n        headers\n      );\n    }\n\n    if (path === \"/organization/get-full-organization\" && method === \"GET\") {\n      const resolved = await requireSession(request, currentStores);\n      const url = new URL(request.url);\n      const organizationId =\n        url.searchParams.get(\"organizationId\") ??\n        resolved.session.active_organization_id;\n      if (!organizationId) {\n        throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n      }\n      const member = await timeAuthSpan(\"authz\", () =>\n        currentStores.getMember(organizationId, resolved.user.id)\n      );\n      if (!member) {\n        throw AthenaAuthRuntimeError.forbidden();\n      }\n      const [organization, members] = await Promise.all([\n        timeAuthSpan(\"org_lookup\", () =>\n          currentStores.getOrganization(organizationId)\n        ),\n        currentStores.listMembers(organizationId),\n      ]);\n      if (!organization) {\n        throw AthenaAuthRuntimeError.notFound(\"Organization not found\");\n      }\n      return jsonResponse(\n        200,\n        {\n          ...toPublicOrganization(organization),\n          members: await toPublicMembersWithUsers(members, (id) =>\n            currentStores.getUserById(id)\n          ),\n        },\n        headers\n      );\n    }\n\n    if (path === \"/organization/update\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const organizationId =\n        asStringField(body, \"organizationId\") ??\n        resolved.session.active_organization_id;\n      if (!organizationId) {\n        throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n      }\n      const member = await currentStores.getMember(\n        organizationId,\n        resolved.user.id\n      );\n      await requireOrgMemberManager(\n        currentStores,\n        resolved.user.id,\n        organizationId,\n        member\n      );\n      const name = asDataEnvelopeStringField(body, \"name\");\n      const slug = asDataEnvelopeStringField(body, \"slug\");\n      const rawLogo =\n        asDataEnvelopeStringField(body, \"logo\") ??\n        asDataEnvelopeStringField(body, \"image\");\n      const logo =\n        rawLogo === undefined ? undefined : rawLogo === \"\" ? null : rawLogo;\n      const organization = await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            organizationId,\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"organization.update\",\n        execute: (scope) =>\n          scope.stores.updateOrganization(organizationId, {\n            logo,\n            name,\n            slug,\n          }),\n        input: {\n          logo,\n          name,\n          organizationId,\n          slug,\n        },\n        previous: async () => {\n          const existing = await currentStores.getOrganization(organizationId);\n          if (!existing) {\n            throw AthenaAuthRuntimeError.notFound(\"Organization not found\");\n          }\n          return { organization: sanitizeHookOrganization(existing) };\n        },\n        resultOf: (row) => ({\n          organization: sanitizeHookOrganization(row),\n        }),\n      });\n      return jsonResponse(\n        200,\n        { organization: toPublicOrganization(organization) },\n        headers\n      );\n    }\n\n    if (path === \"/organization/delete\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const organizationId = requireStringField(body, \"organizationId\");\n      const member = await currentStores.getMember(\n        organizationId,\n        resolved.user.id\n      );\n      await requireOrgDelete(\n        currentStores,\n        resolved.user.id,\n        organizationId,\n        member\n      );\n      await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            organizationId,\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"organization.delete\",\n        execute: async (scope) => {\n          await scope.stores.clearOrganizationActiveSessions(organizationId);\n          await scope.stores.deleteOrganization(organizationId);\n        },\n        input: { organizationId },\n        previous: async () => {\n          const existing = await currentStores.getOrganization(organizationId);\n          if (!existing) {\n            throw AthenaAuthRuntimeError.notFound(\"Organization not found\");\n          }\n          return { organization: sanitizeHookOrganization(existing) };\n        },\n        resultOf: () => ({\n          deleted: true as const,\n          id: organizationId,\n        }),\n      });\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/organization/set-active\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const organizationId = asStringField(body, \"organizationId\") ?? null;\n      if (\n        organizationId === (resolved.session.active_organization_id ?? null)\n      ) {\n        return jsonResponse(200, { status: true }, headers);\n      }\n      if (organizationId) {\n        const member = await currentStores.getMember(\n          organizationId,\n          resolved.user.id\n        );\n        if (!member) {\n          throw AthenaAuthRuntimeError.forbidden();\n        }\n      }\n      await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            organizationId: organizationId ?? undefined,\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"session.activeOrganization.update\",\n        execute: async (scope) => {\n          await scope.stores.setSessionActiveOrganization(\n            resolved.token,\n            organizationId\n          );\n        },\n        input: { organizationId },\n        previous: async () => ({\n          organizationId: resolved.session.active_organization_id,\n        }),\n        resultOf: () => ({ organizationId }),\n      });\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/organization/list-members\" && method === \"GET\") {\n      const resolved = await requireSession(request, currentStores);\n      const organizationId =\n        new URL(request.url).searchParams.get(\"organizationId\") ??\n        resolved.session.active_organization_id;\n      if (!organizationId) {\n        throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n      }\n      const member = await timeAuthSpan(\"authz\", () =>\n        currentStores.getMember(organizationId, resolved.user.id)\n      );\n      if (!member) {\n        throw AthenaAuthRuntimeError.forbidden();\n      }\n      const members = await currentStores.listMembers(organizationId);\n      const organization = await currentStores.getOrganization(organizationId);\n      const foundingOwnerUserId = resolveFoundingOwnerUserId(\n        organization,\n        members\n      );\n      const annotated = await Promise.all(\n        members.map(async (row) => {\n          const actions = await currentStores.authorization.annotateMember(\n            row,\n            {\n              foundingOwnerUserId,\n              getMember: (orgId, userId) =>\n                currentStores.getMember(orgId, userId),\n              userId: resolved.user.id,\n            }\n          );\n          const user = await currentStores.getUserById(row.user_id);\n          return toPublicMember(row, user, actions);\n        })\n      );\n      return jsonResponse(\n        200,\n        {\n          members: annotated,\n        },\n        headers\n      );\n    }\n\n    if (path === \"/organization/add-member\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const organizationId =\n        asStringField(body, \"organizationId\") ??\n        resolved.session.active_organization_id;\n      if (!organizationId) {\n        throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n      }\n      const actor = await currentStores.getMember(\n        organizationId,\n        resolved.user.id\n      );\n      await requireOrgMemberManager(\n        currentStores,\n        resolved.user.id,\n        organizationId,\n        actor\n      );\n      const userId = requireStringField(body, \"userId\");\n      const requestedRole = asStringField(body, \"role\") ?? \"member\";\n      const granted = await requireOrganizationRoleGrant(\n        currentStores,\n        resolved.user.id,\n        organizationId,\n        actor,\n        requestedRole,\n        { role: \"member\", userId }\n      );\n      const role = granted.persistedRole;\n      if (await currentStores.getMember(organizationId, userId)) {\n        throw AthenaAuthRuntimeError.conflict(\"Member already exists\");\n      }\n      const addedUser = await currentStores.getUserById(userId);\n      if (!addedUser) {\n        throw AthenaAuthRuntimeError.notFound(\"User not found\");\n      }\n      const member = await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            organizationId,\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"organization.member.add\",\n        execute: (scope) =>\n          scope.stores.addMember({\n            assignedBy: resolved.user.id,\n            id: crypto.randomUUID(),\n            organizationId,\n            role,\n            userId,\n          }),\n        input: { organizationId, role, userId },\n        resultOf: (row) => ({ member: sanitizeHookMember(row) }),\n      });\n      const addedOrg = await currentStores.getOrganization(organizationId);\n      await emitIfRecipient(addedUser.email, {\n        data: {\n          actor_identity: identityOf(resolved.user),\n          member_identity: identityOf(addedUser),\n          organization_name: addedOrg?.name ?? \"organization\",\n        },\n        eventType: authEmailEvents.organization.member.added,\n      });\n      return jsonResponse(\n        200,\n        { member: toPublicMember(member, addedUser) },\n        headers\n      );\n    }\n\n    if (path === \"/organization/remove-member\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const organizationId =\n        asStringField(body, \"organizationId\") ??\n        resolved.session.active_organization_id;\n      const memberIdOrUserId =\n        asStringField(body, \"memberIdOrEmail\") ??\n        requireStringField(body, \"memberId\");\n      if (!organizationId) {\n        throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n      }\n      const actor = await currentStores.getMember(\n        organizationId,\n        resolved.user.id\n      );\n      await requireOrgMemberManager(\n        currentStores,\n        resolved.user.id,\n        organizationId,\n        actor\n      );\n      const members = await currentStores.listMembers(organizationId);\n      const target =\n        members.find((item) => item.id === memberIdOrUserId) ??\n        members.find((item) => item.user_id === memberIdOrUserId);\n      if (!target) {\n        throw AthenaAuthRuntimeError.notFound(\"Member not found\");\n      }\n      const organization = await currentStores.getOrganization(organizationId);\n      assertFoundingOwnerMutationAllowed({\n        kind: \"remove\",\n        members,\n        organization,\n        targetUserId: target.user_id,\n      });\n      assertLastOwnerMutationAllowed({\n        kind: \"remove\",\n        members,\n        targetUserId: target.user_id,\n      });\n      await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            organizationId,\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"organization.member.remove\",\n        execute: async (scope) => {\n          await scope.stores.removeMember(organizationId, target.user_id);\n          await scope.stores.clearUserActiveOrganization(\n            target.user_id,\n            organizationId\n          );\n        },\n        input: { organizationId, userId: target.user_id },\n        previous: async () => ({ member: sanitizeHookMember(target) }),\n        resultOf: () => ({\n          deleted: true as const,\n          id: target.id,\n          organizationId,\n          userId: target.user_id,\n        }),\n      });\n      const removedUser = await currentStores.getUserById(target.user_id);\n      const removedOrg = await currentStores.getOrganization(organizationId);\n      await emitIfRecipient(removedUser?.email, {\n        data: {\n          actor_identity: identityOf(resolved.user),\n          member_identity: identityOf(removedUser ?? { id: target.user_id }),\n          organization_name: removedOrg?.name ?? \"organization\",\n        },\n        eventType: authEmailEvents.organization.member.removed,\n      });\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/organization/update-member-role\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const organizationId =\n        asStringField(body, \"organizationId\") ??\n        resolved.session.active_organization_id;\n      const role = requireStringField(body, \"role\");\n      const memberId = requireStringField(body, \"memberId\");\n      if (!organizationId) {\n        throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n      }\n      const actor = await currentStores.getMember(\n        organizationId,\n        resolved.user.id\n      );\n      await requireOrgMemberManager(\n        currentStores,\n        resolved.user.id,\n        organizationId,\n        actor\n      );\n      const members = await currentStores.listMembers(organizationId);\n      const target =\n        members.find((item) => item.id === memberId) ??\n        members.find((item) => item.user_id === memberId);\n      if (!target) {\n        throw AthenaAuthRuntimeError.notFound(\"Member not found\");\n      }\n      const organization = await currentStores.getOrganization(organizationId);\n      const granted = await requireOrganizationRoleGrant(\n        currentStores,\n        resolved.user.id,\n        organizationId,\n        actor,\n        role,\n        { role: target.role, userId: target.user_id }\n      );\n      assertFoundingOwnerMutationAllowed({\n        kind: \"role\",\n        members,\n        nextRole: granted.persistedRole,\n        organization,\n        targetUserId: target.user_id,\n      });\n      assertLastOwnerMutationAllowed({\n        kind: \"role\",\n        members,\n        nextRole: granted.persistedRole,\n        targetUserId: target.user_id,\n      });\n      const updated = await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            organizationId,\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"organization.member.role.update\",\n        execute: async (scope) => {\n          const next = await scope.stores.updateMemberRole(\n            organizationId,\n            target.user_id,\n            granted.persistedRole\n          );\n          return next ?? target;\n        },\n        input: {\n          memberId: target.id,\n          organizationId,\n          role: granted.persistedRole,\n        },\n        previous: async () => ({ role: target.role }),\n        resultOf: (member) => ({ member: sanitizeHookMember(member) }),\n      });\n      const roleUser = await currentStores.getUserById(target.user_id);\n      const roleOrg = await currentStores.getOrganization(organizationId);\n      await emitIfRecipient(roleUser?.email, {\n        data: {\n          actor_identity: identityOf(resolved.user),\n          member_identity: identityOf(roleUser ?? { id: target.user_id }),\n          new_role: granted.persistedRole,\n          organization_name: roleOrg?.name ?? \"organization\",\n          previous_role: target.role,\n        },\n        eventType: authEmailEvents.organization.member.roleUpdated,\n      });\n      return jsonResponse(\n        200,\n        {\n          member: await toPublicMemberWithUser(updated, (id) =>\n            currentStores.getUserById(id)\n          ),\n        },\n        headers\n      );\n    }\n\n    if (path === \"/organization/leave\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const organizationId =\n        asStringField(body, \"organizationId\") ??\n        resolved.session.active_organization_id;\n      if (!organizationId) {\n        throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n      }\n      const leaving = await currentStores.getMember(\n        organizationId,\n        resolved.user.id\n      );\n      if (!leaving) {\n        throw AthenaAuthRuntimeError.notFound(\"Member not found\");\n      }\n      const [organization, members] = await Promise.all([\n        currentStores.getOrganization(organizationId),\n        currentStores.listMembers(organizationId),\n      ]);\n      assertFoundingOwnerMutationAllowed({\n        kind: \"leave\",\n        members,\n        organization,\n        targetUserId: resolved.user.id,\n      });\n      assertLastOwnerMutationAllowed({\n        kind: \"leave\",\n        members,\n        targetUserId: resolved.user.id,\n      });\n      await mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            organizationId,\n            sessionId: resolved.session.id,\n            userId: resolved.user.id,\n          },\n          request: hookRequest(request, path),\n          traceId,\n        },\n        event: \"organization.member.remove\",\n        execute: async (scope) => {\n          await scope.stores.removeMember(organizationId, resolved.user.id);\n          await scope.stores.clearUserActiveOrganization(\n            resolved.user.id,\n            organizationId\n          );\n        },\n        input: { organizationId, userId: resolved.user.id },\n        previous: async () => ({ member: sanitizeHookMember(leaving) }),\n        resultOf: () => ({\n          deleted: true as const,\n          id: leaving.id,\n          organizationId,\n          userId: resolved.user.id,\n        }),\n      });\n      const leftOrg = await currentStores.getOrganization(organizationId);\n      await emitIfRecipient(resolved.user.email, {\n        data: {\n          actor_identity: identityOf(resolved.user),\n          member_identity: identityOf(resolved.user),\n          organization_name: leftOrg?.name ?? \"organization\",\n        },\n        eventType: authEmailEvents.organization.member.removed,\n      });\n      return jsonResponse(200, { status: true }, headers);\n    }\n\n    if (path === \"/organization/check-slug\" && method === \"POST\") {\n      await requireSession(request, currentStores);\n      const body = await readJsonBody(request, config.security.bodyLimitBytes);\n      const slug = requireStringField(body, \"slug\");\n      const existing = await currentStores.getOrganizationBySlug(slug);\n      return jsonResponse(200, { status: !existing }, headers);\n    }\n\n    if (path === \"/organization/has-permission\" && method === \"POST\") {\n      const resolved = await requireSession(request, currentStores);\n      const organizationId =\n        asStringField(\n          await readJsonBody(request, config.security.bodyLimitBytes).catch(\n            () => ({})\n          ),\n          \"organizationId\"\n        ) ?? resolved.session.active_organization_id;\n      if (!organizationId) {\n        return jsonResponse(\n          200,\n          { error: \"No organization\", success: false },\n          headers\n        );\n      }\n      const member = await currentStores.getMember(\n        organizationId,\n        resolved.user.id\n      );\n      return jsonResponse(\n        200,\n        { error: member ? undefined : \"Forbidden\", success: Boolean(member) },\n        headers\n      );\n    }\n\n    if (path === \"/organization/get-active-member\" && method === \"GET\") {\n      const resolved = await requireSession(request, currentStores);\n      const organizationId = resolved.session.active_organization_id;\n      if (!organizationId) {\n        throw AthenaAuthRuntimeError.badRequest(\"No active organization\");\n      }\n      const member = await currentStores.getMember(\n        organizationId,\n        resolved.user.id\n      );\n      if (!member) {\n        throw AthenaAuthRuntimeError.notFound(\"Member not found\");\n      }\n      return jsonResponse(\n        200,\n        {\n          member: await toPublicMemberWithUser(member, (id) =>\n            currentStores.getUserById(id)\n          ),\n        },\n        headers\n      );\n    }\n\n    const relatedOrigins = await handleRelatedOriginsRoute(\n      request,\n      path,\n      method,\n      {\n        headers,\n        relyingParty: passkeyRelyingParty,\n      }\n    );\n    if (relatedOrigins) {\n      return relatedOrigins;\n    }\n\n    const registerOptions = await handleGenerateRegisterOptionsRoute(\n      request,\n      path,\n      method,\n      {\n        config,\n        headers,\n        relyingParty: passkeyRelyingParty,\n        resolveSession,\n        stores: currentStores,\n      }\n    );\n    if (registerOptions) {\n      return registerOptions;\n    }\n\n    const authenticateOptions = await handleGenerateAuthenticateOptionsRoute(\n      request,\n      path,\n      method,\n      {\n        config,\n        headers,\n        relyingParty: passkeyRelyingParty,\n        resolveSession,\n        stores: currentStores,\n      }\n    );\n    if (authenticateOptions) {\n      return authenticateOptions;\n    }\n\n    const verifyRegistration = await handleVerifyRegistrationRoute(\n      request,\n      path,\n      method,\n      {\n        config,\n        headers,\n        hookRequest,\n        issueSession: (authRequest, authStores, userId) =>\n          issueSession(authRequest, authStores, userId, headers, {\n            methods: [\"passkey\"],\n          }),\n        mutate,\n        relyingParty: passkeyRelyingParty,\n        resolveOnboardingUser:\n          passkeyOnboarding && typeof passkeyOnboarding === \"object\"\n            ? passkeyOnboarding.resolveUser\n            : undefined,\n        resolveSession,\n        stores: currentStores,\n        traceId,\n      }\n    );\n    if (verifyRegistration) {\n      return verifyRegistration;\n    }\n\n    const verifyAuthentication = await handleVerifyAuthenticationRoute(\n      request,\n      path,\n      method,\n      {\n        config,\n        headers,\n        hookRequest,\n        issueSession: (authRequest, stores, userId) =>\n          issueSession(authRequest, stores, userId, headers, {\n            methods: [\"passkey\"],\n          }),\n        mutate,\n        relyingParty: passkeyRelyingParty,\n        stores: currentStores,\n        traceId,\n      }\n    );\n    if (verifyAuthentication) {\n      return verifyAuthentication;\n    }\n\n    const listPasskeys = await handleListUserPasskeysRoute(\n      request,\n      path,\n      method,\n      {\n        config,\n        headers,\n        hookRequest,\n        mutate,\n        requireSession,\n        stores: currentStores,\n        traceId,\n      }\n    );\n    if (listPasskeys) {\n      return listPasskeys;\n    }\n\n    const deletePasskey = await handleDeletePasskeyRoute(\n      request,\n      path,\n      method,\n      {\n        config,\n        headers,\n        hookRequest,\n        mutate,\n        requireSession,\n        stores: currentStores,\n        traceId,\n      }\n    );\n    if (deletePasskey) {\n      return deletePasskey;\n    }\n\n    const updatePasskey = await handleUpdatePasskeyRoute(\n      request,\n      path,\n      method,\n      {\n        config,\n        headers,\n        hookRequest,\n        mutate,\n        requireSession,\n        stores: currentStores,\n        traceId,\n      }\n    );\n    if (updatePasskey) {\n      return updatePasskey;\n    }\n\n    const userMail = await handleUserMailRoutes(request, path, method, {\n      emailStore,\n      headers,\n      hookRequest,\n      mutate,\n      requireSession,\n      stores: currentStores,\n      traceId,\n    });\n    if (userMail) {\n      return userMail;\n    }\n\n    const emailAdmin = await handleAdminEmailRoutes(request, path, method, {\n      delivery,\n      emailStore,\n      headers,\n      requireSession,\n      stores: currentStores,\n    });\n    if (emailAdmin) {\n      return emailAdmin;\n    }\n\n    const authorizationResponse = await handleAuthorizationRoute(\n      request,\n      path,\n      method,\n      currentStores,\n      headers,\n      requireSession,\n      config.security.bodyLimitBytes\n    );\n    if (authorizationResponse) {\n      return authorizationResponse;\n    }\n\n    const adminStore = database\n      ? new PostgresAdminAuthStore(database)\n      : currentStores instanceof MemoryAuthStores\n        ? new MemoryAdminAuthStore(currentStores)\n        : undefined;\n    if (adminStore && path.startsWith(\"/admin/\")) {\n      const adminResponse = await handleAdminRoute(request, path, method, {\n        config,\n        hasher,\n        headers,\n        hookRequest,\n        issueSession: (adminRequest, stores, userId, authentication) =>\n          issueSession(adminRequest, stores, userId, headers, authentication),\n        listSessionsForUser: (userId) => currentStores.listUserSessions(userId),\n        mutate,\n        requireSession: (adminRequest) =>\n          requireSession(adminRequest, currentStores),\n        revokeBridgeCodesForUser: async (userId, exceptToken) => {\n          const sessions = await currentStores.listUserSessions(userId);\n          await revokeAuthBridgeCodesForSessions(\n            deps.getBridgeCodeStore(),\n            sessions\n              .filter(\n                (session) => !exceptToken || session.token !== exceptToken\n              )\n              .map((session) => session.id)\n          );\n        },\n        store: adminStore,\n        traceId,\n      });\n      if (adminResponse) {\n        return adminResponse;\n      }\n    }\n\n    const extended = await handleExtendedRoute(request, path, method, {\n      config,\n      emitMail,\n      getBridgeCodeStore: deps.getBridgeCodeStore,\n      hasher,\n      headers,\n      hookRequest,\n      issueSession,\n      mutate,\n      otpRateLimiter: deps.otpRateLimiter,\n      otpVerificationRateLimiter: deps.otpVerificationRateLimiter,\n      requireSession,\n      stores: currentStores,\n      traceId,\n    });\n    if (extended) {\n      return extended;\n    }\n\n    throw AthenaAuthRuntimeError.notFound(\"Not found\");\n  };\n\n  const handleRoute = async (\n    request: Request,\n    path: string,\n    currentStores: AthenaAuthStores,\n    headers: Headers,\n    traceId: string\n  ): Promise<Response> => {\n    const method = request.method.toUpperCase();\n    if (method === \"OPTIONS\") {\n      headers.set(\n        \"Access-Control-Expose-Headers\",\n        \"Server-Timing, X-Athena-Time, x-athena-trace-id, x-request-id\"\n      );\n      headers.set(\n        \"Access-Control-Allow-Headers\",\n        \"content-type, authorization, cookie, x-athena-sdk, x-athena-trace-id, x-request-id\"\n      );\n      return new Response(null, { headers, status: 204 });\n    }\n\n    const domain = resolveAuthRouteDomain(path);\n    if (domain) {\n      for (const handler of domains[domain]) {\n        const response = await handler(\n          request,\n          path,\n          method,\n          currentStores,\n          headers,\n          traceId\n        );\n        if (response) {\n          return response;\n        }\n      }\n    }\n\n    return handleCore(request, path, currentStores, headers, traceId);\n  };\n\n  return { handleRoute, route };\n}\n","import { toPublicApiKey } from \"../local/api-key.ts\";\nimport type {\n  AuthAccountRow,\n  AuthInvitationRow,\n  AuthMemberRow,\n  AuthOrganizationRow,\n  AuthSessionRow,\n  AuthUserRow,\n} from \"../local/models.ts\";\nimport {\n  toPublicInvitation,\n  toPublicMember,\n  toPublicOrganization,\n  toPublicUser,\n} from \"../local/models.ts\";\nimport type { AuthApiKeyRow } from \"../local/stores.ts\";\n\nexport type AthenaAuthHookUser = ReturnType<typeof toPublicUser>;\n\n/** Sanitized account DTO for domain hooks. Never includes tokens or OAuth secrets. */\nexport interface AthenaAuthHookAccount {\n  accountId: string;\n  id: string;\n  providerId: string;\n  userId: string;\n}\n\nfunction firstString(\n  row: Record<string, unknown>,\n  keys: readonly string[]\n): string {\n  for (const key of keys) {\n    const value = row[key];\n    if (typeof value === \"string\" && value.length > 0) {\n      return value;\n    }\n  }\n  return \"\";\n}\n\nexport function sanitizeHookAccount(\n  row: AuthAccountRow | Record<string, unknown>\n): AthenaAuthHookAccount {\n  const record = row as Record<string, unknown>;\n  return {\n    accountId: firstString(record, [\"accountId\", \"account_id\"]),\n    id: firstString(record, [\"id\"]),\n    providerId: firstString(record, [\"providerId\", \"provider_id\"]),\n    userId: firstString(record, [\"userId\", \"user_id\"]),\n  };\n}\nexport type AthenaAuthHookOrganization = ReturnType<\n  typeof toPublicOrganization\n>;\nexport type AthenaAuthHookMember = ReturnType<typeof toPublicMember>;\nexport type AthenaAuthHookInvitation = ReturnType<typeof toPublicInvitation>;\n\nexport function sanitizeHookUser(row: AuthUserRow): AthenaAuthHookUser {\n  return toPublicUser(row);\n}\n\nexport function sanitizeHookOrganization(\n  row: AuthOrganizationRow\n): AthenaAuthHookOrganization {\n  return toPublicOrganization(row);\n}\n\nexport function sanitizeHookMember(row: AuthMemberRow): AthenaAuthHookMember {\n  return toPublicMember(row);\n}\n\nexport function sanitizeHookInvitation(\n  row: AuthInvitationRow\n): AthenaAuthHookInvitation {\n  return toPublicInvitation(row);\n}\n\nexport function sanitizeHookSession(row: AuthSessionRow): {\n  activeOrganizationId: string | null;\n  expiresAt: string;\n  id: string;\n  impersonatedBy: string | null;\n  userId: string;\n} {\n  const expiresAt =\n    row.expires_at instanceof Date\n      ? row.expires_at.toISOString()\n      : new Date(row.expires_at).toISOString();\n  return {\n    activeOrganizationId: row.active_organization_id,\n    expiresAt,\n    id: row.id,\n    impersonatedBy: row.impersonated_by,\n    userId: row.user_id,\n  };\n}\n\nexport function sanitizeHookApiKey(row: AuthApiKeyRow): {\n  id: string;\n  name: string | null;\n  prefix: string | null;\n  userId: string;\n} {\n  const publicKey = toPublicApiKey(row);\n  return {\n    id: row.id,\n    name: typeof publicKey.name === \"string\" ? publicKey.name : row.name,\n    prefix: row.prefix,\n    userId: row.user_id,\n  };\n}\n\nexport type AthenaAuthHookPasskey = {\n  createdAt?: string;\n  id: string;\n  name: string | null;\n  userId: string;\n};\n\nexport function sanitizeHookPasskey(input: {\n  createdAt?: Date | string;\n  id: string;\n  name?: string | null;\n  userId: string;\n}): AthenaAuthHookPasskey {\n  const createdAt =\n    input.createdAt instanceof Date\n      ? input.createdAt.toISOString()\n      : typeof input.createdAt === \"string\"\n        ? input.createdAt\n        : undefined;\n  return {\n    createdAt,\n    id: input.id,\n    name: input.name ?? null,\n    userId: input.userId,\n  };\n}\n","import { type AthenaRightKey, parseAthenaRightKey } from \"../../rights/key.ts\";\nimport { rightMatches } from \"../../rights/matching.ts\";\nimport { getAthenaAuthorizationRight } from \"../../runtime/authorization/catalog.ts\";\nimport { capabilitiesFromRights } from \"../../runtime/authorization/capabilities.ts\";\nimport type { AuthorizationSnapshot } from \"../../runtime/authorization/types.ts\";\nimport type { AuthApiKeyRow } from \"./stores.ts\";\n\nexport type ApiKeyScopeKind = \"legacy\" | \"organization\" | \"platform\";\n\nconst START_LENGTH = 6;\nconst MAX_API_KEY_LIFETIME_SECONDS = 365 * 24 * 60 * 60;\nconst MAX_API_KEY_REMAINING = 1_000_000;\n\nexport async function sha256Base64Url(value: string): Promise<string> {\n  const digest = new Uint8Array(\n    await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(value))\n  );\n  return Buffer.from(digest).toString(\"base64url\");\n}\n\nexport async function generateApiKey(prefix?: string): Promise<{\n  fullKey: string;\n  hash: string;\n  start: string;\n}> {\n  const raw = Buffer.from(crypto.getRandomValues(new Uint8Array(32))).toString(\n    \"base64url\"\n  );\n  const start = raw.slice(0, START_LENGTH);\n  const fullKey = `${prefix ?? \"\"}${raw}`;\n  return {\n    fullKey,\n    hash: await sha256Base64Url(fullKey),\n    start,\n  };\n}\n\nexport function parseApiKeyInteger(\n  value: unknown,\n  field: string,\n  options: { max: number; min?: number } = { max: Number.MAX_SAFE_INTEGER }\n): number | undefined {\n  if (value === undefined || value === null || value === \"\") {\n    return;\n  }\n  if (typeof value !== \"string\" && typeof value !== \"number\") {\n    throw new TypeError(`${field} must be an integer`);\n  }\n  const parsed =\n    typeof value === \"number\"\n      ? value\n      : Number(value.trim());\n  const min = options.min ?? 1;\n  if (\n    !Number.isSafeInteger(parsed) ||\n    parsed < min ||\n    parsed > options.max\n  ) {\n    throw new TypeError(`${field} must be an integer between ${min} and ${options.max}`);\n  }\n  return parsed;\n}\n\nexport function normalizeApiKeyPrefix(value: unknown): string | undefined {\n  if (value === undefined || value === null || value === \"\") {\n    return;\n  }\n  if (\n    typeof value !== \"string\" ||\n    value.length > 32 ||\n    !/^[A-Za-z0-9_-]+$/.test(value)\n  ) {\n    throw new TypeError(\"prefix must contain only letters, numbers, '_' or '-'\");\n  }\n  return value;\n}\n\nexport function parseApiKeyLifetime(value: unknown): number | undefined {\n  return parseApiKeyInteger(value, \"expiresIn\", {\n    max: MAX_API_KEY_LIFETIME_SECONDS,\n  });\n}\n\nexport function parseApiKeyRemaining(value: unknown): number | undefined {\n  return parseApiKeyInteger(value, \"remaining\", {\n    max: MAX_API_KEY_REMAINING,\n  });\n}\n\nexport function parseApiKeyPermissionKeys(value: string): AthenaRightKey[] {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(value);\n  } catch {\n    throw new TypeError(\"permissions must be a JSON object\");\n  }\n  if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n    throw new TypeError(\"permissions must be a JSON object\");\n  }\n\n  const rights: AthenaRightKey[] = [];\n  for (const [resource, actions] of Object.entries(parsed)) {\n    if (\n      !Array.isArray(actions) ||\n      actions.some((action) => typeof action !== \"string\" || action.length === 0)\n    ) {\n      throw new TypeError(\n        \"permissions must map resources to non-empty action strings\"\n      );\n    }\n    for (const action of actions) {\n      rights.push(\n        parseAthenaRightKey(\n          resource === \"*\" && action === \"*\" ? \"*\" : `${resource}.${action}`\n        )\n      );\n    }\n  }\n  return rights;\n}\n\nexport function toPublicApiKey(\n  row: AuthApiKeyRow,\n  fullKey?: string\n): Record<string, unknown> {\n  return {\n    createdAt:\n      row.created_at instanceof Date\n        ? row.created_at.toISOString()\n        : new Date(row.created_at).toISOString(),\n    enabled: Boolean(row.enabled),\n    expiresAt: row.expires_at\n      ? row.expires_at instanceof Date\n        ? row.expires_at.toISOString()\n        : new Date(row.expires_at).toISOString()\n      : null,\n    id: row.id,\n    key: fullKey,\n    lastRequest: row.last_request\n      ? row.last_request instanceof Date\n        ? row.last_request.toISOString()\n        : new Date(row.last_request).toISOString()\n      : null,\n    metadata: row.metadata ? safeJson(row.metadata) : null,\n    name: row.name,\n    permissions: row.permissions ? safeJson(row.permissions) : null,\n    prefix: row.prefix,\n    remaining: row.remaining,\n    organizationId: row.organization_id ?? null,\n    scopeKind: apiKeyScopeKind(row),\n    start: row.start,\n    updatedAt:\n      row.updated_at instanceof Date\n        ? row.updated_at.toISOString()\n        : new Date(row.updated_at).toISOString(),\n    userId: row.user_id,\n  };\n}\n\nfunction safeJson(value: string): unknown {\n  try {\n    return JSON.parse(value);\n  } catch {\n    return value;\n  }\n}\n\nexport function isApiKeyExpired(row: AuthApiKeyRow): boolean {\n  if (!row.expires_at) {\n    return false;\n  }\n  return new Date(row.expires_at).getTime() <= Date.now();\n}\n\nexport function isApiKeyUsable(row: AuthApiKeyRow): boolean {\n  return (\n    row.enabled &&\n    !isApiKeyExpired(row) &&\n    (row.remaining === null || row.remaining > 0)\n  );\n}\n\nexport function apiKeyScopeKind(row: AuthApiKeyRow): ApiKeyScopeKind {\n  return row.scope_kind ?? \"legacy\";\n}\n\nexport async function isApiKeyScopeUsable(\n  row: AuthApiKeyRow,\n  stores: {\n    getMember: (\n      organizationId: string,\n      userId: string\n    ) => Promise<unknown>;\n  }\n): Promise<boolean> {\n  const scopeKind = apiKeyScopeKind(row);\n  if (scopeKind === \"organization\") {\n    return (\n      typeof row.organization_id === \"string\" &&\n      row.organization_id.length > 0 &&\n      Boolean(await stores.getMember(row.organization_id, row.user_id))\n    );\n  }\n  return row.organization_id == null;\n}\n\nexport function bindApiKeyAuthorization(\n  ownerAuthorization: AuthorizationSnapshot,\n  permissions: readonly AthenaRightKey[] | undefined,\n  scopeKind: ApiKeyScopeKind\n): AuthorizationSnapshot {\n  if (scopeKind === \"legacy\" || !permissions) {\n    return {\n      ...ownerAuthorization,\n      assignableRoles: [],\n      capabilities: capabilitiesFromRights([]),\n      effectiveRights: [],\n      roles: [],\n    };\n  }\n  const scopeRights =\n    scopeKind === \"organization\"\n      ? ownerAuthorization.effectiveRights.filter((right) => {\n          const definition = getAthenaAuthorizationRight(right);\n          return definition !== undefined && definition.scopeKind !== \"platform\";\n        })\n      : ownerAuthorization.effectiveRights;\n  const effectiveRights =\n    scopeKind === \"organization\"\n      ? permissions.flatMap((permission) => {\n          const definition = getAthenaAuthorizationRight(permission);\n          if (definition) {\n            return scopeRights.some((ownedRight) =>\n              rightMatches(ownedRight, permission)\n            )\n              ? [permission]\n              : [];\n          }\n          return scopeRights.filter((ownedRight) =>\n            rightMatches(permission, ownedRight)\n          );\n        })\n      : permissions.filter((permission) =>\n          ownerAuthorization.effectiveRights.some((ownedRight) =>\n            rightMatches(ownedRight, permission)\n          )\n        );\n  return {\n    ...ownerAuthorization,\n    assignableRoles: [],\n    capabilities: capabilitiesFromRights(effectiveRights),\n    effectiveRights,\n    roles: [],\n  };\n}\n","import type {\n  AthenaAuthenticationMethod,\n} from \"./authentication-context.ts\";\n\nexport interface AuthUserRow {\n  ban_expires: Date | string | null;\n  ban_reason: string | null;\n  banned: boolean;\n  created_at: Date | string;\n  display_username: string | null;\n  email: string | null;\n  email_verified: boolean;\n  id: string;\n  image: string | null;\n  last_sign_in_at: Date | string | null;\n  metadata: Record<string, unknown> | string;\n  name: string | null;\n  role: string | null;\n  two_factor_enabled: boolean;\n  updated_at: Date | string;\n  username: string | null;\n}\n\nexport interface AuthSessionRow {\n  active: boolean;\n  active_organization_id: string | null;\n  authenticated_at: Date | string;\n  authentication_methods: AthenaAuthenticationMethod[] | string;\n  created_at: Date | string;\n  expires_at: Date | string;\n  id: string;\n  impersonated_by: string | null;\n  ip_address: string | null;\n  token: string;\n  updated_at: Date | string;\n  user_agent: string | null;\n  user_id: string;\n}\n\nexport interface AuthAccountRow {\n  access_token: string | null;\n  access_token_expires_at: Date | string | null;\n  account_id: string;\n  created_at: Date | string;\n  id: string;\n  id_token: string | null;\n  password: string | null;\n  provider_id: string;\n  refresh_token: string | null;\n  refresh_token_expires_at: Date | string | null;\n  scope: string | null;\n  updated_at: Date | string;\n  user_id: string;\n}\n\nexport interface AuthVerificationRow {\n  created_at: Date | string;\n  expires_at: Date | string;\n  id: string;\n  identifier: string;\n  updated_at: Date | string;\n  value: string;\n}\n\nexport interface AuthOrganizationRow {\n  created_at: Date | string;\n  created_by_user_id: string | null;\n  id: string;\n  logo: string | null;\n  metadata: Record<string, unknown> | string;\n  name: string;\n  slug: string;\n  updated_at: Date | string;\n}\n\nexport interface AuthMemberRow {\n  created_at: Date | string;\n  id: string;\n  organization_id: string;\n  role: string;\n  user_id: string;\n}\n\nexport interface AuthInvitationRow {\n  created_at: Date | string;\n  email: string;\n  expires_at: Date | string;\n  id: string;\n  inviter_id: string;\n  organization_id: string;\n  role: string;\n  status: string;\n}\n\nexport interface AuthPasskeyRow {\n  aaguid: string | null;\n  backed_up: boolean;\n  counter: bigint | string | number;\n  created_at: Date | string;\n  credential_id: string;\n  device_type: string;\n  id: string;\n  name: string;\n  public_key: string;\n  resident_key: boolean | null;\n  transports: string | null;\n  updated_at: Date | string;\n  user_id: string;\n}\n\nfunction asIso(value: Date | string | null | undefined): string | null {\n  if (!value) {\n    return null;\n  }\n  const date = value instanceof Date ? value : new Date(value);\n  return date.toISOString();\n}\n\nfunction asIsoRequired(value: Date | string): string {\n  return asIso(value) ?? new Date().toISOString();\n}\n\nexport function parseMetadata(\n  value: Record<string, unknown> | string | null | undefined\n): Record<string, unknown> {\n  if (!value) {\n    return {};\n  }\n  if (typeof value === \"string\") {\n    try {\n      const parsed = JSON.parse(value) as unknown;\n      return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n        ? (parsed as Record<string, unknown>)\n        : {};\n    } catch {\n      return {};\n    }\n  }\n  return value;\n}\n\nexport function toPublicUser(row: AuthUserRow) {\n  return {\n    banExpires: asIso(row.ban_expires),\n    banned: Boolean(row.banned),\n    banReason: row.ban_reason,\n    createdAt: asIsoRequired(row.created_at),\n    displayUsername: row.display_username,\n    email: row.email,\n    emailVerified: Boolean(row.email_verified),\n    id: row.id,\n    image: row.image,\n    lastSignInAt: asIso(row.last_sign_in_at),\n    name: row.name,\n    role: row.role,\n    twoFactorEnabled: Boolean(row.two_factor_enabled),\n    updatedAt: asIsoRequired(row.updated_at),\n    username: row.username,\n  };\n}\n\nexport function toPublicSession(row: AuthSessionRow) {\n  return {\n    activeOrganizationId: row.active_organization_id,\n    createdAt: asIsoRequired(row.created_at),\n    expiresAt: asIsoRequired(row.expires_at),\n    id: row.id,\n    impersonatedBy: row.impersonated_by,\n    ipAddress: row.ip_address,\n    token: row.token,\n    updatedAt: asIsoRequired(row.updated_at),\n    userAgent: row.user_agent,\n    userId: row.user_id,\n  };\n}\n\nexport function toPublicOrganization(row: AuthOrganizationRow) {\n  return {\n    createdAt: asIsoRequired(row.created_at),\n    createdByUserId: row.created_by_user_id,\n    id: row.id,\n    logo: row.logo,\n    metadata: parseMetadata(row.metadata),\n    name: row.name,\n    slug: row.slug,\n    updatedAt: asIsoRequired(row.updated_at),\n  };\n}\n\nfunction rowString(row: object, snake: string, camel: string): string {\n  const record = row as Record<string, unknown>;\n  const snakeValue = record[snake];\n  if (typeof snakeValue === \"string\" && snakeValue.length > 0) {\n    return snakeValue;\n  }\n  const camelValue = record[camel];\n  if (typeof camelValue === \"string\" && camelValue.length > 0) {\n    return camelValue;\n  }\n  return \"\";\n}\n\nfunction memberUserId(row: AuthMemberRow): string {\n  return rowString(row, \"user_id\", \"userId\");\n}\n\nfunction memberCreatedAt(row: AuthMemberRow): Date | string {\n  return row.created_at;\n}\n\nexport function toPublicMember(\n  row: AuthMemberRow,\n  user?: AuthUserRow | null,\n  authorization?: {\n    canChangeRole: boolean;\n    canRemove: boolean;\n    denialReasons: {\n      changeRole?: string;\n      remove?: string;\n    };\n    roleDisplayName: string;\n    roleKey: string;\n  }\n) {\n  const publicUser = user ? toPublicUser(user) : undefined;\n  return {\n    createdAt: asIsoRequired(memberCreatedAt(row)),\n    email: publicUser?.email ?? null,\n    id: row.id,\n    organizationId: rowString(row, \"organization_id\", \"organizationId\"),\n    role: row.role,\n    user: publicUser,\n    userId: memberUserId(row),\n    ...(authorization ? { authorization } : {}),\n  };\n}\n\nexport async function toPublicMemberWithUser(\n  row: AuthMemberRow,\n  getUserById: (id: string) => Promise<AuthUserRow | undefined>\n) {\n  return toPublicMember(row, await getUserById(memberUserId(row)));\n}\n\nexport async function toPublicMembersWithUsers(\n  members: readonly AuthMemberRow[],\n  getUserById: (id: string) => Promise<AuthUserRow | undefined>\n) {\n  const uniqueIds = [\n    ...new Set(members.map((member) => memberUserId(member)).filter(Boolean)),\n  ];\n  const users = await Promise.all(\n    uniqueIds.map(async (id) => {\n      const user = await getUserById(id);\n      return [id, user] as const;\n    })\n  );\n  const byId = new Map(users);\n  return members.map((row) => toPublicMember(row, byId.get(memberUserId(row))));\n}\n\nexport function toPublicInvitation(row: AuthInvitationRow) {\n  return {\n    createdAt: asIsoRequired(row.created_at),\n    email: row.email,\n    expiresAt: asIsoRequired(row.expires_at),\n    id: row.id,\n    inviterId: row.inviter_id,\n    organizationId: row.organization_id,\n    role: row.role,\n    status: row.status,\n  };\n}\n\nexport function toPublicAccount(row: AuthAccountRow) {\n  return {\n    accountId: row.account_id,\n    createdAt: asIsoRequired(row.created_at),\n    id: row.id,\n    providerId: row.provider_id,\n    userId: row.user_id,\n  };\n}\n","import {\n  sanitizeAuthApiKey,\n  sanitizeAuthInvitation,\n  sanitizeAuthMember,\n  sanitizeAuthOrganization,\n  sanitizeAuthPasskey,\n  sanitizeAuthSession,\n  sanitizeAuthUser,\n} from \"../domain/payloads.ts\";\n\nexport {\n  sanitizeAuthApiKey,\n  sanitizeAuthInvitation,\n  sanitizeAuthMember,\n  sanitizeAuthOrganization,\n  sanitizeAuthPasskey,\n  sanitizeAuthSession,\n  sanitizeAuthUser,\n};\n\nexport interface AthenaAuthAuditTombstone {\n  deleted: true;\n  id: string;\n  organizationId?: string;\n  userId?: string;\n}\n\nexport interface AthenaAuthSessionRevokeReceipt {\n  id: string;\n  revoked: true;\n  userId: string;\n}\n\nexport function toAuthAuditTombstone(input: {\n  id: string;\n  organizationId?: string;\n  userId?: string;\n}): AthenaAuthAuditTombstone {\n  const tombstone: AthenaAuthAuditTombstone = {\n    deleted: true,\n    id: input.id,\n  };\n  if (input.organizationId !== undefined) {\n    tombstone.organizationId = input.organizationId;\n  }\n  if (input.userId !== undefined) {\n    tombstone.userId = input.userId;\n  }\n  return tombstone;\n}\n\nexport function toAuthSessionRevokeReceipt(input: {\n  id: string;\n  userId: string;\n}): AthenaAuthSessionRevokeReceipt {\n  return {\n    id: input.id,\n    revoked: true,\n    userId: input.userId,\n  };\n}\n\nexport function splitPrimaryAndRest<T>(\n  items: readonly T[]\n): { primary: T; rest: T[] } | undefined {\n  const [primary, ...rest] = items;\n  if (primary === undefined) {\n    return;\n  }\n  return { primary, rest };\n}\n","import type { AthenaAuthenticationMethod } from \"./authentication-context.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\n\nexport const ATHENA_AUTH_ADMIN_PATHS = {\n  banUser: \"/admin/ban-user\",\n  createUser: \"/admin/create-user\",\n  getUser: \"/admin/get-user\",\n  impersonateUser: \"/admin/impersonate-user\",\n  listUsers: \"/admin/list-users\",\n  removeUser: \"/admin/remove-user\",\n  revokeUserSessions: \"/admin/revoke-user-sessions\",\n  setRole: \"/admin/set-role\",\n  stopImpersonating: \"/admin/stop-impersonating\",\n  unbanUser: \"/admin/unban-user\",\n  updateUser: \"/admin/update-user\",\n} as const;\n\nexport type AthenaAuthAdminPath =\n  (typeof ATHENA_AUTH_ADMIN_PATHS)[keyof typeof ATHENA_AUTH_ADMIN_PATHS];\n\nexport interface AthenaAuthAdminListUsersInput {\n  banned?: boolean;\n  limit?: number;\n  offset?: number;\n  query?: string;\n  role?: string;\n}\n\nexport interface AthenaAuthAdminListUsersResult {\n  limit: number;\n  offset: number;\n  total: number;\n  users: AuthUserRow[];\n}\n\nexport interface AthenaAuthAdminCreateUserInput {\n  email: string;\n  emailVerified?: boolean;\n  name?: string;\n  password?: string;\n  role?: string;\n  username?: string;\n}\n\nexport interface AthenaAuthAdminUpdateUserInput {\n  banExpires?: Date | null;\n  banned?: boolean;\n  banReason?: string | null;\n  email?: string;\n  emailVerified?: boolean;\n  image?: string | null;\n  name?: string | null;\n  role?: string | null;\n  userId: string;\n}\n\nexport interface AthenaAuthAdminStore {\n  createImpersonationSession(input: {\n    activeOrganizationId?: string | null;\n    authenticatedAt: Date;\n    authenticationMethods: readonly AthenaAuthenticationMethod[];\n    expiresAt: Date;\n    id: string;\n    impersonatedBy: string;\n    ipAddress?: string | null;\n    token: string;\n    userAgent?: string | null;\n    userId: string;\n  }): Promise<AuthSessionRow>;\n  createUser(\n    input: AthenaAuthAdminCreateUserInput & {\n      id: string;\n      metadata?: Record<string, unknown>;\n    }\n  ): Promise<AuthUserRow>;\n  deleteSession(token: string): Promise<boolean>;\n  deleteUser(userId: string): Promise<boolean>;\n  deleteUserSessions(userId: string, exceptToken?: string): Promise<number>;\n  getUser(userId: string): Promise<AuthUserRow | undefined>;\n  getUserByEmail(email: string): Promise<AuthUserRow | undefined>;\n  listUsers(\n    input: AthenaAuthAdminListUsersInput\n  ): Promise<AthenaAuthAdminListUsersResult>;\n  updateUser(input: AthenaAuthAdminUpdateUserInput): Promise<AuthUserRow>;\n}\n\nexport const ATHENA_AUTH_ADMIN_ROLES = [\n  \"user\",\n  \"admin\",\n  \"superadmin\",\n  \"owner\",\n] as const;\n\nexport type AthenaAuthAdminRole = (typeof ATHENA_AUTH_ADMIN_ROLES)[number];\n\nconst ADMIN_ROLE_RANK: Record<AthenaAuthAdminRole, number> = {\n  admin: 1,\n  owner: 3,\n  superadmin: 2,\n  user: 0,\n};\n\nexport function normalizeAdminRole(\n  role: string | null | undefined\n): string | null {\n  if (typeof role !== \"string\") {\n    return null;\n  }\n  const trimmed = role.trim();\n  if (!trimmed) {\n    return null;\n  }\n  const lower = trimmed.toLowerCase();\n  return ATHENA_AUTH_ADMIN_ROLES.includes(lower as AthenaAuthAdminRole)\n    ? lower\n    : trimmed;\n}\n\nexport function isAthenaAdminRole(role: string | null | undefined): boolean {\n  const normalized = normalizeAdminRole(role);\n  return (\n    normalized === \"admin\" ||\n    normalized === \"superadmin\" ||\n    normalized === \"owner\"\n  );\n}\n\nexport function adminRoleRank(role: string | null | undefined): number {\n  const normalized = normalizeAdminRole(role);\n  if (\n    normalized &&\n    ATHENA_AUTH_ADMIN_ROLES.includes(normalized as AthenaAuthAdminRole)\n  ) {\n    return ADMIN_ROLE_RANK[normalized as AthenaAuthAdminRole];\n  }\n  return ADMIN_ROLE_RANK.user;\n}\n\n/**\n * Administrative control-plane roles are ranked.\n * Unknown strings are application custom roles and may be assigned by any admin.\n */\nexport function canAssignRole(\n  actorRole: string | null | undefined,\n  targetRole: string | null | undefined\n): boolean {\n  if (!isAthenaAdminRole(actorRole)) {\n    return false;\n  }\n  const assigned = normalizeAdminRole(targetRole);\n  if (!assigned) {\n    return false;\n  }\n  if (!ATHENA_AUTH_ADMIN_ROLES.includes(assigned as AthenaAuthAdminRole)) {\n    return true;\n  }\n  return adminRoleRank(actorRole) > adminRoleRank(assigned);\n}\n\nexport function canActOnAdminTarget(\n  actorRole: string | null | undefined,\n  targetRole: string | null | undefined\n): boolean {\n  if (!isAthenaAdminRole(targetRole)) {\n    return isAthenaAdminRole(actorRole);\n  }\n  return adminRoleRank(actorRole) > adminRoleRank(targetRole);\n}\n\nexport function isUserEffectivelyBanned(\n  user: { banned?: boolean | null; ban_expires?: Date | string | null },\n  now = new Date()\n): boolean {\n  if (!user.banned) {\n    return false;\n  }\n  if (!user.ban_expires) {\n    return true;\n  }\n  const expires = new Date(user.ban_expires);\n  if (Number.isNaN(expires.getTime())) {\n    return true;\n  }\n  return expires.getTime() > now.getTime();\n}\n\nconst PUBLIC_ADMIN_SECRET_KEYS = [\n  \"password\",\n  \"password_hash\",\n  \"passwordHash\",\n  \"metadata\",\n  \"secret\",\n  \"totp\",\n  \"recovery\",\n  \"refreshToken\",\n  \"refresh_token\",\n  \"accessToken\",\n  \"access_token\",\n  \"apiKey\",\n  \"api_key\",\n];\n\nexport function assertPublicAdminUserSafe(\n  value: unknown,\n  label = \"admin user\"\n): void {\n  const serialized = JSON.stringify(value);\n  if (!serialized) {\n    throw new Error(`${label}: empty payload`);\n  }\n  if (serialized.includes(\"$argon2\")) {\n    throw new Error(`${label}: leaked password hash`);\n  }\n  for (const key of PUBLIC_ADMIN_SECRET_KEYS) {\n    if (new RegExp(`\"${key}\"\\\\s*:`).test(serialized)) {\n      throw new Error(`${label}: leaked secret field ${key}`);\n    }\n  }\n}\n\nexport function clampAdminListLimit(limit: number | undefined): number {\n  if (!Number.isFinite(limit)) {\n    return 50;\n  }\n  return Math.min(100, Math.max(1, Math.trunc(limit ?? 50)));\n}\n\nexport function clampAdminListOffset(offset: number | undefined): number {\n  if (!Number.isFinite(offset)) {\n    return 0;\n  }\n  return Math.max(0, Math.trunc(offset ?? 0));\n}\n","import type { NormalizedAthenaAuthConfig } from \"../config.ts\";\nimport type { AuthDomainMutate } from \"../hooks/execute.ts\";\nimport { sanitizeHookSession, sanitizeHookUser } from \"../hooks/sanitize.ts\";\nimport {\n  splitPrimaryAndRest,\n  toAuthSessionRevokeReceipt,\n} from \"../observability/snapshots.ts\";\nimport {\n  ATHENA_AUTH_ADMIN_PATHS,\n  type AthenaAuthAdminStore,\n  canActOnAdminTarget,\n  canAssignRole,\n  isAthenaAdminRole,\n  normalizeAdminRole,\n} from \"./admin-contract.ts\";\nimport {\n  type IssueSessionAuthentication,\n  impersonationAuthenticationFromActor,\n  restoredAuthenticationFromImpersonation,\n} from \"./authentication-context.ts\";\nimport { createSessionCookieHeader, shouldSetSecureCookie } from \"./cookies.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"./errors.ts\";\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\nimport { toPublicSession, toPublicUser } from \"./models.ts\";\nimport type { AthenaAuthPasswordHasher } from \"./password.ts\";\nimport { validatePassword, withPasswordHash } from \"./password.ts\";\nimport {\n  asStringField,\n  readJsonBody,\n  requestClientIp,\n  requireStringField,\n} from \"./security.ts\";\n\nexport interface AdminRouteContext {\n  config: NormalizedAthenaAuthConfig;\n  hasher: AthenaAuthPasswordHasher;\n  headers: Headers;\n  hookRequest: (\n    request: Request,\n    path: string\n  ) => {\n    ipAddress?: string;\n    method: string;\n    path: string;\n    userAgent?: string;\n  };\n  issueSession: (\n    request: Request,\n    stores: AthenaAuthStores,\n    userId: string,\n    authentication: IssueSessionAuthentication\n  ) => Promise<AuthSessionRow>;\n  listSessionsForUser?: (userId: string) => Promise<AuthSessionRow[]>;\n  mutate: AuthDomainMutate;\n  requireSession: (request: Request) => Promise<{\n    session: AuthSessionRow;\n    token: string;\n    user: AuthUserRow;\n  }>;\n  revokeBridgeCodesForUser?: (\n    userId: string,\n    exceptToken?: string\n  ) => Promise<void>;\n  store: AthenaAuthAdminStore;\n  traceId: string;\n}\n\nfunction isValidEmail(email: string): boolean {\n  return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email.trim());\n}\n\nasync function requireAdmin(\n  request: Request,\n  ctx: AdminRouteContext\n): Promise<{ session: AuthSessionRow; token: string; user: AuthUserRow }> {\n  const resolved = await ctx.requireSession(request);\n  if (!isAthenaAdminRole(resolved.user.role)) {\n    throw AthenaAuthRuntimeError.forbidden(\"Administrator access required\");\n  }\n  return resolved;\n}\n\nfunction parseBoolean(value: string | null): boolean | undefined {\n  if (value === null) {\n    return;\n  }\n  if (value === \"true\" || value === \"1\") {\n    return true;\n  }\n  if (value === \"false\" || value === \"0\") {\n    return false;\n  }\n}\n\nfunction parseInteger(value: string | null): number | undefined {\n  if (!value) {\n    return;\n  }\n  const parsed = Number.parseInt(value, 10);\n  return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction parseNullableDate(value: unknown): Date | null | undefined {\n  if (value === undefined) {\n    return;\n  }\n  if (value === null || value === \"\") {\n    return null;\n  }\n  if (typeof value !== \"string\") {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"banExpires must be an ISO date or null\"\n    );\n  }\n  const parsed = new Date(value);\n  if (Number.isNaN(parsed.getTime())) {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"banExpires must be a valid ISO date\"\n    );\n  }\n  return parsed;\n}\n\nexport async function handleAdminRoute(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: AdminRouteContext\n): Promise<Response | undefined> {\n  if (!path.startsWith(\"/admin/\")) {\n    return;\n  }\n\n  // Exiting impersonation is deliberately authorized by the session marker,\n  // not by the impersonated user's role. Otherwise an admin impersonating a\n  // normal user could not escape the impersonated session.\n  if (path === ATHENA_AUTH_ADMIN_PATHS.stopImpersonating && method === \"POST\") {\n    const current = await ctx.requireSession(request);\n    if (!current.session.impersonated_by) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Current session is not impersonated\"\n      );\n    }\n    const adminId = current.session.impersonated_by;\n    const adminUser = await ctx.store.getUser(adminId);\n    if (!adminUser) {\n      throw AthenaAuthRuntimeError.notFound(\n        \"Impersonating administrator not found\"\n      );\n    }\n    const restored = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"admin\",\n          sessionId: current.session.id,\n          userId: adminId,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"session.impersonation.end\",\n      execute: async (scope) => {\n        if (!scope.admin) {\n          throw AthenaAuthRuntimeError.internal(\n            new Error(\"Admin store is required\")\n          );\n        }\n        const restored = restoredAuthenticationFromImpersonation(\n          current.session\n        );\n        await scope.admin.deleteSession(current.token);\n        return ctx.issueSession(request, scope.stores, adminId, restored);\n      },\n      input: { sessionId: current.session.id },\n      previous: async () => ({\n        session: sanitizeHookSession(current.session),\n      }),\n      resultOf: () => ({\n        id: current.session.id,\n        revoked: true as const,\n        userId: current.session.user_id,\n      }),\n      secondaryEvents: (issued) => [\n        {\n          event: \"session.issue\" as const,\n          input: { userId: adminId },\n          result: { session: sanitizeHookSession(issued) },\n        },\n      ],\n    });\n    return jsonResponse(\n      200,\n      {\n        impersonatedBy: adminId,\n        session: toPublicSession(restored),\n        success: true,\n        user: toPublicUser(adminUser),\n      },\n      ctx.headers\n    );\n  }\n\n  const actor = await requireAdmin(request, ctx);\n\n  if (path === ATHENA_AUTH_ADMIN_PATHS.listUsers && method === \"GET\") {\n    const url = new URL(request.url);\n    const page = await ctx.store.listUsers({\n      banned: parseBoolean(url.searchParams.get(\"banned\")),\n      limit: parseInteger(url.searchParams.get(\"limit\")),\n      offset: parseInteger(url.searchParams.get(\"offset\")),\n      query: url.searchParams.get(\"query\") ?? undefined,\n      role: url.searchParams.get(\"role\") ?? undefined,\n    });\n    return jsonResponse(\n      200,\n      {\n        limit: page.limit,\n        offset: page.offset,\n        total: page.total,\n        users: page.users.map((user) => toPublicUser(user)),\n      },\n      ctx.headers\n    );\n  }\n\n  if (\n    path === ATHENA_AUTH_ADMIN_PATHS.getUser &&\n    (method === \"GET\" || method === \"POST\")\n  ) {\n    const userId =\n      method === \"GET\"\n        ? new URL(request.url).searchParams.get(\"userId\")?.trim()\n        : asStringField(\n            await readJsonBody(request, ctx.config.security.bodyLimitBytes),\n            \"userId\"\n          );\n    if (!userId) {\n      throw AthenaAuthRuntimeError.badRequest(\"userId is required\");\n    }\n    const user = await ctx.store.getUser(userId);\n    if (!user) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n    return jsonResponse(200, { user: toPublicUser(user) }, ctx.headers);\n  }\n\n  if (path === ATHENA_AUTH_ADMIN_PATHS.createUser && method === \"POST\") {\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const email = requireStringField(body, \"email\");\n    if (!isValidEmail(email)) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"email must be a valid email address\"\n      );\n    }\n    if (await ctx.store.getUserByEmail(email)) {\n      throw AthenaAuthRuntimeError.conflict(\n        \"A user with this email already exists\"\n      );\n    }\n    const password = requireStringField(body, \"password\");\n    validatePassword(password, {\n      maxLength: ctx.config.emailAndPassword.maxPasswordLength,\n      minLength: ctx.config.emailAndPassword.minPasswordLength,\n    });\n    const requestedRole =\n      normalizeAdminRole(asStringField(body, \"role\")) ?? \"user\";\n    if (!canAssignRole(actor.user.role, requestedRole)) {\n      throw AthenaAuthRuntimeError.forbidden(\n        \"Cannot assign a role at or above your authority\"\n      );\n    }\n    const hash = await ctx.hasher.hash(password);\n    const user = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"admin\",\n          sessionId: actor.session.id,\n          userId: actor.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.create\",\n      execute: async (scope) => {\n        if (!scope.admin) {\n          throw AthenaAuthRuntimeError.internal(\n            new Error(\"Admin store is required\")\n          );\n        }\n        return scope.admin.createUser({\n          email,\n          emailVerified: body.emailVerified === true,\n          id: crypto.randomUUID(),\n          metadata: withPasswordHash({}, hash),\n          name: asStringField(body, \"name\") ?? email.split(\"@\")[0] ?? email,\n          password,\n          role: requestedRole,\n          username: asStringField(body, \"username\"),\n        });\n      },\n      input: {\n        email,\n        name: asStringField(body, \"name\") ?? email.split(\"@\")[0] ?? email,\n        username: asStringField(body, \"username\"),\n      },\n      resultOf: (row) => ({ user: sanitizeHookUser(row) }),\n    });\n    return jsonResponse(200, { user: toPublicUser(user) }, ctx.headers);\n  }\n\n  if (path === ATHENA_AUTH_ADMIN_PATHS.updateUser && method === \"POST\") {\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const userId = requireStringField(body, \"userId\");\n    const previous = await ctx.store.getUser(userId);\n    const user = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"admin\",\n          sessionId: actor.session.id,\n          userId: actor.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.update\",\n      execute: async (scope) => {\n        if (!scope.admin) {\n          throw AthenaAuthRuntimeError.internal(\n            new Error(\"Admin store is required\")\n          );\n        }\n        return scope.admin.updateUser({\n          email: asStringField(body, \"email\"),\n          emailVerified:\n            typeof body.emailVerified === \"boolean\"\n              ? body.emailVerified\n              : undefined,\n          image: body.image === null ? null : asStringField(body, \"image\"),\n          name: body.name === null ? null : asStringField(body, \"name\"),\n          userId,\n        });\n      },\n      input: {\n        image: body.image === null ? null : asStringField(body, \"image\"),\n        name: body.name === null ? null : asStringField(body, \"name\"),\n        userId,\n      },\n      previous: async () => {\n        if (!previous) {\n          throw AthenaAuthRuntimeError.notFound(\"User not found\");\n        }\n        return { user: sanitizeHookUser(previous) };\n      },\n      resultOf: (row) => ({ user: sanitizeHookUser(row) }),\n    });\n    return jsonResponse(200, { user: toPublicUser(user) }, ctx.headers);\n  }\n\n  if (path === ATHENA_AUTH_ADMIN_PATHS.setRole && method === \"POST\") {\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const userId = requireStringField(body, \"userId\");\n    const role = normalizeAdminRole(requireStringField(body, \"role\"));\n    if (!role) {\n      throw AthenaAuthRuntimeError.badRequest(\"role is required\");\n    }\n    if (\n      userId === actor.user.id &&\n      role !== normalizeAdminRole(actor.user.role)\n    ) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Administrators cannot change their own role\"\n      );\n    }\n    const target = await ctx.store.getUser(userId);\n    if (!target) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n    if (!canAssignRole(actor.user.role, role)) {\n      throw AthenaAuthRuntimeError.forbidden(\n        \"Cannot assign a role at or above your authority\"\n      );\n    }\n    if (!canActOnAdminTarget(actor.user.role, target.role)) {\n      throw AthenaAuthRuntimeError.forbidden(\n        \"Cannot change the role of an equal or higher administrator\"\n      );\n    }\n    const user = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"admin\",\n          sessionId: actor.session.id,\n          userId: actor.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.role.update\",\n      execute: async (scope) => {\n        if (!scope.admin) {\n          throw AthenaAuthRuntimeError.internal(\n            new Error(\"Admin store is required\")\n          );\n        }\n        return scope.admin.updateUser({ role, userId });\n      },\n      input: { role, userId },\n      previous: async () => ({ role: target.role }),\n      resultOf: (row) => ({ user: sanitizeHookUser(row) }),\n    });\n    return jsonResponse(200, { user: toPublicUser(user) }, ctx.headers);\n  }\n\n  if (path === ATHENA_AUTH_ADMIN_PATHS.banUser && method === \"POST\") {\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const userId = requireStringField(body, \"userId\");\n    if (userId === actor.user.id) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Administrators cannot ban themselves\"\n      );\n    }\n    const target = await ctx.store.getUser(userId);\n    if (!target) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n    if (!canActOnAdminTarget(actor.user.role, target.role)) {\n      throw AthenaAuthRuntimeError.forbidden(\n        \"Cannot ban an equal or higher administrator\"\n      );\n    }\n    let banExpires = parseNullableDate(body.banExpires);\n    if (banExpires === undefined && body.banExpiresIn !== undefined) {\n      const seconds = Number(body.banExpiresIn);\n      if (!Number.isFinite(seconds) || seconds <= 0) {\n        throw AthenaAuthRuntimeError.badRequest(\n          \"banExpiresIn must be a positive number of seconds\"\n        );\n      }\n      banExpires = new Date(Date.now() + seconds * 1000);\n    }\n    const user = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"admin\",\n          sessionId: actor.session.id,\n          userId: actor.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.ban\",\n      execute: async (scope) => {\n        if (!scope.admin) {\n          throw AthenaAuthRuntimeError.internal(\n            new Error(\"Admin store is required\")\n          );\n        }\n        const banned = await scope.admin.updateUser({\n          banExpires,\n          banned: true,\n          banReason:\n            body.banReason === null ? null : asStringField(body, \"banReason\"),\n          userId,\n        });\n        await ctx.revokeBridgeCodesForUser?.(userId);\n        const revokedSessions = await scope.admin.deleteUserSessions(userId);\n        return { banned, revokedSessions };\n      },\n      input: { userId },\n      previous: async () => ({ banned: Boolean(target.banned) }),\n      resultOf: ({ banned }) => ({ user: sanitizeHookUser(banned) }),\n    });\n    return jsonResponse(\n      200,\n      {\n        revokedSessions: user.revokedSessions,\n        user: toPublicUser(user.banned),\n      },\n      ctx.headers\n    );\n  }\n\n  if (path === ATHENA_AUTH_ADMIN_PATHS.unbanUser && method === \"POST\") {\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const userId = requireStringField(body, \"userId\");\n    const previous = await ctx.store.getUser(userId);\n    if (!previous) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n    const user = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"admin\",\n          sessionId: actor.session.id,\n          userId: actor.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.unban\",\n      execute: async (scope) => {\n        if (!scope.admin) {\n          throw AthenaAuthRuntimeError.internal(\n            new Error(\"Admin store is required\")\n          );\n        }\n        return scope.admin.updateUser({\n          banExpires: null,\n          banned: false,\n          banReason: null,\n          userId,\n        });\n      },\n      input: { userId },\n      previous: async () => ({ banned: Boolean(previous.banned) }),\n      resultOf: (row) => ({ user: sanitizeHookUser(row) }),\n    });\n    return jsonResponse(200, { user: toPublicUser(user) }, ctx.headers);\n  }\n\n  if (\n    path === ATHENA_AUTH_ADMIN_PATHS.revokeUserSessions &&\n    method === \"POST\"\n  ) {\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const userId = requireStringField(body, \"userId\");\n    const exceptCurrent =\n      body.exceptCurrent === true && userId === actor.user.id;\n    const exceptToken = exceptCurrent ? actor.token : undefined;\n    const revokeScope = exceptCurrent ? \"others\" : \"all\";\n    const actorSession = sanitizeHookSession(actor.session);\n    const outcome = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"admin\",\n          sessionId: actor.session.id,\n          userId: actor.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"session.revoke\",\n      execute: async (scope) => {\n        if (!scope.admin) {\n          throw AthenaAuthRuntimeError.internal(\n            new Error(\"Admin store is required\")\n          );\n        }\n        const live = (await scope.stores.listUserSessions(userId)).filter(\n          (session) => !exceptCurrent || session.token !== actor.token\n        );\n        await ctx.revokeBridgeCodesForUser?.(userId, exceptToken);\n        const revoked = await scope.admin.deleteUserSessions(\n          userId,\n          exceptToken\n        );\n        return {\n          partitioned: splitPrimaryAndRest(\n            live.map((session) => sanitizeHookSession(session))\n          ),\n          revoked,\n        };\n      },\n      input: {\n        scope: revokeScope,\n        userId,\n      },\n      previous: async () => ({ session: actorSession }),\n      previousOf: (outcome) =>\n        outcome.partitioned\n          ? { session: outcome.partitioned.primary }\n          : { session: actorSession },\n      resultOf: (outcome) =>\n        toAuthSessionRevokeReceipt(\n          outcome.partitioned?.primary ?? actorSession\n        ),\n      secondaryEvents: (outcome) =>\n        (outcome.partitioned?.rest ?? []).map(\n          (session: { id: string; userId: string }) => ({\n            event: \"session.revoke\" as const,\n            input: { scope: revokeScope, userId },\n            previous: { session },\n            result: toAuthSessionRevokeReceipt(session),\n          })\n        ),\n      shouldPersistAudit: (outcome) => outcome.partitioned !== undefined,\n    });\n    return jsonResponse(\n      200,\n      { revoked: outcome.revoked, success: true },\n      ctx.headers\n    );\n  }\n\n  if (path === ATHENA_AUTH_ADMIN_PATHS.removeUser && method === \"POST\") {\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const userId = requireStringField(body, \"userId\");\n    if (userId === actor.user.id) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Administrators cannot remove themselves\"\n      );\n    }\n    const target = await ctx.store.getUser(userId);\n    if (!target) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n    if (!canActOnAdminTarget(actor.user.role, target.role)) {\n      throw AthenaAuthRuntimeError.forbidden(\n        \"Cannot remove an equal or higher administrator\"\n      );\n    }\n    const removed = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"admin\",\n          sessionId: actor.session.id,\n          userId: actor.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.delete\",\n      execute: async (scope) => {\n        if (!scope.admin) {\n          throw AthenaAuthRuntimeError.internal(\n            new Error(\"Admin store is required\")\n          );\n        }\n        await ctx.revokeBridgeCodesForUser?.(userId);\n        return scope.admin.deleteUser(userId);\n      },\n      input: { userId },\n      previous: async () => ({ user: sanitizeHookUser(target) }),\n      resultOf: () => ({\n        deleted: true as const,\n        id: userId,\n        userId,\n      }),\n    });\n    if (!removed) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n    return jsonResponse(200, { success: true }, ctx.headers);\n  }\n\n  if (path === ATHENA_AUTH_ADMIN_PATHS.impersonateUser && method === \"POST\") {\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const userId = requireStringField(body, \"userId\");\n    if (userId === actor.user.id) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Cannot impersonate the current user\"\n      );\n    }\n    const target = await ctx.store.getUser(userId);\n    if (!target) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n    if (!canActOnAdminTarget(actor.user.role, target.role)) {\n      throw AthenaAuthRuntimeError.forbidden(\n        \"Only a higher administrator may impersonate this user\"\n      );\n    }\n    const requestedExpiry = Number(body.expiresInSeconds ?? 15 * 60);\n    const expiresInSeconds = Number.isFinite(requestedExpiry)\n      ? Math.min(60 * 60, Math.max(60, requestedExpiry))\n      : 15 * 60;\n    const session = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"admin\",\n          sessionId: actor.session.id,\n          userId: actor.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"session.impersonation.start\",\n      execute: async (scope) => {\n        if (!scope.admin) {\n          throw AthenaAuthRuntimeError.internal(\n            new Error(\"Admin store is required\")\n          );\n        }\n        const authentication = impersonationAuthenticationFromActor(\n          actor.session\n        );\n        return scope.admin.createImpersonationSession({\n          activeOrganizationId: actor.session.active_organization_id,\n          authenticatedAt: authentication.authenticatedAt,\n          authenticationMethods: authentication.methods,\n          expiresAt: new Date(Date.now() + expiresInSeconds * 1000),\n          id: crypto.randomUUID(),\n          impersonatedBy: actor.user.id,\n          ipAddress: requestClientIp(request, ctx.config.security.trustedProxy),\n          token: `session_${crypto.randomUUID()}`,\n          userAgent: request.headers.get(\"user-agent\"),\n          userId,\n        });\n      },\n      input: { userId },\n      resultOf: (row) => ({ session: sanitizeHookSession(row) }),\n    });\n    ctx.headers.append(\n      \"set-cookie\",\n      createSessionCookieHeader(session.token, {\n        cookieName: ctx.config.session.cookieName,\n        expiresAt: new Date(session.expires_at),\n        secure: shouldSetSecureCookie(\n          request,\n          ctx.config.security.cookieSecure\n        ),\n      })\n    );\n    return jsonResponse(\n      200,\n      {\n        session: toPublicSession(session),\n        user: toPublicUser(target),\n      },\n      ctx.headers\n    );\n  }\n\n  throw AthenaAuthRuntimeError.notFound(\"Admin route not found\");\n}\n","import {\n  ATHENA_AUTH_SESSION_COOKIE_ALIASES,\n  ATHENA_AUTH_SESSION_COOKIE_NAME,\n} from \"../contract/index.ts\";\n\nexport interface AthenaAuthCookieAttributes {\n  domain?: string;\n  expires?: Date;\n  httpOnly?: boolean;\n  maxAge?: number;\n  path?: string;\n  sameSite?: \"Strict\" | \"Lax\" | \"None\";\n  secure?: boolean;\n}\n\nfunction formatCookieDate(date: Date): string {\n  return date.toUTCString();\n}\n\nexport function serializeCookie(\n  name: string,\n  value: string,\n  attributes: AthenaAuthCookieAttributes = {}\n): string {\n  const parts = [`${name}=${value}`];\n  parts.push(`Path=${attributes.path ?? \"/\"}`);\n  if (attributes.expires) {\n    parts.push(`Expires=${formatCookieDate(attributes.expires)}`);\n  }\n  if (typeof attributes.maxAge === \"number\") {\n    parts.push(`Max-Age=${Math.max(0, Math.floor(attributes.maxAge))}`);\n  }\n  if (attributes.domain) {\n    parts.push(`Domain=${attributes.domain}`);\n  }\n  if (attributes.httpOnly !== false) {\n    parts.push(\"HttpOnly\");\n  }\n  if (attributes.secure) {\n    parts.push(\"Secure\");\n  }\n  parts.push(`SameSite=${attributes.sameSite ?? \"Lax\"}`);\n  return parts.join(\"; \");\n}\n\nexport function parseCookieHeader(\n  header: string | null | undefined\n): Map<string, string> {\n  const cookies = new Map<string, string>();\n  if (!header) {\n    return cookies;\n  }\n  for (const part of header.split(\";\")) {\n    const index = part.indexOf(\"=\");\n    if (index <= 0) {\n      continue;\n    }\n    const name = part.slice(0, index).trim();\n    const value = part.slice(index + 1).trim();\n    if (name) {\n      cookies.set(name, value);\n    }\n  }\n  return cookies;\n}\n\nexport function readSessionTokenFromCookies(\n  header: string | null | undefined,\n  cookieName = ATHENA_AUTH_SESSION_COOKIE_NAME\n): string | undefined {\n  const cookies = parseCookieHeader(header);\n  const names = [\n    cookieName,\n    `.__Secure-${cookieName}`.slice(1),\n    `__Secure-${cookieName}`,\n    `__Host-${cookieName}`,\n    ...ATHENA_AUTH_SESSION_COOKIE_ALIASES,\n  ];\n  for (const name of names) {\n    const value = cookies.get(name);\n    if (value) {\n      return value;\n    }\n  }\n}\n\nexport function readBearerToken(\n  header: string | null | undefined\n): string | undefined {\n  if (!header) {\n    return;\n  }\n  const match = /^Bearer\\s+(.+)$/i.exec(header.trim());\n  const token = match?.[1]?.trim();\n  return token || undefined;\n}\n\nexport function shouldSetSecureCookie(\n  request: Request,\n  policy: boolean | \"auto\"\n): boolean {\n  if (policy === true) {\n    return true;\n  }\n  if (policy === false) {\n    return false;\n  }\n  try {\n    return new URL(request.url).protocol === \"https:\";\n  } catch {\n    return false;\n  }\n}\n\nexport function createSessionCookieHeader(\n  token: string,\n  options: {\n    cookieName?: string;\n    expiresAt: Date;\n    secure: boolean;\n  }\n): string {\n  return serializeCookie(\n    options.cookieName ?? ATHENA_AUTH_SESSION_COOKIE_NAME,\n    token,\n    {\n      expires: options.expiresAt,\n      httpOnly: true,\n      sameSite: \"Lax\",\n      secure: options.secure,\n    }\n  );\n}\n\nexport function createClearSessionCookieHeader(\n  cookieName = ATHENA_AUTH_SESSION_COOKIE_NAME,\n  secure = false\n): string {\n  return serializeCookie(cookieName, \"\", {\n    expires: new Date(0),\n    httpOnly: true,\n    maxAge: 0,\n    sameSite: \"Lax\",\n    secure,\n  });\n}\n","import {\n  ATHENA_AUTH_DEFAULT_ARGON2,\n  type AthenaAuthArgon2Params,\n} from \"../contract/index.ts\";\nimport { deriveArgon2id } from \"./argon2.node.ts\";\nimport { AthenaAuthRuntimeError } from \"./errors.ts\";\n\nexport interface AthenaAuthPasswordHasher {\n  hash(password: string): Promise<string>;\n  needsRehash(hash: string): boolean;\n  verify(password: string, hash: string): Promise<boolean>;\n}\n\nconst PHC_B64 =\n  \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nfunction encodePhcBase64(bytes: Uint8Array): string {\n  let output = \"\";\n  for (let index = 0; index < bytes.length; index += 3) {\n    const remaining = bytes.length - index;\n    const a = bytes[index] ?? 0;\n    const b = remaining > 1 ? (bytes[index + 1] ?? 0) : 0;\n    const c = remaining > 2 ? (bytes[index + 2] ?? 0) : 0;\n    const triple = (a << 16) | (b << 8) | c;\n    output += PHC_B64[(triple >> 18) & 63];\n    output += PHC_B64[(triple >> 12) & 63];\n    if (remaining > 1) {\n      output += PHC_B64[(triple >> 6) & 63];\n    }\n    if (remaining > 2) {\n      output += PHC_B64[triple & 63];\n    }\n  }\n  return output;\n}\n\nfunction decodePhcBase64(value: string): Uint8Array {\n  const cleaned = value.replace(/[=]+$/g, \"\");\n  const output: number[] = [];\n  for (let index = 0; index < cleaned.length; index += 4) {\n    const chunk = cleaned.slice(index, index + 4);\n    const values = [...chunk].map((char) => {\n      const decoded = PHC_B64.indexOf(char);\n      if (decoded < 0) {\n        throw new Error(\"Invalid PHC base64\");\n      }\n      return decoded;\n    });\n    const a = values[0] ?? 0;\n    const b = values[1] ?? 0;\n    const c = values[2] ?? 0;\n    const d = values[3] ?? 0;\n    output.push(((a << 2) | (b >> 4)) & 255);\n    if (chunk.length > 2) {\n      output.push(((b << 4) | (c >> 2)) & 255);\n    }\n    if (chunk.length > 3) {\n      output.push(((c << 6) | d) & 255);\n    }\n  }\n  return Uint8Array.from(output);\n}\n\nfunction parsePhcDecimal(hash: string, key: string): number | undefined {\n  const match = new RegExp(`(?:^|[,$?])${key}=(\\\\d+)`).exec(hash);\n  if (!match) {\n    return;\n  }\n  return Number.parseInt(match[1] ?? \"\", 10);\n}\n\nexport function parseArgon2Phc(hash: string):\n  | {\n      hash: Uint8Array;\n      memoryCost: number;\n      parallelism: number;\n      salt: Uint8Array;\n      timeCost: number;\n    }\n  | undefined {\n  const match =\n    /^\\$argon2id\\$v=19\\$m=(\\d+),t=(\\d+),p=(\\d+)\\$([A-Za-z0-9+/]+)\\$([A-Za-z0-9+/]+)$/.exec(\n      hash\n    );\n  if (!match) {\n    return;\n  }\n  return {\n    hash: decodePhcBase64(match[5] ?? \"\"),\n    memoryCost: Number.parseInt(match[1] ?? \"\", 10),\n    parallelism: Number.parseInt(match[3] ?? \"1\", 10),\n    salt: decodePhcBase64(match[4] ?? \"\"),\n    timeCost: Number.parseInt(match[2] ?? \"\", 10),\n  };\n}\n\nexport function passwordHashNeedsRehash(\n  hash: string,\n  params: AthenaAuthArgon2Params = ATHENA_AUTH_DEFAULT_ARGON2\n): boolean {\n  const memoryCost = parsePhcDecimal(hash, \"m\");\n  const timeCost = parsePhcDecimal(hash, \"t\");\n  const parallelism = parsePhcDecimal(hash, \"p\");\n  if (\n    memoryCost === undefined ||\n    timeCost === undefined ||\n    parallelism === undefined\n  ) {\n    return false;\n  }\n  // Monotonic upgrade only — never rehash a stronger stored profile down.\n  return (\n    memoryCost < params.memoryCost ||\n    timeCost < params.timeCost ||\n    parallelism < params.parallelism\n  );\n}\n\nfunction timingSafeEqual(left: Uint8Array, right: Uint8Array): boolean {\n  if (left.length !== right.length) {\n    return false;\n  }\n  let diff = 0;\n  for (let index = 0; index < left.length; index += 1) {\n    diff |= (left[index] ?? 0) ^ (right[index] ?? 0);\n  }\n  return diff === 0;\n}\n\nfunction encodeUtf8(value: string): Uint8Array {\n  return new TextEncoder().encode(value);\n}\n\nasync function argon2idDigest(\n  password: string,\n  salt: Uint8Array,\n  params: {\n    dkLen: number;\n    memoryCost: number;\n    parallelism: number;\n    timeCost: number;\n  }\n): Promise<Uint8Array> {\n  return deriveArgon2id(encodeUtf8(password), salt, {\n    dkLen: params.dkLen,\n    m: params.memoryCost,\n    p: params.parallelism,\n    t: params.timeCost,\n  });\n}\n\nexport function createArgon2PasswordHasher(\n  params: AthenaAuthArgon2Params = ATHENA_AUTH_DEFAULT_ARGON2\n): AthenaAuthPasswordHasher {\n  return {\n    async hash(password: string): Promise<string> {\n      const salt = crypto.getRandomValues(new Uint8Array(16));\n      const digest = await argon2idDigest(password, salt, {\n        dkLen: 32,\n        memoryCost: params.memoryCost,\n        parallelism: params.parallelism,\n        timeCost: params.timeCost,\n      });\n      return `$argon2id$v=19$m=${params.memoryCost},t=${params.timeCost},p=${params.parallelism}$${encodePhcBase64(salt)}$${encodePhcBase64(digest)}`;\n    },\n    needsRehash(hash: string): boolean {\n      return passwordHashNeedsRehash(hash, params);\n    },\n    async verify(password: string, hash: string): Promise<boolean> {\n      const parsed = parseArgon2Phc(hash);\n      if (!parsed) {\n        return false;\n      }\n      const digest = await argon2idDigest(password, parsed.salt, {\n        dkLen: parsed.hash.length,\n        memoryCost: parsed.memoryCost,\n        parallelism: parsed.parallelism,\n        timeCost: parsed.timeCost,\n      });\n      return timingSafeEqual(digest, parsed.hash);\n    },\n  };\n}\n\nexport function validatePassword(\n  password: string,\n  options: { maxLength: number; minLength: number }\n): void {\n  if (password.length < options.minLength) {\n    throw AthenaAuthRuntimeError.badRequest(\n      `Password must be at least ${options.minLength} characters long`\n    );\n  }\n  if (password.length > options.maxLength) {\n    throw AthenaAuthRuntimeError.badRequest(\n      `Password must be at most ${options.maxLength} characters long`\n    );\n  }\n}\n\nexport function extractPasswordHash(metadata: unknown): string | undefined {\n  if (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n    return;\n  }\n  const value = (metadata as Record<string, unknown>).password_hash;\n  return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nexport function withPasswordHash(\n  metadata: Record<string, unknown> | undefined,\n  hash: string\n): Record<string, unknown> {\n  return {\n    ...(metadata ?? {}),\n    password_hash: hash,\n  };\n}\n","/**\n * Node/server Argon2id boundary. Static import so bundlers (Next/Turbopack)\n * can trace `@noble/hashes` from Athena's declared dependency.\n *\n * Must stay off browser / Next client / RN graphs. Isolation is the local\n * Auth runtime boundary (`src/auth/local/**`). Do not add the Next\n * `server-only` package here (ADR 0064: that directive stays on public\n * framework edges).\n */\nimport { argon2id } from \"@noble/hashes/argon2.js\";\n\nexport function deriveArgon2id(\n  password: Uint8Array,\n  salt: Uint8Array,\n  options: {\n    dkLen: number;\n    m: number;\n    p: number;\n    t: number;\n  }\n): Uint8Array {\n  return argon2id(password, salt, options);\n}\n","import {\n  ATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n  ATHENA_AUTH_TABLES,\n} from \"../contract/index.ts\";\nimport type {\n  AthenaAuthAdminCreateUserInput,\n  AthenaAuthAdminListUsersInput,\n  AthenaAuthAdminListUsersResult,\n  AthenaAuthAdminStore,\n  AthenaAuthAdminUpdateUserInput,\n} from \"./admin-contract.ts\";\nimport { clampAdminListLimit, clampAdminListOffset } from \"./admin-contract.ts\";\nimport {\n  type AthenaAuthenticationMethod,\n  resolveAuthenticationContext,\n} from \"./authentication-context.ts\";\nimport type { AthenaAuthDatabase } from \"./database.ts\";\nimport type { MemoryAuthStores } from \"./memory-stores.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\nimport { parseMetadata } from \"./models.ts\";\n\nfunction hydrateUser(row: AuthUserRow | undefined): AuthUserRow | undefined {\n  return row ? { ...row, metadata: parseMetadata(row.metadata) } : undefined;\n}\n\nexport class PostgresAdminAuthStore implements AthenaAuthAdminStore {\n  constructor(private readonly db: AthenaAuthDatabase) {}\n\n  async getUser(userId: string): Promise<AuthUserRow | undefined> {\n    const result = await this.db.query<AuthUserRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.users} WHERE id = $1`,\n      [userId]\n    );\n    return hydrateUser(result.rows[0]);\n  }\n\n  async getUserByEmail(email: string): Promise<AuthUserRow | undefined> {\n    const result = await this.db.query<AuthUserRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.users} WHERE LOWER(email) = LOWER($1)`,\n      [email]\n    );\n    return hydrateUser(result.rows[0]);\n  }\n\n  async listUsers(\n    input: AthenaAuthAdminListUsersInput\n  ): Promise<AthenaAuthAdminListUsersResult> {\n    const limit = clampAdminListLimit(input.limit);\n    const offset = clampAdminListOffset(input.offset);\n    const params: unknown[] = [];\n    const where: string[] = [];\n\n    if (input.query?.trim()) {\n      params.push(`%${input.query.trim()}%`);\n      const index = params.length;\n      where.push(\n        `(email ILIKE $${index} OR name ILIKE $${index} OR username ILIKE $${index} OR id ILIKE $${index})`\n      );\n    }\n    if (input.role?.trim()) {\n      params.push(input.role.trim());\n      where.push(`role = $${params.length}`);\n    }\n    if (typeof input.banned === \"boolean\") {\n      params.push(input.banned);\n      where.push(`banned = $${params.length}`);\n    }\n\n    const predicate = where.length ? `WHERE ${where.join(\" AND \")}` : \"\";\n    const count = await this.db.query<{ total: number | string }>(\n      `SELECT COUNT(*) AS total FROM ${ATHENA_AUTH_TABLES.users} ${predicate}`,\n      params\n    );\n\n    const pageParams = [...params, limit, offset];\n    const rows = await this.db.query<AuthUserRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.users}\n       ${predicate}\n       ORDER BY created_at DESC, id ASC\n       LIMIT $${params.length + 1} OFFSET $${params.length + 2}`,\n      pageParams\n    );\n\n    return {\n      limit,\n      offset,\n      total: Number(count.rows[0]?.total ?? 0),\n      users: rows.rows.map((row) => hydrateUser(row) ?? row),\n    };\n  }\n\n  async createUser(\n    input: AthenaAuthAdminCreateUserInput & {\n      id: string;\n      metadata?: Record<string, unknown>;\n    }\n  ): Promise<AuthUserRow> {\n    return this.db.transaction(async (tx) => {\n      const result = await tx.query<AuthUserRow>(\n        `INSERT INTO ${ATHENA_AUTH_TABLES.users}\n          (id, email, name, email_verified, username, role, metadata)\n         VALUES ($1, $2, $3, $4, $5, $6, $7::jsonb)\n         RETURNING *`,\n        [\n          input.id,\n          input.email,\n          input.name ?? null,\n          input.emailVerified ?? false,\n          input.username ?? null,\n          input.role ?? \"user\",\n          JSON.stringify(input.metadata ?? {}),\n        ]\n      );\n      const row = hydrateUser(result.rows[0]);\n      if (!row) {\n        throw new Error(\"Failed to create admin user\");\n      }\n      const passwordHash =\n        typeof input.metadata?.password_hash === \"string\"\n          ? input.metadata.password_hash\n          : undefined;\n      if (passwordHash) {\n        await tx.query(\n          `INSERT INTO ${ATHENA_AUTH_TABLES.accounts}\n            (id, account_id, provider_id, user_id, password)\n           VALUES ($1, $2, $3, $4, $5)`,\n          [\n            crypto.randomUUID(),\n            row.id,\n            ATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n            row.id,\n            passwordHash,\n          ]\n        );\n      }\n      return row;\n    });\n  }\n\n  async updateUser(\n    input: AthenaAuthAdminUpdateUserInput\n  ): Promise<AuthUserRow> {\n    const result = await this.db.query<AuthUserRow>(\n      `UPDATE ${ATHENA_AUTH_TABLES.users}\n       SET\n         name = CASE WHEN $2::boolean THEN $3 ELSE name END,\n         email = COALESCE($4, email),\n         email_verified = COALESCE($5, email_verified),\n         image = CASE WHEN $6::boolean THEN $7 ELSE image END,\n         role = CASE WHEN $8::boolean THEN $9 ELSE role END,\n         banned = COALESCE($10, banned),\n         ban_reason = CASE WHEN $11::boolean THEN $12 ELSE ban_reason END,\n         ban_expires = CASE WHEN $13::boolean THEN $14 ELSE ban_expires END,\n         updated_at = NOW()\n       WHERE id = $1\n       RETURNING *`,\n      [\n        input.userId,\n        input.name !== undefined,\n        input.name ?? null,\n        input.email ?? null,\n        input.emailVerified ?? null,\n        input.image !== undefined,\n        input.image ?? null,\n        input.role !== undefined,\n        input.role ?? null,\n        input.banned ?? null,\n        input.banReason !== undefined,\n        input.banReason ?? null,\n        input.banExpires !== undefined,\n        input.banExpires?.toISOString() ?? null,\n      ]\n    );\n    const row = hydrateUser(result.rows[0]);\n    if (!row) {\n      throw new Error(\"User not found\");\n    }\n    return row;\n  }\n\n  async deleteSession(token: string): Promise<boolean> {\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.sessions} WHERE token = $1`,\n      [token]\n    );\n    return result.rowCount > 0;\n  }\n\n  async deleteUser(userId: string): Promise<boolean> {\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.users} WHERE id = $1`,\n      [userId]\n    );\n    return result.rowCount > 0;\n  }\n\n  async deleteUserSessions(\n    userId: string,\n    exceptToken?: string\n  ): Promise<number> {\n    const result = exceptToken\n      ? await this.db.query(\n          `DELETE FROM ${ATHENA_AUTH_TABLES.sessions} WHERE user_id = $1 AND token <> $2`,\n          [userId, exceptToken]\n        )\n      : await this.db.query(\n          `DELETE FROM ${ATHENA_AUTH_TABLES.sessions} WHERE user_id = $1`,\n          [userId]\n        );\n    return result.rowCount;\n  }\n\n  async createImpersonationSession(input: {\n    activeOrganizationId?: string | null;\n    authenticatedAt: Date;\n    authenticationMethods: readonly AthenaAuthenticationMethod[];\n    expiresAt: Date;\n    id: string;\n    impersonatedBy: string;\n    ipAddress?: string | null;\n    token: string;\n    userAgent?: string | null;\n    userId: string;\n  }): Promise<AuthSessionRow> {\n    const authentication = resolveAuthenticationContext(\n      {\n        authenticatedAt: input.authenticatedAt,\n        methods: input.authenticationMethods,\n      },\n      new Date()\n    );\n    const result = await this.db.query<AuthSessionRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.sessions}\n        (id, user_id, token, expires_at, ip_address, user_agent, impersonated_by, active_organization_id, active, authenticated_at, authentication_methods)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, $8, TRUE, $9, $10)\n       RETURNING *`,\n      [\n        input.id,\n        input.userId,\n        input.token,\n        input.expiresAt.toISOString(),\n        input.ipAddress ?? null,\n        input.userAgent ?? null,\n        input.impersonatedBy,\n        input.activeOrganizationId ?? null,\n        authentication.authenticatedAt.toISOString(),\n        authentication.methods,\n      ]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Failed to create impersonation session\");\n    }\n    return row;\n  }\n}\n\nexport class MemoryAdminAuthStore implements AthenaAuthAdminStore {\n  constructor(private readonly stores: MemoryAuthStores) {}\n\n  getUser(userId: string) {\n    return this.stores.getUserById(userId);\n  }\n\n  getUserByEmail(email: string) {\n    return this.stores.getUserByEmail(email);\n  }\n\n  async listUsers(\n    input: AthenaAuthAdminListUsersInput\n  ): Promise<AthenaAuthAdminListUsersResult> {\n    const limit = clampAdminListLimit(input.limit);\n    const offset = clampAdminListOffset(input.offset);\n    const query = input.query?.trim().toLowerCase();\n    const role = input.role?.trim();\n    const rows = [...this.stores.users.values()]\n      .filter((user) => {\n        if (role && user.role !== role) {\n          return false;\n        }\n        if (typeof input.banned === \"boolean\" && user.banned !== input.banned) {\n          return false;\n        }\n        if (!query) {\n          return true;\n        }\n        return [user.email, user.name, user.username, user.id]\n          .filter(Boolean)\n          .some((value) => String(value).toLowerCase().includes(query));\n      })\n      .sort((left, right) => {\n        const time =\n          new Date(right.created_at).getTime() -\n          new Date(left.created_at).getTime();\n        return time === 0 ? left.id.localeCompare(right.id) : time;\n      });\n    return {\n      limit,\n      offset,\n      total: rows.length,\n      users: rows.slice(offset, offset + limit),\n    };\n  }\n\n  async createUser(\n    input: AthenaAuthAdminCreateUserInput & {\n      id: string;\n      metadata?: Record<string, unknown>;\n    }\n  ) {\n    const user = await this.stores.createUser({\n      email: input.email,\n      emailVerified: input.emailVerified,\n      id: input.id,\n      metadata: input.metadata,\n      name: input.name,\n      username: input.username,\n    });\n    if (input.role) {\n      await this.stores.updateUser(user.id, { role: input.role });\n    }\n    const passwordHash =\n      typeof input.metadata?.password_hash === \"string\"\n        ? input.metadata.password_hash\n        : undefined;\n    if (passwordHash) {\n      try {\n        await this.stores.createAccount({\n          accountId: user.id,\n          id: crypto.randomUUID(),\n          password: passwordHash,\n          providerId: ATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n          userId: user.id,\n        });\n      } catch (error) {\n        await this.stores.deleteUser(user.id);\n        throw error;\n      }\n    }\n    return (await this.stores.getUserById(user.id)) ?? user;\n  }\n\n  updateUser(input: AthenaAuthAdminUpdateUserInput) {\n    return this.stores.updateUser(input.userId, {\n      banExpires: input.banExpires,\n      banned: input.banned,\n      banReason: input.banReason,\n      email: input.email,\n      emailVerified: input.emailVerified,\n      image: input.image,\n      name: input.name,\n      role: input.role,\n    });\n  }\n\n  deleteSession(token: string) {\n    return this.stores.deleteSession(token);\n  }\n\n  async deleteUser(userId: string) {\n    const existing = await this.stores.getUserById(userId);\n    if (!existing) {\n      return false;\n    }\n    await this.stores.deleteUser(userId);\n    return true;\n  }\n\n  deleteUserSessions(userId: string, exceptToken?: string) {\n    return this.stores.deleteUserSessions(userId, exceptToken);\n  }\n\n  createImpersonationSession(input: {\n    activeOrganizationId?: string | null;\n    authenticatedAt: Date;\n    authenticationMethods: readonly AthenaAuthenticationMethod[];\n    expiresAt: Date;\n    id: string;\n    impersonatedBy: string;\n    ipAddress?: string | null;\n    token: string;\n    userAgent?: string | null;\n    userId: string;\n  }) {\n    return this.stores.createSession({\n      ...input,\n      authenticatedAt: input.authenticatedAt,\n      authenticationMethods: input.authenticationMethods,\n    });\n  }\n}\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport {\n  ORGANIZATION_LIFECYCLE_DELETE,\n  ORGANIZATION_MEMBERS_INVITE,\n  ORGANIZATION_MEMBERS_WRITE,\n  ORGANIZATION_OWNERS_ASSIGN,\n} from \"../../runtime/authorization/catalog.ts\";\nimport {\n  grantRankRole,\n  persistedMemberRole,\n} from \"../../runtime/authorization/templates.ts\";\nimport type { AthenaAuthorizationRoleRecord } from \"../../runtime/authorization/types.ts\";\nimport { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\nimport type { AuthMemberRow } from \"./models.ts\";\nimport {\n  assertMemberRoleAssignmentAllowed,\n  GRANT_HIGHER_ROLE_FORBIDDEN,\n  GRANT_OWNER_FORBIDDEN,\n  SELF_ELEVATION_FORBIDDEN,\n} from \"./organization-invariants.ts\";\n\nexport {\n  assertMemberRoleAssignmentAllowed,\n  GRANT_HIGHER_ROLE_FORBIDDEN,\n  GRANT_OWNER_FORBIDDEN,\n  SELF_ELEVATION_FORBIDDEN,\n};\n\nasync function actorRights(\n  stores: AthenaAuthStores,\n  userId: string,\n  organizationId: string\n) {\n  return stores.authorization.resolveEffectiveRights({\n    activeOrganizationId: organizationId,\n    getMember: (orgId, memberUserId) => stores.getMember(orgId, memberUserId),\n    userId,\n  });\n}\n\nexport async function actorHoldsRight(\n  stores: AthenaAuthStores,\n  userId: string,\n  organizationId: string,\n  required: readonly AthenaRightKey[]\n): Promise<boolean> {\n  const rights = await actorRights(stores, userId, organizationId);\n  return missingRequiredRights(rights, required).length === 0;\n}\n\nexport async function requireOrgMemberManager(\n  stores: AthenaAuthStores,\n  userId: string,\n  organizationId: string,\n  actor: AuthMemberRow | undefined\n): Promise<void> {\n  if (!actor) {\n    throw AthenaAuthRuntimeError.forbidden();\n  }\n  if (\n    await actorHoldsRight(stores, userId, organizationId, [\n      ORGANIZATION_MEMBERS_WRITE,\n    ])\n  ) {\n    return;\n  }\n  throw AthenaAuthRuntimeError.forbidden();\n}\n\nexport async function requireOrgInviteManager(\n  stores: AthenaAuthStores,\n  userId: string,\n  organizationId: string,\n  actor: AuthMemberRow | undefined\n): Promise<void> {\n  if (!actor) {\n    throw AthenaAuthRuntimeError.forbidden();\n  }\n  if (\n    await actorHoldsRight(stores, userId, organizationId, [\n      ORGANIZATION_MEMBERS_WRITE,\n    ])\n  ) {\n    return;\n  }\n  if (\n    await actorHoldsRight(stores, userId, organizationId, [\n      ORGANIZATION_MEMBERS_INVITE,\n    ])\n  ) {\n    return;\n  }\n  throw AthenaAuthRuntimeError.forbidden();\n}\n\nexport async function requireOrgDelete(\n  stores: AthenaAuthStores,\n  userId: string,\n  organizationId: string,\n  actor: AuthMemberRow | undefined\n): Promise<void> {\n  if (!actor) {\n    throw AthenaAuthRuntimeError.forbidden();\n  }\n  if (\n    await actorHoldsRight(stores, userId, organizationId, [\n      ORGANIZATION_LIFECYCLE_DELETE,\n    ])\n  ) {\n    return;\n  }\n  throw AthenaAuthRuntimeError.forbidden();\n}\n\nexport async function actorCanAssignOwner(\n  stores: AthenaAuthStores,\n  userId: string,\n  organizationId: string\n): Promise<boolean> {\n  return actorHoldsRight(stores, userId, organizationId, [\n    ORGANIZATION_OWNERS_ASSIGN,\n  ]);\n}\n\nexport function verifiedOrganizationScope(input: {\n  activeOrganizationId: string | null | undefined;\n  requestedOrganizationId?: string | null;\n}): string {\n  const active = input.activeOrganizationId?.trim() ?? \"\";\n  const requested = input.requestedOrganizationId?.trim() ?? \"\";\n  if (requested.length > 0 && active.length > 0 && requested !== active) {\n    throw AthenaAuthRuntimeError.forbidden();\n  }\n  if (requested.length > 0 && active.length === 0) {\n    throw AthenaAuthRuntimeError.forbidden();\n  }\n  const organizationId = active || requested;\n  if (!organizationId) {\n    throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n  }\n  return organizationId;\n}\n\nexport function resolveAuthorizationCommandScope(input: {\n  activeOrganizationId: string | null | undefined;\n  canManageOrganizationRoles: boolean;\n  canManagePlatformRoles: boolean;\n  requestedOrganizationId?: string | null;\n  requestedScope?: \"organization\" | \"platform\";\n  defaultScope?: \"organization\" | \"platform\";\n}): { kind: \"organization\" | \"platform\"; organizationId: string | null } {\n  const active = input.activeOrganizationId?.trim() ?? \"\";\n  const requested = input.requestedOrganizationId?.trim() ?? \"\";\n  if (input.requestedScope === \"platform\") {\n    if (!input.canManagePlatformRoles) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    return { kind: \"platform\", organizationId: null };\n  }\n  if (input.requestedScope === \"organization\") {\n    if (\n      !input.canManageOrganizationRoles ||\n      active.length === 0 ||\n      (requested.length > 0 && requested !== active)\n    ) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    return { kind: \"organization\", organizationId: active };\n  }\n  if (requested.length > 0 && (active.length === 0 || requested !== active)) {\n    throw AthenaAuthRuntimeError.forbidden();\n  }\n  const preferOrganization =\n    input.defaultScope !== \"platform\" && active.length > 0;\n  if (preferOrganization && input.canManageOrganizationRoles) {\n    return { kind: \"organization\", organizationId: active };\n  }\n  if (input.canManagePlatformRoles) {\n    return { kind: \"platform\", organizationId: null };\n  }\n  if (active.length > 0 && input.canManageOrganizationRoles) {\n    return { kind: \"organization\", organizationId: active };\n  }\n  throw AthenaAuthRuntimeError.forbidden();\n}\n\nexport function verifiedAuthorizationCommandScope(input: {\n  activeOrganizationId: string | null | undefined;\n  canManageOrganizationRoles: boolean;\n  canManagePlatformRoles: boolean;\n  requestedOrganizationId?: string | null;\n  requestedScope?: \"organization\" | \"platform\";\n  defaultScope?: \"organization\" | \"platform\";\n}): { kind: \"organization\" | \"platform\"; organizationId: string | null } {\n  return resolveAuthorizationCommandScope({\n    ...input,\n    defaultScope: input.defaultScope ?? \"organization\",\n  });\n}\n\nexport async function requireOrganizationRoleGrant(\n  stores: AthenaAuthStores,\n  userId: string,\n  organizationId: string,\n  actor: AuthMemberRow | undefined,\n  requestedRole: string,\n  target?: {\n    role: string;\n    userId: string;\n  }\n): Promise<{\n  persistedRole: string;\n  role: AthenaAuthorizationRoleRecord;\n}> {\n  if (!actor) {\n    throw AthenaAuthRuntimeError.forbidden();\n  }\n  const role = await stores.authorization.lookupAssignableOrganizationRole(\n    organizationId,\n    requestedRole\n  );\n  if (!role) {\n    throw AthenaAuthRuntimeError.badRequest(\"Role is not assignable\");\n  }\n  assertMemberRoleAssignmentAllowed({\n    actorCanAssignOwner: await actorCanAssignOwner(\n      stores,\n      userId,\n      organizationId\n    ),\n    actorRole: actor.role,\n    actorUserId: userId,\n    nextRole: grantRankRole(role),\n    targetRole: target?.role ?? \"member\",\n    targetUserId: target?.userId ?? userId,\n  });\n  return {\n    persistedRole: persistedMemberRole(role),\n    role,\n  };\n}\n","import { missingRequiredRights } from \"../../rights/matching.ts\";\nimport {\n  AUTHORIZATION_PLATFORM_READ,\n  AUTHORIZATION_PLATFORM_WRITE,\n  AUTHORIZATION_ROLES_READ,\n  AUTHORIZATION_ROLES_WRITE,\n  getAthenaAuthorizationRightsIr,\n  ORGANIZATION_MEMBERS_READ,\n  ORGANIZATION_MEMBERS_WRITE,\n} from \"../../runtime/authorization/catalog.ts\";\nimport { requireExpectedVersion } from \"../../runtime/authorization/role-invariants.ts\";\nimport {\n  verifiedAuthorizationCommandScope,\n  verifiedOrganizationScope,\n} from \"./authorization-guard.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"./errors.ts\";\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\nimport { resolveFoundingOwnerUserId } from \"./organization-invariants.ts\";\nimport { asStringField, readJsonBody, requireStringField } from \"./security.ts\";\n\nfunction asStringArray(body: Record<string, unknown>, key: string): string[] {\n  const value = body[key];\n  if (!Array.isArray(value)) {\n    return [];\n  }\n  return value.filter((entry): entry is string => typeof entry === \"string\");\n}\n\nfunction requestedAuthorizationScope(\n  request: Request,\n  body?: Record<string, unknown>\n): \"organization\" | \"platform\" | undefined {\n  const fromBody = typeof body?.scope === \"string\" ? body.scope : undefined;\n  const fromQuery = new URL(request.url).searchParams.get(\"scope\");\n  const value = fromBody ?? fromQuery;\n  if (value === \"platform\" || value === \"organization\") {\n    return value;\n  }\n}\n\nfunction roleIdFromPath(path: string): string | undefined {\n  const match = /^\\/authorization\\/roles\\/([^/]+)(?:\\/rights)?$/.exec(path);\n  const id = match?.[1];\n  if (!id || id === \"clone\") {\n    return;\n  }\n  return id;\n}\n\nexport async function handleAuthorizationRoute(\n  request: Request,\n  path: string,\n  method: string,\n  stores: AthenaAuthStores,\n  headers: Headers,\n  requireSession: (\n    request: Request,\n    stores: AthenaAuthStores\n  ) => Promise<{ session: AuthSessionRow; user: AuthUserRow }>,\n  bodyLimitBytes: number\n): Promise<Response | undefined> {\n  if (path === \"/authorization/snapshot\" && method === \"GET\") {\n    const resolved = await requireSession(request, stores);\n    const snapshot = await buildSnapshot(stores, resolved);\n    return jsonResponse(200, snapshot, headers);\n  }\n\n  if (path === \"/authorization/rights\" && method === \"GET\") {\n    const resolved = await requireSession(request, stores);\n    const snapshot = await buildSnapshot(stores, resolved);\n    const lacksPlatformRead =\n      missingRequiredRights(snapshot.effectiveRights, [\n        AUTHORIZATION_PLATFORM_READ,\n      ]).length > 0;\n    const lacksOrganizationRoleRead =\n      missingRequiredRights(snapshot.effectiveRights, [\n        AUTHORIZATION_ROLES_READ,\n      ]).length > 0;\n    if (lacksPlatformRead && lacksOrganizationRoleRead) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    return jsonResponse(\n      200,\n      { rights: getAthenaAuthorizationRightsIr().rights },\n      headers\n    );\n  }\n\n  if (path === \"/authorization/roles\" && method === \"GET\") {\n    const resolved = await requireSession(request, stores);\n    const command = await requireRoleAccess(stores, resolved, request, \"read\");\n    const roles = await stores.authorization.listRoles({\n      organizationId: command.scope.organizationId,\n      scopeKind: command.scope.kind,\n    });\n    return jsonResponse(200, { roles }, headers);\n  }\n\n  if (path === \"/authorization/roles\" && method === \"POST\") {\n    const resolved = await requireSession(request, stores);\n    const body = await readJsonBody(request, bodyLimitBytes);\n    const command = await requireRoleAccess(\n      stores,\n      resolved,\n      request,\n      \"write\",\n      body\n    );\n    const name = requireStringField(body, \"name\");\n    const role = await stores.authorization.createRole({\n      actorRights: command.snapshot.effectiveRights,\n      actorUserId: resolved.user.id,\n      name,\n      organizationId: command.scope.organizationId,\n      rights: asStringArray(body, \"rights\"),\n      scopeKind: command.scope.kind,\n      unrestrictedGrant: command.unrestrictedGrant,\n    });\n    return jsonResponse(200, { role }, headers);\n  }\n\n  if (path === \"/authorization/roles/clone\" && method === \"POST\") {\n    const resolved = await requireSession(request, stores);\n    const body = await readJsonBody(request, bodyLimitBytes);\n    const sourceRoleId = requireStringField(body, \"sourceRoleId\");\n    const name = asStringField(body, \"name\") ?? \"Cloned role\";\n    const command = await requireRoleAccess(\n      stores,\n      resolved,\n      request,\n      \"write\",\n      body\n    );\n    if (command.scope.kind === \"organization\") {\n      const member = await stores.getMember(\n        command.scope.organizationId ?? \"\",\n        resolved.user.id\n      );\n      if (!member) {\n        throw AthenaAuthRuntimeError.forbidden();\n      }\n    }\n    const cloned = await stores.authorization.cloneRole({\n      actorRights: command.snapshot.effectiveRights,\n      actorUserId: resolved.user.id,\n      name,\n      organizationId: command.scope.organizationId,\n      sourceRoleId,\n      unrestrictedGrant: command.unrestrictedGrant,\n    });\n    return jsonResponse(200, { role: cloned }, headers);\n  }\n\n  const roleId = roleIdFromPath(path);\n  if (\n    method === \"GET\" &&\n    (path === \"/authorization/roles/{id}\" ||\n      (Boolean(roleId) && path === `/authorization/roles/${roleId}`))\n  ) {\n    const resolved = await requireSession(request, stores);\n    const command = await requireRoleAccess(stores, resolved, request, \"read\");\n    const id = roleIdFromPath(path) ?? \"\";\n    const role = await stores.authorization.getRole(\n      id,\n      command.scope.organizationId\n    );\n    if (!role) {\n      throw AthenaAuthRuntimeError.notFound(\"Role not found\");\n    }\n    return jsonResponse(200, { role }, headers);\n  }\n\n  if (\n    method === \"PATCH\" &&\n    (path === \"/authorization/roles/{id}\" ||\n      (Boolean(roleId) && path === `/authorization/roles/${roleId}`))\n  ) {\n    const resolved = await requireSession(request, stores);\n    const body = await readJsonBody(request, bodyLimitBytes);\n    const command = await requireRoleAccess(\n      stores,\n      resolved,\n      request,\n      \"write\",\n      body\n    );\n    const id = roleIdFromPath(path) ?? \"\";\n    const rights = Array.isArray(body.rights)\n      ? asStringArray(body, \"rights\")\n      : undefined;\n    const existing = await stores.authorization.getRole(\n      id,\n      command.scope.organizationId\n    );\n    if (!existing) {\n      throw AthenaAuthRuntimeError.notFound(\"Role not found\");\n    }\n    const name =\n      typeof body.name === \"string\" && body.name.trim().length > 0\n        ? body.name\n        : existing.name;\n    if (rights === undefined && typeof body.name !== \"string\") {\n      throw AthenaAuthRuntimeError.badRequest(\"name or rights is required\");\n    }\n    const role = await stores.authorization.updateRole({\n      actorRights: command.snapshot.effectiveRights,\n      actorUserId: resolved.user.id,\n      expectedVersion: requireExpectedVersion(body.expectedVersion),\n      id,\n      name,\n      organizationId: command.scope.organizationId,\n      ...(rights ? { rights } : {}),\n      unrestrictedGrant: command.unrestrictedGrant,\n    });\n    return jsonResponse(200, { role }, headers);\n  }\n\n  if (\n    method === \"PUT\" &&\n    (path === \"/authorization/roles/{id}/rights\" ||\n      (Boolean(roleId) && path === `/authorization/roles/${roleId}/rights`))\n  ) {\n    const resolved = await requireSession(request, stores);\n    const body = await readJsonBody(request, bodyLimitBytes);\n    const command = await requireRoleAccess(\n      stores,\n      resolved,\n      request,\n      \"write\",\n      body\n    );\n    const id = roleIdFromPath(path) ?? \"\";\n    const role = await stores.authorization.replaceRoleRights({\n      actorRights: command.snapshot.effectiveRights,\n      actorUserId: resolved.user.id,\n      expectedVersion: requireExpectedVersion(body.expectedVersion),\n      id,\n      organizationId: command.scope.organizationId,\n      rights: asStringArray(body, \"rights\"),\n      unrestrictedGrant: command.unrestrictedGrant,\n    });\n    return jsonResponse(200, { role }, headers);\n  }\n\n  if (\n    method === \"DELETE\" &&\n    (path === \"/authorization/roles/{id}\" ||\n      (Boolean(roleId) && path === `/authorization/roles/${roleId}`))\n  ) {\n    const resolved = await requireSession(request, stores);\n    const url = new URL(request.url);\n    let body: Record<string, unknown> = {};\n    const contentType = request.headers.get(\"content-type\") ?? \"\";\n    if (contentType.includes(\"application/json\")) {\n      body = await readJsonBody(request, bodyLimitBytes);\n    }\n    const command = await requireRoleAccess(\n      stores,\n      resolved,\n      request,\n      \"write\",\n      body\n    );\n    const reassignmentRoleId =\n      asStringField(body, \"reassignmentRoleId\") ??\n      url.searchParams.get(\"reassignmentRoleId\");\n    await stores.authorization.deleteRole({\n      actorUserId: resolved.user.id,\n      expectedVersion: requireExpectedVersion(\n        body.expectedVersion ?? url.searchParams.get(\"expectedVersion\")\n      ),\n      id: roleIdFromPath(path) ?? \"\",\n      organizationId: command.scope.organizationId,\n      reassignmentRoleId,\n    });\n    return jsonResponse(200, { ok: true }, headers);\n  }\n\n  if (path === \"/authorization/audit\" && method === \"GET\") {\n    const resolved = await requireSession(request, stores);\n    const command = await requireRoleAccess(\n      stores,\n      resolved,\n      request,\n      \"write\",\n      undefined,\n      undefined,\n      \"platform\"\n    );\n    if (command.scope.kind === \"organization\") {\n      const member = await stores.getMember(\n        command.scope.organizationId ?? \"\",\n        resolved.user.id\n      );\n      if (!member) {\n        throw AthenaAuthRuntimeError.forbidden();\n      }\n    }\n    const entries = await stores.authorization.listAudit({\n      limit: 50,\n      organizationId: command.scope.organizationId,\n    });\n    return jsonResponse(200, { entries }, headers);\n  }\n\n  if (path === \"/authorization/assignments/users\" && method === \"GET\") {\n    const resolved = await requireSession(request, stores);\n    await requireRoleAccess(\n      stores,\n      resolved,\n      request,\n      \"read\",\n      undefined,\n      \"platform\"\n    );\n    const users = await stores.listUsers();\n    const assignmentSnapshot =\n      await stores.authorization.readUserRoleAssignmentsSnapshot({\n        userIds: users.map((user) => user.id),\n      });\n    const byUser = new Map(\n      assignmentSnapshot.assignments.map((entry) => [\n        entry.userId,\n        entry.roleIds,\n      ])\n    );\n    return jsonResponse(\n      200,\n      {\n        revision: assignmentSnapshot.revision,\n        users: users.map((user) => ({\n          email: user.email,\n          id: user.id,\n          name: user.name,\n          roleIds: byUser.get(user.id) ?? [],\n        })),\n      },\n      headers\n    );\n  }\n\n  const userAssignmentId =\n    /^\\/authorization\\/assignments\\/users\\/([^/]+)$/.exec(path)?.[1];\n  if (\n    method === \"PUT\" &&\n    (path === \"/authorization/assignments/users/{userId}\" ||\n      Boolean(userAssignmentId))\n  ) {\n    const resolved = await requireSession(request, stores);\n    const body = await readJsonBody(request, bodyLimitBytes);\n    const command = await requireRoleAccess(\n      stores,\n      resolved,\n      request,\n      \"write\",\n      body,\n      \"platform\"\n    );\n    const userId = userAssignmentId ?? requireStringField(body, \"userId\");\n    if (userId.trim().length === 0) {\n      throw AthenaAuthRuntimeError.badRequest(\"userId is required\");\n    }\n    const result = await stores.authorization.replaceUserRoleAssignments({\n      actorRights: command.snapshot.effectiveRights,\n      actorUserId: resolved.user.id,\n      expectedVersion: requireExpectedVersion(body.expectedVersion),\n      roleIds: asStringArray(body, \"roleIds\"),\n      userId,\n    });\n    return jsonResponse(200, result, headers);\n  }\n\n  if (path === \"/authorization/assignments/members\" && method === \"GET\") {\n    const resolved = await requireSession(request, stores);\n    const snapshot = await buildSnapshot(stores, resolved);\n    const canListMembers =\n      missingRequiredRights(snapshot.effectiveRights, [\n        ORGANIZATION_MEMBERS_READ,\n      ]).length === 0 ||\n      missingRequiredRights(snapshot.effectiveRights, [\n        AUTHORIZATION_ROLES_READ,\n      ]).length === 0 ||\n      missingRequiredRights(snapshot.effectiveRights, [\n        AUTHORIZATION_PLATFORM_READ,\n      ]).length === 0 ||\n      missingRequiredRights(snapshot.effectiveRights, [\n        AUTHORIZATION_PLATFORM_WRITE,\n      ]).length === 0;\n    if (!canListMembers) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    const organizationId = verifiedOrganizationScope({\n      activeOrganizationId: resolved.session.active_organization_id,\n      requestedOrganizationId:\n        new URL(request.url).searchParams.get(\"organizationId\") ?? undefined,\n    });\n    if (!(await stores.getMember(organizationId, resolved.user.id))) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    const assignmentSnapshot =\n      await stores.authorization.readMemberRoleAssignmentsSnapshot({\n        organizationId,\n      });\n    return jsonResponse(\n      200,\n      {\n        assignments: assignmentSnapshot.assignments,\n        revision: assignmentSnapshot.revision,\n      },\n      headers\n    );\n  }\n\n  const memberAssignmentId =\n    /^\\/authorization\\/assignments\\/members\\/([^/]+)$/.exec(path)?.[1];\n  if (\n    method === \"PUT\" &&\n    (path === \"/authorization/assignments/members/{memberId}\" ||\n      Boolean(memberAssignmentId))\n  ) {\n    const resolved = await requireSession(request, stores);\n    const body = await readJsonBody(request, bodyLimitBytes);\n    const snapshot = await buildSnapshot(stores, resolved);\n    if (\n      missingRequiredRights(snapshot.effectiveRights, [\n        ORGANIZATION_MEMBERS_WRITE,\n      ]).length > 0 &&\n      missingRequiredRights(snapshot.effectiveRights, [\n        AUTHORIZATION_PLATFORM_WRITE,\n      ]).length > 0\n    ) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    const organizationId = verifiedOrganizationScope({\n      activeOrganizationId: resolved.session.active_organization_id,\n      requestedOrganizationId:\n        asStringField(body, \"organizationId\") ??\n        new URL(request.url).searchParams.get(\"organizationId\") ??\n        undefined,\n    });\n    if (!(await stores.getMember(organizationId, resolved.user.id))) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    const id = memberAssignmentId ?? requireStringField(body, \"memberId\");\n    if (id.trim().length === 0) {\n      throw AthenaAuthRuntimeError.notFound(\"Member not found\");\n    }\n    const orgMembers = await stores.listMembers(organizationId);\n    const matched = orgMembers.find((entry) => entry.id === id);\n    if (!matched) {\n      throw AthenaAuthRuntimeError.notFound(\"Member not found\");\n    }\n    const organization = await stores.getOrganization(organizationId);\n    const result = await stores.authorization.replaceMemberRoleAssignments({\n      actorRights: snapshot.effectiveRights,\n      actorUserId: resolved.user.id,\n      expectedVersion: requireExpectedVersion(body.expectedVersion),\n      foundingOwnerUserId: resolveFoundingOwnerUserId(organization, orgMembers),\n      memberId: id,\n      memberUserId: matched.user_id,\n      organizationId,\n      roleIds: asStringArray(body, \"roleIds\"),\n    });\n    return jsonResponse(200, result, headers);\n  }\n}\n\nasync function requireRoleAccess(\n  stores: AthenaAuthStores,\n  resolved: { session: AuthSessionRow; user: AuthUserRow },\n  request: Request,\n  access: \"read\" | \"write\",\n  body?: Record<string, unknown>,\n  forcedScope?: \"organization\" | \"platform\",\n  defaultScope?: \"organization\" | \"platform\"\n) {\n  const snapshot = await buildSnapshot(stores, resolved);\n  const rights = snapshot.effectiveRights;\n  const requestedScope =\n    forcedScope ?? requestedAuthorizationScope(request, body);\n  let orgRight: typeof AUTHORIZATION_ROLES_READ;\n  let platformRight: typeof AUTHORIZATION_PLATFORM_READ;\n  switch (access) {\n    case \"read\":\n      orgRight = AUTHORIZATION_ROLES_READ;\n      platformRight = AUTHORIZATION_PLATFORM_READ;\n      break;\n    case \"write\":\n      orgRight = AUTHORIZATION_ROLES_WRITE;\n      platformRight = AUTHORIZATION_PLATFORM_WRITE;\n      break;\n    default: {\n      const exhaustive: never = access;\n      throw new Error(`unreachable authorization access: ${exhaustive}`);\n    }\n  }\n  const orgOk = missingRequiredRights(rights, [orgRight]).length === 0;\n  const platformOk =\n    missingRequiredRights(rights, [platformRight]).length === 0;\n  if (!(orgOk || platformOk)) {\n    throw AthenaAuthRuntimeError.forbidden();\n  }\n  const requestedOrganizationId =\n    asStringField(body ?? {}, \"organizationId\") ??\n    new URL(request.url).searchParams.get(\"organizationId\") ??\n    undefined;\n  const scope = verifiedAuthorizationCommandScope({\n    activeOrganizationId: resolved.session.active_organization_id,\n    canManageOrganizationRoles: orgOk,\n    canManagePlatformRoles: platformOk,\n    defaultScope,\n    requestedOrganizationId,\n    requestedScope,\n  });\n  if (scope.kind === \"organization\") {\n    const member = await stores.getMember(\n      scope.organizationId ?? \"\",\n      resolved.user.id\n    );\n    if (!member) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n  }\n  let unrestrictedGrant = false;\n  if (scope.kind === \"organization\" && scope.organizationId) {\n    const organization = await stores.getOrganization(scope.organizationId);\n    const members = await stores.listMembers(scope.organizationId);\n    unrestrictedGrant =\n      resolveFoundingOwnerUserId(organization, members) === resolved.user.id;\n  }\n  return { scope, snapshot, unrestrictedGrant };\n}\n\nexport async function buildSnapshot(\n  stores: AthenaAuthStores,\n  resolved: {\n    session: Pick<AuthSessionRow, \"active_organization_id\">;\n    user: Pick<AuthUserRow, \"id\">;\n  }\n) {\n  const organizationId = resolved.session.active_organization_id;\n  const organization = organizationId\n    ? await stores.getOrganization(organizationId)\n    : undefined;\n  const members = organizationId\n    ? await stores.listMembers(organizationId)\n    : [];\n  return stores.authorization.readSnapshot({\n    activeOrganizationId: organizationId,\n    foundingOwnerUserId: resolveFoundingOwnerUserId(organization, members),\n    getMember: (orgId, userId) => stores.getMember(orgId, userId),\n    listMembers: (orgId) => stores.listMembers(orgId),\n    userId: resolved.user.id,\n  });\n}\n","import {\n  buildAuthorizationServerMetadata,\n  type IssuedOAuthTokenSet,\n  OAuthProtocolError,\n  oauthErrorResponse,\n  oauthJsonResponse,\n  parseScopes,\n  projectOAuthTokenEndpointResponse,\n} from \"../../authorization-server/index.ts\";\nimport type { AthenaAuthMutationScope } from \"../../hooks/scope.ts\";\nimport type { AthenaAuthStores } from \"../memory-stores.ts\";\nimport type { AuthRuntimeDependencies } from \"../runtime-dependencies.ts\";\nimport { readFormBody, requestClientIp } from \"../security.ts\";\nimport type { OAuthAuthorizationServerService } from \"./service.ts\";\n\nexport interface AuthorizationServerRouteContext {\n  deps: AuthRuntimeDependencies;\n  headers: Headers;\n  stores: AthenaAuthStores;\n  traceId: string;\n}\n\nfunction serviceInMutation(\n  service: OAuthAuthorizationServerService,\n  scope: AthenaAuthMutationScope\n): OAuthAuthorizationServerService {\n  return service.withMutationScope(scope);\n}\n\nfunction queryValue(url: URL, key: string): string | undefined {\n  const values = url.searchParams.getAll(key);\n  if (values.length > 1) {\n    throw new OAuthProtocolError(\n      \"invalid_request\",\n      `OAuth parameter \"${key}\" must be supplied once.`\n    );\n  }\n  const value = values[0];\n  return value?.trim() || undefined;\n}\n\nfunction requiredQueryValue(url: URL, key: string): string {\n  const value = queryValue(url, key);\n  if (!value) {\n    throw new OAuthProtocolError(\"invalid_request\", `${key} is required.`);\n  }\n  return value;\n}\n\nfunction requiredFormValue(body: Record<string, string>, key: string): string {\n  const value = body[key]?.trim();\n  if (!value) {\n    throw new OAuthProtocolError(\"invalid_request\", `${key} is required.`);\n  }\n  return value;\n}\n\nfunction oauthRedirect(\n  redirectUri: string,\n  input: {\n    error?: string;\n    errorDescription?: string;\n    iss: string;\n    state?: string;\n    code?: string;\n  }\n): Response {\n  const redirect = new URL(redirectUri);\n  if (input.code) {\n    redirect.searchParams.set(\"code\", input.code);\n  }\n  if (input.error) {\n    redirect.searchParams.set(\"error\", input.error);\n  }\n  if (input.errorDescription) {\n    redirect.searchParams.set(\"error_description\", input.errorDescription);\n  }\n  if (input.state) {\n    redirect.searchParams.set(\"state\", input.state);\n  }\n  redirect.searchParams.set(\"iss\", input.iss);\n  return new Response(null, {\n    headers: {\n      \"cache-control\": \"no-store\",\n      location: redirect.toString(),\n      pragma: \"no-cache\",\n    },\n    status: 302,\n  });\n}\n\nfunction isAuthorizationServerPath(path: string): boolean {\n  return (\n    path === \"/oauth/authorize\" ||\n    path === \"/oauth/token\" ||\n    path === \"/oauth/revoke\" ||\n    path === \"/.well-known/oauth-authorization-server\" ||\n    path === \"/authorization/grants\" ||\n    /^\\/authorization\\/grants\\/[^/]+\\/revoke$/.test(path)\n  );\n}\n\nfunction protocolTokenBody(response: IssuedOAuthTokenSet) {\n  return projectOAuthTokenEndpointResponse(response);\n}\n\nasync function consumeOAuthProtocolRateLimit(input: {\n  clientId?: string;\n  context: AuthorizationServerRouteContext;\n  kind: \"authorize\" | \"revoke\" | \"token\";\n  request: Request;\n}): Promise<void> {\n  const ip = requestClientIp(\n    input.request,\n    input.context.deps.config.security.trustedProxy\n  );\n  if (!ip) {\n    return;\n  }\n  const clientKey = input.clientId?.trim() || \"unknown\";\n  const keys = [\n    `oauth:${input.kind}:ip:${ip}`,\n    `oauth:${input.kind}:client-ip:${clientKey}:${ip}`,\n  ];\n  for (const key of keys) {\n    if (!(await input.context.deps.oauthRateLimiter.consume(key))) {\n      throw new OAuthProtocolError(\n        \"temporarily_unavailable\",\n        \"Too many OAuth requests.\",\n        { status: 429 }\n      );\n    }\n  }\n}\n\nexport async function handleAuthorizationServerRoutes(\n  request: Request,\n  path: string,\n  method: string,\n  context: AuthorizationServerRouteContext\n): Promise<Response | undefined> {\n  const config = context.deps.config.authorizationServer;\n  if (!(config.enabled && isAuthorizationServerPath(path))) {\n    return undefined;\n  }\n  const protocol = await context.deps.getProtocolRuntime();\n  const issuer = protocol.identity.issuer;\n  const service = protocol.oauth;\n  const oauthStores = await context.deps.getOAuthStores();\n\n  if (path === \"/authorization/grants\" && method === \"GET\") {\n    const session = await context.deps.resolveSession(request, context.stores);\n    if (!session) {\n      return oauthErrorResponse(\n        new OAuthProtocolError(\n          \"invalid_request\",\n          \"Authentication is required.\"\n        ),\n        context.headers\n      );\n    }\n    const grants = await service.listGrants(session.user.id);\n    return oauthJsonResponse(\n      200,\n      grants.map(({ client, grant }) => ({\n        authorizedAt: grant.authorizedAt.toISOString(),\n        client: client\n          ? { id: client.id, name: client.clientName }\n          : { id: grant.clientId, name: \"Unknown client\" },\n        id: grant.id,\n        lastUsedAt: grant.lastUsedAt?.toISOString() ?? null,\n        organizationId: grant.organizationId,\n        resource: grant.resource,\n        scopes: grant.scopes,\n        status: grant.status,\n      })),\n      context.headers\n    );\n  }\n\n  const grantRevoke = path.match(/^\\/authorization\\/grants\\/([^/]+)\\/revoke$/);\n  if (grantRevoke && method === \"POST\") {\n    const session = await context.deps.resolveSession(request, context.stores);\n    if (!session) {\n      return oauthErrorResponse(\n        new OAuthProtocolError(\n          \"invalid_request\",\n          \"Authentication is required.\"\n        ),\n        context.headers\n      );\n    }\n    await context.deps.mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          sessionId: session.session.id,\n          userId: session.user.id,\n        },\n        request: context.deps.hookRequest(request, path),\n        traceId: context.traceId,\n      },\n      event: \"oauth.grant.revoked\",\n      execute: async (scope) =>\n        serviceInMutation(service, scope).revokeGrant({\n          grantId: decodeURIComponent(grantRevoke[1] as string),\n          userId: session.user.id,\n        }),\n      input: {\n        grantId: decodeURIComponent(grantRevoke[1] as string),\n        userId: session.user.id,\n      },\n      resultOf: () => ({\n        deleted: true as const,\n        id: decodeURIComponent(grantRevoke[1] as string),\n        userId: session.user.id,\n      }),\n    });\n    return oauthJsonResponse(200, { revoked: true }, context.headers);\n  }\n\n  if (path === \"/.well-known/oauth-authorization-server\" && method === \"GET\") {\n    return oauthJsonResponse(\n      200,\n      buildAuthorizationServerMetadata({\n        config,\n        identity: protocol.identity,\n      }),\n      context.headers\n    );\n  }\n\n  if (path === \"/oauth/token\" && method === \"POST\") {\n    try {\n      const body = await readFormBody(\n        request,\n        context.deps.config.security.bodyLimitBytes\n      );\n      const grantType = requiredFormValue(body, \"grant_type\");\n      const clientId = requiredFormValue(body, \"client_id\");\n      await consumeOAuthProtocolRateLimit({\n        clientId,\n        context,\n        kind: \"token\",\n        request,\n      });\n      if (grantType === \"authorization_code\") {\n        const response = await context.deps.transaction(async (scope) =>\n          serviceInMutation(service, scope).exchangeAuthorizationCode({\n            clientId,\n            code: requiredFormValue(body, \"code\"),\n            codeVerifier: requiredFormValue(body, \"code_verifier\"),\n            redirectUri: requiredFormValue(body, \"redirect_uri\"),\n            resource: requiredFormValue(body, \"resource\"),\n          })\n        );\n        return oauthJsonResponse(\n          200,\n          protocolTokenBody(response),\n          context.headers\n        );\n      }\n      if (grantType === \"refresh_token\") {\n        const refreshInput = {\n          clientId,\n          refreshToken: requiredFormValue(body, \"refresh_token\"),\n          resource: requiredFormValue(body, \"resource\"),\n          scope: body.scope,\n        };\n        const runRefreshMutation = async (\n          attempt: number\n        ): Promise<Response> => {\n          const intent = await service.refreshMutationIntent(refreshInput);\n          try {\n            if (intent.kind === \"rotated\") {\n              const result = await context.deps.mutate({\n                context: {\n                  actor: { kind: \"system\" },\n                  request: context.deps.hookRequest(request, path),\n                  traceId: context.traceId,\n                },\n                event: \"oauth.refresh.rotated\",\n                execute: async (scope) =>\n                  serviceInMutation(service, scope).refreshMutation(\n                    refreshInput,\n                    \"rotated\"\n                  ),\n                input: intent,\n                resultOf: (result) => ({\n                  familyId:\n                    result.kind === \"rotated\"\n                      ? result.response.familyId\n                      : result.familyId,\n                }),\n              });\n              if (result.kind === \"reuse_detected\") {\n                throw new OAuthProtocolError(\n                  \"invalid_grant\",\n                  \"The refresh token outcome changed during the request.\",\n                  {\n                    cause: {\n                      actualKind: \"reuse_detected\",\n                      clientId: result.clientId,\n                      event: \"oauth.refresh.outcome_mismatch\",\n                      familyId: result.familyId,\n                      grantId: result.grantId,\n                    },\n                  }\n                );\n              }\n              return oauthJsonResponse(\n                200,\n                protocolTokenBody(result.response),\n                context.headers\n              );\n            }\n            const result = await context.deps.mutate({\n              context: {\n                actor: { kind: \"system\" },\n                request: context.deps.hookRequest(request, path),\n                traceId: context.traceId,\n              },\n              event: \"oauth.refresh.reuse_detected\",\n              execute: async (scope) =>\n                serviceInMutation(service, scope).refreshMutation(\n                  refreshInput,\n                  \"reuse_detected\"\n                ),\n              input: intent,\n              resultOf: (value) => ({\n                familyId:\n                  value.kind === \"rotated\"\n                    ? value.response.familyId\n                    : value.familyId,\n              }),\n            });\n            if (result.kind === \"rotated\") {\n              throw new OAuthProtocolError(\n                \"invalid_grant\",\n                \"The refresh token outcome changed during the request.\"\n              );\n            }\n            throw new OAuthProtocolError(\n              \"invalid_grant\",\n              \"The refresh token has been reused.\",\n              {\n                cause: {\n                  clientId: result.clientId,\n                  event: \"oauth.refresh.reuse_detected\",\n                  familyId: result.familyId,\n                  grantId: result.grantId,\n                },\n              }\n            );\n          } catch (error) {\n            if (\n              attempt === 0 &&\n              error instanceof OAuthProtocolError &&\n              error.cause &&\n              typeof error.cause === \"object\" &&\n              (error.cause as Record<string, unknown>).event ===\n              \"oauth.refresh.outcome_mismatch\"\n            ) {\n              return runRefreshMutation(1);\n            }\n            throw error;\n          }\n        };\n        return runRefreshMutation(0);\n      }\n      throw new OAuthProtocolError(\n        \"unsupported_grant_type\",\n        \"Only authorization_code and refresh_token are supported.\"\n      );\n    } catch (error) {\n      if (error instanceof OAuthProtocolError) {\n        return oauthErrorResponse(error, context.headers);\n      }\n      return oauthErrorResponse(\n        new OAuthProtocolError(\"server_error\", \"OAuth token request failed.\", {\n          cause: error,\n          status: 500,\n        }),\n        context.headers\n      );\n    }\n  }\n\n  if (path === \"/oauth/revoke\" && method === \"POST\") {\n    try {\n      const body = await readFormBody(\n        request,\n        context.deps.config.security.bodyLimitBytes\n      );\n      const clientId = requiredFormValue(body, \"client_id\");\n      await consumeOAuthProtocolRateLimit({\n        clientId,\n        context,\n        kind: \"revoke\",\n        request,\n      });\n      await service.getClient(clientId);\n      await context.deps.transaction(async (scope) =>\n        serviceInMutation(service, scope).revoke({\n          clientId,\n          token: requiredFormValue(body, \"token\"),\n          tokenTypeHint:\n            body.token_type_hint === \"access_token\" ||\n              body.token_type_hint === \"refresh_token\"\n              ? body.token_type_hint\n              : undefined,\n        })\n      );\n      return oauthJsonResponse(200, {}, context.headers);\n    } catch {\n      return oauthJsonResponse(200, {}, context.headers);\n    }\n  }\n\n  if (path !== \"/oauth/authorize\") {\n    return undefined;\n  }\n\n  if (path === \"/oauth/authorize\" && method === \"GET\") {\n    const url = new URL(request.url);\n    const interactionId = queryValue(url, \"interaction_id\");\n    if (interactionId) {\n      const interaction =\n        await oauthStores.authorizationRequests.get(interactionId);\n      if (!interaction) {\n        return oauthErrorResponse(\n          new OAuthProtocolError(\n            \"invalid_request\",\n            \"The authorization interaction is invalid or expired.\"\n          ),\n          context.headers\n        );\n      }\n      const session = await context.deps.resolveSession(\n        request,\n        context.stores\n      );\n      if (!session) {\n        throw new OAuthProtocolError(\n          \"invalid_request\",\n          \"Authentication is required to continue authorization.\"\n        );\n      }\n      if (config.consentUrl) {\n        const consent = new URL(config.consentUrl);\n        consent.searchParams.set(\"interaction_id\", interaction.id);\n        return Response.redirect(consent, 302);\n      }\n      return oauthJsonResponse(\n        200,\n        {\n          clientId: interaction.clientId,\n          interactionId: interaction.id,\n          resource: interaction.resource,\n          scopes: interaction.requestedScopes,\n        },\n        context.headers\n      );\n    }\n    const clientId = requiredQueryValue(url, \"client_id\");\n    const redirectUri = requiredQueryValue(url, \"redirect_uri\");\n    const state = requiredQueryValue(url, \"state\");\n    try {\n      await consumeOAuthProtocolRateLimit({\n        clientId,\n        context,\n        kind: \"authorize\",\n        request,\n      });\n      const interaction = await service.createAuthorizationRequest({\n        clientId,\n        codeChallenge: requiredQueryValue(url, \"code_challenge\"),\n        codeChallengeMethod: requiredQueryValue(\n          url,\n          \"code_challenge_method\"\n        ) as \"S256\",\n        redirectUri,\n        resource: requiredQueryValue(url, \"resource\"),\n        scope: queryValue(url, \"scope\") ?? null,\n        state,\n      });\n      const session = await context.deps.resolveSession(\n        request,\n        context.stores\n      );\n      if (!session && config.signInUrl) {\n        const signIn = new URL(config.signInUrl);\n        signIn.searchParams.set(\"interaction_id\", interaction.id);\n        return Response.redirect(signIn, 302);\n      }\n      if (!session) {\n        throw new OAuthProtocolError(\n          \"invalid_request\",\n          \"Authentication is required to authorize this client.\"\n        );\n      }\n      if (config.consentUrl) {\n        const consent = new URL(config.consentUrl);\n        consent.searchParams.set(\"interaction_id\", interaction.id);\n        return Response.redirect(consent, 302);\n      }\n      return oauthJsonResponse(\n        200,\n        {\n          clientId: interaction.clientId,\n          interactionId: interaction.id,\n          resource: interaction.resource,\n          scopes: interaction.requestedScopes,\n        },\n        context.headers\n      );\n    } catch (error) {\n      if (error instanceof OAuthProtocolError) {\n        if (error.code === \"temporarily_unavailable\") {\n          return oauthErrorResponse(error, context.headers);\n        }\n        try {\n          const client = await service.getClient(clientId);\n          const candidate = queryValue(url, \"redirect_uri\");\n          if (candidate) {\n            const redirect = new URL(candidate);\n            if (client.redirectUris.includes(redirect.toString())) {\n              return oauthRedirect(redirect.toString(), {\n                error: error.code,\n                errorDescription: error.description,\n                iss: issuer,\n                state,\n              });\n            }\n          }\n        } catch {\n          // Redirect only after independently validating client and URI.\n        }\n        return oauthErrorResponse(error, context.headers);\n      }\n      return oauthErrorResponse(\n        new OAuthProtocolError(\"server_error\", \"OAuth authorization failed.\", {\n          cause: error,\n          status: 500,\n        }),\n        context.headers\n      );\n    }\n  }\n\n  if (path === \"/oauth/authorize\" && method === \"POST\") {\n    try {\n      const body = await readFormBody(\n        request,\n        context.deps.config.security.bodyLimitBytes\n      );\n      const interactionId = requiredFormValue(body, \"interaction_id\");\n      const session = await context.deps.resolveSession(\n        request,\n        context.stores\n      );\n      if (!session) {\n        throw new OAuthProtocolError(\n          \"invalid_request\",\n          \"Authentication is required to continue authorization.\"\n        );\n      }\n      const interaction =\n        await oauthStores.authorizationRequests.get(interactionId);\n      if (!interaction) {\n        throw new OAuthProtocolError(\n          \"invalid_request\",\n          \"The authorization interaction is invalid or expired.\"\n        );\n      }\n      await consumeOAuthProtocolRateLimit({\n        clientId: interaction.clientId,\n        context,\n        kind: \"authorize\",\n        request,\n      });\n      const state = await service.readAuthorizationState(interaction);\n      if (body.decision === \"deny\") {\n        await context.deps.mutate({\n          context: {\n            actor: {\n              kind: \"user\",\n              sessionId: session.session.id,\n              userId: session.user.id,\n            },\n            request: context.deps.hookRequest(request, path),\n            traceId: context.traceId,\n          },\n          event: \"oauth.authorization.denied\",\n          execute: async (scope) =>\n            serviceInMutation(service, scope).denyAuthorizationRequest(\n              interactionId\n            ),\n          input: {\n            clientId: interaction.clientId,\n            requestId: interactionId,\n            userId: session.user.id,\n          },\n          resultOf: (result) => ({\n            requestId: result.id,\n            userId: session.user.id,\n          }),\n        });\n        return oauthRedirect(interaction.redirectUri, {\n          error: \"access_denied\",\n          iss: issuer,\n          state,\n        });\n      }\n      if (body.decision !== \"approve\") {\n        throw new OAuthProtocolError(\n          \"invalid_request\",\n          \"decision must be approve or deny.\"\n        );\n      }\n      const approvedScopes = body.scope ? parseScopes(body.scope) : undefined;\n      if (\n        approvedScopes?.some(\n          (scope) => !interaction.requestedScopes.includes(scope)\n        )\n      ) {\n        throw new OAuthProtocolError(\n          \"invalid_scope\",\n          \"Consent cannot widen the requested scope.\"\n        );\n      }\n      const approved = await context.deps.mutate({\n        context: {\n          actor: {\n            kind: \"user\",\n            sessionId: session.session.id,\n            userId: session.user.id,\n          },\n          request: context.deps.hookRequest(request, path),\n          traceId: context.traceId,\n        },\n        event: \"oauth.grant.authorized\",\n        execute: async (scope) =>\n          serviceInMutation(service, scope).approveAuthorizationRequest({\n            id: interactionId,\n            organizationId: session.session.active_organization_id ?? null,\n            ...(approvedScopes ? { scopes: approvedScopes } : {}),\n            userId: session.user.id,\n          }),\n        input: {\n          clientId: interaction.clientId,\n          grantId: interaction.id,\n          resource: interaction.resource,\n          scopes: approvedScopes ?? interaction.requestedScopes,\n          userId: session.user.id,\n        },\n        resultOf: (result) => ({\n          grantId: result.grant.id,\n          userId: session.user.id,\n        }),\n      });\n      return oauthRedirect(interaction.redirectUri, {\n        code: approved.code,\n        iss: issuer,\n        state,\n      });\n    } catch (error) {\n      if (error instanceof OAuthProtocolError) {\n        return oauthErrorResponse(error, context.headers);\n      }\n      return oauthErrorResponse(\n        new OAuthProtocolError(\"server_error\", \"OAuth authorization failed.\", {\n          cause: error,\n          status: 500,\n        }),\n        context.headers\n      );\n    }\n  }\n\n  return undefined;\n}\n\nexport async function disableAuthorizationServerClient(\n  context: AuthorizationServerRouteContext,\n  clientId: string\n): Promise<void> {\n  const protocol = await context.deps.getProtocolRuntime();\n  const service = protocol.oauth;\n  await context.deps.mutate({\n    context: {\n      actor: { kind: \"system\" },\n      request: { method: \"POST\", path: \"/oauth/clients/disable\" },\n      traceId: context.traceId,\n    },\n    event: \"oauth.client.disabled\",\n    execute: async (scope) =>\n      serviceInMutation(service, scope).disableClient(clientId),\n    input: { clientId },\n    resultOf: () => ({ clientId }),\n  });\n}\n","export {\n  oauthErrorBody,\n  oauthErrorResponse,\n  oauthInvalidRequest,\n  oauthJsonResponse,\n  OAuthProtocolError,\n} from \"./errors.ts\";\nexport { buildAuthorizationServerMetadata } from \"./metadata.ts\";\nexport {\n  assertCodeVerifier,\n  assertS256CodeChallenge,\n  verifyCodeVerifier,\n} from \"./pkce.ts\";\nexport { assertRedirectUri, normalizeRegisteredRedirectUri } from \"./redirect-uri.ts\";\nexport { assertClientResource, normalizeResourceUri } from \"./resource.ts\";\nexport {\n  assertClientScopes,\n  intersectScopes,\n  isOidcIdentityScope,\n  isScopeSubset,\n  OIDC_IDENTITY_SCOPES,\n  parseProtocolScopes,\n  parseScopes,\n  scopesToString,\n} from \"./scopes.ts\";\nexport type { OidcIdentityScope, ParsedProtocolScopes } from \"./scopes.ts\";\nexport {\n  createAccessTokenClaims,\n  generateOpaqueSecret,\n  hashOAuthSecret,\n  openOAuthState,\n  OAUTH_SECRET_BYTES,\n  projectOAuthTokenEndpointResponse,\n  sealOAuthState,\n} from \"./tokens.ts\";\nexport type {\n  IssuedOAuthTokenSet,\n  OAuthTokenEndpointResponse,\n} from \"./tokens.ts\";\nexport type {\n  OAuthAccessTokenClaims,\n  OAuthAuthorizationCode,\n  OAuthAuthorizationGrant,\n  OAuthAuthorizationRequest,\n  OAuthClient,\n  OAuthClientType,\n  OAuthGrantStatus,\n  OAuthRefreshToken,\n  OAuthRefreshTokenStatus,\n  OAuthRegistrationKind,\n  OAuthRevokedAccessToken,\n  OAuthTokenEndpointAuthMethod,\n  VerifiedOAuthAccessToken,\n} from \"./types.ts\";\n","export type OAuthProtocolErrorCode =\n  | \"access_denied\"\n  | \"invalid_client\"\n  | \"invalid_grant\"\n  | \"invalid_request\"\n  | \"invalid_scope\"\n  | \"server_error\"\n  | \"temporarily_unavailable\"\n  | \"unauthorized_client\"\n  | \"unsupported_grant_type\"\n  | \"unsupported_response_type\";\n\nexport class OAuthProtocolError extends Error {\n  readonly code: OAuthProtocolErrorCode;\n  readonly description: string;\n  readonly status: number;\n\n  constructor(\n    code: OAuthProtocolErrorCode,\n    description: string,\n    options: { cause?: unknown; status?: number } = {}\n  ) {\n    super(description, { cause: options.cause });\n    this.name = \"OAuthProtocolError\";\n    this.code = code;\n    this.description = description;\n    this.status = options.status ?? (code === \"invalid_client\" ? 401 : 400);\n  }\n}\n\nexport function oauthErrorBody(error: OAuthProtocolError): {\n  error: OAuthProtocolErrorCode;\n  error_description: string;\n} {\n  return {\n    error: error.code,\n    error_description: error.description,\n  };\n}\n\nexport function oauthJsonResponse(\n  status: number,\n  body: unknown,\n  headers?: HeadersInit\n): Response {\n  const responseHeaders = new Headers(headers);\n  responseHeaders.set(\"cache-control\", \"no-store\");\n  responseHeaders.set(\"content-type\", \"application/json; charset=utf-8\");\n  responseHeaders.set(\"pragma\", \"no-cache\");\n  return new Response(JSON.stringify(body), {\n    headers: responseHeaders,\n    status,\n  });\n}\n\nexport function oauthErrorResponse(\n  error: OAuthProtocolError,\n  headers?: HeadersInit\n): Response {\n  return oauthJsonResponse(error.status, oauthErrorBody(error), headers);\n}\n\nexport function oauthInvalidRequest(description: string): OAuthProtocolError {\n  return new OAuthProtocolError(\"invalid_request\", description);\n}\n","import type { NormalizedAthenaAuthorizationServerConfig } from \"../config.ts\";\nimport type { AthenaAuthProtocolIdentity } from \"../protocol-identity.ts\";\n\nexport function buildAuthorizationServerMetadata(input: {\n  config: NormalizedAthenaAuthorizationServerConfig;\n  identity: AthenaAuthProtocolIdentity;\n}): Record<string, unknown> {\n  const scopes = [\n    ...new Set(\n      Object.values(input.config.resources).flatMap((resource) =>\n        Object.keys(resource.scopes)\n      )\n    ),\n  ].sort();\n  return {\n    authorization_endpoint: input.identity.authorizationEndpoint,\n    authorization_response_iss_parameter_supported: true,\n    code_challenge_methods_supported: [\"S256\"],\n    grant_types_supported: [\n      \"authorization_code\",\n      ...(input.config.issueRefreshTokens ? [\"refresh_token\"] : []),\n    ],\n    issuer: input.identity.issuer,\n    jwks_uri: input.identity.jwksUri,\n    response_types_supported: [\"code\"],\n    revocation_endpoint: input.identity.revocationEndpoint,\n    scopes_supported: scopes,\n    token_endpoint: input.identity.tokenEndpoint,\n    token_endpoint_auth_methods_supported: [\"none\"],\n  };\n}\n","import { generateCodeChallenge } from \"../oauth2/pkce.ts\";\nimport { OAuthProtocolError } from \"./errors.ts\";\n\nconst CODE_VERIFIER_PATTERN = /^[A-Za-z0-9\\-._~]{43,128}$/;\n\nexport function assertS256CodeChallenge(\n  codeChallenge: string,\n  codeChallengeMethod: string\n): void {\n  if (codeChallengeMethod !== \"S256\") {\n    throw new OAuthProtocolError(\n      \"invalid_request\",\n      \"code_challenge_method must be S256\"\n    );\n  }\n  if (!/^[A-Za-z0-9_-]{43,128}$/.test(codeChallenge)) {\n    throw new OAuthProtocolError(\n      \"invalid_request\",\n      \"code_challenge must be a valid base64url value\"\n    );\n  }\n}\n\nexport function assertCodeVerifier(codeVerifier: string): void {\n  if (!CODE_VERIFIER_PATTERN.test(codeVerifier)) {\n    throw new OAuthProtocolError(\n      \"invalid_grant\",\n      \"The code verifier is invalid.\"\n    );\n  }\n}\n\nexport async function verifyCodeVerifier(\n  codeVerifier: string,\n  codeChallenge: string,\n  codeChallengeMethod: string\n): Promise<void> {\n  assertCodeVerifier(codeVerifier);\n  if (codeChallengeMethod !== \"S256\") {\n    throw new OAuthProtocolError(\n      \"invalid_grant\",\n      \"The authorization code does not support the requested PKCE method.\"\n    );\n  }\n  const computed = await generateCodeChallenge(codeVerifier);\n  if (computed !== codeChallenge) {\n    throw new OAuthProtocolError(\n      \"invalid_grant\",\n      \"The authorization code is invalid or expired.\"\n    );\n  }\n}\n","import { base64Url } from \"../utils/base64.ts\";\n\n/**\n * Compute the S256 PKCE `code_challenge` for a given `code_verifier`.\n *\n * Uses Web Crypto `SHA-256` then Base64URL without padding\n * (RFC 7636 §4.2).\n *\n * @param codeVerifier - High-entropy verifier string from the client\n * @returns Base64URL-encoded challenge suitable for the authorize request\n */\nexport async function generateCodeChallenge(codeVerifier: string) {\n  const encoder = new TextEncoder();\n  const data = encoder.encode(codeVerifier);\n  const hash = await crypto.subtle.digest(\"SHA-256\", data);\n  return base64Url.encode(new Uint8Array(hash), {\n    padding: false,\n  });\n}\n","function toUint8Array(input: string | ArrayBuffer | Uint8Array): Uint8Array {\n  if (typeof input === \"string\") {\n    return new TextEncoder().encode(input);\n  }\n  if (input instanceof Uint8Array) {\n    return input;\n  }\n  return new Uint8Array(input);\n}\n\nfunction bytesToBase64(\n  bytes: Uint8Array,\n  urlSafe: boolean,\n  padding: boolean\n): string {\n  let binary = \"\";\n  for (const byte of bytes) {\n    binary += String.fromCharCode(byte);\n  }\n  let encoded = btoa(binary);\n  if (urlSafe) {\n    encoded = encoded.replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n  }\n  if (!padding) {\n    encoded = encoded.replace(/[=]+$/g, \"\");\n  }\n  return encoded;\n}\n\nfunction base64ToBytes(encoded: string, urlSafe: boolean): Uint8Array {\n  let normalized = encoded.trim();\n  if (urlSafe) {\n    normalized = normalized.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  }\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\n/**\n * Standard Base64 helpers (RFC 4648) used for HTTP Basic Auth credentials.\n */\nexport const base64 = {\n  encode(input: string | ArrayBuffer | Uint8Array): string {\n    return bytesToBase64(toUint8Array(input), false, true);\n  },\n};\n\n/**\n * Base64URL helpers used for PKCE code challenges.\n */\nexport const base64Url = {\n  decode(input: string): Uint8Array {\n    return base64ToBytes(input, true);\n  },\n  encode(\n    input: string | ArrayBuffer | Uint8Array,\n    options?: { padding?: boolean }\n  ): string {\n    return bytesToBase64(toUint8Array(input), true, options?.padding !== false);\n  },\n};\n","import { OAuthProtocolError } from \"./errors.ts\";\n\nfunction parseRedirectUri(value: string): URL {\n  let url: URL;\n  try {\n    url = new URL(value);\n  } catch {\n    throw new OAuthProtocolError(\n      \"invalid_request\",\n      \"redirect_uri must be an absolute URI.\"\n    );\n  }\n  if (url.username || url.password || url.hash) {\n    throw new OAuthProtocolError(\n      \"invalid_request\",\n      \"redirect_uri contains forbidden URL components.\"\n    );\n  }\n  return url;\n}\n\nfunction isLoopbackHost(hostname: string): boolean {\n  const normalized = hostname.toLowerCase();\n  return (\n    normalized === \"localhost\" ||\n    normalized === \"127.0.0.1\" ||\n    normalized === \"::1\"\n  );\n}\n\nexport function normalizeRegisteredRedirectUri(value: string): string {\n  const url = parseRedirectUri(value);\n  if (url.protocol !== \"https:\" && !(url.protocol === \"http:\" && isLoopbackHost(url.hostname))) {\n    throw new OAuthProtocolError(\n      \"invalid_request\",\n      \"redirect_uri must use HTTPS except for loopback native redirects.\"\n    );\n  }\n  return value;\n}\n\nexport function redirectUriMatches(input: {\n  clientType: \"public\";\n  registeredUri: string;\n  requestedUri: string;\n}): boolean {\n  const registered = parseRedirectUri(input.registeredUri);\n  const requested = parseRedirectUri(input.requestedUri);\n  const loopback =\n    registered.protocol === \"http:\" &&\n    requested.protocol === \"http:\" &&\n    isLoopbackHost(registered.hostname) &&\n    isLoopbackHost(requested.hostname);\n  if (!loopback) {\n    return input.registeredUri === input.requestedUri;\n  }\n  return (\n    registered.protocol === requested.protocol &&\n    registered.hostname === requested.hostname &&\n    registered.pathname === requested.pathname &&\n    registered.search === requested.search\n  );\n}\n\nexport function assertRedirectUri(input: {\n  clientType: \"public\";\n  registeredUris: readonly string[];\n  requestedUri: string;\n}): void {\n  const registeredUris = input.registeredUris.map(normalizeRegisteredRedirectUri);\n  const valid = registeredUris.some((registeredUri) =>\n    redirectUriMatches({\n      clientType: input.clientType,\n      registeredUri,\n      requestedUri: input.requestedUri,\n    })\n  );\n  if (!valid) {\n    throw new OAuthProtocolError(\n      \"invalid_request\",\n      \"redirect_uri does not match a registered redirect URI.\"\n    );\n  }\n}\n","import { OAuthProtocolError } from \"./errors.ts\";\nimport type { OAuthClient } from \"./types.ts\";\n\nexport function normalizeResourceUri(value: string): string {\n  let url: URL;\n  try {\n    url = new URL(value);\n  } catch {\n    throw new OAuthProtocolError(\n      \"invalid_request\",\n      \"resource must be an absolute URI.\"\n    );\n  }\n  if (url.username || url.password || url.hash) {\n    throw new OAuthProtocolError(\n      \"invalid_request\",\n      \"resource contains forbidden URL components.\"\n    );\n  }\n  return url.toString().replace(/\\/$/, \"\");\n}\n\nexport function assertClientResource(\n  client: OAuthClient,\n  resource: string\n): string {\n  const normalized = normalizeResourceUri(resource);\n  if (!client.resourceUris.includes(normalized)) {\n    throw new OAuthProtocolError(\n      \"invalid_request\",\n      \"The requested resource is not registered for this client.\"\n    );\n  }\n  return normalized;\n}\n","import { OAuthProtocolError } from \"./errors.ts\";\nimport type { OAuthClient } from \"./types.ts\";\n\nconst SCOPE_PATTERN = /^[\\x21-\\x7e]+$/;\n\nexport const OIDC_IDENTITY_SCOPES = [\"openid\", \"profile\", \"email\"] as const;\n\nexport type OidcIdentityScope = (typeof OIDC_IDENTITY_SCOPES)[number];\n\nconst IDENTITY_SCOPE_SET = new Set<string>(OIDC_IDENTITY_SCOPES);\n\nexport interface ParsedProtocolScopes {\n  identity: OidcIdentityScope[];\n  resource: string[];\n}\n\nexport function isOidcIdentityScope(value: string): value is OidcIdentityScope {\n  return IDENTITY_SCOPE_SET.has(value);\n}\n\nexport function parseProtocolScopes(\n  value: string | null | undefined\n): ParsedProtocolScopes {\n  const scopes = parseScopes(value);\n  if (!scopes.includes(\"openid\")) {\n    return { identity: [], resource: scopes };\n  }\n  const identity: OidcIdentityScope[] = [];\n  const resource: string[] = [];\n  for (const scope of scopes) {\n    if (isOidcIdentityScope(scope)) {\n      identity.push(scope);\n    } else {\n      resource.push(scope);\n    }\n  }\n  return { identity, resource };\n}\n\nexport function parseScopes(value: string | null | undefined): string[] {\n  if (value == null || value.trim() === \"\") {\n    return [];\n  }\n  const scopes = value.trim().split(/\\s+/);\n  const unique = new Set<string>();\n  for (const scope of scopes) {\n    if (!SCOPE_PATTERN.test(scope) || scope.includes('\"')) {\n      throw new OAuthProtocolError(\n        \"invalid_scope\",\n        \"The requested scope contains an invalid name.\"\n      );\n    }\n    unique.add(scope);\n  }\n  return [...unique].sort();\n}\n\nexport function scopesToString(scopes: readonly string[]): string {\n  return [...scopes].sort().join(\" \");\n}\n\nexport function assertClientScopes(\n  client: OAuthClient,\n  resourceScopes: Readonly<Record<string, unknown>>,\n  requestedScopes: readonly string[]\n): void {\n  for (const scope of requestedScopes) {\n    if (\n      !(client.scopes.includes(scope) && Object.hasOwn(resourceScopes, scope))\n    ) {\n      throw new OAuthProtocolError(\n        \"invalid_scope\",\n        \"The requested scope is not allowed for this client or resource.\"\n      );\n    }\n  }\n}\n\nexport function isScopeSubset(\n  candidate: readonly string[],\n  superset: readonly string[]\n): boolean {\n  const allowed = new Set(superset);\n  return candidate.every((scope) => allowed.has(scope));\n}\n\nexport function intersectScopes(\n  candidate: readonly string[],\n  liveGrant: readonly string[]\n): string[] {\n  const allowed = new Set(liveGrant);\n  return [...new Set(candidate.filter((scope) => allowed.has(scope)))].sort();\n}\n","import type { OAuthAccessTokenClaims } from \"./types.ts\";\n\nexport const OAUTH_SECRET_BYTES = 32;\n\nexport function generateOpaqueSecret(\n  bytes = OAUTH_SECRET_BYTES\n): string {\n  if (!Number.isInteger(bytes) || bytes < 32 || bytes > 128) {\n    throw new RangeError(\"OAuth secrets must contain between 32 and 128 bytes.\");\n  }\n  return Buffer.from(crypto.getRandomValues(new Uint8Array(bytes))).toString(\n    \"base64url\"\n  );\n}\n\nexport async function hashOAuthSecret(secret: string): Promise<string> {\n  const digest = await crypto.subtle.digest(\n    \"SHA-256\",\n    new TextEncoder().encode(secret)\n  );\n  return Buffer.from(digest).toString(\"base64url\");\n}\n\nasync function stateKey(secret: string, usage: KeyUsage): Promise<CryptoKey> {\n  const material = await crypto.subtle.digest(\n    \"SHA-256\",\n    new TextEncoder().encode(secret)\n  );\n  return crypto.subtle.importKey(\n    \"raw\",\n    material,\n    { name: \"AES-GCM\" },\n    false,\n    [usage]\n  );\n}\n\nexport async function sealOAuthState(\n  state: string,\n  secret: string\n): Promise<string> {\n  const iv = crypto.getRandomValues(new Uint8Array(12));\n  const encrypted = await crypto.subtle.encrypt(\n    { iv, name: \"AES-GCM\" },\n    await stateKey(secret, \"encrypt\"),\n    new TextEncoder().encode(state)\n  );\n  const packed = new Uint8Array(iv.byteLength + encrypted.byteLength);\n  packed.set(iv);\n  packed.set(new Uint8Array(encrypted), iv.byteLength);\n  return Buffer.from(packed).toString(\"base64url\");\n}\n\nexport async function openOAuthState(\n  ciphertext: string,\n  secret: string\n): Promise<string> {\n  const packed = Buffer.from(ciphertext, \"base64url\");\n  if (packed.byteLength <= 12) {\n    throw new Error(\"Invalid OAuth state\");\n  }\n  const plaintext = await crypto.subtle.decrypt(\n    { iv: packed.subarray(0, 12), name: \"AES-GCM\" },\n    await stateKey(secret, \"decrypt\"),\n    packed.subarray(12)\n  );\n  return new TextDecoder().decode(plaintext);\n}\n\nexport interface IssuedOAuthTokenSet {\n  accessToken: string;\n  expiresIn: number;\n  familyId?: string;\n  grantId: string;\n  refreshToken?: string;\n  scopes: readonly string[];\n}\n\nexport interface OAuthTokenEndpointResponse {\n  access_token: string;\n  expires_in: number;\n  refresh_token?: string;\n  scope: string;\n  token_type: \"Bearer\";\n}\n\nexport function projectOAuthTokenEndpointResponse(\n  issued: IssuedOAuthTokenSet\n): OAuthTokenEndpointResponse {\n  return {\n    access_token: issued.accessToken,\n    expires_in: issued.expiresIn,\n    ...(issued.refreshToken ? { refresh_token: issued.refreshToken } : {}),\n    scope: [...issued.scopes].sort().join(\" \"),\n    token_type: \"Bearer\",\n  };\n}\n\nexport function createAccessTokenClaims(input: {\n  clientId: string;\n  familyId?: string;\n  grantId: string;\n  issuer: string;\n  organizationId?: string | null;\n  resource: string;\n  scopes: readonly string[];\n  subject: string;\n  ttlSeconds: number;\n  now?: Date;\n}): OAuthAccessTokenClaims {\n  const now = input.now ?? new Date();\n  const iat = Math.floor(now.getTime() / 1000);\n  return {\n    aud: input.resource,\n    athena_grant_id: input.grantId,\n    ...(input.familyId ? { athena_token_family_id: input.familyId } : {}),\n    ...(input.organizationId\n      ? { athena_organization_id: input.organizationId }\n      : {}),\n    client_id: input.clientId,\n    exp: iat + Math.max(1, Math.trunc(input.ttlSeconds)),\n    iat,\n    iss: input.issuer,\n    jti: crypto.randomUUID(),\n    nbf: iat,\n    scope: [...input.scopes].sort().join(\" \"),\n    sub: input.subject,\n  };\n}\n","import type { AuthBridgeCodeStore } from \"../../bridge/store.ts\";\n\nexport async function revokeAuthBridgeCodesForSessions(\n  store: AuthBridgeCodeStore,\n  sessionIds: Array<string | null | undefined>\n): Promise<void> {\n  const unique = [\n    ...new Set(\n      sessionIds.filter(\n        (sessionId): sessionId is string =>\n          typeof sessionId === \"string\" && sessionId.length > 0\n      )\n    ),\n  ];\n  await Promise.all(\n    unique.map((sessionId) =>\n      store.revokeForSession(sessionId, \"session_revoked\")\n    )\n  );\n}\n","import {\n  normalizeAuthBridgeDestinationOrigin,\n  normalizeAuthBridgeRedirectPath,\n} from \"../../bridge/code.ts\";\nimport { issueAuthBridgeCode } from \"../../bridge/service.ts\";\nimport { isUserEffectivelyBanned } from \"../admin-contract.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AthenaAuthStores } from \"../memory-stores.ts\";\nimport type { AuthRuntimeDependencies } from \"../runtime-dependencies.ts\";\nimport { asStringField, readJsonBody } from \"../security.ts\";\n\nexport const ATHENA_AUTH_BRIDGE_ISSUE_PATH = \"/session/bridge/issue\";\nexport const ATHENA_AUTH_BRIDGE_EXCHANGE_PATH = \"/session/bridge/exchange\";\nexport const ATHENA_AUTH_BRIDGE_EXCHANGE_INVALID =\n  \"ATHENA_AUTH_BRIDGE_EXCHANGE_INVALID\";\n\nexport interface AuthBridgeExchangeResult {\n  expiresAt: string;\n  sessionId: string;\n  sessionToken: string;\n  userId: string;\n}\n\nfunction exchangeInvalid(): AthenaAuthRuntimeError {\n  return new AthenaAuthRuntimeError(401, \"Invalid bridge exchange\", {\n    code: ATHENA_AUTH_BRIDGE_EXCHANGE_INVALID,\n  });\n}\n\nfunction isOriginAllowlisted(\n  destinationOrigin: string,\n  allowedOrigins: string[]\n): boolean {\n  return allowedOrigins.includes(destinationOrigin);\n}\n\nfunction sessionIsLive(expiresAt: Date | string): boolean {\n  return new Date(expiresAt).getTime() > Date.now();\n}\n\nexport async function handleAuthBridgeRoutes(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: {\n    deps: AuthRuntimeDependencies;\n    headers: Headers;\n    stores: AthenaAuthStores;\n    traceId: string;\n  }\n): Promise<Response | undefined> {\n  if (path === \"/session/bridge/issue\" && method === \"POST\") {\n    if (!ctx.deps.config.bridge.enabled) {\n      throw AthenaAuthRuntimeError.notFound(\"Not found\");\n    }\n    const resolved = await ctx.deps.requireSession(request, ctx.stores);\n    if (isUserEffectivelyBanned(resolved.user)) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    const body = await readJsonBody(\n      request,\n      ctx.deps.config.security.bodyLimitBytes\n    );\n    let destinationOrigin: string;\n    try {\n      destinationOrigin = normalizeAuthBridgeDestinationOrigin(\n        asStringField(body, \"destinationOrigin\") ?? \"\"\n      );\n    } catch {\n      throw AthenaAuthRuntimeError.badRequest(\"Invalid destination origin\");\n    }\n    if (\n      !isOriginAllowlisted(\n        destinationOrigin,\n        ctx.deps.config.bridge.allowedOrigins\n      )\n    ) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    let redirectPath: string;\n    try {\n      redirectPath = normalizeAuthBridgeRedirectPath(\n        asStringField(body, \"redirectPath\") ?? \"/\"\n      );\n    } catch {\n      throw AthenaAuthRuntimeError.badRequest(\"Invalid redirect path\");\n    }\n    const ttlMs = ctx.deps.config.bridge.codeTtlSeconds * 1000;\n    const expiresAt = new Date(Date.now() + ttlMs);\n    const issued = await issueAuthBridgeCode({\n      destinationOrigin,\n      expiresAt,\n      organizationId: resolved.session.active_organization_id,\n      redirectPath,\n      sessionId: resolved.session.id,\n      store: ctx.deps.getBridgeCodeStore(),\n      userId: resolved.user.id,\n    });\n    return jsonResponse(\n      200,\n      {\n        code: issued.code,\n        destinationOrigin,\n        expiresAt: expiresAt.toISOString(),\n        redirectPath,\n      },\n      ctx.headers,\n      ctx.traceId\n    );\n  }\n\n  if (path === \"/session/bridge/exchange\" && method === \"POST\") {\n    if (!ctx.deps.config.bridge.enabled) {\n      throw exchangeInvalid();\n    }\n    const body = await readJsonBody(\n      request,\n      ctx.deps.config.security.bodyLimitBytes\n    );\n    const code = asStringField(body, \"code\");\n    if (!code) {\n      throw exchangeInvalid();\n    }\n    let destinationOrigin: string;\n    try {\n      destinationOrigin = normalizeAuthBridgeDestinationOrigin(\n        asStringField(body, \"destinationOrigin\") ?? \"\"\n      );\n    } catch {\n      throw exchangeInvalid();\n    }\n    const consumed = await ctx.deps.getBridgeCodeStore().consume({\n      code,\n      destinationOrigin,\n    });\n    if (!consumed) {\n      throw exchangeInvalid();\n    }\n    const user = await ctx.stores.getUserById(consumed.userId);\n    if (!user || isUserEffectivelyBanned(user)) {\n      throw exchangeInvalid();\n    }\n    const sessions = await ctx.stores.listUserSessions(consumed.userId);\n    const session = sessions.find((row) => row.id === consumed.sessionId);\n    if (\n      !session?.active ||\n      session.user_id !== user.id ||\n      !sessionIsLive(session.expires_at)\n    ) {\n      throw exchangeInvalid();\n    }\n    const result: AuthBridgeExchangeResult = {\n      expiresAt: new Date(session.expires_at).toISOString(),\n      sessionId: session.id,\n      sessionToken: session.token,\n      userId: user.id,\n    };\n    return jsonResponse(200, result, ctx.headers, ctx.traceId);\n  }\n}\n","import { generateAuthBridgeCode, hashAuthBridgeCode } from \"./code.ts\";\nimport type { AuthBridgeCodeStore } from \"./store.ts\";\nimport type { AuthBridgeCodeRecord } from \"./types.ts\";\n\nexport interface IssueAuthBridgeCodeServiceInput {\n  destinationOrigin: string;\n  expiresAt: Date;\n  organizationId?: string | null;\n  redirectPath: string;\n  sessionId: string;\n  store: AuthBridgeCodeStore;\n  userId: string;\n}\n\nexport interface IssuedAuthBridgeCode {\n  code: string;\n  record: AuthBridgeCodeRecord;\n}\n\nexport async function issueAuthBridgeCode(\n  input: IssueAuthBridgeCodeServiceInput\n): Promise<IssuedAuthBridgeCode> {\n  const code = generateAuthBridgeCode();\n  const record = await input.store.issue({\n    codeHash: await hashAuthBridgeCode(code),\n    destinationOrigin: input.destinationOrigin,\n    expiresAt: input.expiresAt,\n    organizationId: input.organizationId,\n    redirectPath: input.redirectPath,\n    sessionId: input.sessionId,\n    userId: input.userId,\n  });\n  return { code, record };\n}\n","import { authEmailEvents } from \"../email/index.ts\";\nimport { tokenizedUrl } from \"./email/user-routes.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"./errors.ts\";\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\nimport { validatePassword, withPasswordHash } from \"./password.ts\";\nimport type { AuthRuntimeDependencies } from \"./runtime-dependencies.ts\";\nimport { asStringField, readJsonBody, requireStringField } from \"./security.ts\";\n\nexport interface AuthProcedureContext {\n  deps: AuthRuntimeDependencies;\n  headers: Headers;\n  stores: AthenaAuthStores;\n  traceId: string;\n}\n\nexport async function handleCredentialPasswordRoutes(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: AuthProcedureContext\n): Promise<Response | undefined> {\n  const { config, emitIfRecipient, emitMail, hasher, hookRequest, mutate } =\n    ctx.deps;\n  const issueSession = ctx.deps.issueSession;\n  const currentStores = ctx.stores;\n  const headers = ctx.headers;\n  const traceId = ctx.traceId;\n  if (method !== \"POST\") {\n    return;\n  }\n  if (typeof issueSession !== \"function\") {\n    throw AthenaAuthRuntimeError.internal(\n      new Error(\"canonical issueSession is required\")\n    );\n  }\n  if (path === \"/forget-password\" && method === \"POST\") {\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const email = requireStringField(body, \"email\");\n    const user = await currentStores.getUserByEmail(email);\n    if (user) {\n      const token = Buffer.from(\n        crypto.getRandomValues(new Uint8Array(32))\n      ).toString(\"base64url\");\n      await currentStores.createVerification({\n        expiresAt: new Date(Date.now() + 60 * 60 * 1000),\n        id: crypto.randomUUID(),\n        identifier: `reset:${user.email ?? email}`,\n        value: token,\n      });\n      const origin = new URL(request.url).origin;\n      const redirectTo = asStringField(body, \"redirectTo\");\n      const resetUrl = tokenizedUrl(\n        redirectTo,\n        token,\n        origin,\n        \"/reset-password\",\n        config.security.trustedOrigins\n      );\n      await emitMail({\n        data: {\n          legacy_hook_url: redirectTo ? resetUrl : token,\n          reset_url: resetUrl,\n        },\n        eventType: authEmailEvents.user.password.reset,\n        recipient: email,\n      });\n    }\n    return jsonResponse(200, { status: true }, headers);\n  }\n\n  if (path === \"/reset-password\" && method === \"POST\") {\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const token = requireStringField(body, \"token\");\n    const newPassword =\n      asStringField(body, \"newPassword\") ??\n      requireStringField(body, \"password\");\n    validatePassword(newPassword, {\n      maxLength: config.emailAndPassword.maxPasswordLength,\n      minLength: config.emailAndPassword.minPasswordLength,\n    });\n    const verification = await currentStores.getVerificationByValue(token);\n    if (!verification) {\n      throw AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n    }\n    const email = verification.identifier.replace(/^reset:/, \"\");\n    const user = await currentStores.getUserByEmail(email);\n    if (!user) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n    const hash = await hasher.hash(newPassword);\n    await mutate({\n      context: {\n        actor: { kind: \"user\", userId: user.id },\n        request: hookRequest(request, path),\n        traceId,\n      },\n      event: \"user.password.reset\",\n      execute: async (scope) => {\n        const consumed = await scope.stores.consumeVerification(token);\n        if (!consumed) {\n          throw AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n        }\n        await scope.stores.updateUser(user.id, {\n          metadata: withPasswordHash(\n            typeof user.metadata === \"object\" ? user.metadata : {},\n            hash\n          ),\n        });\n        await scope.stores.deleteUserSessions(user.id);\n      },\n      input: { userId: user.id },\n      resultOf: () => ({ userId: user.id }),\n    });\n    await emitIfRecipient(user.email, {\n      data: {},\n      eventType: authEmailEvents.user.password.changed,\n    });\n    return jsonResponse(200, { status: true }, headers);\n  }\n}\n","import type { EmitAuthEmailInput } from \"../../email/emit.ts\";\nimport type { AuthDomainMutate } from \"../../hooks/execute.ts\";\nimport { sanitizeHookUser } from \"../../hooks/sanitize.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AthenaAuthStores } from \"../memory-stores.ts\";\nimport type { AuthUserRow } from \"../models.ts\";\nimport { toPublicUser } from \"../models.ts\";\nimport type { AthenaAuthEmailStore } from \"./store.ts\";\nimport { resolveTrustedCallbackUrl } from \"../security.ts\";\n\nconst CHANGE_EMAIL_IDENTIFIER = /^change-email:([^:]+):(.+)$/;\n\nexport function parseChangeEmailIdentifier(\n  identifier: string\n): { email: string; userId: string } | undefined {\n  const match = CHANGE_EMAIL_IDENTIFIER.exec(identifier);\n  const userId = match?.[1];\n  const email = match?.[2];\n  if (!(userId && email)) {\n    return;\n  }\n  return { email, userId };\n}\n\nexport async function resolveChangeEmailTarget(\n  stores: AthenaAuthStores,\n  token: string\n): Promise<{ email: string; userId: string }> {\n  const pending = await stores.getVerificationByValue(token);\n  const parsed = pending\n    ? parseChangeEmailIdentifier(pending.identifier)\n    : undefined;\n  if (!parsed) {\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n  }\n  return parsed;\n}\n\nexport async function applyChangeEmailToken(\n  stores: AthenaAuthStores,\n  token: string\n): Promise<AuthUserRow> {\n  const verification = await stores.consumeVerification(token);\n  if (!verification) {\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n  }\n  const parsed = parseChangeEmailIdentifier(verification.identifier);\n  if (!parsed) {\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid token\");\n  }\n  return stores.updateUser(parsed.userId, {\n    email: parsed.email,\n    emailVerified: true,\n  });\n}\n\nexport async function applyDeleteUserToken(\n  stores: AthenaAuthStores,\n  token: string\n): Promise<string> {\n  const verification = await stores.consumeVerification(token);\n  if (!verification) {\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n  }\n  const userId = parseDeleteUserIdentifier(verification.identifier);\n  if (!userId) {\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid token\");\n  }\n  await stores.deleteUser(userId);\n  return userId;\n}\n\nexport function parseDeleteUserIdentifier(\n  identifier: string\n): string | undefined {\n  const userId = identifier.replace(/^delete_user:/, \"\");\n  if (!userId || identifier === userId) {\n    return;\n  }\n  return userId;\n}\n\nexport async function resolveDeleteUserTarget(\n  stores: AthenaAuthStores,\n  token: string\n): Promise<string> {\n  const pending = await stores.getVerificationByValue(token);\n  const userId = pending\n    ? parseDeleteUserIdentifier(pending.identifier)\n    : undefined;\n  if (!userId) {\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n  }\n  return userId;\n}\n\nexport async function handleUserMailRoutes(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: {\n    emailStore: AthenaAuthEmailStore;\n    headers: Headers;\n    hookRequest: (\n      request: Request,\n      path: string\n    ) => {\n      ipAddress?: string;\n      method: string;\n      path: string;\n      userAgent?: string;\n    };\n    mutate: AuthDomainMutate;\n    requireSession: (\n      request: Request,\n      stores: AthenaAuthStores\n    ) => Promise<{ user: AuthUserRow }>;\n    stores: AthenaAuthStores;\n    traceId: string;\n  }\n): Promise<Response | null> {\n  if (path === \"/email/list\" && method === \"GET\") {\n    const { user } = await ctx.requireSession(request, ctx.stores);\n    const recipient = (user.email ?? \"\").trim().toLowerCase();\n    const rows = (await ctx.emailStore.listEmails()).filter(\n      (row) => row.recipient_email.trim().toLowerCase() === recipient\n    );\n    return jsonResponse(\n      200,\n      {\n        emails: rows,\n        limit: rows.length,\n        offset: 0,\n        total: rows.length,\n      },\n      ctx.headers\n    );\n  }\n\n  if (path === \"/change-email/verify\" && method === \"GET\") {\n    const token = new URL(request.url).searchParams.get(\"token\")?.trim();\n    if (!token) {\n      throw AthenaAuthRuntimeError.badRequest(\"token is required\");\n    }\n    const target = await resolveChangeEmailTarget(ctx.stores, token);\n    const previousUser = await ctx.stores.getUserById(target.userId);\n    const updated = await ctx.mutate({\n      context: {\n        actor: { kind: \"user\", userId: target.userId },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.email.update\",\n      execute: (scope) => applyChangeEmailToken(scope.stores, token),\n      input: { email: target.email, userId: target.userId },\n      previous: async () => {\n        if (!previousUser) {\n          throw AthenaAuthRuntimeError.notFound(\"User not found\");\n        }\n        return { email: previousUser.email };\n      },\n      resultOf: (row) => ({ user: sanitizeHookUser(row) }),\n    });\n    return jsonResponse(\n      200,\n      { status: true, user: toPublicUser(updated) },\n      ctx.headers\n    );\n  }\n\n  if (path === \"/delete-user/verify\" && method === \"GET\") {\n    const token = new URL(request.url).searchParams.get(\"token\")?.trim();\n    if (!token) {\n      throw AthenaAuthRuntimeError.badRequest(\"token is required\");\n    }\n    const userId = await resolveDeleteUserTarget(ctx.stores, token);\n    const previousUser = await ctx.stores.getUserById(userId);\n    if (!previousUser) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n    await ctx.mutate({\n      context: {\n        actor: { kind: \"user\", userId },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.delete\",\n      execute: (scope) => applyDeleteUserToken(scope.stores, token),\n      input: { userId },\n      previous: async () => ({ user: sanitizeHookUser(previousUser) }),\n      resultOf: () => ({\n        deleted: true as const,\n        id: userId,\n        userId,\n      }),\n    });\n    return jsonResponse(200, { status: true, success: true }, ctx.headers);\n  }\n\n  if (\n    method === \"GET\" &&\n    (path === \"/reset-password/{token}\" || path.startsWith(\"/reset-password/\"))\n  ) {\n    const token = decodeURIComponent(path.slice(\"/reset-password/\".length));\n    if (!token) {\n      throw AthenaAuthRuntimeError.badRequest(\"token is required\");\n    }\n    const verification = await ctx.stores.getVerificationByValue(token);\n    if (!verification) {\n      throw AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n    }\n    const origin = new URL(request.url).origin;\n    const location = `${origin}/reset-password?token=${encodeURIComponent(token)}`;\n    const headers = new Headers(ctx.headers);\n    headers.set(\"location\", location);\n    return new Response(null, {\n      headers,\n      status: 302,\n    });\n  }\n\n  return null;\n}\n\nexport function tokenizedUrl(\n  base: string | undefined,\n  token: string,\n  origin: string,\n  fallbackPath: string,\n  trustedOrigins: readonly string[] = []\n): string {\n  const target = new URL(\n    resolveTrustedCallbackUrl({\n      callbackUrl: base,\n      fallbackPath,\n      requestUrl: origin,\n      trustedOrigins,\n    })\n  );\n  target.searchParams.set(\"token\", token);\n  return target.toString();\n}\n\nexport type MailerEmit = (\n  input: EmitAuthEmailInput\n) => Promise<{ success: boolean }>;\n","import type { AthenaEmailDeliveryPort } from \"../../../email/types.ts\";\nimport { resolveTemplateAttachments } from \"../../email/attachments.ts\";\nimport { resolveEmailBindings } from \"../../email/bindings.ts\";\nimport {\n  ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n  type AthenaAuthEmailAttachmentFailureMode,\n  type AthenaAuthEmailTemplateRow,\n} from \"../../email/contract.ts\";\nimport { authEmailFailureFromDeliveryError } from \"../../email/emit.ts\";\nimport { AthenaAuthEmailError } from \"../../email/errors.ts\";\n\nimport { renderAuthEmailFragment } from \"../../email/renderer.ts\";\nimport { ATHENA_AUTH_MAX_ADMIN_JSON_BYTES } from \"../../limits.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AthenaAuthStores } from \"../memory-stores.ts\";\nimport {\n  asStringField,\n  readJsonBody,\n  requireStringField,\n} from \"../security.ts\";\nimport type { AthenaAuthEmailStore } from \"./store.ts\";\n\nexport interface AdminEmailRouteContext {\n  delivery?: AthenaEmailDeliveryPort;\n  emailStore: AthenaAuthEmailStore;\n  headers: Headers;\n  requireSession: (\n    request: Request,\n    stores: AthenaAuthStores\n  ) => Promise<{ user: { role: string | null } }>;\n  stores: AthenaAuthStores;\n}\n\nfunction pickRequired(\n  body: Record<string, unknown>,\n  ...keys: string[]\n): string {\n  for (const key of keys) {\n    const value = asStringField(body, key)?.trim();\n    if (value) {\n      return value;\n    }\n  }\n  throw AthenaAuthRuntimeError.badRequest(`${keys[0]} is required`);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n  return value && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\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\nfunction parseAttachments(\n  value: unknown\n): AthenaAuthEmailTemplateRow[\"attachments\"] {\n  if (!value) {\n    return [];\n  }\n  const items = Array.isArray(value) ? value : [value];\n  return items.flatMap((item) => {\n    if (typeof item === \"string\" && item.trim()) {\n      return [{ file_url: item.trim() }];\n    }\n    const record = asRecord(item);\n    const fileUrl =\n      asStringField(record, \"file_url\") ?? asStringField(record, \"fileUrl\");\n    if (!fileUrl) {\n      return [];\n    }\n    const filename = asStringField(record, \"filename\") ?? undefined;\n    return [{ file_url: fileUrl, filename }];\n  });\n}\n\nfunction parseBindings(\n  value: unknown\n): AthenaAuthEmailTemplateRow[\"variable_bindings\"] {\n  if (!Array.isArray(value)) {\n    return [];\n  }\n  return value.flatMap((item) => {\n    const record = asRecord(item);\n    const name = asStringField(record, \"name\");\n    const source = asStringField(record, \"source\");\n    if (!(name && source)) {\n      return [];\n    }\n    return [\n      {\n        name,\n        required: record.required === true,\n        source,\n      },\n    ];\n  });\n}\n\nfunction parseFailureMode(\n  value: unknown\n): AthenaAuthEmailAttachmentFailureMode {\n  return value === \"skip\" ? \"skip\" : \"fail\";\n}\n\nfunction nowIso(): string {\n  return new Date().toISOString();\n}\n\nasync function requireAdmin(\n  request: Request,\n  ctx: AdminEmailRouteContext\n): Promise<void> {\n  const resolved = await ctx.requireSession(request, ctx.stores);\n  const role = resolved.user.role;\n  if (role !== \"admin\" && role !== \"owner\") {\n    throw AthenaAuthRuntimeError.forbidden();\n  }\n}\n\nfunction templatePayload(\n  body: Record<string, unknown>\n): Omit<AthenaAuthEmailTemplateRow, \"created_at\" | \"id\" | \"updated_at\"> {\n  const templateKey =\n    asStringField(body, \"template_key\") ?? asStringField(body, \"templateKey\");\n  const subject =\n    asStringField(body, \"subject_template\") ??\n    asStringField(body, \"subjectTemplate\");\n  if (!(templateKey && subject)) {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"template_key and subject_template are required\"\n    );\n  }\n  return {\n    attachment_failure_mode: parseFailureMode(\n      body.attachment_failure_mode ?? body.attachmentFailureMode\n    ),\n    attachments: parseAttachments(body.attachments),\n    event_type:\n      asStringField(body, \"event_type\") ??\n      asStringField(body, \"eventType\") ??\n      null,\n    html_template:\n      asStringField(body, \"html_template\") ??\n      asStringField(body, \"htmlTemplate\") ??\n      null,\n    is_active: !(body.is_active === false || body.isActive === false),\n    locale: asStringField(body, \"locale\") ?? \"en\",\n    metadata: asRecord(body.metadata),\n    subject_template: subject,\n    template_key: templateKey,\n    text_template:\n      asStringField(body, \"text_template\") ??\n      asStringField(body, \"textTemplate\") ??\n      null,\n    variable_bindings: parseBindings(\n      body.variable_bindings ?? body.variableBindings\n    ),\n    variables: asStringArray(body.variables),\n  };\n}\n\nexport async function handleAdminEmailRoutes(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: AdminEmailRouteContext\n): Promise<Response | null> {\n  if (!path.startsWith(\"/admin/email\")) {\n    return null;\n  }\n  await requireAdmin(request, ctx);\n  const url = new URL(request.url);\n\n  if (path === \"/admin/email-event-type/list\" && method === \"GET\") {\n    const category = url.searchParams.get(\"category\") ?? undefined;\n    const rows = (await ctx.emailStore.listEventTypes()).filter(\n      (entry) => !category || entry.category === category\n    );\n    return jsonResponse(\n      200,\n      {\n        emailEventTypes: rows,\n        event_types: rows,\n        limit: rows.length,\n        total: rows.length,\n      },\n      ctx.headers\n    );\n  }\n\n  if (path === \"/admin/email-template/list\" && method === \"GET\") {\n    const isActive =\n      url.searchParams.get(\"is_active\") ?? url.searchParams.get(\"isActive\");\n    const rows = await ctx.emailStore.listTemplates({\n      event_type:\n        url.searchParams.get(\"event_type\") ??\n        url.searchParams.get(\"eventType\") ??\n        undefined,\n      is_active: isActive === null ? undefined : isActive === \"true\",\n      locale: url.searchParams.get(\"locale\") ?? undefined,\n      template_key:\n        url.searchParams.get(\"template_key\") ??\n        url.searchParams.get(\"templateKey\") ??\n        undefined,\n    });\n    return jsonResponse(\n      200,\n      {\n        email_templates: rows,\n        limit: rows.length,\n        offset: 0,\n        total: rows.length,\n      },\n      ctx.headers\n    );\n  }\n\n  if (path === \"/admin/email-template/get\" && method === \"GET\") {\n    const id = url.searchParams.get(\"id\");\n    if (!id) {\n      throw AthenaAuthRuntimeError.badRequest(\"id is required\");\n    }\n    const row = await ctx.emailStore.getTemplate(id);\n    if (!row) {\n      throw AthenaAuthRuntimeError.notFound(\"Email template not found\");\n    }\n    return jsonResponse(200, { email_template: row }, ctx.headers);\n  }\n\n  if (path === \"/admin/email-template/create\" && method === \"POST\") {\n    const body = asRecord(\n      await readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES)\n    );\n    const stamp = nowIso();\n    const row = await ctx.emailStore.createTemplate({\n      ...templatePayload(body),\n      created_at: stamp,\n      id: crypto.randomUUID(),\n      updated_at: stamp,\n    });\n    return jsonResponse(200, row, ctx.headers);\n  }\n\n  if (path === \"/admin/email-template/update\" && method === \"POST\") {\n    const body = asRecord(\n      await readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES)\n    );\n    const id = requireStringField(body, \"id\");\n    const existing = await ctx.emailStore.getTemplate(id);\n    if (!existing) {\n      throw AthenaAuthRuntimeError.notFound(\"Email template not found\");\n    }\n    const next = await ctx.emailStore.updateTemplate(\n      id,\n      templatePayload({\n        ...existing,\n        ...body,\n        subject_template:\n          asStringField(body, \"subject_template\") ??\n          asStringField(body, \"subjectTemplate\") ??\n          existing.subject_template,\n        template_key:\n          asStringField(body, \"template_key\") ??\n          asStringField(body, \"templateKey\") ??\n          existing.template_key,\n      })\n    );\n    return jsonResponse(200, next, ctx.headers);\n  }\n\n  if (path === \"/admin/email-template/delete\" && method === \"POST\") {\n    const body = asRecord(\n      await readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES)\n    );\n    const id = requireStringField(body, \"id\");\n    const deleted = await ctx.emailStore.deleteTemplate(id);\n    if (!deleted) {\n      throw AthenaAuthRuntimeError.notFound(\"Email template not found\");\n    }\n    return jsonResponse(200, { success: true }, ctx.headers);\n  }\n\n  if (path === \"/admin/email-template/send\" && method === \"POST\") {\n    return sendStoredTemplate(request, ctx);\n  }\n\n  if (path === \"/admin/email-failure/list\" && method === \"GET\") {\n    const rows = await ctx.emailStore.listFailures();\n    return jsonResponse(\n      200,\n      {\n        email_send_failures: rows,\n        emailSendFailures: rows,\n        total: rows.length,\n      },\n      ctx.headers\n    );\n  }\n\n  if (path === \"/admin/email-failure/get\" && method === \"GET\") {\n    const id = url.searchParams.get(\"id\");\n    if (!id) {\n      throw AthenaAuthRuntimeError.badRequest(\"id is required\");\n    }\n    const row = await ctx.emailStore.getFailure(id);\n    if (!row) {\n      throw AthenaAuthRuntimeError.notFound(\"Email failure not found\");\n    }\n    return jsonResponse(200, { email_send_failure: row }, ctx.headers);\n  }\n\n  if (path === \"/admin/email-failure/create\" && method === \"POST\") {\n    const body = asRecord(\n      await readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES)\n    );\n    const stamp = nowIso();\n    const row = await ctx.emailStore.createFailure({\n      created_at: stamp,\n      error_message: pickRequired(body, \"error_message\", \"errorMessage\"),\n      flow: asStringField(body, \"flow\") ?? \"admin.email_failure.create\",\n      id: crypto.randomUUID(),\n      metadata: asRecord(body.metadata),\n      recipient_email: pickRequired(body, \"recipient_email\", \"recipientEmail\"),\n      resolved: false,\n      updated_at: stamp,\n    });\n    return jsonResponse(200, row, ctx.headers);\n  }\n\n  if (path === \"/admin/email-failure/update\" && method === \"POST\") {\n    const body = asRecord(\n      await readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES)\n    );\n    const id = requireStringField(body, \"id\");\n    const next = await ctx.emailStore.updateFailure(id, {\n      resolution_note:\n        asStringField(body, \"resolution_note\") ??\n        asStringField(body, \"resolutionNote\"),\n      resolved: typeof body.resolved === \"boolean\" ? body.resolved : undefined,\n    });\n    if (!next) {\n      throw AthenaAuthRuntimeError.notFound(\"Email failure not found\");\n    }\n    return jsonResponse(200, next, ctx.headers);\n  }\n\n  if (path === \"/admin/email-failure/delete\" && method === \"POST\") {\n    const body = asRecord(\n      await readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES)\n    );\n    const deleted = await ctx.emailStore.deleteFailure(\n      requireStringField(body, \"id\")\n    );\n    if (!deleted) {\n      throw AthenaAuthRuntimeError.notFound(\"Email failure not found\");\n    }\n    return jsonResponse(200, { success: true }, ctx.headers);\n  }\n\n  if (path === \"/admin/email/list\" && method === \"GET\") {\n    const rows = await ctx.emailStore.listEmails();\n    return jsonResponse(200, { emails: rows, total: rows.length }, ctx.headers);\n  }\n\n  if (path === \"/admin/email/get\" && method === \"GET\") {\n    const id = url.searchParams.get(\"id\");\n    if (!id) {\n      throw AthenaAuthRuntimeError.badRequest(\"id is required\");\n    }\n    const row = await ctx.emailStore.getEmail(id);\n    if (!row) {\n      throw AthenaAuthRuntimeError.notFound(\"Email not found\");\n    }\n    return jsonResponse(200, { email: row }, ctx.headers);\n  }\n\n  if (path === \"/admin/email/create\" && method === \"POST\") {\n    const body = asRecord(\n      await readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES)\n    );\n    const stamp = nowIso();\n    const row = await ctx.emailStore.createEmail({\n      created_at: stamp,\n      flow: asStringField(body, \"flow\") ?? null,\n      from_address:\n        asStringField(body, \"from_address\") ??\n        asStringField(body, \"fromAddress\") ??\n        \"athena@localhost\",\n      from_name:\n        asStringField(body, \"from_name\") ??\n        asStringField(body, \"fromName\") ??\n        null,\n      html_body:\n        asStringField(body, \"html_body\") ??\n        asStringField(body, \"htmlBody\") ??\n        null,\n      id: crypto.randomUUID(),\n      metadata: asRecord(body.metadata),\n      provider: asStringField(body, \"provider\") ?? \"unknown\",\n      recipient_email: pickRequired(body, \"recipient_email\", \"recipientEmail\"),\n      subject: requireStringField(body, \"subject\"),\n      text_body:\n        asStringField(body, \"text_body\") ??\n        asStringField(body, \"textBody\") ??\n        null,\n      updated_at: stamp,\n    });\n    return jsonResponse(200, row, ctx.headers);\n  }\n\n  if (path === \"/admin/email/update\" && method === \"POST\") {\n    const body = asRecord(\n      await readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES)\n    );\n    const next = await ctx.emailStore.updateEmail(\n      requireStringField(body, \"id\"),\n      {\n        subject: asStringField(body, \"subject\") ?? undefined,\n      }\n    );\n    if (!next) {\n      throw AthenaAuthRuntimeError.notFound(\"Email not found\");\n    }\n    return jsonResponse(200, next, ctx.headers);\n  }\n\n  if (path === \"/admin/email/delete\" && method === \"POST\") {\n    const body = asRecord(\n      await readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES)\n    );\n    const deleted = await ctx.emailStore.deleteEmail(\n      requireStringField(body, \"id\")\n    );\n    if (!deleted) {\n      throw AthenaAuthRuntimeError.notFound(\"Email not found\");\n    }\n    return jsonResponse(200, { success: true }, ctx.headers);\n  }\n\n  return null;\n}\n\nasync function persistFailure(\n  ctx: AdminEmailRouteContext,\n  input: {\n    errorCode?: string;\n    errorMessage: string;\n    recipientEmail: string;\n    templateId?: string | null;\n    templateKey?: string | null;\n  }\n) {\n  const stamp = nowIso();\n  return ctx.emailStore.createFailure({\n    created_at: stamp,\n    error_code: input.errorCode,\n    error_message: input.errorMessage,\n    flow: \"admin.email_template.send\",\n    id: crypto.randomUUID(),\n    metadata: {},\n    recipient_email: input.recipientEmail,\n    resolved: false,\n    template_id: input.templateId,\n    template_key: input.templateKey,\n    updated_at: stamp,\n  });\n}\n\nasync function sendStoredTemplate(\n  request: Request,\n  ctx: AdminEmailRouteContext\n): Promise<Response> {\n  const body = asRecord(\n    await readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES)\n  );\n  const templateId = pickRequired(body, \"template_id\", \"templateId\");\n  const recipientEmail = pickRequired(\n    body,\n    \"recipient_email\",\n    \"recipientEmail\"\n  );\n  const template = await ctx.emailStore.getTemplate(templateId);\n  if (!template) {\n    throw AthenaAuthRuntimeError.notFound(\"Email template not found\");\n  }\n  if (!template.is_active) {\n    throw AthenaAuthRuntimeError.badRequest(\"Email template is inactive\");\n  }\n\n  const renderVariables = asRecord(\n    body.render_variables ?? body.renderVariables\n  );\n  const explicit: Record<string, string> = {};\n  for (const [key, value] of Object.entries(renderVariables)) {\n    if (typeof value === \"string\") {\n      explicit[key] = value;\n    }\n  }\n\n  let variables: Record<string, string>;\n  let attachments: ReturnType<typeof parseAttachments>;\n  const attachmentFailureMode = parseFailureMode(\n    body.attachment_failure_mode ??\n      body.attachmentFailureMode ??\n      template.attachment_failure_mode\n  );\n  try {\n    variables = await resolveEmailBindings(\n      ctx.stores,\n      template.variable_bindings,\n      explicit,\n      {\n        organizationId:\n          asStringField(body, \"organization_id\") ??\n          asStringField(body, \"organizationId\") ??\n          undefined,\n        sessionToken:\n          asStringField(body, \"session_token\") ??\n          asStringField(body, \"sessionToken\") ??\n          undefined,\n        userId:\n          asStringField(body, \"user_id\") ??\n          asStringField(body, \"userId\") ??\n          undefined,\n      }\n    );\n    attachments = resolveTemplateAttachments(\n      [...template.attachments, ...parseAttachments(body.attachments)],\n      attachmentFailureMode\n    );\n  } catch (error) {\n    if (error instanceof AthenaAuthEmailError) {\n      throw new AthenaAuthRuntimeError(error.status, error.message);\n    }\n    throw error;\n  }\n\n  const subject = renderAuthEmailFragment(template.subject_template, variables);\n  const html = template.html_template\n    ? renderAuthEmailFragment(template.html_template, variables)\n    : undefined;\n  const text = template.text_template\n    ? renderAuthEmailFragment(template.text_template, variables)\n    : undefined;\n\n  if (!ctx.delivery) {\n    const failure = await persistFailure(ctx, {\n      errorCode: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n      errorMessage: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n      recipientEmail,\n      templateId: template.id,\n      templateKey: template.template_key,\n    });\n    return jsonResponse(\n      503,\n      {\n        email_send_failure_id: failure.id,\n        error: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n        event_type: template.event_type,\n        flow: \"admin.email_template.send\",\n        recipient_email: recipientEmail,\n        subject,\n        success: false,\n        template_id: template.id,\n        template_key: template.template_key,\n      },\n      ctx.headers\n    );\n  }\n\n  const stamp = nowIso();\n  const emailId = crypto.randomUUID();\n  await ctx.emailStore.createEmail({\n    created_at: stamp,\n    flow: \"admin.email_template.send\",\n    from_address: \"athena@localhost\",\n    from_name: null,\n    html_body: html ?? null,\n    id: emailId,\n    metadata: {\n      event_type: template.event_type,\n      template_key: template.template_key,\n    },\n    provider: \"pending\",\n    recipient_email: recipientEmail,\n    subject,\n    text_body: text ?? null,\n    updated_at: stamp,\n  });\n\n  try {\n    const result = await ctx.delivery.send({\n      attachmentFailureMode,\n      attachments: attachments.map((attachment) => ({\n        filename: attachment.filename,\n        fileUrl: attachment.file_url,\n      })),\n      html,\n      metadata: {\n        event_type: template.event_type,\n        flow: \"admin.email_template.send\",\n        template_id: template.id,\n        template_key: template.template_key,\n      },\n      subject,\n      text,\n      to: recipientEmail,\n    });\n    if (!result.success) {\n      await ctx.emailStore.deleteEmail(emailId);\n      const failure = await persistFailure(ctx, {\n        errorCode: \"ATHENA_EMAIL_DELIVERY_FAILED\",\n        errorMessage: \"Email delivery failed\",\n        recipientEmail,\n        templateId: template.id,\n        templateKey: template.template_key,\n      });\n      return jsonResponse(\n        503,\n        {\n          email_send_failure_id: failure.id,\n          error: \"ATHENA_EMAIL_DELIVERY_FAILED\",\n          event_type: template.event_type,\n          flow: \"admin.email_template.send\",\n          recipient_email: recipientEmail,\n          subject,\n          success: false,\n          template_id: template.id,\n          template_key: template.template_key,\n        },\n        ctx.headers\n      );\n    }\n    try {\n      await ctx.emailStore.updateEmail(emailId, {\n        from_address: result.from ?? \"athena@localhost\",\n        from_name: result.fromName ?? null,\n        provider: result.provider,\n        updated_at: nowIso(),\n      });\n    } catch {\n      // Delivery already succeeded; audit persistence must not rewrite it.\n    }\n    return jsonResponse(\n      200,\n      {\n        attachment_count: attachments.length,\n        event_type: template.event_type,\n        flow: \"admin.email_template.send\",\n        recipient_email: recipientEmail,\n        subject,\n        success: true,\n        template_id: template.id,\n        template_key: template.template_key,\n      },\n      ctx.headers\n    );\n  } catch (error) {\n    await ctx.emailStore.deleteEmail(emailId);\n    const mapped = authEmailFailureFromDeliveryError(error);\n    const failure = await persistFailure(ctx, {\n      errorCode: mapped.errorCode,\n      errorMessage: mapped.errorMessage,\n      recipientEmail,\n      templateId: template.id,\n      templateKey: template.template_key,\n    });\n    return jsonResponse(\n      503,\n      {\n        email_send_failure_id: failure.id,\n        error: mapped.errorCode,\n        event_type: template.event_type,\n        flow: \"admin.email_template.send\",\n        recipient_email: recipientEmail,\n        subject,\n        success: false,\n        template_id: template.id,\n        template_key: template.template_key,\n      },\n      ctx.headers\n    );\n  }\n}\n","import { isBlockedIpv4, parseIpv4 } from \"../../email/blocked-ip.ts\";\nimport type { AthenaAuthEmailTemplateAttachment } from \"../types.ts\";\nimport type { AthenaAuthEmailAttachmentFailureMode } from \"./contract.ts\";\nimport { AthenaAuthEmailError } from \"./errors.ts\";\n\nconst PRIVATE_HOSTS = new Set([\"localhost\", \"metadata.google.internal\"]);\n\nfunction isNonGlobalIpv4(host: string): boolean {\n  const octets = parseIpv4(host);\n  return octets !== null && isBlockedIpv4(octets);\n}\n\nexport function validateAttachmentTarget(fileUrl: string): void {\n  let parsed: URL;\n  try {\n    parsed = new URL(fileUrl);\n  } catch {\n    throw AthenaAuthEmailError.badRequest(\"attachment URL is invalid\");\n  }\n  if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n    throw AthenaAuthEmailError.badRequest(\n      \"attachment URL must use http or https\"\n    );\n  }\n  const host = parsed.hostname.toLowerCase();\n  if (\n    PRIVATE_HOSTS.has(host) ||\n    host.endsWith(\".localhost\") ||\n    host === \"::1\" ||\n    host === \"[::1]\" ||\n    isNonGlobalIpv4(host)\n  ) {\n    throw AthenaAuthEmailError.badRequest(\n      \"attachment URL resolved to a non-public IP address\"\n    );\n  }\n}\n\nexport function resolveTemplateAttachments(\n  attachments: AthenaAuthEmailTemplateAttachment[],\n  mode: AthenaAuthEmailAttachmentFailureMode\n): AthenaAuthEmailTemplateAttachment[] {\n  const resolved: AthenaAuthEmailTemplateAttachment[] = [];\n  for (const attachment of attachments) {\n    try {\n      validateAttachmentTarget(attachment.file_url);\n      resolved.push(attachment);\n    } catch (error) {\n      if (mode === \"skip\") {\n        continue;\n      }\n      throw error;\n    }\n  }\n  return resolved;\n}\n","/**\n * Attachment SSRF: block IPv4 addresses that IANA does not classify as\n * globally reachable (RFC 6890 Special-Purpose Address Registry).\n *\n * Allowlisting “private + loopback + multicast” is not enough: documentation\n * prefixes such as 203.0.113.0/24 (TEST-NET-3) are omitted by that subset and\n * are still routed in some environments.\n */\n\nexport function parseIpv4(\n  value: string\n): [number, number, number, number] | null {\n  const match = /^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/.exec(value);\n  if (!match) {\n    return null;\n  }\n  const octets = match.slice(1).map(Number) as [number, number, number, number];\n  if (octets.some((octet) => octet > 255)) {\n    return null;\n  }\n  return octets;\n}\n\nexport function isBlockedIpv4(\n  octets: [number, number, number, number]\n): boolean {\n  const [a, b, c, d] = octets;\n  if (a === 0 || a === 10 || a === 127) {\n    return true;\n  }\n  // 100.64.0.0/10 shared address space (CGNAT).\n  if (a === 100 && (b & 0xc0) === 64) {\n    return true;\n  }\n  if (a === 169 && b === 254) {\n    return true;\n  }\n  // 172.16.0.0/12 private.\n  if (a === 172 && (b & 0xf0) === 16) {\n    return true;\n  }\n  // 192.0.0.0/24 IETF Protocol Assignments. 192.0.0.9 / .10 are globally reachable anycast.\n  if (a === 192 && b === 0 && c === 0 && d !== 9 && d !== 10) {\n    return true;\n  }\n  // 192.0.2.0/24 TEST-NET-1.\n  if (a === 192 && b === 0 && c === 2) {\n    return true;\n  }\n  // 192.88.99.0/24 6to4 relay anycast (deprecated; not globally reachable).\n  if (a === 192 && b === 88 && c === 99) {\n    return true;\n  }\n  if (a === 192 && b === 168) {\n    return true;\n  }\n  // 198.18.0.0/15 benchmarking.\n  if (a === 198 && (b & 0xfe) === 18) {\n    return true;\n  }\n  // 198.51.100.0/24 TEST-NET-2.\n  if (a === 198 && b === 51 && c === 100) {\n    return true;\n  }\n  // 203.0.113.0/24 TEST-NET-3.\n  if (a === 203 && b === 0 && c === 113) {\n    return true;\n  }\n  // 224.0.0.0/4 multicast and 240.0.0.0/4 reserved.\n  if (a >= 224) {\n    return true;\n  }\n  return false;\n}\n","import type { AthenaAuthStores } from \"../local/memory-stores.ts\";\nimport { AthenaAuthEmailError } from \"./errors.ts\";\n\nexport interface AthenaAuthEmailVariableBinding {\n  name: string;\n  required?: boolean;\n  source: string;\n}\n\nexport interface AthenaAuthEmailRenderAnchors {\n  organizationId?: string;\n  sessionToken?: string;\n  userId?: string;\n}\n\nfunction parseSourceAddress(source: string): [string, string, string] {\n  const parts = source.split(\".\").map((part) => part.trim());\n  if (parts.length !== 3 || parts.some((part) => part.length === 0)) {\n    throw AthenaAuthEmailError.badRequest(\n      `variable binding source '${source}' must use schema.table.column format`\n    );\n  }\n  return [parts[0] as string, parts[1] as string, parts[2] as string];\n}\n\nfunction columnValue(\n  record: Record<string, unknown> | undefined,\n  column: string\n): string | undefined {\n  if (!record) {\n    return;\n  }\n  const value = record[column];\n  if (value === undefined || value === null) {\n    return;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (typeof value === \"number\" || typeof value === \"boolean\") {\n    return String(value);\n  }\n  return JSON.stringify(value);\n}\n\nexport async function resolveEmailBindings(\n  stores: AthenaAuthStores,\n  bindings: AthenaAuthEmailVariableBinding[],\n  explicit: Record<string, string>,\n  anchors: AthenaAuthEmailRenderAnchors\n): Promise<Record<string, string>> {\n  const variables = { ...explicit };\n  let userId = anchors.userId;\n  let organizationId = anchors.organizationId;\n\n  if (!(userId && organizationId) && anchors.sessionToken) {\n    const session = await stores.getSessionByToken(anchors.sessionToken);\n    if (session) {\n      userId ??= session.user_id;\n      organizationId ??= session.active_organization_id ?? undefined;\n    }\n  }\n\n  for (const binding of bindings) {\n    const [, table, column] = parseSourceAddress(binding.source);\n    const normalizedTable = table.toLowerCase();\n\n    if (\n      (normalizedTable === \"sessions\" || normalizedTable === \"session\") &&\n      column.toLowerCase() === \"token\"\n    ) {\n      throw AthenaAuthEmailError.badRequest(\n        `variable binding '${binding.name}' may not expose session token values`\n      );\n    }\n\n    let resolved: string | undefined;\n    if (normalizedTable === \"users\" || normalizedTable === \"user\") {\n      if (!userId) {\n        if (binding.required) {\n          throw AthenaAuthEmailError.badRequest(\n            `variable binding '${binding.name}' requires a user_id render anchor`\n          );\n        }\n        continue;\n      }\n      const user = await stores.getUserById(userId);\n      resolved = columnValue(\n        user as unknown as Record<string, unknown>,\n        column\n      );\n    } else if (\n      normalizedTable === \"organizations\" ||\n      normalizedTable === \"organization\"\n    ) {\n      if (!organizationId) {\n        if (binding.required) {\n          throw AthenaAuthEmailError.badRequest(\n            `variable binding '${binding.name}' requires an organization_id render anchor`\n          );\n        }\n        continue;\n      }\n      const organization = await stores.getOrganization(organizationId);\n      resolved = columnValue(\n        organization as unknown as Record<string, unknown> | undefined,\n        column\n      );\n    } else if (\n      normalizedTable === \"sessions\" ||\n      normalizedTable === \"session\"\n    ) {\n      if (!anchors.sessionToken) {\n        if (binding.required) {\n          throw AthenaAuthEmailError.badRequest(\n            `variable binding '${binding.name}' requires a session_token render anchor`\n          );\n        }\n        continue;\n      }\n      const session = await stores.getSessionByToken(anchors.sessionToken);\n      resolved = columnValue(\n        session as unknown as Record<string, unknown> | undefined,\n        column\n      );\n    } else {\n      throw AthenaAuthEmailError.badRequest(\n        `variable binding source '${binding.source}' is not supported by athena-auth email rendering`\n      );\n    }\n\n    if (resolved === undefined) {\n      if (binding.required) {\n        throw AthenaAuthEmailError.badRequest(\n          `required variable binding '${binding.name}' did not resolve a value`\n        );\n      }\n      continue;\n    }\n    if (!(binding.name in variables)) {\n      variables[binding.name] = resolved;\n    }\n  }\n\n  return variables;\n}\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\nimport { rightMatches } from \"../../rights/matching.ts\";\nimport type { AuthBridgeCodeStore } from \"../bridge/store.ts\";\nimport type { NormalizedAthenaAuthConfig } from \"../config.ts\";\nimport { authEmailEvents } from \"../email/index.ts\";\nimport type { AuthDomainMutate } from \"../hooks/execute.ts\";\nimport {\n  sanitizeHookApiKey,\n  sanitizeHookSession,\n  sanitizeHookUser,\n} from \"../hooks/sanitize.ts\";\nimport {\n  type ApiKeyScopeKind,\n  apiKeyScopeKind,\n  bindApiKeyAuthorization,\n  generateApiKey,\n  isApiKeyScopeUsable,\n  isApiKeyUsable,\n  normalizeApiKeyPrefix,\n  parseApiKeyLifetime,\n  parseApiKeyPermissionKeys,\n  parseApiKeyRemaining,\n  sha256Base64Url,\n  toPublicApiKey,\n} from \"./api-key.ts\";\nimport { buildSnapshot } from \"./authorization-routes.ts\";\nimport { revokeAuthBridgeCodesForSessions } from \"./bridge/revoke.ts\";\nimport {\n  createClearSessionCookieHeader,\n  readBearerToken,\n  shouldSetSecureCookie,\n} from \"./cookies.ts\";\nimport {\n  applyChangeEmailToken,\n  type MailerEmit,\n  resolveChangeEmailTarget,\n  tokenizedUrl,\n} from \"./email/user-routes.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"./errors.ts\";\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\nimport { toPublicUser } from \"./models.ts\";\nimport type { AthenaAuthPasswordHasher } from \"./password.ts\";\nimport { extractPasswordHash } from \"./password.ts\";\nimport {\n  asStringField,\n  type OtpRateLimiter,\n  readJsonBody,\n  requireStringField,\n} from \"./security.ts\";\nimport type { AuthApiKeyRow } from \"./stores.ts\";\nimport {\n  buildTotpUri,\n  decodeBase32,\n  generateTotpSecret,\n  verifyTotpCode,\n} from \"./totp.ts\";\n\nexport interface ExtendedRouteContext {\n  config: NormalizedAthenaAuthConfig;\n  emitMail?: MailerEmit;\n  getBridgeCodeStore?: () => AuthBridgeCodeStore;\n  hasher: AthenaAuthPasswordHasher;\n  headers: Headers;\n  hookRequest: (\n    request: Request,\n    path: string\n  ) => {\n    ipAddress?: string;\n    method: string;\n    path: string;\n    userAgent?: string;\n  };\n  issueSession: (\n    request: Request,\n    stores: AthenaAuthStores,\n    userId: string,\n    headers: Headers,\n    authentication: import(\"./authentication-context.ts\").IssueSessionAuthentication\n  ) => Promise<AuthSessionRow>;\n  mutate: AuthDomainMutate;\n  otpRateLimiter: OtpRateLimiter;\n  otpVerificationRateLimiter: OtpRateLimiter;\n  requireSession: (\n    request: Request,\n    stores: AthenaAuthStores\n  ) => Promise<{ session: AuthSessionRow; token: string; user: AuthUserRow }>;\n  stores: AthenaAuthStores;\n  traceId: string;\n}\n\nasync function requirePassword(\n  user: AuthUserRow,\n  password: string,\n  hasher: AthenaAuthPasswordHasher\n): Promise<void> {\n  const storedHash = extractPasswordHash(user.metadata);\n  if (!(storedHash && (await hasher.verify(password, storedHash)))) {\n    throw AthenaAuthRuntimeError.invalidCredentials();\n  }\n}\n\nfunction generateBackupCodes(): string[] {\n  return Array.from({ length: 10 }, () =>\n    Buffer.from(crypto.getRandomValues(new Uint8Array(5)))\n      .toString(\"hex\")\n      .slice(0, 8)\n      .toUpperCase()\n  );\n}\n\nasync function hashBackupCodes(\n  codes: string[],\n  hasher: AthenaAuthPasswordHasher\n): Promise<string> {\n  const hashed = [];\n  for (const code of codes) {\n    hashed.push(await hasher.hash(code));\n  }\n  return JSON.stringify(hashed);\n}\n\nexport async function handleExtendedRoute(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: ExtendedRouteContext\n): Promise<Response | undefined> {\n  const { config, hasher, headers, stores } = ctx;\n\n  if (path === \"/send-verification-email\" && method === \"POST\") {\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const email = requireStringField(body, \"email\");\n    const user = await stores.getUserByEmail(email);\n    if (!user) {\n      throw AthenaAuthRuntimeError.notFound(\n        \"No user found with this email address\"\n      );\n    }\n    if (user.email_verified) {\n      throw AthenaAuthRuntimeError.badRequest(\"Email is already verified\");\n    }\n    const token = `verify_${crypto.randomUUID()}`;\n    await stores.createVerification({\n      expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),\n      id: crypto.randomUUID(),\n      identifier: email,\n      value: token,\n    });\n    const callbackURL = asStringField(body, \"callbackURL\");\n    const origin = new URL(request.url).origin;\n    const verificationUrl = tokenizedUrl(\n      callbackURL,\n      token,\n      origin,\n      `${config.basePath || \"\"}/verify-email`,\n      config.security.trustedOrigins\n    );\n    await ctx.emitMail?.({\n      data: {\n        legacy_hook_url: callbackURL ? verificationUrl : token,\n        verification_url: verificationUrl,\n      },\n      eventType: authEmailEvents.user.email.verify,\n      recipient: email,\n    });\n    return jsonResponse(200, { status: true }, headers);\n  }\n\n  if (path === \"/verify-email\" && method === \"GET\") {\n    const token = new URL(request.url).searchParams.get(\"token\")?.trim();\n    if (!token) {\n      throw AthenaAuthRuntimeError.badRequest(\"token is required\");\n    }\n    const verification = await stores.getVerificationByValue(token);\n    if (!verification) {\n      throw AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n    }\n    const user = await stores.getUserByEmail(verification.identifier);\n    if (!user) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n    const updated = await ctx.mutate({\n      context: {\n        actor: { kind: \"user\", userId: user.id },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.email.verify\",\n      execute: async (scope) => {\n        const consumed = await scope.stores.consumeVerification(token);\n        if (!consumed) {\n          throw AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n        }\n        return scope.stores.updateUser(user.id, { emailVerified: true });\n      },\n      input: { userId: user.id },\n      previous: async () => ({ emailVerified: Boolean(user.email_verified) }),\n      resultOf: (row) => ({ user: sanitizeHookUser(row) }),\n    });\n    return jsonResponse(\n      200,\n      { status: true, user: toPublicUser(updated) },\n      headers\n    );\n  }\n\n  if (path === \"/change-email\" && method === \"POST\") {\n    const resolved = await ctx.requireSession(request, stores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const newEmail = requireStringField(body, \"newEmail\");\n    if (await stores.getUserByEmail(newEmail)) {\n      throw AthenaAuthRuntimeError.conflict(\n        \"A user with this email already exists\"\n      );\n    }\n    const token = `change_${crypto.randomUUID()}`;\n    await stores.createVerification({\n      expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),\n      id: crypto.randomUUID(),\n      identifier: `change-email:${resolved.user.id}:${newEmail}`,\n      value: token,\n    });\n    const origin = new URL(request.url).origin;\n    const verificationUrl = tokenizedUrl(\n      asStringField(body, \"callbackURL\"),\n      token,\n      origin,\n      `${config.basePath || \"\"}/change-email/verify`,\n      config.security.trustedOrigins\n    );\n    await ctx.emitMail?.({\n      data: {\n        legacy_hook_url: asStringField(body, \"callbackURL\")\n          ? verificationUrl\n          : token,\n        verification_url: verificationUrl,\n      },\n      eventType: authEmailEvents.user.email.changeConfirmation,\n      recipient: newEmail,\n    });\n    return jsonResponse(200, { status: true }, headers);\n  }\n\n  if (path === \"/change-email/verify\" && method === \"POST\") {\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const token = requireStringField(body, \"token\");\n    const target = await resolveChangeEmailTarget(stores, token);\n    const previousUser = await stores.getUserById(target.userId);\n    const updated = await ctx.mutate({\n      context: {\n        actor: { kind: \"user\", userId: target.userId },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.email.update\",\n      execute: (scope) => applyChangeEmailToken(scope.stores, token),\n      input: { email: target.email, userId: target.userId },\n      previous: async () => {\n        if (!previousUser) {\n          throw AthenaAuthRuntimeError.notFound(\"User not found\");\n        }\n        return { email: previousUser.email };\n      },\n      resultOf: (row) => ({ user: sanitizeHookUser(row) }),\n    });\n    return jsonResponse(\n      200,\n      { status: true, user: toPublicUser(updated) },\n      headers\n    );\n  }\n\n  if (path === \"/delete-user\" && method === \"POST\") {\n    const resolved = await ctx.requireSession(request, stores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const password = asStringField(body, \"password\");\n    if (password) {\n      await requirePassword(resolved.user, password, hasher);\n    } else if (resolved.user.email) {\n      const token = `delete_${crypto.randomUUID()}`;\n      await stores.createVerification({\n        expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),\n        id: crypto.randomUUID(),\n        identifier: `delete_user:${resolved.user.id}`,\n        value: token,\n      });\n      const origin = new URL(request.url).origin;\n      const verificationUrl = tokenizedUrl(\n        asStringField(body, \"callbackURL\"),\n        token,\n        origin,\n        `${config.basePath || \"\"}/delete-user/verify`,\n        config.security.trustedOrigins\n      );\n      await ctx.emitMail?.({\n        data: { verification_url: verificationUrl },\n        eventType: authEmailEvents.user.account.deletionConfirmation,\n        recipient: resolved.user.email,\n      });\n      return jsonResponse(200, { status: true }, headers);\n    }\n    await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"user.delete\",\n      execute: async (scope) => {\n        const sessions = await scope.stores.listUserSessions(resolved.user.id);\n        const bridgeStore = ctx.getBridgeCodeStore?.();\n        if (bridgeStore) {\n          await revokeAuthBridgeCodesForSessions(\n            bridgeStore,\n            sessions.map((session) => session.id)\n          );\n        }\n        await scope.stores.deleteUser(resolved.user.id);\n      },\n      input: { userId: resolved.user.id },\n      previous: async () => ({ user: sanitizeHookUser(resolved.user) }),\n      resultOf: () => ({\n        deleted: true as const,\n        id: resolved.user.id,\n        userId: resolved.user.id,\n      }),\n    });\n    headers.append(\n      \"set-cookie\",\n      createClearSessionCookieHeader(\n        config.session.cookieName,\n        shouldSetSecureCookie(request, config.security.cookieSecure)\n      )\n    );\n    return jsonResponse(\n      200,\n      { message: \"User deleted\", success: true },\n      headers\n    );\n  }\n\n  if (path === \"/api-key/create\" && method === \"POST\") {\n    const resolved = await ctx.requireSession(request, stores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const permissions = asStringField(body, \"permissions\");\n    const activeOrganizationId =\n      resolved.session.active_organization_id ?? null;\n    const scopeKind = activeOrganizationId ? \"organization\" : \"platform\";\n    if (permissions) {\n      await validateApiKeyPermissions(\n        stores,\n        resolved.user,\n        permissions,\n        activeOrganizationId,\n        scopeKind\n      );\n    }\n    let prefix: string | undefined;\n    let expiresIn: number | undefined;\n    let remaining: number | undefined;\n    try {\n      prefix = normalizeApiKeyPrefix(body.prefix);\n      expiresIn = parseApiKeyLifetime(body.expiresIn);\n      remaining = parseApiKeyRemaining(body.remaining);\n    } catch (error) {\n      throw AthenaAuthRuntimeError.badRequest(\n        error instanceof Error ? error.message : \"Invalid API key options\"\n      );\n    }\n    const generated = await generateApiKey(prefix);\n    const expiresAt = expiresIn\n      ? new Date(Date.now() + expiresIn * 1000)\n      : null;\n    const created = nowIso();\n    const row: AuthApiKeyRow = {\n      created_at: created,\n      enabled: true,\n      expires_at: expiresAt,\n      id: crypto.randomUUID(),\n      key: generated.hash,\n      last_request: null,\n      metadata: asStringField(body, \"metadata\") ?? null,\n      name: asStringField(body, \"name\") ?? null,\n      organization_id: activeOrganizationId,\n      permissions: permissions ?? null,\n      prefix: prefix ?? null,\n      remaining: remaining ?? null,\n      scope_kind: scopeKind,\n      start: generated.start,\n      updated_at: created,\n      user_id: resolved.user.id,\n    };\n    const stored = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"apiKey.create\",\n      execute: (scope) => scope.stores.createApiKey(row),\n      input: {\n        name: asStringField(body, \"name\") ?? undefined,\n        userId: row.user_id,\n      },\n      resultOf: (created) => ({ apiKey: sanitizeHookApiKey(created) }),\n    });\n    return jsonResponse(\n      200,\n      toPublicApiKey(stored, generated.fullKey),\n      headers\n    );\n  }\n\n  if (path === \"/api-key/list\" && method === \"GET\") {\n    const resolved = await ctx.requireSession(request, stores);\n    const keys = await stores.listApiKeys(resolved.user.id);\n    return jsonResponse(\n      200,\n      {\n        apiKeys: keys.map((key) => {\n          const publicKey = toPublicApiKey(key);\n          publicKey.key = undefined;\n          return publicKey;\n        }),\n      },\n      headers\n    );\n  }\n\n  if (path === \"/api-key/get\" && (method === \"GET\" || method === \"POST\")) {\n    const resolved = await ctx.requireSession(request, stores);\n    const id =\n      method === \"GET\"\n        ? new URL(request.url).searchParams.get(\"id\")\n        : asStringField(\n            await readJsonBody(request, config.security.bodyLimitBytes),\n            \"id\"\n          );\n    if (!id) {\n      throw AthenaAuthRuntimeError.badRequest(\"id is required\");\n    }\n    const key = await stores.getApiKeyById(id);\n    if (!key || key.user_id !== resolved.user.id) {\n      throw AthenaAuthRuntimeError.notFound(\"API key not found\");\n    }\n    const publicKey = toPublicApiKey(key);\n    publicKey.key = undefined;\n    return jsonResponse(200, publicKey, headers);\n  }\n\n  if (path === \"/api-key/delete\" && method === \"POST\") {\n    const resolved = await ctx.requireSession(request, stores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const id = asStringField(body, \"keyId\") ?? requireStringField(body, \"id\");\n    const key = await stores.getApiKeyById(id);\n    if (!key || key.user_id !== resolved.user.id) {\n      throw AthenaAuthRuntimeError.notFound(\"API key not found\");\n    }\n    await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"apiKey.delete\",\n      execute: async (scope) => {\n        await scope.stores.deleteApiKey(id);\n      },\n      input: { id },\n      previous: async () => ({ apiKey: sanitizeHookApiKey(key) }),\n      resultOf: () => ({\n        deleted: true as const,\n        id,\n        userId: key.user_id,\n      }),\n    });\n    return jsonResponse(200, { success: true }, headers);\n  }\n\n  if (path === \"/api-key/verify\" && method === \"POST\") {\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const rawKey = requireStringField(body, \"key\");\n    const hash = await sha256Base64Url(rawKey);\n    const key = await stores.getApiKeyByHash(hash);\n    if (\n      !(key && isApiKeyUsable(key) && (await isApiKeyScopeUsable(key, stores)))\n    ) {\n      return jsonResponse(\n        200,\n        {\n          error: { code: \"INVALID_API_KEY\", message: \"Invalid API key\" },\n          key: null,\n          valid: false,\n        },\n        headers\n      );\n    }\n    const user = await stores.getUserById(key.user_id);\n    let declared: AthenaRightKey[] | undefined;\n    try {\n      declared = key.permissions\n        ? parseApiKeyPermissionKeys(key.permissions)\n        : undefined;\n    } catch {\n      declared = undefined;\n    }\n    const scopeKind = apiKeyScopeKind(key);\n    const ownerAuthorization = user\n      ? await buildSnapshot(stores, {\n          session: {\n            active_organization_id:\n              scopeKind === \"organization\"\n                ? (key.organization_id ?? null)\n                : null,\n          },\n          user,\n        })\n      : undefined;\n    const authorization = ownerAuthorization\n      ? bindApiKeyAuthorization(ownerAuthorization, declared, scopeKind)\n      : undefined;\n    const requestedPermissions = body.permissions;\n    if (requestedPermissions !== undefined) {\n      let requestedPermissionJson: string;\n      if (typeof requestedPermissions === \"string\") {\n        requestedPermissionJson = requestedPermissions;\n      } else if (\n        requestedPermissions &&\n        typeof requestedPermissions === \"object\" &&\n        !Array.isArray(requestedPermissions)\n      ) {\n        requestedPermissionJson = JSON.stringify(requestedPermissions);\n      } else {\n        requestedPermissionJson = \"\";\n      }\n      try {\n        const requested = parseApiKeyPermissionKeys(requestedPermissionJson);\n        if (\n          !authorization ||\n          requested.some(\n            (right) =>\n              !authorization.effectiveRights.some((granted) =>\n                rightMatches(granted, right)\n              )\n          )\n        ) {\n          throw new Error(\"invalid\");\n        }\n      } catch {\n        return jsonResponse(\n          200,\n          {\n            error: { code: \"INVALID_API_KEY\", message: \"Invalid API key\" },\n            key: null,\n            valid: false,\n          },\n          headers\n        );\n      }\n    }\n    if (!(user && authorization)) {\n      return jsonResponse(\n        200,\n        {\n          error: { code: \"INVALID_API_KEY\", message: \"Invalid API key\" },\n          key: null,\n          valid: false,\n        },\n        headers\n      );\n    }\n    const consumed = await stores.consumeApiKey(key.id);\n    if (!consumed) {\n      return jsonResponse(\n        200,\n        {\n          error: { code: \"INVALID_API_KEY\", message: \"Invalid API key\" },\n          key: null,\n          valid: false,\n        },\n        headers\n      );\n    }\n    const publicKey = toPublicApiKey(consumed);\n    publicKey.key = undefined;\n    return jsonResponse(\n      200,\n      { error: null, key: publicKey, valid: true },\n      headers\n    );\n  }\n\n  if (path === \"/api-key/delete-all-expired-api-keys\" && method === \"POST\") {\n    await ctx.requireSession(request, stores);\n    const deleted = await stores.deleteExpiredApiKeys();\n    return jsonResponse(200, { deleted }, headers);\n  }\n\n  if (path === \"/api-key/update\" && method === \"POST\") {\n    const resolved = await ctx.requireSession(request, stores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const id = asStringField(body, \"keyId\") ?? requireStringField(body, \"id\");\n    const key = await stores.getApiKeyById(id);\n    if (!key || key.user_id !== resolved.user.id) {\n      throw AthenaAuthRuntimeError.notFound(\"API key not found\");\n    }\n    const enabledRaw = body.enabled;\n    const permissions = asStringField(body, \"permissions\");\n    if (permissions !== undefined) {\n      const scopeKind = apiKeyScopeKind(key);\n      await validateApiKeyPermissions(\n        stores,\n        resolved.user,\n        permissions,\n        scopeKind === \"organization\" ? (key.organization_id ?? null) : null,\n        scopeKind\n      );\n    }\n    const updated = await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"apiKey.update\",\n      execute: async (scope) => {\n        const next = await scope.stores.updateApiKey(id, {\n          enabled: typeof enabledRaw === \"boolean\" ? enabledRaw : undefined,\n          metadata: asStringField(body, \"metadata\"),\n          name: asStringField(body, \"name\"),\n          permissions,\n        });\n        if (!next) {\n          throw AthenaAuthRuntimeError.notFound(\"API key not found\");\n        }\n        return next;\n      },\n      input: { id, name: asStringField(body, \"name\") },\n      previous: async () => ({ name: key.name }),\n      resultOf: (row) => ({ apiKey: sanitizeHookApiKey(row) }),\n    });\n    if (!updated) {\n      throw AthenaAuthRuntimeError.notFound(\"API key not found\");\n    }\n    const publicKey = toPublicApiKey(updated);\n    publicKey.key = undefined;\n    return jsonResponse(200, publicKey, headers);\n  }\n\n  if (path === \"/two-factor/enable\" && method === \"POST\") {\n    const resolved = await ctx.requireSession(request, stores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    await requirePassword(\n      resolved.user,\n      requireStringField(body, \"password\"),\n      hasher\n    );\n    const secret = generateTotpSecret();\n    const backupCodes = generateBackupCodes();\n    await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"twoFactor.enable\",\n      execute: async (scope) => {\n        await scope.stores.createTwoFactor({\n          backupCodes: await hashBackupCodes(backupCodes, hasher),\n          id: crypto.randomUUID(),\n          secret: secret.encoded,\n          userId: resolved.user.id,\n        });\n        await scope.stores.updateUser(resolved.user.id, {\n          twoFactorEnabled: true,\n        });\n      },\n      input: { userId: resolved.user.id },\n      resultOf: () => ({ userId: resolved.user.id }),\n    });\n    return jsonResponse(\n      200,\n      {\n        backupCodes,\n        totpURI: buildTotpUri({\n          account: resolved.user.email ?? resolved.user.id,\n          issuer: asStringField(body, \"issuer\") ?? \"AthenaAuth\",\n          secret: secret.encoded,\n        }),\n      },\n      headers\n    );\n  }\n\n  if (path === \"/two-factor/get-totp-uri\" && method === \"POST\") {\n    const resolved = await ctx.requireSession(request, stores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    await requirePassword(\n      resolved.user,\n      requireStringField(body, \"password\"),\n      hasher\n    );\n    const record = await stores.getTwoFactorByUserId(resolved.user.id);\n    if (!record) {\n      throw AthenaAuthRuntimeError.notFound(\n        \"Two-factor authentication not enabled\"\n      );\n    }\n    return jsonResponse(\n      200,\n      {\n        totpURI: buildTotpUri({\n          account: resolved.user.email ?? resolved.user.id,\n          secret: record.secret,\n        }),\n      },\n      headers\n    );\n  }\n\n  if (path === \"/two-factor/disable\" && method === \"POST\") {\n    const resolved = await ctx.requireSession(request, stores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    await requirePassword(\n      resolved.user,\n      requireStringField(body, \"password\"),\n      hasher\n    );\n    await ctx.mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"twoFactor.disable\",\n      execute: async (scope) => {\n        await scope.stores.deleteTwoFactor(resolved.user.id);\n        await scope.stores.updateUser(resolved.user.id, {\n          twoFactorEnabled: false,\n        });\n      },\n      input: { userId: resolved.user.id },\n      resultOf: () => ({ userId: resolved.user.id }),\n    });\n    return jsonResponse(200, { status: true }, headers);\n  }\n\n  if (path === \"/two-factor/generate-backup-codes\" && method === \"POST\") {\n    const resolved = await ctx.requireSession(request, stores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    await requirePassword(\n      resolved.user,\n      requireStringField(body, \"password\"),\n      hasher\n    );\n    const record = await stores.getTwoFactorByUserId(resolved.user.id);\n    if (!record) {\n      throw AthenaAuthRuntimeError.notFound(\n        \"Two-factor authentication not enabled\"\n      );\n    }\n    const backupCodes = generateBackupCodes();\n    await stores.updateTwoFactorBackupCodes(\n      resolved.user.id,\n      await hashBackupCodes(backupCodes, hasher)\n    );\n    return jsonResponse(200, { backupCodes, status: true }, headers);\n  }\n\n  if (path === \"/two-factor/verify-totp\" && method === \"POST\") {\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const code = requireStringField(body, \"code\");\n    const pendingToken =\n      asStringField(body, \"token\") ??\n      readBearerToken(request.headers.get(\"authorization\"));\n    let user: AuthUserRow | undefined;\n    if (pendingToken?.startsWith(\"2fa_\")) {\n      const verification = await stores.consumeVerification(pendingToken);\n      if (!verification) {\n        throw AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n      }\n      user = await stores.getUserById(\n        verification.identifier.replace(/^2fa_pending:/, \"\")\n      );\n    } else {\n      user = (await ctx.requireSession(request, stores)).user;\n    }\n    if (!user) {\n      throw AthenaAuthRuntimeError.unauthenticated();\n    }\n    const record = await stores.getTwoFactorByUserId(user.id);\n    if (!record) {\n      throw AthenaAuthRuntimeError.notFound(\n        \"Two-factor authentication not enabled\"\n      );\n    }\n    if (!(await verifyTotpCode(decodeBase32(record.secret), code))) {\n      throw AthenaAuthRuntimeError.badRequest(\"Invalid TOTP code\");\n    }\n    const session = await ctx.mutate({\n      context: {\n        actor: { kind: \"user\", userId: user.id },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"session.issue\",\n      execute: (scope) =>\n        ctx.issueSession(request, scope.stores, user.id, headers, {\n          methods: [\"password\", \"totp\"],\n        }),\n      input: { userId: user.id },\n      resultOf: (issued) => ({ session: sanitizeHookSession(issued) }),\n    });\n    const refreshed = (await stores.getUserById(user.id)) ?? user;\n    return jsonResponse(\n      200,\n      {\n        status: true,\n        token: session.token,\n        user: toPublicUser(refreshed),\n      },\n      headers\n    );\n  }\n\n  if (path === \"/two-factor/send-otp\" && method === \"POST\") {\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const pendingToken = asStringField(body, \"token\");\n    const pending = pendingToken?.startsWith(\"2fa_\")\n      ? await stores.getVerification(pendingToken)\n      : undefined;\n    const resolved = pending\n      ? {\n          user: await stores.getUserById(\n            pending.identifier.replace(/^2fa_pending:/, \"\")\n          ),\n        }\n      : await ctx.requireSession(request, stores);\n    if (!resolved.user) {\n      throw AthenaAuthRuntimeError.unauthenticated();\n    }\n    if (!(await ctx.otpRateLimiter.consume(`otp:${resolved.user.id}`))) {\n      throw AthenaAuthRuntimeError.rateLimited();\n    }\n    const identifier = `2fa_otp:${resolved.user.id}`;\n    const otp = String(\n      new DataView(crypto.getRandomValues(new Uint8Array(4)).buffer).getUint32(\n        0\n      ) % 1_000_000\n    ).padStart(6, \"0\");\n    await stores.replaceVerificationByIdentifier({\n      expiresAt: new Date(Date.now() + 5 * 60 * 1000),\n      id: crypto.randomUUID(),\n      identifier,\n      value: otp,\n    });\n    if (resolved.user.email) {\n      await ctx.emitMail?.({\n        data: { legacy_hook_url: otp, otp_code: otp },\n        eventType: authEmailEvents.user.signIn.otp,\n        recipient: resolved.user.email,\n      });\n    }\n    return jsonResponse(200, { status: true }, headers);\n  }\n\n  if (path === \"/two-factor/verify-otp\" && method === \"POST\") {\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const code = requireStringField(body, \"code\");\n    const pendingToken = asStringField(body, \"token\");\n    const pending = pendingToken?.startsWith(\"2fa_\")\n      ? await stores.getVerification(pendingToken)\n      : undefined;\n    const resolved = pending\n      ? {\n          user: await stores.getUserById(\n            pending.identifier.replace(/^2fa_pending:/, \"\")\n          ),\n        }\n      : await ctx.requireSession(request, stores);\n    if (!resolved.user) {\n      throw AthenaAuthRuntimeError.unauthenticated();\n    }\n    const user = resolved.user;\n    const identifier = `2fa_otp:${user.id}`;\n    const attemptKey = `otp-verify:${user.id}`;\n    if (!(await ctx.otpVerificationRateLimiter.consume(attemptKey))) {\n      await stores.deleteVerificationsByIdentifier(identifier);\n      throw AthenaAuthRuntimeError.rateLimited();\n    }\n    const verification = await stores.consumeVerificationByIdentifierAndValue(\n      identifier,\n      code\n    );\n    if (!verification) {\n      if (await ctx.otpVerificationRateLimiter.isLimited(attemptKey)) {\n        await stores.deleteVerificationsByIdentifier(identifier);\n      }\n      throw AthenaAuthRuntimeError.badRequest(\"Invalid OTP code\");\n    }\n    await ctx.otpVerificationRateLimiter.clear(attemptKey);\n    if (pending && pendingToken !== undefined) {\n      await stores.consumeVerification(pendingToken);\n      const session = await ctx.mutate({\n        context: {\n          actor: { kind: \"user\", userId: user.id },\n          request: ctx.hookRequest(request, path),\n          traceId: ctx.traceId,\n        },\n        event: \"session.issue\",\n        execute: (scope) =>\n          ctx.issueSession(request, scope.stores, user.id, headers, {\n            methods: [\"password\", \"email_otp\"],\n          }),\n        input: { userId: user.id },\n        resultOf: (issued) => ({ session: sanitizeHookSession(issued) }),\n      });\n      return jsonResponse(\n        200,\n        { status: true, token: session.token, user: toPublicUser(user) },\n        headers\n      );\n    }\n    return jsonResponse(200, { status: true }, headers);\n  }\n\n  if (path === \"/two-factor/verify-backup-code\" && method === \"POST\") {\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const code = requireStringField(body, \"code\").toUpperCase();\n    const pendingToken =\n      asStringField(body, \"token\") ??\n      readBearerToken(request.headers.get(\"authorization\"));\n    let user: AuthUserRow | undefined;\n    if (pendingToken?.startsWith(\"2fa_\")) {\n      const verification = await stores.consumeVerification(pendingToken);\n      user = verification\n        ? await stores.getUserById(\n            verification.identifier.replace(/^2fa_pending:/, \"\")\n          )\n        : undefined;\n    } else {\n      user = (await ctx.requireSession(request, stores)).user;\n    }\n    if (!user) {\n      throw AthenaAuthRuntimeError.unauthenticated();\n    }\n    const record = await stores.getTwoFactorByUserId(user.id);\n    if (!record?.backup_codes) {\n      throw AthenaAuthRuntimeError.badRequest(\"Invalid backup code\");\n    }\n    const hashed = JSON.parse(record.backup_codes) as string[];\n    let matchedIndex = -1;\n    for (const [index, hash] of hashed.entries()) {\n      if (await hasher.verify(code, hash)) {\n        matchedIndex = index;\n        break;\n      }\n    }\n    if (matchedIndex < 0) {\n      throw AthenaAuthRuntimeError.badRequest(\"Invalid backup code\");\n    }\n    hashed.splice(matchedIndex, 1);\n    await stores.updateTwoFactorBackupCodes(user.id, JSON.stringify(hashed));\n    const session = await ctx.mutate({\n      context: {\n        actor: { kind: \"user\", userId: user.id },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"session.issue\",\n      execute: (scope) =>\n        ctx.issueSession(request, scope.stores, user.id, headers, {\n          methods: [\"password\", \"recovery_code\"],\n        }),\n      input: { userId: user.id },\n      resultOf: (issued) => ({ session: sanitizeHookSession(issued) }),\n    });\n    return jsonResponse(\n      200,\n      {\n        session: {\n          token: session.token,\n          userId: user.id,\n        },\n        user: toPublicUser(user),\n      },\n      headers\n    );\n  }\n}\n\nexport async function resolveApiKeyUser(\n  request: Request,\n  stores: AthenaAuthStores\n): Promise<\n  | {\n      key: AuthApiKeyRow;\n      permissions?: AthenaRightKey[];\n      user: AuthUserRow;\n    }\n  | undefined\n> {\n  const rawKey = request.headers.get(\"x-api-key\")?.trim();\n  if (!rawKey) {\n    return;\n  }\n  const hash = await sha256Base64Url(rawKey);\n  const key = await stores.getApiKeyByHash(hash);\n  if (\n    !(key && isApiKeyUsable(key) && (await isApiKeyScopeUsable(key, stores)))\n  ) {\n    return;\n  }\n  const consumed = await stores.consumeApiKey(key.id);\n  if (!consumed) {\n    return;\n  }\n  let permissions: AthenaRightKey[] | undefined;\n  if (consumed.permissions) {\n    try {\n      permissions = parseApiKeyPermissionKeys(consumed.permissions);\n    } catch {\n      return;\n    }\n  }\n  const user = await stores.getUserById(consumed.user_id);\n  return user ? { key: consumed, permissions, user } : undefined;\n}\n\nasync function validateApiKeyPermissions(\n  stores: AthenaAuthStores,\n  user: AuthUserRow,\n  permissions: string,\n  activeOrganizationId: string | null,\n  scopeKind: ApiKeyScopeKind\n): Promise<void> {\n  let requestedRights: AthenaRightKey[];\n  try {\n    requestedRights = parseApiKeyPermissionKeys(permissions);\n  } catch (error) {\n    throw AthenaAuthRuntimeError.badRequest(\n      error instanceof Error ? error.message : \"Invalid API key permissions\"\n    );\n  }\n  const snapshot = await buildSnapshot(stores, {\n    session: { active_organization_id: activeOrganizationId },\n    user,\n  });\n  const authorization = bindApiKeyAuthorization(\n    snapshot,\n    requestedRights,\n    scopeKind\n  );\n  const missingRights = requestedRights.filter(\n    (right) =>\n      !authorization.effectiveRights.some((ownedRight) =>\n        rightMatches(ownedRight, right)\n      )\n  );\n  if (missingRights.length > 0) {\n    throw AthenaAuthRuntimeError.forbidden(\n      \"API key permissions exceed the authenticated principal's rights\"\n    );\n  }\n}\n\nfunction nowIso(): string {\n  return new Date().toISOString();\n}\n","const BASE32 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\nexport function encodeBase32(bytes: Uint8Array): string {\n  let bits = 0;\n  let value = 0;\n  let output = \"\";\n  for (const byte of bytes) {\n    value = (value << 8) | byte;\n    bits += 8;\n    while (bits >= 5) {\n      output += BASE32[(value >>> (bits - 5)) & 31];\n      bits -= 5;\n    }\n  }\n  if (bits > 0) {\n    output += BASE32[(value << (5 - bits)) & 31];\n  }\n  return output;\n}\n\nexport function decodeBase32(input: string): Uint8Array {\n  const cleaned = input\n    .replace(/[=]+$/g, \"\")\n    .toUpperCase()\n    .replace(/[^A-Z2-7]/g, \"\");\n  let bits = 0;\n  let value = 0;\n  const output: number[] = [];\n  for (const char of cleaned) {\n    const index = BASE32.indexOf(char);\n    if (index < 0) {\n      continue;\n    }\n    value = (value << 5) | index;\n    bits += 5;\n    if (bits >= 8) {\n      output.push((value >>> (bits - 8)) & 255);\n      bits -= 8;\n    }\n  }\n  return Uint8Array.from(output);\n}\n\nfunction writeUint64(counter: number): Uint8Array {\n  const bytes = new Uint8Array(8);\n  let remaining = Math.floor(counter);\n  for (let index = 7; index >= 0; index -= 1) {\n    bytes[index] = remaining & 255;\n    remaining = Math.floor(remaining / 256);\n  }\n  return bytes;\n}\n\nfunction toBufferSource(bytes: Uint8Array): ArrayBuffer {\n  return bytes.buffer.slice(\n    bytes.byteOffset,\n    bytes.byteOffset + bytes.byteLength\n  ) as ArrayBuffer;\n}\n\nasync function hmacSha1(\n  key: Uint8Array,\n  data: Uint8Array\n): Promise<Uint8Array> {\n  const cryptoKey = await crypto.subtle.importKey(\n    \"raw\",\n    toBufferSource(key),\n    { hash: \"SHA-1\", name: \"HMAC\" },\n    false,\n    [\"sign\"]\n  );\n  return new Uint8Array(\n    await crypto.subtle.sign(\"HMAC\", cryptoKey, toBufferSource(data))\n  );\n}\n\nexport async function generateTotpCode(\n  secret: Uint8Array,\n  options?: { digits?: number; period?: number; timestamp?: number }\n): Promise<string> {\n  const digits = options?.digits ?? 6;\n  const period = options?.period ?? 30;\n  const counter = Math.floor(\n    (options?.timestamp ?? Date.now()) / 1000 / period\n  );\n  const digest = await hmacSha1(secret, writeUint64(counter));\n  const offset = (digest.at(-1) ?? 0) & 15;\n  const binary =\n    (((digest[offset] ?? 0) & 127) << 24) |\n    ((digest[offset + 1] ?? 0) << 16) |\n    ((digest[offset + 2] ?? 0) << 8) |\n    (digest[offset + 3] ?? 0);\n  const otp = binary % 10 ** digits;\n  return otp.toString().padStart(digits, \"0\");\n}\n\nexport async function verifyTotpCode(\n  secret: Uint8Array,\n  code: string,\n  options?: { digits?: number; period?: number; window?: number }\n): Promise<boolean> {\n  const normalized = code.replace(/\\s+/g, \"\");\n  const window = options?.window ?? 1;\n  const now = Date.now();\n  for (let step = -window; step <= window; step += 1) {\n    const expected = await generateTotpCode(secret, {\n      digits: options?.digits,\n      period: options?.period,\n      timestamp: now + step * (options?.period ?? 30) * 1000,\n    });\n    if (expected === normalized) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function buildTotpUri(input: {\n  account: string;\n  issuer?: string;\n  period?: number;\n  secret: string;\n}): string {\n  const issuer = input.issuer ?? \"AthenaAuth\";\n  const label = encodeURIComponent(`${issuer}:${input.account}`);\n  const params = new URLSearchParams({\n    digits: \"6\",\n    issuer,\n    period: String(input.period ?? 30),\n    secret: input.secret,\n  });\n  return `otpauth://totp/${label}?${params.toString()}`;\n}\n\nexport function generateTotpSecret(): { encoded: string; raw: Uint8Array } {\n  const raw = crypto.getRandomValues(new Uint8Array(20));\n  return { encoded: encodeBase32(raw), raw };\n}\n","import { ATHENA_AUTH_DEFAULT_BASE_PATH } from \"../contract/index.ts\";\nimport { authEmailEvents } from \"../email/index.ts\";\nimport { sanitizeHookInvitation } from \"../hooks/sanitize.ts\";\nimport {\n  requireOrganizationRoleGrant,\n  requireOrgInviteManager,\n} from \"./authorization-guard.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"./errors.ts\";\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\nimport { toPublicInvitation } from \"./models.ts\";\nimport { timeAuthSpan } from \"./request-timing.ts\";\nimport type { AuthRuntimeDependencies } from \"./runtime-dependencies.ts\";\nimport { asStringField, readJsonBody, requireStringField } from \"./security.ts\";\n\nexport interface AuthProcedureContext {\n  deps: AuthRuntimeDependencies;\n  headers: Headers;\n  stores: AthenaAuthStores;\n  traceId: string;\n}\n\nexport async function handleOrganizationInvitationRoutes(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: AuthProcedureContext\n): Promise<Response | undefined> {\n  const {\n    config,\n    emitIfRecipient,\n    emitMail,\n    hookRequest,\n    identityOf,\n    mutate,\n    requireSession,\n  } = ctx.deps;\n  const currentStores = ctx.stores;\n  const headers = ctx.headers;\n  const traceId = ctx.traceId;\n  if (path === \"/organization/invite-member\" && method === \"POST\") {\n    const resolved = await requireSession(request, currentStores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const organizationId =\n      asStringField(body, \"organizationId\") ??\n      resolved.session.active_organization_id;\n    if (!organizationId) {\n      throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n    }\n    const actor = await currentStores.getMember(\n      organizationId,\n      resolved.user.id\n    );\n    await requireOrgInviteManager(\n      currentStores,\n      resolved.user.id,\n      organizationId,\n      actor\n    );\n    const email = requireStringField(body, \"email\");\n    const requestedRole = asStringField(body, \"role\") ?? \"member\";\n    const granted = await requireOrganizationRoleGrant(\n      currentStores,\n      resolved.user.id,\n      organizationId,\n      actor,\n      requestedRole,\n      { role: \"member\", userId: `invite:${email.trim().toLowerCase()}` }\n    );\n    const role = granted.persistedRole;\n    const inviteEmail = email.trim().toLowerCase();\n    const actorEmail =\n      typeof resolved.user.email === \"string\"\n        ? resolved.user.email.trim().toLowerCase()\n        : \"\";\n    if (actorEmail.length > 0 && inviteEmail === actorEmail) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"You cannot invite your own email as a member\"\n      );\n    }\n    const invitation = await mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          organizationId,\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: hookRequest(request, path),\n        traceId,\n      },\n      event: \"organization.invitation.create\",\n      execute: (scope) =>\n        scope.stores.createInvitation({\n          email,\n          expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000),\n          id: crypto.randomUUID(),\n          inviterId: resolved.user.id,\n          organizationId,\n          role,\n        }),\n      input: { email, organizationId, role },\n      resultOf: (row) => ({ invitation: sanitizeHookInvitation(row) }),\n    });\n    const organization = await currentStores.getOrganization(organizationId);\n    const origin = new URL(request.url).origin;\n    const basePath = config.basePath || ATHENA_AUTH_DEFAULT_BASE_PATH;\n    await emitMail({\n      data: {\n        invitation_url: `${origin}${basePath}/organization/accept-invitation?invitationId=${encodeURIComponent(invitation.id)}`,\n        inviter_identity:\n          resolved.user.email ?? resolved.user.name ?? resolved.user.id,\n        organization_name: organization?.name ?? \"organization\",\n        role: invitation.role ?? \"member\",\n      },\n      eventType: authEmailEvents.organization.member.invite,\n      recipient: invitation.email,\n    });\n    return jsonResponse(\n      200,\n      { invitation: toPublicInvitation(invitation) },\n      headers\n    );\n  }\n\n  if (path === \"/organization/accept-invitation\" && method === \"POST\") {\n    const resolved = await requireSession(request, currentStores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const invitationId = requireStringField(body, \"invitationId\");\n    const invitation = await currentStores.getInvitation(invitationId);\n    if (\n      invitation?.status !== \"pending\" ||\n      new Date(invitation.expires_at).getTime() <= Date.now()\n    ) {\n      throw AthenaAuthRuntimeError.badRequest(\"Invitation is not valid\");\n    }\n    if (\n      invitation.email &&\n      resolved.user.email &&\n      invitation.email !== resolved.user.email\n    ) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    const existing = await currentStores.getMember(\n      invitation.organization_id,\n      resolved.user.id\n    );\n    const accepted = await mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          organizationId: invitation.organization_id,\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: hookRequest(request, path),\n        traceId,\n      },\n      event: \"organization.invitation.accept\",\n      execute: async (scope) => {\n        if (!existing) {\n          await scope.stores.addMember({\n            id: crypto.randomUUID(),\n            organizationId: invitation.organization_id,\n            role: invitation.role,\n            userId: resolved.user.id,\n          });\n        }\n        await scope.stores.updateInvitationStatus(invitation.id, \"accepted\");\n        return invitation;\n      },\n      input: { invitationId },\n      previous: async () => ({\n        invitation: sanitizeHookInvitation(invitation),\n      }),\n      resultOf: (row) => ({\n        invitation: sanitizeHookInvitation({ ...row, status: \"accepted\" }),\n      }),\n    });\n    void accepted;\n    return jsonResponse(200, { status: true }, headers);\n  }\n\n  if (path === \"/organization/cancel-invitation\" && method === \"POST\") {\n    const resolved = await requireSession(request, currentStores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const invitationId = requireStringField(body, \"invitationId\");\n    const invitation = await currentStores.getInvitation(invitationId);\n    if (!invitation) {\n      throw AthenaAuthRuntimeError.notFound(\"Invitation not found\");\n    }\n    const actor = await currentStores.getMember(\n      invitation.organization_id,\n      resolved.user.id\n    );\n    await requireOrgInviteManager(\n      currentStores,\n      resolved.user.id,\n      invitation.organization_id,\n      actor\n    );\n    await mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          organizationId: invitation.organization_id,\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: hookRequest(request, path),\n        traceId,\n      },\n      event: \"organization.invitation.cancel\",\n      execute: async (scope) => {\n        await scope.stores.updateInvitationStatus(invitation.id, \"canceled\");\n      },\n      input: { invitationId },\n      previous: async () => ({\n        invitation: sanitizeHookInvitation(invitation),\n      }),\n      resultOf: () => ({\n        invitation: sanitizeHookInvitation({\n          ...invitation,\n          status: \"canceled\",\n        }),\n      }),\n    });\n    const revokedOrg = await currentStores.getOrganization(\n      invitation.organization_id\n    );\n    await emitIfRecipient(invitation.email, {\n      data: {\n        invited_email: invitation.email,\n        inviter_identity: identityOf(resolved.user),\n        organization_name: revokedOrg?.name ?? \"organization\",\n      },\n      eventType: authEmailEvents.organization.member.inviteRevoked,\n    });\n    return jsonResponse(200, { status: true }, headers);\n  }\n\n  if (path === \"/organization/list-invitations\" && method === \"GET\") {\n    const resolved = await requireSession(request, currentStores);\n    const organizationId =\n      new URL(request.url).searchParams.get(\"organizationId\") ??\n      resolved.session.active_organization_id;\n    if (!organizationId) {\n      throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n    }\n    const member = await timeAuthSpan(\"authz\", () =>\n      currentStores.getMember(organizationId, resolved.user.id)\n    );\n    if (!member) {\n      throw AthenaAuthRuntimeError.forbidden();\n    }\n    const invitations = await currentStores.listInvitations(organizationId);\n    return jsonResponse(\n      200,\n      invitations.map((invitation) => toPublicInvitation(invitation)),\n      headers\n    );\n  }\n\n  if (path === \"/organization/invite-member-reminder\" && method === \"POST\") {\n    const resolved = await requireSession(request, currentStores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const invitationId = requireStringField(body, \"invitationId\");\n    const invitation = await currentStores.getInvitation(invitationId);\n    if (invitation?.status !== \"pending\") {\n      throw AthenaAuthRuntimeError.badRequest(\"Invitation is not pending\");\n    }\n    const actor = await currentStores.getMember(\n      invitation.organization_id,\n      resolved.user.id\n    );\n    await requireOrgInviteManager(\n      currentStores,\n      resolved.user.id,\n      invitation.organization_id,\n      actor\n    );\n    await mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          organizationId: invitation.organization_id,\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: hookRequest(request, path),\n        traceId,\n      },\n      event: \"organization.member.invite.reminder\",\n      execute: async () => invitation,\n      input: { invitationId },\n      previous: async () => ({\n        invitation: sanitizeHookInvitation(invitation),\n      }),\n      resultOf: (row) => ({ invitation: sanitizeHookInvitation(row) }),\n    });\n    const reminderOrg = await currentStores.getOrganization(\n      invitation.organization_id\n    );\n    const origin = new URL(request.url).origin;\n    const basePath = config.basePath || ATHENA_AUTH_DEFAULT_BASE_PATH;\n    await emitMail({\n      data: {\n        invitation_url: `${origin}${basePath}/organization/accept-invitation?invitationId=${encodeURIComponent(invitation.id)}`,\n        inviter_identity: identityOf(resolved.user),\n        organization_name: reminderOrg?.name ?? \"organization\",\n        role: invitation.role ?? \"member\",\n      },\n      eventType: authEmailEvents.organization.member.inviteReminder,\n      recipient: invitation.email,\n    });\n    return jsonResponse(200, { status: true }, headers);\n  }\n\n  if (path === \"/organization/get-invitation\" && method === \"GET\") {\n    await requireSession(request, currentStores);\n    const invitationId = new URL(request.url).searchParams.get(\"invitationId\");\n    if (!invitationId) {\n      throw AthenaAuthRuntimeError.badRequest(\"invitationId is required\");\n    }\n    const invitation = await currentStores.getInvitation(invitationId);\n    if (!invitation) {\n      throw AthenaAuthRuntimeError.notFound(\"Invitation not found\");\n    }\n    return jsonResponse(\n      200,\n      { invitation: toPublicInvitation(invitation) },\n      headers\n    );\n  }\n\n  if (path === \"/organization/list-user-invitations\" && method === \"GET\") {\n    const resolved = await requireSession(request, currentStores);\n    const email = resolved.user.email;\n    const invitations = email\n      ? await currentStores.listInvitationsForEmail(email)\n      : [];\n    return jsonResponse(\n      200,\n      invitations.map((invitation) => toPublicInvitation(invitation)),\n      headers\n    );\n  }\n\n  if (path === \"/organization/reject-invitation\" && method === \"POST\") {\n    const resolved = await requireSession(request, currentStores);\n    const body = await readJsonBody(request, config.security.bodyLimitBytes);\n    const invitationId = requireStringField(body, \"invitationId\");\n    const invitation = await currentStores.getInvitation(invitationId);\n    if (!invitation) {\n      throw AthenaAuthRuntimeError.notFound(\"Invitation not found\");\n    }\n    const actor = await currentStores.getMember(\n      invitation.organization_id,\n      resolved.user.id\n    );\n    const isInvitee =\n      invitation.email &&\n      resolved.user.email &&\n      invitation.email === resolved.user.email;\n    if (!isInvitee) {\n      await requireOrgInviteManager(\n        currentStores,\n        resolved.user.id,\n        invitation.organization_id,\n        actor\n      );\n    }\n    await mutate({\n      context: {\n        actor: {\n          kind: \"user\",\n          organizationId: invitation.organization_id,\n          sessionId: resolved.session.id,\n          userId: resolved.user.id,\n        },\n        request: hookRequest(request, path),\n        traceId,\n      },\n      event: \"organization.invitation.reject\",\n      execute: async (scope) => {\n        await scope.stores.updateInvitationStatus(invitation.id, \"rejected\");\n      },\n      input: { invitationId },\n      previous: async () => ({\n        invitation: sanitizeHookInvitation(invitation),\n      }),\n      resultOf: () => ({\n        invitation: sanitizeHookInvitation({\n          ...invitation,\n          status: \"rejected\",\n        }),\n      }),\n    });\n    return jsonResponse(200, { status: true }, headers);\n  }\n}\n","/**\n * Local POST /passkey/generate-authenticate-options.\n * Optional session: identified credentials vs discoverable (empty allowCredentials).\n */\nimport {\n  type AuthenticatorTransportFuture,\n  generateAuthenticationOptions,\n} from \"@simplewebauthn/server\";\n\nimport type { NormalizedAthenaAuthConfig } from \"../../config.ts\";\nimport type {\n  AthenaPasskeyRelyingParty,\n  AthenaStoredPasskey,\n} from \"../../passkey/server/types.ts\";\nimport type { AthenaPasskeyOptionsResponse } from \"../../types.ts\";\nimport { base64Url } from \"../../utils/base64.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AthenaAuthStores } from \"../memory-stores.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"../models.ts\";\nimport { createPasskeyChallengeStore } from \"./challenge-store.ts\";\nimport { createPasskeyRepository } from \"./repository.ts\";\n\nconst CHALLENGE_BYTES = 32;\n\nexport interface GenerateAuthenticateOptionsContext {\n  config: NormalizedAthenaAuthConfig;\n  headers: Headers;\n  relyingParty: AthenaPasskeyRelyingParty | undefined;\n  resolveSession: (\n    request: Request,\n    stores: AthenaAuthStores\n  ) => Promise<{\n    session: AuthSessionRow;\n    token: string;\n    user: AuthUserRow;\n  } | null>;\n  stores: AthenaAuthStores;\n}\n\nasync function readIdentifierBody(\n  request: Request\n): Promise<{ email?: string; userId?: string }> {\n  try {\n    const clone = request.clone();\n    const text = await clone.text();\n    if (!text.trim()) {\n      return {};\n    }\n    const parsed: unknown = JSON.parse(text);\n    if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n      return {};\n    }\n    const record = parsed as Record<string, unknown>;\n    const email =\n      typeof record.email === \"string\" && record.email.trim()\n        ? record.email.trim()\n        : undefined;\n    const userId =\n      typeof record.userId === \"string\" && record.userId.trim()\n        ? record.userId.trim()\n        : undefined;\n    return { email, userId };\n  } catch {\n    return {};\n  }\n}\n\nasync function resolveIdentifiedUserId(\n  request: Request,\n  stores: AthenaAuthStores\n): Promise<string | null> {\n  const body = await readIdentifierBody(request);\n  if (body.userId) {\n    const user = await stores.getUserById(body.userId);\n    return user?.id ?? null;\n  }\n  if (body.email) {\n    const user = await stores.getUserByEmail(body.email);\n    return user?.id ?? null;\n  }\n  return null;\n}\n\nfunction allowCredentialsFromStored(\n  rows: readonly AthenaStoredPasskey[]\n): NonNullable<AthenaPasskeyOptionsResponse[\"allowCredentials\"]> {\n  return rows.map((row) => {\n    const id = base64Url.encode(row.credentialId, { padding: false });\n    if (row.transports.length === 0) {\n      return { id, type: \"public-key\" };\n    }\n    return {\n      id,\n      transports: [...row.transports],\n      type: \"public-key\",\n    };\n  });\n}\n\nfunction toLooseExtensions(\n  value: unknown\n): AthenaPasskeyOptionsResponse[\"extensions\"] {\n  if (value == null || typeof value !== \"object\" || Array.isArray(value)) {\n    return;\n  }\n  const record: NonNullable<AthenaPasskeyOptionsResponse[\"extensions\"]> = {};\n  for (const [key, entry] of Object.entries(value)) {\n    record[key] = entry;\n  }\n  return record;\n}\n\nfunction toWireOptions(\n  options: Awaited<ReturnType<typeof generateAuthenticationOptions>>,\n  rp: AthenaPasskeyRelyingParty,\n  allowCredentials: NonNullable<\n    AthenaPasskeyOptionsResponse[\"allowCredentials\"]\n  >\n): AthenaPasskeyOptionsResponse & { rpId: string } {\n  return {\n    allowCredentials,\n    challenge: options.challenge,\n    extensions: toLooseExtensions(options.extensions),\n    rp: { id: rp.id, name: rp.name },\n    rpId: rp.id,\n    timeout: options.timeout,\n    userVerification: options.userVerification,\n  };\n}\n\nexport async function handleGenerateAuthenticateOptionsRoute(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: GenerateAuthenticateOptionsContext\n): Promise<Response | undefined> {\n  if (path === \"/passkey/generate-authenticate-options\" && method === \"POST\") {\n    const rp = ctx.relyingParty;\n    if (!rp) {\n      throw new AthenaAuthRuntimeError(\n        500,\n        \"Passkey relying party snapshot is not configured\",\n        { code: \"ATHENA_RUNTIME_CONFIG_INVALID\" }\n      );\n    }\n\n    const resolved = await ctx.resolveSession(request, ctx.stores);\n    const identifiedUserId = resolved\n      ? resolved.user.id\n      : await resolveIdentifiedUserId(request, ctx.stores);\n    const existing = identifiedUserId\n      ? await createPasskeyRepository(ctx.stores).listByUser(identifiedUserId)\n      : [];\n    const allowCredentials = allowCredentialsFromStored(existing);\n    const rawChallenge = crypto.getRandomValues(\n      new Uint8Array(CHALLENGE_BYTES)\n    );\n    const challengeHash = new Uint8Array(\n      await crypto.subtle.digest(\"SHA-256\", rawChallenge)\n    );\n    const ttlSeconds = ctx.config.passkey.challengeTtlSeconds;\n    await createPasskeyChallengeStore(ctx.stores).create({\n      challengeHash,\n      expiresAt: new Date(Date.now() + ttlSeconds * 1000),\n      purpose: \"authentication\",\n      rpId: rp.id,\n      userId: identifiedUserId,\n    });\n\n    const options = await generateAuthenticationOptions({\n      allowCredentials: allowCredentials.flatMap((item) => {\n        if (!item.id) {\n          return [];\n        }\n        const descriptor: {\n          id: string;\n          transports?: AuthenticatorTransportFuture[];\n        } = { id: item.id };\n        if (item.transports && item.transports.length > 0) {\n          descriptor.transports = [\n            ...item.transports,\n          ] as AuthenticatorTransportFuture[];\n        }\n        return [descriptor];\n      }),\n      challenge: rawChallenge,\n      rpID: rp.id,\n      timeout: ttlSeconds * 1000,\n      userVerification:\n        ctx.config.passkey.authentication.userVerification ?? \"preferred\",\n    });\n\n    return jsonResponse(\n      200,\n      toWireOptions(options, rp, allowCredentials),\n      ctx.headers\n    );\n  }\n}\n","import type { PasskeyChallengeStore } from \"../../passkey/server/challenge-store.ts\";\nimport type {\n  AthenaPasskeyChallenge,\n  AthenaPasskeyChallengeConsume,\n  AthenaPasskeyChallengeCreate,\n  AthenaPasskeyChallengePurpose,\n} from \"../../passkey/server/types.ts\";\nimport { base64Url } from \"../../utils/base64.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\nimport type { MemoryAuthStores } from \"../memory-stores.ts\";\nimport type { AuthVerificationRow } from \"../models.ts\";\nimport { PostgresAuthStores } from \"../stores.ts\";\n\nconst CHALLENGE_HASH_BYTES = 32;\nconst PASSKEY_PURPOSES = new Set<AthenaPasskeyChallengePurpose>([\n  \"authentication\",\n  \"registration\",\n]);\n\nexport interface PasskeyVerificationHost {\n  consumeVerificationByIdentifierAndValue(\n    identifier: string,\n    value: string\n  ): Promise<AuthVerificationRow | undefined>;\n  createVerification(input: {\n    expiresAt: Date;\n    id: string;\n    identifier: string;\n    value: string;\n  }): Promise<AuthVerificationRow>;\n  expirePasskeyVerifications(now: Date): Promise<number>;\n}\n\nfunction isPasskeyVerificationHost(\n  value: object\n): value is PasskeyVerificationHost {\n  return (\n    \"createVerification\" in value &&\n    typeof (value as PasskeyVerificationHost).createVerification ===\n      \"function\" &&\n    \"consumeVerificationByIdentifierAndValue\" in value &&\n    typeof (value as PasskeyVerificationHost)\n      .consumeVerificationByIdentifierAndValue === \"function\" &&\n    \"expirePasskeyVerifications\" in value &&\n    typeof (value as PasskeyVerificationHost).expirePasskeyVerifications ===\n      \"function\"\n  );\n}\n\nfunction isAthenaAuthDatabase(value: object): value is AthenaAuthDatabase {\n  return (\n    \"query\" in value &&\n    typeof (value as AthenaAuthDatabase).query === \"function\"\n  );\n}\n\nfunction encodeValue(challengeHash: Uint8Array): string {\n  return base64Url.encode(challengeHash, { padding: false });\n}\n\nasync function rpIdHashToken(rpId: string): Promise<string> {\n  const digest = new Uint8Array(\n    await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(rpId))\n  );\n  return encodeValue(digest);\n}\n\nfunction userToken(userId: string | null): string {\n  return userId === null ? \"anonymous\" : userId;\n}\n\nasync function bindIdentifier(input: {\n  purpose: AthenaPasskeyChallengePurpose;\n  rpId: string;\n  userId: string | null;\n}): Promise<{ identifier: string; rpId: string }> {\n  const rpId = input.rpId.trim();\n  if (rpId.length === 0 || rpId.includes(\":\")) {\n    throw new Error(\"passkey challenge rpId is invalid\");\n  }\n  if (\n    input.userId !== null &&\n    (input.userId.length === 0 || input.userId.includes(\":\"))\n  ) {\n    throw new Error(\"passkey challenge userId is invalid\");\n  }\n  const rpHash = await rpIdHashToken(rpId);\n  return {\n    identifier: `passkey:${input.purpose}:${rpHash}:${userToken(input.userId)}`,\n    rpId,\n  };\n}\n\nfunction assertPurpose(\n  purpose: string\n): asserts purpose is AthenaPasskeyChallengePurpose {\n  if (!PASSKEY_PURPOSES.has(purpose as AthenaPasskeyChallengePurpose)) {\n    throw new Error(\"passkey challenge purpose is invalid\");\n  }\n}\n\nfunction assertChallengeHash(challengeHash: Uint8Array): void {\n  if (challengeHash.byteLength !== CHALLENGE_HASH_BYTES) {\n    throw new Error(\"passkey challengeHash must be a 32-byte SHA-256 digest\");\n  }\n}\n\nfunction validateCreate(input: AthenaPasskeyChallengeCreate): void {\n  assertPurpose(input.purpose);\n  assertChallengeHash(input.challengeHash);\n  if (input.purpose === \"registration\" && input.userId === null) {\n    throw new Error(\"registration passkey challenges require a userId\");\n  }\n}\n\nfunction toChallenge(\n  row: AuthVerificationRow,\n  input: {\n    challengeHash: Uint8Array;\n    purpose: AthenaPasskeyChallengePurpose;\n    rpId: string;\n    userId: string | null;\n  },\n  consumedAt: Date | null\n): AthenaPasskeyChallenge {\n  return {\n    challengeHash: new Uint8Array(input.challengeHash),\n    consumedAt,\n    createdAt: new Date(row.created_at),\n    expiresAt: new Date(row.expires_at),\n    id: row.id,\n    purpose: input.purpose,\n    rpId: input.rpId,\n    userId: input.userId,\n  };\n}\n\nexport class LocalPasskeyChallengeStore implements PasskeyChallengeStore {\n  constructor(private readonly host: PasskeyVerificationHost) {}\n\n  async create(\n    input: AthenaPasskeyChallengeCreate\n  ): Promise<AthenaPasskeyChallenge> {\n    validateCreate(input);\n    const { identifier, rpId } = await bindIdentifier(input);\n    const row = await this.host.createVerification({\n      expiresAt: input.expiresAt,\n      id: crypto.randomUUID(),\n      identifier,\n      value: encodeValue(input.challengeHash),\n    });\n    return toChallenge(row, { ...input, rpId }, null);\n  }\n\n  async consume(\n    input: AthenaPasskeyChallengeConsume\n  ): Promise<AthenaPasskeyChallenge> {\n    assertPurpose(input.purpose);\n    assertChallengeHash(input.challengeHash);\n    const { identifier, rpId } = await bindIdentifier(input);\n    const row = await this.host.consumeVerificationByIdentifierAndValue(\n      identifier,\n      encodeValue(input.challengeHash)\n    );\n    if (!row) {\n      throw new Error(\"passkey challenge consume missed\");\n    }\n    return toChallenge(row, { ...input, rpId }, new Date());\n  }\n\n  async expire(now?: Date): Promise<number> {\n    return this.host.expirePasskeyVerifications(now ?? new Date());\n  }\n}\n\nexport class MemoryPasskeyChallengeStore extends LocalPasskeyChallengeStore {}\n\nexport class PostgresPasskeyChallengeStore extends LocalPasskeyChallengeStore {\n  constructor(storesOrDb: PostgresAuthStores | AthenaAuthDatabase) {\n    super(resolvePostgresHost(storesOrDb));\n  }\n}\n\nfunction resolvePostgresHost(\n  storesOrDb: PostgresAuthStores | AthenaAuthDatabase | PasskeyVerificationHost\n): PasskeyVerificationHost {\n  if (isPasskeyVerificationHost(storesOrDb)) {\n    return storesOrDb;\n  }\n  if (isAthenaAuthDatabase(storesOrDb)) {\n    return new PostgresAuthStores(storesOrDb);\n  }\n  throw new Error(\n    \"postgres passkey challenge store requires Auth stores or a database\"\n  );\n}\n\nexport function createMemoryPasskeyChallengeStore(\n  stores: MemoryAuthStores\n): PasskeyChallengeStore {\n  return new MemoryPasskeyChallengeStore(stores);\n}\n\nexport function createPostgresPasskeyChallengeStore(\n  storesOrDb: PostgresAuthStores | AthenaAuthDatabase\n): PasskeyChallengeStore {\n  return new PostgresPasskeyChallengeStore(storesOrDb);\n}\n\nexport function createPasskeyChallengeStore(\n  storesOrDb: PasskeyVerificationHost | AthenaAuthDatabase\n): PasskeyChallengeStore {\n  if (isPasskeyVerificationHost(storesOrDb)) {\n    return new LocalPasskeyChallengeStore(storesOrDb);\n  }\n  if (isAthenaAuthDatabase(storesOrDb)) {\n    return new PostgresPasskeyChallengeStore(storesOrDb);\n  }\n  throw new Error(\"passkey challenge store requires Auth stores or a database\");\n}\n","import { PostgresAuthorizationStore } from \"../../runtime/authorization/postgres.ts\";\nimport {\n  mapLegacyUserRole,\n  resolveMemberAssignmentRole,\n} from \"../../runtime/authorization/templates.ts\";\nimport type { AthenaRuntimeAuthSessionStore } from \"../../runtime/data/principal.ts\";\nimport { ATHENA_AUTH_TABLES } from \"../contract/index.ts\";\nimport type { AthenaAuthenticationMethod } from \"./authentication-context.ts\";\nimport {\n  normalizeAuthenticationMethods,\n  resolveAuthenticationContext,\n} from \"./authentication-context.ts\";\nimport type { AthenaAuthDatabase } from \"./database.ts\";\nimport type {\n  AuthAccountRow,\n  AuthInvitationRow,\n  AuthMemberRow,\n  AuthOrganizationRow,\n  AuthSessionRow,\n  AuthUserRow,\n  AuthVerificationRow,\n} from \"./models.ts\";\nimport { parseMetadata } from \"./models.ts\";\n\nexport interface CreateUserInput {\n  displayUsername?: string;\n  email?: string;\n  emailVerified?: boolean;\n  id: string;\n  image?: string;\n  metadata?: Record<string, unknown>;\n  name?: string;\n  username?: string;\n}\n\nexport interface UpdateUserPatch {\n  banExpires?: Date | null;\n  banned?: boolean;\n  banReason?: string | null;\n  email?: string;\n  emailVerified?: boolean;\n  image?: string | null;\n  lastSignInAt?: Date;\n  metadata?: Record<string, unknown>;\n  name?: string | null;\n  role?: string | null;\n  twoFactorEnabled?: boolean;\n}\n\nexport interface AuthApiKeyRow {\n  created_at: Date | string;\n  enabled: boolean;\n  expires_at: Date | string | null;\n  id: string;\n  key: string;\n  last_request: Date | string | null;\n  metadata: string | null;\n  name: string | null;\n  organization_id?: string | null;\n  permissions: string | null;\n  prefix: string | null;\n  remaining: number | null;\n  scope_kind?: \"legacy\" | \"organization\" | \"platform\";\n  start: string | null;\n  updated_at: Date | string;\n  user_id: string;\n}\n\nexport interface AuthTwoFactorRow {\n  backup_codes: string | null;\n  created_at: Date | string;\n  id: string;\n  secret: string;\n  updated_at: Date | string;\n  user_id: string;\n}\n\nexport interface CreateSessionInput {\n  activeOrganizationId?: string | null;\n  authenticatedAt?: Date;\n  authenticationMethods?: readonly AthenaAuthenticationMethod[];\n  expiresAt: Date;\n  id: string;\n  impersonatedBy?: string | null;\n  ipAddress?: string | null;\n  token: string;\n  userAgent?: string | null;\n  userId: string;\n}\n\nexport class PostgresAuthStores implements AthenaRuntimeAuthSessionStore {\n  readonly authorization: PostgresAuthorizationStore;\n\n  constructor(private readonly db: AthenaAuthDatabase) {\n    this.authorization = new PostgresAuthorizationStore(db);\n  }\n\n  async getUserById(id: string): Promise<AuthUserRow | undefined> {\n    const result = await this.db.query<AuthUserRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.users} WHERE id = $1`,\n      [id]\n    );\n    return hydrateUser(result.rows[0]);\n  }\n\n  async getUserByEmail(email: string): Promise<AuthUserRow | undefined> {\n    const result = await this.db.query<AuthUserRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.users} WHERE LOWER(email) = LOWER($1)`,\n      [email]\n    );\n    return hydrateUser(result.rows[0]);\n  }\n\n  async getUserByUsername(username: string): Promise<AuthUserRow | undefined> {\n    const result = await this.db.query<AuthUserRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.users} WHERE username = $1`,\n      [username]\n    );\n    return hydrateUser(result.rows[0]);\n  }\n\n  async listUsers(): Promise<AuthUserRow[]> {\n    const result = await this.db.query<AuthUserRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.users} ORDER BY email NULLS LAST, id`\n    );\n    return result.rows\n      .map((row) => hydrateUser(row))\n      .filter((row): row is AuthUserRow => row != null);\n  }\n\n  async createUser(input: CreateUserInput): Promise<AuthUserRow> {\n    const result = await this.db.query<AuthUserRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.users}\n        (id, email, name, image, email_verified, username, display_username, metadata)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, $8::jsonb)\n       RETURNING *`,\n      [\n        input.id,\n        input.email ?? null,\n        input.name ?? null,\n        input.image ?? null,\n        input.emailVerified ?? false,\n        input.username ?? null,\n        input.displayUsername ?? null,\n        JSON.stringify(input.metadata ?? {}),\n      ]\n    );\n    const row = hydrateUser(result.rows[0]);\n    if (!row) {\n      throw new Error(\"Failed to create user\");\n    }\n    await this.authorization.assignUserRole(\n      row.id,\n      mapLegacyUserRole(row.role)\n    );\n    return row;\n  }\n\n  async updateUser(id: string, patch: UpdateUserPatch): Promise<AuthUserRow> {\n    const result = await this.db.query<AuthUserRow>(\n      `UPDATE ${ATHENA_AUTH_TABLES.users}\n       SET\n         name = COALESCE($2, name),\n         email = COALESCE($3, email),\n         email_verified = COALESCE($4, email_verified),\n         image = CASE WHEN $5::boolean THEN $6 ELSE image END,\n         last_sign_in_at = COALESCE($7, last_sign_in_at),\n         metadata = COALESCE($8::jsonb, metadata),\n         banned = COALESCE($9, banned),\n         two_factor_enabled = COALESCE($10, two_factor_enabled),\n         role = CASE WHEN $11::boolean THEN $12 ELSE role END,\n         ban_reason = CASE WHEN $13::boolean THEN $14 ELSE ban_reason END,\n         ban_expires = CASE WHEN $15::boolean THEN $16 ELSE ban_expires END,\n         updated_at = NOW()\n       WHERE id = $1\n       RETURNING *`,\n      [\n        id,\n        patch.name === undefined ? null : patch.name,\n        patch.email ?? null,\n        patch.emailVerified ?? null,\n        patch.image !== undefined,\n        patch.image ?? null,\n        patch.lastSignInAt ?? null,\n        patch.metadata ? JSON.stringify(patch.metadata) : null,\n        patch.banned ?? null,\n        patch.twoFactorEnabled ?? null,\n        patch.role !== undefined,\n        patch.role ?? null,\n        patch.banReason !== undefined,\n        patch.banReason ?? null,\n        patch.banExpires !== undefined,\n        patch.banExpires?.toISOString() ?? null,\n      ]\n    );\n    const row = hydrateUser(result.rows[0]);\n    if (!row) {\n      throw new Error(\"User not found\");\n    }\n    if (patch.role !== undefined) {\n      await this.authorization.assignUserRole(\n        row.id,\n        mapLegacyUserRole(patch.role)\n      );\n    }\n    return row;\n  }\n\n  async deleteUser(id: string): Promise<void> {\n    await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.users} WHERE id = $1`,\n      [id]\n    );\n  }\n\n  async createSession(input: CreateSessionInput): Promise<AuthSessionRow> {\n    const authentication = resolveAuthenticationContext(\n      {\n        authenticatedAt: input.authenticatedAt,\n        methods: input.authenticationMethods ?? [],\n      },\n      new Date()\n    );\n    const result = await this.db.query<AuthSessionRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.sessions}\n        (id, user_id, token, expires_at, ip_address, user_agent, impersonated_by, active_organization_id, active, authenticated_at, authentication_methods)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, $8, TRUE, $9, $10)\n       RETURNING *`,\n      [\n        input.id,\n        input.userId,\n        input.token,\n        input.expiresAt.toISOString(),\n        input.ipAddress ?? null,\n        input.userAgent ?? null,\n        input.impersonatedBy ?? null,\n        input.activeOrganizationId ?? null,\n        authentication.authenticatedAt.toISOString(),\n        authentication.methods,\n      ]\n    );\n    const row = result.rows[0];\n    if (row == null) {\n      throw new Error(\"Failed to create session\");\n    }\n    return {\n      ...row,\n      authenticated_at: row.authenticated_at ?? row.created_at,\n      authentication_methods: normalizeAuthenticationMethods(\n        row.authentication_methods\n      ),\n    };\n  }\n\n  async getSessionByToken(token: string): Promise<AuthSessionRow | undefined> {\n    const result = await this.db.query<AuthSessionRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.sessions}\n       WHERE token = $1 AND active = TRUE AND expires_at > NOW()`,\n      [token]\n    );\n    return hydrateSession(result.rows[0]);\n  }\n\n  async updateSessionExpiry(token: string, expiresAt: Date): Promise<void> {\n    await this.db.query(\n      `UPDATE ${ATHENA_AUTH_TABLES.sessions}\n       SET expires_at = $2, updated_at = NOW()\n       WHERE token = $1`,\n      [token, expiresAt.toISOString()]\n    );\n  }\n\n  async setSessionActiveOrganization(\n    token: string,\n    organizationId: string | null\n  ): Promise<void> {\n    await this.db.query(\n      `UPDATE ${ATHENA_AUTH_TABLES.sessions}\n       SET active_organization_id = $2, updated_at = NOW()\n       WHERE token = $1`,\n      [token, organizationId]\n    );\n  }\n\n  async clearUserActiveOrganization(\n    userId: string,\n    organizationId: string\n  ): Promise<number> {\n    const result = await this.db.query(\n      `UPDATE ${ATHENA_AUTH_TABLES.sessions}\n       SET active_organization_id = NULL, updated_at = NOW()\n       WHERE user_id = $1 AND active_organization_id = $2`,\n      [userId, organizationId]\n    );\n    return result.rowCount;\n  }\n\n  async clearOrganizationActiveSessions(\n    organizationId: string\n  ): Promise<number> {\n    const result = await this.db.query(\n      `UPDATE ${ATHENA_AUTH_TABLES.sessions}\n       SET active_organization_id = NULL, updated_at = NOW()\n       WHERE active_organization_id = $1`,\n      [organizationId]\n    );\n    return result.rowCount;\n  }\n\n  async listUserSessions(userId: string): Promise<AuthSessionRow[]> {\n    const result = await this.db.query<AuthSessionRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.sessions}\n       WHERE user_id = $1 AND active = TRUE AND expires_at > NOW()\n       ORDER BY created_at DESC`,\n      [userId]\n    );\n    return result.rows;\n  }\n\n  async deleteSession(token: string): Promise<boolean> {\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.sessions} WHERE token = $1`,\n      [token]\n    );\n    return result.rowCount > 0;\n  }\n\n  async deleteUserSessions(\n    userId: string,\n    exceptToken?: string\n  ): Promise<number> {\n    if (exceptToken) {\n      const result = await this.db.query(\n        `DELETE FROM ${ATHENA_AUTH_TABLES.sessions} WHERE user_id = $1 AND token <> $2`,\n        [userId, exceptToken]\n      );\n      return result.rowCount;\n    }\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.sessions} WHERE user_id = $1`,\n      [userId]\n    );\n    return result.rowCount;\n  }\n\n  async createAccount(input: {\n    accountId: string;\n    id: string;\n    password?: string;\n    providerId: string;\n    userId: string;\n  }): Promise<AuthAccountRow> {\n    const result = await this.db.query<AuthAccountRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.accounts}\n        (id, account_id, provider_id, user_id, password)\n       VALUES ($1, $2, $3, $4, $5)\n       RETURNING *`,\n      [\n        input.id,\n        input.accountId,\n        input.providerId,\n        input.userId,\n        input.password ?? null,\n      ]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Failed to create account\");\n    }\n    return row;\n  }\n\n  async listAccounts(userId: string): Promise<AuthAccountRow[]> {\n    const result = await this.db.query<AuthAccountRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.accounts} WHERE user_id = $1`,\n      [userId]\n    );\n    return result.rows;\n  }\n\n  async findAccountByProvider(\n    providerId: string,\n    accountId: string\n  ): Promise<AuthAccountRow | undefined> {\n    const result = await this.db.query<AuthAccountRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.accounts}\n       WHERE provider_id = $1 AND account_id = $2`,\n      [providerId, accountId]\n    );\n    return result.rows[0];\n  }\n\n  async deleteAccount(id: string): Promise<void> {\n    await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.accounts} WHERE id = $1`,\n      [id]\n    );\n  }\n\n  async createVerification(input: {\n    expiresAt: Date;\n    id: string;\n    identifier: string;\n    value: string;\n  }): Promise<AuthVerificationRow> {\n    const result = await this.db.query<AuthVerificationRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.verifications}\n        (id, identifier, value, expires_at)\n       VALUES ($1, $2, $3, $4)\n       RETURNING *`,\n      [input.id, input.identifier, input.value, input.expiresAt.toISOString()]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Failed to create verification\");\n    }\n    return row;\n  }\n\n  async replaceVerificationByIdentifier(input: {\n    expiresAt: Date;\n    id: string;\n    identifier: string;\n    value: string;\n  }): Promise<AuthVerificationRow> {\n    return this.db.transaction(async (db) => {\n      await db.query(\"SELECT pg_advisory_xact_lock(hashtext($1))\", [\n        input.identifier,\n      ]);\n      await db.query(\n        `DELETE FROM ${ATHENA_AUTH_TABLES.verifications} WHERE identifier = $1`,\n        [input.identifier]\n      );\n      const result = await db.query<AuthVerificationRow>(\n        `INSERT INTO ${ATHENA_AUTH_TABLES.verifications}\n          (id, identifier, value, expires_at)\n         VALUES ($1, $2, $3, $4)\n         RETURNING *`,\n        [input.id, input.identifier, input.value, input.expiresAt.toISOString()]\n      );\n      const row = result.rows[0];\n      if (!row) {\n        throw new Error(\"Failed to replace verification\");\n      }\n      return row;\n    });\n  }\n\n  async deleteVerificationsByIdentifier(identifier: string): Promise<number> {\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.verifications} WHERE identifier = $1`,\n      [identifier]\n    );\n    return result.rowCount;\n  }\n\n  async consumeVerification(\n    value: string\n  ): Promise<AuthVerificationRow | undefined> {\n    const result = await this.db.query<AuthVerificationRow>(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.verifications}\n       WHERE value = $1 AND expires_at > NOW()\n       RETURNING *`,\n      [value]\n    );\n    return result.rows[0];\n  }\n\n  async consumeRateLimit(\n    key: string,\n    limit: number,\n    windowMs: number\n  ): Promise<boolean> {\n    const result = await this.db.query<{ count: number }>(\n      `INSERT INTO athena.auth_rate_limits (key, count, reset_at)\n       VALUES ($1, 1, NOW() + ($3 * INTERVAL '1 millisecond'))\n       ON CONFLICT (key) DO UPDATE\n       SET count = CASE\n           WHEN auth_rate_limits.reset_at <= NOW() THEN 1\n           WHEN auth_rate_limits.count < $2 THEN auth_rate_limits.count + 1\n           ELSE auth_rate_limits.count\n         END,\n         reset_at = CASE\n           WHEN auth_rate_limits.reset_at <= NOW()\n           THEN NOW() + ($3 * INTERVAL '1 millisecond')\n           ELSE auth_rate_limits.reset_at\n         END,\n         updated_at = NOW()\n       WHERE auth_rate_limits.reset_at <= NOW()\n          OR auth_rate_limits.count < $2\n       RETURNING count`,\n      [key, limit, windowMs]\n    );\n    return result.rowCount > 0;\n  }\n\n  async clearRateLimit(key: string): Promise<void> {\n    await this.db.query(\"DELETE FROM athena.auth_rate_limits WHERE key = $1\", [\n      key,\n    ]);\n  }\n\n  async isRateLimited(key: string, limit: number): Promise<boolean> {\n    const result = await this.db.query<{ count: number }>(\n      `SELECT count FROM athena.auth_rate_limits\n       WHERE key = $1 AND reset_at > NOW()`,\n      [key]\n    );\n    return (result.rows[0]?.count ?? 0) >= limit;\n  }\n\n  async getVerification(\n    value: string\n  ): Promise<AuthVerificationRow | undefined> {\n    const result = await this.db.query<AuthVerificationRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.verifications}\n       WHERE value = $1 AND expires_at > NOW()\n       LIMIT 1`,\n      [value]\n    );\n    return result.rows[0];\n  }\n\n  async consumeVerificationByIdentifierAndValue(\n    identifier: string,\n    value: string\n  ): Promise<AuthVerificationRow | undefined> {\n    const result = await this.db.query<AuthVerificationRow>(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.verifications}\n       WHERE identifier = $1\n         AND value = $2\n         AND expires_at > NOW()\n       RETURNING *`,\n      [identifier, value]\n    );\n    return result.rows[0];\n  }\n\n  async expirePasskeyVerifications(now: Date): Promise<number> {\n    const result = await this.db.query<AuthVerificationRow>(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.verifications}\n       WHERE identifier LIKE 'passkey:%'\n         AND expires_at <= $1\n       RETURNING *`,\n      [now.toISOString()]\n    );\n    return result.rowCount;\n  }\n\n  async createOrganization(input: {\n    createdByUserId: string;\n    id: string;\n    name: string;\n    slug: string;\n  }): Promise<AuthOrganizationRow> {\n    const result = await this.db.query<AuthOrganizationRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.organization}\n        (id, name, slug, created_by_user_id)\n       VALUES ($1, $2, $3, $4)\n       RETURNING *`,\n      [input.id, input.name, input.slug, input.createdByUserId]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Failed to create organization\");\n    }\n    return row;\n  }\n\n  async getOrganization(id: string): Promise<AuthOrganizationRow | undefined> {\n    const result = await this.db.query<AuthOrganizationRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.organization} WHERE id = $1`,\n      [id]\n    );\n    return result.rows[0];\n  }\n\n  async getOrganizationBySlug(\n    slug: string\n  ): Promise<AuthOrganizationRow | undefined> {\n    const result = await this.db.query<AuthOrganizationRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.organization} WHERE slug = $1`,\n      [slug]\n    );\n    return result.rows[0];\n  }\n\n  async listOrganizationsForUser(\n    userId: string\n  ): Promise<AuthOrganizationRow[]> {\n    const result = await this.db.query<AuthOrganizationRow>(\n      `SELECT o.* FROM ${ATHENA_AUTH_TABLES.organization} o\n       INNER JOIN ${ATHENA_AUTH_TABLES.member} m ON m.organization_id = o.id\n       WHERE m.user_id = $1\n       ORDER BY o.created_at ASC`,\n      [userId]\n    );\n    return result.rows;\n  }\n\n  async updateOrganization(\n    id: string,\n    patch: { logo?: string | null; name?: string; slug?: string }\n  ): Promise<AuthOrganizationRow> {\n    const result = await this.db.query<AuthOrganizationRow>(\n      `UPDATE ${ATHENA_AUTH_TABLES.organization}\n       SET\n         name = COALESCE($2, name),\n         slug = COALESCE($3, slug),\n         logo = CASE WHEN $4::boolean THEN $5 ELSE logo END,\n         updated_at = NOW()\n       WHERE id = $1\n       RETURNING *`,\n      [\n        id,\n        patch.name ?? null,\n        patch.slug ?? null,\n        patch.logo !== undefined,\n        patch.logo ?? null,\n      ]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Organization not found\");\n    }\n    return row;\n  }\n\n  async deleteOrganization(id: string): Promise<void> {\n    await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.organization} WHERE id = $1`,\n      [id]\n    );\n  }\n\n  async addMember(input: {\n    assignedBy?: string;\n    id: string;\n    organizationId: string;\n    role: string;\n    userId: string;\n  }): Promise<AuthMemberRow> {\n    const result = await this.db.query<AuthMemberRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.member}\n        (id, organization_id, user_id, role)\n       VALUES ($1, $2, $3, $4)\n       RETURNING *`,\n      [input.id, input.organizationId, input.userId, input.role]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Failed to add member\");\n    }\n    await this.authorization.assignMemberRole(\n      row.id,\n      resolveMemberAssignmentRole(row.role),\n      input.assignedBy,\n      input.organizationId\n    );\n    return row;\n  }\n\n  async getMember(\n    organizationId: string,\n    userId: string\n  ): Promise<AuthMemberRow | undefined> {\n    const result = await this.db.query<AuthMemberRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.member}\n       WHERE organization_id = $1 AND user_id = $2`,\n      [organizationId, userId]\n    );\n    return result.rows[0];\n  }\n\n  async hasAuthorizationAssignment(userId: string): Promise<boolean> {\n    return this.authorization.hasUserAssignment(userId);\n  }\n\n  async resolveEffectiveRights(input: {\n    activeOrganizationId?: string | null;\n    userId: string;\n  }): Promise<readonly string[]> {\n    const rights = await this.authorization.resolveEffectiveRights({\n      activeOrganizationId: input.activeOrganizationId,\n      getMember: (organizationId, memberUserId) =>\n        this.getMember(organizationId, memberUserId),\n      userId: input.userId,\n    });\n    return [...rights];\n  }\n\n  async listMembers(organizationId: string): Promise<AuthMemberRow[]> {\n    const result = await this.db.query<AuthMemberRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.member}\n       WHERE organization_id = $1\n       ORDER BY created_at ASC`,\n      [organizationId]\n    );\n    return result.rows;\n  }\n\n  async updateMemberRole(\n    organizationId: string,\n    userId: string,\n    role: string\n  ): Promise<AuthMemberRow | undefined> {\n    const result = await this.db.query<AuthMemberRow>(\n      `UPDATE ${ATHENA_AUTH_TABLES.member}\n       SET role = $3\n       WHERE organization_id = $1 AND user_id = $2\n       RETURNING *`,\n      [organizationId, userId, role]\n    );\n    const updated = result.rows[0];\n    if (updated) {\n      await this.authorization.assignMemberRole(\n        updated.id,\n        resolveMemberAssignmentRole(role),\n        undefined,\n        organizationId\n      );\n    }\n    return updated;\n  }\n\n  async removeMember(organizationId: string, userId: string): Promise<boolean> {\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.member}\n       WHERE organization_id = $1 AND user_id = $2`,\n      [organizationId, userId]\n    );\n    return result.rowCount > 0;\n  }\n\n  async createInvitation(input: {\n    email: string;\n    expiresAt: Date;\n    id: string;\n    inviterId: string;\n    organizationId: string;\n    role: string;\n  }): Promise<AuthInvitationRow> {\n    const result = await this.db.query<AuthInvitationRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.invitation}\n        (id, organization_id, email, role, status, inviter_id, expires_at)\n       VALUES ($1, $2, $3, $4, 'pending', $5, $6)\n       RETURNING *`,\n      [\n        input.id,\n        input.organizationId,\n        input.email,\n        input.role,\n        input.inviterId,\n        input.expiresAt.toISOString(),\n      ]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Failed to create invitation\");\n    }\n    return row;\n  }\n\n  async getInvitation(id: string): Promise<AuthInvitationRow | undefined> {\n    const result = await this.db.query<AuthInvitationRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.invitation} WHERE id = $1`,\n      [id]\n    );\n    return result.rows[0];\n  }\n\n  async listInvitations(organizationId: string): Promise<AuthInvitationRow[]> {\n    const result = await this.db.query<AuthInvitationRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.invitation}\n       WHERE organization_id = $1\n       ORDER BY created_at DESC`,\n      [organizationId]\n    );\n    return result.rows;\n  }\n\n  async listInvitationsForEmail(email: string): Promise<AuthInvitationRow[]> {\n    const result = await this.db.query<AuthInvitationRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.invitation}\n       WHERE lower(email) = lower($1)\n         AND status = 'pending'\n         AND expires_at > NOW()\n       ORDER BY created_at DESC`,\n      [email]\n    );\n    return result.rows;\n  }\n\n  async updateInvitationStatus(\n    id: string,\n    status: string\n  ): Promise<AuthInvitationRow | undefined> {\n    const result = await this.db.query<AuthInvitationRow>(\n      `UPDATE ${ATHENA_AUTH_TABLES.invitation}\n       SET status = $2\n       WHERE id = $1\n       RETURNING *`,\n      [id, status]\n    );\n    return result.rows[0];\n  }\n\n  async getVerificationByValue(\n    value: string\n  ): Promise<AuthVerificationRow | undefined> {\n    const result = await this.db.query<AuthVerificationRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.verifications}\n       WHERE value = $1 AND expires_at > NOW()`,\n      [value]\n    );\n    return result.rows[0];\n  }\n\n  async createTwoFactor(input: {\n    backupCodes?: string;\n    id: string;\n    secret: string;\n    userId: string;\n  }): Promise<AuthTwoFactorRow> {\n    const result = await this.db.query<AuthTwoFactorRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.twoFactor}\n        (id, secret, backup_codes, user_id)\n       VALUES ($1, $2, $3, $4)\n       ON CONFLICT (user_id) DO UPDATE\n         SET secret = EXCLUDED.secret,\n             backup_codes = EXCLUDED.backup_codes,\n             updated_at = NOW()\n       RETURNING *`,\n      [input.id, input.secret, input.backupCodes ?? null, input.userId]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Failed to create two-factor record\");\n    }\n    return row;\n  }\n\n  async getTwoFactorByUserId(\n    userId: string\n  ): Promise<AuthTwoFactorRow | undefined> {\n    const result = await this.db.query<AuthTwoFactorRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.twoFactor} WHERE user_id = $1`,\n      [userId]\n    );\n    return result.rows[0];\n  }\n\n  async updateTwoFactorBackupCodes(\n    userId: string,\n    backupCodes: string\n  ): Promise<void> {\n    await this.db.query(\n      `UPDATE ${ATHENA_AUTH_TABLES.twoFactor}\n       SET backup_codes = $2, updated_at = NOW()\n       WHERE user_id = $1`,\n      [userId, backupCodes]\n    );\n  }\n\n  async deleteTwoFactor(userId: string): Promise<void> {\n    await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.twoFactor} WHERE user_id = $1`,\n      [userId]\n    );\n  }\n\n  async createApiKey(input: AuthApiKeyRow): Promise<AuthApiKeyRow> {\n    const result = await this.db.query<AuthApiKeyRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.apiKeys}\n        (id, name, start, prefix, key, user_id, enabled, remaining, expires_at, permissions, metadata, organization_id, scope_kind)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)\n       RETURNING *`,\n      [\n        input.id,\n        input.name,\n        input.start,\n        input.prefix,\n        input.key,\n        input.user_id,\n        input.enabled,\n        input.remaining,\n        input.expires_at,\n        input.permissions,\n        input.metadata,\n        input.organization_id ?? null,\n        input.scope_kind ?? \"legacy\",\n      ]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Failed to create API key\");\n    }\n    return row;\n  }\n\n  async getApiKeyByHash(hash: string): Promise<AuthApiKeyRow | undefined> {\n    const result = await this.db.query<AuthApiKeyRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.apiKeys} WHERE key = $1`,\n      [hash]\n    );\n    return result.rows[0];\n  }\n\n  async getApiKeyById(id: string): Promise<AuthApiKeyRow | undefined> {\n    const result = await this.db.query<AuthApiKeyRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.apiKeys} WHERE id = $1`,\n      [id]\n    );\n    return result.rows[0];\n  }\n\n  async listApiKeys(userId: string): Promise<AuthApiKeyRow[]> {\n    const result = await this.db.query<AuthApiKeyRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.apiKeys}\n       WHERE user_id = $1\n       ORDER BY created_at DESC`,\n      [userId]\n    );\n    return result.rows;\n  }\n\n  async deleteApiKey(id: string): Promise<boolean> {\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.apiKeys} WHERE id = $1`,\n      [id]\n    );\n    return result.rowCount > 0;\n  }\n\n  async deleteExpiredApiKeys(): Promise<number> {\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.apiKeys}\n       WHERE expires_at IS NOT NULL AND expires_at <= NOW()`\n    );\n    return result.rowCount;\n  }\n\n  async touchApiKey(id: string): Promise<void> {\n    await this.db.query(\n      `UPDATE ${ATHENA_AUTH_TABLES.apiKeys}\n       SET last_request = NOW(), updated_at = NOW()\n       WHERE id = $1`,\n      [id]\n    );\n  }\n\n  async consumeApiKey(id: string): Promise<AuthApiKeyRow | undefined> {\n    const result = await this.db.query<AuthApiKeyRow>(\n      `UPDATE ${ATHENA_AUTH_TABLES.apiKeys}\n       SET remaining = CASE\n             WHEN remaining IS NULL THEN NULL\n             ELSE remaining - 1\n           END,\n           last_request = NOW(),\n           updated_at = NOW()\n       WHERE id = $1\n         AND enabled = TRUE\n         AND (expires_at IS NULL OR expires_at > NOW())\n         AND (remaining IS NULL OR remaining > 0)\n       RETURNING *`,\n      [id]\n    );\n    return result.rows[0];\n  }\n\n  async updateApiKey(\n    id: string,\n    patch: {\n      enabled?: boolean;\n      metadata?: string | null;\n      name?: string | null;\n      permissions?: string | null;\n    }\n  ): Promise<AuthApiKeyRow | undefined> {\n    const result = await this.db.query<AuthApiKeyRow>(\n      `UPDATE ${ATHENA_AUTH_TABLES.apiKeys}\n       SET\n         enabled = COALESCE($2, enabled),\n         metadata = COALESCE($3, metadata),\n         name = COALESCE($4, name),\n         permissions = COALESCE($5, permissions),\n         updated_at = NOW()\n       WHERE id = $1\n       RETURNING *`,\n      [\n        id,\n        patch.enabled ?? null,\n        patch.metadata ?? null,\n        patch.name ?? null,\n        patch.permissions ?? null,\n      ]\n    );\n    return result.rows[0];\n  }\n}\n\nfunction hydrateSession(\n  row: AuthSessionRow | undefined\n): AuthSessionRow | undefined {\n  if (!row) {\n    return;\n  }\n  return {\n    ...row,\n    authenticated_at: row.authenticated_at ?? row.created_at,\n    authentication_methods: normalizeAuthenticationMethods(\n      row.authentication_methods\n    ),\n  };\n}\n\nfunction hydrateUser(row: AuthUserRow | undefined): AuthUserRow | undefined {\n  if (!row) {\n    return;\n  }\n  return {\n    ...row,\n    metadata: parseMetadata(row.metadata),\n  };\n}\n","import { ATHENA_AUTH_TABLES } from \"../../contract/index.ts\";\nimport { normalizePasskeyDeviceType } from \"../../passkey/metadata.ts\";\nimport type { PasskeyRepository } from \"../../passkey/server/repository.ts\";\nimport type {\n  AthenaStoredPasskey,\n  AthenaStoredPasskeyCreate,\n} from \"../../passkey/server/types.ts\";\nimport {\n  parseStoredPasskeyTransports,\n  serializePasskeyTransports,\n} from \"../../passkey/transports.ts\";\nimport { base64Url } from \"../../utils/base64.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\nimport { MemoryAuthStores } from \"../memory-stores.ts\";\nimport type { AuthPasskeyRow } from \"../models.ts\";\nimport type { PostgresAuthStores } from \"../stores.ts\";\n\nfunction isAthenaAuthDatabase(value: object): value is AthenaAuthDatabase {\n  return (\n    \"query\" in value &&\n    typeof (value as AthenaAuthDatabase).query === \"function\"\n  );\n}\n\nfunction resolvePostgresDatabase(\n  storesOrDb: PostgresAuthStores | AthenaAuthDatabase\n): AthenaAuthDatabase {\n  if (isAthenaAuthDatabase(storesOrDb)) {\n    return storesOrDb;\n  }\n  const nested = (storesOrDb as unknown as { db?: unknown }).db;\n  if (nested && typeof nested === \"object\" && isAthenaAuthDatabase(nested)) {\n    return nested;\n  }\n  throw new Error(\n    \"postgres passkey repository requires Auth stores or a database\"\n  );\n}\n\nfunction encodePasskeyBytes(bytes: Uint8Array): string {\n  return base64Url.encode(bytes, { padding: false });\n}\n\nfunction decodePasskeyBytes(value: string): Uint8Array {\n  return base64Url.decode(value);\n}\n\nfunction asDate(value: Date | string | null | undefined): Date {\n  if (value instanceof Date) {\n    return value;\n  }\n  if (typeof value === \"string\" && value.trim()) {\n    return new Date(value);\n  }\n  return new Date();\n}\n\nfunction asBigInt(value: unknown): bigint {\n  if (typeof value === \"bigint\") {\n    return value;\n  }\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    return BigInt(Math.trunc(value));\n  }\n  if (typeof value === \"string\" && value.trim()) {\n    return BigInt(value);\n  }\n  throw new Error(\"passkey counter is not a bigint\");\n}\n\nfunction assertNonNegativeCounter(value: bigint): void {\n  if (value < 0n) {\n    throw new Error(\"passkey counter must not be negative\");\n  }\n}\n\nfunction isZeroToZero(expected: bigint, next: bigint): boolean {\n  return expected === 0n && next === 0n;\n}\n\nfunction assertIncreasingCounter(expected: bigint, next: bigint): void {\n  assertNonNegativeCounter(expected);\n  assertNonNegativeCounter(next);\n  if (isZeroToZero(expected, next)) {\n    return;\n  }\n  if (next <= expected) {\n    throw new Error(\"passkey counter regression\");\n  }\n}\n\nfunction persistName(name: string | null | undefined): string {\n  return name ?? \"\";\n}\n\nfunction domainName(name: string): string | null {\n  return name === \"\" ? null : name;\n}\n\nfunction uniqueCredentialError(): Error {\n  const error = new Error(\"duplicate key value violates unique constraint\");\n  (error as { code?: string }).code = \"23505\";\n  return error;\n}\n\nfunction casMissError(): Error {\n  return new Error(\"passkey credential counter CAS missed\");\n}\n\nfunction notFoundError(): Error {\n  return new Error(\"passkey not found\");\n}\n\nfunction toStoredPasskey(row: AuthPasskeyRow): AthenaStoredPasskey {\n  const transports = parseStoredPasskeyTransports(\n    row.transports === null ? null : String(row.transports)\n  );\n  return {\n    aaguid: row.aaguid ?? null,\n    backedUp: Boolean(row.backed_up),\n    counter: asBigInt(row.counter),\n    createdAt: asDate(row.created_at),\n    credentialId: decodePasskeyBytes(row.credential_id),\n    deviceType: normalizePasskeyDeviceType(row.device_type),\n    id: row.id,\n    name: domainName(row.name),\n    publicKey: decodePasskeyBytes(row.public_key),\n    residentKey: row.resident_key == null ? null : Boolean(row.resident_key),\n    transports: (transports ?? []) as AuthenticatorTransport[],\n    updatedAt: asDate(row.updated_at),\n    userId: row.user_id,\n  };\n}\n\nfunction requireRow(\n  row: AuthPasskeyRow | undefined,\n  error: Error\n): AthenaStoredPasskey {\n  if (!row) {\n    throw error;\n  }\n  return toStoredPasskey(row);\n}\n\n/**\n * SQL PasskeyRepository against athena.passkeys (ADR 0034).\n * Counter CAS is one UPDATE … RETURNING *; zero rows is a canonical failure.\n */\nexport class LocalPasskeyRepository implements PasskeyRepository {\n  constructor(private readonly db: AthenaAuthDatabase) {}\n\n  async create(\n    record: AthenaStoredPasskeyCreate\n  ): Promise<AthenaStoredPasskey> {\n    const counter = asBigInt(record.counter);\n    assertNonNegativeCounter(counter);\n    const result = await this.db.query<AuthPasskeyRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.passkeys}\n        (id, name, public_key, user_id, credential_id, counter, device_type, backed_up, transports, aaguid, resident_key, created_at)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, NOW())\n       RETURNING *`,\n      [\n        record.id ?? crypto.randomUUID(),\n        persistName(record.name),\n        encodePasskeyBytes(record.publicKey),\n        record.userId,\n        encodePasskeyBytes(record.credentialId),\n        counter,\n        normalizePasskeyDeviceType(record.deviceType),\n        Boolean(record.backedUp),\n        serializePasskeyTransports(record.transports),\n        record.aaguid,\n        record.residentKey,\n      ]\n    );\n    return requireRow(result.rows[0], new Error(\"Failed to create passkey\"));\n  }\n\n  async findByCredentialId(\n    credentialId: Uint8Array\n  ): Promise<AthenaStoredPasskey | null> {\n    const result = await this.db.query<AuthPasskeyRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.passkeys} WHERE credential_id = $1`,\n      [encodePasskeyBytes(credentialId)]\n    );\n    const row = result.rows[0];\n    return row ? toStoredPasskey(row) : null;\n  }\n\n  async listByUser(userId: string): Promise<AthenaStoredPasskey[]> {\n    const result = await this.db.query<AuthPasskeyRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.passkeys}\n        WHERE user_id = $1\n        ORDER BY created_at DESC`,\n      [userId]\n    );\n    return result.rows.map((row) => toStoredPasskey(row));\n  }\n\n  async updateCounter(input: {\n    credentialId: Uint8Array;\n    expected: bigint;\n    next: bigint;\n  }): Promise<AthenaStoredPasskey> {\n    assertIncreasingCounter(input.expected, input.next);\n    if (isZeroToZero(input.expected, input.next)) {\n      const current = await this.findByCredentialId(input.credentialId);\n      if (current?.counter !== 0n) {\n        throw casMissError();\n      }\n      return current;\n    }\n    const result = await this.db.query<AuthPasskeyRow>(\n      `UPDATE ${ATHENA_AUTH_TABLES.passkeys}\n          SET counter = $1,\n              updated_at = NOW()\n        WHERE credential_id = $2\n          AND counter = $3\n        RETURNING *`,\n      [input.next, encodePasskeyBytes(input.credentialId), input.expected]\n    );\n    return requireRow(result.rows[0], casMissError());\n  }\n\n  async updateName(input: {\n    id: string;\n    userId: string;\n    name: string;\n  }): Promise<AthenaStoredPasskey> {\n    const result = await this.db.query<AuthPasskeyRow>(\n      `UPDATE ${ATHENA_AUTH_TABLES.passkeys}\n          SET name = $1,\n              updated_at = NOW()\n        WHERE id = $2\n          AND user_id = $3\n        RETURNING *`,\n      [persistName(input.name), input.id, input.userId]\n    );\n    return requireRow(result.rows[0], notFoundError());\n  }\n\n  async delete(input: { id: string; userId: string }): Promise<void> {\n    const result = await this.db.query<AuthPasskeyRow>(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.passkeys}\n        WHERE id = $1\n          AND user_id = $2\n        RETURNING *`,\n      [input.id, input.userId]\n    );\n    if (!result.rows[0]) {\n      throw notFoundError();\n    }\n  }\n}\n\nexport class MemoryPasskeyRepository implements PasskeyRepository {\n  constructor(private readonly stores: MemoryAuthStores) {}\n\n  async create(\n    record: AthenaStoredPasskeyCreate\n  ): Promise<AthenaStoredPasskey> {\n    const counter = asBigInt(record.counter);\n    assertNonNegativeCounter(counter);\n    const credentialId = encodePasskeyBytes(record.credentialId);\n    for (const existing of this.stores.passkeys.values()) {\n      if (existing.credential_id === credentialId) {\n        throw uniqueCredentialError();\n      }\n    }\n    const stamp = new Date();\n    const row: AuthPasskeyRow = {\n      aaguid: record.aaguid ?? null,\n      backed_up: Boolean(record.backedUp),\n      counter,\n      created_at: stamp,\n      credential_id: credentialId,\n      device_type: normalizePasskeyDeviceType(record.deviceType),\n      id: record.id ?? crypto.randomUUID(),\n      name: persistName(record.name),\n      public_key: encodePasskeyBytes(record.publicKey),\n      resident_key: record.residentKey ?? null,\n      transports: serializePasskeyTransports(record.transports),\n      updated_at: stamp,\n      user_id: record.userId,\n    };\n    this.stores.passkeys.set(row.id, row);\n    return toStoredPasskey(row);\n  }\n\n  async findByCredentialId(\n    credentialId: Uint8Array\n  ): Promise<AthenaStoredPasskey | null> {\n    const encoded = encodePasskeyBytes(credentialId);\n    for (const row of this.stores.passkeys.values()) {\n      if (row.credential_id === encoded) {\n        return toStoredPasskey(row);\n      }\n    }\n    return null;\n  }\n\n  async listByUser(userId: string): Promise<AthenaStoredPasskey[]> {\n    return [...this.stores.passkeys.values()]\n      .filter((row) => row.user_id === userId)\n      .sort(\n        (left, right) =>\n          asDate(right.created_at).getTime() - asDate(left.created_at).getTime()\n      )\n      .map((row) => toStoredPasskey(row));\n  }\n\n  async updateCounter(input: {\n    credentialId: Uint8Array;\n    expected: bigint;\n    next: bigint;\n  }): Promise<AthenaStoredPasskey> {\n    assertIncreasingCounter(input.expected, input.next);\n    const encoded = encodePasskeyBytes(input.credentialId);\n    let found: AuthPasskeyRow | undefined;\n    for (const row of this.stores.passkeys.values()) {\n      if (row.credential_id === encoded) {\n        found = row;\n        break;\n      }\n    }\n    if (!found || asBigInt(found.counter) !== input.expected) {\n      throw casMissError();\n    }\n    if (isZeroToZero(input.expected, input.next)) {\n      return toStoredPasskey(found);\n    }\n    found.counter = input.next;\n    found.updated_at = new Date();\n    return toStoredPasskey(found);\n  }\n\n  async updateName(input: {\n    id: string;\n    userId: string;\n    name: string;\n  }): Promise<AthenaStoredPasskey> {\n    const row = this.stores.passkeys.get(input.id);\n    if (!row || row.user_id !== input.userId) {\n      throw notFoundError();\n    }\n    row.name = persistName(input.name);\n    row.updated_at = new Date();\n    return toStoredPasskey(row);\n  }\n\n  async delete(input: { id: string; userId: string }): Promise<void> {\n    const row = this.stores.passkeys.get(input.id);\n    if (!row || row.user_id !== input.userId) {\n      throw notFoundError();\n    }\n    this.stores.passkeys.delete(input.id);\n  }\n}\n\nexport class PostgresPasskeyRepository extends LocalPasskeyRepository {\n  constructor(storesOrDb: PostgresAuthStores | AthenaAuthDatabase) {\n    super(resolvePostgresDatabase(storesOrDb));\n  }\n}\n\nexport function createMemoryPasskeyRepository(\n  stores: MemoryAuthStores\n): PasskeyRepository {\n  return new MemoryPasskeyRepository(stores);\n}\n\nexport function createPostgresPasskeyRepository(\n  storesOrDb: PostgresAuthStores | AthenaAuthDatabase\n): PasskeyRepository {\n  return new PostgresPasskeyRepository(storesOrDb);\n}\n\nexport function createPasskeyRepository(\n  storesOrDb: MemoryAuthStores | PostgresAuthStores | AthenaAuthDatabase\n): PasskeyRepository {\n  if (storesOrDb instanceof MemoryAuthStores) {\n    return new MemoryPasskeyRepository(storesOrDb);\n  }\n  return new PostgresPasskeyRepository(storesOrDb);\n}\n","import { serializePasskeyTransports } from \"./transports.ts\";\n\n/** WebAuthn authenticator-data backup-eligible (BE) flag. */\nexport const AUTHDATA_BE = 0x08;\n/** WebAuthn authenticator-data backup-state (BS) flag. */\nexport const AUTHDATA_BS = 0x10;\n\nexport type PasskeyAuthenticatorDeviceType = \"multiDevice\" | \"singleDevice\";\n\nexport interface MapPasskeyAuthenticatorMetadataInput {\n  flags: number;\n  transports?: readonly string[] | null;\n}\n\nexport interface MappedPasskeyAuthenticatorMetadata {\n  backedUp: boolean;\n  deviceType: PasskeyAuthenticatorDeviceType;\n  transports: string | null;\n}\n\nexport function normalizePasskeyDeviceType(\n  value: unknown\n): PasskeyAuthenticatorDeviceType {\n  return value === \"multiDevice\" ? \"multiDevice\" : \"singleDevice\";\n}\n\nexport function normalizeCredentialCounter(value: unknown): number {\n  if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n    return Math.floor(value);\n  }\n  if (typeof value === \"bigint\" && value >= 0n) {\n    const asNumber = Number(value);\n    return Number.isSafeInteger(asNumber) ? asNumber : 0;\n  }\n  if (typeof value === \"string\" && value.trim()) {\n    const parsed = Number(value);\n    if (Number.isFinite(parsed) && parsed >= 0) {\n      return Math.floor(parsed);\n    }\n  }\n  return 0;\n}\n\n/**\n * Persist mapping shared with Rust `PasskeyStoreAdapter::create_passkey`.\n * BE (0x08) → deviceType; BS (0x10) → backedUp; empty transports → NULL.\n * multiDevice is not the same flag as backedUp.\n */\nexport function mapPasskeyAuthenticatorMetadata(\n  input: MapPasskeyAuthenticatorMetadataInput\n): MappedPasskeyAuthenticatorMetadata {\n  const backupEligible = (input.flags & AUTHDATA_BE) !== 0;\n  const backupState = (input.flags & AUTHDATA_BS) !== 0;\n\n  return {\n    backedUp: backupState,\n    deviceType: backupEligible ? \"multiDevice\" : \"singleDevice\",\n    transports: serializePasskeyTransports(input.transports),\n  };\n}\n\nexport {\n  parseStoredPasskeyTransports,\n  serializePasskeyTransports,\n} from \"./transports.ts\";\n","/** Parse a stored JSON-array transports string. Empty / invalid → null. */\nexport function parseStoredPasskeyTransports(\n  value: string | null | undefined\n): string[] | null {\n  if (value == null || value.trim() === \"\") {\n    return null;\n  }\n  try {\n    const parsed: unknown = JSON.parse(value);\n    if (!Array.isArray(parsed)) {\n      return null;\n    }\n    const listed = parsed.filter(\n      (entry): entry is string => typeof entry === \"string\" && entry.length > 0\n    );\n    return listed.length > 0 ? listed : null;\n  } catch {\n    return null;\n  }\n}\n\n/** Encode transports as a JSON-array string, or null when missing/empty. */\nexport function serializePasskeyTransports(\n  value: readonly string[] | null | undefined\n): string | null {\n  if (value == null || value.length === 0) {\n    return null;\n  }\n  return JSON.stringify([...value]);\n}\n","/**\n * Local GET /passkey/generate-register-options.\n * Session: existing user ceremony. No session + onboarding: durable transaction.\n */\nimport {\n  type AuthenticatorTransportFuture,\n  generateRegistrationOptions,\n} from \"@simplewebauthn/server\";\n\nimport type { NormalizedAthenaAuthConfig } from \"../../config.ts\";\nimport {\n  type AthenaPasskeyAuthenticatorAttachment,\n  registrationAuthenticatorSelection,\n  supportedRegistrationExtensions,\n} from \"../../passkey/policy.ts\";\nimport type {\n  AthenaPasskeyRelyingParty,\n  AthenaStoredPasskey,\n} from \"../../passkey/server/types.ts\";\nimport type { AthenaPasskeyOptionsResponse } from \"../../types.ts\";\nimport { base64Url } from \"../../utils/base64.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AthenaAuthStores } from \"../memory-stores.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"../models.ts\";\nimport { createPasskeyChallengeStore } from \"./challenge-store.ts\";\nimport { createPasskeyRegistrationTransactionStore } from \"./registration-transaction.ts\";\nimport { createPasskeyRepository } from \"./repository.ts\";\n\nconst CHALLENGE_BYTES = 32;\nconst USER_HANDLE_BYTES = 32;\n\nexport interface GenerateRegisterOptionsContext {\n  config: NormalizedAthenaAuthConfig;\n  headers: Headers;\n  relyingParty: AthenaPasskeyRelyingParty | undefined;\n  resolveSession: (\n    request: Request,\n    stores: AthenaAuthStores\n  ) => Promise<{\n    session: AuthSessionRow;\n    token: string;\n    user: AuthUserRow;\n  } | null>;\n  stores: AthenaAuthStores;\n}\n\nfunction userLabel(user: AuthUserRow): {\n  userDisplayName: string;\n  userName: string;\n} {\n  const email = user.email?.trim() || undefined;\n  const name = user.name?.trim() || undefined;\n  return {\n    userDisplayName: name ?? email ?? user.id,\n    userName: email ?? name ?? user.id,\n  };\n}\n\nfunction excludeCredentialsFromStored(\n  rows: readonly AthenaStoredPasskey[]\n): NonNullable<AthenaPasskeyOptionsResponse[\"excludeCredentials\"]> {\n  return rows.map((row) => {\n    const id = base64Url.encode(row.credentialId, { padding: false });\n    if (row.transports.length === 0) {\n      return { id, type: \"public-key\" };\n    }\n    return {\n      id,\n      transports: [...row.transports],\n      type: \"public-key\",\n    };\n  });\n}\n\nfunction toLooseExtensions(\n  value: unknown\n): AthenaPasskeyOptionsResponse[\"extensions\"] {\n  if (value == null || typeof value !== \"object\" || Array.isArray(value)) {\n    return;\n  }\n  const record: NonNullable<AthenaPasskeyOptionsResponse[\"extensions\"]> = {};\n  for (const [key, entry] of Object.entries(value)) {\n    record[key] = entry;\n  }\n  return record;\n}\n\nfunction toWireOptions(\n  options: Awaited<ReturnType<typeof generateRegistrationOptions>>,\n  rp: AthenaPasskeyRelyingParty,\n  excludeCredentials: NonNullable<\n    AthenaPasskeyOptionsResponse[\"excludeCredentials\"]\n  >\n): AthenaPasskeyOptionsResponse {\n  return {\n    attestation: options.attestation,\n    authenticatorSelection: options.authenticatorSelection,\n    challenge: options.challenge,\n    excludeCredentials,\n    extensions: toLooseExtensions(options.extensions),\n    pubKeyCredParams: options.pubKeyCredParams,\n    rp: { id: rp.id, name: rp.name },\n    timeout: options.timeout,\n    user: {\n      displayName: options.user.displayName,\n      id: options.user.id,\n      name: options.user.name,\n    },\n  };\n}\n\nfunction queryAttachment(\n  request: Request\n): AthenaPasskeyAuthenticatorAttachment | null {\n  const attachment = new URL(request.url).searchParams\n    .get(\"authenticatorAttachment\")\n    ?.trim();\n  if (attachment === \"platform\" || attachment === \"cross-platform\") {\n    return attachment;\n  }\n  return null;\n}\n\nfunction queryText(request: Request, key: string): string | undefined {\n  const value = new URL(request.url).searchParams.get(key)?.trim();\n  return value || undefined;\n}\n\nexport async function handleGenerateRegisterOptionsRoute(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: GenerateRegisterOptionsContext\n): Promise<Response | undefined> {\n  if (path === \"/passkey/generate-register-options\" && method === \"GET\") {\n    const rp = ctx.relyingParty;\n    if (!rp) {\n      throw new AthenaAuthRuntimeError(\n        500,\n        \"Passkey relying party snapshot is not configured\",\n        { code: \"ATHENA_RUNTIME_CONFIG_INVALID\" }\n      );\n    }\n\n    const session = await ctx.resolveSession(request, ctx.stores);\n    if (\n      !session &&\n      (request.headers.get(\"authorization\") || request.headers.get(\"cookie\"))\n    ) {\n      throw AthenaAuthRuntimeError.sessionNotFound();\n    }\n    const onboarding = !session && ctx.config.passkey.onboardingEnabled;\n    if (!(session || onboarding)) {\n      throw AthenaAuthRuntimeError.unauthenticated();\n    }\n\n    const existing = session\n      ? await createPasskeyRepository(ctx.stores).listByUser(session.user.id)\n      : [];\n    const excludeCredentials = excludeCredentialsFromStored(existing);\n    const labels = session\n      ? userLabel(session.user)\n      : {\n          userDisplayName:\n            queryText(request, \"name\") ??\n            queryText(request, \"email\") ??\n            \"Passkey\",\n          userName:\n            queryText(request, \"email\") ??\n            queryText(request, \"name\") ??\n            \"passkey\",\n        };\n    const rawChallenge = crypto.getRandomValues(\n      new Uint8Array(CHALLENGE_BYTES)\n    );\n    const challengeHash = new Uint8Array(\n      await crypto.subtle.digest(\"SHA-256\", rawChallenge)\n    );\n    const ttlSeconds = ctx.config.passkey.challengeTtlSeconds;\n    const expiresAt = new Date(Date.now() + ttlSeconds * 1000);\n    const userHandle = session\n      ? new TextEncoder().encode(session.user.id)\n      : crypto.getRandomValues(new Uint8Array(USER_HANDLE_BYTES));\n\n    if (session) {\n      await createPasskeyChallengeStore(ctx.stores).create({\n        challengeHash,\n        expiresAt,\n        purpose: \"registration\",\n        rpId: rp.id,\n        userId: session.user.id,\n      });\n    } else {\n      await createPasskeyRegistrationTransactionStore(ctx.stores).create({\n        challengeHash,\n        context: {\n          email: queryText(request, \"email\"),\n          name: queryText(request, \"name\"),\n        },\n        expiresAt,\n        mode: \"onboarding\",\n        rpId: rp.id,\n        userHandle,\n      });\n    }\n\n    const policy = ctx.config.passkey.registration;\n    const authenticatorSelection = registrationAuthenticatorSelection({\n      attachmentOverride: queryAttachment(request),\n      policy,\n    });\n    const extensions =\n      policy.extensions.credProps === false\n        ? { credProps: false }\n        : supportedRegistrationExtensions(policy);\n    const options = await generateRegistrationOptions({\n      attestationType: \"none\",\n      authenticatorSelection,\n      challenge: rawChallenge,\n      excludeCredentials: excludeCredentials.flatMap((item) => {\n        if (!item.id) {\n          return [];\n        }\n        const descriptor: {\n          id: string;\n          transports?: AuthenticatorTransportFuture[];\n        } = { id: item.id };\n        if (item.transports && item.transports.length > 0) {\n          descriptor.transports = [\n            ...item.transports,\n          ] as AuthenticatorTransportFuture[];\n        }\n        return [descriptor];\n      }),\n      ...(extensions ? { extensions } : {}),\n      rpID: rp.id,\n      rpName: rp.name,\n      timeout: ttlSeconds * 1000,\n      userDisplayName: labels.userDisplayName,\n      userID: userHandle,\n      userName: labels.userName,\n    });\n\n    const wire = toWireOptions(options, rp, excludeCredentials);\n    if (policy.extensions.credProps === false) {\n      const extensions = { ...wire.extensions };\n      extensions.credProps = undefined;\n      wire.extensions =\n        Object.keys(extensions).length > 0 ? extensions : undefined;\n    }\n\n    return jsonResponse(200, wire, ctx.headers);\n  }\n}\n","import { ATHENA_AUTH_TABLES } from \"../../contract/index.ts\";\nimport { base64Url } from \"../../utils/base64.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\nimport { MemoryAuthStores } from \"../memory-stores.ts\";\n\nexport type AthenaPasskeyRegistrationMode = \"authenticated\" | \"onboarding\";\n\nexport interface AthenaPasskeyRegistrationTransaction {\n  challengeHash: Uint8Array;\n  consumedAt: Date | null;\n  context: unknown;\n  createdAt: Date;\n  expiresAt: Date;\n  id: string;\n  mode: AthenaPasskeyRegistrationMode;\n  rpId: string;\n  userHandle: Uint8Array;\n}\n\nexport interface AthenaPasskeyRegistrationTransactionCreate {\n  challengeHash: Uint8Array;\n  context?: unknown;\n  expiresAt: Date;\n  mode: AthenaPasskeyRegistrationMode;\n  rpId: string;\n  userHandle: Uint8Array;\n}\n\ninterface RegistrationTransactionRow {\n  challenge_hash: string;\n  consumed_at: Date | string | null;\n  context: string | null;\n  created_at: Date | string;\n  expires_at: Date | string;\n  id: string;\n  mode: string;\n  rp_id: string;\n  user_handle: string;\n}\n\nfunction asDate(value: Date | string | null | undefined): Date | null {\n  if (!value) {\n    return null;\n  }\n  return value instanceof Date ? value : new Date(value);\n}\n\nfunction encodeBytes(bytes: Uint8Array): string {\n  return base64Url.encode(bytes, { padding: false });\n}\n\nfunction decodeBytes(value: string): Uint8Array {\n  return base64Url.decode(value);\n}\n\nfunction parseContext(value: string | null): unknown {\n  if (!value) {\n    return;\n  }\n  try {\n    return JSON.parse(value) as unknown;\n  } catch {\n    /* invalid JSON */\n  }\n}\n\nfunction serializeContext(value: unknown): string | null {\n  if (value == null) {\n    return null;\n  }\n  return JSON.stringify(value);\n}\n\nfunction toTransaction(\n  row: RegistrationTransactionRow\n): AthenaPasskeyRegistrationTransaction {\n  return {\n    challengeHash: decodeBytes(row.challenge_hash),\n    consumedAt: asDate(row.consumed_at),\n    context: parseContext(row.context),\n    createdAt: asDate(row.created_at) ?? new Date(),\n    expiresAt: asDate(row.expires_at) ?? new Date(),\n    id: row.id,\n    mode: row.mode === \"onboarding\" ? \"onboarding\" : \"authenticated\",\n    rpId: row.rp_id,\n    userHandle: decodeBytes(row.user_handle),\n  };\n}\n\nfunction expiredError(): Error {\n  return new Error(\"passkey registration transaction expired\");\n}\n\nfunction consumedError(): Error {\n  return new Error(\"passkey registration transaction already consumed\");\n}\n\nfunction missingError(): Error {\n  return new Error(\"passkey registration transaction not found\");\n}\n\nexport class MemoryPasskeyRegistrationTransactionStore {\n  constructor(private readonly stores: MemoryAuthStores) {}\n\n  async create(\n    input: AthenaPasskeyRegistrationTransactionCreate\n  ): Promise<AthenaPasskeyRegistrationTransaction> {\n    const stamp = new Date();\n    const row: RegistrationTransactionRow = {\n      challenge_hash: encodeBytes(input.challengeHash),\n      consumed_at: null,\n      context: serializeContext(input.context),\n      created_at: stamp,\n      expires_at: input.expiresAt,\n      id: crypto.randomUUID(),\n      mode: input.mode,\n      rp_id: input.rpId,\n      user_handle: encodeBytes(input.userHandle),\n    };\n    for (const existing of this.stores.passkeyRegistrationTransactions.values()) {\n      if (existing.challenge_hash === row.challenge_hash) {\n        const error = new Error(\n          \"duplicate key value violates unique constraint\"\n        );\n        (error as { code?: string }).code = \"23505\";\n        throw error;\n      }\n    }\n    this.stores.passkeyRegistrationTransactions.set(row.id, row);\n    return toTransaction(row);\n  }\n\n  async findActive(input: {\n    challengeHash: Uint8Array;\n    rpId: string;\n  }): Promise<AthenaPasskeyRegistrationTransaction> {\n    const encoded = encodeBytes(input.challengeHash);\n    const now = Date.now();\n    for (const row of this.stores.passkeyRegistrationTransactions.values()) {\n      if (row.challenge_hash !== encoded || row.rp_id !== input.rpId) {\n        continue;\n      }\n      if (row.consumed_at) {\n        throw consumedError();\n      }\n      if ((asDate(row.expires_at)?.getTime() ?? 0) <= now) {\n        throw expiredError();\n      }\n      return toTransaction(row);\n    }\n    throw missingError();\n  }\n\n  async consume(input: {\n    challengeHash: Uint8Array;\n    rpId: string;\n  }): Promise<AthenaPasskeyRegistrationTransaction> {\n    const encoded = encodeBytes(input.challengeHash);\n    const now = Date.now();\n    for (const row of this.stores.passkeyRegistrationTransactions.values()) {\n      if (row.challenge_hash !== encoded || row.rp_id !== input.rpId) {\n        continue;\n      }\n      if (row.consumed_at) {\n        throw consumedError();\n      }\n      if ((asDate(row.expires_at)?.getTime() ?? 0) <= now) {\n        throw expiredError();\n      }\n      row.consumed_at = new Date();\n      return toTransaction(row);\n    }\n    throw missingError();\n  }\n}\n\nexport class PostgresPasskeyRegistrationTransactionStore {\n  constructor(private readonly db: AthenaAuthDatabase) {}\n\n  async create(\n    input: AthenaPasskeyRegistrationTransactionCreate\n  ): Promise<AthenaPasskeyRegistrationTransaction> {\n    const result = await this.db.query<RegistrationTransactionRow>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.passkeyRegistrationTransactions}\n        (id, challenge_hash, rp_id, user_handle, mode, context, expires_at, created_at)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, NOW())\n       RETURNING *`,\n      [\n        crypto.randomUUID(),\n        encodeBytes(input.challengeHash),\n        input.rpId,\n        encodeBytes(input.userHandle),\n        input.mode,\n        serializeContext(input.context),\n        input.expiresAt,\n      ]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Failed to create passkey registration transaction\");\n    }\n    return toTransaction(row);\n  }\n\n  async findActive(input: {\n    challengeHash: Uint8Array;\n    rpId: string;\n  }): Promise<AthenaPasskeyRegistrationTransaction> {\n    const result = await this.db.query<RegistrationTransactionRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.passkeyRegistrationTransactions}\n        WHERE challenge_hash = $1 AND rp_id = $2`,\n      [encodeBytes(input.challengeHash), input.rpId]\n    );\n    const found = result.rows[0];\n    if (!found) {\n      throw missingError();\n    }\n    if (found.consumed_at) {\n      throw consumedError();\n    }\n    if ((asDate(found.expires_at)?.getTime() ?? 0) <= Date.now()) {\n      throw expiredError();\n    }\n    return toTransaction(found);\n  }\n\n  async consume(input: {\n    challengeHash: Uint8Array;\n    rpId: string;\n  }): Promise<AthenaPasskeyRegistrationTransaction> {\n    const result = await this.db.query<RegistrationTransactionRow>(\n      `UPDATE ${ATHENA_AUTH_TABLES.passkeyRegistrationTransactions}\n          SET consumed_at = NOW()\n        WHERE challenge_hash = $1\n          AND rp_id = $2\n          AND consumed_at IS NULL\n          AND expires_at > NOW()\n        RETURNING *`,\n      [encodeBytes(input.challengeHash), input.rpId]\n    );\n    const row = result.rows[0];\n    if (row) {\n      return toTransaction(row);\n    }\n    const existing = await this.db.query<RegistrationTransactionRow>(\n      `SELECT * FROM ${ATHENA_AUTH_TABLES.passkeyRegistrationTransactions}\n        WHERE challenge_hash = $1 AND rp_id = $2`,\n      [encodeBytes(input.challengeHash), input.rpId]\n    );\n    const found = existing.rows[0];\n    if (!found) {\n      throw missingError();\n    }\n    if (found.consumed_at) {\n      throw consumedError();\n    }\n    throw expiredError();\n  }\n}\n\nfunction resolvePostgresDatabase(storesOrDb: object): AthenaAuthDatabase {\n  if (\n    \"query\" in storesOrDb &&\n    typeof (storesOrDb as AthenaAuthDatabase).query === \"function\"\n  ) {\n    return storesOrDb as AthenaAuthDatabase;\n  }\n  const nested = (storesOrDb as { db?: unknown }).db;\n  if (\n    nested &&\n    typeof nested === \"object\" &&\n    \"query\" in nested &&\n    typeof (nested as AthenaAuthDatabase).query === \"function\"\n  ) {\n    return nested as AthenaAuthDatabase;\n  }\n  throw new Error(\"passkey registration transactions require a database\");\n}\n\nexport function createPasskeyRegistrationTransactionStore(\n  storesOrDb: MemoryAuthStores | object\n):\n  | MemoryPasskeyRegistrationTransactionStore\n  | PostgresPasskeyRegistrationTransactionStore {\n  if (storesOrDb instanceof MemoryAuthStores) {\n    return new MemoryPasskeyRegistrationTransactionStore(storesOrDb);\n  }\n  return new PostgresPasskeyRegistrationTransactionStore(\n    resolvePostgresDatabase(storesOrDb)\n  );\n}\n","/**\n * Session-required passkey management:\n * GET /passkey/list-user-passkeys\n * POST /passkey/delete-passkey\n * POST /passkey/update-passkey\n */\nimport type { NormalizedAthenaAuthConfig } from \"../../config.ts\";\nimport type { AuthDomainMutate } from \"../../hooks/execute.ts\";\nimport { sanitizeHookPasskey } from \"../../hooks/sanitize.ts\";\nimport type { AthenaStoredPasskey } from \"../../passkey/server/types.ts\";\nimport { countRemainingAuthenticationMethods } from \"../credential-viability.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AthenaAuthStores } from \"../memory-stores.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"../models.ts\";\nimport { readJsonBody } from \"../security.ts\";\nimport { createPasskeyRepository } from \"./repository.ts\";\nimport { toPasskeyView } from \"./view.ts\";\n\nexport interface ManagePasskeysContext {\n  config: NormalizedAthenaAuthConfig;\n  headers: Headers;\n  hookRequest: (\n    request: Request,\n    path: string\n  ) => {\n    ipAddress?: string;\n    method: string;\n    path: string;\n    userAgent?: string;\n  };\n  mutate: AuthDomainMutate;\n  requireSession: (\n    request: Request,\n    stores: AthenaAuthStores\n  ) => Promise<{ session: AuthSessionRow; token: string; user: AuthUserRow }>;\n  stores: AthenaAuthStores;\n  traceId: string;\n}\n\nfunction requireNonEmptyString(value: unknown, field: string): string {\n  if (typeof value !== \"string\" || value.trim().length === 0) {\n    throw AthenaAuthRuntimeError.badRequest(`${field} is required`);\n  }\n  return value.trim();\n}\n\nfunction mapPasskeyNotFound(error: unknown): never {\n  if (\n    error instanceof Error &&\n    error.message.toLowerCase().includes(\"passkey not found\")\n  ) {\n    throw AthenaAuthRuntimeError.notFound(\"Passkey not found\");\n  }\n  throw error;\n}\n\nasync function loadOwnedPasskey(\n  stores: AthenaAuthStores,\n  userId: string,\n  id: string\n): Promise<AthenaStoredPasskey> {\n  const rows = await createPasskeyRepository(stores).listByUser(userId);\n  const row = rows.find((item) => item.id === id);\n  if (!row) {\n    throw AthenaAuthRuntimeError.notFound(\"Passkey not found\");\n  }\n  return row;\n}\n\nfunction identifyingPasskey(row: AthenaStoredPasskey) {\n  return sanitizeHookPasskey({\n    createdAt: row.createdAt,\n    id: row.id,\n    name: row.name,\n    userId: row.userId,\n  });\n}\n\nexport async function handleListUserPasskeysRoute(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: ManagePasskeysContext\n): Promise<Response | undefined> {\n  if (path === \"/passkey/list-user-passkeys\" && method === \"GET\") {\n    const { user } = await ctx.requireSession(request, ctx.stores);\n    const rows = await createPasskeyRepository(ctx.stores).listByUser(user.id);\n    return jsonResponse(\n      200,\n      rows.map((row) => toPasskeyView(row)),\n      ctx.headers\n    );\n  }\n}\n\nexport async function handleDeletePasskeyRoute(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: ManagePasskeysContext\n): Promise<Response | undefined> {\n  if (path === \"/passkey/delete-passkey\" && method === \"POST\") {\n    const { user } = await ctx.requireSession(request, ctx.stores);\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const id = requireNonEmptyString(body.id, \"id\");\n    const existing = await loadOwnedPasskey(ctx.stores, user.id, id);\n    const remaining = await countRemainingAuthenticationMethods(\n      ctx.stores,\n      user.id,\n      { passkeyId: id }\n    );\n    if (remaining <= 0) {\n      throw new AthenaAuthRuntimeError(\n        409,\n        \"Cannot delete the last authentication method\",\n        { code: \"ATHENA_AUTH_LAST_AUTHENTICATION_METHOD\" }\n      );\n    }\n    try {\n      await ctx.mutate({\n        context: {\n          actor: { kind: \"user\", userId: user.id },\n          request: ctx.hookRequest(request, path),\n          traceId: ctx.traceId,\n        },\n        event: \"passkey.delete\",\n        execute: async (scope) => {\n          await createPasskeyRepository(scope.stores).delete({\n            id,\n            userId: user.id,\n          });\n        },\n        input: { id },\n        previous: async () => ({ passkey: identifyingPasskey(existing) }),\n        resultOf: () => ({\n          deleted: true as const,\n          id,\n          userId: user.id,\n        }),\n      });\n    } catch (error) {\n      mapPasskeyNotFound(error);\n    }\n    return jsonResponse(200, { status: true }, ctx.headers);\n  }\n}\n\nexport async function handleUpdatePasskeyRoute(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: ManagePasskeysContext\n): Promise<Response | undefined> {\n  if (path === \"/passkey/update-passkey\" && method === \"POST\") {\n    const { user } = await ctx.requireSession(request, ctx.stores);\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const id = requireNonEmptyString(body.id, \"id\");\n    const name = requireNonEmptyString(body.name, \"name\");\n    const existing = await loadOwnedPasskey(ctx.stores, user.id, id);\n    try {\n      const updated = await ctx.mutate({\n        context: {\n          actor: { kind: \"user\", userId: user.id },\n          request: ctx.hookRequest(request, path),\n          traceId: ctx.traceId,\n        },\n        event: \"passkey.update\",\n        execute: (scope) =>\n          createPasskeyRepository(scope.stores).updateName({\n            id,\n            name,\n            userId: user.id,\n          }),\n        input: { id, name },\n        previous: async () => ({ passkey: identifyingPasskey(existing) }),\n        resultOf: (row) => ({ passkey: identifyingPasskey(row) }),\n      });\n      return jsonResponse(\n        200,\n        { passkey: toPasskeyView(updated) },\n        ctx.headers\n      );\n    } catch (error) {\n      mapPasskeyNotFound(error);\n    }\n  }\n}\n","/**\n * Shared last-viable-authentication-method authority for passkey delete\n * and social unlink. Count remaining accounts + passkeys after an optional\n * exclusion. Do not keep a second Social-only policy.\n */\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\nimport { createPasskeyRepository } from \"./passkey/repository.ts\";\n\nexport async function countRemainingAuthenticationMethods(\n  stores: AthenaAuthStores,\n  userId: string,\n  exclude?: { accountId?: string; passkeyId?: string }\n): Promise<number> {\n  const accounts = (await stores.listAccounts(userId)).filter(\n    (account) => account.id !== exclude?.accountId\n  );\n  const passkeys = (\n    await createPasskeyRepository(stores).listByUser(userId)\n  ).filter((row) => row.id !== exclude?.passkeyId);\n  return accounts.length + passkeys.length;\n}\n","import { resolvePasskeyAuthenticatorDisplay } from \"../../passkey/metadata/index.ts\";\nimport type { AthenaStoredPasskey } from \"../../passkey/server/types.ts\";\nimport type { AthenaPasskeyRecord } from \"../../types.ts\";\n\nfunction asTransportList(\n  transports: readonly string[] | string | null | undefined\n): string[] {\n  if (Array.isArray(transports)) {\n    return transports.filter(\n      (entry): entry is string => typeof entry === \"string\" && entry.length > 0\n    );\n  }\n  if (typeof transports === \"string\" && transports.trim()) {\n    try {\n      const parsed: unknown = JSON.parse(transports);\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 [transports];\n    }\n  }\n  return [];\n}\n\nexport function toPasskeyView(\n  stored: AthenaStoredPasskey,\n  transports?: string | null\n): AthenaPasskeyRecord {\n  const listed = asTransportList(\n    transports === undefined ? stored.transports : transports\n  );\n  const resolved = resolvePasskeyAuthenticatorDisplay({\n    aaguid: stored.aaguid,\n    backedUp: stored.backedUp,\n    deviceType: stored.deviceType,\n    name: stored.name,\n    residentKey: stored.residentKey,\n    transports: listed,\n  });\n  const authenticator: AthenaPasskeyRecord[\"authenticator\"] = {\n    backedUp: stored.backedUp,\n    deviceType: stored.deviceType,\n    displayName: resolved.displayName,\n    residentKey: stored.residentKey,\n    transports: listed,\n  };\n  if (resolved.vendor) {\n    authenticator.vendor = resolved.vendor;\n  }\n  if (resolved.model) {\n    authenticator.model = resolved.model;\n  }\n  const view: AthenaPasskeyRecord = {\n    authenticator,\n    createdAt: stored.createdAt.toISOString(),\n    id: stored.id,\n    name: stored.name,\n    userId: stored.userId,\n  };\n  if (stored.updatedAt) {\n    view.updatedAt = stored.updatedAt.toISOString();\n  }\n  return view;\n}\n","/**\n * Local GET /.well-known/webauthn.\n * Origins come from the RP snapshot only — never request Host.\n */\nimport type { AthenaPasskeyRelyingParty } from \"../../passkey/server/types.ts\";\nimport { jsonResponse } from \"../errors.ts\";\n\nexport async function handleRelatedOriginsRoute(\n  _request: Request,\n  path: string,\n  method: string,\n  ctx: {\n    headers: Headers;\n    relyingParty: AthenaPasskeyRelyingParty | undefined;\n  }\n): Promise<Response | undefined> {\n  if (path === \"/.well-known/webauthn\" && method === \"GET\") {\n    return jsonResponse(\n      200,\n      { origins: [...(ctx.relyingParty?.relatedOrigins ?? [])] },\n      ctx.headers\n    );\n  }\n}\n","/**\n * Local POST /passkey/verify-authentication.\n * Public. Consumes hash-only authentication challenge after credential lookup.\n */\nimport {\n  type AuthenticationResponseJSON,\n  type AuthenticatorTransportFuture,\n  verifyAuthenticationResponse,\n} from \"@simplewebauthn/server\";\nimport { isoBase64URL } from \"@simplewebauthn/server/helpers\";\n\nimport type { NormalizedAthenaAuthConfig } from \"../../config.ts\";\nimport type { AuthDomainMutate } from \"../../hooks/execute.ts\";\nimport { sanitizeHookSession } from \"../../hooks/sanitize.ts\";\nimport { requireUserVerificationFromPolicy } from \"../../passkey/policy.ts\";\nimport type { AthenaPasskeyRelyingParty } from \"../../passkey/server/types.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AthenaAuthStores } from \"../memory-stores.ts\";\nimport {\n  type AuthSessionRow,\n  toPublicSession,\n  toPublicUser,\n} from \"../models.ts\";\nimport { readJsonBody } from \"../security.ts\";\nimport { createPasskeyChallengeStore } from \"./challenge-store.ts\";\nimport { createPasskeyRepository } from \"./repository.ts\";\nimport {\n  asPasskeyRecord,\n  challengeHashFromClientData,\n  normalizeWebAuthnResponsePayload,\n} from \"./wire.ts\";\n\nexport interface VerifyAuthenticationContext {\n  config: NormalizedAthenaAuthConfig;\n  headers: Headers;\n  hookRequest: (\n    request: Request,\n    path: string\n  ) => {\n    ipAddress?: string;\n    method: string;\n    path: string;\n    userAgent?: string;\n  };\n  issueSession: (\n    request: Request,\n    stores: AthenaAuthStores,\n    userId: string\n  ) => Promise<AuthSessionRow>;\n  mutate: AuthDomainMutate;\n  relyingParty: AthenaPasskeyRelyingParty | undefined;\n  stores: AthenaAuthStores;\n  traceId: string;\n}\n\nfunction toAuthenticationResponseJSON(\n  credential: Record<string, unknown>\n): AuthenticationResponseJSON {\n  const id = typeof credential.id === \"string\" ? credential.id : \"\";\n  const rawId = typeof credential.rawId === \"string\" ? credential.rawId : id;\n  const nested = asPasskeyRecord(credential.response);\n  const clientDataJSON =\n    typeof nested?.clientDataJSON === \"string\" ? nested.clientDataJSON : \"\";\n  const authenticatorData =\n    typeof nested?.authenticatorData === \"string\"\n      ? nested.authenticatorData\n      : \"\";\n  const signature =\n    typeof nested?.signature === \"string\" ? nested.signature : \"\";\n  const userHandle =\n    typeof nested?.userHandle === \"string\" ? nested.userHandle : undefined;\n  if (!(id && clientDataJSON && authenticatorData && signature)) {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"Invalid passkey authentication response\"\n    );\n  }\n  return {\n    clientExtensionResults:\n      asPasskeyRecord(credential.clientExtensionResults) ?? {},\n    id,\n    rawId,\n    response: {\n      authenticatorData,\n      clientDataJSON,\n      signature,\n      ...(userHandle ? { userHandle } : {}),\n    },\n    type: \"public-key\",\n  };\n}\n\nasync function consumeAuthenticationChallenge(input: {\n  challengeHash: Uint8Array;\n  rpId: string;\n  stores: AthenaAuthStores;\n  userId: string;\n}): Promise<void> {\n  const store = createPasskeyChallengeStore(input.stores);\n  try {\n    await store.consume({\n      challengeHash: input.challengeHash,\n      purpose: \"authentication\",\n      rpId: input.rpId,\n      userId: input.userId,\n    });\n    return;\n  } catch (error) {\n    if (error instanceof AthenaAuthRuntimeError) {\n      throw error;\n    }\n  }\n  try {\n    await store.consume({\n      challengeHash: input.challengeHash,\n      purpose: \"authentication\",\n      rpId: input.rpId,\n      userId: null,\n    });\n  } catch {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"Passkey authentication challenge is invalid or expired\"\n    );\n  }\n}\n\nexport async function handleVerifyAuthenticationRoute(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: VerifyAuthenticationContext\n): Promise<Response | undefined> {\n  if (path === \"/passkey/verify-authentication\" && method === \"POST\") {\n    const rp = ctx.relyingParty;\n    if (!rp) {\n      throw new AthenaAuthRuntimeError(\n        500,\n        \"Passkey relying party snapshot is not configured\",\n        { code: \"ATHENA_RUNTIME_CONFIG_INVALID\" }\n      );\n    }\n\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const credential = normalizeWebAuthnResponsePayload(\n      asPasskeyRecord(body)?.response ?? body,\n      \"passkey authentication response\"\n    );\n    const authenticationResponse = toAuthenticationResponseJSON(credential);\n    const { challenge, challengeHash } = await challengeHashFromClientData(\n      authenticationResponse.response.clientDataJSON\n    );\n\n    let credentialId: Uint8Array;\n    try {\n      credentialId = isoBase64URL.toBuffer(authenticationResponse.id);\n    } catch {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Invalid passkey authentication response\"\n      );\n    }\n\n    const repository = createPasskeyRepository(ctx.stores);\n    const stored = await repository.findByCredentialId(credentialId);\n    if (!stored) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Passkey not found for credential\"\n      );\n    }\n\n    const user = await ctx.stores.getUserById(stored.userId);\n    if (!user) {\n      throw AthenaAuthRuntimeError.notFound(\"User not found\");\n    }\n\n    let newCounter: number;\n    try {\n      const verified = await verifyAuthenticationResponse({\n        credential: {\n          counter: Number(stored.counter),\n          id: authenticationResponse.id,\n          publicKey: new Uint8Array(stored.publicKey),\n          transports: stored.transports as AuthenticatorTransportFuture[],\n        },\n        expectedChallenge: challenge,\n        expectedOrigin: [...rp.origins],\n        expectedRPID: rp.id,\n        requireUserVerification: requireUserVerificationFromPolicy(\n          ctx.config.passkey.authentication.userVerification\n        ),\n        response: authenticationResponse,\n      });\n      if (verified.verified !== true) {\n        throw new Error(\"unverified\");\n      }\n      newCounter = verified.authenticationInfo.newCounter;\n    } catch (error) {\n      if (error instanceof AthenaAuthRuntimeError) {\n        throw error;\n      }\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Passkey authentication ceremony is invalid\"\n      );\n    }\n\n    const received = BigInt(newCounter);\n    if (\n      !(stored.counter === 0n && received === 0n) &&\n      received <= stored.counter\n    ) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Passkey signature counter regression\"\n      );\n    }\n\n    const session = await ctx.mutate({\n      context: {\n        actor: { kind: \"user\", userId: stored.userId },\n        request: ctx.hookRequest(request, path),\n        traceId: ctx.traceId,\n      },\n      event: \"session.issue\",\n      execute: async (scope) => {\n        await consumeAuthenticationChallenge({\n          challengeHash,\n          rpId: rp.id,\n          stores: scope.stores,\n          userId: stored.userId,\n        });\n        if (!(stored.counter === 0n && received === 0n)) {\n          try {\n            await createPasskeyRepository(scope.stores).updateCounter({\n              credentialId: stored.credentialId,\n              expected: stored.counter,\n              next: received,\n            });\n          } catch (error) {\n            if (error instanceof AthenaAuthRuntimeError) {\n              throw error;\n            }\n            throw AthenaAuthRuntimeError.badRequest(\n              \"Passkey signature counter regression\"\n            );\n          }\n        }\n        return ctx.issueSession(request, scope.stores, stored.userId);\n      },\n      input: { userId: stored.userId },\n      resultOf: (issued) => ({ session: sanitizeHookSession(issued) }),\n    });\n\n    const refreshed = (await ctx.stores.getUserById(stored.userId)) ?? user;\n    return jsonResponse(\n      200,\n      {\n        session: toPublicSession(session),\n        token: session.token,\n        user: toPublicUser(refreshed),\n      },\n      ctx.headers\n    );\n  }\n}\n","import {\n  decodeClientDataJSON,\n  isoBase64URL,\n} from \"@simplewebauthn/server/helpers\";\n\nimport { AthenaAuthRuntimeError } from \"../errors.ts\";\n\nexport function asPasskeyRecord(\n  value: unknown\n): Record<string, unknown> | undefined {\n  if (value && typeof value === \"object\" && !Array.isArray(value)) {\n    return value as Record<string, unknown>;\n  }\n}\n\nfunction parseJsonValue(value: unknown, label: string): unknown {\n  if (typeof value !== \"string\") {\n    return value;\n  }\n  try {\n    return JSON.parse(value) as unknown;\n  } catch {\n    throw AthenaAuthRuntimeError.badRequest(`Invalid ${label}`);\n  }\n}\n\n/** Rust `normalize_webauthn_response_payload`: string JSON + unwrap nested `response` until `id`. */\nexport function normalizeWebAuthnResponsePayload(\n  raw: unknown,\n  label: string\n): Record<string, unknown> {\n  let payload: unknown = parseJsonValue(raw, label);\n  for (let index = 0; index < 3; index++) {\n    const object = asPasskeyRecord(payload);\n    if (!object) {\n      throw AthenaAuthRuntimeError.badRequest(`Invalid ${label}`);\n    }\n    if (typeof object.id === \"string\" && object.id.length > 0) {\n      return object;\n    }\n    if (!(\"response\" in object)) {\n      throw AthenaAuthRuntimeError.badRequest(`Invalid ${label}`);\n    }\n    payload = parseJsonValue(object.response, label);\n  }\n  throw AthenaAuthRuntimeError.badRequest(`Invalid ${label}`);\n}\n\nfunction toArrayBufferBytes(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n  const copy = new Uint8Array(bytes.byteLength);\n  copy.set(bytes);\n  return copy;\n}\n\nexport async function challengeHashFromClientData(\n  clientDataJSON: string\n): Promise<{ challenge: string; challengeHash: Uint8Array }> {\n  let challenge: string;\n  try {\n    const clientData = decodeClientDataJSON(clientDataJSON);\n    if (typeof clientData.challenge !== \"string\" || !clientData.challenge) {\n      throw new Error(\"missing challenge\");\n    }\n    challenge = clientData.challenge;\n  } catch {\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid clientDataJSON\");\n  }\n  let challengeBytes: Uint8Array;\n  try {\n    challengeBytes = isoBase64URL.toBuffer(challenge);\n  } catch {\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid clientDataJSON\");\n  }\n  return {\n    challenge,\n    challengeHash: new Uint8Array(\n      await crypto.subtle.digest(\"SHA-256\", toArrayBufferBytes(challengeBytes))\n    ),\n  };\n}\n","/**\n * Local POST /passkey/verify-registration.\n * Wraps @simplewebauthn/server verifyRegistrationResponse (no CBOR/COSE by hand).\n * Do not import from src/browser.ts or passkey/browser.\n *\n * Do not load the server-only package here: this module is reached from\n * `v3-client.ts` → `src/index.ts`. That marker poisons Next Client Components\n * that resolve `@xylex-group/athena` to dist/index.js (webpack / OpenNext).\n */\nimport {\n  type AuthenticatorTransportFuture,\n  type RegistrationResponseJSON,\n  type VerifiedRegistrationResponse,\n  verifyRegistrationResponse,\n} from \"@simplewebauthn/server\";\nimport {\n  decodeAttestationObject,\n  decodeClientDataJSON,\n  isoBase64URL,\n  parseAuthenticatorData,\n} from \"@simplewebauthn/server/helpers\";\n\nimport type {\n  AthenaPasskeyCeremonyContext,\n  AthenaPasskeyOnboardingResolution,\n  NormalizedAthenaAuthConfig,\n} from \"../../config.ts\";\nimport { resolveAthenaPasskeyOnboardingUser } from \"../../config.ts\";\nimport type { AuthDomainMutate } from \"../../hooks/execute.ts\";\nimport {\n  sanitizeHookPasskey,\n  sanitizeHookSession,\n  sanitizeHookUser,\n} from \"../../hooks/sanitize.ts\";\nimport { normalizePasskeyAaguid } from \"../../passkey/aaguid.ts\";\nimport { mapPasskeyAuthenticatorMetadata } from \"../../passkey/metadata.ts\";\nimport {\n  normalizeCredPropsResidentKey,\n  requireUserVerificationFromPolicy,\n} from \"../../passkey/policy.ts\";\nimport type {\n  AthenaPasskeyRelyingParty,\n  AthenaStoredPasskey,\n} from \"../../passkey/server/types.ts\";\nimport { parseStoredPasskeyTransports } from \"../../passkey/transports.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AthenaAuthStores } from \"../memory-stores.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"../models.ts\";\nimport { toPublicSession, toPublicUser } from \"../models.ts\";\nimport { readJsonBody } from \"../security.ts\";\nimport { createPasskeyChallengeStore } from \"./challenge-store.ts\";\nimport { createPasskeyRegistrationTransactionStore } from \"./registration-transaction.ts\";\nimport { createPasskeyRepository } from \"./repository.ts\";\nimport { toPasskeyView } from \"./view.ts\";\n\nexport interface VerifyRegistrationContext {\n  config: NormalizedAthenaAuthConfig;\n  headers: Headers;\n  hookRequest: (\n    request: Request,\n    path: string\n  ) => {\n    ipAddress?: string;\n    method: string;\n    path: string;\n    userAgent?: string;\n  };\n  issueSession: (\n    request: Request,\n    stores: AthenaAuthStores,\n    userId: string\n  ) => Promise<AuthSessionRow>;\n  mutate: AuthDomainMutate;\n  relyingParty: AthenaPasskeyRelyingParty | undefined;\n  resolveOnboardingUser?: (\n    context: AthenaPasskeyCeremonyContext\n  ) =>\n    | AthenaPasskeyOnboardingResolution\n    | Promise<AthenaPasskeyOnboardingResolution>;\n  resolveSession: (\n    request: Request,\n    stores: AthenaAuthStores\n  ) => Promise<{\n    session: AuthSessionRow;\n    token: string;\n    user: AuthUserRow;\n  } | null>;\n  stores: AthenaAuthStores;\n  traceId: string;\n}\n\nfunction isUniqueViolation(error: unknown): boolean {\n  return Boolean(\n    error &&\n      typeof error === \"object\" &&\n      \"code\" in error &&\n      (error as { code?: string }).code === \"23505\"\n  );\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  if (value && typeof value === \"object\" && !Array.isArray(value)) {\n    return value as Record<string, unknown>;\n  }\n}\n\nfunction parseJsonValue(value: unknown, label: string): unknown {\n  if (typeof value !== \"string\") {\n    return value;\n  }\n  try {\n    return JSON.parse(value) as unknown;\n  } catch {\n    throw AthenaAuthRuntimeError.badRequest(`Invalid ${label}`);\n  }\n}\n\n/** Rust `normalize_webauthn_response_payload`: string JSON + unwrap nested `response` until `id`. */\nfunction normalizeWebAuthnResponsePayload(\n  raw: unknown\n): Record<string, unknown> {\n  let payload: unknown = parseJsonValue(raw, \"passkey registration response\");\n  for (let index = 0; index < 3; index++) {\n    const object = asRecord(payload);\n    if (!object) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Invalid passkey registration response\"\n      );\n    }\n    if (typeof object.id === \"string\" && object.id.length > 0) {\n      return object;\n    }\n    if (!(\"response\" in object)) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Invalid passkey registration response\"\n      );\n    }\n    payload = parseJsonValue(object.response, \"passkey registration response\");\n  }\n  throw AthenaAuthRuntimeError.badRequest(\n    \"Invalid passkey registration response\"\n  );\n}\n\nfunction readClientTransports(\n  credential: Record<string, unknown>\n): string[] | undefined {\n  const nested = asRecord(credential.response);\n  const raw = Array.isArray(nested?.transports)\n    ? nested.transports\n    : Array.isArray(credential.transports)\n      ? credential.transports\n      : undefined;\n  if (!raw) {\n    return;\n  }\n  const listed = raw.filter(\n    (entry): entry is string => typeof entry === \"string\" && entry.length > 0\n  );\n  return listed.length > 0 ? listed : undefined;\n}\n\nfunction toRegistrationResponseJSON(\n  credential: Record<string, unknown>\n): RegistrationResponseJSON {\n  const id = typeof credential.id === \"string\" ? credential.id : \"\";\n  const rawId = typeof credential.rawId === \"string\" ? credential.rawId : id;\n  const nested = asRecord(credential.response);\n  const clientDataJSON =\n    typeof nested?.clientDataJSON === \"string\" ? nested.clientDataJSON : \"\";\n  const attestationObject =\n    typeof nested?.attestationObject === \"string\"\n      ? nested.attestationObject\n      : \"\";\n  if (!(id && clientDataJSON)) {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"Invalid passkey registration response\"\n    );\n  }\n  if (!attestationObject) {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"Invalid passkey registration response\"\n    );\n  }\n  const transports = readClientTransports(credential);\n  return {\n    clientExtensionResults: asRecord(credential.clientExtensionResults) ?? {},\n    id,\n    rawId,\n    response: {\n      attestationObject,\n      clientDataJSON,\n      ...(transports\n        ? { transports: [...transports] as AuthenticatorTransportFuture[] }\n        : {}),\n    },\n    type: \"public-key\",\n  };\n}\n\nfunction toArrayBufferBytes(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n  const copy = new Uint8Array(bytes.byteLength);\n  copy.set(bytes);\n  return copy;\n}\n\nasync function challengeHashFromClientData(\n  clientDataJSON: string\n): Promise<{ challenge: string; challengeHash: Uint8Array }> {\n  let challenge: string;\n  try {\n    const clientData = decodeClientDataJSON(clientDataJSON);\n    if (typeof clientData.challenge !== \"string\" || !clientData.challenge) {\n      throw new Error(\"missing challenge\");\n    }\n    challenge = clientData.challenge;\n  } catch {\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid clientDataJSON\");\n  }\n  let challengeBytes: Uint8Array;\n  try {\n    challengeBytes = isoBase64URL.toBuffer(challenge);\n  } catch {\n    throw AthenaAuthRuntimeError.badRequest(\"Invalid clientDataJSON\");\n  }\n  return {\n    challenge,\n    challengeHash: new Uint8Array(\n      await crypto.subtle.digest(\"SHA-256\", toArrayBufferBytes(challengeBytes))\n    ),\n  };\n}\n\nfunction flagsAndAaguidFromVerifiedAttestation(attestationObject: Uint8Array): {\n  aaguid: string | null;\n  flags: number;\n} {\n  const decoded = decodeAttestationObject(\n    toArrayBufferBytes(attestationObject)\n  );\n  const parsed = parseAuthenticatorData(decoded.get(\"authData\"));\n  const aaguidSource =\n    \"aaguid\" in parsed ? (parsed as { aaguid?: unknown }).aaguid : undefined;\n  return {\n    aaguid: normalizePasskeyAaguid(aaguidSource),\n    flags: parsed.flags.flagsInt,\n  };\n}\n\nfunction asStringField(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction defaultResolveOnboardingUser(\n  context: AthenaPasskeyCeremonyContext\n): AthenaPasskeyOnboardingResolution {\n  try {\n    return resolveAthenaPasskeyOnboardingUser(context);\n  } catch (error) {\n    const message =\n      error instanceof Error ? error.message : \"Passkey onboarding failed\";\n    throw AthenaAuthRuntimeError.badRequest(message);\n  }\n}\n\nfunction overlayName(body: Record<string, unknown>): string | null {\n  return typeof body.name === \"string\" ? body.name : null;\n}\n\nfunction mapRegistrationTransactionError(error: unknown): never {\n  if (error instanceof AthenaAuthRuntimeError) {\n    throw error;\n  }\n  const message = error instanceof Error ? error.message : \"\";\n  if (message.includes(\"already consumed\")) {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"Passkey onboarding transaction was already completed\"\n    );\n  }\n  throw AthenaAuthRuntimeError.badRequest(\n    \"Passkey registration challenge is invalid or expired\"\n  );\n}\n\nexport async function handleVerifyRegistrationRoute(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: VerifyRegistrationContext\n): Promise<Response | undefined> {\n  if (path === \"/passkey/verify-registration\" && method === \"POST\") {\n    const rp = ctx.relyingParty;\n    if (!rp) {\n      throw new AthenaAuthRuntimeError(\n        500,\n        \"Passkey relying party snapshot is not configured\",\n        { code: \"ATHENA_RUNTIME_CONFIG_INVALID\" }\n      );\n    }\n\n    const session = await ctx.resolveSession(request, ctx.stores);\n    if (\n      !session &&\n      (request.headers.get(\"authorization\") || request.headers.get(\"cookie\"))\n    ) {\n      throw AthenaAuthRuntimeError.sessionNotFound();\n    }\n    const onboarding = !session && ctx.config.passkey.onboardingEnabled;\n    if (!(session || onboarding)) {\n      throw AthenaAuthRuntimeError.unauthenticated();\n    }\n\n    const body = await readJsonBody(\n      request,\n      ctx.config.security.bodyLimitBytes\n    );\n    const credential = normalizeWebAuthnResponsePayload(body.response);\n    const registrationResponse = toRegistrationResponseJSON(credential);\n    const { challenge, challengeHash } = await challengeHashFromClientData(\n      registrationResponse.response.clientDataJSON\n    );\n\n    const transactions = createPasskeyRegistrationTransactionStore(ctx.stores);\n    if (session) {\n      try {\n        await createPasskeyChallengeStore(ctx.stores).consume({\n          challengeHash,\n          purpose: \"registration\",\n          rpId: rp.id,\n          userId: session.user.id,\n        });\n      } catch (error) {\n        if (error instanceof AthenaAuthRuntimeError) {\n          throw error;\n        }\n        throw AthenaAuthRuntimeError.badRequest(\n          \"Passkey registration challenge is invalid or expired\"\n        );\n      }\n    } else {\n      try {\n        await transactions.findActive({ challengeHash, rpId: rp.id });\n      } catch (error) {\n        mapRegistrationTransactionError(error);\n      }\n    }\n\n    const requireUserVerification = requireUserVerificationFromPolicy(\n      session\n        ? ctx.config.passkey.registration.userVerification\n        : ctx.config.passkey.registration.userVerification\n    );\n    let verified: VerifiedRegistrationResponse;\n    try {\n      verified = await verifyRegistrationResponse({\n        expectedChallenge: challenge,\n        expectedOrigin: [...rp.origins],\n        expectedRPID: rp.id,\n        requireUserVerification,\n        response: registrationResponse,\n      });\n    } catch {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Passkey registration ceremony is invalid\"\n      );\n    }\n    if (verified.verified !== true || !verified.registrationInfo) {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Passkey registration ceremony is invalid\"\n      );\n    }\n\n    const info = verified.registrationInfo;\n    let flags: number;\n    let aaguid: string | null;\n    try {\n      const parsed = flagsAndAaguidFromVerifiedAttestation(\n        info.attestationObject\n      );\n      flags = parsed.flags;\n      aaguid =\n        parsed.aaguid ??\n        normalizePasskeyAaguid((info as { aaguid?: unknown }).aaguid);\n    } catch {\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Passkey registration ceremony is invalid\"\n      );\n    }\n\n    const mapped = mapPasskeyAuthenticatorMetadata({\n      flags,\n      transports: readClientTransports(credential),\n    });\n    const credentialId = isoBase64URL.toBuffer(info.credential.id);\n    const residentKey = normalizeCredPropsResidentKey(\n      registrationResponse.clientExtensionResults\n    );\n    const passkeyCreateBase = {\n      aaguid,\n      backedUp: mapped.backedUp,\n      counter: BigInt(info.credential.counter),\n      credentialId,\n      deviceType: mapped.deviceType,\n      name: overlayName(body),\n      publicKey: new Uint8Array(info.credential.publicKey),\n      residentKey,\n      transports: (parseStoredPasskeyTransports(mapped.transports) ??\n        []) as AthenaStoredPasskey[\"transports\"],\n    };\n\n    if (session) {\n      let stored: AthenaStoredPasskey;\n      try {\n        stored = await ctx.mutate({\n          context: {\n            actor: { kind: \"user\", userId: session.user.id },\n            request: ctx.hookRequest(request, path),\n            traceId: ctx.traceId,\n          },\n          event: \"passkey.register\",\n          execute: (scope) =>\n            createPasskeyRepository(scope.stores).create({\n              ...passkeyCreateBase,\n              userId: session.user.id,\n            }),\n          input: { userId: session.user.id },\n          resultOf: (row) => ({\n            passkey: sanitizeHookPasskey({\n              id: row.id,\n              name: row.name ?? overlayName(body),\n              userId: row.userId,\n            }),\n          }),\n        });\n      } catch (error) {\n        if (isUniqueViolation(error)) {\n          throw AthenaAuthRuntimeError.badRequest(\n            \"Passkey credential already registered\"\n          );\n        }\n        throw error;\n      }\n      return jsonResponse(\n        200,\n        toPasskeyView(stored, mapped.transports),\n        ctx.headers\n      );\n    }\n\n    const pending = await transactions.findActive({\n      challengeHash,\n      rpId: rp.id,\n    });\n    const mergedContext = {\n      ...(asRecord(pending.context) ?? {}),\n      ...(asStringField(body.email)\n        ? { email: asStringField(body.email) }\n        : {}),\n      ...(asStringField(body.name) ? { name: asStringField(body.name) } : {}),\n    };\n    let resolution: AthenaPasskeyOnboardingResolution;\n    try {\n      resolution = ctx.resolveOnboardingUser\n        ? await ctx.resolveOnboardingUser(mergedContext)\n        : defaultResolveOnboardingUser(mergedContext);\n    } catch (error) {\n      if (error instanceof AthenaAuthRuntimeError) {\n        throw error;\n      }\n      throw AthenaAuthRuntimeError.badRequest(\n        \"Passkey onboarding user resolution failed\"\n      );\n    }\n\n    interface OnboardingResult {\n      session?: AuthSessionRow;\n      stored: AthenaStoredPasskey;\n      user: AuthUserRow;\n    }\n    let completed: OnboardingResult;\n    try {\n      completed = await ctx.mutate({\n        context: {\n          actor: { kind: \"user\" },\n          request: ctx.hookRequest(request, path),\n          traceId: ctx.traceId,\n        },\n        event: \"passkey.register\",\n        execute: async (scope) => {\n          await createPasskeyRegistrationTransactionStore(scope.stores).consume(\n            { challengeHash, rpId: rp.id }\n          );\n          let user: AuthUserRow | undefined;\n          if (\"existingUserId\" in resolution) {\n            user = await scope.stores.getUserById(resolution.existingUserId);\n            if (!user) {\n              throw AthenaAuthRuntimeError.badRequest(\n                \"Passkey onboarding user was not found\"\n              );\n            }\n          } else {\n            if (await scope.stores.getUserByEmail(resolution.create.email)) {\n              throw AthenaAuthRuntimeError.conflict(\n                \"A user with this email already exists\"\n              );\n            }\n            user = await scope.stores.createUser({\n              email: resolution.create.email,\n              id: crypto.randomUUID(),\n              name:\n                resolution.create.name ??\n                resolution.create.email.split(\"@\")[0] ??\n                resolution.create.email,\n            });\n          }\n          if (!user) {\n            throw AthenaAuthRuntimeError.badRequest(\n              \"Passkey onboarding user was not found\"\n            );\n          }\n          const stored = await createPasskeyRepository(scope.stores).create({\n            ...passkeyCreateBase,\n            userId: user.id,\n          });\n          if (!ctx.config.passkey.onboardingCreateSession) {\n            return { stored, user };\n          }\n          const issued = await ctx.issueSession(request, scope.stores, user.id);\n          return { session: issued, stored, user };\n        },\n        input: {\n          userId:\n            \"existingUserId\" in resolution\n              ? resolution.existingUserId\n              : resolution.create.email,\n        },\n        resultOf: ({ stored }) => ({\n          passkey: sanitizeHookPasskey({\n            id: stored.id,\n            name: stored.name ?? overlayName(body),\n            userId: stored.userId,\n          }),\n        }),\n        secondaryEvents: ({ session, user }) => {\n          const extras = [];\n          if (\"create\" in resolution) {\n            extras.push({\n              event: \"user.create\" as const,\n              input: {\n                email: user.email ?? resolution.create.email,\n                name: user.name ?? resolution.create.name,\n              },\n              result: { user: sanitizeHookUser(user) },\n            });\n          }\n          if (session) {\n            extras.push({\n              event: \"session.issue\" as const,\n              input: { userId: session.user_id },\n              result: { session: sanitizeHookSession(session) },\n            });\n          }\n          return extras;\n        },\n      });\n    } catch (error) {\n      if (isUniqueViolation(error)) {\n        throw AthenaAuthRuntimeError.badRequest(\n          \"Passkey credential already registered\"\n        );\n      }\n      if (error instanceof AthenaAuthRuntimeError) {\n        throw error;\n      }\n      const message = error instanceof Error ? error.message : \"\";\n      if (\n        message.includes(\"already consumed\") ||\n        message.includes(\"expired\") ||\n        message.includes(\"not found\")\n      ) {\n        mapRegistrationTransactionError(error);\n      }\n      throw error;\n    }\n\n    if (!completed.session) {\n      return jsonResponse(\n        200,\n        {\n          passkey: toPasskeyView(completed.stored, mapped.transports),\n          session: null,\n          token: null,\n          user: toPublicUser(completed.user),\n        },\n        ctx.headers\n      );\n    }\n    return jsonResponse(\n      200,\n      {\n        passkey: toPasskeyView(completed.stored, mapped.transports),\n        session: toPublicSession(completed.session),\n        token: completed.session.token,\n        user: toPublicUser(completed.user),\n      },\n      ctx.headers\n    );\n  }\n}\n","/**\n * Canonical AAGUID text: lowercase UUID, or null when absent/unspecified.\n * Never persist a raw WebAuthn Buffer on the public DTO.\n */\n\nconst UUID_RE = /^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/;\nconst HEX_32_RE = /^[\\da-f]{32}$/;\nconst UNSPECIFIED = \"00000000-0000-0000-0000-000000000000\";\n\nfunction toHexByte(value: number): string {\n  return value.toString(16).padStart(2, \"0\");\n}\n\nfunction uuidFrom16Bytes(bytes: Uint8Array): string {\n  const hex = Array.from(bytes, toHexByte).join(\"\");\n  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;\n}\n\nfunction uuidFromHex(hex: string): string {\n  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;\n}\n\n/**\n * Normalize a verified authenticator AAGUID to canonical UUID text.\n * Unspecified all-zero and empty values become null.\n */\nexport function normalizePasskeyAaguid(value: unknown): string | null {\n  if (value == null) {\n    return null;\n  }\n  if (value instanceof Uint8Array) {\n    if (value.byteLength !== 16) {\n      return null;\n    }\n    const uuid = uuidFrom16Bytes(value);\n    return uuid === UNSPECIFIED ? null : uuid;\n  }\n  if (typeof value !== \"string\") {\n    return null;\n  }\n  const trimmed = value.trim().toLowerCase();\n  if (!trimmed) {\n    return null;\n  }\n  if (UUID_RE.test(trimmed)) {\n    return trimmed === UNSPECIFIED ? null : trimmed;\n  }\n  const hex = trimmed.replaceAll(\"-\", \"\");\n  if (!HEX_32_RE.test(hex)) {\n    return null;\n  }\n  const uuid = uuidFromHex(hex);\n  return uuid === UNSPECIFIED ? null : uuid;\n}\n","import {\n  normalizeAuthBridgeDestinationOrigin,\n  normalizeAuthBridgeRedirectPath,\n} from \"../../bridge/code.ts\";\nimport { issueAuthBridgeCode } from \"../../bridge/service.ts\";\nimport {\n  sanitizeHookAccount,\n  sanitizeHookSession,\n  sanitizeHookUser,\n} from \"../../hooks/sanitize.ts\";\nimport type { OAuth2Tokens } from \"../../oauth2/types.ts\";\nimport {\n  AthenaSocialOAuthProviderMixupError,\n  AthenaSocialServerError,\n} from \"../../social/server/errors.ts\";\nimport { resolveSocialProvider } from \"../../social/server/provider-registry.ts\";\nimport {\n  resolveSocialCallbackUri,\n  validatePostAuthRedirect,\n} from \"../../social/server/redirect.ts\";\nimport type { OAuthTransactionRecord } from \"../../social/server/transaction-store.ts\";\nimport { sha256Hex } from \"../../social/server/transaction-store.ts\";\nimport { isUserEffectivelyBanned } from \"../admin-contract.ts\";\nimport type { AuthProcedureContext } from \"../credential-password-routes.ts\";\nimport { countRemainingAuthenticationMethods } from \"../credential-viability.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AuthAccountRow, AuthUserRow } from \"../models.ts\";\nimport {\n  asStringField,\n  readJsonBody,\n  requireStringField,\n} from \"../security.ts\";\nimport { openPkceEnvelope } from \"./pkce-encryption.ts\";\nimport type { AthenaEmbeddedSocialRuntime } from \"./runtime.ts\";\n\nfunction socialIdTokenNonceMatches(\n  claim: string,\n  nonceHash: string,\n  hashedClaim: string\n): boolean {\n  return hashedClaim === nonceHash || claim === nonceHash;\n}\n\nfunction socialError(error: unknown): AthenaAuthRuntimeError {\n  if (error instanceof AthenaAuthRuntimeError) {\n    return error;\n  }\n  if (error instanceof AthenaSocialServerError) {\n    const mixup = error instanceof AthenaSocialOAuthProviderMixupError;\n    return new AthenaAuthRuntimeError(400, error.message, {\n      cause: error,\n      code: error.code,\n      internalMessage: mixup ? \"OAuth provider mix-up\" : error.message,\n    });\n  }\n  return AthenaAuthRuntimeError.internal(error);\n}\n\nfunction redirectPolicyContext(\n  trustedOrigins: readonly string[],\n  origin?: string\n) {\n  return {\n    origin,\n    production: process.env.NODE_ENV === \"production\",\n    trustedOrigins,\n  };\n}\n\nconst FORBIDDEN_LOCATION_QUERY = /(?:^|[?&])(?:token|session|bearer)=/i;\n\nfunction assertSafePostAuthLocation(location: string): string {\n  if (FORBIDDEN_LOCATION_QUERY.test(location)) {\n    throw new AthenaAuthRuntimeError(\n      400,\n      \"OAuth callback redirect must not include a session bearer\",\n      { code: \"ATHENA_AUTH_REDIRECT_UNTRUSTED\" }\n    );\n  }\n  return location;\n}\n\nfunction safeLocationRedirect(headers: Headers, location: string): Response {\n  headers.set(\"Location\", assertSafePostAuthLocation(location));\n  return new Response(null, { headers, status: 302 });\n}\n\nasync function finishSocialPostAuthRedirect(\n  ctx: AuthProcedureContext,\n  request: Request,\n  destination: string,\n  session?: { id: string; userId: string } | null\n): Promise<Response> {\n  const { deps, headers } = ctx;\n  const requestOrigin = new URL(request.url).origin;\n  const dest = new URL(destination);\n  if (dest.origin === requestOrigin) {\n    return safeLocationRedirect(headers, dest.toString());\n  }\n  if (!(deps.config.bridge.enabled && session)) {\n    return safeLocationRedirect(headers, dest.toString());\n  }\n  const destinationOrigin = normalizeAuthBridgeDestinationOrigin(dest.origin);\n  const redirectPath = normalizeAuthBridgeRedirectPath(\n    `${dest.pathname}${dest.search}`\n  );\n  const ttlMs = deps.config.bridge.codeTtlSeconds * 1000;\n  const issued = await issueAuthBridgeCode({\n    destinationOrigin,\n    expiresAt: new Date(Date.now() + ttlMs),\n    redirectPath,\n    sessionId: session.id,\n    store: deps.getBridgeCodeStore(),\n    userId: session.userId,\n  });\n  const bridged = new URL(redirectPath, destinationOrigin);\n  bridged.searchParams.set(\"bridge_code\", issued.code);\n  return safeLocationRedirect(headers, bridged.toString());\n}\n\nasync function runUserSignInSocial(\n  ctx: AuthProcedureContext,\n  input: {\n    email?: string | null;\n    emailVerified?: boolean;\n    name?: string | null;\n    provider: string;\n    providerUserId: string;\n    request: Request;\n  }\n) {\n  const { deps, headers, traceId } = ctx;\n  return deps.mutate({\n    context: {\n      actor: { kind: \"user\" },\n      request: deps.hookRequest(input.request, `/callback/${input.provider}`),\n      traceId,\n    },\n    event: \"user.sign-in.social\",\n    execute: async (scope) => {\n      const resolved = await resolveOrCreateSocialAccount(scope.stores, {\n        email: input.email,\n        emailVerified: input.emailVerified,\n        intent: \"sign-in\",\n        name: input.name,\n        providerId: input.provider,\n        providerUserId: input.providerUserId,\n      });\n      if (isUserEffectivelyBanned(resolved.user)) {\n        throw AthenaAuthRuntimeError.forbidden(\"User is banned\");\n      }\n      const session = await deps.issueSession(\n        input.request,\n        scope.stores,\n        resolved.user.id,\n        headers,\n        { methods: [\"social\"] }\n      );\n      const user =\n        (await scope.stores.getUserById(resolved.user.id)) ?? resolved.user;\n      return { account: resolved.account, session, user };\n    },\n    input: { provider: input.provider },\n    resultOf: ({ account, session, user }) => ({\n      account: sanitizeHookAccount(account),\n      session: sanitizeHookSession(session),\n      user: sanitizeHookUser(user),\n    }),\n    secondaryEvents: ({ session }) => [\n      {\n        event: \"session.issue\" as const,\n        input: { userId: session.user_id },\n        result: { session: sanitizeHookSession(session) },\n      },\n    ],\n  });\n}\n\nasync function runAccountLink(\n  ctx: AuthProcedureContext,\n  input: {\n    email?: string | null;\n    emailVerified?: boolean;\n    name?: string | null;\n    provider: string;\n    providerUserId: string;\n    request: Request;\n    userId: string;\n  }\n) {\n  const { deps, traceId } = ctx;\n  return deps.mutate({\n    context: {\n      actor: { kind: \"user\", userId: input.userId },\n      request: deps.hookRequest(input.request, \"/link-social\"),\n      traceId,\n    },\n    event: \"account.link\",\n    execute: async (scope) => {\n      const resolved = await resolveOrCreateSocialAccount(scope.stores, {\n        email: input.email,\n        emailVerified: input.emailVerified,\n        intent: \"link\",\n        name: input.name,\n        providerId: input.provider,\n        providerUserId: input.providerUserId,\n        userId: input.userId,\n      });\n      return { account: resolved.account, user: resolved.user };\n    },\n    input: { provider: input.provider, userId: input.userId },\n    resultOf: ({ account, user }) => ({\n      account: sanitizeHookAccount(account),\n      user: sanitizeHookUser(user),\n    }),\n  });\n}\n\nfunction findUnlinkAccount(\n  accounts: readonly AuthAccountRow[],\n  input: { accountId?: string; providerId?: string }\n): AuthAccountRow | undefined {\n  return accounts.find((row) => {\n    const matchesRowId = Boolean(input.accountId) && row.id === input.accountId;\n    const matchesProviderSubject =\n      Boolean(input.accountId) && row.account_id === input.accountId;\n    const matchesProvider =\n      Boolean(input.providerId) && row.provider_id === input.providerId;\n    const matchesId = matchesRowId || matchesProviderSubject;\n    if (input.accountId && input.providerId) {\n      return matchesId && matchesProvider;\n    }\n    if (input.accountId) {\n      return matchesId;\n    }\n    return matchesProvider;\n  });\n}\n\nasync function runAccountUnlink(\n  ctx: AuthProcedureContext,\n  input: {\n    accountId?: string;\n    providerId?: string;\n    request: Request;\n    userId: string;\n  }\n) {\n  const { deps, traceId } = ctx;\n  return deps.mutate({\n    context: {\n      actor: { kind: \"user\", userId: input.userId },\n      request: deps.hookRequest(input.request, \"/unlink-account\"),\n      traceId,\n    },\n    event: \"account.unlink\",\n    execute: async (scope) => {\n      const accounts = await scope.stores.listAccounts(input.userId);\n      const account = findUnlinkAccount(accounts, input);\n      if (!account) {\n        throw AthenaAuthRuntimeError.notFound(\"Account not found\");\n      }\n      const remaining = await countRemainingAuthenticationMethods(\n        scope.stores,\n        input.userId,\n        { accountId: account.id }\n      );\n      if (remaining <= 0) {\n        throw new AthenaAuthRuntimeError(\n          400,\n          \"Cannot unlink the last credential\",\n          { code: \"ATHENA_AUTH_LAST_CREDENTIAL\" }\n        );\n      }\n      await scope.stores.deleteAccount(account.id);\n      return {\n        accountId: account.id,\n        deleted: true as const,\n        id: account.id,\n        provider: account.provider_id,\n        userId: account.user_id,\n      };\n    },\n    input: {\n      accountId: input.accountId ?? \"\",\n      provider: input.providerId ?? \"\",\n      userId: input.userId,\n    },\n    previous: async () => {\n      const accounts = await ctx.stores.listAccounts(input.userId);\n      const account = findUnlinkAccount(accounts, input);\n      if (!account) {\n        throw AthenaAuthRuntimeError.notFound(\"Account not found\");\n      }\n      return { account: sanitizeHookAccount(account) };\n    },\n    resultOf: (result) =>\n      result as {\n        accountId: string;\n        deleted: true;\n        id: string;\n        provider: string;\n        userId: string;\n      },\n  });\n}\n\nasync function resolveOrCreateSocialAccount(\n  stores: AuthProcedureContext[\"stores\"],\n  input: {\n    email?: string | null;\n    emailVerified?: boolean;\n    intent: \"link\" | \"sign-in\";\n    name?: string | null;\n    providerId: string;\n    providerUserId: string;\n    userId?: string | null;\n  }\n): Promise<{ account: AuthAccountRow; created: boolean; user: AuthUserRow }> {\n  const existing = await stores.findAccountByProvider(\n    input.providerId,\n    input.providerUserId\n  );\n  if (existing) {\n    if (\n      input.intent === \"link\" &&\n      input.userId &&\n      existing.user_id !== input.userId\n    ) {\n      throw new AthenaAuthRuntimeError(\n        409,\n        \"Social account is already linked to another user\",\n        { code: \"ATHENA_AUTH_ACCOUNT_LINK_CONFLICT\" }\n      );\n    }\n    const user = await stores.getUserById(existing.user_id);\n    if (!user) {\n      throw AthenaAuthRuntimeError.internal(\n        new Error(\"linked social account is missing its user\")\n      );\n    }\n    return { account: existing, created: false, user };\n  }\n\n  if (input.intent === \"link\") {\n    if (!input.userId) {\n      throw new AthenaAuthRuntimeError(\n        401,\n        \"Linking a social account requires the current user\",\n        { code: \"ATHENA_AUTH_OAUTH_LINK_USER_REQUIRED\" }\n      );\n    }\n    const user = await stores.getUserById(input.userId);\n    if (!user) {\n      throw AthenaAuthRuntimeError.unauthenticated();\n    }\n    const account = await stores.createAccount({\n      accountId: input.providerUserId,\n      id: crypto.randomUUID(),\n      providerId: input.providerId,\n      userId: user.id,\n    });\n    return { account, created: true, user };\n  }\n\n  let user: AuthUserRow | undefined;\n  if (input.email) {\n    user = await stores.getUserByEmail(input.email);\n  }\n  if (!user) {\n    user = await stores.createUser({\n      email: input.email ?? undefined,\n      emailVerified: input.emailVerified === true,\n      id: crypto.randomUUID(),\n      name: input.name ?? undefined,\n    });\n  }\n  const account = await stores.createAccount({\n    accountId: input.providerUserId,\n    id: crypto.randomUUID(),\n    providerId: input.providerId,\n    userId: user.id,\n  });\n  return { account, created: true, user };\n}\n\nasync function exchangeSocialIdentity(\n  runtime: AthenaEmbeddedSocialRuntime,\n  transaction: OAuthTransactionRecord,\n  code: string\n): Promise<{\n  email?: string | null;\n  emailVerified?: boolean;\n  id: string;\n  name?: string | null;\n} | null> {\n  const provider = resolveSocialProvider(\n    runtime.social,\n    transaction.providerId\n  );\n  const envelope = await openPkceEnvelope(\n    transaction.pkceVerifierCiphertext,\n    runtime.secret\n  );\n  let tokens: OAuth2Tokens | null;\n  try {\n    tokens = await provider.validateAuthorizationCode({\n      code,\n      codeVerifier: envelope.verifier,\n      redirectURI: transaction.redirectUri,\n    });\n  } catch (error) {\n    throw new AthenaAuthRuntimeError(400, \"OAuth token exchange failed\", {\n      cause: error,\n      code: \"ATHENA_AUTH_OAUTH_TOKEN_EXCHANGE_FAILED\",\n    });\n  }\n  if (!tokens) {\n    throw new AthenaAuthRuntimeError(400, \"OAuth token exchange failed\", {\n      code: \"ATHENA_AUTH_OAUTH_TOKEN_EXCHANGE_FAILED\",\n    });\n  }\n  if (tokens.idToken) {\n    if (typeof provider.verifyIdToken !== \"function\") {\n      throw new AthenaAuthRuntimeError(400, \"Invalid ID token\", {\n        code: \"ATHENA_AUTH_OAUTH_ID_TOKEN_INVALID\",\n      });\n    }\n    const { decodeJwt } = await import(\"jose\");\n    const claims = decodeJwt(tokens.idToken) as { nonce?: unknown };\n    if (typeof claims.nonce !== \"string\" || claims.nonce.length === 0) {\n      throw new AthenaAuthRuntimeError(400, \"OIDC nonce mismatch\", {\n        code: \"ATHENA_AUTH_OAUTH_NONCE_MISMATCH\",\n      });\n    }\n    const hashed = await sha256Hex(claims.nonce);\n    if (\n      !socialIdTokenNonceMatches(claims.nonce, transaction.nonceHash, hashed)\n    ) {\n      throw new AthenaAuthRuntimeError(400, \"OIDC nonce mismatch\", {\n        code: \"ATHENA_AUTH_OAUTH_NONCE_MISMATCH\",\n      });\n    }\n    let verified = false;\n    try {\n      verified = await provider.verifyIdToken(tokens.idToken, claims.nonce);\n    } catch {\n      verified = false;\n    }\n    if (!verified) {\n      throw new AthenaAuthRuntimeError(400, \"Invalid ID token\", {\n        code: \"ATHENA_AUTH_OAUTH_ID_TOKEN_INVALID\",\n      });\n    }\n  }\n  const profile = await provider.getUserInfo(tokens);\n  const id = profile?.user.id;\n  if (id === undefined || id === null || String(id).length === 0) {\n    return null;\n  }\n  return {\n    email: profile?.user.email,\n    emailVerified: profile?.user.emailVerified,\n    id: String(id),\n    name: profile?.user.name,\n  };\n}\n\nasync function handleSocialCallback(\n  request: Request,\n  path: string,\n  ctx: AuthProcedureContext\n): Promise<Response> {\n  const { deps } = ctx;\n  const provider =\n    path === \"/callback/{provider}\" ? \"\" : path.slice(\"/callback/\".length);\n  if (!provider) {\n    throw AthenaAuthRuntimeError.badRequest(\"provider is required\");\n  }\n  const { code, state } = await readCallbackParams(request);\n  if (!(code && state)) {\n    throw new AthenaAuthRuntimeError(400, \"code and state are required\", {\n      code: \"ATHENA_AUTH_OAUTH_CALLBACK_INVALID\",\n    });\n  }\n  const runtime = await deps.getSocialRuntime();\n  if (!runtime) {\n    throw new AthenaAuthRuntimeError(\n      501,\n      \"Social authentication is not configured\",\n      { code: \"ATHENA_AUTH_SOCIAL_NOT_CONFIGURED\" }\n    );\n  }\n  let transaction: OAuthTransactionRecord;\n  try {\n    transaction = (await runtime.engine.consumeTransaction({\n      provider,\n      state,\n    })) as OAuthTransactionRecord;\n  } catch (error) {\n    throw socialError(error);\n  }\n  const envelope = await openPkceEnvelope(\n    transaction.pkceVerifierCiphertext,\n    runtime.secret\n  );\n  const postAuth =\n    envelope.postAuthRedirect ??\n    deps.config.security.trustedOrigins[0] ??\n    new URL(request.url).origin;\n  let destination: string;\n  try {\n    destination = validatePostAuthRedirect(\n      postAuth,\n      redirectPolicyContext(\n        deps.config.security.trustedOrigins,\n        new URL(request.url).origin\n      )\n    );\n  } catch (error) {\n    throw socialError(error);\n  }\n\n  if (transaction.providerId !== provider) {\n    throw new AthenaSocialOAuthProviderMixupError();\n  }\n\n  const identity = await exchangeSocialIdentity(runtime, transaction, code);\n  if (!identity) {\n    throw new AthenaAuthRuntimeError(400, \"OAuth userinfo failed\", {\n      code: \"ATHENA_AUTH_OAUTH_USERINFO_FAILED\",\n    });\n  }\n\n  if (transaction.intent === \"link\") {\n    await runAccountLink(ctx, {\n      email: identity.email,\n      emailVerified: identity.emailVerified,\n      name: identity.name,\n      provider,\n      providerUserId: identity.id,\n      request,\n      userId: transaction.userId ?? \"\",\n    });\n    return finishSocialPostAuthRedirect(ctx, request, destination);\n  }\n\n  const issued = await runUserSignInSocial(ctx, {\n    email: identity.email,\n    emailVerified: identity.emailVerified,\n    name: identity.name,\n    provider,\n    providerUserId: identity.id,\n    request,\n  });\n  return finishSocialPostAuthRedirect(ctx, request, destination, {\n    id: issued.session.id,\n    userId: issued.session.user_id,\n  });\n}\n\nasync function readCallbackParams(\n  request: Request\n): Promise<{ code: string; state: string }> {\n  if (request.method === \"POST\") {\n    const contentType = request.headers.get(\"content-type\") ?? \"\";\n    if (\n      contentType.includes(\"application/x-www-form-urlencoded\") ||\n      contentType.includes(\"multipart/form-data\")\n    ) {\n      const form = await request.formData();\n      return {\n        code: String(form.get(\"code\") ?? \"\").trim(),\n        state: String(form.get(\"state\") ?? \"\").trim(),\n      };\n    }\n  }\n  const params = new URL(request.url).searchParams;\n  return {\n    code: params.get(\"code\")?.trim() ?? \"\",\n    state: params.get(\"state\")?.trim() ?? \"\",\n  };\n}\n\nexport async function handleSocialRoutes(\n  request: Request,\n  path: string,\n  method: string,\n  ctx: AuthProcedureContext\n): Promise<Response | undefined> {\n  const { deps, headers, stores } = ctx;\n  const trusted = deps.config.security.trustedOrigins;\n\n  if (\n    (method === \"GET\" || method === \"POST\") &&\n    (path === \"/callback/{provider}\" || /^\\/callback\\/[^/]+$/.test(path))\n  ) {\n    try {\n      return await handleSocialCallback(request, path, ctx);\n    } catch (error) {\n      if (error instanceof AthenaSocialOAuthProviderMixupError) {\n        throw socialError(error);\n      }\n      throw socialError(error);\n    }\n  }\n\n  if (path === \"/sign-in/social\" && method === \"POST\") {\n    const body = await readJsonBody(\n      request,\n      deps.config.security.bodyLimitBytes\n    );\n    const provider = requireStringField(body, \"provider\");\n    const callbackURL = requireStringField(body, \"callbackURL\");\n    let postAuth: string;\n    try {\n      postAuth = validatePostAuthRedirect(\n        callbackURL,\n        redirectPolicyContext(trusted, new URL(request.url).origin)\n      );\n    } catch (error) {\n      throw socialError(error);\n    }\n    const runtime = await deps.getSocialRuntime();\n    if (!runtime) {\n      throw new AthenaAuthRuntimeError(\n        501,\n        \"Social authentication is not configured\",\n        { code: \"ATHENA_AUTH_SOCIAL_NOT_CONFIGURED\" }\n      );\n    }\n    const redirectUri = resolveSocialCallbackUri({\n      basePath: deps.config.basePath,\n      baseURL: new URL(request.url).origin,\n      provider,\n    });\n    try {\n      const started = await runtime.engine.startAuthorization({\n        intent: \"sign-in\",\n        postAuthRedirect: postAuth,\n        provider,\n        redirectUri,\n      });\n      return jsonResponse(200, { redirect: true, url: started.url }, headers);\n    } catch (error) {\n      throw socialError(error);\n    }\n  }\n\n  if (path === \"/link-social\" && method === \"POST\") {\n    const { user } = await deps.requireSession(request, stores);\n    const body = await readJsonBody(\n      request,\n      deps.config.security.bodyLimitBytes\n    );\n    const provider = requireStringField(body, \"provider\");\n    const callbackURL = requireStringField(body, \"callbackURL\");\n    let postAuth: string;\n    try {\n      postAuth = validatePostAuthRedirect(\n        callbackURL,\n        redirectPolicyContext(trusted, new URL(request.url).origin)\n      );\n    } catch (error) {\n      throw socialError(error);\n    }\n    const runtime = await deps.getSocialRuntime();\n    if (!runtime) {\n      throw new AthenaAuthRuntimeError(\n        501,\n        \"Social authentication is not configured\",\n        { code: \"ATHENA_AUTH_SOCIAL_NOT_CONFIGURED\" }\n      );\n    }\n    const redirectUri = resolveSocialCallbackUri({\n      basePath: deps.config.basePath,\n      baseURL: new URL(request.url).origin,\n      provider,\n    });\n    try {\n      const started = await runtime.engine.startAuthorization({\n        intent: \"link\",\n        postAuthRedirect: postAuth,\n        provider,\n        redirectUri,\n        userId: user.id,\n      });\n      return jsonResponse(200, { redirect: true, url: started.url }, headers);\n    } catch (error) {\n      throw socialError(error);\n    }\n  }\n\n  if (path === \"/unlink-account\" && method === \"POST\") {\n    const { user } = await deps.requireSession(request, stores);\n    const body = await readJsonBody(\n      request,\n      deps.config.security.bodyLimitBytes\n    );\n    const providerId =\n      asStringField(body, \"providerId\") ?? asStringField(body, \"provider\");\n    const accountId = asStringField(body, \"accountId\");\n    await runAccountUnlink(ctx, {\n      accountId,\n      providerId,\n      request,\n      userId: user.id,\n    });\n    return jsonResponse(200, { status: true }, headers);\n  }\n}\n","/**\n * Internal social OAuth engine errors. Not a public Auth error family.\n * Do not export from package root.\n */\n\nexport class AthenaSocialServerError extends Error {\n  readonly code: string;\n\n  constructor(code: string, message: string) {\n    super(message);\n    this.name = \"AthenaSocialServerError\";\n    this.code = code;\n  }\n}\n\nexport class AthenaSocialServerNotWiredError extends AthenaSocialServerError {\n  constructor() {\n    super(\n      \"ATHENA_AUTH_SOCIAL_SERVER_NOT_WIRED\",\n      \"embedded social OAuth server engine is not wired for HTTP\"\n    );\n  }\n}\n\nexport class AthenaSocialOAuthProviderMixupError extends AthenaSocialServerError {\n  constructor() {\n    super(\n      \"ATHENA_AUTH_OAUTH_PROVIDER_MIXUP\",\n      \"OAuth provider mix-up: callback provider does not match the transaction\"\n    );\n  }\n}\n","import type { OAuthProvider } from \"../../oauth2/types.ts\";\nimport { socialProviders } from \"../../social-providers/registry.ts\";\nimport { AthenaSocialServerError } from \"./errors.ts\";\nimport {\n  createGenericOidcSocialProvider,\n  isGenericOidcProviderOptions,\n} from \"./generic-oidc-provider.ts\";\nimport type { NormalizedSocialAuthConfig } from \"./social-config.ts\";\n\nexport function resolveSocialProvider(\n  config: NormalizedSocialAuthConfig,\n  providerId: string\n): OAuthProvider {\n  const options = config.providers[providerId];\n  if (!options?.clientId?.trim()) {\n    throw new AthenaSocialServerError(\n      \"ATHENA_AUTH_OAUTH_PROVIDER_UNKNOWN\",\n      `social provider ${providerId} is not configured`\n    );\n  }\n  if (!options.clientSecret?.trim()) {\n    throw new AthenaSocialServerError(\n      \"ATHENA_AUTH_OAUTH_CLIENT_SECRET_REQUIRED\",\n      `social provider ${providerId} requires a client secret`\n    );\n  }\n  const factory = socialProviders[providerId as keyof typeof socialProviders];\n  if (typeof factory === \"function\") {\n    return factory({\n      ...options,\n      clientId: options.clientId,\n      clientSecret: options.clientSecret,\n    } as never);\n  }\n  if (isGenericOidcProviderOptions(options)) {\n    return createGenericOidcSocialProvider(providerId, options);\n  }\n  throw new AthenaSocialServerError(\n    \"ATHENA_AUTH_OAUTH_PROVIDER_UNKNOWN\",\n    `social provider ${providerId} is not in the registry`\n  );\n}\n","import * as z from \"zod\";\nimport type { AwaitableFunction } from \"../types/index.ts\";\nimport { apple } from \"./apple.ts\";\nimport { athena } from \"./athena.ts\";\nimport { atlassian } from \"./atlassian.ts\";\nimport { cognito } from \"./cognito.ts\";\nimport { discord } from \"./discord.ts\";\nimport { dropbox } from \"./dropbox.ts\";\nimport { facebook } from \"./facebook.ts\";\nimport { figma } from \"./figma.ts\";\nimport { github } from \"./github.ts\";\nimport { gitlab } from \"./gitlab.ts\";\nimport { google } from \"./google.ts\";\nimport { huggingface } from \"./huggingface.ts\";\nimport { kakao } from \"./kakao.ts\";\nimport { kick } from \"./kick.ts\";\nimport { line } from \"./line.ts\";\nimport { linear } from \"./linear.ts\";\nimport { linkedin } from \"./linkedin.ts\";\nimport { microsoft } from \"./microsoft-entra-id.ts\";\nimport { naver } from \"./naver.ts\";\nimport { notion } from \"./notion.ts\";\nimport { paybin } from \"./paybin.ts\";\nimport { paypal } from \"./paypal.ts\";\nimport { polar } from \"./polar.ts\";\nimport { railway } from \"./railway.ts\";\nimport { reddit } from \"./reddit.ts\";\nimport { roblox } from \"./roblox.ts\";\nimport { salesforce } from \"./salesforce.ts\";\nimport { slack } from \"./slack.ts\";\nimport { spotify } from \"./spotify.ts\";\nimport { tiktok } from \"./tiktok.ts\";\nimport { twitch } from \"./twitch.ts\";\nimport { twitter } from \"./twitter.ts\";\nimport { vercel } from \"./vercel.ts\";\nimport { vk } from \"./vk.ts\";\nimport { wechat } from \"./wechat.ts\";\nimport { zoom } from \"./zoom.ts\";\n\n/**\n * Built-in social / OAuth provider factories (Better Auth–compatible shape).\n * Includes first-party `athena` for the upcoming Athena Auth identity provider.\n */\nexport const socialProviders = {\n  apple,\n  athena,\n  atlassian,\n  cognito,\n  discord,\n  dropbox,\n  facebook,\n  figma,\n  github,\n  gitlab,\n  google,\n  huggingface,\n  kakao,\n  kick,\n  line,\n  linear,\n  linkedin,\n  microsoft,\n  naver,\n  notion,\n  paybin,\n  paypal,\n  polar,\n  railway,\n  reddit,\n  roblox,\n  salesforce,\n  slack,\n  spotify,\n  tiktok,\n  twitch,\n  twitter,\n  vercel,\n  vk,\n  wechat,\n  zoom,\n};\n\n/** Runtime list of built-in provider ids (includes `athena`). */\nexport const socialProviderList = Object.keys(socialProviders) as [\n  \"github\",\n  ...(keyof typeof socialProviders)[],\n];\n\n/**\n * Zod schema for a social provider id: any built-in key or open string\n * (custom providers via `(string & {})`).\n */\nexport const SocialProviderListEnum = z\n  .enum(socialProviderList)\n  .or(z.string()) as z.ZodType<SocialProviderList[number] | (string & {})>;\n\n/** Provider id string with autocomplete for built-ins and allowance for custom keys. */\nexport type SocialProvider = z.infer<typeof SocialProviderListEnum>;\n\n/**\n * Config map for enabling/configuring social providers on an auth instance.\n * Each key is optional; values may be options objects or async factories.\n */\nexport type SocialProviders = {\n  [K in SocialProviderList[number]]?: AwaitableFunction<\n    Parameters<(typeof socialProviders)[K]>[0] & {\n      enabled?: boolean | undefined;\n    }\n  >;\n};\n\n/** Tuple type of {@link socialProviderList}. */\nexport type SocialProviderList = typeof socialProviderList;\n","import { decodeJwt, decodeProtectedHeader, jwtVerify } from \"jose\";\nimport { logger } from \"../env/index.ts\";\nimport { AthenaAuthError } from \"../error.ts\";\nimport type { OAuthProvider } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  getPrimaryClientId,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\nimport { nonceMatches } from \"./apple-crypto.ts\";\nimport { getApplePublicKey } from \"./apple-keys.ts\";\nimport type { AppleOptions, AppleProfile } from \"./apple-types.ts\";\n\nexport { getApplePublicKey } from \"./apple-keys.ts\";\nexport type {\n  AppleNonConformUser,\n  AppleOptions,\n  AppleProfile,\n} from \"./apple-types.ts\";\n\n/**\n * Sign in with Apple OAuth provider factory.\n *\n * Uses `response_mode=form_post` and `code id_token` when requesting\n * name/email scopes (Apple REST API requirements).\n *\n * @param options - Apple Services ID / client secret configuration\n */\nexport const apple = (options: AppleOptions) => {\n  const tokenEndpoint = \"https://appleid.apple.com/auth/token\";\n  return {\n    async createAuthorizationURL({ state, scopes, redirectURI, codeVerifier }) {\n      if (!(getPrimaryClientId(options.clientId) && options.clientSecret)) {\n        logger.error(\n          \"Client ID and client secret are required for Apple. Make sure to provide them in the options.\"\n        );\n        throw new AthenaAuthError(\"CLIENT_ID_AND_SECRET_REQUIRED\");\n      }\n      const _scope = options.disableDefaultScope ? [] : [\"email\", \"name\"];\n      if (options.scope) {\n        _scope.push(...options.scope);\n      }\n      if (scopes) {\n        _scope.push(...scopes);\n      }\n      const url = await createAuthorizationURL({\n        authorizationEndpoint: \"https://appleid.apple.com/auth/authorize\",\n        codeVerifier,\n        id: \"apple\",\n        options,\n        redirectURI,\n        responseMode: \"form_post\",\n        responseType: \"code id_token\",\n        scopes: _scope,\n        state,\n      });\n      return url;\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      if (!token.idToken) {\n        return null;\n      }\n      const profile = decodeJwt<AppleProfile>(token.idToken);\n      if (!profile) {\n        return null;\n      }\n\n      // TODO: \"\" masking will be removed when the name field is made optional\n      let name: string;\n      if (token.user?.name) {\n        const firstName = token.user.name.firstName || \"\";\n        const lastName = token.user.name.lastName || \"\";\n        const fullName = `${firstName} ${lastName}`.trim();\n        name = fullName;\n      } else {\n        name = profile.name || \"\";\n      }\n\n      const emailVerified =\n        typeof profile.email_verified === \"boolean\"\n          ? profile.email_verified\n          : profile.email_verified === \"true\";\n      const enrichedProfile = {\n        ...profile,\n        name,\n      };\n      const userMap = await options.mapProfileToUser?.(enrichedProfile);\n      return {\n        data: enrichedProfile,\n        user: {\n          email: profile.email,\n          emailVerified,\n          id: profile.sub,\n          name: enrichedProfile.name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"apple\",\n    name: \"Apple\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options,\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n    async verifyIdToken(token, nonce) {\n      if (options.disableIdTokenSignIn) {\n        return false;\n      }\n      if (options.verifyIdToken) {\n        return options.verifyIdToken(token, nonce);\n      }\n      try {\n        const decodedHeader = decodeProtectedHeader(token);\n        const { kid, alg: jwtAlg } = decodedHeader;\n        if (!(kid && jwtAlg)) {\n          return false;\n        }\n        const publicKey = await getApplePublicKey(kid);\n        const { payload: jwtClaims } = await jwtVerify(token, publicKey, {\n          algorithms: [jwtAlg],\n          audience: options.audience?.length\n            ? options.audience\n            : options.appBundleIdentifier\n              ? options.appBundleIdentifier\n              : options.clientId,\n          issuer: \"https://appleid.apple.com\",\n          maxTokenAge: \"1h\",\n        });\n        [\"email_verified\", \"is_private_email\"].forEach((field) => {\n          if (jwtClaims[field] !== undefined) {\n            jwtClaims[field] = Boolean(jwtClaims[field]);\n          }\n        });\n        if (nonce && !(await nonceMatches(jwtClaims.nonce, nonce))) {\n          return false;\n        }\n        return !!jwtClaims;\n      } catch {\n        return false;\n      }\n    },\n  } satisfies OAuthProvider<AppleProfile>;\n};\n","export type { LogLevel } from \"./logger.ts\";\nexport { logger } from \"./logger.ts\";\n","export type LogLevel = \"debug\" | \"info\" | \"success\" | \"warn\" | \"error\";\n\nconst levels = [\"debug\", \"info\", \"success\", \"warn\", \"error\"] as const;\n\nfunction shouldPublishLog(current: LogLevel, level: LogLevel): boolean {\n  return levels.indexOf(level) >= levels.indexOf(current);\n}\n\nfunction resolveLogLevel(): LogLevel {\n  try {\n    const env = (\n      globalThis as { process?: { env?: { ATHENA_AUTH_LOG_LEVEL?: string } } }\n    ).process?.env?.ATHENA_AUTH_LOG_LEVEL;\n    if (\n      env === \"debug\" ||\n      env === \"info\" ||\n      env === \"warn\" ||\n      env === \"error\" ||\n      env === \"success\"\n    ) {\n      return env;\n    }\n  } catch {\n    // ignore non-Node environments\n  }\n  return \"warn\";\n}\n\nfunction log(\n  level: Exclude<LogLevel, \"success\">,\n  message: string,\n  ...args: unknown[]\n): void {\n  const current = resolveLogLevel();\n  if (!shouldPublishLog(current, level === \"info\" ? \"info\" : level)) {\n    return;\n  }\n\n  const fn =\n    level === \"error\"\n      ? console.error\n      : level === \"warn\"\n        ? console.warn\n        : console.log;\n  fn(`[athena-auth] ${message}`, ...args);\n}\n\nexport const logger = {\n  debug: (message: string, ...args: unknown[]) =>\n    log(\"debug\", message, ...args),\n  error: (message: string, ...args: unknown[]) =>\n    log(\"error\", message, ...args),\n  info: (message: string, ...args: unknown[]) => log(\"info\", message, ...args),\n  success: (message: string, ...args: unknown[]) =>\n    log(\"info\", message, ...args),\n  warn: (message: string, ...args: unknown[]) => log(\"warn\", message, ...args),\n};\n","export { APIError } from \"./api-error.ts\";\nexport { AthenaAuthError, BetterAuthError } from \"./athena-auth-error.ts\";\n","/**\n * Lightweight HTTP/API error used by social-provider helpers.\n *\n * Intentionally does not depend on better-call; status can be a number or\n * string label used by call sites for branching.\n */\nexport class APIError extends Error {\n  status: string | number;\n  statusCode: number;\n  body: Record<string, unknown> | undefined;\n  headers: Headers | undefined;\n\n  constructor(\n    status: string | number,\n    body?: { message?: string; code?: string; [key: string]: unknown } | string,\n    options?: { cause?: unknown }\n  ) {\n    const message =\n      typeof body === \"string\"\n        ? body\n        : (body?.message ??\n          (typeof status === \"string\" ? status : `HTTP ${status}`));\n    super(message, options);\n    this.name = \"APIError\";\n    this.status = status;\n    this.statusCode = typeof status === \"number\" ? status : 500;\n    this.body = typeof body === \"string\" ? { message: body } : body;\n    this.headers = undefined;\n  }\n\n  static fromStatus(\n    status: string | number,\n    body?: { message?: string; code?: string; [key: string]: unknown }\n  ): APIError {\n    return new APIError(status, body);\n  }\n\n  static from(\n    status: string | number,\n    error: { code: string; message: string }\n  ): APIError {\n    return new APIError(status, {\n      code: error.code,\n      message: error.message,\n    });\n  }\n}\n","/**\n * Athena Auth SDK error for configuration and invariant failures in\n * OAuth / social-provider flows.\n */\nexport class AthenaAuthError extends Error {\n  constructor(message: string, options?: { cause?: unknown | undefined }) {\n    super(message, options);\n    this.name = \"AthenaAuthError\";\n    this.message = message;\n    this.stack = \"\";\n  }\n}\n\n/** @deprecated Use {@link AthenaAuthError}. */\nexport const BetterAuthError = AthenaAuthError;\n","﻿export {\n  clientCredentialsToken,\n  clientCredentialsTokenRequest,\n  createClientCredentialsTokenRequest,\n} from \"./client-credentials-token.ts\";\nexport { createAuthorizationURL } from \"./create-authorization-url.ts\";\nexport {\n  createRefreshAccessTokenRequest,\n  refreshAccessToken,\n  refreshAccessTokenRequest,\n} from \"./refresh-access-token.ts\";\nexport type {\n  OAuth2Tokens,\n  OAuth2UserInfo,\n  OAuthProvider,\n  ProviderOptions,\n} from \"./types.ts\";\nexport {\n  applyDefaultAccessTokenExpiry,\n  generateCodeChallenge,\n  getOAuth2Tokens,\n  getPrimaryClientId,\n} from \"./utils.ts\";\nexport {\n  authorizationCodeRequest,\n  createAuthorizationCodeRequest,\n  validateAuthorizationCode,\n  validateToken,\n} from \"./validate-authorization-code.ts\";\nexport {\n  getJwks,\n  verifyAccessToken,\n  verifyJwsAccessToken,\n} from \"./verify.ts\";\n","// cspell:ignore workerd\n\nimport { AthenaAuthError } from \"../error.ts\";\nimport type { AthenaFetchOption as BetterFetchOption } from \"../fetch.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\n\nconst HTTP_REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);\n\n/**\n * Whether a response from a `redirect: \"manual\"` fetch is a redirect.\n *\n * Node/undici exposes the real 3xx status. Spec-compliant runtimes (Cloudflare\n * Workers, Deno, browsers) return an opaque-redirect filtered response with\n * status 0 and type `\"opaqueredirect\"`, so the status alone is not enough.\n *\n * @param response - OAuth 2.0 response\n * @returns Whether the response is a redirect\n */\nfunction isRedirectResponse(response: Response): boolean {\n  return (\n    response.type === \"opaqueredirect\" ||\n    HTTP_REDIRECT_STATUSES.has(response.status)\n  );\n}\n\n/**\n * @param endpoint - OAuth 2.0 endpoint\n * @returns Redirect refused error\n */\nfunction redirectRefused(endpoint: string): AthenaAuthError {\n  return new AthenaAuthError(\n    `The OAuth endpoint \"${endpoint}\" returned an HTTP redirect. Server-side OAuth fetches refuse redirects to prevent SSRF; configure the final endpoint URL.`\n  );\n}\n\n/**\n * Fetch option that refuses HTTP redirects portably.\n *\n * Cloudflare Workers (workerd) rejects `redirect: \"error\"`, so manual mode is\n * used and the resolved response is checked with {@link assertResponseNotRedirect}\n * (or, for betterFetch, with {@link fetchRefusingRedirects}).\n *\n * @returns Fetch options\n */\nexport const NO_FOLLOW_REDIRECT = { redirect: \"manual\" } as const;\n\n/**\n * Throw when a native-`fetch` response (e.g. jose's JWKS loader) resolved to a\n * redirect, so an attacker-influenced endpoint cannot bounce a server-side\n * request to an internal address.\n */\nexport function assertResponseNotRedirect(\n  endpoint: string,\n  response: Response\n): void {\n  if (isRedirectResponse(response)) {\n    throw redirectRefused(endpoint);\n  }\n}\n\n/**\n * betterFetch that refuses HTTP redirects on a server-side OAuth fetch.\n *\n * Returns the betterFetch result and throws if the endpoint redirected, on both\n * undici (real 3xx status) and spec-compliant runtimes (opaque redirect, where\n * the error status is 0). The redirect is never followed on any runtime.\n *\n * @param url - OAuth 2.0 endpoint\n * @param options - Fetch options\n * @returns Fetch result\n */\nexport async function fetchRefusingRedirects<T>(\n  url: string,\n  options?: BetterFetchOption\n) {\n  let redirected = false;\n  const result = await betterFetch<T>(url, {\n    ...options,\n    ...NO_FOLLOW_REDIRECT,\n    onError(context) {\n      if (isRedirectResponse(context.response)) {\n        redirected = true;\n      }\n    },\n  });\n  if (redirected) {\n    throw redirectRefused(url);\n  }\n  return result;\n}\n","export { athenaFetch, betterFetch } from \"./athena-fetch.ts\";\nexport { applyFetchQuery, normalizeFetchBody } from \"./body.ts\";\nexport type {\n  AthenaFetchError,\n  AthenaFetchOption,\n  AthenaFetchResult,\n  BetterFetchOption,\n} from \"./types.ts\";\n","import { applyFetchQuery, normalizeFetchBody } from \"./body.ts\";\nimport type { AthenaFetchOption, AthenaFetchResult } from \"./types.ts\";\n\n/**\n * Fetch JSON (or text) and return a better-fetch-like `{ data, error }` result.\n *\n * Used by social-provider token and userinfo calls. Does **not** use\n * `@better-fetch/fetch`.\n */\nexport async function athenaFetch<T = unknown>(\n  url: string,\n  options: AthenaFetchOption = {}\n): Promise<AthenaFetchResult<T>> {\n  const headers = new Headers(options.headers);\n  if (options.auth?.token) {\n    const type = options.auth.type ?? \"Bearer\";\n    headers.set(\"authorization\", `${type} ${options.auth.token}`);\n  }\n\n  const target = applyFetchQuery(url, options.query);\n  const body = normalizeFetchBody(options.body);\n\n  if (\n    body !== null &&\n    typeof body === \"string\" &&\n    !headers.has(\"content-type\") &&\n    body.startsWith(\"{\")\n  ) {\n    headers.set(\"content-type\", \"application/json\");\n  }\n\n  try {\n    const response = await fetch(target, {\n      body: body ?? undefined,\n      headers,\n      method: options.method ?? \"GET\",\n      redirect: options.redirect ?? \"follow\",\n      signal: options.signal,\n    });\n\n    await options.onResponse?.({ response });\n\n    if (!response.ok) {\n      let message = response.statusText || `HTTP ${response.status}`;\n      try {\n        const errBody = (await response.clone().json()) as {\n          message?: string;\n          error?: string;\n          error_description?: string;\n        };\n        message =\n          errBody.message ||\n          errBody.error_description ||\n          errBody.error ||\n          message;\n      } catch {\n        try {\n          message = (await response.clone().text()) || message;\n        } catch {\n          // ignore parse failures\n        }\n      }\n      const error = {\n        message,\n        status: response.status,\n        statusText: response.statusText,\n      };\n      await options.onError?.({ error, response });\n      return { data: null, error };\n    }\n\n    const contentType = response.headers.get(\"content-type\") ?? \"\";\n    if (\n      contentType.includes(\"application/json\") ||\n      contentType.includes(\"+json\")\n    ) {\n      const data = (await response.json()) as T;\n      return { data, error: null };\n    }\n\n    const text = await response.text();\n    if (!text) {\n      return { data: {} as T, error: null };\n    }\n    try {\n      return { data: JSON.parse(text) as T, error: null };\n    } catch {\n      return { data: text as unknown as T, error: null };\n    }\n  } catch (cause) {\n    const error = {\n      message: cause instanceof Error ? cause.message : String(cause),\n      status: 0,\n      statusText: \"NetworkError\",\n    };\n    // Fetch Response status must be in 200–599; do not use status 0 (throws RangeError).\n    // Use 502 as a stable stand-in for transport failures so onError hooks stay safe.\n    await options.onError?.({\n      error: cause,\n      response: new Response(null, {\n        status: 502,\n        statusText: \"Network Error\",\n      }),\n    });\n    return { data: null, error };\n  }\n}\n\n/** Alias kept so mechanical renames from better-fetch stay readable. */\nexport const betterFetch = athenaFetch;\n","import type { AthenaFetchOption } from \"./types.ts\";\n\n/**\n * Normalize request bodies for `fetch` (string, form data, or JSON objects).\n */\nexport function normalizeFetchBody(\n  body: AthenaFetchOption[\"body\"]\n): string | URLSearchParams | FormData | Blob | null | undefined {\n  if (body === undefined || body === null) {\n    return;\n  }\n  if (typeof body === \"string\") {\n    return body;\n  }\n  if (body instanceof URLSearchParams) {\n    return body;\n  }\n  if (body instanceof FormData) {\n    return body;\n  }\n  if (body instanceof Blob) {\n    return body;\n  }\n  if (typeof body === \"object\") {\n    return JSON.stringify(body);\n  }\n  return String(body);\n}\n\n/**\n * Append query params to a URL string.\n */\nexport function applyFetchQuery(\n  url: string,\n  query?: AthenaFetchOption[\"query\"]\n): string {\n  if (!query) {\n    return url;\n  }\n  const u = new URL(url);\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) {\n      continue;\n    }\n    u.searchParams.set(key, String(value));\n  }\n  return u.toString();\n}\n","import type { AwaitableFunction } from \"../types/index.ts\";\nimport type { ProviderOptions } from \"./index.ts\";\nimport { generateCodeChallenge } from \"./utils.ts\";\n\n/**\n * Build a standard OAuth 2.0 / OIDC authorization URL.\n *\n * Resolves awaitable `options`, applies client id, scopes, redirect URI,\n * optional PKCE (`code_challenge` S256), claims, and provider-specific params.\n *\n * @param id - Internal ID used for logging/error tracking\n * @param options - Provider options (awaitable)\n * @param authorizationEndpoint - OAuth 2.0 authorization endpoint\n * @param state - OAuth 2.0 state parameter\n * @param codeVerifier - OAuth 2.0 code verifier\n * @param scopes - OAuth 2.0 scopes\n * @param claims - OAuth 2.0 claims\n * @param redirectURI - OAuth 2.0 redirect URI\n * @param duration - OAuth 2.0 duration parameter\n * @param prompt - OAuth 2.0 prompt parameter\n * @param accessType - OAuth 2.0 access type parameter\n * @param responseType - OAuth 2.0 response type parameter\n * @param display - OAuth 2.0 display parameter\n * @param loginHint - OAuth 2.0 login hint parameter\n * @param hd - OAuth 2.0 hd parameter\n * @param responseMode - OAuth 2.0 response mode parameter\n * @param additionalParams - Additional OAuth 2.0 parameters\n * @param scopeJoiner - OAuth 2.0 scope joiner parameter\n * @returns Absolute authorize URL ready for browser redirect\n */\nexport async function createAuthorizationURL({\n  id: _id,\n  options,\n  authorizationEndpoint,\n  state,\n  codeVerifier,\n  scopes,\n  claims,\n  redirectURI,\n  duration,\n  prompt,\n  accessType,\n  responseType,\n  display,\n  loginHint,\n  hd,\n  responseMode,\n  additionalParams,\n  scopeJoiner,\n}: {\n  id: string;\n  options: AwaitableFunction<ProviderOptions>;\n  redirectURI: string;\n  authorizationEndpoint: string;\n  state: string;\n  codeVerifier?: string | undefined;\n  scopes?: string[] | undefined;\n  claims?: string[] | undefined;\n  duration?: string | undefined;\n  prompt?: string | undefined;\n  accessType?: string | undefined;\n  responseType?: string | undefined;\n  display?: string | undefined;\n  loginHint?: string | undefined;\n  hd?: string | undefined;\n  responseMode?: string | undefined;\n  additionalParams?: Record<string, string> | undefined;\n  scopeJoiner?: string | undefined;\n}) {\n  void _id;\n  options = typeof options === \"function\" ? await options() : options;\n  const url = new URL(options.authorizationEndpoint || authorizationEndpoint);\n  url.searchParams.set(\"response_type\", responseType || \"code\");\n  const primaryClientId = Array.isArray(options.clientId)\n    ? options.clientId[0]\n    : options.clientId;\n  url.searchParams.set(\"client_id\", primaryClientId);\n  url.searchParams.set(\"state\", state);\n  if (scopes) {\n    url.searchParams.set(\"scope\", scopes.join(scopeJoiner || \" \"));\n  }\n  url.searchParams.set(\"redirect_uri\", options.redirectURI || redirectURI);\n  if (duration) {\n    url.searchParams.set(\"duration\", duration);\n  }\n  if (display) {\n    url.searchParams.set(\"display\", display);\n  }\n  if (loginHint) {\n    url.searchParams.set(\"login_hint\", loginHint);\n  }\n  if (prompt) {\n    url.searchParams.set(\"prompt\", prompt);\n  }\n  if (hd) {\n    url.searchParams.set(\"hd\", hd);\n  }\n  if (accessType) {\n    url.searchParams.set(\"access_type\", accessType);\n  }\n  if (responseMode) {\n    url.searchParams.set(\"response_mode\", responseMode);\n  }\n  if (codeVerifier) {\n    const codeChallenge = await generateCodeChallenge(codeVerifier);\n    url.searchParams.set(\"code_challenge_method\", \"S256\");\n    url.searchParams.set(\"code_challenge\", codeChallenge);\n  }\n  if (claims) {\n    const claimsObj = claims.reduce(\n      (acc, claim) => {\n        acc[claim] = null;\n        return acc;\n      },\n      {} as Record<string, null>\n    );\n    url.searchParams.set(\n      \"claims\",\n      JSON.stringify({\n        id_token: { email: null, email_verified: null, ...claimsObj },\n      })\n    );\n  }\n  if (additionalParams) {\n    Object.entries(additionalParams).forEach(([key, value]) => {\n      url.searchParams.set(key, value);\n    });\n  }\n  return url;\n}\n","﻿export { getPrimaryClientId } from \"./client-id.ts\";\nexport { generateCodeChallenge } from \"./pkce.ts\";\nexport {\n  applyDefaultAccessTokenExpiry,\n  getOAuth2Tokens,\n} from \"./token-utils.ts\";\n","﻿/**\n * Return the provider's primary Client ID.\n *\n * Accepts a single string or an array form used for multi-audience ID token\n * verification (index `0` is the primary client used for authorize/token\n * exchange; later entries are additional accepted audiences only).\n *\n * @param clientId - `string` or `string[]` from provider options\n * @returns Primary non-empty client id, or `undefined` if missing\n */\nexport function getPrimaryClientId(clientId: unknown): string | undefined {\n  const value = Array.isArray(clientId) ? clientId[0] : clientId;\n  return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n","﻿import type { OAuth2Tokens } from \"./types.ts\";\n\n/**\n * Normalize a provider token-endpoint JSON body into {@link OAuth2Tokens}.\n *\n * Maps `access_token`, `refresh_token`, `expires_in`, `scope`, and `id_token`,\n * and keeps the raw payload under `raw` for provider-specific fields.\n *\n * @param data - Parsed token response object\n *\n * @returns OAuth 2.0 tokens\n */\nexport function getOAuth2Tokens(data: object): OAuth2Tokens {\n  const getDate = (seconds: number) => {\n    const now = new Date();\n    return new Date(now.getTime() + seconds * 1000);\n  };\n\n  const record = data as Record<string, unknown>;\n  const expiresIn =\n    typeof record.expires_in === \"number\" ? record.expires_in : undefined;\n  const refreshTokenExpiresIn =\n    typeof record.refresh_token_expires_in === \"number\"\n      ? record.refresh_token_expires_in\n      : undefined;\n  const scope = record.scope;\n\n  return {\n    accessToken:\n      typeof record.access_token === \"string\" ? record.access_token : undefined,\n    accessTokenExpiresAt:\n      typeof expiresIn === \"number\" ? getDate(expiresIn) : undefined,\n    idToken: typeof record.id_token === \"string\" ? record.id_token : undefined,\n    raw: record,\n    refreshToken:\n      typeof record.refresh_token === \"string\"\n        ? record.refresh_token\n        : undefined,\n    refreshTokenExpiresAt:\n      typeof refreshTokenExpiresIn === \"number\"\n        ? getDate(refreshTokenExpiresIn)\n        : undefined,\n    scopes: scope\n      ? typeof scope === \"string\"\n        ? scope.split(\" \")\n        : Array.isArray(scope)\n          ? scope.filter((s): s is string => typeof s === \"string\")\n          : []\n      : [],\n    tokenType:\n      typeof record.token_type === \"string\" ? record.token_type : undefined,\n  };\n}\n\n/**\n * Fill in `accessTokenExpiresAt` when the token response omitted `expires_in`.\n *\n * @param tokens - OAuth 2.0 tokens\n * @param accessTokenExpiresIn - OAuth 2.0 access token expires in\n * @returns OAuth 2.0 tokens\n */\nexport function applyDefaultAccessTokenExpiry(\n  tokens: OAuth2Tokens,\n  accessTokenExpiresIn: number | undefined\n): OAuth2Tokens {\n  if (!tokens.accessTokenExpiresAt && accessTokenExpiresIn) {\n    tokens.accessTokenExpiresAt = new Date(\n      Date.now() + accessTokenExpiresIn * 1000\n    );\n  }\n  return tokens;\n}\n","import type { AwaitableFunction } from \"../types/index.ts\";\nimport { base64 } from \"../utils/base64.ts\";\nimport { fetchRefusingRedirects } from \"./reject-redirects.ts\";\nimport type { OAuth2Tokens, ProviderOptions } from \"./types.ts\";\nimport { getPrimaryClientId } from \"./utils.ts\";\n\n/**\n * @param refreshToken - OAuth 2.0 refresh token\n * @param options - Provider options (awaitable)\n * @param authentication - OAuth 2.0 authentication method\n * @param extraParams - Additional OAuth 2.0 parameters\n * @param resource - OAuth 2.0 resource parameter\n * @returns Refresh access token request\n */\nexport async function refreshAccessTokenRequest({\n  refreshToken,\n  options,\n  authentication,\n  extraParams,\n  resource,\n}: {\n  refreshToken: string;\n  options: AwaitableFunction<Partial<ProviderOptions>>;\n  authentication?: (\"basic\" | \"post\") | undefined;\n  extraParams?: Record<string, string> | undefined;\n  resource?: (string | string[]) | undefined;\n}) {\n  options = typeof options === \"function\" ? await options() : options;\n  return createRefreshAccessTokenRequest({\n    authentication,\n    extraParams,\n    options,\n    refreshToken,\n    resource,\n  });\n}\n\n/**\n * @deprecated use async'd refreshAccessTokenRequest instead\n */\nexport function createRefreshAccessTokenRequest({\n  refreshToken,\n  options,\n  authentication,\n  extraParams,\n  resource,\n}: {\n  refreshToken: string;\n  options: ProviderOptions;\n  authentication?: (\"basic\" | \"post\") | undefined;\n  extraParams?: Record<string, string> | undefined;\n  resource?: (string | string[]) | undefined;\n}) {\n  const body = new URLSearchParams();\n  const headers: Record<string, string> = {\n    accept: \"application/json\",\n    \"content-type\": \"application/x-www-form-urlencoded\",\n  };\n\n  body.set(\"grant_type\", \"refresh_token\");\n  body.set(\"refresh_token\", refreshToken);\n  // Use standard Base64 encoding for HTTP Basic Auth (OAuth2 spec, RFC 7617)\n  // Fixes compatibility with providers like Notion, Twitter, etc.\n  const primaryClientId = getPrimaryClientId(options.clientId);\n  if (authentication === \"basic\") {\n    if (primaryClientId) {\n      headers.authorization =\n        \"Basic \" +\n        base64.encode(`${primaryClientId}:${options.clientSecret ?? \"\"}`);\n    } else {\n      headers.authorization = `Basic ${base64.encode(`:${options.clientSecret ?? \"\"}`)}`;\n    }\n  } else {\n    if (primaryClientId) {\n      body.set(\"client_id\", primaryClientId);\n    }\n    if (options.clientSecret) {\n      body.set(\"client_secret\", options.clientSecret);\n    }\n  }\n\n  if (resource) {\n    if (typeof resource === \"string\") {\n      body.append(\"resource\", resource);\n    } else {\n      for (const _resource of resource) {\n        body.append(\"resource\", _resource);\n      }\n    }\n  }\n  if (extraParams) {\n    for (const [key, value] of Object.entries(extraParams)) {\n      body.set(key, value);\n    }\n  }\n\n  return {\n    body,\n    headers,\n  };\n}\n\n/**\n * Refresh an access token using a refresh_token grant.\n *\n * Posts to `tokenEndpoint` (redirect-refusing) and maps the response to\n * {@link OAuth2Tokens}. Supports basic or post client authentication.\n */\nexport async function refreshAccessToken({\n  refreshToken,\n  options,\n  tokenEndpoint,\n  authentication,\n  extraParams,\n}: {\n  refreshToken: string;\n  options: Partial<ProviderOptions>;\n  tokenEndpoint: string;\n  authentication?: (\"basic\" | \"post\") | undefined;\n  extraParams?: Record<string, string> | undefined;\n}): Promise<OAuth2Tokens> {\n  const { body, headers } = await createRefreshAccessTokenRequest({\n    authentication,\n    extraParams,\n    options,\n    refreshToken,\n  });\n\n  const { data, error } = await fetchRefusingRedirects<{\n    access_token: string;\n    refresh_token?: string | undefined;\n    expires_in?: number | undefined;\n    refresh_token_expires_in?: number | undefined;\n    token_type?: string | undefined;\n    scope?: string | undefined;\n    id_token?: string | undefined;\n  }>(tokenEndpoint, {\n    body,\n    headers,\n    method: \"POST\",\n  });\n  if (error) {\n    throw error;\n  }\n  const tokens: OAuth2Tokens = {\n    accessToken: data.access_token,\n    idToken: data.id_token,\n    refreshToken: data.refresh_token,\n    scopes: data.scope?.split(\" \"),\n    tokenType: data.token_type,\n  };\n\n  if (data.expires_in) {\n    const now = new Date();\n    tokens.accessTokenExpiresAt = new Date(\n      now.getTime() + data.expires_in * 1000\n    );\n  }\n\n  if (data.refresh_token_expires_in) {\n    const now = new Date();\n    tokens.refreshTokenExpiresAt = new Date(\n      now.getTime() + data.refresh_token_expires_in * 1000\n    );\n  }\n\n  return tokens;\n}\n","import {\n  createRemoteJWKSet,\n  customFetch,\n  type FetchImplementation,\n  jwtVerify,\n} from \"jose\";\nimport type { AwaitableFunction } from \"../types/index.ts\";\nimport { base64 } from \"../utils/base64.ts\";\nimport type { ProviderOptions } from \"./index.ts\";\nimport { getOAuth2Tokens } from \"./index.ts\";\nimport {\n  assertResponseNotRedirect,\n  fetchRefusingRedirects,\n  NO_FOLLOW_REDIRECT,\n} from \"./reject-redirects.ts\";\nimport { getPrimaryClientId } from \"./utils.ts\";\n\n/**\n * @param code - OAuth 2.0 code\n * @param codeVerifier - OAuth 2.0 code verifier\n * @param redirectURI - OAuth 2.0 redirect URI\n * @param options - Provider options (awaitable)\n * @param authentication - OAuth 2.0 authentication method\n * @param deviceId - OAuth 2.0 device ID\n * @param headers - OAuth 2.0 headers\n * @param additionalParams - Additional OAuth 2.0 parameters\n * @param resource - OAuth 2.0 resource parameter\n * @returns Authorization code request\n */\nexport async function authorizationCodeRequest({\n  code,\n  codeVerifier,\n  redirectURI,\n  options,\n  authentication,\n  deviceId,\n  headers,\n  additionalParams = {},\n  resource,\n}: {\n  code: string;\n  redirectURI: string;\n  options: AwaitableFunction<Partial<ProviderOptions>>;\n  codeVerifier?: string | undefined;\n  deviceId?: string | undefined;\n  authentication?: (\"basic\" | \"post\") | undefined;\n  headers?: Record<string, string> | undefined;\n  additionalParams?: Record<string, string> | undefined;\n  resource?: (string | string[]) | undefined;\n}) {\n  options = typeof options === \"function\" ? await options() : options;\n  return createAuthorizationCodeRequest({\n    additionalParams,\n    authentication,\n    code,\n    codeVerifier,\n    deviceId,\n    headers,\n    options,\n    redirectURI,\n    resource,\n  });\n}\n\n/**\n * @deprecated use async'd authorizationCodeRequest instead\n */\nexport function createAuthorizationCodeRequest({\n  code,\n  codeVerifier,\n  redirectURI,\n  options,\n  authentication,\n  deviceId,\n  headers,\n  additionalParams = {},\n  resource,\n}: {\n  code: string;\n  redirectURI: string;\n  options: Partial<ProviderOptions>;\n  codeVerifier?: string | undefined;\n  deviceId?: string | undefined;\n  authentication?: (\"basic\" | \"post\") | undefined;\n  headers?: Record<string, string> | undefined;\n  additionalParams?: Record<string, string> | undefined;\n  resource?: (string | string[]) | undefined;\n}) {\n  const body = new URLSearchParams();\n  const requestHeaders: Record<string, string> = {\n    accept: \"application/json\",\n    \"content-type\": \"application/x-www-form-urlencoded\",\n    ...headers,\n  };\n\n  body.set(\"grant_type\", \"authorization_code\");\n  body.set(\"code\", code);\n  if (codeVerifier) {\n    body.set(\"code_verifier\", codeVerifier);\n  }\n  if (options.clientKey) {\n    body.set(\"client_key\", options.clientKey);\n  }\n  if (deviceId) {\n    body.set(\"device_id\", deviceId);\n  }\n  body.set(\"redirect_uri\", options.redirectURI || redirectURI);\n  if (resource) {\n    if (typeof resource === \"string\") {\n      body.append(\"resource\", resource);\n    } else {\n      for (const _resource of resource) {\n        body.append(\"resource\", _resource);\n      }\n    }\n  }\n  // Use standard Base64 encoding for HTTP Basic Auth (OAuth2 spec, RFC 7617)\n  // Fixes compatibility with providers like Notion, Twitter, etc.\n  const primaryClientId = getPrimaryClientId(options.clientId);\n  if (authentication === \"basic\") {\n    const encodedCredentials = base64.encode(\n      `${primaryClientId ?? \"\"}:${options.clientSecret ?? \"\"}`\n    );\n    requestHeaders.authorization = `Basic ${encodedCredentials}`;\n  } else {\n    if (primaryClientId) {\n      body.set(\"client_id\", primaryClientId);\n    }\n    if (options.clientSecret) {\n      body.set(\"client_secret\", options.clientSecret);\n    }\n  }\n\n  for (const [key, value] of Object.entries(additionalParams)) {\n    if (!body.has(key)) {\n      body.append(key, value);\n    }\n  }\n\n  return {\n    body,\n    headers: requestHeaders,\n  };\n}\n\n/**\n * Exchange an authorization code for OAuth2 tokens at `tokenEndpoint`.\n *\n * Builds the form body via {@link authorizationCodeRequest}, posts with\n * redirect-refusing fetch, and normalizes the JSON via {@link getOAuth2Tokens}.\n *\n * @param code - OAuth 2.0 code\n * @param codeVerifier - OAuth 2.0 code verifier\n * @param redirectURI - OAuth 2.0 redirect URI\n * @param options - Provider options (awaitable)\n * @param tokenEndpoint - OAuth 2.0 token endpoint\n * @param authentication - OAuth 2.0 authentication method\n * @param deviceId - OAuth 2.0 device ID\n * @param headers - OAuth 2.0 headers\n * @param additionalParams - Additional OAuth 2.0 parameters\n * @param resource - OAuth 2.0 resource parameter\n * @returns OAuth 2.0 tokens\n *\n * @throws When the token endpoint returns an error response body\n */\nexport async function validateAuthorizationCode({\n  code,\n  codeVerifier,\n  redirectURI,\n  options,\n  tokenEndpoint,\n  authentication,\n  deviceId,\n  headers,\n  additionalParams = {},\n  resource,\n}: {\n  code: string;\n  redirectURI: string;\n  options: AwaitableFunction<Partial<ProviderOptions>>;\n  codeVerifier?: string | undefined;\n  deviceId?: string | undefined;\n  tokenEndpoint: string;\n  authentication?: (\"basic\" | \"post\") | undefined;\n  headers?: Record<string, string> | undefined;\n  additionalParams?: Record<string, string> | undefined;\n  resource?: (string | string[]) | undefined;\n}) {\n  const { body, headers: requestHeaders } = await authorizationCodeRequest({\n    additionalParams,\n    authentication,\n    code,\n    codeVerifier,\n    deviceId,\n    headers,\n    options,\n    redirectURI,\n    resource,\n  });\n\n  const { data, error } = await fetchRefusingRedirects<object>(tokenEndpoint, {\n    body,\n    headers: requestHeaders,\n    method: \"POST\",\n  });\n  if (error) {\n    throw error;\n  }\n  const tokens = getOAuth2Tokens(data);\n  return tokens;\n}\n\n/**\n * @param token - OAuth 2.0 token\n * @param jwksEndpoint - OAuth 2.0 JWKS endpoint\n * @param options - OAuth 2.0 options\n * @param audience - OAuth 2.0 audience\n * @param issuer - OAuth 2.0 issuer\n * @returns Verified token\n */\nexport async function validateToken(\n  token: string,\n  jwksEndpoint: string,\n  options?: {\n    audience?: string | string[];\n    issuer?: string | string[];\n  }\n) {\n  const fetchRemoteJwks: FetchImplementation = async (url, options) => {\n    const response = await fetch(url, { ...options, ...NO_FOLLOW_REDIRECT });\n    assertResponseNotRedirect(String(url), response);\n    return response;\n  };\n  const jwks = createRemoteJWKSet(new URL(jwksEndpoint), {\n    [customFetch]: fetchRemoteJwks,\n  });\n  const verified = await jwtVerify(token, jwks, {\n    audience: options?.audience,\n    issuer: options?.issuer,\n  });\n  return verified;\n}\n","/**\n * SHA-256 hex digest of a UTF-8 string (used for Apple nonce comparison).\n * Apple may place either the raw nonce or its SHA-256 hash in the ID token.\n */\nexport async function sha256Hex(value: string): Promise<string> {\n  const data = new TextEncoder().encode(value);\n  const digest = await crypto.subtle.digest(\"SHA-256\", data);\n  return Array.from(new Uint8Array(digest))\n    .map((byte) => byte.toString(16).padStart(2, \"0\"))\n    .join(\"\");\n}\n\n/**\n * Whether the JWT `nonce` claim matches the expected OAuth nonce\n * (raw equality or SHA-256 hex of the original nonce).\n */\nexport async function nonceMatches(\n  jwtNonce: unknown,\n  nonce: string\n): Promise<boolean> {\n  if (typeof jwtNonce !== \"string\") {\n    return false;\n  }\n  if (jwtNonce === nonce) {\n    return true;\n  }\n  return jwtNonce === (await sha256Hex(nonce));\n}\n","import { getJwksPublicKey } from \"./helpers/get-jwks-public-key.ts\";\n\n/**\n * Fetch Apple's JWKS and import the key for the given JWT `kid`.\n * @see https://appleid.apple.com/auth/keys\n */\nexport const getApplePublicKey = async (kid: string) =>\n  getJwksPublicKey(\"https://appleid.apple.com/auth/keys\", kid);\n","import { importJWK } from \"jose\";\nimport { APIError } from \"../../error.ts\";\nimport { athenaFetch } from \"../../fetch.ts\";\n\n/** Minimal JWK fields used when selecting a key from a JWKS document. */\nexport interface JwkLike {\n  alg: string;\n  e?: string;\n  kid: string;\n  kty: string;\n  n?: string;\n  use?: string;\n  x5c?: string[];\n  x5t?: string;\n  [key: string]: unknown;\n}\n\n/**\n * Fetch a JWKS document, find the key by `kid`, and import it for JWT verify.\n *\n * Shared by Apple, Google, Microsoft, Cognito, PayPal, and other OIDC providers\n * that publish RSA/EC public keys at a well-known JWKS URL.\n *\n * @param jwksUrl - Absolute URL of the provider JWKS (`/.well-known/jwks.json` or equivalent)\n * @param kid - Key id from the JWT protected header\n * @returns Key material suitable for `jose` `jwtVerify`\n * @throws {APIError} When the JWKS response has no `keys` array\n * @throws {Error} When no key matches `kid`\n */\nexport async function getJwksPublicKey(\n  jwksUrl: string,\n  kid: string\n): Promise<Awaited<ReturnType<typeof importJWK>>> {\n  const { data } = await athenaFetch<{ keys: JwkLike[] }>(jwksUrl);\n\n  if (!data?.keys) {\n    throw new APIError(\"BAD_REQUEST\", {\n      message: \"Keys not found\",\n    });\n  }\n\n  const jwk = data.keys.find((key) => key.kid === kid);\n  if (!jwk) {\n    throw new Error(`JWK with kid ${kid} not found`);\n  }\n\n  return await importJWK(jwk, jwk.alg);\n}\n","import { logger } from \"../env/index.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\nimport {\n  type ResolvedOidcProviderMetadata,\n  resolveOidcProviderEndpoints,\n} from \"../oidc-discovery.ts\";\nimport { trimTrailingSlash } from \"./helpers/trim-trailing-slash.ts\";\n\n/**\n * Standard OIDC-style profile claims returned by an Athena identity provider.\n *\n * Field names follow common OIDC claim names so Athena Auth can stay compatible\n * with generic OIDC clients while remaining first-class in this SDK.\n */\nexport interface AthenaProfile {\n  aud?: string | string[] | undefined;\n  email?: string | undefined;\n  email_verified?: boolean | undefined;\n  exp?: number | undefined;\n  family_name?: string | undefined;\n  given_name?: string | undefined;\n  iat?: number | undefined;\n  iss?: string | undefined;\n  locale?: string | undefined;\n  name?: string | undefined;\n  picture?: string | undefined;\n  preferred_username?: string | undefined;\n  sub: string;\n  updated_at?: number | undefined;\n  [key: string]: unknown;\n}\n\nexport interface AthenaOptions extends ProviderOptions<AthenaProfile> {\n  /**\n   * Override the authorization endpoint. When omitted, Athena discovery\n   * supplies `/oauth/authorize`.\n   */\n  authorizationEndpoint?: string | undefined;\n  clientId: string;\n  /**\n   * Base issuer URL for the Athena identity provider\n   * (e.g. `https://auth.example.com` or a tenant-specific auth root).\n   *\n   * Defaults for authorization, token, userinfo, and JWKS endpoints are\n   * derived from validated issuer discovery when the explicit endpoint\n   * overrides are omitted.\n   */\n  issuer?: string | undefined;\n  /**\n   * Override the token endpoint. When omitted, Athena discovery supplies\n   * `/oauth/token`.\n   */\n  tokenEndpoint?: string | undefined;\n  /**\n   * Override the userinfo endpoint. UserInfo remains optional for this lane.\n   */\n  userInfoEndpoint?: string | undefined;\n}\n\nfunction resolveIssuer(options: AthenaOptions): string {\n  if (options.issuer) {\n    return trimTrailingSlash(options.issuer);\n  }\n  if (options.authorizationEndpoint) {\n    try {\n      const url = new URL(options.authorizationEndpoint);\n      return `${url.protocol}//${url.host}`;\n    } catch {\n      // fall through\n    }\n  }\n  throw new Error(\n    \"Athena social provider requires `issuer` (or a full `authorizationEndpoint`) in options.\"\n  );\n}\n\n/**\n * Athena first-party OAuth / OIDC social provider factory.\n *\n * Resolves authorization and token endpoints from validated issuer discovery\n * (`/.well-known/openid-configuration`) unless both endpoints are overridden.\n * Athena authorization-server defaults are `/oauth/authorize` and `/oauth/token`.\n *\n * @param options - Client credentials and issuer (or full endpoint overrides)\n */\nexport const athena = (options: AthenaOptions) => {\n  const cache = new Map<string, ResolvedOidcProviderMetadata>();\n  const resolveEndpoints = () =>\n    resolveOidcProviderEndpoints({\n      cache,\n      issuer: resolveIssuer(options),\n      overrides: {\n        authorizationEndpoint: options.authorizationEndpoint,\n        tokenEndpoint: options.tokenEndpoint,\n        userInfoEndpoint: options.userInfoEndpoint,\n      },\n    });\n\n  return {\n    async createAuthorizationURL({\n      state,\n      scopes,\n      codeVerifier,\n      redirectURI,\n      loginHint,\n      display,\n    }: {\n      state: string;\n      codeVerifier: string;\n      scopes?: string[] | undefined;\n      redirectURI: string;\n      display?: string | undefined;\n      loginHint?: string | undefined;\n    }) {\n      const endpoints = await resolveEndpoints();\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"openid\", \"profile\", \"email\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: endpoints.authorizationEndpoint,\n        codeVerifier,\n        display,\n        id: \"athena\",\n        loginHint,\n        options,\n        prompt: options.prompt,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      if (!token.accessToken) {\n        return null;\n      }\n      const endpoints = await resolveEndpoints();\n      if (!endpoints.userinfoEndpoint) {\n        return null;\n      }\n      const { data: profile, error } = await betterFetch<AthenaProfile>(\n        endpoints.userinfoEndpoint,\n        {\n          headers: {\n            Accept: \"application/json\",\n            Authorization: `Bearer ${token.accessToken}`,\n            \"User-Agent\": \"athena-auth\",\n          },\n        }\n      );\n      if (error || !profile) {\n        logger.error(\"Athena OAuth userinfo failed:\", error);\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.email_verified ?? false,\n          id: profile.sub,\n          image: profile.picture,\n          name: profile.name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"athena\" as const,\n    name: \"Athena\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken: string) => {\n          const endpoints = await resolveEndpoints();\n          return refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint: endpoints.tokenEndpoint,\n          });\n        },\n    validateAuthorizationCode: async ({\n      code,\n      codeVerifier,\n      redirectURI,\n    }: {\n      code: string;\n      redirectURI: string;\n      codeVerifier?: string | undefined;\n      deviceId?: string | undefined;\n    }) => {\n      const endpoints = await resolveEndpoints();\n      return validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint: endpoints.tokenEndpoint,\n      });\n    },\n  } satisfies OAuthProvider<AthenaProfile, AthenaOptions>;\n};\n","import { AthenaConfigurationError } from \"../config/errors.ts\";\n\nexport interface OidcDiscoveryDocument {\n  authorization_endpoint?: unknown;\n  issuer?: unknown;\n  jwks_uri?: unknown;\n  token_endpoint?: unknown;\n  userinfo_endpoint?: unknown;\n}\n\nexport interface ResolvedOidcProviderMetadata {\n  authorizationEndpoint: string;\n  issuer: string;\n  jwksUri?: string;\n  tokenEndpoint: string;\n  userinfoEndpoint?: string;\n}\n\nexport interface OidcDiscoveryOverrides {\n  authorizationEndpoint?: string;\n  jwksEndpoint?: string;\n  tokenEndpoint?: string;\n  userInfoEndpoint?: string;\n}\n\nexport interface ResolveOidcProviderEndpointsInput {\n  cache?: Map<string, ResolvedOidcProviderMetadata>;\n  fetch?: typeof fetch;\n  issuer: string;\n  overrides?: OidcDiscoveryOverrides;\n}\n\nconst defaultCache = new Map<string, ResolvedOidcProviderMetadata>();\n\nfunction trimTrailingSlash(value: string): string {\n  return value.replace(/\\/+$/, \"\");\n}\n\nfunction assertAbsoluteHttpUrl(value: unknown, field: string): string {\n  if (typeof value !== \"string\" || !value.trim()) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `OIDC discovery ${field} must be an absolute HTTP(S) URL`,\n      \"auth\"\n    );\n  }\n  let parsed: URL;\n  try {\n    parsed = new URL(value.trim());\n  } catch {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `OIDC discovery ${field} must be an absolute HTTP(S) URL`,\n      \"auth\"\n    );\n  }\n  if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `OIDC discovery ${field} must be an absolute HTTP(S) URL`,\n      \"auth\"\n    );\n  }\n  return parsed.toString();\n}\n\nexport function discoveryDocumentUrl(issuer: string): string {\n  return `${trimTrailingSlash(issuer)}/.well-known/openid-configuration`;\n}\n\nexport async function resolveOidcProviderEndpoints(\n  input: ResolveOidcProviderEndpointsInput\n): Promise<ResolvedOidcProviderMetadata> {\n  const configuredIssuer = input.issuer.trim();\n  const overrides = input.overrides ?? {};\n  if (\n    overrides.authorizationEndpoint?.trim() &&\n    overrides.tokenEndpoint?.trim()\n  ) {\n    return {\n      authorizationEndpoint: assertAbsoluteHttpUrl(\n        overrides.authorizationEndpoint,\n        \"authorization_endpoint\"\n      ),\n      issuer: configuredIssuer,\n      ...(overrides.jwksEndpoint?.trim()\n        ? {\n            jwksUri: assertAbsoluteHttpUrl(overrides.jwksEndpoint, \"jwks_uri\"),\n          }\n        : {}),\n      tokenEndpoint: assertAbsoluteHttpUrl(\n        overrides.tokenEndpoint,\n        \"token_endpoint\"\n      ),\n      ...(overrides.userInfoEndpoint?.trim()\n        ? {\n            userinfoEndpoint: assertAbsoluteHttpUrl(\n              overrides.userInfoEndpoint,\n              \"userinfo_endpoint\"\n            ),\n          }\n        : {}),\n    };\n  }\n\n  const cache = input.cache ?? defaultCache;\n  const cached = cache.get(configuredIssuer);\n  if (cached) {\n    return applyOverrides(cached, overrides);\n  }\n\n  const fetchImpl = input.fetch ?? fetch;\n  const response = await fetchImpl(discoveryDocumentUrl(configuredIssuer), {\n    headers: { accept: \"application/json\" },\n  });\n  if (!response.ok) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `OIDC discovery failed for issuer ${configuredIssuer}`,\n      \"auth\"\n    );\n  }\n  const document = (await response.json()) as OidcDiscoveryDocument;\n  if (\n    typeof document.issuer !== \"string\" ||\n    document.issuer !== configuredIssuer\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      \"OIDC discovery issuer must exactly equal the configured issuer\",\n      \"auth\"\n    );\n  }\n  const resolved: ResolvedOidcProviderMetadata = {\n    authorizationEndpoint: assertAbsoluteHttpUrl(\n      document.authorization_endpoint,\n      \"authorization_endpoint\"\n    ),\n    issuer: configuredIssuer,\n    ...(document.jwks_uri\n      ? { jwksUri: assertAbsoluteHttpUrl(document.jwks_uri, \"jwks_uri\") }\n      : {}),\n    tokenEndpoint: assertAbsoluteHttpUrl(\n      document.token_endpoint,\n      \"token_endpoint\"\n    ),\n    ...(document.userinfo_endpoint\n      ? {\n          userinfoEndpoint: assertAbsoluteHttpUrl(\n            document.userinfo_endpoint,\n            \"userinfo_endpoint\"\n          ),\n        }\n      : {}),\n  };\n  cache.set(configuredIssuer, resolved);\n  return applyOverrides(resolved, overrides);\n}\n\nfunction applyOverrides(\n  resolved: ResolvedOidcProviderMetadata,\n  overrides: OidcDiscoveryOverrides\n): ResolvedOidcProviderMetadata {\n  return {\n    authorizationEndpoint: overrides.authorizationEndpoint?.trim()\n      ? assertAbsoluteHttpUrl(\n          overrides.authorizationEndpoint,\n          \"authorization_endpoint\"\n        )\n      : resolved.authorizationEndpoint,\n    issuer: resolved.issuer,\n    jwksUri: overrides.jwksEndpoint?.trim()\n      ? assertAbsoluteHttpUrl(overrides.jwksEndpoint, \"jwks_uri\")\n      : resolved.jwksUri,\n    tokenEndpoint: overrides.tokenEndpoint?.trim()\n      ? assertAbsoluteHttpUrl(overrides.tokenEndpoint, \"token_endpoint\")\n      : resolved.tokenEndpoint,\n    userinfoEndpoint: overrides.userInfoEndpoint?.trim()\n      ? assertAbsoluteHttpUrl(overrides.userInfoEndpoint, \"userinfo_endpoint\")\n      : resolved.userinfoEndpoint,\n  };\n}\n\nexport function resetOidcDiscoveryCache(): void {\n  defaultCache.clear();\n}\n","/**\n * Strip trailing `/` characters without a ReDoS-prone regex (loop-based).\n *\n * Used for OAuth authority/issuer base URLs so endpoint concatenation never\n * produces double slashes that break issuer comparisons.\n *\n * @param value - Absolute or path-like URL string\n * @returns Same string with all trailing slashes removed\n */\nexport function trimTrailingSlash(value: string): string {\n  let result = value;\n  while (result.endsWith(\"/\")) {\n    result = result.slice(0, -1);\n  }\n  return result;\n}\n","import { logger } from \"../env/index.ts\";\nimport { AthenaAuthError } from \"../error.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface AtlassianProfile {\n  account_id: string;\n  account_type?: string | undefined;\n  email?: string | undefined;\n  extended_profile?:\n    | {\n        job_title?: string;\n        organization?: string;\n        department?: string;\n        location?: string;\n      }\n    | undefined;\n  locale?: string | undefined;\n  name: string;\n  nickname?: string | undefined;\n  picture?: string | undefined;\n}\nexport interface AtlassianOptions extends ProviderOptions<AtlassianProfile> {\n  clientId: string;\n}\n\nexport const atlassian = (options: AtlassianOptions) => {\n  const tokenEndpoint = \"https://auth.atlassian.com/oauth/token\";\n  return {\n    async createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {\n      if (!(options.clientId && options.clientSecret)) {\n        logger.error(\"Client Id and Secret are required for Atlassian\");\n        throw new AthenaAuthError(\"CLIENT_ID_AND_SECRET_REQUIRED\");\n      }\n      if (!codeVerifier) {\n        throw new AthenaAuthError(\"codeVerifier is required for Atlassian\");\n      }\n\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"read:jira-user\", \"offline_access\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n\n      return createAuthorizationURL({\n        additionalParams: {\n          audience: \"api.atlassian.com\",\n        },\n        authorizationEndpoint: \"https://auth.atlassian.com/authorize\",\n        codeVerifier,\n        id: \"atlassian\",\n        options,\n        prompt: options.prompt,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      if (!token.accessToken) {\n        return null;\n      }\n\n      try {\n        const { data: profile } = await betterFetch<{\n          account_id: string;\n          name: string;\n          email?: string | undefined;\n          picture?: string | undefined;\n        }>(\"https://api.atlassian.com/me\", {\n          headers: { Authorization: `Bearer ${token.accessToken}` },\n        });\n\n        if (!profile) {\n          return null;\n        }\n\n        const userMap = await options.mapProfileToUser?.(profile);\n\n        return {\n          data: profile,\n          user: {\n            email: profile.email,\n            emailVerified: false,\n            id: profile.account_id,\n            image: profile.picture,\n            name: profile.name,\n            ...userMap,\n          },\n        };\n      } catch (error) {\n        logger.error(\"Failed to fetch user info from Figma:\", error);\n        return null;\n      }\n    },\n    id: \"atlassian\",\n    name: \"Atlassian\",\n\n    options,\n\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<AtlassianProfile>;\n};\n","import { decodeJwt, decodeProtectedHeader, jwtVerify } from \"jose\";\nimport { logger } from \"../env/index.ts\";\nimport { AthenaAuthError } from \"../error.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  getPrimaryClientId,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\nimport { getCognitoPublicKey } from \"./cognito-keys.ts\";\nimport type { CognitoOptions, CognitoProfile } from \"./cognito-types.ts\";\n\nexport { getCognitoPublicKey } from \"./cognito-keys.ts\";\nexport type { CognitoOptions, CognitoProfile } from \"./cognito-types.ts\";\n\n/**\n * Amazon Cognito Hosted UI OAuth provider factory.\n *\n * @param options - Domain, region, user pool id, and app client settings\n */\nexport const cognito = (options: CognitoOptions) => {\n  if (!(options.domain && options.region && options.userPoolId)) {\n    logger.error(\n      \"Domain, region and userPoolId are required for Amazon Cognito. Make sure to provide them in the options.\"\n    );\n    throw new AthenaAuthError(\"DOMAIN_AND_REGION_REQUIRED\");\n  }\n\n  const cleanDomain = options.domain.replace(/^https?:\\/\\//, \"\");\n  const authorizationEndpoint = `https://${cleanDomain}/oauth2/authorize`;\n  const tokenEndpoint = `https://${cleanDomain}/oauth2/token`;\n  const userInfoEndpoint = `https://${cleanDomain}/oauth2/userinfo`;\n\n  return {\n    async createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {\n      if (!getPrimaryClientId(options.clientId)) {\n        logger.error(\n          \"ClientId is required for Amazon Cognito. Make sure to provide them in the options.\"\n        );\n        throw new AthenaAuthError(\"CLIENT_ID_AND_SECRET_REQUIRED\");\n      }\n\n      if (options.requireClientSecret && !options.clientSecret) {\n        logger.error(\n          \"Client Secret is required when requireClientSecret is true. Make sure to provide it in the options.\"\n        );\n        throw new AthenaAuthError(\"CLIENT_SECRET_REQUIRED\");\n      }\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"openid\", \"profile\", \"email\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n\n      const url = await createAuthorizationURL({\n        authorizationEndpoint,\n        codeVerifier,\n        id: \"cognito\",\n        options: {\n          ...options,\n        },\n        prompt: options.prompt,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n      // AWS Cognito requires scopes to be encoded with %20 instead of +\n      // URLSearchParams encodes spaces as + by default, so we need to fix this\n      const scopeValue = url.searchParams.get(\"scope\");\n      if (scopeValue) {\n        url.searchParams.delete(\"scope\");\n        const encodedScope = encodeURIComponent(scopeValue);\n        // Manually append the scope with proper encoding to the URL\n        const urlString = url.toString();\n        const separator = urlString.includes(\"?\") ? \"&\" : \"?\";\n        return new URL(`${urlString}${separator}scope=${encodedScope}`);\n      }\n      return url;\n    },\n\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      if (token.idToken) {\n        try {\n          const profile = decodeJwt<CognitoProfile>(token.idToken);\n          if (!profile) {\n            return null;\n          }\n          const name =\n            profile.name || profile.given_name || profile.username || \"\";\n          const enrichedProfile = {\n            ...profile,\n            name,\n          };\n          const userMap = await options.mapProfileToUser?.(enrichedProfile);\n\n          return {\n            data: enrichedProfile,\n            user: {\n              email: profile.email,\n              emailVerified: profile.email_verified,\n              id: profile.sub,\n              image: profile.picture,\n              name: enrichedProfile.name,\n              ...userMap,\n            },\n          };\n        } catch (error) {\n          logger.error(\"Failed to decode ID token:\", error);\n        }\n      }\n\n      if (token.accessToken) {\n        try {\n          const { data: userInfo } = await betterFetch<CognitoProfile>(\n            userInfoEndpoint,\n            {\n              headers: {\n                Authorization: `Bearer ${token.accessToken}`,\n              },\n            }\n          );\n\n          if (userInfo) {\n            const userMap = await options.mapProfileToUser?.(userInfo);\n            return {\n              data: userInfo,\n              user: {\n                email: userInfo.email,\n                emailVerified: userInfo.email_verified,\n                id: userInfo.sub,\n                image: userInfo.picture,\n                name:\n                  userInfo.name ||\n                  userInfo.given_name ||\n                  userInfo.username ||\n                  \"\",\n                ...userMap,\n              },\n            };\n          }\n        } catch (error) {\n          logger.error(\"Failed to fetch user info from Cognito:\", error);\n        }\n      }\n\n      return null;\n    },\n    id: \"cognito\",\n    name: \"Cognito\",\n\n    options,\n\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n\n    async verifyIdToken(token, nonce) {\n      if (options.disableIdTokenSignIn) {\n        return false;\n      }\n      if (options.verifyIdToken) {\n        return options.verifyIdToken(token, nonce);\n      }\n\n      try {\n        const decodedHeader = decodeProtectedHeader(token);\n        const { kid, alg: jwtAlg } = decodedHeader;\n        if (!(kid && jwtAlg)) {\n          return false;\n        }\n\n        const publicKey = await getCognitoPublicKey(\n          kid,\n          options.region,\n          options.userPoolId\n        );\n        const expectedIssuer = `https://cognito-idp.${options.region}.amazonaws.com/${options.userPoolId}`;\n\n        const { payload: jwtClaims } = await jwtVerify(token, publicKey, {\n          algorithms: [jwtAlg],\n          audience: options.clientId,\n          issuer: expectedIssuer,\n          maxTokenAge: \"1h\",\n        });\n\n        if (nonce && jwtClaims.nonce !== nonce) {\n          return false;\n        }\n        return true;\n      } catch (error) {\n        logger.error(\"Failed to verify ID token:\", error);\n        return false;\n      }\n    },\n  } satisfies OAuthProvider<CognitoProfile>;\n};\n","import { logger } from \"../env/index.ts\";\nimport { getJwksPublicKey } from \"./helpers/get-jwks-public-key.ts\";\n\n/**\n * Fetch the Cognito User Pool JWKS and import the key for `kid`.\n *\n * @param kid - JWT header key id\n * @param region - AWS region of the pool (e.g. `us-east-1`)\n * @param userPoolId - Cognito User Pool id\n */\nexport const getCognitoPublicKey = async (\n  kid: string,\n  region: string,\n  userPoolId: string\n) => {\n  const jwksUri = `https://cognito-idp.${region}.amazonaws.com/${userPoolId}/.well-known/jwks.json`;\n  try {\n    return await getJwksPublicKey(jwksUri, kid);\n  } catch (error) {\n    logger.error(\"Failed to fetch Cognito public key:\", error);\n    throw error;\n  }\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  generateCodeChallenge,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\nexport interface DiscordProfile extends Record<string, unknown> {\n  /** the user's banner color encoded as an integer representation of hexadecimal color code */\n  accent_color: number | null;\n  /**\n   * the user's avatar hash:\n   * https://discord.com/developers/docs/reference#image-formatting\n   */\n  avatar: string | null;\n  /**\n   * undocumented field; corresponds to the Discord feature where you can e.g.\n   * put your avatar inside of an ice cube\n   */\n  avatar_decoration: string | null;\n  /**\n   * the user's banner hash:\n   * https://discord.com/developers/docs/reference#image-formatting\n   */\n  banner: string | null;\n  /**\n   * undocumented field; corresponds to the premium feature where you can\n   * select a custom banner color\n   */\n  banner_color: string | null;\n  /** whether the user belongs to an OAuth2 application */\n  bot?: boolean | undefined;\n  /** the user's Discord-tag */\n  discriminator: string;\n  /** undocumented field; corresponds to the user's custom nickname */\n  display_name: string | null;\n  /** the user's email */\n  email?: string | null;\n  /**\n   * the flags on a user's account:\n   * https://discord.com/developers/docs/resources/user#user-object-user-flags\n   */\n  flags: number;\n  /** the user's display name, if it is set  */\n  global_name: string | null;\n  /** the user's id (i.e. the numerical snowflake) */\n  id: string;\n  /** undocumented field; the CDN URL of their profile picture */\n  image_url: string;\n\n  /**\n   * the user's chosen language option:\n   * https://discord.com/developers/docs/reference#locales\n   */\n  locale: string;\n  /** whether the user has two factor enabled on their account */\n  mfa_enabled: boolean;\n  /**\n   * the type of Nitro subscription on a user's account:\n   * https://discord.com/developers/docs/resources/user#user-object-premium-types\n   */\n  premium_type: number;\n  /**\n   * the public flags on a user's account:\n   * https://discord.com/developers/docs/resources/user#user-object-user-flags\n   */\n  public_flags: number;\n  /**\n   * whether the user is an Official Discord System user (part of the urgent\n   * message system)\n   */\n  system?: boolean | undefined;\n  /** the user's username, not unique across the platform */\n  username: string;\n  /** whether the email on this account has been verified */\n  verified: boolean;\n}\n\nexport interface DiscordOptions extends ProviderOptions<DiscordProfile> {\n  clientId: string;\n  permissions?: number | undefined;\n  prompt?: (\"none\" | \"consent\") | undefined;\n}\n\nexport const discord = (options: DiscordOptions) => {\n  const tokenEndpoint = \"https://discord.com/api/oauth2/token\";\n  return {\n    async createAuthorizationURL({ state, scopes, redirectURI, codeVerifier }) {\n      const _scopes = options.disableDefaultScope ? [] : [\"identify\", \"email\"];\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      const hasBotScope = _scopes.includes(\"bot\");\n      const permissionsParam =\n        hasBotScope && options.permissions !== undefined\n          ? `&permissions=${options.permissions}`\n          : \"\";\n      const url = new URL(\n        `https://discord.com/api/oauth2/authorize?scope=${_scopes.join(\n          \"+\"\n        )}&response_type=code&client_id=${\n          options.clientId\n        }&redirect_uri=${encodeURIComponent(\n          options.redirectURI || redirectURI\n        )}&state=${state}&prompt=${options.prompt || \"none\"}${permissionsParam}`\n      );\n      if (codeVerifier) {\n        url.searchParams.set(\"code_challenge_method\", \"S256\");\n        url.searchParams.set(\n          \"code_challenge\",\n          await generateCodeChallenge(codeVerifier)\n        );\n      }\n      return url;\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<DiscordProfile>(\n        \"https://discord.com/api/users/@me\",\n        {\n          headers: {\n            authorization: `Bearer ${token.accessToken}`,\n          },\n        }\n      );\n\n      if (error) {\n        return null;\n      }\n      if (profile.avatar === null) {\n        const defaultAvatarNumber =\n          profile.discriminator === \"0\"\n            ? Number(BigInt(profile.id) >> BigInt(22)) % 6\n            : Number.parseInt(profile.discriminator, 10) % 5;\n        profile.image_url = `https://cdn.discordapp.com/embed/avatars/${defaultAvatarNumber}.png`;\n      } else {\n        const format = profile.avatar.startsWith(\"a_\") ? \"gif\" : \"png\";\n        profile.image_url = `https://cdn.discordapp.com/avatars/${profile.id}/${profile.avatar}.${format}`;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.verified,\n          id: profile.id,\n          image: profile.image_url,\n          name: profile.global_name || profile.username || \"\",\n          ...userMap,\n        },\n      };\n    },\n    id: \"discord\",\n    name: \"Discord\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<DiscordProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface DropboxProfile {\n  account_id: string;\n  email: string;\n  email_verified: boolean;\n  name: {\n    given_name: string;\n    surname: string;\n    familiar_name: string;\n    display_name: string;\n    abbreviated_name: string;\n  };\n  profile_photo_url: string;\n}\n\nexport interface DropboxOptions extends ProviderOptions<DropboxProfile> {\n  accessType?: (\"offline\" | \"online\" | \"legacy\") | undefined;\n  clientId: string;\n}\n\nexport const dropbox = (options: DropboxOptions) => {\n  const tokenEndpoint = \"https://api.dropboxapi.com/oauth2/token\";\n\n  return {\n    createAuthorizationURL: async ({\n      state,\n      scopes,\n      codeVerifier,\n      redirectURI,\n    }) => {\n      const _scopes = options.disableDefaultScope ? [] : [\"account_info.read\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      const additionalParams: Record<string, string> = {};\n      if (options.accessType) {\n        additionalParams.token_access_type = options.accessType;\n      }\n      return await createAuthorizationURL({\n        additionalParams,\n        authorizationEndpoint: \"https://www.dropbox.com/oauth2/authorize\",\n        codeVerifier,\n        id: \"dropbox\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<DropboxProfile>(\n        \"https://api.dropboxapi.com/2/users/get_current_account\",\n        {\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n          },\n          method: \"POST\",\n        }\n      );\n\n      if (error) {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.email_verified,\n          id: profile.account_id,\n          image: profile.profile_photo_url,\n          name: profile.name?.display_name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"dropbox\",\n    name: \"Dropbox\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      await validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<DropboxProfile>;\n};\n","import { createRemoteJWKSet, decodeJwt, jwtVerify } from \"jose\";\nimport { logger } from \"../env/index.ts\";\nimport { AthenaAuthError } from \"../error.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  getPrimaryClientId,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\nimport type { FacebookOptions, FacebookProfile } from \"./facebook-types.ts\";\nimport { verifyFacebookAccessToken } from \"./facebook-verify.ts\";\n\nexport type { FacebookOptions, FacebookProfile } from \"./facebook-types.ts\";\nexport { verifyFacebookAccessToken } from \"./facebook-verify.ts\";\n\n/**\n * Facebook Login OAuth provider factory (Graph API v24).\n *\n * Supports limited-login JWT ID tokens and opaque access tokens (with\n * `debug_token` app binding).\n *\n * @param options - App id/secret and optional field extensions\n */\nexport const facebook = (options: FacebookOptions) => {\n  return {\n    async createAuthorizationURL({ state, scopes, redirectURI, loginHint }) {\n      if (!(getPrimaryClientId(options.clientId) && options.clientSecret)) {\n        logger.error(\n          \"Client ID and client secret are required for Facebook. Make sure to provide them in the options.\"\n        );\n        throw new AthenaAuthError(\"CLIENT_ID_AND_SECRET_REQUIRED\");\n      }\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"email\", \"public_profile\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return await createAuthorizationURL({\n        additionalParams: options.configId\n          ? {\n              config_id: options.configId,\n            }\n          : {},\n        authorizationEndpoint: \"https://www.facebook.com/v24.0/dialog/oauth\",\n        id: \"facebook\",\n        loginHint,\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      if (token.idToken && token.idToken.split(\".\").length === 3) {\n        const profile = decodeJwt(token.idToken) as {\n          sub: string;\n          email: string;\n          name: string;\n          picture: string;\n        };\n\n        const user = {\n          email: profile.email,\n          id: profile.sub,\n          name: profile.name,\n          picture: {\n            data: {\n              height: 100,\n              is_silhouette: false,\n              url: profile.picture,\n              width: 100,\n            },\n          },\n        };\n\n        // https://developers.facebook.com/docs/facebook-login/limited-login/permissions\n        // Facebook ID token does not include email_verified claim.\n        // We default to false for security consistency.\n        const userMap = await options.mapProfileToUser?.({\n          ...user,\n          email_verified: false,\n        });\n\n        return {\n          data: profile,\n          user: {\n            ...user,\n            emailVerified: false,\n            ...userMap,\n          },\n        };\n      }\n\n      // The profile is fetched with `accessToken`, which is the credential\n      // that actually proves identity here — and a separate request field\n      // from the `idToken`/token validated by `verifyIdToken`. Since an\n      // opaque token is not app-bound at `/me`, validate this exact token\n      // against the configured app before trusting the profile it returns.\n      const accessToken = token.accessToken;\n      if (!accessToken) {\n        return null;\n      }\n      const tokenUserId = await verifyFacebookAccessToken(accessToken, options);\n      if (!tokenUserId) {\n        return null;\n      }\n\n      const fields = [\n        \"id\",\n        \"name\",\n        \"email\",\n        \"picture\",\n        ...(options?.fields || []),\n      ];\n      const { data: profile, error } = await betterFetch<FacebookProfile>(\n        `https://graph.facebook.com/me?fields=${fields.join(\",\")}`,\n        {\n          auth: {\n            token: accessToken,\n            type: \"Bearer\",\n          },\n        }\n      );\n      if (error) {\n        return null;\n      }\n      // Bind the validated token to the profile it returned.\n      if (profile.id !== tokenUserId) {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.email_verified ?? false,\n          id: profile.id,\n          image: profile.picture.data.url,\n          name: profile.name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"facebook\",\n    name: \"Facebook\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint:\n              \"https://graph.facebook.com/v24.0/oauth/access_token\",\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        options,\n        redirectURI,\n        tokenEndpoint: \"https://graph.facebook.com/v24.0/oauth/access_token\",\n      }),\n    async verifyIdToken(token, nonce) {\n      if (options.disableIdTokenSignIn) {\n        return false;\n      }\n\n      if (options.verifyIdToken) {\n        return options.verifyIdToken(token, nonce);\n      }\n\n      /* limited login */\n      // check is limited token\n      if (token.split(\".\").length === 3) {\n        try {\n          const { payload: jwtClaims } = await jwtVerify(\n            token,\n            createRemoteJWKSet(\n              // https://developers.facebook.com/docs/facebook-login/limited-login/token/#jwks\n              new URL(\n                \"https://limited.facebook.com/.well-known/oauth/openid/jwks/\"\n              )\n            ),\n            {\n              algorithms: [\"RS256\"],\n              audience: options.clientId,\n              issuer: \"https://www.facebook.com\",\n            }\n          );\n\n          if (nonce && jwtClaims.nonce !== nonce) {\n            return false;\n          }\n\n          return !!jwtClaims;\n        } catch {\n          return false;\n        }\n      }\n\n      /* access_token */\n      // An opaque access token carries no app binding of its own, so it\n      // must be validated against the configured app before it can be\n      // trusted as proof of identity.\n      return (await verifyFacebookAccessToken(token, options)) !== null;\n    },\n  } satisfies OAuthProvider<FacebookProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport { getPrimaryClientId } from \"../oauth2/index.ts\";\nimport type { FacebookOptions } from \"./facebook-types.ts\";\n\ninterface FacebookDebugTokenData {\n  app_id?: string;\n  is_valid?: boolean;\n  user_id?: string;\n}\n\n/**\n * Validate an opaque Facebook access token against the configured app.\n *\n * Facebook access tokens are not audience-bound at Graph `/me`: a token\n * minted for any Facebook app returns that app's profile. Without this check,\n * a token issued to an unrelated app could be accepted on the direct sign-in\n * path. Calls `debug_token` and requires the token to be valid, bound to one\n * of the configured client ids, and tied to a user.\n *\n * @see https://developers.facebook.com/docs/facebook-login/guides/access-tokens/debugging\n *\n * @returns The inspected token's `user_id` when valid, otherwise `null`.\n */\nexport async function verifyFacebookAccessToken(\n  accessToken: string,\n  options: FacebookOptions\n): Promise<string | null> {\n  const primaryClientId = getPrimaryClientId(options.clientId);\n  if (!(primaryClientId && options.clientSecret)) {\n    return null;\n  }\n  const clientIds = Array.isArray(options.clientId)\n    ? options.clientId\n    : [options.clientId];\n  const appAccessToken = `${primaryClientId}|${options.clientSecret}`;\n  const { data, error } = await betterFetch<{ data?: FacebookDebugTokenData }>(\n    \"https://graph.facebook.com/debug_token\",\n    {\n      query: {\n        access_token: appAccessToken,\n        input_token: accessToken,\n      },\n    }\n  );\n  if (error || !data?.data) {\n    return null;\n  }\n  const { is_valid, app_id, user_id } = data.data;\n  if (is_valid !== true || !app_id || !clientIds.includes(app_id) || !user_id) {\n    return null;\n  }\n  return user_id;\n}\n","import { logger } from \"../env/index.ts\";\nimport { AthenaAuthError } from \"../error.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface FigmaProfile {\n  email: string;\n  handle: string;\n  id: string;\n  img_url: string;\n}\n\nexport interface FigmaOptions extends ProviderOptions<FigmaProfile> {\n  clientId: string;\n}\n\nexport const figma = (options: FigmaOptions) => {\n  const tokenEndpoint = \"https://api.figma.com/v1/oauth/token\";\n  return {\n    async createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {\n      if (!(options.clientId && options.clientSecret)) {\n        logger.error(\n          \"Client Id and Client Secret are required for Figma. Make sure to provide them in the options.\"\n        );\n        throw new AthenaAuthError(\"CLIENT_ID_AND_SECRET_REQUIRED\");\n      }\n      if (!codeVerifier) {\n        throw new AthenaAuthError(\"codeVerifier is required for Figma\");\n      }\n\n      const _scopes = options.disableDefaultScope ? [] : [\"current_user:read\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n\n      const url = await createAuthorizationURL({\n        authorizationEndpoint: \"https://www.figma.com/oauth\",\n        codeVerifier,\n        id: \"figma\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n\n      return url;\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      try {\n        const { data: profile } = await betterFetch<FigmaProfile>(\n          \"https://api.figma.com/v1/me\",\n          {\n            headers: {\n              Authorization: `Bearer ${token.accessToken}`,\n            },\n          }\n        );\n\n        if (!profile) {\n          logger.error(\"Failed to fetch user from Figma\");\n          return null;\n        }\n\n        const userMap = await options.mapProfileToUser?.(profile);\n\n        return {\n          data: profile,\n          user: {\n            email: profile.email,\n            emailVerified: false,\n            id: profile.id,\n            image: profile.img_url,\n            name: profile.handle,\n            ...userMap,\n          },\n        };\n      } catch (error) {\n        logger.error(\"Failed to fetch user info from Figma:\", error);\n        return null;\n      }\n    },\n    id: \"figma\",\n    name: \"Figma\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            authentication: \"basic\",\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        authentication: \"basic\",\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<FigmaProfile>;\n};\n","import { logger } from \"../env/index.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  getOAuth2Tokens,\n  refreshAccessToken,\n} from \"../oauth2/index.ts\";\nimport { createAuthorizationCodeRequest } from \"../oauth2/validate-authorization-code.ts\";\n\nexport interface GithubProfile {\n  avatar_url: string;\n  bio: string;\n  blog: string;\n  collaborators: string;\n  company: string;\n  created_at: string;\n  disk_usage: string;\n  email: string | null;\n  events_url: string;\n  followers: string;\n  followers_url: string;\n  following: string;\n  following_url: string;\n  gists_url: string;\n  gravatar_id: string;\n  hireable: boolean;\n  html_url: string;\n  id: string;\n  location: string;\n  login: string;\n  name: string;\n  node_id: string;\n  organizations_url: string;\n  owned_private_repos: string;\n  plan: {\n    name: string;\n    space: string;\n    private_repos: string;\n    collaborators: string;\n  };\n  private_gists: string;\n  public_gists: string;\n  public_repos: string;\n  received_events_url: string;\n  repos_url: string;\n  site_admin: boolean;\n  starred_url: string;\n  subscriptions_url: string;\n  total_private_repos: string;\n  twitter_username: string;\n  two_factor_authentication: boolean;\n  type: string;\n  updated_at: string;\n  url: string;\n}\n\nexport interface GithubOptions extends ProviderOptions<GithubProfile> {\n  clientId: string;\n}\nexport const github = (options: GithubOptions) => {\n  const tokenEndpoint = \"https://github.com/login/oauth/access_token\";\n  return {\n    createAuthorizationURL({\n      state,\n      scopes,\n      loginHint,\n      codeVerifier,\n      redirectURI,\n    }) {\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"read:user\", \"user:email\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://github.com/login/oauth/authorize\",\n        codeVerifier,\n        id: \"github\",\n        loginHint,\n        options,\n        prompt: options.prompt,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<GithubProfile>(\n        \"https://api.github.com/user\",\n        {\n          headers: {\n            authorization: `Bearer ${token.accessToken}`,\n            \"User-Agent\": \"athena-auth\",\n          },\n        }\n      );\n      if (error) {\n        return null;\n      }\n      const { data: emails } = await betterFetch<\n        {\n          email: string;\n          primary: boolean;\n          verified: boolean;\n          visibility: \"public\" | \"private\";\n        }[]\n      >(\"https://api.github.com/user/emails\", {\n        headers: {\n          Authorization: `Bearer ${token.accessToken}`,\n          \"User-Agent\": \"athena-auth\",\n        },\n      });\n\n      if (!profile.email && emails) {\n        profile.email = (emails.find((e) => e.primary) ?? emails[0])\n          ?.email as string;\n      }\n      const emailVerified =\n        emails?.find((e) => e.email === profile.email)?.verified ?? false;\n\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified,\n          id: profile.id,\n          image: profile.avatar_url,\n          name: profile.name || profile.login || \"\",\n          ...userMap,\n        },\n      };\n    },\n    id: \"github\",\n    name: \"GitHub\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) => {\n      const { body, headers: requestHeaders } = createAuthorizationCodeRequest({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n      });\n\n      const { data, error } = await betterFetch<\n        | { access_token: string; token_type: string; scope: string }\n        | { error: string; error_description?: string; error_uri?: string }\n      >(tokenEndpoint, {\n        body,\n        headers: requestHeaders,\n        method: \"POST\",\n      });\n\n      if (error) {\n        logger.error(\"GitHub OAuth token exchange failed:\", error);\n        return null;\n      }\n\n      if (\"error\" in data) {\n        logger.error(\"GitHub OAuth token exchange failed:\", data);\n        return null;\n      }\n\n      return getOAuth2Tokens(data);\n    },\n  } satisfies OAuthProvider<GithubProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface GitlabProfile extends Record<string, unknown> {\n  avatar_url: string;\n  bio: string;\n  bot: boolean;\n  can_create_group: boolean;\n  can_create_project: boolean;\n  color_scheme_id: number;\n  commit_email: string;\n  confirmed_at: string;\n  created_at: string;\n  current_sign_in_at: string;\n  email: string;\n  email_verified?: boolean | undefined;\n  external: boolean;\n  extra_shared_runners_minutes_limit: number;\n  followers: number;\n  following: number;\n  id: number;\n  identities: Array<{\n    provider: string;\n    extern_uid: string;\n  }>;\n  job_title: string;\n  last_activity_on: string;\n  last_sign_in_at: string;\n  linkedin: string;\n  local_time: string;\n  location?: string | undefined;\n  name: string;\n  organization: string;\n  private_profile: boolean;\n  projects_limit: number;\n  pronouns: string;\n  public_email: string;\n  shared_runners_minutes_limit: number;\n  skype: string;\n  state: string;\n  theme_id: number;\n  twitter: string;\n  two_factor_enabled: boolean;\n  username: string;\n  web_url: string;\n  website_url: string;\n  work_information?: string | undefined;\n}\n\nexport interface GitlabOptions extends ProviderOptions<GitlabProfile> {\n  clientId: string;\n  issuer?: string | undefined;\n}\n\nconst cleanDoubleSlashes = (input = \"\") =>\n  input\n    .split(\"://\")\n    .map((str) => str.replace(/\\/{2,}/g, \"/\"))\n    .join(\"://\");\n\nconst issuerToEndpoints = (issuer?: string | undefined) => {\n  const baseUrl = issuer || \"https://gitlab.com\";\n  return {\n    authorizationEndpoint: cleanDoubleSlashes(`${baseUrl}/oauth/authorize`),\n    tokenEndpoint: cleanDoubleSlashes(`${baseUrl}/oauth/token`),\n    userinfoEndpoint: cleanDoubleSlashes(`${baseUrl}/api/v4/user`),\n  };\n};\n\nexport const gitlab = (options: GitlabOptions) => {\n  const { authorizationEndpoint, tokenEndpoint, userinfoEndpoint } =\n    issuerToEndpoints(options.issuer);\n  const issuerId = \"gitlab\";\n  const issuerName = \"Gitlab\";\n  return {\n    createAuthorizationURL: async ({\n      state,\n      scopes,\n      codeVerifier,\n      loginHint,\n      redirectURI,\n    }) => {\n      const _scopes = options.disableDefaultScope ? [] : [\"read_user\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return await createAuthorizationURL({\n        authorizationEndpoint,\n        codeVerifier,\n        id: issuerId,\n        loginHint,\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<GitlabProfile>(\n        userinfoEndpoint,\n        { headers: { authorization: `Bearer ${token.accessToken}` } }\n      );\n      if (error || profile.state !== \"active\" || profile.locked) {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      // GitLab may provide email_verified claim, but it's not guaranteed.\n      // We check for it first, then default to false for security consistency.\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.email_verified ?? false,\n          id: profile.id,\n          image: profile.avatar_url,\n          name: profile.name ?? profile.username ?? \"\",\n          ...userMap,\n        },\n      };\n    },\n    id: issuerId,\n    name: issuerName,\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI, codeVerifier }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<GitlabProfile>;\n};\n","import { decodeJwt } from \"jose\";\nimport { logger } from \"../env/index.ts\";\nimport { AthenaAuthError } from \"../error.ts\";\nimport type { OAuthProvider } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  getPrimaryClientId,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\nimport type { GoogleOptions, GoogleProfile } from \"./google-types.ts\";\nimport {\n  isGoogleHostedDomainAllowed,\n  verifyGoogleIdToken,\n} from \"./google-verify.ts\";\nimport { mergeScopes } from \"./helpers/merge-scopes.ts\";\n\nexport { getGooglePublicKey } from \"./google-keys.ts\";\nexport type {\n  GoogleOptions,\n  GoogleProfile,\n  VerifyGoogleIdTokenOptions,\n} from \"./google-types.ts\";\nexport {\n  isGoogleHostedDomainAllowed,\n  verifyGoogleIdToken,\n} from \"./google-verify.ts\";\n\n/**\n * Google OAuth / OpenID Connect provider factory.\n *\n * @param options - Client id/secret, optional hosted domain (`hd`), access type\n * @returns Provider with authorize, token, refresh, ID-token verify, and userinfo\n */\nexport const google = (options: GoogleOptions) =>\n  ({\n    async createAuthorizationURL({\n      state,\n      scopes,\n      codeVerifier,\n      redirectURI,\n      loginHint,\n      display,\n    }) {\n      if (!(getPrimaryClientId(options.clientId) && options.clientSecret)) {\n        logger.error(\n          \"Client Id and Client Secret is required for Google. Make sure to provide them in the options.\"\n        );\n        throw new AthenaAuthError(\"CLIENT_ID_AND_SECRET_REQUIRED\");\n      }\n      if (!codeVerifier) {\n        throw new AthenaAuthError(\"codeVerifier is required for Google\");\n      }\n      const _scopes = mergeScopes(\n        [\"email\", \"profile\", \"openid\"],\n        options.scope,\n        scopes,\n        options.disableDefaultScope\n      );\n      const url = await createAuthorizationURL({\n        accessType: options.accessType,\n        additionalParams: {\n          include_granted_scopes: \"true\",\n        },\n        authorizationEndpoint: \"https://accounts.google.com/o/oauth2/v2/auth\",\n        codeVerifier,\n        display: display || options.display,\n        hd: options.hd,\n        id: \"google\",\n        loginHint,\n        options,\n        prompt: options.prompt,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n      return url;\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      if (!token.idToken) {\n        return null;\n      }\n      const user = decodeJwt(token.idToken) as GoogleProfile;\n      if (!isGoogleHostedDomainAllowed(options.hd, user.hd)) {\n        logger.error(\n          `Google sign-in rejected: id token hosted domain (hd) \"${\n            user.hd ?? \"<missing>\"\n          }\" does not satisfy the configured \"hd\" option \"${options.hd}\".`\n        );\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(user);\n      return {\n        data: user,\n        user: {\n          email: user.email,\n          emailVerified: user.email_verified,\n          id: user.sub,\n          image: user.picture,\n          name: user.name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"google\",\n    name: \"Google\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint: \"https://oauth2.googleapis.com/token\",\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint: \"https://oauth2.googleapis.com/token\",\n      }),\n    async verifyIdToken(token, nonce) {\n      if (options.disableIdTokenSignIn) {\n        return false;\n      }\n      if (options.verifyIdToken) {\n        return options.verifyIdToken(token, nonce);\n      }\n\n      const jwtClaims = await verifyGoogleIdToken({\n        audience: options.clientId,\n        nonce,\n        token,\n      });\n      if (!jwtClaims) {\n        return false;\n      }\n\n      return isGoogleHostedDomainAllowed(options.hd, jwtClaims.hd);\n    },\n  }) satisfies OAuthProvider<GoogleProfile>;\n","import type { JWTPayload } from \"jose\";\nimport { decodeProtectedHeader, jwtVerify } from \"jose\";\nimport { getGooglePublicKey } from \"./google-keys.ts\";\nimport {\n  GOOGLE_ID_TOKEN_MAX_AGE,\n  type VerifyGoogleIdTokenOptions,\n} from \"./google-types.ts\";\n\n/**\n * Verifies a Google ID token against Google's issuer, audience, signature,\n * expiry, and maximum token age.\n */\nexport const verifyGoogleIdToken = async ({\n  token,\n  audience,\n  nonce,\n}: VerifyGoogleIdTokenOptions): Promise<JWTPayload | null> => {\n  try {\n    const { kid, alg: jwtAlg } = decodeProtectedHeader(token);\n    if (!(kid && jwtAlg)) {\n      return null;\n    }\n\n    const publicKey = await getGooglePublicKey(kid);\n    const { payload: jwtClaims } = await jwtVerify(token, publicKey, {\n      algorithms: [jwtAlg],\n      audience,\n      issuer: [\"https://accounts.google.com\", \"accounts.google.com\"],\n      maxTokenAge: GOOGLE_ID_TOKEN_MAX_AGE,\n    });\n\n    if (nonce && jwtClaims.nonce !== nonce) {\n      return null;\n    }\n\n    return jwtClaims;\n  } catch {\n    return null;\n  }\n};\n\n/**\n * Checks whether Google's verified `hd` claim satisfies the configured hosted\n * domain restriction. `hd: \"*\"` accepts any Google Workspace hosted domain.\n */\nexport const isGoogleHostedDomainAllowed = (\n  configuredHostedDomain: string | undefined,\n  tokenHostedDomain: unknown\n) => {\n  if (!configuredHostedDomain) {\n    return true;\n  }\n  if (typeof tokenHostedDomain !== \"string\" || !tokenHostedDomain) {\n    return false;\n  }\n  if (configuredHostedDomain === \"*\") {\n    return true;\n  }\n  return tokenHostedDomain === configuredHostedDomain;\n};\n","import { getJwksPublicKey } from \"./helpers/get-jwks-public-key.ts\";\n\nexport const getGooglePublicKey = async (kid: string) =>\n  getJwksPublicKey(\"https://www.googleapis.com/oauth2/v3/certs\", kid);\n","import type { ProviderOptions } from \"../oauth2/index.ts\";\n\n/**\n * Google OpenID Connect ID-token claims used by the Google social provider.\n * @see https://developers.google.com/identity/openid-connect/openid-connect#an-id-tokens-payload\n */\nexport interface GoogleProfile {\n  aud: string;\n  azp: string;\n  email: string;\n  email_verified: boolean;\n  exp: number;\n  /**\n   * The family name of the user, or last name in most\n   * Western languages.\n   */\n  family_name: string;\n  /**\n   * The given name of the user, or first name in most\n   * Western languages.\n   */\n  given_name: string;\n  hd?: string | undefined;\n  iat: number;\n  iss: string;\n  jti?: string | undefined;\n  locale?: string | undefined;\n  name: string;\n  nbf?: number | undefined;\n  picture: string;\n  sub: string;\n}\n\n/**\n * Configuration for the Google OAuth / OpenID Connect provider.\n */\nexport interface GoogleOptions extends ProviderOptions<GoogleProfile> {\n  /**\n   * The access type to use for the authorization code request.\n   * Use `offline` to receive a refresh token.\n   */\n  accessType?: (\"offline\" | \"online\") | undefined;\n  clientId: string | string[];\n  /**\n   * The display mode to use for the authorization code request.\n   */\n  display?: (\"page\" | \"popup\" | \"touch\" | \"wap\") | undefined;\n  /**\n   * Hosted domain (Google Workspace) the user must belong to.\n   *\n   * Sent as the `hd` authorization hint and enforced against the ID token\n   * `hd` claim. Use `\"*\"` to require any Workspace domain.\n   */\n  hd?: string | undefined;\n}\n\n/** Inputs for {@link verifyGoogleIdToken}. */\nexport interface VerifyGoogleIdTokenOptions {\n  audience: string | string[];\n  nonce?: string | undefined;\n  token: string;\n}\n\n/** Maximum accepted age for Google ID tokens during local verification. */\nexport const GOOGLE_ID_TOKEN_MAX_AGE = \"1h\";\n","/**\n * Merge default, configured, and request-time OAuth scopes without duplicates.\n *\n * Order of application: defaults → `optionScopes` → `requestScopes`.\n * When `disableDefaultScope` is true, the default list is skipped.\n *\n * @param defaults - Provider default scopes (e.g. `openid profile email`)\n * @param optionScopes - Scopes from provider options\n * @param requestScopes - Scopes from the authorization request call\n * @param disableDefaultScope - When true, omit `defaults`\n * @returns Deduplicated scope list preserving first-seen order\n */\nexport function mergeScopes(\n  defaults: string[],\n  optionScopes: string[] | undefined,\n  requestScopes: string[] | undefined,\n  disableDefaultScope?: boolean\n): string[] {\n  const scopes = disableDefaultScope ? [] : [...defaults];\n  if (optionScopes) {\n    scopes.push(...optionScopes);\n  }\n  if (requestScopes) {\n    scopes.push(...requestScopes);\n  }\n  return [...new Set(scopes)];\n}\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface HuggingFaceProfile {\n  canPay?: boolean | undefined;\n  email?: string | undefined;\n  email_verified?: boolean | undefined;\n  isPro: boolean;\n  name: string;\n  orgs?:\n    | {\n        sub: string;\n        name: string;\n        picture: string;\n        preferred_username: string;\n        isEnterprise: boolean | \"plus\";\n        canPay?: boolean;\n        roleInOrg?: \"admin\" | \"write\" | \"contributor\" | \"read\";\n        pendingSSO?: boolean;\n        missingMFA?: boolean;\n        resourceGroups?: {\n          sub: string;\n          name: string;\n          role: \"admin\" | \"write\" | \"contributor\" | \"read\";\n        }[];\n      }\n    | undefined;\n  picture: string;\n  preferred_username: string;\n  profile: string;\n  sub: string;\n  website?: string | undefined;\n}\n\nexport interface HuggingFaceOptions\n  extends ProviderOptions<HuggingFaceProfile> {\n  clientId: string;\n}\n\nexport const huggingface = (options: HuggingFaceOptions) => {\n  const tokenEndpoint = \"https://huggingface.co/oauth/token\";\n  return {\n    createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"openid\", \"profile\", \"email\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://huggingface.co/oauth/authorize\",\n        codeVerifier,\n        id: \"huggingface\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<HuggingFaceProfile>(\n        \"https://huggingface.co/oauth/userinfo\",\n        {\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n          },\n          method: \"GET\",\n        }\n      );\n      if (error) {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.email_verified ?? false,\n          id: profile.sub,\n          image: profile.picture,\n          name: profile.name || profile.preferred_username || \"\",\n          ...userMap,\n        },\n      };\n    },\n    id: \"huggingface\",\n    name: \"Hugging Face\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<HuggingFaceProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\ninterface Partner {\n  /** Partner-specific ID (consent required: kakaotalk_message) */\n  uuid?: string | undefined;\n}\n\ninterface Profile {\n  /** Whether the profile image is the default */\n  is_default_image?: boolean | undefined;\n  /** Whether the nickname is the default */\n  is_default_nickname?: boolean | undefined;\n  /** Nickname (consent required: profile/nickname) */\n  nickname?: string | undefined;\n  /** Profile image URL (consent required: profile/profile image) */\n  profile_image_url?: string | undefined;\n  /** Thumbnail image URL (consent required: profile/profile image) */\n  thumbnail_image_url?: string | undefined;\n}\n\ninterface KakaoAccount {\n  /** Age range */\n  age_range?: string | undefined;\n  /** Consent required: age range */\n  age_range_needs_agreement?: boolean | undefined;\n  /** Birthday (MMDD) */\n  birthday?: string | undefined;\n  /** Consent required: birthday */\n  birthday_needs_agreement?: boolean | undefined;\n  /** Birthday type (SOLAR/LUNAR) */\n  birthday_type?: string | undefined;\n  /** Birth year (YYYY) */\n  birthyear?: string | undefined;\n  /** Consent required: birth year */\n  birthyear_needs_agreement?: boolean | undefined;\n  /** CI (unique identifier) */\n  ci?: string | undefined;\n  /** CI authentication time (UTC) */\n  ci_authenticated_at?: string | undefined;\n  /** Consent required: CI */\n  ci_needs_agreement?: boolean | undefined;\n  /** Email */\n  email?: string | undefined;\n  /** Consent required: email */\n  email_needs_agreement?: boolean | undefined;\n  /** Gender (male/female) */\n  gender?: string | undefined;\n  /** Consent required: gender */\n  gender_needs_agreement?: boolean | undefined;\n  /** Email valid */\n  is_email_valid?: boolean | undefined;\n  /** Email verified */\n  is_email_verified?: boolean | undefined;\n  /** Whether birthday is in a leap month */\n  is_leap_month?: boolean | undefined;\n  /** Name */\n  name?: string | undefined;\n  /** Consent required: name */\n  name_needs_agreement?: boolean | undefined;\n  /** Phone number */\n  phone_number?: string | undefined;\n  /** Consent required: phone number */\n  phone_number_needs_agreement?: boolean | undefined;\n  /** Profile info */\n  profile?: Profile | undefined;\n  /** Consent required: profile image */\n  profile_image_needs_agreement?: boolean | undefined;\n  /** Consent required: profile info (nickname/profile image) */\n  profile_needs_agreement?: boolean | undefined;\n  /** Consent required: nickname */\n  profile_nickname_needs_agreement?: boolean | undefined;\n}\n\nexport interface KakaoProfile {\n  /** UTC datetime when the user connected the service */\n  connected_at?: string | undefined;\n  /** Partner info */\n  for_partner?: Partner | undefined;\n  /**\n   * Whether the user has signed up (only present if auto-connection is disabled)\n   * false: preregistered, true: registered\n   */\n  has_signed_up?: boolean | undefined;\n  /** Kakao user ID */\n  id: number;\n  /** Kakao account info */\n  kakao_account: KakaoAccount;\n  /** Custom user properties */\n  properties?: Record<string, unknown> | undefined;\n  /** UTC datetime when the user signed up via Kakao Sync */\n  synched_at?: string | undefined;\n}\n\nexport interface KakaoOptions extends ProviderOptions<KakaoProfile> {\n  clientId: string;\n}\n\nexport const kakao = (options: KakaoOptions) => {\n  const tokenEndpoint = \"https://kauth.kakao.com/oauth/token\";\n  return {\n    createAuthorizationURL({ state, scopes, redirectURI }) {\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"account_email\", \"profile_image\", \"profile_nickname\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://kauth.kakao.com/oauth/authorize\",\n        id: \"kakao\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<KakaoProfile>(\n        \"https://kapi.kakao.com/v2/user/me\",\n        {\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n          },\n        }\n      );\n      if (error || !profile) {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      const account = profile.kakao_account || {};\n      const kakaoProfile = account.profile || {};\n      const user = {\n        email: account.email,\n        emailVerified: !!account.is_email_valid && !!account.is_email_verified,\n        id: String(profile.id),\n        image:\n          kakaoProfile.profile_image_url || kakaoProfile.thumbnail_image_url,\n        name: kakaoProfile.nickname || account.name || \"\",\n        ...userMap,\n      };\n      return {\n        data: profile,\n        user,\n      };\n    },\n    id: \"kakao\",\n    name: \"Kakao\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<KakaoProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface KickProfile {\n  /**\n   * The email of the user\n   */\n  email: string;\n  /**\n   * The name of the user\n   */\n  name: string;\n  /**\n   * The picture of the user\n   */\n  profile_picture: string;\n  /**\n   * The user id of the user\n   */\n  user_id: string;\n}\n\nexport interface KickOptions extends ProviderOptions<KickProfile> {\n  clientId: string;\n}\n\nexport const kick = (options: KickOptions) => {\n  return {\n    createAuthorizationURL({ state, scopes, redirectURI, codeVerifier }) {\n      const _scopes = options.disableDefaultScope ? [] : [\"user:read\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://id.kick.com/oauth/authorize\",\n        codeVerifier,\n        id: \"kick\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      const { data, error } = await betterFetch<{\n        data: KickProfile[];\n      }>(\"https://api.kick.com/public/v1/users\", {\n        headers: {\n          Authorization: `Bearer ${token.accessToken}`,\n        },\n        method: \"GET\",\n      });\n\n      if (error) {\n        return null;\n      }\n\n      const profile = data.data[0]!;\n\n      const userMap = await options.mapProfileToUser?.(profile);\n      // Kick does not provide email_verified claim.\n      // We default to false for security consistency.\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: false,\n          id: profile.user_id,\n          image: profile.profile_picture,\n          name: profile.name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"kick\",\n    name: \"Kick\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint: \"https://id.kick.com/oauth/token\",\n          }),\n    async validateAuthorizationCode({ code, redirectURI, codeVerifier }) {\n      return validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint: \"https://id.kick.com/oauth/token\",\n      });\n    },\n  } satisfies OAuthProvider<KickProfile>;\n};\n","import { decodeJwt } from \"jose\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface LineIdTokenPayload {\n  amr?: string[] | undefined;\n  aud: string;\n  email?: string | undefined;\n  exp: number;\n  iat: number;\n  iss: string;\n  name?: string | undefined;\n  nonce?: string | undefined;\n  picture?: string | undefined;\n  sub: string;\n}\n\nexport interface LineUserInfo {\n  email?: string | undefined;\n  name?: string | undefined;\n  picture?: string | undefined;\n  sub: string;\n}\n\nexport interface LineOptions\n  extends ProviderOptions<LineUserInfo | LineIdTokenPayload> {\n  clientId: string;\n}\n\n/**\n * LINE Login v2.1\n * - Authorization endpoint: https://access.line.me/oauth2/v2.1/authorize\n * - Token endpoint: https://api.line.me/oauth2/v2.1/token\n * - UserInfo endpoint: https://api.line.me/oauth2/v2.1/userinfo\n * - Verify ID token: https://api.line.me/oauth2/v2.1/verify\n *\n * Docs: https://developers.line.biz/en/reference/line-login/#issue-access-token\n */\nexport const line = (options: LineOptions) => {\n  const authorizationEndpoint = \"https://access.line.me/oauth2/v2.1/authorize\";\n  const tokenEndpoint = \"https://api.line.me/oauth2/v2.1/token\";\n  const userInfoEndpoint = \"https://api.line.me/oauth2/v2.1/userinfo\";\n  const verifyIdTokenEndpoint = \"https://api.line.me/oauth2/v2.1/verify\";\n\n  return {\n    async createAuthorizationURL({\n      state,\n      scopes,\n      codeVerifier,\n      redirectURI,\n      loginHint,\n    }) {\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"openid\", \"profile\", \"email\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return await createAuthorizationURL({\n        authorizationEndpoint,\n        codeVerifier,\n        id: \"line\",\n        loginHint,\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      let profile: LineUserInfo | LineIdTokenPayload | null = null;\n      // Prefer ID token if available\n      if (token.idToken) {\n        try {\n          profile = decodeJwt(token.idToken) as LineIdTokenPayload;\n        } catch {\n          // Invalid ID tokens fall back to the UserInfo endpoint below.\n        }\n      }\n      // Fallback to UserInfo endpoint\n      if (!profile) {\n        const { data } = await betterFetch<LineUserInfo>(userInfoEndpoint, {\n          headers: {\n            authorization: `Bearer ${token.accessToken}`,\n          },\n        });\n        profile = data || null;\n      }\n      if (!profile) {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      // ID preference order (sub is present on both ID-token and userinfo payloads)\n      const id = profile.sub;\n      const name = profile.name || \"\";\n      const image = profile.picture || undefined;\n      const email = profile.email;\n      return {\n        data: profile,\n        user: {\n          email,\n          // LINE does not expose email verification status in ID token/userinfo\n          emailVerified: false,\n          id,\n          image,\n          name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"line\",\n    name: \"LINE\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n    async verifyIdToken(token, nonce) {\n      if (options.disableIdTokenSignIn) {\n        return false;\n      }\n      if (options.verifyIdToken) {\n        return options.verifyIdToken(token, nonce);\n      }\n      const body = new URLSearchParams();\n      body.set(\"id_token\", token);\n      body.set(\"client_id\", options.clientId);\n      if (nonce) {\n        body.set(\"nonce\", nonce);\n      }\n      const { data, error } = await betterFetch<LineIdTokenPayload>(\n        verifyIdTokenEndpoint,\n        {\n          body,\n          headers: {\n            \"content-type\": \"application/x-www-form-urlencoded\",\n          },\n          method: \"POST\",\n        }\n      );\n      if (error || !data) {\n        return false;\n      }\n      // aud must match clientId; nonce (if provided) must also match nonce\n      if (data.aud !== options.clientId) {\n        return false;\n      }\n      if (data.nonce && data.nonce !== nonce) {\n        return false;\n      }\n      return true;\n    },\n  } satisfies OAuthProvider<LineUserInfo | LineIdTokenPayload, LineOptions>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface LinearUser {\n  active: boolean;\n  avatarUrl?: string | undefined;\n  createdAt: string;\n  email: string;\n  id: string;\n  name: string;\n  updatedAt: string;\n}\n\nexport interface LinearProfile {\n  data: {\n    viewer: LinearUser;\n  };\n}\n\nexport interface LinearOptions extends ProviderOptions<LinearUser> {\n  clientId: string;\n}\n\nexport const linear = (options: LinearOptions) => {\n  const tokenEndpoint = \"https://api.linear.app/oauth/token\";\n  return {\n    createAuthorizationURL({ state, scopes, loginHint, redirectURI }) {\n      const _scopes = options.disableDefaultScope ? [] : [\"read\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://linear.app/oauth/authorize\",\n        id: \"linear\",\n        loginHint,\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      const { data: profile, error } = await betterFetch<LinearProfile>(\n        \"https://api.linear.app/graphql\",\n        {\n          body: JSON.stringify({\n            query: `\n              query {\n                viewer {\n                  id\n                  name\n                  email\n                  avatarUrl\n                  active\n                  createdAt\n                  updatedAt\n                }\n              }\n            `,\n          }),\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n            \"Content-Type\": \"application/json\",\n          },\n          method: \"POST\",\n        }\n      );\n      if (error || !profile?.data?.viewer) {\n        return null;\n      }\n\n      const userData = profile.data.viewer;\n      const userMap = await options.mapProfileToUser?.(userData);\n      // Linear does not provide email_verified claim.\n      // We default to false for security consistency.\n      return {\n        data: userData,\n        user: {\n          email: profile.data.viewer.email,\n          emailVerified: false,\n          id: profile.data.viewer.id,\n          image: profile.data.viewer.avatarUrl,\n          name: profile.data.viewer.name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"linear\",\n    name: \"Linear\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<LinearUser>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface LinkedInProfile {\n  email?: string;\n  email_verified?: boolean;\n  family_name: string;\n  given_name: string;\n  locale: {\n    country: string;\n    language: string;\n  };\n  name: string;\n  picture: string;\n  sub: string;\n}\n\nexport interface LinkedInOptions extends ProviderOptions<LinkedInProfile> {\n  clientId: string;\n}\n\nexport const linkedin = (options: LinkedInOptions) => {\n  const authorizationEndpoint =\n    \"https://www.linkedin.com/oauth/v2/authorization\";\n  const tokenEndpoint = \"https://www.linkedin.com/oauth/v2/accessToken\";\n\n  return {\n    createAuthorizationURL: async ({\n      state,\n      scopes,\n      redirectURI,\n      loginHint,\n    }) => {\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"profile\", \"email\", \"openid\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return await createAuthorizationURL({\n        authorizationEndpoint,\n        id: \"linkedin\",\n        loginHint,\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<LinkedInProfile>(\n        \"https://api.linkedin.com/v2/userinfo\",\n        {\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n          },\n          method: \"GET\",\n        }\n      );\n\n      if (error) {\n        return null;\n      }\n\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.email_verified ?? false,\n          id: profile.sub,\n          image: profile.picture,\n          name: profile.name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"linkedin\",\n    name: \"Linkedin\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      await validateAuthorizationCode({\n        code,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<LinkedInProfile>;\n};\n","import { decodeJwt, decodeProtectedHeader, jwtVerify } from \"jose\";\nimport { logger } from \"../env/index.ts\";\nimport { AthenaAuthError } from \"../error.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  getPrimaryClientId,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\nimport { base64 } from \"../utils/base64.ts\";\nimport { trimTrailingSlash } from \"./helpers/trim-trailing-slash.ts\";\nimport { getMicrosoftPublicKey } from \"./microsoft-keys.ts\";\n\nimport {\n  MICROSOFT_CONSUMER_TENANT_ID,\n  type MicrosoftEntraIDProfile,\n  type MicrosoftOptions,\n} from \"./microsoft-types.ts\";\n\nexport { getMicrosoftPublicKey } from \"./microsoft-keys.ts\";\nexport type {\n  MicrosoftEntraIDProfile,\n  MicrosoftOptions,\n} from \"./microsoft-types.ts\";\nexport { MICROSOFT_CONSUMER_TENANT_ID } from \"./microsoft-types.ts\";\n\n/**\n * Microsoft Entra ID (Azure AD) OAuth provider factory.\n *\n * Supports multi-tenant endpoints (common/organizations/consumers) with\n * explicit tenant-class checks on ID tokens.\n *\n * @param options - Client id, optional tenant/authority, profile photo settings\n */\n\nexport const microsoft = (options: MicrosoftOptions) => {\n  const tenant = options.tenantId || \"common\";\n  // Trim any trailing slash so endpoint URLs and the issuer comparison below\n  // never produce a double slash (e.g. a configured `https://host/` would make\n  // the expected issuer `https://host//<tid>/v2.0` and reject every token).\n  const authority = trimTrailingSlash(\n    options.authority || \"https://login.microsoftonline.com\"\n  );\n  const authorizationEndpoint = `${authority}/${tenant}/oauth2/v2.0/authorize`;\n  const tokenEndpoint = `${authority}/${tenant}/oauth2/v2.0/token`;\n  return {\n    createAuthorizationURL(data) {\n      // Microsoft Entra supports public clients (SPA / native apps with\n      // PKCE only), so clientSecret is intentionally not required here.\n      // See https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-auth-code-flow\n      if (!getPrimaryClientId(options.clientId)) {\n        logger.error(\n          \"Client Id is required for Microsoft Entra ID. Make sure to provide it in the options.\"\n        );\n        throw new AthenaAuthError(\"CLIENT_ID_AND_SECRET_REQUIRED\");\n      }\n      const scopes = options.disableDefaultScope\n        ? []\n        : [\"openid\", \"profile\", \"email\", \"User.Read\", \"offline_access\"];\n      if (options.scope) {\n        scopes.push(...options.scope);\n      }\n      if (data.scopes) {\n        scopes.push(...data.scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint,\n        codeVerifier: data.codeVerifier,\n        id: \"microsoft\",\n        loginHint: data.loginHint,\n        options,\n        prompt: options.prompt,\n        redirectURI: data.redirectURI,\n        scopes,\n        state: data.state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      if (!token.idToken) {\n        return null;\n      }\n      const user = decodeJwt(token.idToken) as MicrosoftEntraIDProfile;\n      const profilePhotoSize = options.profilePhotoSize || 48;\n      await betterFetch<ArrayBuffer>(\n        `https://graph.microsoft.com/v1.0/me/photos/${profilePhotoSize}x${profilePhotoSize}/$value`,\n        {\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n          },\n          async onResponse(context) {\n            if (options.disableProfilePhoto || !context.response.ok) {\n              return;\n            }\n            try {\n              const response = context.response.clone();\n              const pictureBuffer = await response.arrayBuffer();\n              const pictureBase64 = base64.encode(pictureBuffer);\n              user.picture = `data:image/jpeg;base64, ${pictureBase64}`;\n            } catch (e) {\n              logger.error(\n                e && typeof e === \"object\" && \"name\" in e\n                  ? (e.name as string)\n                  : \"\",\n                e\n              );\n            }\n          },\n        }\n      );\n      const userMap = await options.mapProfileToUser?.(user);\n      // Microsoft Entra ID does NOT include email_verified claim by default.\n      // It must be configured as an optional claim in the app registration.\n      // We default to false when not provided for security consistency.\n      // We can also check verified_primary_email/verified_secondary_email arrays as fallback.\n      const emailVerified =\n        user.email_verified === undefined\n          ? !!(\n              user.email &&\n              (user.verified_primary_email?.includes(user.email) ||\n                user.verified_secondary_email?.includes(user.email))\n            )\n          : user.email_verified;\n      return {\n        data: user,\n        user: {\n          email: user.email,\n          emailVerified,\n          id: user.sub,\n          image: user.picture,\n          name: user.name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"microsoft\",\n    name: \"Microsoft EntraID\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) => {\n          const scopes = options.disableDefaultScope\n            ? []\n            : [\"openid\", \"profile\", \"email\", \"User.Read\", \"offline_access\"];\n          if (options.scope) {\n            scopes.push(...options.scope);\n          }\n\n          return refreshAccessToken({\n            extraParams: {\n              scope: scopes.join(\" \"), // Include the scopes in request to microsoft\n            },\n            options: {\n              clientId: options.clientId,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          });\n        },\n    validateAuthorizationCode({ code, codeVerifier, redirectURI }) {\n      return validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      });\n    },\n    async verifyIdToken(token, nonce) {\n      if (options.disableIdTokenSignIn) {\n        return false;\n      }\n      if (options.verifyIdToken) {\n        return options.verifyIdToken(token, nonce);\n      }\n\n      try {\n        const { kid, alg: jwtAlg } = decodeProtectedHeader(token);\n        if (!(kid && jwtAlg)) {\n          return false;\n        }\n\n        const publicKey = await getMicrosoftPublicKey(kid, tenant, authority);\n        const verifyOptions: {\n          algorithms: [string];\n          audience: string | string[];\n          maxTokenAge: string;\n          issuer?: string;\n        } = {\n          algorithms: [jwtAlg],\n          audience: options.clientId,\n          maxTokenAge: \"1h\",\n        };\n        /**\n         * Issuer varies per user's tenant for multi-tenant endpoints, so only validate for specific tenants.\n         * @see https://learn.microsoft.com/en-us/entra/identity-platform/v2-protocols#endpoints\n         */\n        if (\n          tenant !== \"common\" &&\n          tenant !== \"organizations\" &&\n          tenant !== \"consumers\"\n        ) {\n          verifyOptions.issuer = `${authority}/${tenant}/v2.0`;\n        }\n        const { payload: jwtClaims } = await jwtVerify(\n          token,\n          publicKey,\n          verifyOptions\n        );\n\n        if (nonce && jwtClaims.nonce !== nonce) {\n          return false;\n        }\n\n        // The multi-tenant endpoints (common/organizations/consumers) skip\n        // jose's issuer check above because the issuer varies per tenant, and\n        // the organizations and consumers JWKS sets overlap. Enforce the tenant\n        // binding explicitly so a token from a disallowed account class cannot\n        // pass: the issuer must name the token's own tenant, and the account\n        // class must match the configured restriction.\n        // @see https://learn.microsoft.com/en-us/entra/identity-platform/id-token-claims-reference\n        const tid = jwtClaims.tid;\n        if (\n          typeof tid !== \"string\" ||\n          jwtClaims.iss !== `${authority}/${tid}/v2.0`\n        ) {\n          return false;\n        }\n        if (\n          tenant === \"organizations\" &&\n          tid === MICROSOFT_CONSUMER_TENANT_ID\n        ) {\n          return false;\n        }\n        if (tenant === \"consumers\" && tid !== MICROSOFT_CONSUMER_TENANT_ID) {\n          return false;\n        }\n\n        return true;\n      } catch (error) {\n        logger.error(\"Failed to verify ID token:\", error);\n        return false;\n      }\n    },\n  } satisfies OAuthProvider;\n};\n","import { getJwksPublicKey } from \"./helpers/get-jwks-public-key.ts\";\n\n/**\n * Import the Microsoft Entra ID JWKS public key for the given JWT `kid`.\n *\n * @param kid - JWT protected-header key id\n * @param tenant - Tenant id or common/organizations/consumers\n * @param authority - Authority host (no trailing slash), e.g. login.microsoftonline.com\n */\nexport const getMicrosoftPublicKey = async (\n  kid: string,\n  tenant: string,\n  authority: string\n) => getJwksPublicKey(`${authority}/${tenant}/discovery/v2.0/keys`, kid);\n","import type { ProviderOptions } from \"../oauth2/index.ts\";\n\n/**\n * Microsoft personal (consumer) account tenant id.\n * @see https://learn.microsoft.com/en-us/entra/identity-platform/id-token-claims-reference\n */\nexport const MICROSOFT_CONSUMER_TENANT_ID =\n  \"9188040d-6c67-4c5b-b112-36a304b66dad\";\n\nexport interface MicrosoftEntraIDProfile extends Record<string, unknown> {\n  /** User account status in tenant (0 = member, 1 = guest) */\n  acct: 0 | 1;\n  /** Auth Context IDs */\n  acrs: string;\n  /** Internal claim used to record data for token reuse */\n  aio: string;\n  /** Access token hash included in ID tokens when issued with an OAuth 2.0 access token */\n  at_hash: string;\n  /** Identifies the intended recipient of the token */\n  aud: string;\n  /** Time when the user last authenticated */\n  auth_time: Date;\n  /** Code hash included in ID tokens when issued with an OAuth 2.0 authorization code */\n  c_hash: string;\n  /** User's country/region */\n  ctry: string;\n  /** User's email address */\n  email?: string;\n  /** Whether the user's email is verified (optional claim, must be configured in app registration) */\n  email_verified?: boolean | undefined;\n  /** Identifies the expiration time on or after which the JWT can't be accepted for processing */\n  exp: Date;\n  /** User's family name/surname */\n  family_name: string;\n  /** IP address of requesting client when inside VNET */\n  fwd: string;\n  /** User's given/first name */\n  given_name: string;\n  /** Group claims */\n  groups: string;\n  /** Indicates if user is in at least one group */\n  hasgroups: boolean;\n  /** Indicates when the authentication for the token occurred */\n  iat: Date;\n  /** Records the identity provider that authenticated the subject of the token */\n  idp: string;\n  /** Inside Corporate Network flag */\n  in_corp: string;\n  /** IP Address */\n  ipaddr: string;\n  /** Identifies the issuer, or \"authorization server\" that constructs and returns the token */\n  iss: string;\n  /** Login hint for SSO */\n  login_hint: string;\n  /** Human-readable value that identifies the subject of the token */\n  name: string;\n  /** Identifies the time before which the JWT can't be accepted for processing */\n  nbf: Date;\n  /** Matches the parameter included in the original authorize request */\n  nonce: string;\n  /** Immutable identifier for the user account */\n  oid: string;\n  /** On-premises Security Identifier */\n  onprem_sid: string;\n  /** User's profile picture */\n  picture: string;\n  /** The primary username that represents the user */\n  preferred_username: string;\n  /** Password Expiration Time */\n  pwd_exp: number;\n  /** Change Password URL */\n  pwd_url: string;\n  /** Internal claim used to revalidate tokens */\n  rh: string;\n  /** Set of roles assigned to the user */\n  roles: string[];\n  /** Unique identifier for a session */\n  sid: string;\n  /** Subject identifier - unique to application ID */\n  sub: string;\n  /** Resource tenant's country/region */\n  tenant_ctry: string;\n  /** Region of the resource tenant */\n  tenant_region_scope: string;\n  /** Tenant ID the user is signing in to */\n  tid: string;\n  /** UserPrincipalName */\n  upn: string;\n  /** Token identifier claim */\n  uti: string;\n  /** User's verified primary email addresses */\n  verified_primary_email: string[];\n  /** User's verified secondary email addresses */\n  verified_secondary_email: string[];\n  /** VNET specifier information */\n  vnet: string;\n  /** Client Capabilities */\n  xms_cc: string;\n  /** Whether user's email domain is verified */\n  xms_edov: boolean;\n  /** Preferred data location for Multi-Geo tenants */\n  xms_pdl: string;\n  /** User preferred language */\n  xms_pl: string;\n  /** Tenant preferred language */\n  xms_tpl: string;\n  /** Zero-touch Deployment ID */\n  ztdid: string;\n}\n\nexport interface MicrosoftOptions\n  extends ProviderOptions<MicrosoftEntraIDProfile> {\n  /**\n   * The authentication authority URL. Use the default \"https://login.microsoftonline.com\" for standard Entra ID or \"https://<tenant-id>.ciamlogin.com\" for CIAM scenarios.\n   * @default \"https://login.microsoftonline.com\"\n   */\n  authority?: string | undefined;\n  clientId: string | string[];\n  /**\n   * Disable profile photo\n   */\n  disableProfilePhoto?: boolean | undefined;\n  /**\n   * The size of the profile photo\n   * @default 48\n   */\n  profilePhotoSize?:\n    | (48 | 64 | 96 | 120 | 240 | 360 | 432 | 504 | 648)\n    | undefined;\n  /**\n   * The tenant ID of the Microsoft account\n   * @default \"common\"\n   */\n  tenantId?: string | undefined;\n}\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface NaverProfile {\n  /** API response message */\n  message: string;\n  response: {\n    /** Unique Naver user identifier */\n    id: string;\n    /** User nickname */\n    nickname: string;\n    /** User real name */\n    name: string;\n    /** User email address */\n    email: string;\n    /** Gender (F: female, M: male, U: unknown) */\n    gender: string;\n    /** Age range */\n    age: string;\n    /** Birthday (MM-DD format) */\n    birthday: string;\n    /** Birth year */\n    birthyear: string;\n    /** Profile image URL */\n    profile_image: string;\n    /** Mobile phone number */\n    mobile: string;\n  };\n  /** API response result code */\n  resultcode: string;\n}\n\nexport interface NaverOptions extends ProviderOptions<NaverProfile> {\n  clientId: string;\n}\n\nexport const naver = (options: NaverOptions) => {\n  const tokenEndpoint = \"https://nid.naver.com/oauth2.0/token\";\n  return {\n    createAuthorizationURL({ state, scopes, redirectURI }) {\n      const _scopes = options.disableDefaultScope ? [] : [\"profile\", \"email\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://nid.naver.com/oauth2.0/authorize\",\n        id: \"naver\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<NaverProfile>(\n        \"https://openapi.naver.com/v1/nid/me\",\n        {\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n          },\n        }\n      );\n      if (error || !profile || profile.resultcode !== \"00\") {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      const res = profile.response || {};\n      const user = {\n        email: res.email,\n        emailVerified: false,\n        id: res.id,\n        image: res.profile_image,\n        name: res.name || res.nickname || \"\",\n        ...userMap,\n      };\n      return {\n        data: profile,\n        user,\n      };\n    },\n    id: \"naver\",\n    name: \"Naver\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<NaverProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface NotionProfile {\n  avatar_url?: string | undefined;\n  id: string;\n  name?: string | undefined;\n  object: \"user\";\n  person?:\n    | {\n        email?: string;\n      }\n    | undefined;\n  type: \"person\" | \"bot\";\n}\n\nexport interface NotionOptions extends ProviderOptions<NotionProfile> {\n  clientId: string;\n}\n\nexport const notion = (options: NotionOptions) => {\n  const tokenEndpoint = \"https://api.notion.com/v1/oauth/token\";\n  return {\n    createAuthorizationURL({ state, scopes, loginHint, redirectURI }) {\n      const _scopes: string[] = options.disableDefaultScope ? [] : [];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        additionalParams: {\n          owner: \"user\",\n        },\n        authorizationEndpoint: \"https://api.notion.com/v1/oauth/authorize\",\n        id: \"notion\",\n        loginHint,\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<{\n        bot: {\n          owner: {\n            user: NotionProfile;\n          };\n        };\n      }>(\"https://api.notion.com/v1/users/me\", {\n        headers: {\n          Authorization: `Bearer ${token.accessToken}`,\n          \"Notion-Version\": \"2022-06-28\",\n        },\n      });\n      if (error || !profile) {\n        return null;\n      }\n      const userProfile = profile.bot?.owner?.user;\n      if (!userProfile) {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(userProfile);\n      return {\n        data: userProfile,\n        user: {\n          email: userProfile.person?.email || null,\n          emailVerified: false,\n          id: userProfile.id,\n          image: userProfile.avatar_url,\n          name: userProfile.name || \"\",\n          ...userMap,\n        },\n      };\n    },\n    id: \"notion\",\n    name: \"Notion\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      validateAuthorizationCode({\n        authentication: \"basic\",\n        code,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<NotionProfile>;\n};\n","import { decodeJwt } from \"jose\";\nimport { logger } from \"../env/index.ts\";\nimport { AthenaAuthError } from \"../error.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface PaybinProfile {\n  email: string;\n  email_verified?: boolean | undefined;\n  family_name?: string | undefined;\n  given_name?: string | undefined;\n  name?: string | undefined;\n  picture?: string | undefined;\n  preferred_username?: string | undefined;\n  sub: string;\n}\n\nexport interface PaybinOptions extends ProviderOptions<PaybinProfile> {\n  clientId: string;\n  /**\n   * The issuer URL of your Paybin OAuth server\n   * @default \"https://idp.paybin.io\"\n   */\n  issuer?: string | undefined;\n}\n\nexport const paybin = (options: PaybinOptions) => {\n  const issuer = options.issuer || \"https://idp.paybin.io\";\n  const authorizationEndpoint = `${issuer}/oauth2/authorize`;\n  const tokenEndpoint = `${issuer}/oauth2/token`;\n\n  return {\n    async createAuthorizationURL({\n      state,\n      scopes,\n      codeVerifier,\n      redirectURI,\n      loginHint,\n    }) {\n      if (!(options.clientId && options.clientSecret)) {\n        logger.error(\n          \"Client Id and Client Secret is required for Paybin. Make sure to provide them in the options.\"\n        );\n        throw new AthenaAuthError(\"CLIENT_ID_AND_SECRET_REQUIRED\");\n      }\n      if (!codeVerifier) {\n        throw new AthenaAuthError(\"codeVerifier is required for Paybin\");\n      }\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"openid\", \"email\", \"profile\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      const url = await createAuthorizationURL({\n        authorizationEndpoint,\n        codeVerifier,\n        id: \"paybin\",\n        loginHint,\n        options,\n        prompt: options.prompt,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n      return url;\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      if (!token.idToken) {\n        return null;\n      }\n      const user = decodeJwt(token.idToken) as PaybinProfile;\n      const userMap = await options.mapProfileToUser?.(user);\n      return {\n        data: user,\n        user: {\n          email: user.email,\n          emailVerified: Boolean(user.email_verified),\n          id: user.sub,\n          image: user.picture,\n          name: user.name || user.preferred_username || \"\",\n          ...userMap,\n        },\n      };\n    },\n    id: \"paybin\",\n    name: \"Paybin\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<PaybinProfile>;\n};\n","import { decodeJwt, decodeProtectedHeader, jwtVerify } from \"jose\";\nimport { logger } from \"../env/index.ts\";\nimport { AthenaAuthError } from \"../error.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider } from \"../oauth2/index.ts\";\nimport { createAuthorizationURL } from \"../oauth2/index.ts\";\nimport { base64 } from \"../utils/base64.ts\";\nimport { getPayPalPublicKey } from \"./paypal-keys.ts\";\nimport type {\n  PayPalOptions,\n  PayPalProfile,\n  PayPalTokenResponse,\n} from \"./paypal-types.ts\";\n\nexport { getPayPalPublicKey } from \"./paypal-keys.ts\";\nexport type {\n  PayPalOptions,\n  PayPalProfile,\n  PayPalTokenResponse,\n} from \"./paypal-types.ts\";\n\n/**\n * ID token signing algorithms advertised by PayPal's OpenID configuration.\n * Anything outside this allowlist is rejected so each token is only ever\n * verified with the algorithm it was issued for.\n *\n * @see https://www.paypal.com/.well-known/openid-configuration\n */\nconst PAYPAL_ID_TOKEN_ALGORITHMS = [\"RS256\", \"HS256\"] as const;\n\n/**\n * PayPal Login with PayPal OAuth provider factory.\n *\n * @param options - Client credentials and sandbox/live environment\n * @returns OAuth provider implementation for PayPal\n */\nexport const paypal = (options: PayPalOptions) => {\n  const environment = options.environment || \"sandbox\";\n  const isSandbox = environment === \"sandbox\";\n\n  const authorizationEndpoint = isSandbox\n    ? \"https://www.sandbox.paypal.com/signin/authorize\"\n    : \"https://www.paypal.com/signin/authorize\";\n\n  const tokenEndpoint = isSandbox\n    ? \"https://api-m.sandbox.paypal.com/v1/oauth2/token\"\n    : \"https://api-m.paypal.com/v1/oauth2/token\";\n\n  const userInfoEndpoint = isSandbox\n    ? \"https://api-m.sandbox.paypal.com/v1/identity/oauth2/userinfo\"\n    : \"https://api-m.paypal.com/v1/identity/oauth2/userinfo\";\n\n  /**\n   * Issuer and JWKS endpoints used to cryptographically verify ID tokens.\n   *\n   * @see https://www.paypal.com/.well-known/openid-configuration\n   */\n  const issuer = isSandbox\n    ? \"https://www.sandbox.paypal.com\"\n    : \"https://www.paypal.com\";\n\n  const jwksEndpoint = isSandbox\n    ? \"https://api.sandbox.paypal.com/v1/oauth2/certs\"\n    : \"https://api.paypal.com/v1/oauth2/certs\";\n\n  return {\n    async createAuthorizationURL({ state, codeVerifier, redirectURI }) {\n      if (!(options.clientId && options.clientSecret)) {\n        logger.error(\n          \"Client Id and Client Secret is required for PayPal. Make sure to provide them in the options.\"\n        );\n        throw new AthenaAuthError(\"CLIENT_ID_AND_SECRET_REQUIRED\");\n      }\n\n      /**\n       * Log in with PayPal doesn't use traditional OAuth2 scopes\n       * Instead, permissions are configured in the PayPal Developer Dashboard\n       * We don't pass any scopes to avoid \"invalid scope\" errors\n       */\n\n      const _scopes: string[] = [];\n\n      const url = await createAuthorizationURL({\n        authorizationEndpoint,\n        codeVerifier,\n        id: \"paypal\",\n        options,\n        prompt: options.prompt,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n      return url;\n    },\n\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      if (!token.accessToken) {\n        logger.error(\"Access token is required to fetch PayPal user info\");\n        return null;\n      }\n\n      try {\n        const response = await betterFetch<PayPalProfile>(\n          `${userInfoEndpoint}?schema=paypalv1.1`,\n          {\n            headers: {\n              Accept: \"application/json\",\n              Authorization: `Bearer ${token.accessToken}`,\n            },\n          }\n        );\n\n        if (!response.data) {\n          logger.error(\"Failed to fetch user info from PayPal\");\n          return null;\n        }\n\n        const userInfo = response.data;\n        if (token.idToken) {\n          let idTokenSubject: string | undefined;\n          try {\n            idTokenSubject = decodeJwt(token.idToken).sub;\n          } catch (error) {\n            logger.error(\"Failed to decode PayPal ID token:\", error);\n            return null;\n          }\n\n          // OIDC binds UserInfo to the ID Token with `sub`. Keep `user_id`\n          // as the account id below for existing PayPal account mappings.\n          const userInfoSubject = userInfo.sub ?? userInfo.user_id;\n          if (!idTokenSubject || userInfoSubject !== idTokenSubject) {\n            logger.error(\n              \"PayPal user info subject does not match ID token subject\"\n            );\n            return null;\n          }\n        }\n\n        const userMap = await options.mapProfileToUser?.(userInfo);\n\n        const result = {\n          data: userInfo,\n          user: {\n            email: userInfo.email,\n            emailVerified: userInfo.email_verified,\n            id: userInfo.user_id,\n            image: userInfo.picture,\n            name: userInfo.name,\n            ...userMap,\n          },\n        };\n\n        return result;\n      } catch (error) {\n        logger.error(\"Failed to fetch user info from PayPal:\", error);\n        return null;\n      }\n    },\n    id: \"paypal\",\n    name: \"PayPal\",\n\n    options,\n\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) => {\n          const credentials = base64.encode(\n            `${options.clientId}:${options.clientSecret}`\n          );\n\n          try {\n            const response = await betterFetch(tokenEndpoint, {\n              body: new URLSearchParams({\n                grant_type: \"refresh_token\",\n                refresh_token: refreshToken,\n              }).toString(),\n              headers: {\n                Accept: \"application/json\",\n                \"Accept-Language\": \"en_US\",\n                Authorization: `Basic ${credentials}`,\n                \"Content-Type\": \"application/x-www-form-urlencoded\",\n              },\n              method: \"POST\",\n            });\n\n            if (!response.data) {\n              throw new AthenaAuthError(\"FAILED_TO_REFRESH_ACCESS_TOKEN\");\n            }\n\n            const data = response.data as {\n              access_token?: string;\n              refresh_token?: string;\n              expires_in?: number;\n            };\n            return {\n              accessToken: data.access_token,\n              accessTokenExpiresAt: data.expires_in\n                ? new Date(Date.now() + data.expires_in * 1000)\n                : undefined,\n              refreshToken: data.refresh_token,\n            };\n          } catch (error) {\n            logger.error(\"PayPal token refresh failed:\", error);\n            throw new AthenaAuthError(\"FAILED_TO_REFRESH_ACCESS_TOKEN\", {\n              cause: error,\n            });\n          }\n        },\n\n    validateAuthorizationCode: async ({ code, redirectURI }) => {\n      /**\n       * PayPal requires Basic Auth for token exchange\n       */\n\n      const credentials = base64.encode(\n        `${options.clientId}:${options.clientSecret}`\n      );\n\n      try {\n        const response = await betterFetch(tokenEndpoint, {\n          body: new URLSearchParams({\n            code,\n            grant_type: \"authorization_code\",\n            redirect_uri: redirectURI,\n          }).toString(),\n          headers: {\n            Accept: \"application/json\",\n            \"Accept-Language\": \"en_US\",\n            Authorization: `Basic ${credentials}`,\n            \"Content-Type\": \"application/x-www-form-urlencoded\",\n          },\n          method: \"POST\",\n        });\n\n        if (!response.data) {\n          throw new AthenaAuthError(\"FAILED_TO_GET_ACCESS_TOKEN\");\n        }\n\n        const data = response.data as PayPalTokenResponse;\n\n        const result = {\n          accessToken: data.access_token,\n          accessTokenExpiresAt: data.expires_in\n            ? new Date(Date.now() + data.expires_in * 1000)\n            : undefined,\n          idToken: data.id_token,\n          refreshToken: data.refresh_token,\n        };\n\n        return result;\n      } catch (error) {\n        logger.error(\"PayPal token exchange failed:\", error);\n        throw new AthenaAuthError(\"FAILED_TO_GET_ACCESS_TOKEN\", {\n          cause: error,\n        });\n      }\n    },\n\n    async verifyIdToken(token, nonce) {\n      if (options.disableIdTokenSignIn) {\n        return false;\n      }\n      if (options.verifyIdToken) {\n        return options.verifyIdToken(token, nonce);\n      }\n\n      // Cryptographically verify the ID token. Decoding alone is not enough:\n      // the signature, issuer, audience and expiration must all be checked\n      // before the token's claims can be relied on as proof of identity.\n      // See https://www.paypal.com/.well-known/openid-configuration\n\n      try {\n        const { kid, alg: jwtAlg } = decodeProtectedHeader(token);\n        if (!jwtAlg) {\n          return false;\n        }\n        if (\n          !PAYPAL_ID_TOKEN_ALGORITHMS.includes(\n            jwtAlg as (typeof PAYPAL_ID_TOKEN_ALGORITHMS)[number]\n          )\n        ) {\n          return false;\n        }\n\n        // PayPal can sign ID tokens either asymmetrically (RS256, verified\n        // against the published JWKS) or symmetrically (HS256, verified with\n        // the client secret). Selecting the key by algorithm keeps the two\n        // paths separate so each algorithm is only verified with its\n        // corresponding key type.\n        const key =\n          jwtAlg === \"HS256\"\n            ? new TextEncoder().encode(options.clientSecret)\n            : kid\n              ? await getPayPalPublicKey(kid, jwksEndpoint)\n              : undefined;\n        if (!key) {\n          return false;\n        }\n\n        const { payload: jwtClaims } = await jwtVerify(token, key, {\n          algorithms: [jwtAlg],\n          audience: options.clientId,\n          issuer,\n          maxTokenAge: \"1h\",\n        });\n\n        if (nonce && jwtClaims.nonce !== nonce) {\n          return false;\n        }\n\n        return true;\n      } catch (error) {\n        logger.error(\"Failed to verify PayPal ID token:\", error);\n        return false;\n      }\n    },\n  } satisfies OAuthProvider<PayPalProfile>;\n};\n","import { getJwksPublicKey } from \"./helpers/get-jwks-public-key.ts\";\n\n/**\n * Import the PayPal JWKS public key matching `kid` for RS256 ID-token verify.\n *\n * @param kid - Key id from the JWT protected header\n * @param jwksUri - Sandbox or live JWKS endpoint\n */\nexport const getPayPalPublicKey = async (kid: string, jwksUri: string) =>\n  getJwksPublicKey(jwksUri, kid);\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface PolarProfile {\n  account_id?: string | undefined;\n  avatar_url: string;\n  email: string;\n  email_verified?: boolean | undefined;\n  github_username?: string | undefined;\n  id: string;\n  profile_settings?:\n    | {\n        profile_settings_enabled?: boolean;\n        profile_settings_public_name?: string;\n        profile_settings_public_avatar?: string;\n        profile_settings_public_bio?: string;\n        profile_settings_public_location?: string;\n        profile_settings_public_website?: string;\n        profile_settings_public_twitter?: string;\n        profile_settings_public_github?: string;\n        profile_settings_public_email?: string;\n      }\n    | undefined;\n  public_name?: string | undefined;\n  username: string;\n}\n\nexport type PolarOptions = ProviderOptions<PolarProfile>;\n\nexport const polar = (options: PolarOptions) => {\n  const tokenEndpoint = \"https://api.polar.sh/v1/oauth2/token\";\n  return {\n    createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"openid\", \"profile\", \"email\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://polar.sh/oauth2/authorize\",\n        codeVerifier,\n        id: \"polar\",\n        options,\n        prompt: options.prompt,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<PolarProfile>(\n        \"https://api.polar.sh/v1/oauth2/userinfo\",\n        {\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n          },\n        }\n      );\n      if (error) {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      // Polar may provide email_verified claim, but it's not guaranteed.\n      // We check for it first, then default to false for security consistency.\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.email_verified ?? false,\n          id: profile.id,\n          image: profile.avatar_url,\n          name: profile.public_name || profile.username || \"\",\n          ...userMap,\n        },\n      };\n    },\n    id: \"polar\",\n    name: \"Polar\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<PolarProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nconst authorizationEndpoint = \"https://backboard.railway.com/oauth/auth\";\nconst tokenEndpoint = \"https://backboard.railway.com/oauth/token\";\nconst userinfoEndpoint = \"https://backboard.railway.com/oauth/me\";\n\nexport interface RailwayProfile {\n  /** The user's email address. */\n  email: string;\n  /** The user's display name. */\n  name: string;\n  /** URL of the user's profile picture. */\n  picture: string;\n  /** The user's unique ID (OAuth `sub` claim). */\n  sub: string;\n}\n\nexport interface RailwayOptions extends ProviderOptions<RailwayProfile> {\n  clientId: string;\n}\n\nexport const railway = (options: RailwayOptions) => {\n  return {\n    createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"openid\", \"email\", \"profile\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint,\n        codeVerifier,\n        id: \"railway\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<RailwayProfile>(\n        userinfoEndpoint,\n        { headers: { authorization: `Bearer ${token.accessToken}` } }\n      );\n      if (error || !profile) {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      // Railway does not provide an email_verified claim.\n      // We default to false for security consistency.\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: false,\n          id: profile.sub,\n          image: profile.picture,\n          name: profile.name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"railway\",\n    name: \"Railway\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            authentication: \"basic\",\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        authentication: \"basic\",\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<RailwayProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  getOAuth2Tokens,\n  refreshAccessToken,\n} from \"../oauth2/index.ts\";\nimport { base64 } from \"../utils/base64.ts\";\n\nexport interface RedditProfile {\n  has_verified_email: boolean;\n  icon_img: string | null;\n  id: string;\n  name: string;\n  oauth_client_id: string;\n  verified: boolean;\n}\n\nexport interface RedditOptions extends ProviderOptions<RedditProfile> {\n  clientId: string;\n  duration?: string | undefined;\n}\n\nexport const reddit = (options: RedditOptions) => {\n  return {\n    createAuthorizationURL({ state, scopes, redirectURI }) {\n      const _scopes = options.disableDefaultScope ? [] : [\"identity\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://www.reddit.com/api/v1/authorize\",\n        duration: options.duration,\n        id: \"reddit\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      const { data: profile, error } = await betterFetch<RedditProfile>(\n        \"https://oauth.reddit.com/api/v1/me\",\n        {\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n            \"User-Agent\": \"athena-auth\",\n          },\n        }\n      );\n\n      if (error) {\n        return null;\n      }\n\n      const userMap = await options.mapProfileToUser?.(profile);\n      // Reddit's identity scope does not return an email. Synthesize a stable,\n      // non-routable placeholder (RFC 2606 `.invalid`) keyed to the user's\n      // Reddit id rather than the routable `reddit.com`, which could collide\n      // with a real address. Left unverified; `mapProfileToUser` can override.\n      const email = userMap?.email || `${profile.id}@reddit.invalid`;\n      return {\n        data: profile,\n        user: {\n          id: profile.id,\n          image: profile.icon_img?.split(\"?\")[0],\n          name: profile.name,\n          ...userMap,\n          email,\n          emailVerified: userMap?.emailVerified ?? false,\n        },\n      };\n    },\n    id: \"reddit\",\n    name: \"Reddit\",\n    options,\n\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            authentication: \"basic\",\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint: \"https://www.reddit.com/api/v1/access_token\",\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) => {\n      const body = new URLSearchParams({\n        code,\n        grant_type: \"authorization_code\",\n        redirect_uri: options.redirectURI || redirectURI,\n      });\n      const headers = {\n        Authorization: `Basic ${base64.encode(\n          `${options.clientId}:${options.clientSecret}`\n        )}`,\n        accept: \"text/plain\",\n        \"content-type\": \"application/x-www-form-urlencoded\",\n        \"User-Agent\": \"athena-auth\",\n      };\n\n      const { data, error } = await betterFetch<object>(\n        \"https://www.reddit.com/api/v1/access_token\",\n        {\n          body: body.toString(),\n          headers,\n          method: \"POST\",\n        }\n      );\n\n      if (error) {\n        throw error;\n      }\n\n      return getOAuth2Tokens(data);\n    },\n  } satisfies OAuthProvider<RedditProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface RobloxProfile extends Record<string, unknown> {\n  /** the account creation date as a unix timestamp in seconds */\n  created_at: number;\n  /** the user's display name, again, will return the same value as the preferred_username if not set */\n  name: string;\n  /** the user's display name, will return the same value as the preferred_username if not set */\n  nickname: string;\n  /** the user's avatar URL */\n  picture: string;\n  /** the user's username */\n  preferred_username: string;\n  /** the user's profile URL */\n  profile: string;\n  /** the user's id */\n  sub: string;\n}\n\nexport interface RobloxOptions extends ProviderOptions<RobloxProfile> {\n  clientId: string;\n  prompt?:\n    | (\n        | \"none\"\n        | \"consent\"\n        | \"login\"\n        | \"select_account\"\n        | \"select_account consent\"\n      )\n    | undefined;\n}\n\nexport const roblox = (options: RobloxOptions) => {\n  const tokenEndpoint = \"https://apis.roblox.com/oauth/v1/token\";\n  return {\n    createAuthorizationURL({ state, scopes, redirectURI }) {\n      const _scopes = options.disableDefaultScope ? [] : [\"openid\", \"profile\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return new URL(\n        `https://apis.roblox.com/oauth/v1/authorize?scope=${_scopes.join(\n          \"+\"\n        )}&response_type=code&client_id=${\n          options.clientId\n        }&redirect_uri=${encodeURIComponent(\n          options.redirectURI || redirectURI\n        )}&state=${state}&prompt=${options.prompt || \"select_account consent\"}`\n      );\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<RobloxProfile>(\n        \"https://apis.roblox.com/oauth/v1/userinfo\",\n        {\n          headers: {\n            authorization: `Bearer ${token.accessToken}`,\n          },\n        }\n      );\n\n      if (error) {\n        return null;\n      }\n\n      const userMap = await options.mapProfileToUser?.(profile);\n      // Roblox does not provide email or email_verified claim.\n      // We default to false for security consistency.\n      return {\n        data: {\n          ...profile,\n        },\n        user: {\n          email: profile.preferred_username || null, // Roblox does not provide email\n          emailVerified: false,\n          id: profile.sub,\n          image: profile.picture,\n          name: profile.nickname || profile.preferred_username || \"\",\n          ...userMap,\n        },\n      };\n    },\n    id: \"roblox\",\n    name: \"Roblox\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      validateAuthorizationCode({\n        authentication: \"post\",\n        code,\n        options,\n        redirectURI: options.redirectURI || redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<RobloxProfile>;\n};\n","import { logger } from \"../env/index.ts\";\nimport { AthenaAuthError } from \"../error.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface SalesforceProfile {\n  email: string;\n  email_verified?: boolean | undefined;\n  family_name?: string | undefined;\n  given_name?: string | undefined;\n  name: string;\n  organization_id: string;\n  photos?:\n    | {\n        picture?: string;\n        thumbnail?: string;\n      }\n    | undefined;\n  preferred_username?: string | undefined;\n  sub: string;\n  user_id: string;\n  zoneinfo?: string | undefined;\n}\n\nexport interface SalesforceOptions extends ProviderOptions<SalesforceProfile> {\n  clientId: string;\n  environment?: (\"sandbox\" | \"production\") | undefined;\n  loginUrl?: string | undefined;\n  /**\n   * Override the redirect URI if auto-detection fails.\n   * Should match the Callback URL configured in your Salesforce Connected App.\n   * @example \"http://localhost:3000/api/auth/callback/salesforce\"\n   */\n  redirectURI?: string | undefined;\n}\n\nexport const salesforce = (options: SalesforceOptions) => {\n  const environment = options.environment ?? \"production\";\n  const isSandbox = environment === \"sandbox\";\n  const authorizationEndpoint = options.loginUrl\n    ? `https://${options.loginUrl}/services/oauth2/authorize`\n    : isSandbox\n      ? \"https://test.salesforce.com/services/oauth2/authorize\"\n      : \"https://login.salesforce.com/services/oauth2/authorize\";\n\n  const tokenEndpoint = options.loginUrl\n    ? `https://${options.loginUrl}/services/oauth2/token`\n    : isSandbox\n      ? \"https://test.salesforce.com/services/oauth2/token\"\n      : \"https://login.salesforce.com/services/oauth2/token\";\n\n  const userInfoEndpoint = options.loginUrl\n    ? `https://${options.loginUrl}/services/oauth2/userinfo`\n    : isSandbox\n      ? \"https://test.salesforce.com/services/oauth2/userinfo\"\n      : \"https://login.salesforce.com/services/oauth2/userinfo\";\n\n  return {\n    async createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {\n      if (!(options.clientId && options.clientSecret)) {\n        logger.error(\n          \"Client Id and Client Secret are required for Salesforce. Make sure to provide them in the options.\"\n        );\n        throw new AthenaAuthError(\"CLIENT_ID_AND_SECRET_REQUIRED\");\n      }\n      if (!codeVerifier) {\n        throw new AthenaAuthError(\"codeVerifier is required for Salesforce\");\n      }\n\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"openid\", \"email\", \"profile\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n\n      return createAuthorizationURL({\n        authorizationEndpoint,\n        codeVerifier,\n        id: \"salesforce\",\n        options,\n        redirectURI: options.redirectURI || redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      try {\n        const { data: user } = await betterFetch<SalesforceProfile>(\n          userInfoEndpoint,\n          {\n            headers: {\n              Authorization: `Bearer ${token.accessToken}`,\n            },\n          }\n        );\n\n        if (!user) {\n          logger.error(\"Failed to fetch user info from Salesforce\");\n          return null;\n        }\n\n        const userMap = await options.mapProfileToUser?.(user);\n\n        return {\n          data: user,\n          user: {\n            email: user.email,\n            emailVerified: user.email_verified ?? false,\n            id: user.user_id,\n            image: user.photos?.picture || user.photos?.thumbnail,\n            name: user.name,\n            ...userMap,\n          },\n        };\n      } catch (error) {\n        logger.error(\"Failed to fetch user info from Salesforce:\", error);\n        return null;\n      }\n    },\n    id: \"salesforce\",\n    name: \"Salesforce\",\n\n    options,\n\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI: options.redirectURI || redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<SalesforceProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface SlackProfile extends Record<string, unknown> {\n  date_email_verified: number;\n  email: string;\n  email_verified: boolean;\n  family_name: string;\n  given_name: string;\n  \"https://slack.com/team_domain\": string;\n  \"https://slack.com/team_id\": string;\n  \"https://slack.com/team_image_34\": string;\n  \"https://slack.com/team_image_44\": string;\n  \"https://slack.com/team_image_68\": string;\n  \"https://slack.com/team_image_88\": string;\n  \"https://slack.com/team_image_102\": string;\n  \"https://slack.com/team_image_132\": string;\n  \"https://slack.com/team_image_230\": string;\n  \"https://slack.com/team_image_default\": boolean;\n  \"https://slack.com/team_name\": string;\n  \"https://slack.com/user_id\": string;\n  \"https://slack.com/user_image_24\": string;\n  \"https://slack.com/user_image_32\": string;\n  \"https://slack.com/user_image_48\": string;\n  \"https://slack.com/user_image_72\": string;\n  \"https://slack.com/user_image_192\": string;\n  \"https://slack.com/user_image_512\": string;\n  locale: string;\n  name: string;\n  ok: boolean;\n  picture: string;\n  sub: string;\n}\n\nexport interface SlackOptions extends ProviderOptions<SlackProfile> {\n  clientId: string;\n}\n\nexport const slack = (options: SlackOptions) => {\n  const tokenEndpoint = \"https://slack.com/api/openid.connect.token\";\n  return {\n    createAuthorizationURL({ state, scopes, redirectURI }) {\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"openid\", \"profile\", \"email\"];\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      const url = new URL(\"https://slack.com/openid/connect/authorize\");\n      url.searchParams.set(\"scope\", _scopes.join(\" \"));\n      url.searchParams.set(\"response_type\", \"code\");\n      url.searchParams.set(\"client_id\", options.clientId);\n      url.searchParams.set(\"redirect_uri\", options.redirectURI || redirectURI);\n      url.searchParams.set(\"state\", state);\n      return url;\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<SlackProfile>(\n        \"https://slack.com/api/openid.connect.userInfo\",\n        {\n          headers: {\n            authorization: `Bearer ${token.accessToken}`,\n          },\n        }\n      );\n\n      if (error) {\n        return null;\n      }\n\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.email_verified,\n          id: profile[\"https://slack.com/user_id\"],\n          image: profile.picture || profile[\"https://slack.com/user_image_512\"],\n          name: profile.name || \"\",\n          ...userMap,\n        },\n      };\n    },\n    id: \"slack\",\n    name: \"Slack\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<SlackProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface SpotifyProfile {\n  display_name: string;\n  email: string;\n  id: string;\n  images: {\n    url: string;\n  }[];\n}\n\nexport interface SpotifyOptions extends ProviderOptions<SpotifyProfile> {\n  clientId: string;\n}\n\nexport const spotify = (options: SpotifyOptions) => {\n  const tokenEndpoint = \"https://accounts.spotify.com/api/token\";\n  return {\n    createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {\n      const _scopes = options.disableDefaultScope ? [] : [\"user-read-email\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://accounts.spotify.com/authorize\",\n        codeVerifier,\n        id: \"spotify\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<SpotifyProfile>(\n        \"https://api.spotify.com/v1/me\",\n        {\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n          },\n          method: \"GET\",\n        }\n      );\n      if (error) {\n        return null;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: false,\n          id: profile.id,\n          image: profile.images[0]?.url,\n          name: profile.display_name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"spotify\",\n    name: \"Spotify\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<SpotifyProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\n/**\n * [More info](https://developers.tiktok.com/doc/tiktok-api-v2-get-user-info/)\n */\nexport interface TiktokProfile extends Record<string, unknown> {\n  data: {\n    user: {\n      /**\n       * The unique identification of the user in the current application.Open id\n       * for the client.\n       *\n       * To return this field, add `fields=open_id` in the user profile request's query parameter.\n       */\n      open_id: string;\n      /**\n       * The unique identification of the user across different apps for the same developer.\n       * For example, if a partner has X number of clients,\n       * it will get X number of open_id for the same TikTok user,\n       * but one persistent union_id for the particular user.\n       *\n       * To return this field, add `fields=union_id` in the user profile request's query parameter.\n       */\n      union_id?: string | undefined;\n      /**\n       * User's profile image.\n       *\n       * To return this field, add `fields=avatar_url` in the user profile request's query parameter.\n       */\n      avatar_url?: string | undefined;\n      /**\n       * User`s profile image in 100x100 size.\n       *\n       * To return this field, add `fields=avatar_url_100` in the user profile request's query parameter.\n       */\n      avatar_url_100?: string | undefined;\n      /**\n       * User's profile image with higher resolution\n       *\n       * To return this field, add `fields=avatar_url_100` in the user profile request's query parameter.\n       */\n      avatar_large_url: string;\n      /**\n       * User's profile name\n       *\n       * To return this field, add `fields=display_name` in the user profile request's query parameter.\n       */\n      display_name: string;\n      /**\n       * User's username.\n       *\n       * To return this field, add `fields=username` in the user profile request's query parameter.\n       */\n      username: string;\n      /** @note Email is currently unsupported by TikTok  */\n      email?: string | undefined;\n      /**\n       * User's bio description if there is a valid one.\n       *\n       * To return this field, add `fields=bio_description` in the user profile request's query parameter.\n       */\n      bio_description?: string | undefined;\n      /**\n       * The link to user's TikTok profile page.\n       *\n       * To return this field, add `fields=profile_deep_link` in the user profile request's query parameter.\n       */\n      profile_deep_link?: string | undefined;\n      /**\n       * Whether TikTok has provided a verified badge to the account after confirming\n       * that it belongs to the user it represents.\n       *\n       * To return this field, add `fields=is_verified` in the user profile request's query parameter.\n       */\n      is_verified?: boolean | undefined;\n      /**\n       * User's followers count.\n       *\n       * To return this field, add `fields=follower_count` in the user profile request's query parameter.\n       */\n      follower_count?: number | undefined;\n      /**\n       * The number of accounts that the user is following.\n       *\n       * To return this field, add `fields=following_count` in the user profile request's query parameter.\n       */\n      following_count?: number | undefined;\n      /**\n       * The total number of likes received by the user across all of their videos.\n       *\n       * To return this field, add `fields=likes_count` in the user profile request's query parameter.\n       */\n      likes_count?: number | undefined;\n      /**\n       * The total number of publicly posted videos by the user.\n       *\n       * To return this field, add `fields=video_count` in the user profile request's query parameter.\n       */\n      video_count?: number | undefined;\n    };\n  };\n  error?:\n    | {\n        /**\n         * The error category in string.\n         */\n        code?: string;\n        /**\n         * The error message in string.\n         */\n        message?: string;\n        /**\n         * The error message in string.\n         */\n        log_id?: string;\n      }\n    | undefined;\n}\n\nexport interface TiktokOptions extends ProviderOptions {\n  // Client ID is not used in TikTok, we delete it from the options\n  clientId?: never | undefined;\n  clientKey: string;\n  clientSecret: string;\n}\n\nexport const tiktok = (options: TiktokOptions) => {\n  const tokenEndpoint = \"https://open.tiktokapis.com/v2/oauth/token/\";\n  return {\n    createAuthorizationURL({ state, scopes, redirectURI }) {\n      const _scopes = options.disableDefaultScope ? [] : [\"user.info.profile\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return new URL(\n        `https://www.tiktok.com/v2/auth/authorize?scope=${_scopes.join(\n          \",\"\n        )}&response_type=code&client_key=${options.clientKey}&redirect_uri=${encodeURIComponent(\n          options.redirectURI || redirectURI\n        )}&state=${state}`\n      );\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      const fields = [\n        \"open_id\",\n        \"avatar_large_url\",\n        \"display_name\",\n        \"username\",\n      ];\n      const { data: profile, error } = await betterFetch<TiktokProfile>(\n        `https://open.tiktokapis.com/v2/user/info/?fields=${fields.join(\",\")}`,\n        {\n          headers: {\n            authorization: `Bearer ${token.accessToken}`,\n          },\n        }\n      );\n\n      if (error) {\n        return null;\n      }\n\n      return {\n        data: profile,\n        user: {\n          email: profile.data.user.email || profile.data.user.username,\n          emailVerified: false,\n          id: profile.data.user.open_id,\n          image: profile.data.user.avatar_large_url,\n          name:\n            profile.data.user.display_name || profile.data.user.username || \"\",\n        },\n      };\n    },\n    id: \"tiktok\",\n    name: \"TikTok\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            authentication: \"post\",\n            extraParams: {\n              client_key: options.clientKey,\n            },\n            options: {\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        options: {\n          clientKey: options.clientKey,\n          clientSecret: options.clientSecret,\n        },\n        redirectURI: options.redirectURI || redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<TiktokProfile, TiktokOptions>;\n};\n","import { decodeJwt } from \"jose\";\nimport { logger } from \"../env/index.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\n/**\n * @see https://dev.twitch.tv/docs/authentication/getting-tokens-oidc/#requesting-claims\n */\nexport interface TwitchProfile {\n  /**\n   * The email of the user\n   */\n  email: string;\n  /**\n   * Indicate if this user has a verified email.\n   */\n  email_verified: boolean;\n  /**\n   * The picture of the user\n   */\n  picture: string;\n  /**\n   * The preferred username of the user\n   */\n  preferred_username: string;\n  /**\n   * The sub of the user\n   */\n  sub: string;\n}\n\nexport interface TwitchOptions extends ProviderOptions<TwitchProfile> {\n  claims?: string[] | undefined;\n  clientId: string;\n}\nexport const twitch = (options: TwitchOptions) => {\n  const tokenEndpoint = \"https://id.twitch.tv/oauth2/token\";\n  return {\n    createAuthorizationURL({ state, scopes, redirectURI }) {\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"user:read:email\", \"openid\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://id.twitch.tv/oauth2/authorize\",\n        claims: options.claims || [\n          \"email\",\n          \"email_verified\",\n          \"preferred_username\",\n          \"picture\",\n        ],\n        id: \"twitch\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const idToken = token.idToken;\n      if (!idToken) {\n        logger.error(\"No idToken found in token\");\n        return null;\n      }\n      const profile = decodeJwt(idToken) as TwitchProfile;\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.email_verified,\n          id: profile.sub,\n          image: profile.picture,\n          name: profile.preferred_username,\n          ...userMap,\n        },\n      };\n    },\n    id: \"twitch\",\n    name: \"Twitch\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<TwitchProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface TwitterProfile {\n  data: {\n    /**\n     * Unique identifier of this user. This is returned as a string in order to avoid complications with languages and tools\n     * that cannot handle large integers.\n     */\n    id: string;\n    /** The friendly name of this user, as shown on their profile. */\n    name: string;\n    /** The email address of this user. */\n    email?: string | undefined;\n    /** The Twitter handle (screen name) of this user. */\n    username: string;\n    /**\n     * The location specified in the user's profile, if the user provided one.\n     * As this is a freeform value, it may not indicate a valid location, but it may be fuzzily evaluated when performing searches with location queries.\n     *\n     * To return this field, add `user.fields=location` in the authorization request's query parameter.\n     */\n    location?: string | undefined;\n    /**\n     * This object and its children fields contain details about text that has a special meaning in the user's description.\n     *\n     *To return this field, add `user.fields=entities` in the authorization request's query parameter.\n     */\n    entities?:\n      | {\n          /** Contains details about the user's profile website. */\n          url: {\n            /** Contains details about the user's profile website. */\n            urls: Array<{\n              /** The start position (zero-based) of the recognized user's profile website. All start indices are inclusive. */\n              start: number;\n              /** The end position (zero-based) of the recognized user's profile website. This end index is exclusive. */\n              end: number;\n              /** The URL in the format entered by the user. */\n              url: string;\n              /** The fully resolved URL. */\n              expanded_url: string;\n              /** The URL as displayed in the user's profile. */\n              display_url: string;\n            }>;\n          };\n          /** Contains details about URLs, Hashtags, Cashtags, or mentions located within a user's description. */\n          description: {\n            hashtags: Array<{\n              start: number;\n              end: number;\n              tag: string;\n            }>;\n          };\n        }\n      | undefined;\n    /**\n     * Indicate if this user is a verified Twitter user.\n     *\n     * To return this field, add `user.fields=verified` in the authorization request's query parameter.\n     */\n    verified?: boolean | undefined;\n    /**\n     * The text of this user's profile description (also known as bio), if the user provided one.\n     *\n     * To return this field, add `user.fields=description` in the authorization request's query parameter.\n     */\n    description?: string | undefined;\n    /**\n     * The URL specified in the user's profile, if present.\n     *\n     * To return this field, add `user.fields=url` in the authorization request's query parameter.\n     */\n    url?: string | undefined;\n    /** The URL to the profile image for this user, as shown on the user's profile. */\n    profile_image_url?: string | undefined;\n    protected?: boolean | undefined;\n    /**\n     * Unique identifier of this user's pinned Tweet.\n     *\n     *  You can obtain the expanded object in `includes.tweets` by adding `expansions=pinned_tweet_id` in the authorization request's query parameter.\n     */\n    pinned_tweet_id?: string | undefined;\n    created_at?: string | undefined;\n  };\n  includes?:\n    | {\n        tweets?: Array<{\n          id: string;\n          text: string;\n        }>;\n      }\n    | undefined;\n  [claims: string]: unknown;\n}\n\nexport interface TwitterOption extends ProviderOptions<TwitterProfile> {\n  clientId: string;\n}\n\nexport const twitter = (options: TwitterOption) => {\n  const tokenEndpoint = \"https://api.x.com/2/oauth2/token\";\n  return {\n    createAuthorizationURL(data) {\n      const _scopes = options.disableDefaultScope\n        ? []\n        : [\"users.read\", \"tweet.read\", \"offline.access\", \"users.email\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (data.scopes) {\n        _scopes.push(...data.scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://x.com/i/oauth2/authorize\",\n        codeVerifier: data.codeVerifier,\n        id: \"twitter\",\n        options,\n        redirectURI: data.redirectURI,\n        scopes: _scopes,\n        state: data.state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error: profileError } =\n        await betterFetch<TwitterProfile>(\n          \"https://api.x.com/2/users/me?user.fields=profile_image_url\",\n          {\n            headers: {\n              Authorization: `Bearer ${token.accessToken}`,\n            },\n            method: \"GET\",\n          }\n        );\n\n      if (profileError) {\n        return null;\n      }\n\n      const { data: emailData, error: emailError } = await betterFetch<{\n        data: { confirmed_email: string };\n      }>(\"https://api.x.com/2/users/me?user.fields=confirmed_email\", {\n        headers: {\n          Authorization: `Bearer ${token.accessToken}`,\n        },\n        method: \"GET\",\n      });\n      let emailVerified = false;\n      if (!emailError && emailData?.data?.confirmed_email) {\n        profile.data.email = emailData.data.confirmed_email;\n        emailVerified = true;\n      }\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.data.email || profile.data.username || null,\n          emailVerified,\n          id: profile.data.id,\n          image: profile.data.profile_image_url,\n          name: profile.data.name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"twitter\",\n    name: \"Twitter\",\n    options,\n\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            authentication: \"basic\",\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        authentication: \"basic\",\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<TwitterProfile>;\n};\n","import { AthenaAuthError } from \"../error.ts\";\nimport { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface VercelProfile {\n  email?: string;\n  email_verified?: boolean;\n  name?: string;\n  picture?: string;\n  preferred_username?: string;\n  sub: string;\n}\n\nexport interface VercelOptions extends ProviderOptions<VercelProfile> {\n  clientId: string;\n}\n\nexport const vercel = (options: VercelOptions) =>\n  ({\n    createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {\n      if (!codeVerifier) {\n        throw new AthenaAuthError(\"codeVerifier is required for Vercel\");\n      }\n\n      let _scopes: string[] | undefined;\n      if (options.scope !== undefined || scopes !== undefined) {\n        _scopes = [];\n        if (options.scope) {\n          _scopes.push(...options.scope);\n        }\n        if (scopes) {\n          _scopes.push(...scopes);\n        }\n      }\n\n      return createAuthorizationURL({\n        authorizationEndpoint: \"https://vercel.com/oauth/authorize\",\n        codeVerifier,\n        id: \"vercel\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      const { data: profile, error } = await betterFetch<VercelProfile>(\n        \"https://api.vercel.com/login/oauth/userinfo\",\n        {\n          headers: {\n            Authorization: `Bearer ${token.accessToken}`,\n          },\n        }\n      );\n\n      if (error || !profile) {\n        return null;\n      }\n\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          email: profile.email,\n          emailVerified: profile.email_verified ?? false,\n          id: profile.sub,\n          image: profile.picture,\n          name: profile.name ?? profile.preferred_username ?? \"\",\n          ...userMap,\n        },\n      };\n    },\n    id: \"vercel\",\n    name: \"Vercel\",\n    options,\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint: \"https://api.vercel.com/login/oauth/token\",\n      }),\n  }) satisfies OAuthProvider<VercelProfile>;\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider, ProviderOptions } from \"../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\n\nexport interface VkProfile {\n  user: {\n    user_id: string;\n    first_name: string;\n    last_name: string;\n    email?: string | undefined;\n    phone?: number | undefined;\n    avatar?: string | undefined;\n    sex?: number | undefined;\n    verified?: boolean | undefined;\n    birthday: string;\n  };\n}\n\nexport interface VkOption extends ProviderOptions {\n  clientId: string;\n  scheme?: (\"light\" | \"dark\") | undefined;\n}\n\nexport const vk = (options: VkOption) => {\n  const tokenEndpoint = \"https://id.vk.com/oauth2/auth\";\n  return {\n    async createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {\n      const _scopes = options.disableDefaultScope ? [] : [\"email\", \"phone\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n      const authorizationEndpoint = \"https://id.vk.com/authorize\";\n\n      return createAuthorizationURL({\n        authorizationEndpoint,\n        codeVerifier,\n        id: \"vk\",\n        options,\n        redirectURI,\n        scopes: _scopes,\n        state,\n      });\n    },\n    async getUserInfo(data) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(data);\n      }\n      if (!data.accessToken) {\n        return null;\n      }\n      const formBody = new URLSearchParams({\n        access_token: data.accessToken,\n        client_id: options.clientId,\n      }).toString();\n      const { data: profile, error } = await betterFetch<VkProfile>(\n        \"https://id.vk.com/oauth2/user_info\",\n        {\n          body: formBody,\n          headers: {\n            \"Content-Type\": \"application/x-www-form-urlencoded\",\n          },\n          method: \"POST\",\n        }\n      );\n      if (error) {\n        return null;\n      }\n\n      const userMap = await options.mapProfileToUser?.(profile);\n      if (!(profile.user.email || userMap?.email)) {\n        return null;\n      }\n\n      return {\n        data: profile,\n        user: {\n          birthday: profile.user.birthday,\n          email: profile.user.email,\n          emailVerified: false,\n          first_name: profile.user.first_name,\n          id: profile.user.user_id,\n          image: profile.user.avatar,\n          last_name: profile.user.last_name,\n          name: `${profile.user.first_name} ${profile.user.last_name}`,\n          sex: profile.user.sex,\n          ...userMap,\n        },\n      };\n    },\n    id: \"vk\",\n    name: \"VK\",\n    options,\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint,\n          }),\n    validateAuthorizationCode: async ({\n      code,\n      codeVerifier,\n      redirectURI,\n      deviceId,\n    }) =>\n      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        deviceId,\n        options,\n        redirectURI: options.redirectURI || redirectURI,\n        tokenEndpoint,\n      }),\n  } satisfies OAuthProvider<VkProfile>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type {\n  OAuth2Tokens,\n  OAuthProvider,\n  ProviderOptions,\n} from \"../oauth2/index.ts\";\n\n/**\n * WeChat user profile information\n * @see https://developers.weixin.qq.com/doc/oplatform/en/Website_App/WeChat_Login/Wechat_Login.html\n */\nexport interface WeChatProfile extends Record<string, unknown> {\n  /** @note Email is currently unsupported by WeChat */\n  email?: string;\n  /**\n   * User's avatar image URL\n   */\n  headimgurl: string;\n  /**\n   * User's nickname\n   */\n  nickname: string;\n  /**\n   * User's unique OpenID\n   */\n  openid: string;\n  /**\n   * User's privileges\n   */\n  privilege: string[];\n  /**\n   * User's UnionID (unique across the developer's various applications)\n   */\n  unionid?: string;\n}\n\nexport interface WeChatOptions extends ProviderOptions<WeChatProfile> {\n  /**\n   * WeChat App ID\n   */\n  clientId: string;\n  /**\n   * WeChat App Secret\n   */\n  clientSecret: string;\n\n  /**\n   * UI language for the WeChat login page\n   * cn for Simplified Chinese, en for English\n   * @default \"cn\" if left undefined\n   */\n  lang?: \"cn\" | \"en\";\n  /**\n   * Platform type for WeChat login\n   * - Currently only supports \"WebsiteApp\" for WeChat Website Application (网站应用)\n   * @default \"WebsiteApp\"\n   */\n  platformType?: \"WebsiteApp\";\n}\n\nexport const wechat = (options: WeChatOptions) => {\n  return {\n    createAuthorizationURL({ state, scopes, redirectURI }) {\n      const _scopes = options.disableDefaultScope ? [] : [\"snsapi_login\"];\n      if (options.scope) {\n        _scopes.push(...options.scope);\n      }\n      if (scopes) {\n        _scopes.push(...scopes);\n      }\n\n      // WeChat uses non-standard OAuth2 parameters (appid instead of client_id)\n      // and requires a fragment (#wechat_redirect), so we construct the URL manually.\n      const url = new URL(\"https://open.weixin.qq.com/connect/qrconnect\");\n      url.searchParams.set(\"scope\", _scopes.join(\",\"));\n      url.searchParams.set(\"response_type\", \"code\");\n      url.searchParams.set(\"appid\", options.clientId);\n      url.searchParams.set(\"redirect_uri\", options.redirectURI || redirectURI);\n      url.searchParams.set(\"state\", state);\n      url.searchParams.set(\"lang\", options.lang || \"cn\");\n      url.hash = \"wechat_redirect\";\n\n      return url;\n    },\n\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n\n      const openid = (token as OAuth2Tokens & { openid?: string }).openid;\n\n      if (!openid) {\n        return null;\n      }\n\n      const params = new URLSearchParams({\n        access_token: token.accessToken || \"\",\n        lang: \"zh_CN\",\n        openid,\n      });\n\n      const { data: profile, error } = await betterFetch<\n        WeChatProfile & { errcode?: number; errmsg?: string }\n      >(`https://api.weixin.qq.com/sns/userinfo?${params.toString()}`, {\n        method: \"GET\",\n      });\n\n      if (error || !profile || profile.errcode) {\n        return null;\n      }\n\n      const userMap = await options.mapProfileToUser?.(profile);\n      return {\n        data: profile,\n        user: {\n          // WeChat does not return an email, and the OAuth callback rejects a\n          // missing one, so the default sign-in would always fail. Synthesize a\n          // stable, non-routable placeholder (RFC 2606 `.invalid`) keyed to the\n          // user's WeChat id, left unverified. Applications that collect a real\n          // email override it via `mapProfileToUser`.\n          email:\n            profile.email ||\n            `${profile.unionid || profile.openid || openid}@wechat.invalid`,\n          emailVerified: false,\n          id: profile.unionid || profile.openid || openid,\n          image: profile.headimgurl,\n          name: profile.nickname,\n          ...userMap,\n        },\n      };\n    },\n    id: \"wechat\",\n    name: \"WeChat\",\n    options,\n\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) => {\n          const params = new URLSearchParams({\n            appid: options.clientId,\n            grant_type: \"refresh_token\",\n            refresh_token: refreshToken,\n          });\n\n          const { data: tokenData, error } = await betterFetch<{\n            access_token: string;\n            expires_in: number;\n            refresh_token: string;\n            openid: string;\n            scope: string;\n            errcode?: number;\n            errmsg?: string;\n          }>(\n            \"https://api.weixin.qq.com/sns/oauth2/refresh_token?\" +\n              params.toString(),\n            {\n              method: \"GET\",\n            }\n          );\n\n          if (error || !tokenData || tokenData.errcode) {\n            throw new Error(\n              `Failed to refresh access token: ${tokenData?.errmsg || error?.message || \"Unknown error\"}`\n            );\n          }\n\n          return {\n            accessToken: tokenData.access_token,\n            accessTokenExpiresAt: new Date(\n              Date.now() + tokenData.expires_in * 1000\n            ),\n            refreshToken: tokenData.refresh_token,\n            scopes: tokenData.scope.split(\",\"),\n            tokenType: \"Bearer\" as const,\n          };\n        },\n\n    // WeChat uses non-standard token exchange (appid/secret instead of\n    // client_id/client_secret, GET instead of POST), so shared helpers\n    // like validateAuthorizationCode/getOAuth2Tokens cannot be used directly.\n    validateAuthorizationCode: async ({ code }) => {\n      const params = new URLSearchParams({\n        appid: options.clientId,\n        code,\n        grant_type: \"authorization_code\",\n        secret: options.clientSecret,\n      });\n\n      const { data: tokenData, error } = await betterFetch<{\n        access_token: string;\n        expires_in: number;\n        refresh_token: string;\n        openid: string;\n        scope: string;\n        unionid?: string;\n        errcode?: number;\n        errmsg?: string;\n      }>(\n        \"https://api.weixin.qq.com/sns/oauth2/access_token?\" +\n          params.toString(),\n        {\n          method: \"GET\",\n        }\n      );\n\n      if (error || !tokenData || tokenData.errcode) {\n        throw new Error(\n          `Failed to validate authorization code: ${tokenData?.errmsg || error?.message || \"Unknown error\"}`\n        );\n      }\n\n      return {\n        accessToken: tokenData.access_token,\n        accessTokenExpiresAt: new Date(\n          Date.now() + tokenData.expires_in * 1000\n        ),\n        // WeChat requires openid for the userinfo endpoint, which is\n        // returned alongside the access token.\n        openid: tokenData.openid,\n        refreshToken: tokenData.refresh_token,\n        scopes: tokenData.scope.split(\",\"),\n        tokenType: \"Bearer\" as const,\n        unionid: tokenData.unionid,\n      };\n    },\n  } satisfies OAuthProvider<WeChatProfile, WeChatOptions>;\n};\n","import { athenaFetch as betterFetch } from \"../fetch.ts\";\nimport type { OAuthProvider } from \"../oauth2/index.ts\";\nimport {\n  generateCodeChallenge,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../oauth2/index.ts\";\nimport type { ZoomOptions, ZoomProfile } from \"./zoom-types.ts\";\n\nexport type {\n  LoginType,\n  PhoneNumber,\n  PronounOption,\n  ZoomOptions,\n  ZoomProfile,\n} from \"./zoom-types.ts\";\n\n/**\n * Zoom OAuth provider factory (Users API).\n *\n * @param userOptions - Client id/secret; PKCE defaults to enabled\n * @see https://developers.zoom.us/docs/integrations/oauth/\n */\nexport const zoom = (userOptions: ZoomOptions) => {\n  const options = {\n    pkce: true,\n    ...userOptions,\n  };\n\n  return {\n    createAuthorizationURL: async ({ state, redirectURI, codeVerifier }) => {\n      const params = new URLSearchParams({\n        client_id: options.clientId,\n        redirect_uri: options.redirectURI ? options.redirectURI : redirectURI,\n        response_type: \"code\",\n        state,\n      });\n\n      if (options.pkce) {\n        const codeChallenge = await generateCodeChallenge(codeVerifier);\n        params.set(\"code_challenge_method\", \"S256\");\n        params.set(\"code_challenge\", codeChallenge);\n      }\n\n      const url = new URL(\"https://zoom.us/oauth/authorize\");\n      url.search = params.toString();\n\n      return url;\n    },\n    async getUserInfo(token) {\n      if (options.getUserInfo) {\n        return options.getUserInfo(token);\n      }\n      const { data: profile, error } = await betterFetch<ZoomProfile>(\n        \"https://api.zoom.us/v2/users/me\",\n        {\n          headers: {\n            authorization: `Bearer ${token.accessToken}`,\n          },\n        }\n      );\n\n      if (error) {\n        return null;\n      }\n\n      const userMap = await options.mapProfileToUser?.(profile);\n\n      return {\n        data: {\n          ...profile,\n        },\n        user: {\n          email: profile.email,\n          emailVerified: Boolean(profile.verified),\n          id: profile.id,\n          image: profile.pic_url,\n          name: profile.display_name,\n          ...userMap,\n        },\n      };\n    },\n    id: \"zoom\",\n    name: \"Zoom\",\n    refreshAccessToken: options.refreshAccessToken\n      ? options.refreshAccessToken\n      : async (refreshToken) =>\n          refreshAccessToken({\n            authentication: \"basic\",\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint: \"https://zoom.us/oauth/token\",\n          }),\n    validateAuthorizationCode: async ({ code, redirectURI, codeVerifier }) =>\n      validateAuthorizationCode({\n        authentication: \"basic\",\n        code,\n        codeVerifier,\n        options,\n        redirectURI: options.redirectURI || redirectURI,\n        tokenEndpoint: \"https://zoom.us/oauth/token\",\n      }),\n  } satisfies OAuthProvider<ZoomProfile>;\n};\n","import { createRemoteJWKSet, jwtVerify } from \"jose\";\nimport { athenaFetch as betterFetch } from \"../../fetch.ts\";\nimport type { OAuthProvider } from \"../../oauth2/index.ts\";\nimport {\n  createAuthorizationURL,\n  refreshAccessToken,\n  validateAuthorizationCode,\n} from \"../../oauth2/index.ts\";\nimport {\n  type ResolvedOidcProviderMetadata,\n  resolveOidcProviderEndpoints,\n} from \"../../oidc-discovery.ts\";\nimport { AthenaSocialServerError } from \"./errors.ts\";\nimport type { AthenaAuthSocialProviderOptions } from \"./social-config.ts\";\n\nexport function isGenericOidcProviderOptions(\n  options: AthenaAuthSocialProviderOptions\n): boolean {\n  if (options.issuer?.trim()) {\n    return true;\n  }\n  return Boolean(\n    options.authorizationEndpoint?.trim() && options.tokenEndpoint?.trim()\n  );\n}\n\nfunction resolveConfiguredIssuer(\n  options: AthenaAuthSocialProviderOptions\n): string {\n  if (options.issuer?.trim()) {\n    return options.issuer.trim();\n  }\n  if (options.authorizationEndpoint?.trim()) {\n    try {\n      const url = new URL(options.authorizationEndpoint);\n      return `${url.protocol}//${url.host}`;\n    } catch {\n      // fall through\n    }\n  }\n  throw new AthenaSocialServerError(\n    \"ATHENA_AUTH_OAUTH_PROVIDER_UNKNOWN\",\n    \"generic social provider requires issuer or authorizationEndpoint\"\n  );\n}\n\n/**\n * Declarative OIDC/OAuth2 provider for configured ids that are not in the\n * built-in `socialProviders` registry (`testProvider`, custom issuers).\n * Endpoint authority is the shared discovery resolver — not synthesized paths.\n */\nexport function createGenericOidcSocialProvider(\n  providerId: string,\n  options: AthenaAuthSocialProviderOptions\n): OAuthProvider {\n  const cache = new Map<string, ResolvedOidcProviderMetadata>();\n  const resolveEndpoints = () =>\n    resolveOidcProviderEndpoints({\n      cache,\n      issuer: resolveConfiguredIssuer(options),\n      overrides: {\n        authorizationEndpoint: options.authorizationEndpoint,\n        jwksEndpoint: options.jwksEndpoint,\n        tokenEndpoint: options.tokenEndpoint,\n        userInfoEndpoint: options.userInfoEndpoint,\n      },\n    });\n\n  return {\n    async createAuthorizationURL({\n      state,\n      scopes,\n      codeVerifier,\n      redirectURI,\n      loginHint,\n      display,\n    }) {\n      const endpoints = await resolveEndpoints();\n      const resolvedScopes = options.scope?.length\n        ? [...options.scope]\n        : [\"openid\", \"profile\", \"email\"];\n      if (scopes) {\n        resolvedScopes.push(...scopes);\n      }\n      return createAuthorizationURL({\n        authorizationEndpoint: endpoints.authorizationEndpoint,\n        codeVerifier,\n        display,\n        id: providerId,\n        loginHint,\n        options: {\n          clientId: options.clientId,\n          clientSecret: options.clientSecret,\n        },\n        redirectURI,\n        scopes: resolvedScopes,\n        state,\n      });\n    },\n    async getUserInfo(token) {\n      if (!token.accessToken) {\n        return null;\n      }\n      const endpoints = await resolveEndpoints();\n      if (!endpoints.userinfoEndpoint) {\n        return null;\n      }\n      const { data: profile, error } = await betterFetch<\n        Record<string, unknown>\n      >(endpoints.userinfoEndpoint, {\n        headers: {\n          Accept: \"application/json\",\n          Authorization: `Bearer ${token.accessToken}`,\n          \"User-Agent\": \"athena-auth\",\n        },\n      });\n      if (error || !profile) {\n        return null;\n      }\n      const sub = profile.sub ?? profile.id;\n      if (sub === undefined || sub === null || String(sub).length === 0) {\n        return null;\n      }\n      return {\n        data: profile,\n        user: {\n          email: typeof profile.email === \"string\" ? profile.email : undefined,\n          emailVerified: profile.email_verified === true,\n          id: String(sub),\n          image:\n            typeof profile.picture === \"string\" ? profile.picture : undefined,\n          name: typeof profile.name === \"string\" ? profile.name : undefined,\n        },\n      };\n    },\n    id: providerId,\n    name: providerId,\n    options: {\n      clientId: options.clientId,\n      clientSecret: options.clientSecret,\n    },\n    refreshAccessToken: async (refreshToken: string) => {\n      const endpoints = await resolveEndpoints();\n      return refreshAccessToken({\n        options: {\n          clientId: options.clientId,\n          clientSecret: options.clientSecret,\n        },\n        refreshToken,\n        tokenEndpoint: endpoints.tokenEndpoint,\n      });\n    },\n    validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) => {\n      const endpoints = await resolveEndpoints();\n      return validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options: {\n          clientId: options.clientId,\n          clientSecret: options.clientSecret,\n        },\n        redirectURI,\n        tokenEndpoint: endpoints.tokenEndpoint,\n      });\n    },\n    verifyIdToken: async (token: string, nonce?: string) => {\n      try {\n        const endpoints = await resolveEndpoints();\n        if (!endpoints.jwksUri) {\n          return false;\n        }\n        const jwks = createRemoteJWKSet(new URL(endpoints.jwksUri));\n        const { payload } = await jwtVerify(token, jwks, {\n          audience: options.clientId,\n          issuer: endpoints.issuer,\n        });\n        if (nonce && payload.nonce !== nonce) {\n          return false;\n        }\n        return true;\n      } catch {\n        return false;\n      }\n    },\n  };\n}\n","import { createAuthorizationURL } from \"../../oauth2/index.ts\";\nimport {\n  AthenaSocialServerError,\n  AthenaSocialServerNotWiredError,\n} from \"./errors.ts\";\n\nexport async function buildSocialAuthorizationURL(\n  input: Parameters<typeof createAuthorizationURL>[0]\n) {\n  return createAuthorizationURL(input);\n}\n\nexport interface SocialRedirectPort {\n  issue(input: { url: string }): Promise<never>;\n}\n\n/** Redirect issuance after authorize is a follow-on HTTP slice. */\nexport function createSocialRedirectPort(): SocialRedirectPort {\n  return {\n    issue() {\n      return Promise.reject(new AthenaSocialServerNotWiredError());\n    },\n  };\n}\n\nconst TOKEN_QUERY_KEYS = [\n  \"access_token\",\n  \"bearer\",\n  \"id_token\",\n  \"refresh_token\",\n  \"session\",\n  \"session_token\",\n  \"token\",\n] as const;\n\nfunction socialRedirectError(\n  code: string,\n  message: string\n): AthenaSocialServerError {\n  return new AthenaSocialServerError(code, message);\n}\n\nfunction stripDefaultPort(url: URL): string {\n  const protocol = url.protocol.toLowerCase();\n  const host = url.hostname.toLowerCase();\n  const port =\n    url.port === \"\" ||\n    (protocol === \"https:\" && url.port === \"443\") ||\n    (protocol === \"http:\" && url.port === \"80\")\n      ? \"\"\n      : `:${url.port}`;\n  return `${protocol}//${host}${port}`;\n}\n\nfunction parseHttpUrl(value: string): URL {\n  if (value.startsWith(\"//\") || value.includes(\":///\")) {\n    throw socialRedirectError(\n      \"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n      \"protocol-relative redirects are not trusted\"\n    );\n  }\n  let parsed: URL;\n  try {\n    parsed = new URL(value);\n  } catch {\n    throw socialRedirectError(\n      \"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n      \"redirect URL is invalid\"\n    );\n  }\n  if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n    throw socialRedirectError(\n      \"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n      \"redirect URL must be http or https\"\n    );\n  }\n  if (parsed.username !== \"\" || parsed.password !== \"\") {\n    throw socialRedirectError(\n      \"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n      \"redirect URL must not contain credentials\"\n    );\n  }\n  return parsed;\n}\n\nfunction originAllowed(\n  candidate: URL,\n  trustedOrigins: readonly string[]\n): boolean {\n  const candidateOrigin = stripDefaultPort(candidate);\n  for (const origin of trustedOrigins) {\n    try {\n      if (stripDefaultPort(new URL(origin)) === candidateOrigin) {\n        return true;\n      }\n    } catch {\n      /* origin is not a URL */\n    }\n  }\n  return false;\n}\n\nfunction stripTokenQuery(url: URL): URL {\n  for (const key of TOKEN_QUERY_KEYS) {\n    url.searchParams.delete(key);\n  }\n  return url;\n}\n\nexport function resolveSocialCallbackUri(input: {\n  basePath?: string;\n  baseURL: string;\n  provider: string;\n}): string {\n  const base = String(input.baseURL ?? \"\").replace(/\\/+$/, \"\");\n  const path =\n    String(input.basePath ?? \"/api/auth\").replace(/\\/+$/, \"\") || \"/api/auth\";\n  const provider = encodeURIComponent(String(input.provider ?? \"\").trim());\n  return `${base}${path}/callback/${provider}`;\n}\n\nfunction isRelativeSameOriginPath(value: string): boolean {\n  return value.startsWith(\"/\") && !value.startsWith(\"//\");\n}\n\nfunction resolveRedirectCandidate(\n  url: string,\n  options: { origin?: string; trustedOrigins: readonly string[] }\n): URL {\n  const trimmed = url.trim();\n  if (isRelativeSameOriginPath(trimmed)) {\n    const origin = options.origin ?? options.trustedOrigins[0];\n    if (!origin) {\n      throw socialRedirectError(\n        \"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n        \"relative redirects require a trusted origin\"\n      );\n    }\n    return stripTokenQuery(new URL(trimmed, origin));\n  }\n  return stripTokenQuery(parseHttpUrl(trimmed));\n}\n\nexport function validateSocialCallbackUri(\n  url: string,\n  options: {\n    origin?: string;\n    production: boolean;\n    trustedOrigins: readonly string[];\n  }\n): string {\n  const parsed = resolveRedirectCandidate(url, options);\n  if (!parsed.pathname.includes(\"/callback/\")) {\n    throw socialRedirectError(\n      \"ATHENA_AUTH_CALLBACK_URL_INVALID\",\n      \"callback URL path must include /callback/{provider}\"\n    );\n  }\n  if (options.production && options.trustedOrigins.length === 0) {\n    throw socialRedirectError(\n      \"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n      \"production callback URL requires trusted origins\"\n    );\n  }\n  if (\n    options.trustedOrigins.length > 0 &&\n    !originAllowed(parsed, options.trustedOrigins)\n  ) {\n    throw socialRedirectError(\n      \"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n      \"callback URL origin is not trusted\"\n    );\n  }\n  return parsed.toString();\n}\n\nexport function validatePostAuthRedirect(\n  url: string,\n  options: {\n    origin?: string;\n    production: boolean;\n    trustedOrigins: readonly string[];\n  }\n): string {\n  const parsed = resolveRedirectCandidate(url, options);\n  if (options.production && options.trustedOrigins.length === 0) {\n    throw socialRedirectError(\n      \"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n      \"production post-auth redirect requires trusted origins\"\n    );\n  }\n  if (\n    options.trustedOrigins.length > 0 &&\n    !originAllowed(parsed, options.trustedOrigins)\n  ) {\n    throw socialRedirectError(\n      \"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n      \"post-auth redirect origin is not trusted\"\n    );\n  }\n  return parsed.toString();\n}\n","import type { OAuthTransactionIntent } from \"./types.ts\";\n\nexport type { OAuthTransactionIntent };\n\nexport interface OAuthTransactionRecord {\n  codeChallengeMethod: \"S256\";\n  createdAt: Date;\n  expiresAt: Date;\n  id: string;\n  intent: OAuthTransactionIntent;\n  nonceHash: string;\n  pkceVerifierCiphertext: string;\n  providerId: string;\n  redirectUri: string;\n  stateHash: string;\n  userId: string | null;\n}\n\nexport interface OAuthTransactionStore {\n  consume(stateHash: string): Promise<OAuthTransactionRecord | null>;\n  create(row: OAuthTransactionRecord): Promise<void>;\n  expire(now?: Date): Promise<number>;\n}\n\nexport async function sha256Hex(value: string): Promise<string> {\n  const digest = await crypto.subtle.digest(\n    \"SHA-256\",\n    new TextEncoder().encode(value)\n  );\n  return Buffer.from(digest).toString(\"hex\");\n}\n","const TEXT_ENCODER = new TextEncoder();\n\nexport interface PkceEnvelope {\n  postAuthRedirect?: string;\n  verifier: string;\n}\n\nasync function aesGcmKey(secret: string, usage: KeyUsage): Promise<CryptoKey> {\n  const material = await crypto.subtle.digest(\n    \"SHA-256\",\n    TEXT_ENCODER.encode(secret)\n  );\n  return crypto.subtle.importKey(\"raw\", material, \"AES-GCM\", false, [usage]);\n}\n\nfunction parsePkceEnvelope(plain: string): PkceEnvelope {\n  try {\n    const parsed = JSON.parse(plain) as { r?: unknown; v?: unknown };\n    if (typeof parsed.v === \"string\" && parsed.v.length > 0) {\n      return {\n        postAuthRedirect:\n          typeof parsed.r === \"string\" && parsed.r.length > 0\n            ? parsed.r\n            : undefined,\n        verifier: parsed.v,\n      };\n    }\n  } catch {\n    // pre-envelope ciphertexts are the raw PKCE verifier\n  }\n  return { verifier: plain };\n}\n\n/** AES-GCM seal of the PKCE verifier for athena.oauth_transactions. */\nexport async function encryptPkceVerifier(\n  verifier: string,\n  secret: string,\n  postAuthRedirect?: string\n): Promise<string> {\n  const key = await aesGcmKey(secret, \"encrypt\");\n  const iv = crypto.getRandomValues(new Uint8Array(12));\n  const payload = JSON.stringify({\n    r: postAuthRedirect,\n    v: verifier,\n  });\n  const cipher = await crypto.subtle.encrypt(\n    { iv, name: \"AES-GCM\" },\n    key,\n    TEXT_ENCODER.encode(payload)\n  );\n  const packed = new Uint8Array(iv.byteLength + cipher.byteLength);\n  packed.set(iv);\n  packed.set(new Uint8Array(cipher), iv.byteLength);\n  return Buffer.from(packed).toString(\"base64url\");\n}\n\nexport async function decryptPkcePlaintext(\n  ciphertext: string,\n  secret: string\n): Promise<string> {\n  const packed = Buffer.from(ciphertext, \"base64url\");\n  const iv = packed.subarray(0, 12);\n  const data = packed.subarray(12);\n  const key = await aesGcmKey(secret, \"decrypt\");\n  const plain = await crypto.subtle.decrypt({ iv, name: \"AES-GCM\" }, key, data);\n  return new TextDecoder().decode(plain);\n}\n\nexport async function openPkceEnvelope(\n  ciphertext: string,\n  secret: string\n): Promise<PkceEnvelope> {\n  return parsePkceEnvelope(await decryptPkcePlaintext(ciphertext, secret));\n}\n\nexport async function decryptPkceVerifier(\n  ciphertext: string,\n  secret: string\n): Promise<string> {\n  return (await openPkceEnvelope(ciphertext, secret)).verifier;\n}\n","import { createAthenaSocialServerEngine } from \"../../social/server/engine.ts\";\nimport { isGenericOidcProviderOptions } from \"../../social/server/generic-oidc-provider.ts\";\nimport type { NormalizedSocialAuthConfig } from \"../../social/server/social-config.ts\";\nimport type { OAuthTransactionStore } from \"../../social/server/transaction-store.ts\";\nimport type { AthenaSocialServerEngine } from \"../../social/server/types.ts\";\nimport { socialProviders } from \"../../social-providers/registry.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\nimport { createMemoryOAuthTransactionStore } from \"./memory-store.ts\";\nimport { createPostgresOAuthTransactionStore } from \"./postgres-store.ts\";\n\nexport interface AthenaEmbeddedSocialRuntime {\n  engine: AthenaSocialServerEngine;\n  secret: string;\n  social: NormalizedSocialAuthConfig;\n  store: OAuthTransactionStore;\n}\n\nexport interface ComposeEmbeddedSocialRuntimeInput {\n  database?: AthenaAuthDatabase;\n  secret?: string;\n  social: NormalizedSocialAuthConfig;\n}\n\nfunction isRegisteredSocialProvider(id: string): boolean {\n  return (\n    typeof socialProviders[id as keyof typeof socialProviders] === \"function\"\n  );\n}\n\nfunction configuredProviderIds(social: NormalizedSocialAuthConfig): string[] {\n  return Object.entries(social.providers)\n    .filter(\n      ([id, bag]) =>\n        Boolean(bag.clientId?.trim()) &&\n        Boolean(bag.clientSecret?.trim()) &&\n        (isRegisteredSocialProvider(id) || isGenericOidcProviderOptions(bag))\n    )\n    .map(([id]) => id)\n    .sort();\n}\n\nexport function hasConfiguredSocialProviders(\n  social: NormalizedSocialAuthConfig | undefined\n): boolean {\n  return Boolean(social && configuredProviderIds(social).length > 0);\n}\n\nexport function advertisedSocialProviderIds(\n  social: NormalizedSocialAuthConfig | undefined\n): string[] {\n  return social ? configuredProviderIds(social) : [];\n}\n\nexport function resolveSocialEncryptionSecret(input: {\n  configSecret?: string;\n  explicitSecret?: string;\n  runtimeKeyMaterial?: string;\n}): string | undefined {\n  for (const value of [\n    input.explicitSecret,\n    input.configSecret,\n    input.runtimeKeyMaterial,\n  ]) {\n    const trimmed = value?.trim();\n    if (trimmed) {\n      return trimmed;\n    }\n  }\n}\n\nexport function composeEmbeddedSocialRuntime(\n  input: ComposeEmbeddedSocialRuntimeInput\n): AthenaEmbeddedSocialRuntime | null {\n  if (!hasConfiguredSocialProviders(input.social)) {\n    return null;\n  }\n  const secret = input.secret?.trim();\n  if (!secret) {\n    return null;\n  }\n  const store = input.database\n    ? createPostgresOAuthTransactionStore(input.database)\n    : createMemoryOAuthTransactionStore();\n  const engine = createAthenaSocialServerEngine({\n    secret,\n    social: input.social,\n    transactions: store,\n  });\n  return {\n    engine,\n    secret,\n    social: input.social,\n    store,\n  };\n}\n","import {\n  authorizationCodeRequest,\n  createAuthorizationURL,\n  generateCodeChallenge,\n} from \"../../oauth2/index.ts\";\nimport {\n  AthenaSocialOAuthProviderMixupError,\n  AthenaSocialServerError,\n} from \"./errors.ts\";\nimport { resolveSocialProvider } from \"./provider-registry.ts\";\nimport type { OAuthTransactionRecord } from \"./transaction-store.ts\";\nimport { sha256Hex } from \"./transaction-store.ts\";\nimport type {\n  AthenaSocialServerEngine,\n  AthenaSocialServerEnginePorts,\n  SocialAuthorizationStartInput,\n  SocialAuthorizationStartResult,\n  SocialTransactionConsumeInput,\n} from \"./types.ts\";\n\nconst PKCE_S256 = \"S256\";\nconst DEFAULT_TTL_MS = 10 * 60 * 1000;\nconst TEXT_ENCODER = new TextEncoder();\n\nfunction randomToken(): string {\n  const bytes = new Uint8Array(32);\n  crypto.getRandomValues(bytes);\n  return Buffer.from(bytes).toString(\"base64url\");\n}\n\nasync function deriveAesKey(secret: string): Promise<CryptoKey> {\n  const material = await crypto.subtle.digest(\n    \"SHA-256\",\n    TEXT_ENCODER.encode(secret)\n  );\n  return crypto.subtle.importKey(\"raw\", material, \"AES-GCM\", false, [\n    \"encrypt\",\n  ]);\n}\n\nasync function encryptPkceVerifierAtRest(\n  verifier: string,\n  secret: string\n): Promise<string> {\n  const key = await deriveAesKey(secret);\n  const iv = crypto.getRandomValues(new Uint8Array(12));\n  const sealed = await crypto.subtle.encrypt(\n    { iv, name: \"AES-GCM\" },\n    key,\n    TEXT_ENCODER.encode(verifier)\n  );\n  const packed = new Uint8Array(iv.byteLength + sealed.byteLength);\n  packed.set(iv);\n  packed.set(new Uint8Array(sealed), iv.byteLength);\n  return Buffer.from(packed).toString(\"base64url\");\n}\n\nfunction resolvePkceMethod(input: SocialAuthorizationStartInput): string {\n  return input.codeChallengeMethod ?? input.pkceMethod ?? PKCE_S256;\n}\n\nfunction resolveUserId(input: SocialAuthorizationStartInput): string | null {\n  if (typeof input.userId === \"string\" && input.userId.trim()) {\n    return input.userId.trim();\n  }\n  if (typeof input.user_id === \"string\" && input.user_id.trim()) {\n    return input.user_id.trim();\n  }\n  return null;\n}\n\nexport function createAthenaSocialServerEngine(\n  ports: AthenaSocialServerEnginePorts\n): AthenaSocialServerEngine {\n  const secret = ports.encryptionKey ?? ports.secret;\n  const social = { providers: ports.social.providers ?? {} };\n\n  async function startAuthorization(\n    input: SocialAuthorizationStartInput\n  ): Promise<SocialAuthorizationStartResult> {\n    if (!secret) {\n      throw new AthenaSocialServerError(\n        \"ATHENA_AUTH_OAUTH_ENCRYPTION_REQUIRED\",\n        \"social OAuth engine requires encryptionKey or secret\"\n      );\n    }\n    if (input.intent !== \"sign-in\" && input.intent !== \"link\") {\n      throw new AthenaSocialServerError(\n        \"ATHENA_AUTH_OAUTH_INTENT_INVALID\",\n        \"OAuth transaction intent must be sign-in or link\"\n      );\n    }\n    const pkceMethod = resolvePkceMethod(input);\n    if (pkceMethod !== PKCE_S256) {\n      throw new AthenaSocialServerError(\n        \"ATHENA_AUTH_OAUTH_PKCE_S256_REQUIRED\",\n        `PKCE method must be S256, not ${pkceMethod} (plain rejected)`\n      );\n    }\n    const userId = input.intent === \"link\" ? resolveUserId(input) : null;\n    if (input.intent === \"link\" && !userId) {\n      throw new AthenaSocialServerError(\n        \"ATHENA_AUTH_OAUTH_LINK_USER_REQUIRED\",\n        \"user_id is required for link intent\"\n      );\n    }\n    const verifier = input.codeVerifier?.trim() || randomToken();\n    if (!verifier) {\n      throw new AthenaSocialServerError(\n        \"ATHENA_AUTH_OAUTH_PKCE_VERIFIER_REQUIRED\",\n        \"PKCE verifier is required for S256\"\n      );\n    }\n    const state = randomToken();\n    let nonce = randomToken();\n    while (nonce === state) {\n      nonce = randomToken();\n    }\n    const [stateHash, nonceHash, challenge] = await Promise.all([\n      sha256Hex(state),\n      sha256Hex(nonce),\n      generateCodeChallenge(verifier),\n    ]);\n    if (stateHash === nonceHash) {\n      throw new AthenaSocialServerError(\n        \"ATHENA_AUTH_OAUTH_NONCE_STATE_COLLISION\",\n        \"OIDC nonce must be distinct from CSRF state\"\n      );\n    }\n    const provider = resolveSocialProvider(social, input.provider);\n    const authorizationUrl = await provider.createAuthorizationURL({\n      codeVerifier: verifier,\n      redirectURI: input.redirectUri,\n      state,\n    });\n    authorizationUrl.searchParams.set(\"nonce\", nonce);\n    authorizationUrl.searchParams.set(\"code_challenge_method\", PKCE_S256);\n    authorizationUrl.searchParams.set(\"code_challenge\", challenge);\n    const ciphertext = await encryptPkceVerifierAtRest(\n      JSON.stringify({\n        r: input.postAuthRedirect,\n        v: verifier,\n      }),\n      secret\n    );\n    const now = new Date();\n    if (typeof ports.transactions.expire === \"function\") {\n      await ports.transactions.expire(now);\n    }\n    await ports.transactions.create({\n      codeChallengeMethod: PKCE_S256,\n      createdAt: now,\n      expiresAt: new Date(now.getTime() + DEFAULT_TTL_MS),\n      id: crypto.randomUUID(),\n      intent: input.intent,\n      nonceHash,\n      pkceVerifierCiphertext: ciphertext,\n      providerId: input.provider,\n      redirectUri: input.redirectUri,\n      stateHash,\n      userId,\n    });\n    const url = authorizationUrl.toString();\n    return {\n      authorizationURL: url,\n      nonce,\n      state,\n      url,\n    };\n  }\n\n  async function consumeTransaction(input: SocialTransactionConsumeInput) {\n    const stateHash = await sha256Hex(String(input.state ?? \"\"));\n    const row = (await ports.transactions.consume(stateHash)) as\n      | OAuthTransactionRecord\n      | null\n      | undefined;\n    if (!row) {\n      throw new AthenaSocialServerError(\n        \"ATHENA_AUTH_OAUTH_TRANSACTION_NOT_FOUND\",\n        \"OAuth transaction not found, expired, or already consumed\"\n      );\n    }\n    if (row.providerId !== input.provider) {\n      throw new AthenaSocialOAuthProviderMixupError();\n    }\n    return row;\n  }\n\n  return {\n    consume: consumeTransaction,\n    consumeTransaction,\n    startAuthorization,\n  };\n}\n\nexport {\n  authorizationCodeRequest,\n  createAuthorizationURL,\n  generateCodeChallenge,\n};\n","import type {\n  OAuthTransactionRecord,\n  OAuthTransactionStore,\n} from \"../../social/server/transaction-store.ts\";\n\nfunction cloneRecord(row: OAuthTransactionRecord): OAuthTransactionRecord {\n  return {\n    codeChallengeMethod: row.codeChallengeMethod,\n    createdAt: new Date(row.createdAt),\n    expiresAt: new Date(row.expiresAt),\n    id: row.id,\n    intent: row.intent,\n    nonceHash: row.nonceHash,\n    pkceVerifierCiphertext: row.pkceVerifierCiphertext,\n    providerId: row.providerId,\n    redirectUri: row.redirectUri,\n    stateHash: row.stateHash,\n    userId: row.userId,\n  };\n}\n\nexport class MemoryOAuthTransactionStore implements OAuthTransactionStore {\n  private readonly rows = new Map<string, OAuthTransactionRecord>();\n\n  constructor() {\n    this.consume = this.consume.bind(this);\n    this.create = this.create.bind(this);\n    this.expire = this.expire.bind(this);\n  }\n\n  async create(row: OAuthTransactionRecord): Promise<void> {\n    this.rows.set(row.stateHash, cloneRecord(row));\n  }\n\n  async consume(stateHash: string): Promise<OAuthTransactionRecord | null> {\n    const row = this.rows.get(stateHash);\n    if (!row) {\n      return null;\n    }\n    this.rows.delete(stateHash);\n    if (row.expiresAt.getTime() <= Date.now()) {\n      return null;\n    }\n    return cloneRecord(row);\n  }\n\n  async expire(now: Date = new Date()): Promise<number> {\n    const cutoff = now.getTime();\n    let deleted = 0;\n    for (const [key, row] of [...this.rows.entries()]) {\n      if (row.expiresAt.getTime() <= cutoff) {\n        this.rows.delete(key);\n        deleted += 1;\n      }\n    }\n    return deleted;\n  }\n}\n\nexport function createMemoryOAuthTransactionStore(): MemoryOAuthTransactionStore {\n  return new MemoryOAuthTransactionStore();\n}\n","import { ATHENA_AUTH_TABLES } from \"../../contract/index.ts\";\nimport type {\n  OAuthTransactionIntent,\n  OAuthTransactionRecord,\n  OAuthTransactionStore,\n} from \"../../social/server/transaction-store.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\n\ninterface OauthTransactionRow {\n  code_challenge_method: string;\n  created_at: Date | string;\n  expires_at: Date | string;\n  id: string;\n  intent: string;\n  nonce_hash: string;\n  pkce_verifier_ciphertext: string;\n  provider_id: string;\n  redirect_uri: string;\n  state_hash: string;\n  user_id: string | null;\n}\n\nfunction hydrate(row: OauthTransactionRow): OAuthTransactionRecord {\n  return {\n    codeChallengeMethod: \"S256\",\n    createdAt: new Date(row.created_at),\n    expiresAt: new Date(row.expires_at),\n    id: row.id,\n    intent: row.intent as OAuthTransactionIntent,\n    nonceHash: row.nonce_hash,\n    pkceVerifierCiphertext: row.pkce_verifier_ciphertext,\n    providerId: row.provider_id,\n    redirectUri: row.redirect_uri,\n    stateHash: row.state_hash,\n    userId: row.user_id,\n  };\n}\n\nexport class PostgresOAuthTransactionStore implements OAuthTransactionStore {\n  constructor(private readonly db: AthenaAuthDatabase) {}\n\n  async create(row: OAuthTransactionRecord): Promise<void> {\n    await this.db.query(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.oauthTransactions} (\n\t\t\t\tid, state_hash, provider_id, intent, code_challenge_method,\n\t\t\t\tpkce_verifier_ciphertext, nonce_hash, redirect_uri, user_id,\n\t\t\t\texpires_at, created_at\n\t\t\t) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)`,\n      [\n        row.id,\n        row.stateHash,\n        row.providerId,\n        row.intent,\n        row.codeChallengeMethod,\n        row.pkceVerifierCiphertext,\n        row.nonceHash,\n        row.redirectUri,\n        row.userId,\n        row.expiresAt.toISOString(),\n        row.createdAt.toISOString(),\n      ]\n    );\n  }\n\n  async consume(stateHash: string): Promise<OAuthTransactionRecord | null> {\n    await this.expire();\n    const result = await this.db.query<OauthTransactionRow>(\n      `DELETE FROM athena.oauth_transactions\n\t\t\t WHERE state_hash = $1\n\t\t\t   AND expires_at > NOW()\n\t\t\t RETURNING *`,\n      [stateHash]\n    );\n    const row = result.rows[0];\n    return row ? hydrate(row) : null;\n  }\n\n  async expire(now: Date = new Date()): Promise<number> {\n    const result = await this.db.query(\n      `DELETE FROM athena.oauth_transactions\n\t\t\t WHERE expires_at <= $1\n\t\t\t RETURNING *`,\n      [now.toISOString()]\n    );\n    return result.rowCount;\n  }\n}\n\nexport function createPostgresOAuthTransactionStore(\n  db: AthenaAuthDatabase\n): PostgresOAuthTransactionStore {\n  return new PostgresOAuthTransactionStore(db);\n}\n","import type { AthenaEmailDeliveryPort } from \"../../email/types.ts\";\nimport { tryParseAthenaRightKey } from \"../../rights/key.ts\";\nimport { createOAuthRuntimeJwtVerifier } from \"../../runtime/authority/oauth-verifier.ts\";\nimport { PostgresAuthorizationStore } from \"../../runtime/authorization/postgres.ts\";\nimport type { AthenaRuntimeJwtVerifier } from \"../../runtime/data/principal.ts\";\nimport { generateOpaqueSecret } from \"../authorization-server/tokens.ts\";\nimport type { AuthBridgeCodeStore } from \"../bridge/store.ts\";\nimport {\n  type NormalizedAthenaAuthConfig,\n  normalizeAthenaAuthConfig,\n} from \"../config.ts\";\nimport { emitAuthEmail } from \"../email/index.ts\";\nimport type { AthenaAuthImplementedDomainEvent } from \"../hooks/events.ts\";\nimport type { ExecuteAuthMutationOptions } from \"../hooks/execute.ts\";\nimport { executeAuthMutation } from \"../hooks/execute.ts\";\nimport type {\n  AthenaAuthMutationScope,\n  AuthMutationTransaction,\n} from \"../hooks/scope.ts\";\nimport {\n  type AthenaAuthAuditWriter,\n  createMemoryAuthAuditWriter,\n  createPostgresAuthAuditWriter,\n  type MemoryAuthAuditSink,\n} from \"../observability/audit.ts\";\nimport { normalizeAthenaAuthObservability } from \"../observability/config.ts\";\nimport {\n  createPasskeyRelyingPartyResolver,\n  createPasskeyRelyingPartySnapshot,\n  type PasskeyRelyingPartyResolver,\n} from \"../passkey/server/relying-party.ts\";\nimport type { AthenaPasskeyRelyingParty } from \"../passkey/server/types.ts\";\nimport {\n  createAthenaAuthProtocolIdentity,\n  joinAuthProtocolUrl,\n  tryCreateAthenaAuthProtocolIdentity,\n} from \"../protocol-identity.ts\";\nimport { isUserEffectivelyBanned } from \"./admin-contract.ts\";\nimport { AthenaTokenAuthority } from \"./athena-token-authority.ts\";\nimport type { IssueSessionAuthentication } from \"./authentication-context.ts\";\nimport {\n  createMemoryOAuthAuthorizationServerState,\n  createMemoryOAuthAuthorizationServerStores,\n  type MemoryOAuthAuthorizationServerState,\n} from \"./authorization-server/memory-stores.ts\";\nimport { createPostgresOAuthAuthorizationServerStores } from \"./authorization-server/postgres-stores.ts\";\nimport { OAuthAuthorizationServerService } from \"./authorization-server/service.ts\";\nimport type { OAuthAuthorizationServerStores } from \"./authorization-server/store.ts\";\nimport { createMemoryAuthBridgeCodeStore } from \"./bridge/memory-store.ts\";\nimport { createPostgresAuthBridgeCodeStore } from \"./bridge/postgres-store.ts\";\nimport { systemAuthClock } from \"./clock.ts\";\nimport {\n  createSessionCookieHeader,\n  readBearerToken,\n  readSessionTokenFromCookies,\n  shouldSetSecureCookie,\n} from \"./cookies.ts\";\nimport {\n  type AthenaAuthDatabase,\n  createPostgresAuthDatabase,\n} from \"./database.ts\";\nimport { PostgresAuthEmailStore } from \"./email/postgres-store.ts\";\nimport {\n  type AthenaAuthEmailStore,\n  MemoryAuthEmailStore,\n} from \"./email/store.ts\";\nimport { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport { resolveRuntimeKey } from \"./keyring.ts\";\nimport { MemoryAuthStores } from \"./memory-stores.ts\";\nimport { applyAthenaAuthSqliteSchema, SqliteAuthStores } from \"./sqlite-stores.ts\";\nimport type { AthenaAuthStores } from \"./store-contract.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\nimport { createAuthMutationTransaction } from \"./mutation-transaction.ts\";\nimport { normalizeSessionActiveOrganization } from \"./organization-invariants.ts\";\nimport {\n  type AthenaAuthPasswordHasher,\n  createArgon2PasswordHasher,\n} from \"./password.ts\";\nimport { PostgresTokenKeyStore } from \"./postgres-token-key-store.ts\";\nimport {\n  type AuthProtocolRuntime,\n  rebindProtocolRuntime,\n} from \"./protocol-runtime.ts\";\nimport { instrumentAuthStoreMethods, timeAuthSpan } from \"./request-timing.ts\";\nimport { createSessionToken } from \"./runtime-helpers.ts\";\nimport type { CreateAthenaAuthRuntimeOptions } from \"./runtime-types.ts\";\nimport {\n  assertAthenaAuthSchemaCompatible,\n  migrateAthenaAuthSchema,\n} from \"./schema.ts\";\nimport {\n  MemoryRateLimiter,\n  requestClientIp,\n  StoreRateLimiter,\n} from \"./security.ts\";\nimport {\n  type AthenaEmbeddedSocialRuntime,\n  composeEmbeddedSocialRuntime,\n  resolveSocialEncryptionSecret,\n} from \"./social/runtime.ts\";\nimport { PostgresAuthStores } from \"./stores.ts\";\nimport { createLocalTokenAuthority } from \"./token-authority.ts\";\nimport {\n  getOrCreateProcessTokenKeyStore,\n  type TokenKeyStore,\n} from \"./token-key-store.ts\";\n\nexport type AuthRuntimeTokenAuthority = Awaited<\n  ReturnType<typeof createLocalTokenAuthority>\n>;\n\nexport type AuthRuntimeMutate = <\n  E extends AthenaAuthImplementedDomainEvent,\n  TResult,\n>(\n  input: Omit<\n    ExecuteAuthMutationOptions<E, TResult>,\n    \"auditWriter\" | \"hooks\" | \"transaction\"\n  >\n) => Promise<TResult>;\n\nexport type AuthRuntimeEmitMail = (\n  input: Parameters<typeof emitAuthEmail>[0]\n) => ReturnType<typeof emitAuthEmail>;\n\nexport interface AuthRuntimeDependencies {\n  bridgeCodeStore: AuthBridgeCodeStore;\n  close(): Promise<void>;\n  config: NormalizedAthenaAuthConfig;\n  emitIfRecipient: (\n    recipient: string | null | undefined,\n    input: Omit<Parameters<typeof emitAuthEmail>[0], \"recipient\">\n  ) => Promise<void>;\n  emitMail: AuthRuntimeEmitMail;\n  ensureReady(): Promise<AthenaAuthStores>;\n  getBridgeCodeStore(): AuthBridgeCodeStore;\n  getConnectionString(): string | undefined;\n  getDatabase(): AthenaAuthDatabase | undefined;\n  getDelivery(): AthenaEmailDeliveryPort | undefined;\n  getEmailStore(): AthenaAuthEmailStore;\n  getOAuthRuntimeJwtVerifier(\n    resource: string\n  ): Promise<AthenaRuntimeJwtVerifier>;\n  getOAuthStores(): Promise<OAuthAuthorizationServerStores>;\n  getProtocolRuntime(): Promise<AuthProtocolRuntime>;\n  getSocialRuntime(): Promise<AthenaEmbeddedSocialRuntime | null>;\n  getTokenAuthority(): AuthRuntimeTokenAuthority | undefined;\n  getTokenKeyStore(issuer?: string): Promise<TokenKeyStore>;\n  hasher: AthenaAuthPasswordHasher;\n  hookRequest: (\n    request: Request,\n    path: string\n  ) => {\n    ipAddress?: string;\n    method: string;\n    path: string;\n    userAgent?: string;\n  };\n  hooksRef?: CreateAthenaAuthRuntimeOptions[\"hooks\"];\n  identityOf: (user?: {\n    email?: string | null;\n    id: string;\n    name?: string | null;\n  }) => string;\n  issueSession: (\n    request: Request,\n    currentStores: AthenaAuthStores,\n    userId: string,\n    headers: Headers,\n    authentication: IssueSessionAuthentication\n  ) => Promise<AuthSessionRow>;\n  migrate(): Promise<void>;\n  mutate: AuthRuntimeMutate;\n  oauthRateLimiter: StoreRateLimiter;\n  observability: ReturnType<typeof normalizeAthenaAuthObservability>;\n  otpRateLimiter: StoreRateLimiter;\n  otpVerificationRateLimiter: StoreRateLimiter;\n  ownsDatabase: boolean;\n  passkeyOnboarding?: CreateAthenaAuthRuntimeOptions[\"passkeyOnboarding\"];\n  passkeyRelyingParty?: AthenaPasskeyRelyingParty;\n  passkeyResolver?: PasskeyRelyingPartyResolver;\n  rateLimiter: MemoryRateLimiter;\n  requireSession: (\n    request: Request,\n    currentStores: AthenaAuthStores\n  ) => Promise<{\n    session: AuthSessionRow;\n    token: string;\n    user: AuthUserRow;\n  }>;\n  resolveSession: (\n    request: Request,\n    currentStores: AthenaAuthStores\n  ) => Promise<{\n    session: AuthSessionRow;\n    token: string;\n    user: AuthUserRow;\n  } | null>;\n  setDatabase(next: AthenaAuthDatabase | undefined): void;\n  setDelivery(next: AthenaEmailDeliveryPort | undefined): void;\n  setTokenAuthority(next: AuthRuntimeTokenAuthority | undefined): void;\n  transaction<T>(\n    fn: (scope: AthenaAuthMutationScope) => Promise<T>\n  ): Promise<T>;\n}\n\nexport function createRuntimeDependencies(\n  options: CreateAthenaAuthRuntimeOptions = {}\n): AuthRuntimeDependencies {\n  const config =\n    options.config ??\n    normalizeAthenaAuthConfig(\n      {\n        basePath: options.basePath,\n        mode: \"local\",\n        secret: options.secret,\n      },\n      {\n        app: options.app,\n        env: options.env,\n        identity: options.identity,\n      }\n    );\n  const passkeyEnvironment =\n    process.env.NODE_ENV === \"production\" ? \"production\" : \"development\";\n  let passkeyRelyingParty: AthenaPasskeyRelyingParty | undefined;\n  let passkeyResolver: PasskeyRelyingPartyResolver | undefined;\n  if (passkeyEnvironment === \"development\" || config.passkeyConfigured) {\n    passkeyRelyingParty = createPasskeyRelyingPartySnapshot({\n      appIdentity: config.appIdentity,\n      environment: passkeyEnvironment,\n      passkey: config.passkey,\n      required: config.passkey.enabled,\n      trustedOrigins: config.security.trustedOrigins,\n    });\n    passkeyResolver = createPasskeyRelyingPartyResolver(passkeyRelyingParty);\n  }\n  const hasher = options.hasher ?? createArgon2PasswordHasher();\n  const protocolEnvironment =\n    process.env.NODE_ENV === \"production\" ? \"production\" : \"development\";\n  const protocolIdentityInput = {\n    appIdentity: config.appIdentity,\n    authorizationServer: config.authorizationServer,\n    basePath: config.basePath,\n  };\n  let protocolIdentity = config.authorizationServer.enabled\n    ? createAthenaAuthProtocolIdentity({\n      ...protocolIdentityInput,\n      environment: protocolEnvironment,\n    })\n    : tryCreateAthenaAuthProtocolIdentity(protocolIdentityInput);\n  const rejectProductionEphemeralTokenKeys = (): never => {\n    throw new AthenaAuthRuntimeError(\n      500,\n      \"Persistent JWT signing requires PostgreSQL TokenKeyStore\",\n      { code: \"ATHENA_AUTH_TOKEN_STORE_REQUIRED\" }\n    );\n  };\n  const requireProtocolIdentity = () => {\n    if (protocolIdentity) {\n      return protocolIdentity;\n    }\n    if (protocolEnvironment !== \"production\") {\n      protocolIdentity = createAthenaAuthProtocolIdentity({\n        ...protocolIdentityInput,\n        environment: \"development\",\n      });\n      return protocolIdentity;\n    }\n    throw new AthenaAuthRuntimeError(\n      500,\n      \"Athena Auth protocol identity requires authorizationServer.issuer or app.url/APP_URL\",\n      { code: \"ATHENA_RUNTIME_CONFIG_INVALID\" }\n    );\n  };\n  const rateLimiter = new MemoryRateLimiter(20, 60_000);\n  const hasExternalDatabase = Boolean(options.database);\n  const rawMemoryStores =\n    options.stores ?? (options.database ? undefined : new MemoryAuthStores());\n  const memoryStores =\n    rawMemoryStores && !hasExternalDatabase\n      ? instrumentAuthStoreMethods(rawMemoryStores)\n      : rawMemoryStores;\n  let database: AthenaAuthDatabase | undefined =\n    typeof options.database === \"string\" ? undefined : options.database;\n  const connectionString =\n    typeof options.database === \"string\" ? options.database : undefined;\n  let stores: AthenaAuthStores | undefined = memoryStores;\n  let runtimeKeyMaterial: string | undefined;\n  let ready: Promise<void> | undefined;\n  const ownsDatabase = typeof options.database === \"string\";\n  let emailStore: AthenaAuthEmailStore = new MemoryAuthEmailStore();\n  const memoryBridgeCodeStore = createMemoryAuthBridgeCodeStore();\n  let postgresBridgeCodeStore: AuthBridgeCodeStore | undefined;\n  let oauthStores: OAuthAuthorizationServerStores | undefined;\n  const oauthMemoryState: MemoryOAuthAuthorizationServerState | undefined =\n    memoryStores && !hasExternalDatabase && !connectionString\n      ? createMemoryOAuthAuthorizationServerState()\n      : undefined;\n  let delivery = options.delivery;\n  const clock = options.clock ?? systemAuthClock;\n  let protocolRuntime: AuthProtocolRuntime | undefined;\n  let ephemeralStateSecret: string | undefined;\n  let tokenAuthority:\n    | Awaited<ReturnType<typeof createLocalTokenAuthority>>\n    | undefined;\n  let tokenKeyStore: TokenKeyStore | undefined;\n  const emitMail = (input: Parameters<typeof emitAuthEmail>[0]) =>\n    emitAuthEmail(input, {\n      defaultFrom: options.emailDefaultsFrom,\n      defaultFromName: options.emailDefaultsFromName,\n      get delivery() {\n        return delivery;\n      },\n      legacySend: options.legacySend,\n      get store() {\n        return emailStore;\n      },\n    });\n  const identityOf = (user?: {\n    email?: string | null;\n    id: string;\n    name?: string | null;\n  }) => user?.email ?? user?.name ?? user?.id ?? \"member\";\n  const emitIfRecipient = async (\n    recipient: string | null | undefined,\n    input: Omit<Parameters<typeof emitAuthEmail>[0], \"recipient\">\n  ) => {\n    if (!recipient) {\n      return;\n    }\n    await emitMail({ ...input, recipient });\n  };\n\n  const isRetryableAuthReadyFailure = (error: unknown): boolean =>\n    error instanceof AthenaAuthRuntimeError &&\n    (error.code === \"ATHENA_AUTH_DATABASE_TIMEOUT\" ||\n      error.code === \"ATHENA_AUTH_LEDGER_UNREACHABLE\");\n\n  const ensureReady = async (): Promise<AthenaAuthStores> => {\n    if (!ready) {\n      const initialization = (async () => {\n        if (!stores) {\n          if (!database) {\n            if (!connectionString) {\n              throw AthenaAuthRuntimeError.internal(\n                new Error(\"Local Athena Auth requires a database\")\n              );\n            }\n            database = await createPostgresAuthDatabase(connectionString);\n          }\n          if (options.autoMigrate === true) {\n            await migrateAthenaAuthSchema(database);\n          } else {\n            await assertAthenaAuthSchemaCompatible(database, {\n              inspectSchema: true,\n            });\n          }\n          await new PostgresAuthorizationStore(database).ensureCatalog();\n          const resolvedKey = await resolveRuntimeKey(\n            database,\n            options.secret ?? config.secret\n          );\n          runtimeKeyMaterial = resolvedKey.material;\n          stores = new PostgresAuthStores(database);\n          emailStore = new PostgresAuthEmailStore(database);\n          postgresBridgeCodeStore = createPostgresAuthBridgeCodeStore(database);\n        }\n      })();\n      ready = initialization;\n      void initialization.catch((error: unknown) => {\n        if (isRetryableAuthReadyFailure(error) && ready === initialization) {\n          ready = undefined;\n        }\n      });\n    }\n    await ready;\n    if (!stores) {\n      throw AthenaAuthRuntimeError.internal(\n        new Error(\"Auth stores were not initialized\")\n      );\n    }\n    return stores;\n  };\n  const otpRateLimiter = new StoreRateLimiter(() => stores, 3, 60_000);\n  const otpVerificationRateLimiter = new StoreRateLimiter(\n    () => stores,\n    5,\n    5 * 60_000\n  );\n  const oauthRateLimiter = new StoreRateLimiter(() => stores, 20, 60_000);\n\n  const observability =\n    config.observability ?? normalizeAthenaAuthObservability();\n  const auditSink: MemoryAuthAuditSink = { entries: [] };\n  const resolveAuditWriter = (): AthenaAuthAuditWriter | undefined => {\n    if (!observability.auditLog) {\n      return;\n    }\n    if (database) {\n      return createPostgresAuthAuditWriter();\n    }\n    return createMemoryAuthAuditWriter(auditSink);\n  };\n\n  let mutationTransaction: AuthMutationTransaction | undefined;\n  const ensureTransaction = async (): Promise<AuthMutationTransaction> => {\n    const currentStores = await ensureReady();\n    mutationTransaction ??= createAuthMutationTransaction({\n      auditSink,\n      database,\n      oauthState: oauthMemoryState,\n      persistAudit: observability.auditLog,\n      stores: currentStores,\n      tokenKeyOptions: () => {\n        const identity = protocolIdentity;\n        if (!(identity && runtimeKeyMaterial)) {\n          return;\n        }\n        return {\n          encryptionSecret: runtimeKeyMaterial,\n          issuer: identity.issuer,\n        };\n      },\n      tokenKeys: () => {\n        const identity = protocolIdentity;\n        if (\n          !(\n            identity &&\n            memoryStores &&\n            !hasExternalDatabase &&\n            !connectionString\n          )\n        ) {\n          return;\n        }\n        if (protocolEnvironment === \"production\") {\n          rejectProductionEphemeralTokenKeys();\n        }\n        return getOrCreateProcessTokenKeyStore(identity.issuer);\n      },\n    });\n    return mutationTransaction;\n  };\n\n  const hookRequest = (request: Request, path: string) => ({\n    ipAddress:\n      requestClientIp(request, config.security.trustedProxy) ?? undefined,\n    method: request.method.toUpperCase(),\n    path,\n    userAgent: request.headers.get(\"user-agent\") ?? undefined,\n  });\n\n  const mutate = async <\n    E extends AthenaAuthImplementedDomainEvent,\n    // biome-ignore lint/suspicious/noExplicitAny: mutation result type is event-specific\n    TResult = any,\n  >(\n    input: Omit<\n      ExecuteAuthMutationOptions<E, TResult>,\n      \"auditWriter\" | \"hooks\" | \"transaction\"\n    >\n  ): Promise<TResult> =>\n    executeAuthMutation({\n      ...input,\n      auditWriter: resolveAuditWriter(),\n      hooks: options.hooks,\n      transaction: await ensureTransaction(),\n    } as ExecuteAuthMutationOptions<E, TResult>);\n\n  const transaction = <T>(\n    fn: (scope: AthenaAuthMutationScope) => Promise<T>\n  ): Promise<T> => ensureTransaction().then((run) => run(fn));\n\n  const resolveSession = async (\n    request: Request,\n    currentStores: AthenaAuthStores\n  ): Promise<{\n    session: AuthSessionRow;\n    token: string;\n    user: AuthUserRow;\n  } | null> =>\n    timeAuthSpan(\"session_lookup\", async () => {\n      const token =\n        readBearerToken(request.headers.get(\"authorization\")) ??\n        readSessionTokenFromCookies(\n          request.headers.get(\"cookie\"),\n          config.session.cookieName\n        );\n      if (!token) {\n        return null;\n      }\n      const session = await currentStores.getSessionByToken(token);\n      if (!session) {\n        return null;\n      }\n      const user = await timeAuthSpan(\"user_lookup\", () =>\n        currentStores.getUserById(session.user_id)\n      );\n      if (!user) {\n        return null;\n      }\n      if (user.banned && !isUserEffectivelyBanned(user)) {\n        await currentStores.updateUser(user.id, {\n          banExpires: null,\n          banned: false,\n          banReason: null,\n        });\n        user.banned = false;\n        user.ban_expires = null;\n        user.ban_reason = null;\n      } else if (isUserEffectivelyBanned(user)) {\n        return null;\n      }\n      // AUTH-ORG-CTX-001: drop a stale activeOrganizationId on every resolve.\n      const sessionWithOrg = await normalizeSessionActiveOrganization(\n        session,\n        currentStores\n      );\n      if (\n        !config.session.disableSessionRefresh &&\n        Date.now() - new Date(sessionWithOrg.updated_at).getTime() >=\n        config.session.updateAgeSeconds * 1000\n      ) {\n        await timeAuthSpan(\"session_refresh\", async () => {\n          const expiresAt = new Date(\n            Date.now() + config.session.expiresInSeconds * 1000\n          );\n          await currentStores.updateSessionExpiry(token, expiresAt);\n          sessionWithOrg.expires_at = expiresAt;\n          sessionWithOrg.updated_at = new Date();\n        });\n      }\n      return { session: sessionWithOrg, token, user };\n    });\n\n  const requireSession = async (\n    request: Request,\n    currentStores: AthenaAuthStores\n  ) => {\n    const resolved = await resolveSession(request, currentStores);\n    if (!resolved) {\n      if (\n        readBearerToken(request.headers.get(\"authorization\")) ||\n        readSessionTokenFromCookies(\n          request.headers.get(\"cookie\"),\n          config.session.cookieName\n        )\n      ) {\n        throw AthenaAuthRuntimeError.sessionNotFound();\n      }\n      throw AthenaAuthRuntimeError.unauthenticated();\n    }\n    return resolved;\n  };\n\n  const issueSession = async (\n    request: Request,\n    currentStores: AthenaAuthStores,\n    userId: string,\n    headers: Headers,\n    authentication: IssueSessionAuthentication\n  ) => {\n    const expiresAt = new Date(\n      Date.now() + config.session.expiresInSeconds * 1000\n    );\n    const session = await currentStores.createSession({\n      authenticatedAt: authentication.authenticatedAt,\n      authenticationMethods: authentication.methods,\n      expiresAt,\n      id: crypto.randomUUID(),\n      ipAddress: requestClientIp(request, config.security.trustedProxy),\n      token: createSessionToken(),\n      userAgent: request.headers.get(\"user-agent\"),\n      userId,\n    });\n    await currentStores.updateUser(userId, { lastSignInAt: new Date() });\n    headers.append(\n      \"set-cookie\",\n      createSessionCookieHeader(session.token, {\n        cookieName: config.session.cookieName,\n        expiresAt,\n        secure: shouldSetSecureCookie(request, config.security.cookieSecure),\n      })\n    );\n    return session;\n  };\n\n  const resolveBridgeCodeStore = async (): Promise<AuthBridgeCodeStore> => {\n    if (memoryStores && !hasExternalDatabase && !connectionString) {\n      return memoryBridgeCodeStore;\n    }\n    await ensureReady();\n    if (!postgresBridgeCodeStore) {\n      const db = database;\n      if (!db) {\n        throw AthenaAuthRuntimeError.internal(\n          new Error(\n            \"Database-backed Auth runtime requires a Postgres bridge code store\"\n          )\n        );\n      }\n      postgresBridgeCodeStore = createPostgresAuthBridgeCodeStore(db);\n    }\n    return postgresBridgeCodeStore;\n  };\n\n  let socialRuntime: AthenaEmbeddedSocialRuntime | null | undefined;\n  const getSocialRuntime =\n    async (): Promise<AthenaEmbeddedSocialRuntime | null> => {\n      if (socialRuntime !== undefined) {\n        return socialRuntime;\n      }\n      await ensureReady();\n      socialRuntime = composeEmbeddedSocialRuntime({\n        database,\n        secret: resolveSocialEncryptionSecret({\n          configSecret: config.secret,\n          explicitSecret: options.secret,\n          runtimeKeyMaterial,\n        }),\n        social: config.social,\n      });\n      return socialRuntime;\n    };\n\n  const getOAuthStores = async (): Promise<OAuthAuthorizationServerStores> => {\n    if (oauthStores) {\n      return oauthStores;\n    }\n    if (memoryStores && !hasExternalDatabase && !connectionString) {\n      const memoryOAuth = createMemoryOAuthAuthorizationServerStores({\n        state: oauthMemoryState,\n      });\n      oauthStores = memoryOAuth;\n      return memoryOAuth;\n    }\n    await ensureReady();\n    if (!database) {\n      throw AthenaAuthRuntimeError.internal(\n        new Error(\"OAuth authorization-server persistence requires PostgreSQL\")\n      );\n    }\n    const postgresOAuth =\n      createPostgresOAuthAuthorizationServerStores(database);\n    oauthStores = postgresOAuth;\n    return postgresOAuth;\n  };\n\n  const getTokenKeyStore = async (issuer?: string): Promise<TokenKeyStore> => {\n    const identity = requireProtocolIdentity();\n    if (issuer && issuer !== identity.issuer) {\n      throw AthenaAuthRuntimeError.internal(\n        new Error(\"Token key store issuer must match Athena protocol identity\")\n      );\n    }\n    if (tokenKeyStore) {\n      return tokenKeyStore;\n    }\n    if (memoryStores && !hasExternalDatabase && !connectionString) {\n      if (protocolEnvironment === \"production\") {\n        rejectProductionEphemeralTokenKeys();\n      }\n      tokenKeyStore ??= getOrCreateProcessTokenKeyStore(identity.issuer);\n      return tokenKeyStore;\n    }\n    await ensureReady();\n    if (!database) {\n      throw AthenaAuthRuntimeError.internal(\n        new Error(\"JWT signing persistence requires PostgreSQL\")\n      );\n    }\n    runtimeKeyMaterial ??= (\n      await resolveRuntimeKey(database, options.secret ?? config.secret)\n    ).material;\n    tokenKeyStore = new PostgresTokenKeyStore({\n      database,\n      encryptionSecret: runtimeKeyMaterial,\n      issuer: identity.issuer,\n    });\n    return tokenKeyStore;\n  };\n\n  const resolveStateSecret = async (): Promise<string> => {\n    if (options.secret) {\n      return options.secret;\n    }\n    if (config.secret) {\n      return config.secret;\n    }\n    if (memoryStores && !hasExternalDatabase && !connectionString) {\n      ephemeralStateSecret ??= generateOpaqueSecret();\n      return ephemeralStateSecret;\n    }\n    await ensureReady();\n    if (!runtimeKeyMaterial && database) {\n      runtimeKeyMaterial = (\n        await resolveRuntimeKey(database, options.secret ?? config.secret)\n      ).material;\n    }\n    if (!runtimeKeyMaterial) {\n      throw AthenaAuthRuntimeError.internal(\n        new Error(\n          \"OAuth state encryption requires configured secret or runtime key\"\n        )\n      );\n    }\n    return runtimeKeyMaterial;\n  };\n\n  const getProtocolRuntime = async (): Promise<AuthProtocolRuntime> => {\n    if (protocolRuntime) {\n      return protocolRuntime;\n    }\n    await ensureReady();\n    const identity = requireProtocolIdentity();\n    const keyStore = await getTokenKeyStore(identity.issuer);\n    const signing = new AthenaTokenAuthority({ clock, identity, keyStore });\n    const stateSecret = await resolveStateSecret();\n    const stores = await getOAuthStores();\n    const oauth = new OAuthAuthorizationServerService({\n      clock,\n      config: config.authorizationServer,\n      issuer: identity.issuer,\n      keyStore,\n      signing,\n      stateSecret,\n      stores,\n      userIsEligible: async ({ organizationId, userId }, authStores) => {\n        const readyStores = authStores ?? (await ensureReady());\n        const user = await readyStores.getUserById(userId);\n        if (!user || isUserEffectivelyBanned(user)) {\n          return false;\n        }\n        return organizationId\n          ? Boolean(await readyStores.getMember(organizationId, userId))\n          : true;\n      },\n    });\n    const legacyToken = await createLocalTokenAuthority({\n      audiences: [\"athena\", \"neon\"],\n      signing,\n      tokenEndpoint: joinAuthProtocolUrl(identity.publicBaseUrl, \"/token\"),\n    });\n    tokenAuthority = legacyToken;\n    const runtime: AuthProtocolRuntime = {\n      clock,\n      forMutation: (scope) => rebindProtocolRuntime(runtime, scope),\n      identity,\n      legacyToken,\n      oauth,\n      signing,\n      stateSecret,\n    };\n    protocolRuntime = runtime;\n    return runtime;\n  };\n\n  const getOAuthRuntimeJwtVerifier = async (\n    resource: string\n  ): Promise<AthenaRuntimeJwtVerifier> => {\n    const protocol = await getProtocolRuntime();\n    if (!config.authorizationServer.enabled) {\n      throw AthenaAuthRuntimeError.internal(\n        new Error(\"OAuth authorization server is not configured\")\n      );\n    }\n    const oauthStores = await getOAuthStores();\n    return createOAuthRuntimeJwtVerifier({\n      clock,\n      issuer: protocol.identity.issuer,\n      keyStore: await getTokenKeyStore(protocol.identity.issuer),\n      resolvePrincipal: async ({ claims, organizationId, scopes, userId }) => {\n        const authStores = await ensureReady();\n        const user = await authStores.getUserById(userId);\n        if (!user || isUserEffectivelyBanned(user)) {\n          return null;\n        }\n        if (\n          organizationId &&\n          !(await authStores.getMember(organizationId, userId))\n        ) {\n          return null;\n        }\n        const rights = await authStores.resolveEffectiveRights({\n          activeOrganizationId: organizationId,\n          userId,\n        });\n        return {\n          authenticated: true,\n          grants: [],\n          ...(organizationId ? { organizationId } : {}),\n          oauth: {\n            clientId: claims.client_id,\n            grantId: claims.athena_grant_id,\n            resource,\n            scopes,\n          },\n          rights: rights.flatMap((right) => {\n            const parsed = tryParseAthenaRightKey(right);\n            return parsed ? [parsed] : [];\n          }),\n          userId,\n        };\n      },\n      resource,\n      signing: protocol.signing,\n      stores: oauthStores,\n    });\n  };\n\n  const bridgeCodeStore: AuthBridgeCodeStore = {\n    consume: async (input) => (await resolveBridgeCodeStore()).consume(input),\n    deleteExpired: async (now) =>\n      (await resolveBridgeCodeStore()).deleteExpired(now),\n    issue: async (input) => (await resolveBridgeCodeStore()).issue(input),\n    revokeForSession: async (sessionId, reason) =>\n      (await resolveBridgeCodeStore()).revokeForSession(sessionId, reason),\n  };\n\n  return {\n    bridgeCodeStore,\n    close: async () => {\n      if (ownsDatabase) {\n        await database?.close?.();\n      }\n    },\n    config,\n    emitIfRecipient,\n    emitMail,\n    ensureReady,\n    getBridgeCodeStore: () => bridgeCodeStore,\n    getConnectionString: () => connectionString,\n    getDatabase: () => database,\n    getDelivery: () => delivery,\n    getEmailStore: () => emailStore,\n    getOAuthRuntimeJwtVerifier,\n    getOAuthStores,\n    getProtocolRuntime,\n    getSocialRuntime,\n    getTokenAuthority: () => tokenAuthority,\n    getTokenKeyStore,\n    hasher,\n    hookRequest,\n    hooksRef: options.hooks,\n    identityOf,\n    issueSession,\n    migrate: async () => {\n      if (stores instanceof SqliteAuthStores) {\n        if (database) {\n          await applyAthenaAuthSqliteSchema(database);\n        }\n        return;\n      }\n      if (!database) {\n        if (!connectionString) {\n          return;\n        }\n        database = await createPostgresAuthDatabase(connectionString);\n      }\n      await migrateAthenaAuthSchema(database);\n    },\n    mutate,\n    oauthRateLimiter,\n    observability,\n    otpRateLimiter,\n    otpVerificationRateLimiter,\n    ownsDatabase,\n    passkeyOnboarding: options.passkeyOnboarding,\n    passkeyRelyingParty,\n    passkeyResolver,\n    rateLimiter,\n    requireSession,\n    resolveSession,\n    setDatabase: (next) => {\n      database = next;\n    },\n    setDelivery: (next) => {\n      delivery = next;\n    },\n    setTokenAuthority: (next) => {\n      tokenAuthority = next;\n    },\n    transaction,\n  };\n}\n","import {\n  decodeProtectedHeader,\n  importJWK,\n  type JWTPayload,\n  jwtVerify,\n} from \"jose\";\nimport type {\n  OAuthAccessTokenClaims,\n  OAuthAuthorizationGrant,\n  OAuthClient,\n  VerifiedOAuthAccessToken,\n} from \"../../auth/authorization-server/types.ts\";\nimport type { AthenaTokenAuthority } from \"../../auth/local/athena-token-authority.ts\";\nimport type { OAuthAuthorizationServerStores } from \"../../auth/local/authorization-server/store.ts\";\nimport type { AuthClock } from \"../../auth/local/clock.ts\";\nimport { systemAuthClock } from \"../../auth/local/clock.ts\";\nimport type { TokenKeyStore } from \"../../auth/local/token-key-store.ts\";\nimport type {\n  AthenaPrincipal,\n  AthenaResolvedPrincipal,\n  AthenaRuntimeJwtVerifier,\n} from \"../data/principal.ts\";\n\nexport interface OAuthAccessTokenPrincipalInput {\n  claims: OAuthAccessTokenClaims;\n  client: OAuthClient;\n  grant: OAuthAuthorizationGrant;\n  organizationId: string | null;\n  resource: string;\n  scopes: readonly string[];\n  userId: string;\n}\n\nexport interface CreateOAuthAccessTokenVerifierOptions {\n  clock?: AuthClock;\n  issuer: string;\n  keyStore: TokenKeyStore;\n  resolvePrincipal: (\n    input: OAuthAccessTokenPrincipalInput\n  ) => Promise<AthenaPrincipal | null> | AthenaPrincipal | null;\n  signing?: AthenaTokenAuthority;\n  stores: OAuthAuthorizationServerStores;\n}\n\ntype VerifiedOAuthAccessTokenWithPrincipal = VerifiedOAuthAccessToken & {\n  principal: AthenaPrincipal;\n};\n\nfunction accessTokenClaims(payload: JWTPayload): OAuthAccessTokenClaims | null {\n  if (\n    typeof payload.iss !== \"string\" ||\n    typeof payload.sub !== \"string\" ||\n    typeof payload.aud !== \"string\" ||\n    typeof payload.jti !== \"string\" ||\n    typeof payload.client_id !== \"string\" ||\n    typeof payload.athena_grant_id !== \"string\" ||\n    typeof payload.scope !== \"string\" ||\n    typeof payload.iat !== \"number\" ||\n    typeof payload.nbf !== \"number\" ||\n    typeof payload.exp !== \"number\"\n  ) {\n    return null;\n  }\n  const organization =\n    typeof payload.athena_organization_id === \"string\"\n      ? payload.athena_organization_id\n      : undefined;\n  const family =\n    typeof payload.athena_token_family_id === \"string\"\n      ? payload.athena_token_family_id\n      : undefined;\n  return {\n    athena_grant_id: payload.athena_grant_id,\n    aud: payload.aud,\n    ...(organization ? { athena_organization_id: organization } : {}),\n    ...(family ? { athena_token_family_id: family } : {}),\n    client_id: payload.client_id,\n    exp: payload.exp,\n    iat: payload.iat,\n    iss: payload.iss,\n    jti: payload.jti,\n    nbf: payload.nbf,\n    scope: payload.scope,\n    sub: payload.sub,\n  };\n}\n\nexport function createOAuthAccessTokenVerifier(\n  options: CreateOAuthAccessTokenVerifierOptions\n): (input: {\n  resource: string;\n  token: string;\n}) => Promise<VerifiedOAuthAccessTokenWithPrincipal> {\n  return async ({ resource, token }) => {\n    const now = options.clock ?? systemAuthClock;\n    const payload = options.signing\n      ? await options.signing.verifyAthenaToken({\n        audience: resource,\n        token,\n      })\n      : await verifyWithKeyStore(options, token, resource, now.now());\n    const claims = accessTokenClaims(payload);\n    if (!claims || claims.aud !== resource) {\n      throw new Error(\"OAuth access token claims are invalid\");\n    }\n    if (await options.stores.accessTokens.isRevoked(claims.jti)) {\n      throw new Error(\"OAuth access token has been revoked\");\n    }\n    const client = await options.stores.clients.get(claims.client_id);\n    const grant = await options.stores.grants.get(claims.athena_grant_id);\n    if (\n      !(client?.isActive && grant) ||\n      grant.status !== \"active\" ||\n      (grant.expiresAt !== null &&\n        grant.expiresAt.getTime() <= now.now().getTime()) ||\n      grant.revokedAt !== null ||\n      grant.userId !== claims.sub ||\n      grant.clientId !== client.id ||\n      grant.resource !== resource\n    ) {\n      throw new Error(\"OAuth access token grant is no longer active\");\n    }\n    const scopes = claims.scope.split(\" \").filter(Boolean).sort();\n    if (scopes.some((scope) => !grant.scopes.includes(scope))) {\n      throw new Error(\"OAuth access token scope exceeds its grant\");\n    }\n    const organizationId = grant.organizationId;\n    if ((claims.athena_organization_id ?? null) !== organizationId) {\n      throw new Error(\"OAuth access token organization is invalid\");\n    }\n    const principal = await options.resolvePrincipal({\n      claims,\n      client,\n      grant,\n      organizationId,\n      resource,\n      scopes,\n      userId: claims.sub,\n    });\n    if (!principal) {\n      throw new Error(\"OAuth access token subject is not eligible\");\n    }\n    return {\n      claims,\n      client,\n      grant,\n      organizationId,\n      principal,\n      resource,\n      scopes,\n      userId: claims.sub,\n    };\n  };\n}\n\nasync function verifyWithKeyStore(\n  options: CreateOAuthAccessTokenVerifierOptions,\n  token: string,\n  resource: string,\n  now: Date\n): Promise<JWTPayload> {\n  const header = decodeProtectedHeader(token);\n  if (header.alg !== \"ES256\" || typeof header.kid !== \"string\") {\n    throw new Error(\"OAuth access token algorithm or kid is invalid\");\n  }\n  const keys = await options.keyStore.listVerificationKeys(now);\n  const key = keys.find((entry) => entry.kid === header.kid);\n  if (!key) {\n    throw new Error(\"OAuth access token signing key is unknown\");\n  }\n  const cryptoKey = await importJWK(key.publicJwk, \"ES256\");\n  return (\n    await jwtVerify(token, cryptoKey, {\n      algorithms: [\"ES256\"],\n      audience: resource,\n      currentDate: now,\n      issuer: options.issuer,\n    })\n  ).payload;\n}\n\nexport function asJwtPrincipalVerifier(\n  verifier: ReturnType<typeof createOAuthAccessTokenVerifier>,\n  resource: string\n): (input: {\n  headers: Headers;\n  request?: Request;\n  requestId?: string;\n}) => Promise<AthenaResolvedPrincipal | null> {\n  return async (input) => {\n    const authorization = input.headers.get(\"authorization\") ?? \"\";\n    const token = authorization.replace(/^Bearer\\s+/i, \"\").trim();\n    if (!token || token === authorization) {\n      return null;\n    }\n    const verified = await verifier({ resource, token });\n    return { authority: \"jwt\", principal: verified.principal };\n  };\n}\n\nexport function createOAuthRuntimeJwtVerifier(\n  options: CreateOAuthAccessTokenVerifierOptions & { resource: string }\n): AthenaRuntimeJwtVerifier {\n  const verifier = createOAuthAccessTokenVerifier(options);\n  return asJwtPrincipalVerifier(verifier, options.resource);\n}\n","export interface AuthClock {\n  now(): Date;\n}\n\nexport const systemAuthClock: AuthClock = {\n  now: () => new Date(),\n};\n","import {\n  ATHENA_AUTH_EVENT_DEFINITIONS,\n  type AthenaAuthAuditResolveContext,\n  type AthenaAuthEventDefinition,\n  type AthenaAuthEventSubject,\n  isAuditedAuthEvent,\n} from \"../domain/catalog.ts\";\nimport type {\n  AthenaAuthActor,\n  AthenaAuthRequestContext,\n} from \"../domain/context.ts\";\nimport type { AthenaAuthAuditWriter } from \"../observability/audit.ts\";\nimport { currentAuthTrace } from \"../observability/traces.ts\";\nimport type { AthenaAuthAuditEntry } from \"../observability/types.ts\";\nimport { validateAuthAuditEntry } from \"../observability/validate.ts\";\nimport type { AthenaAuthImplementedDomainEvent } from \"./events.ts\";\nimport {\n  createAuthHookContext,\n  runAuthAfterHooks,\n  runAuthBeforeHooks,\n} from \"./runner.ts\";\nimport type {\n  AthenaAuthMutationScope,\n  AuthMutationTransaction,\n} from \"./scope.ts\";\nimport type { AthenaAuthHookEventPayloads, AthenaAuthHooks } from \"./types.ts\";\n\nexport type AuthDomainMutate = <\n  E extends AthenaAuthImplementedDomainEvent,\n  // biome-ignore lint/suspicious/noExplicitAny: mutation result type is event-specific\n  TResult = any,\n>(\n  input: Omit<\n    ExecuteAuthMutationOptions<E, TResult>,\n    \"auditWriter\" | \"hooks\" | \"transaction\"\n  >\n) => Promise<TResult>;\n\nexport interface AthenaAuthMutationContext {\n  actor: AthenaAuthActor;\n  request: AthenaAuthRequestContext;\n  traceId: string;\n}\n\nexport interface AthenaAuthSecondaryEvent<\n  E extends AthenaAuthImplementedDomainEvent = AthenaAuthImplementedDomainEvent,\n> {\n  event: E;\n  input: AthenaAuthHookEventPayloads[E][\"input\"];\n  previous?: AthenaAuthHookEventPayloads[E][\"previous\"];\n  result: AthenaAuthHookEventPayloads[E][\"result\"];\n}\n\ntype EventPreviousPolicy<E extends AthenaAuthImplementedDomainEvent> =\n  (typeof ATHENA_AUTH_EVENT_DEFINITIONS)[E][\"previous\"];\n\nexport type PreviousOption<E extends AthenaAuthImplementedDomainEvent> =\n  EventPreviousPolicy<E> extends \"required\"\n    ? () => Promise<AthenaAuthHookEventPayloads[E][\"previous\"]>\n    : () => Promise<AthenaAuthHookEventPayloads[E][\"previous\"] | undefined>;\n\ntype PreviousField<E extends AthenaAuthImplementedDomainEvent> =\n  EventPreviousPolicy<E> extends \"required\"\n    ? { previous: PreviousOption<E> }\n    : { previous?: PreviousOption<E> };\n\nexport type ExecuteAuthMutationOptions<\n  E extends AthenaAuthImplementedDomainEvent,\n  // biome-ignore lint/suspicious/noExplicitAny: mutation result type is event-specific\n  TResult = any,\n> = {\n  auditWriter?: AthenaAuthAuditWriter;\n  context: AthenaAuthMutationContext;\n  event: E;\n  execute: (scope: AthenaAuthMutationScope) => Promise<TResult>;\n  hooks?: AthenaAuthHooks;\n  input: AthenaAuthHookEventPayloads[E][\"input\"];\n  previousOf?: (\n    result: TResult\n  ) => AthenaAuthHookEventPayloads[E][\"previous\"] | undefined;\n  // biome-ignore lint/suspicious/noExplicitAny: hook result mapping is event-specific\n  resultOf: (result: any) => AthenaAuthHookEventPayloads[E][\"result\"];\n  secondaryEvents?: (\n    // biome-ignore lint/suspicious/noExplicitAny: hook result mapping is event-specific\n    result: any\n  ) => readonly AthenaAuthSecondaryEvent[];\n  shouldPersistAudit?: (result: TResult) => boolean;\n  transaction: AuthMutationTransaction;\n} & PreviousField<E>;\n\nfunction eventDefinition<E extends AthenaAuthImplementedDomainEvent>(\n  event: E\n): AthenaAuthEventDefinition<E> {\n  return ATHENA_AUTH_EVENT_DEFINITIONS[event] as AthenaAuthEventDefinition<E>;\n}\n\nasync function timePhase<T>(\n  name:\n    | \"after_hooks\"\n    | \"authorize\"\n    | \"before_hooks\"\n    | \"transaction\"\n    | \"validate\",\n  fn: () => Promise<T>\n): Promise<T> {\n  const span = currentAuthTrace()?.phase(name);\n  try {\n    return await fn();\n  } finally {\n    span?.finish();\n  }\n}\n\nfunction resolveAuditOrganizationId<E extends AthenaAuthImplementedDomainEvent>(\n  event: E,\n  context: AthenaAuthAuditResolveContext<E>,\n  actor: AthenaAuthActor\n): string | undefined {\n  const ir = eventDefinition(event);\n  if (typeof ir.resolveOrganizationId === \"function\") {\n    return ir.resolveOrganizationId(context);\n  }\n  return actor.organizationId;\n}\n\nfunction buildAuditEntry<E extends AthenaAuthImplementedDomainEvent>(input: {\n  actor: AthenaAuthActor;\n  event: E;\n  eventId: string;\n  hookInput: AthenaAuthHookEventPayloads[E][\"input\"];\n  previous: AthenaAuthHookEventPayloads[E][\"previous\"];\n  request: AthenaAuthMutationContext[\"request\"];\n  result: AthenaAuthHookEventPayloads[E][\"result\"];\n  traceId: string;\n}): AthenaAuthAuditEntry {\n  const ir = eventDefinition(input.event);\n  const resolveContext = {\n    actor: input.actor,\n    input: input.hookInput,\n    previous: input.previous,\n    result: input.result,\n  } as AthenaAuthAuditResolveContext<E>;\n  const subject: AthenaAuthEventSubject | undefined =\n    ir.resolveSubject(resolveContext);\n  const organizationId = resolveAuditOrganizationId(\n    input.event,\n    resolveContext,\n    input.actor\n  );\n  return {\n    actor: input.actor,\n    event: input.event,\n    eventId: input.eventId,\n    id: crypto.randomUUID(),\n    organizationId,\n    outcome: \"success\",\n    previous: input.previous,\n    request: {\n      ipAddress: input.request.ipAddress,\n      userAgent: input.request.userAgent,\n    },\n    result: input.result,\n    subject,\n    traceId: input.traceId,\n  };\n}\n\nexport async function executeAuthMutation<\n  E extends AthenaAuthImplementedDomainEvent,\n  TResult,\n>(options: ExecuteAuthMutationOptions<E, TResult>): Promise<TResult> {\n  const envelope = createAuthHookContext(options.context);\n  currentAuthTrace()?.setActor(options.context.actor);\n  currentAuthTrace()?.setEvent(options.event, envelope.eventId);\n  const previous = options.previous ? await options.previous() : undefined;\n  await timePhase(\"before_hooks\", () =>\n    runAuthBeforeHooks(options.hooks, {\n      ...envelope,\n      event: options.event,\n      input: options.input,\n      previous,\n    })\n  );\n  let secondaryWork: Array<{\n    envelope: ReturnType<typeof createAuthHookContext>;\n    extra: AthenaAuthSecondaryEvent;\n  }> = [];\n  const result = await timePhase(\"transaction\", () =>\n    options.transaction(async (scope) => {\n      const executed = await options.execute(scope);\n      const persistAudit = options.shouldPersistAudit?.(executed) !== false;\n      const secondary = options.secondaryEvents?.(executed) ?? [];\n      secondaryWork = secondary.map((extra) => ({\n        envelope: createAuthHookContext(options.context),\n        extra,\n      }));\n      if (persistAudit) {\n        const auditPrevious = options.previousOf?.(executed) ?? previous;\n        if (options.auditWriter || scope.persistAudit) {\n          const persistRow = async (entry: AthenaAuthAuditEntry) => {\n            if (options.auditWriter) {\n              await options.auditWriter.write(scope, entry);\n              return;\n            }\n            await scope.persistAudit?.(entry);\n          };\n          const primaryResult = options.resultOf(executed);\n          if (isAuditedAuthEvent(options.event)) {\n            const primaryEntry = buildAuditEntry({\n              actor: options.context.actor,\n              event: options.event,\n              eventId: envelope.eventId,\n              hookInput: options.input,\n              previous: auditPrevious,\n              request: options.context.request,\n              result: primaryResult,\n              traceId: options.context.traceId,\n            });\n            validateAuthAuditEntry(\n              primaryEntry,\n              eventDefinition(options.event) as never\n            );\n            await persistRow(primaryEntry);\n            for (const { envelope: extraEnvelope, extra } of secondaryWork) {\n              if (!isAuditedAuthEvent(extra.event)) {\n                continue;\n              }\n              const extraEntry = buildAuditEntry({\n                actor: options.context.actor,\n                event: extra.event,\n                eventId: extraEnvelope.eventId,\n                hookInput: extra.input,\n                previous: extra.previous,\n                request: options.context.request,\n                result: extra.result,\n                traceId: options.context.traceId,\n              });\n              validateAuthAuditEntry(\n                extraEntry,\n                eventDefinition(extra.event) as never\n              );\n              await persistRow(extraEntry);\n            }\n          } else {\n            for (const { envelope: extraEnvelope, extra } of secondaryWork) {\n              if (!isAuditedAuthEvent(extra.event)) {\n                continue;\n              }\n              const extraEntry = buildAuditEntry({\n                actor: options.context.actor,\n                event: extra.event,\n                eventId: extraEnvelope.eventId,\n                hookInput: extra.input,\n                previous: extra.previous,\n                request: options.context.request,\n                result: extra.result,\n                traceId: options.context.traceId,\n              });\n              validateAuthAuditEntry(\n                extraEntry,\n                eventDefinition(extra.event) as never\n              );\n              await persistRow(extraEntry);\n            }\n          }\n        }\n      }\n      return executed;\n    })\n  );\n  await timePhase(\"after_hooks\", () =>\n    runAuthAfterHooks(options.hooks, {\n      ...envelope,\n      event: options.event,\n      input: options.input,\n      previous: options.previousOf?.(result) ?? previous,\n      result: options.resultOf(result),\n    })\n  );\n  for (const { envelope: extraEnvelope, extra } of secondaryWork) {\n    await runAuthAfterHooks(options.hooks, {\n      ...extraEnvelope,\n      event: extra.event,\n      input: extra.input,\n      previous: extra.previous,\n      result: extra.result,\n    } as never);\n  }\n  return result;\n}\n","import type { AthenaAuthImplementedDomainEvent } from \"../hooks/events.ts\";\nimport type { AthenaAuthHookEventPayloads } from \"../hooks/types.ts\";\nimport type {\n  AthenaAuthMutationKind,\n  AthenaAuthPreviousPolicy,\n  AthenaAuthResultPolicy,\n} from \"../observability/contract.ts\";\nimport type { AthenaAuthActor } from \"./context.ts\";\n\nexport interface AthenaAuthEventSubject {\n  id: string;\n  type: string;\n}\n\nexport interface AthenaAuthAuditResolveContext<\n  E extends AthenaAuthImplementedDomainEvent = AthenaAuthImplementedDomainEvent,\n> {\n  actor: AthenaAuthActor;\n  input: AthenaAuthHookEventPayloads[E][\"input\"];\n  previous: AthenaAuthHookEventPayloads[E][\"previous\"];\n  result: AthenaAuthHookEventPayloads[E][\"result\"];\n}\n\n/**\n * Audit Event IR. Generic over AthenaAuthHookEventPayloads[E].\n * previous: \"none\" | \"optional\" | \"required\"\n * result: \"resource\" | \"receipt\"\n */\nexport interface AthenaAuthEventDefinition<\n  E extends AthenaAuthImplementedDomainEvent = AthenaAuthImplementedDomainEvent,\n> {\n  audit: boolean;\n  mutationKind: AthenaAuthMutationKind;\n  previous: AthenaAuthPreviousPolicy;\n  resolveOrganizationId?: (\n    context: AthenaAuthAuditResolveContext<E>\n  ) => string | undefined;\n  resolveSubject: (\n    context: AthenaAuthAuditResolveContext<E>\n  ) => AthenaAuthEventSubject | undefined;\n  result: AthenaAuthResultPolicy;\n  subjectType: string;\n}\n\nfunction subject(\n  type: string,\n  id: string | null | undefined\n): AthenaAuthEventSubject | undefined {\n  if (typeof id !== \"string\" || id.length === 0) {\n    return;\n  }\n  return { id, type };\n}\n\nfunction definedId(value: string | null | undefined): string | undefined {\n  return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\n/**\n * Explicit event → audit Event IR. Implemented mutations default to audited\n * security history. Reads never appear here.\n */\nexport const ATHENA_AUTH_EVENT_DEFINITIONS = {\n  \"account.link\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveSubject: ({ result }) => subject(\"account\", result.account.id),\n    result: \"resource\",\n    subjectType: \"account\",\n  },\n  \"account.unlink\": {\n    audit: true,\n    mutationKind: \"delete\",\n    previous: \"required\",\n    resolveSubject: ({ result }) => subject(\"account\", result.accountId),\n    result: \"receipt\",\n    subjectType: \"account\",\n  },\n  \"apiKey.create\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveSubject: ({ result }) => subject(\"api_key\", result.apiKey.id),\n    result: \"resource\",\n    subjectType: \"api_key\",\n  },\n  \"apiKey.delete\": {\n    audit: true,\n    mutationKind: \"delete\",\n    previous: \"required\",\n    resolveSubject: ({ previous, result }) =>\n      subject(\"api_key\", result.id ?? previous?.apiKey.id),\n    result: \"receipt\",\n    subjectType: \"api_key\",\n  },\n  \"apiKey.update\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveSubject: ({ result }) => subject(\"api_key\", result.apiKey.id),\n    result: \"resource\",\n    subjectType: \"api_key\",\n  },\n  \"organization.create\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveOrganizationId: ({ result }) => result.organization.id,\n    resolveSubject: ({ result }) =>\n      subject(\"organization\", result.organization.id),\n    result: \"resource\",\n    subjectType: \"organization\",\n  },\n  \"organization.delete\": {\n    audit: true,\n    mutationKind: \"delete\",\n    previous: \"required\",\n    resolveOrganizationId: ({ previous, result }) =>\n      definedId(result.id) ?? previous?.organization.id,\n    resolveSubject: ({ previous, result }) =>\n      subject(\"organization\", result.id ?? previous?.organization.id),\n    result: \"receipt\",\n    subjectType: \"organization\",\n  },\n  \"organization.invitation.accept\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"required\",\n    resolveOrganizationId: ({ previous, result }) =>\n      definedId(result.invitation.organizationId) ??\n      previous?.invitation.organizationId,\n    resolveSubject: ({ previous, result }) =>\n      subject(\n        \"organization.invitation\",\n        result.invitation.id ?? previous?.invitation.id\n      ),\n    result: \"receipt\",\n    subjectType: \"organization.invitation\",\n  },\n  \"organization.invitation.cancel\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"required\",\n    resolveOrganizationId: ({ previous, result }) =>\n      definedId(result.invitation.organizationId) ??\n      previous?.invitation.organizationId,\n    resolveSubject: ({ previous, result }) =>\n      subject(\n        \"organization.invitation\",\n        result.invitation.id ?? previous?.invitation.id\n      ),\n    result: \"receipt\",\n    subjectType: \"organization.invitation\",\n  },\n  \"organization.invitation.create\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveOrganizationId: ({ result }) => result.invitation.organizationId,\n    resolveSubject: ({ result }) =>\n      subject(\"organization.invitation\", result.invitation.id),\n    result: \"resource\",\n    subjectType: \"organization.invitation\",\n  },\n  \"organization.invitation.reject\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"required\",\n    resolveOrganizationId: ({ previous, result }) =>\n      definedId(result.invitation.organizationId) ??\n      previous?.invitation.organizationId,\n    resolveSubject: ({ previous, result }) =>\n      subject(\n        \"organization.invitation\",\n        result.invitation.id ?? previous?.invitation.id\n      ),\n    result: \"receipt\",\n    subjectType: \"organization.invitation\",\n  },\n  \"organization.member.add\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveOrganizationId: ({ result }) => result.member.organizationId,\n    resolveSubject: ({ result }) =>\n      subject(\"organization.member\", result.member.id),\n    result: \"resource\",\n    subjectType: \"organization.member\",\n  },\n  \"organization.member.invite.reminder\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"required\",\n    resolveOrganizationId: ({ previous, result }) =>\n      definedId(result.invitation.organizationId) ??\n      previous?.invitation.organizationId,\n    resolveSubject: ({ previous, result }) =>\n      subject(\n        \"organization.invitation\",\n        result.invitation.id ?? previous?.invitation.id\n      ),\n    result: \"receipt\",\n    subjectType: \"organization.invitation\",\n  },\n  \"organization.member.remove\": {\n    audit: true,\n    mutationKind: \"delete\",\n    previous: \"required\",\n    resolveOrganizationId: ({ previous, result }) =>\n      definedId(result.organizationId) ?? previous?.member.organizationId,\n    resolveSubject: ({ previous, result }) =>\n      subject(\"organization.member\", result.id ?? previous?.member.id),\n    result: \"receipt\",\n    subjectType: \"organization.member\",\n  },\n  \"organization.member.role.update\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveOrganizationId: ({ result }) => result.member.organizationId,\n    resolveSubject: ({ result }) =>\n      subject(\"organization.member\", result.member.id),\n    result: \"resource\",\n    subjectType: \"organization.member\",\n  },\n  \"organization.update\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveOrganizationId: ({ result }) => definedId(result.organization.id),\n    resolveSubject: ({ previous, result }) =>\n      subject(\n        \"organization\",\n        definedId(result.organization.id) ?? previous?.organization.id\n      ),\n    result: \"resource\",\n    subjectType: \"organization\",\n  },\n  \"oauth.authorization.denied\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"none\",\n    resolveSubject: ({ result }) =>\n      subject(\"oauth.authorization_request\", result.requestId),\n    result: \"receipt\",\n    subjectType: \"oauth.authorization_request\",\n  },\n  \"oauth.client.disabled\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"none\",\n    resolveSubject: ({ result }) => subject(\"oauth.client\", result.clientId),\n    result: \"receipt\",\n    subjectType: \"oauth.client\",\n  },\n  \"oauth.grant.authorized\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveSubject: ({ result }) => subject(\"oauth.grant\", result.grantId),\n    result: \"receipt\",\n    subjectType: \"oauth.grant\",\n  },\n  \"oauth.grant.revoked\": {\n    audit: true,\n    mutationKind: \"delete\",\n    previous: \"none\",\n    resolveSubject: ({ result }) => subject(\"oauth.grant\", result.id),\n    result: \"receipt\",\n    subjectType: \"oauth.grant\",\n  },\n  \"oauth.refresh.reuse_detected\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"none\",\n    resolveSubject: ({ result }) =>\n      subject(\"oauth.refresh_family\", result.familyId),\n    result: \"receipt\",\n    subjectType: \"oauth.refresh_family\",\n  },\n  \"oauth.refresh.rotated\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"none\",\n    resolveSubject: ({ result }) =>\n      subject(\"oauth.refresh_family\", result.familyId),\n    result: \"receipt\",\n    subjectType: \"oauth.refresh_family\",\n  },\n  \"passkey.delete\": {\n    audit: true,\n    mutationKind: \"delete\",\n    previous: \"required\",\n    resolveSubject: ({ previous, result }) =>\n      subject(\"passkey\", result.id ?? previous?.passkey.id),\n    result: \"receipt\",\n    subjectType: \"passkey\",\n  },\n  \"passkey.register\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveSubject: ({ result }) => subject(\"passkey\", result.passkey.id),\n    result: \"resource\",\n    subjectType: \"passkey\",\n  },\n  \"passkey.update\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveSubject: ({ result }) => subject(\"passkey\", result.passkey.id),\n    result: \"resource\",\n    subjectType: \"passkey\",\n  },\n  \"session.activeOrganization.update\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveOrganizationId: ({ previous, result }) =>\n      definedId(result.organizationId) ?? definedId(previous?.organizationId),\n    resolveSubject: ({ actor }) => subject(\"session\", actor?.sessionId),\n    result: \"resource\",\n    subjectType: \"session\",\n  },\n  \"session.impersonation.end\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"required\",\n    resolveSubject: ({ input, previous, result }) =>\n      subject(\"session\", result.id ?? previous?.session.id ?? input.sessionId),\n    result: \"receipt\",\n    subjectType: \"session\",\n  },\n  \"session.impersonation.start\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveSubject: ({ result }) => subject(\"session\", result.session.id),\n    result: \"resource\",\n    subjectType: \"session\",\n  },\n  \"session.issue\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveSubject: ({ result }) => subject(\"session\", result.session.id),\n    result: \"resource\",\n    subjectType: \"session\",\n  },\n  \"session.revoke\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"required\",\n    resolveSubject: ({ previous, result }) =>\n      subject(\"session\", result.id ?? previous?.session.id),\n    result: \"receipt\",\n    subjectType: \"session\",\n  },\n  \"twoFactor.disable\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"none\",\n    resolveSubject: ({ actor, result }) =>\n      subject(\"user\", result.userId ?? actor?.userId),\n    result: \"receipt\",\n    subjectType: \"user\",\n  },\n  \"twoFactor.enable\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"none\",\n    resolveSubject: ({ actor, result }) =>\n      subject(\"user\", result.userId ?? actor?.userId),\n    result: \"receipt\",\n    subjectType: \"user\",\n  },\n  \"user.ban\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveSubject: ({ result }) => subject(\"user\", result.user.id),\n    result: \"resource\",\n    subjectType: \"user\",\n  },\n  \"user.create\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveSubject: ({ result }) => subject(\"user\", result.user.id),\n    result: \"resource\",\n    subjectType: \"user\",\n  },\n  \"user.delete\": {\n    audit: true,\n    mutationKind: \"delete\",\n    previous: \"required\",\n    resolveSubject: ({ previous, result }) =>\n      subject(\"user\", result.id ?? previous?.user.id),\n    result: \"receipt\",\n    subjectType: \"user\",\n  },\n  \"user.email.update\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveSubject: ({ result }) => subject(\"user\", result.user.id),\n    result: \"resource\",\n    subjectType: \"user\",\n  },\n  \"user.email.verify\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveSubject: ({ result }) => subject(\"user\", result.user.id),\n    result: \"resource\",\n    subjectType: \"user\",\n  },\n  \"user.password.change\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"none\",\n    resolveSubject: ({ actor, result }) =>\n      subject(\"user\", result.userId ?? actor?.userId),\n    result: \"receipt\",\n    subjectType: \"user\",\n  },\n  \"user.password.reset\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"none\",\n    resolveSubject: ({ actor, result }) =>\n      subject(\"user\", result.userId ?? actor?.userId),\n    result: \"receipt\",\n    subjectType: \"user\",\n  },\n  \"user.role.update\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveSubject: ({ result }) => subject(\"user\", result.user.id),\n    result: \"resource\",\n    subjectType: \"user\",\n  },\n  \"user.security.alert\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"none\",\n    resolveSubject: ({ actor }) => subject(\"user\", actor?.userId),\n    result: \"receipt\",\n    subjectType: \"user\",\n  },\n  \"user.sign-in.email\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"none\",\n    resolveSubject: ({ actor }) => subject(\"user\", actor?.userId),\n    result: \"receipt\",\n    subjectType: \"user\",\n  },\n  \"user.sign-in.social\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"none\",\n    resolveSubject: ({ result }) => subject(\"user\", result.user.id),\n    result: \"resource\",\n    subjectType: \"user\",\n  },\n  \"user.unban\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveSubject: ({ result }) => subject(\"user\", result.user.id),\n    result: \"resource\",\n    subjectType: \"user\",\n  },\n  \"user.update\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveSubject: ({ result }) => subject(\"user\", result.user.id),\n    result: \"resource\",\n    subjectType: \"user\",\n  },\n} as const satisfies {\n  [K in AthenaAuthImplementedDomainEvent]: AthenaAuthEventDefinition<K>;\n};\n\nexport function isAuditedAuthEvent(\n  event: AthenaAuthImplementedDomainEvent\n): boolean {\n  return ATHENA_AUTH_EVENT_DEFINITIONS[event].audit;\n}\n\nexport function resolveAuthEventSubject<\n  E extends AthenaAuthImplementedDomainEvent,\n>(\n  event: E,\n  context: AthenaAuthAuditResolveContext<E>\n): AthenaAuthEventSubject | undefined {\n  const ir = ATHENA_AUTH_EVENT_DEFINITIONS[event] as {\n    resolveSubject: (\n      ctx: AthenaAuthAuditResolveContext<E>\n    ) => AthenaAuthEventSubject | undefined;\n  };\n  return ir.resolveSubject(context);\n}\n","import { AthenaAuthRuntimeError } from \"../local/errors.ts\";\nimport type { AthenaAuthAuditEntry } from \"./types.ts\";\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 isTombstoneReceipt(value: unknown): boolean {\n  const record = asRecord(value);\n  return (\n    record !== null &&\n    record.deleted === true &&\n    typeof record.id === \"string\" &&\n    record.id.length > 0\n  );\n}\n\nfunction isSessionRevokeReceipt(value: unknown): boolean {\n  const record = asRecord(value);\n  return (\n    record !== null &&\n    record.revoked === true &&\n    typeof record.id === \"string\" &&\n    record.id.length > 0 &&\n    typeof record.userId === \"string\" &&\n    record.userId.length > 0\n  );\n}\n\nfunction auditError(code: string): AthenaAuthRuntimeError {\n  return new AthenaAuthRuntimeError(500, code, {\n    code,\n    internalMessage: code,\n  });\n}\n\nexport function validateAuthAuditEntry(\n  entry: AthenaAuthAuditEntry,\n  ir: {\n    mutationKind: string;\n    previous: string;\n    resolveOrganizationId?: unknown;\n    result: string;\n    subjectType?: string;\n  }\n): void {\n  if (!isPresentSnapshot(entry.result)) {\n    throw auditError(\"ATHENA_AUTH_AUDIT_RESULT_REQUIRED\");\n  }\n  if (ir.mutationKind === \"delete\" && !isTombstoneReceipt(entry.result)) {\n    throw auditError(\"ATHENA_AUTH_AUDIT_INVALID_RESULT\");\n  }\n  if (\n    (entry.event === \"session.revoke\" ||\n      entry.event === \"session.impersonation.end\") &&\n    !isSessionRevokeReceipt(entry.result)\n  ) {\n    throw auditError(\"ATHENA_AUTH_AUDIT_INVALID_RESULT\");\n  }\n  if (ir.result === \"resource\" && asRecord(entry.result) === null) {\n    throw auditError(\"ATHENA_AUTH_AUDIT_INVALID_RESULT\");\n  }\n  if (ir.previous === \"required\" && !isPresentSnapshot(entry.previous)) {\n    throw auditError(\"ATHENA_AUTH_AUDIT_PREVIOUS_REQUIRED\");\n  }\n  if (\n    typeof entry.subject?.id !== \"string\" ||\n    entry.subject.id.length === 0 ||\n    typeof entry.subject.type !== \"string\" ||\n    entry.subject.type.length === 0\n  ) {\n    throw auditError(\"ATHENA_AUTH_AUDIT_SUBJECT_REQUIRED\");\n  }\n  if (entry.subject.type !== ir.subjectType) {\n    throw auditError(\"ATHENA_AUTH_AUDIT_SUBJECT_TYPE_MISMATCH\");\n  }\n  if (\n    typeof ir.resolveOrganizationId === \"function\" &&\n    (typeof entry.organizationId !== \"string\" ||\n      entry.organizationId.length === 0)\n  ) {\n    throw auditError(\"ATHENA_AUTH_AUDIT_ORGANIZATION_UNRESOLVED\");\n  }\n}\n","import { AthenaAuthRuntimeError } from \"../local/errors.ts\";\nimport type { AthenaAuthImplementedDomainEvent } from \"./events.ts\";\nimport type {\n  AthenaAuthAfterHookPayload,\n  AthenaAuthBeforeHookPayload,\n  AthenaAuthHookContext,\n  AthenaAuthHookErrorInput,\n  AthenaAuthHookHandler,\n  AthenaAuthHookHandlerList,\n  AthenaAuthHooks,\n} from \"./types.ts\";\n\nfunction asHandlerList<\n  E extends AthenaAuthImplementedDomainEvent,\n  Phase extends \"after\" | \"before\",\n>(\n  value: AthenaAuthHookHandlerList<E, Phase> | undefined\n): AthenaAuthHookHandler<E, Phase>[] {\n  if (!value) {\n    return [];\n  }\n  return Array.isArray(value) ? value : [value];\n}\n\nfunction toHookRejected(error: unknown): AthenaAuthRuntimeError {\n  if (error instanceof AthenaAuthRuntimeError) {\n    return error;\n  }\n  const message =\n    error instanceof Error && error.message.trim()\n      ? error.message\n      : \"Auth hook rejected the operation\";\n  return new AthenaAuthRuntimeError(400, message, {\n    cause: error,\n    code: \"ATHENA_AUTH_HOOK_REJECTED\",\n  });\n}\n\nasync function reportHookError(\n  hooks: AthenaAuthHooks | undefined,\n  input: AthenaAuthHookErrorInput\n): Promise<void> {\n  if (!hooks?.onError) {\n    return;\n  }\n  try {\n    await hooks.onError(input);\n  } catch (error) {\n    console.error(\"[athena-auth]\", {\n      code: \"ATHENA_AUTH_HOOK_ON_ERROR_FAILED\",\n      error: error instanceof Error ? error.message : String(error),\n      event: input.event,\n      eventId: input.eventId,\n      phase: \"onError\",\n      traceId: input.traceId,\n    });\n  }\n}\n\nexport async function runAuthBeforeHooks<\n  E extends AthenaAuthImplementedDomainEvent,\n>(\n  hooks: AthenaAuthHooks | undefined,\n  payload: AthenaAuthBeforeHookPayload<E>\n): Promise<void> {\n  const handlers = asHandlerList(\n    hooks?.before?.[payload.event] as\n      | AthenaAuthHookHandlerList<E, \"before\">\n      | undefined\n  );\n  for (const handler of handlers) {\n    try {\n      await handler(payload);\n    } catch (error) {\n      await reportHookError(hooks, {\n        error,\n        event: payload.event,\n        eventId: payload.eventId,\n        phase: \"before\",\n        traceId: payload.traceId,\n      });\n      throw toHookRejected(error);\n    }\n  }\n}\n\nexport async function runAuthAfterHooks<\n  E extends AthenaAuthImplementedDomainEvent,\n>(\n  hooks: AthenaAuthHooks | undefined,\n  payload: AthenaAuthAfterHookPayload<E>\n): Promise<void> {\n  const handlers = asHandlerList(\n    hooks?.after?.[payload.event] as\n      | AthenaAuthHookHandlerList<E, \"after\">\n      | undefined\n  );\n  for (const handler of handlers) {\n    try {\n      await handler(payload);\n    } catch (error) {\n      await reportHookError(hooks, {\n        error,\n        event: payload.event,\n        eventId: payload.eventId,\n        phase: \"after\",\n        traceId: payload.traceId,\n      });\n    }\n  }\n}\n\nexport function createAuthHookContext(\n  context: Omit<AthenaAuthHookContext, \"eventId\">,\n  eventId = crypto.randomUUID()\n): AthenaAuthHookContext {\n  return {\n    actor: context.actor,\n    eventId,\n    request: context.request,\n    traceId: context.traceId,\n  };\n}\n","import type { AthenaAuthMutationScope } from \"../hooks/scope.ts\";\nimport type { AthenaAuthDatabase } from \"../local/database.ts\";\nimport type { AthenaAuthAuditEntry } from \"./types.ts\";\n\nexport interface AthenaAuthAuditWriter {\n  write(\n    scope: AthenaAuthMutationScope,\n    entry: AthenaAuthAuditEntry\n  ): Promise<void>;\n}\n\nexport interface MemoryAuthAuditSink {\n  entries: AthenaAuthAuditEntry[];\n}\n\nfunction jsonValue(value: unknown): unknown {\n  return value === undefined ? null : value;\n}\n\nexport function createMemoryAuthAuditWriter(\n  sink: MemoryAuthAuditSink\n): AthenaAuthAuditWriter {\n  return {\n    async write(_scope, entry) {\n      sink.entries.push({ ...entry });\n    },\n  };\n}\n\nexport function createPostgresAuthAuditWriter(): AthenaAuthAuditWriter {\n  return {\n    async write(scope, entry) {\n      if (!scope.persistAudit) {\n        throw new Error(\n          \"ATHENA_AUTH_AUDIT_REQUIRES_TRANSACTION: audit_log_auth writes must use the mutation transaction\"\n        );\n      }\n      await scope.persistAudit(entry);\n    },\n  };\n}\n\nexport async function insertAuditLogAuth(\n  db: AthenaAuthDatabase,\n  entry: AthenaAuthAuditEntry\n): Promise<void> {\n  await db.query(\n    `\nINSERT INTO athena.audit_log_auth (\n\tid,\n\tevent_id,\n\ttrace_id,\n\tevent,\n\tactor_kind,\n\tactor_user_id,\n\tactor_session_id,\n\tsubject_type,\n\tsubject_id,\n\torganization_id,\n\tprevious,\n\tresult,\n\trequest_ip,\n\trequest_user_agent,\n\toutcome,\n\tcreated_at\n) VALUES (\n\t$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, NOW()\n)\n`,\n    [\n      entry.id,\n      entry.eventId,\n      entry.traceId,\n      entry.event,\n      entry.actor.kind,\n      entry.actor.userId ?? null,\n      entry.actor.sessionId ?? null,\n      entry.subject?.type ?? null,\n      entry.subject?.id ?? null,\n      entry.organizationId ?? null,\n      jsonValue(entry.previous),\n      jsonValue(entry.result),\n      entry.request.ipAddress ?? null,\n      entry.request.userAgent ?? null,\n      entry.outcome,\n    ]\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 {\n  type CryptoKey,\n  decodeProtectedHeader,\n  importJWK,\n  type JWTPayload,\n  jwtVerify,\n  SignJWT,\n} from \"jose\";\nimport type { OAuthAccessTokenClaims } from \"../authorization-server/types.ts\";\nimport type { AthenaAuthProtocolIdentity } from \"../protocol-identity.ts\";\nimport type { AuthClock } from \"./clock.ts\";\nimport { systemAuthClock } from \"./clock.ts\";\nimport { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\nimport {\n  ensureActiveSigningKey,\n  serializePublicJwks,\n  type TokenKeyStore,\n} from \"./token-key-store.ts\";\n\nexport interface AthenaTokenAuthorityOptions {\n  clock?: AuthClock;\n  identity: AthenaAuthProtocolIdentity;\n  keyStore: TokenKeyStore;\n}\n\nexport class AthenaTokenAuthority {\n  private readonly clock: AuthClock;\n  readonly identity: AthenaAuthProtocolIdentity;\n  private readonly keyStore: TokenKeyStore;\n\n  constructor(options: AthenaTokenAuthorityOptions) {\n    this.clock = options.clock ?? systemAuthClock;\n    this.identity = options.identity;\n    this.keyStore = options.keyStore;\n  }\n\n  withKeyStore(keyStore: TokenKeyStore): AthenaTokenAuthority {\n    return new AthenaTokenAuthority({\n      clock: this.clock,\n      identity: this.identity,\n      keyStore,\n    });\n  }\n\n  async signSessionToken(input: {\n    audiences: string[];\n    session: AuthSessionRow;\n    ttl: number;\n    user: AuthUserRow;\n  }): Promise<{ kid: string; token: string }> {\n    const signing = await ensureActiveSigningKey(this.keyStore);\n    const now = this.clock.now();\n    const token = await new SignJWT({\n      sid: input.session.id,\n    })\n      .setProtectedHeader({ alg: \"ES256\", kid: signing.kid, typ: \"JWT\" })\n      .setIssuer(this.identity.issuer)\n      .setSubject(input.user.id)\n      .setAudience(input.audiences)\n      .setIssuedAt(now)\n      .setNotBefore(0)\n      .setExpirationTime(Math.floor(now.getTime() / 1000) + input.ttl)\n      .setJti(crypto.randomUUID())\n      .sign(signing.privateKey);\n    return { kid: signing.kid, token };\n  }\n\n  async signOAuthAccessToken(claims: OAuthAccessTokenClaims): Promise<string> {\n    if (claims.iss !== this.identity.issuer) {\n      throw AthenaAuthRuntimeError.internal(\n        new Error(\"OAuth access token issuer does not match protocol identity\")\n      );\n    }\n    const signing = await ensureActiveSigningKey(this.keyStore);\n    return new SignJWT({\n      athena_grant_id: claims.athena_grant_id,\n      ...(claims.athena_organization_id\n        ? { athena_organization_id: claims.athena_organization_id }\n        : {}),\n      ...(claims.athena_token_family_id\n        ? { athena_token_family_id: claims.athena_token_family_id }\n        : {}),\n      client_id: claims.client_id,\n      scope: claims.scope,\n    })\n      .setProtectedHeader({ alg: \"ES256\", kid: signing.kid, typ: \"JWT\" })\n      .setIssuer(claims.iss)\n      .setSubject(claims.sub)\n      .setAudience(claims.aud)\n      .setIssuedAt(claims.iat)\n      .setNotBefore(claims.nbf)\n      .setExpirationTime(claims.exp)\n      .setJti(claims.jti)\n      .sign(signing.privateKey);\n  }\n\n  async getJwks() {\n    await ensureActiveSigningKey(this.keyStore);\n    return serializePublicJwks(\n      await this.keyStore.listVerificationKeys(this.clock.now())\n    );\n  }\n\n  async verifyAthenaToken(input: {\n    audience?: string;\n    token: string;\n  }): Promise<JWTPayload> {\n    const header = decodeProtectedHeader(input.token);\n    if (header.alg !== \"ES256\" || typeof header.kid !== \"string\") {\n      throw new Error(\"Athena token algorithm or kid is invalid\");\n    }\n    const keys = await this.keyStore.listVerificationKeys(this.clock.now());\n    const key = keys.find((entry) => entry.kid === header.kid);\n    if (!key) {\n      throw new Error(\"Athena token signing key is unknown\");\n    }\n    const cryptoKey = await importJWK(key.publicJwk, \"ES256\");\n    const verified = await jwtVerify(input.token, cryptoKey, {\n      algorithms: [\"ES256\"],\n      currentDate: this.clock.now(),\n      ...(input.audience ? { audience: input.audience } : {}),\n      issuer: this.identity.issuer,\n    });\n    return verified.payload;\n  }\n}\n\nexport type { CryptoKey };\n","import { type CryptoKey, exportJWK, generateKeyPair, type JWK } from \"jose\";\n\nexport type TokenKeyStatus =\n  | \"pending\"\n  | \"active\"\n  | \"retiring\"\n  | \"retired\"\n  | \"revoked\";\n\nexport interface TokenVerificationKey {\n  kid: string;\n  publicJwk: JWK;\n  status: \"active\" | \"retiring\";\n}\n\nexport type TokenSigningKey = Omit<TokenVerificationKey, \"status\"> & {\n  expiresAt?: Date;\n  privateKey: CryptoKey;\n  publicKey: CryptoKey;\n  retiresAt?: Date;\n  status: TokenKeyStatus;\n};\n\n/**\n * Persistent signing-key authority. Memory is opt-in ephemeral.\n * Production Embedded Auth uses PostgresTokenKeyStore (AUTH-JWT-09).\n */\nexport interface TokenKeyStore {\n  acquireBootstrapLock(): Promise<() => void>;\n  activateKey(key: TokenSigningKey): Promise<void>;\n  compareAndActivate(key: TokenSigningKey): Promise<void>;\n  getActiveSigningKey(): Promise<TokenSigningKey | undefined>;\n  listVerificationKeys(now?: Date): Promise<TokenVerificationKey[]>;\n  retireKey(kid: string): Promise<void>;\n  rotateSigningKey(): Promise<TokenSigningKey>;\n}\n\n/** retireWindow = maxTokenTtl + jwksCache max-age + SWR. */\nexport const DEFAULT_TOKEN_RETIRE_WINDOW_MS = (3600 + 300 + 300) * 1000;\n\nconst processStores = new Map<string, MemoryTokenKeyStore>();\n\nexport function getOrCreateProcessTokenKeyStore(\n  issuer: string\n): MemoryTokenKeyStore {\n  const existing = processStores.get(issuer);\n  if (existing) {\n    return existing;\n  }\n  const created = new MemoryTokenKeyStore();\n  processStores.set(issuer, created);\n  return created;\n}\n\nexport function hasProcessTokenKeyStore(issuer: string): boolean {\n  return processStores.has(issuer);\n}\n\nexport function resetProcessTokenKeyStores(): void {\n  processStores.clear();\n}\n\ntype StoredKey = TokenSigningKey & { status: TokenKeyStatus };\n\nexport class MemoryTokenKeyStore implements TokenKeyStore {\n  private readonly keys = new Map<string, StoredKey>();\n  private lockTail: Promise<void> = Promise.resolve();\n  private readonly retireWindowMs: number;\n\n  constructor(retireWindowMs = DEFAULT_TOKEN_RETIRE_WINDOW_MS) {\n    this.retireWindowMs = retireWindowMs;\n  }\n\n  async acquireBootstrapLock(): Promise<() => void> {\n    let releaseHeld: (() => void) | undefined;\n    const held = new Promise<void>((resolve) => {\n      releaseHeld = resolve;\n    });\n    const previous = this.lockTail;\n    this.lockTail = previous.then(() => held);\n    await previous;\n    return () => {\n      releaseHeld?.();\n    };\n  }\n\n  async getActiveSigningKey(): Promise<TokenSigningKey | undefined> {\n    this.prune(new Date());\n    for (const key of this.keys.values()) {\n      if (key.status === \"active\") {\n        return key;\n      }\n    }\n  }\n\n  async listVerificationKeys(\n    now = new Date()\n  ): Promise<TokenVerificationKey[]> {\n    this.prune(now);\n    const out: TokenVerificationKey[] = [];\n    for (const key of this.keys.values()) {\n      if (key.status !== \"active\" && key.status !== \"retiring\") {\n        continue;\n      }\n      if (key.expiresAt && key.expiresAt.getTime() <= now.getTime()) {\n        continue;\n      }\n      out.push({\n        kid: key.kid,\n        publicJwk: key.publicJwk,\n        status: key.status,\n      });\n    }\n    return out;\n  }\n\n  async compareAndActivate(key: TokenSigningKey): Promise<void> {\n    this.prune(new Date());\n    const existing = await this.getActiveSigningKey();\n    if (existing) {\n      return;\n    }\n    this.keys.set(key.kid, { ...key, status: \"active\" });\n  }\n\n  async activateKey(key: TokenSigningKey): Promise<void> {\n    await this.compareAndActivate(key);\n  }\n\n  async rotateSigningKey(): Promise<TokenSigningKey> {\n    const unlock = await this.acquireBootstrapLock();\n    try {\n      const current = await this.getActiveSigningKey();\n      const next = await generateSigningKey();\n      if (current) {\n        await this.retireKey(current.kid);\n      }\n      this.keys.set(next.kid, { ...next, status: \"active\" });\n      return next;\n    } finally {\n      unlock();\n    }\n  }\n\n  async retireKey(kid: string): Promise<void> {\n    const existing = this.keys.get(kid);\n    if (!existing) {\n      return;\n    }\n    const retiresAt = new Date(Date.now() + this.retireWindowMs);\n    this.keys.set(kid, {\n      ...existing,\n      expiresAt: retiresAt,\n      retiresAt,\n      status: \"retiring\",\n    });\n  }\n\n  private prune(now: Date): void {\n    for (const [kid, key] of this.keys) {\n      if (\n        key.status === \"retiring\" &&\n        key.retiresAt &&\n        key.retiresAt.getTime() <= now.getTime()\n      ) {\n        this.keys.set(kid, { ...key, status: \"retired\" });\n      }\n    }\n  }\n}\n\nexport function serializePublicJwks(keys: TokenVerificationKey[]): {\n  keys: JWK[];\n} {\n  return {\n    keys: keys.map((entry) => stripPrivateJwk(entry.publicJwk)),\n  };\n}\n\nfunction stripPrivateJwk(jwk: JWK): JWK {\n  const publicJwk = { ...jwk };\n  delete publicJwk.d;\n  return publicJwk;\n}\n\nexport async function ensureActiveSigningKey(\n  store: TokenKeyStore\n): Promise<TokenSigningKey> {\n  const unlock = await store.acquireBootstrapLock();\n  try {\n    const existing = await store.getActiveSigningKey();\n    if (existing) {\n      return existing;\n    }\n    const generated = await generateSigningKey();\n    await store.compareAndActivate(generated);\n    const active = await store.getActiveSigningKey();\n    if (!active) {\n      throw new Error(\n        \"Signing key activation did not persist an active committed key\"\n      );\n    }\n    return active;\n  } finally {\n    unlock();\n  }\n}\n\nexport async function rotateSigningKey(\n  store: TokenKeyStore\n): Promise<TokenSigningKey> {\n  return store.rotateSigningKey();\n}\n\nexport async function generateSigningKey(): Promise<TokenSigningKey> {\n  const { privateKey, publicKey } = await generateKeyPair(\"ES256\", {\n    extractable: true,\n  });\n  const kid = crypto.randomUUID();\n  const jwk = await exportJWK(publicKey);\n  const publicJwk: JWK = {\n    ...jwk,\n    alg: \"ES256\",\n    kid,\n    use: \"sig\",\n  };\n  return {\n    kid,\n    privateKey,\n    publicJwk,\n    publicKey,\n    status: \"active\",\n  };\n}\n","import type {\n  OAuthAuthorizationCode,\n  OAuthAuthorizationGrant,\n  OAuthAuthorizationRequest,\n  OAuthClient,\n  OAuthRefreshToken,\n  OAuthRevokedAccessToken,\n} from \"../../authorization-server/types.ts\";\nimport { normalizeRegisteredRedirectUri } from \"../../authorization-server/redirect-uri.ts\";\nimport {\n  type AuthorizeOAuthGrantInput,\n  type CreateOAuthAuthorizationCodeInput,\n  type CreateOAuthAuthorizationRequestInput,\n  type CreateOAuthRefreshTokenInput,\n  type OAuthAuthorizationServerStores,\n  type OAuthGrantLookup,\n  type OAuthRefreshRotationResult,\n  type RotateOAuthRefreshTokenInput,\n} from \"./store.ts\";\n\nfunction cloneDate(value: Date | null): Date | null {\n  return value ? new Date(value) : null;\n}\n\nfunction cloneClient(client: OAuthClient): OAuthClient {\n  return {\n    ...client,\n    createdAt: new Date(client.createdAt),\n    metadata: { ...client.metadata },\n    redirectUris: [...client.redirectUris],\n    resourceUris: [...client.resourceUris],\n    scopes: [...client.scopes],\n    updatedAt: new Date(client.updatedAt),\n  };\n}\n\nfunction cloneGrant(grant: OAuthAuthorizationGrant): OAuthAuthorizationGrant {\n  return {\n    ...grant,\n    authorizedAt: new Date(grant.authorizedAt),\n    createdAt: new Date(grant.createdAt),\n    expiresAt: cloneDate(grant.expiresAt),\n    lastUsedAt: cloneDate(grant.lastUsedAt),\n    revokedAt: cloneDate(grant.revokedAt),\n    scopes: [...grant.scopes],\n    updatedAt: new Date(grant.updatedAt),\n  };\n}\n\nfunction cloneRequest(\n  request: OAuthAuthorizationRequest\n): OAuthAuthorizationRequest {\n  return {\n    ...request,\n    createdAt: new Date(request.createdAt),\n    expiresAt: new Date(request.expiresAt),\n    requestedScopes: [...request.requestedScopes],\n    resolvedAt: cloneDate(request.resolvedAt),\n  };\n}\n\nfunction cloneCode(code: OAuthAuthorizationCode): OAuthAuthorizationCode {\n  return {\n    ...code,\n    consumedAt: cloneDate(code.consumedAt),\n    createdAt: new Date(code.createdAt),\n    expiresAt: new Date(code.expiresAt),\n    scopes: [...code.scopes],\n  };\n}\n\nfunction cloneRefresh(token: OAuthRefreshToken): OAuthRefreshToken {\n  return {\n    ...token,\n    createdAt: new Date(token.createdAt),\n    expiresAt: new Date(token.expiresAt),\n    revokedAt: cloneDate(token.revokedAt),\n    rotatedAt: cloneDate(token.rotatedAt),\n    scopes: [...token.scopes],\n    usedAt: cloneDate(token.usedAt),\n  };\n}\n\nfunction isActiveGrant(grant: OAuthAuthorizationGrant, now: Date): boolean {\n  return (\n    grant.status === \"active\" &&\n    (grant.expiresAt === null || grant.expiresAt.getTime() > now.getTime()) &&\n    grant.revokedAt === null\n  );\n}\n\nfunction grantMatches(left: OAuthGrantLookup, right: OAuthAuthorizationGrant): boolean {\n  return (\n    left.clientId === right.clientId &&\n    left.organizationId === right.organizationId &&\n    left.resource === right.resource &&\n    left.userId === right.userId\n  );\n}\n\nfunction createGrant(input: AuthorizeOAuthGrantInput): OAuthAuthorizationGrant {\n  const now = new Date();\n  return {\n    authorizedAt: now,\n    clientId: input.clientId,\n    createdAt: now,\n    expiresAt: null,\n    id: crypto.randomUUID(),\n    lastUsedAt: null,\n    organizationId: input.organizationId,\n    resource: input.resource,\n    revokedAt: null,\n    revokedBy: null,\n    revokeReason: null,\n    scopes: [...new Set(input.scopes)].sort(),\n    status: \"active\",\n    updatedAt: now,\n    userId: input.userId,\n  };\n}\n\nfunction createRequest(\n  input: CreateOAuthAuthorizationRequestInput\n): OAuthAuthorizationRequest {\n  return {\n    clientId: input.clientId,\n    codeChallenge: input.codeChallenge,\n    codeChallengeMethod: input.codeChallengeMethod,\n    createdAt: new Date(),\n    expiresAt: new Date(input.expiresAt),\n    id: input.id,\n    organizationId: input.organizationId ?? null,\n    redirectUri: input.redirectUri,\n    requestedScopes: [...input.requestedScopes],\n    resolvedAt: null,\n    resource: input.resource,\n    stateCiphertext: input.stateCiphertext,\n    status: \"pending\",\n    userId: input.userId ?? null,\n  };\n}\n\nfunction createCode(\n  input: CreateOAuthAuthorizationCodeInput & { codeHash: string }\n): OAuthAuthorizationCode {\n  return {\n    clientId: input.clientId,\n    codeChallenge: input.codeChallenge,\n    codeChallengeMethod: input.codeChallengeMethod,\n    consumedAt: null,\n    consumeReason: null,\n    createdAt: new Date(),\n    expiresAt: new Date(input.expiresAt),\n    grantId: input.grantId,\n    id: input.id,\n    organizationId: input.organizationId ?? null,\n    redirectUri: input.redirectUri,\n    resource: input.resource,\n    scopes: [...input.scopes],\n    userId: input.userId,\n  };\n}\n\nfunction createRefresh(\n  input: CreateOAuthRefreshTokenInput\n): OAuthRefreshToken {\n  return {\n    clientId: input.clientId,\n    createdAt: new Date(),\n    expiresAt: new Date(input.expiresAt),\n    familyId: input.familyId,\n    grantId: input.grantId,\n    id: input.id,\n    organizationId: input.organizationId ?? null,\n    parentTokenId: input.parentTokenId ?? null,\n    resource: input.resource,\n    revokedAt: null,\n    revokeReason: null,\n    rotatedAt: null,\n    scopes: [...input.scopes],\n    status: \"active\",\n    usedAt: null,\n    userId: input.userId,\n  };\n}\n\nexport interface MemoryOAuthAuthorizationServerState {\n  clients: Map<string, OAuthClient>;\n  grants: Map<string, OAuthAuthorizationGrant>;\n  requests: Map<string, OAuthAuthorizationRequest>;\n  codes: Map<string, OAuthAuthorizationCode>;\n  refreshTokens: Map<string, OAuthRefreshToken>;\n  revokedAccessTokens: Map<string, OAuthRevokedAccessToken>;\n  mutationTail: Promise<unknown>;\n}\n\nexport interface MemoryOAuthAuthorizationServerSnapshot {\n  clients: Map<string, OAuthClient>;\n  grants: Map<string, OAuthAuthorizationGrant>;\n  requests: Map<string, OAuthAuthorizationRequest>;\n  codes: Map<string, OAuthAuthorizationCode>;\n  refreshTokens: Map<string, OAuthRefreshToken>;\n  revokedAccessTokens: Map<string, OAuthRevokedAccessToken>;\n}\n\nexport function createMemoryOAuthAuthorizationServerState(): MemoryOAuthAuthorizationServerState {\n  return {\n    clients: new Map(),\n    grants: new Map(),\n    requests: new Map(),\n    codes: new Map(),\n    refreshTokens: new Map(),\n    revokedAccessTokens: new Map(),\n    mutationTail: Promise.resolve(),\n  };\n}\n\nfunction cloneMap<K, V>(\n  source: Map<K, V>,\n  clone: (value: V) => V\n): Map<K, V> {\n  return new Map(\n    [...source.entries()].map(([key, value]) => [key, clone(value)])\n  );\n}\n\nexport function snapshotMemoryOAuthAuthorizationServerState(\n  state: MemoryOAuthAuthorizationServerState\n): MemoryOAuthAuthorizationServerSnapshot {\n  return {\n    clients: cloneMap(state.clients, cloneClient),\n    grants: cloneMap(state.grants, cloneGrant),\n    requests: cloneMap(state.requests, cloneRequest),\n    codes: cloneMap(state.codes, cloneCode),\n    refreshTokens: cloneMap(state.refreshTokens, cloneRefresh),\n    revokedAccessTokens: cloneMap(state.revokedAccessTokens, (value) => ({\n      ...value,\n      expiresAt: new Date(value.expiresAt),\n      revokedAt: new Date(value.revokedAt),\n    })),\n  };\n}\n\nexport function restoreMemoryOAuthAuthorizationServerState(\n  state: MemoryOAuthAuthorizationServerState,\n  snapshot: MemoryOAuthAuthorizationServerSnapshot\n): void {\n  replaceMap(state.clients, snapshot.clients, cloneClient);\n  replaceMap(state.grants, snapshot.grants, cloneGrant);\n  replaceMap(state.requests, snapshot.requests, cloneRequest);\n  replaceMap(state.codes, snapshot.codes, cloneCode);\n  replaceMap(state.refreshTokens, snapshot.refreshTokens, cloneRefresh);\n  replaceMap(state.revokedAccessTokens, snapshot.revokedAccessTokens, (value) => ({\n    ...value,\n    expiresAt: new Date(value.expiresAt),\n    revokedAt: new Date(value.revokedAt),\n  }));\n}\n\nfunction replaceMap<K, V>(\n  target: Map<K, V>,\n  source: Map<K, V>,\n  clone: (value: V) => V\n): void {\n  target.clear();\n  for (const [key, value] of source) {\n    target.set(key, clone(value));\n  }\n}\n\nexport function createMemoryOAuthAuthorizationServerStores(\n  options: {\n    state?: MemoryOAuthAuthorizationServerState;\n    transactionBound?: boolean;\n  } = {}\n): OAuthAuthorizationServerStores {\n  const state =\n    options.state ?? createMemoryOAuthAuthorizationServerState();\n  const {\n    clients,\n    grants,\n    requests,\n    codes,\n    refreshTokens,\n    revokedAccessTokens,\n  } = state;\n\n  const serialize = <T>(operation: () => Promise<T>): Promise<T> => {\n    if (options.transactionBound) {\n      return operation();\n    }\n    const result = state.mutationTail.then(operation, operation);\n    state.mutationTail = result.then(\n      () => undefined,\n      () => undefined\n    );\n    return result;\n  };\n\n  return {\n    completeAuthorization: async (input) =>\n      serialize(async () => {\n        const request = requests.get(input.requestId);\n        if (\n          !request ||\n          request.status !== \"pending\" ||\n          request.userId !== null ||\n          request.expiresAt.getTime() <= Date.now()\n        ) {\n          throw new Error(\"OAuth authorization interaction is not pending\");\n        }\n        const grantInput = {\n          clientId: input.clientId,\n          organizationId: input.organizationId ?? null,\n          resource: input.resource,\n          scopes: input.scopes,\n          userId: input.userId,\n        };\n        const existing = [...grants.values()].find(\n          (candidate) =>\n            isActiveGrant(candidate, new Date()) &&\n            grantMatches(grantInput, candidate)\n        );\n        const grant = existing ?? createGrant(grantInput);\n        grant.scopes = [...new Set(input.scopes)].sort();\n        grant.authorizedAt = new Date();\n        grant.updatedAt = new Date();\n        if (!existing) {\n          grants.set(grant.id, grant);\n        }\n        request.status = \"approved\";\n        request.userId = input.userId;\n        request.organizationId = input.organizationId ?? null;\n        request.resolvedAt = new Date();\n        const code = createCode({ ...input, grantId: grant.id });\n        codes.set(input.codeHash, code);\n        request.status = \"consumed\";\n        request.resolvedAt = new Date();\n        return {\n          code: cloneCode(code),\n          grant: cloneGrant(grant),\n          request: cloneRequest(request),\n        };\n      }),\n    accessTokens: {\n      async isRevoked(jti) {\n        const row = revokedAccessTokens.get(jti);\n        return Boolean(row && row.expiresAt.getTime() > Date.now());\n      },\n      async revoke(input) {\n        revokedAccessTokens.set(input.jti, {\n          ...input,\n          expiresAt: new Date(input.expiresAt),\n          revokedAt: new Date(input.revokedAt),\n        });\n      },\n    },\n    authorizationCodes: {\n      async consume(input) {\n        return serialize(async () => {\n          const row = codes.get(input.codeHash);\n          if (!row || row.expiresAt.getTime() <= Date.now()) {\n            return null;\n          }\n          if (\n            row.clientId !== input.clientId ||\n            row.redirectUri !== input.redirectUri ||\n            row.resource !== input.resource ||\n            row.consumedAt !== null\n          ) {\n            return null;\n          }\n          row.consumedAt = new Date();\n          row.consumeReason = \"consumed\";\n          return cloneCode(row);\n        });\n      },\n      async create(input) {\n        const row = createCode(input);\n        codes.set(input.codeHash, row);\n        return cloneCode(row);\n      },\n      async getByHash(codeHash) {\n        const row = codes.get(codeHash);\n        return row ? cloneCode(row) : null;\n      },\n    },\n    authorizationRequests: {\n      async approve(id, input) {\n        return serialize(async () => {\n          const row = requests.get(id);\n          if (\n            !row ||\n            row.status !== \"pending\" ||\n            row.expiresAt.getTime() <= Date.now()\n          ) {\n            return null;\n          }\n          row.status = \"approved\";\n          row.userId = input.userId;\n          row.organizationId = input.organizationId ?? null;\n          row.resolvedAt = new Date();\n          return cloneRequest(row);\n        });\n      },\n      async create(input) {\n        const row = createRequest(input);\n        requests.set(row.id, row);\n        return cloneRequest(row);\n      },\n      async deny(id) {\n        await serialize(async () => {\n          const row = requests.get(id);\n          if (row?.status === \"pending\") {\n            row.status = \"denied\";\n            row.resolvedAt = new Date();\n          }\n        });\n      },\n      async get(id) {\n        const row = requests.get(id);\n        return row ? cloneRequest(row) : null;\n      },\n      async consume(id) {\n        return serialize(async () => {\n          const row = requests.get(id);\n          if (!row || row.status !== \"approved\") {\n            return null;\n          }\n          row.status = \"consumed\";\n          row.resolvedAt = new Date();\n          return cloneRequest(row);\n        });\n      },\n    },\n    clients: {\n      async create(input) {\n        const now = new Date();\n        const row: OAuthClient = {\n          clientName: input.clientName,\n          clientType: \"public\",\n          clientUrl: input.clientUrl ?? null,\n          createdAt: now,\n          grantType: \"authorization_code\",\n          id: input.id,\n          isActive: true,\n          metadata: { ...(input.metadata ?? {}) },\n          redirectUris: input.redirectUris.map(normalizeRegisteredRedirectUri),\n          registrationKind: \"pre-registered\",\n          resourceUris: [...input.resourceUris],\n          responseType: \"code\",\n          scopes: [...new Set(input.scopes)].sort(),\n          tokenEndpointAuthMethod: \"none\",\n          updatedAt: now,\n        };\n        clients.set(row.id, row);\n        return cloneClient(row);\n      },\n      async disable(clientId) {\n        await serialize(async () => {\n          const row = clients.get(clientId);\n          if (row) {\n            row.isActive = false;\n            row.updatedAt = new Date();\n          }\n        });\n      },\n      async get(clientId) {\n        const row = clients.get(clientId);\n        return row ? cloneClient(row) : null;\n      },\n      async update(clientId, input) {\n        return serialize(async () => {\n          const row = clients.get(clientId);\n          if (!row) {\n            return null;\n          }\n          Object.assign(row, {\n            ...(input.clientName ? { clientName: input.clientName } : {}),\n            ...(input.clientUrl !== undefined ? { clientUrl: input.clientUrl } : {}),\n            ...(input.metadata ? { metadata: { ...input.metadata } } : {}),\n            ...(input.redirectUris\n              ? {\n                  redirectUris: input.redirectUris.map(\n                    normalizeRegisteredRedirectUri\n                  ),\n                }\n              : {}),\n            ...(input.resourceUris ? { resourceUris: [...input.resourceUris] } : {}),\n            ...(input.scopes ? { scopes: [...input.scopes] } : {}),\n            updatedAt: new Date(),\n          });\n          return cloneClient(row);\n        });\n      },\n    },\n    grants: {\n      async authorize(input) {\n        return serialize(async () => {\n          const existing = [...grants.values()].find(\n            (grant) => isActiveGrant(grant, new Date()) && grantMatches(input, grant)\n          );\n          if (existing) {\n            existing.scopes = [...new Set(input.scopes)].sort();\n            existing.authorizedAt = new Date();\n            existing.updatedAt = new Date();\n            return cloneGrant(existing);\n          }\n          const created = createGrant(input);\n          grants.set(created.id, created);\n          return cloneGrant(created);\n        });\n      },\n      async findActive(input) {\n        const row = [...grants.values()].find(\n          (grant) => isActiveGrant(grant, new Date()) && grantMatches(input, grant)\n        );\n        return row ? cloneGrant(row) : null;\n      },\n      async get(id) {\n        const row = grants.get(id);\n        return row ? cloneGrant(row) : null;\n      },\n      async listForUser(userId) {\n        return [...grants.values()]\n          .filter((row) => row.userId === userId)\n          .map(cloneGrant);\n      },\n      async revoke(input) {\n        await serialize(async () => {\n          const row = grants.get(input.grantId);\n          if (row) {\n            row.status = \"revoked\";\n            row.revokedAt = new Date();\n            row.revokedBy = input.revokedBy ?? null;\n            row.revokeReason = input.reason;\n            row.updatedAt = new Date();\n          }\n        });\n      },\n      async touch(id) {\n        await serialize(async () => {\n          const row = grants.get(id);\n          if (row) {\n            row.lastUsedAt = new Date();\n            row.updatedAt = new Date();\n          }\n        });\n      },\n    },\n    refreshTokens: {\n      async create(input) {\n        const row = createRefresh(input);\n        refreshTokens.set(input.tokenHash, row);\n        return cloneRefresh(row);\n      },\n      async getByHash(tokenHash) {\n        const row = refreshTokens.get(tokenHash);\n        return row ? cloneRefresh(row) : null;\n      },\n      async listFamily(familyId) {\n        return [...refreshTokens.values()]\n          .filter((row) => row.familyId === familyId)\n          .map(cloneRefresh);\n      },\n      async revokeFamily(familyId, reason) {\n        await serialize(async () => {\n          for (const row of refreshTokens.values()) {\n            if (row.familyId === familyId && row.status !== \"revoked\") {\n              row.status = \"revoked\";\n              row.revokedAt = new Date();\n              row.revokeReason = reason;\n            }\n          }\n        });\n      },\n      async rotate(input: RotateOAuthRefreshTokenInput): Promise<OAuthRefreshRotationResult> {\n        return serialize(async () => {\n          const row = refreshTokens.get(input.tokenHash);\n          if (!row) {\n            return { kind: \"missing\" };\n          }\n          if (row.status !== \"active\") {\n            for (const familyRow of refreshTokens.values()) {\n              if (familyRow.familyId === row.familyId) {\n                familyRow.status = \"reuse_detected\";\n                familyRow.revokedAt = new Date();\n                familyRow.revokeReason = \"refresh_token_reuse\";\n              }\n            }\n            return { familyId: row.familyId, kind: \"replay\" };\n          }\n          if (\n            row.clientId !== input.clientId ||\n            row.resource !== input.resource ||\n            row.expiresAt.getTime() <= Date.now()\n          ) {\n            return { kind: \"missing\" };\n          }\n          row.status = \"rotated\";\n          row.usedAt = new Date();\n          row.rotatedAt = new Date();\n          const replacement = createRefresh(input.replacement);\n          refreshTokens.set(input.replacement.tokenHash, replacement);\n          return {\n            kind: \"rotated\",\n            previous: cloneRefresh(row),\n            replacement: cloneRefresh(replacement),\n          };\n        });\n      },\n    },\n  };\n}\n","import { ATHENA_AUTH_TABLES } from \"../../contract/index.ts\";\nimport type {\n  OAuthAuthorizationCode,\n  OAuthAuthorizationGrant,\n  OAuthAuthorizationRequest,\n  OAuthClient,\n  OAuthRefreshToken,\n  OAuthRevokedAccessToken,\n} from \"../../authorization-server/types.ts\";\nimport { normalizeRegisteredRedirectUri } from \"../../authorization-server/redirect-uri.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\nimport { isUniqueViolation } from \"../runtime-helpers.ts\";\nimport {\n  type AuthorizeOAuthGrantInput,\n  type CreateOAuthAuthorizationCodeInput,\n  type CreateOAuthClientInput,\n  type OAuthAuthorizationServerStores,\n  type OAuthRefreshRotationResult,\n  type RotateOAuthRefreshTokenInput,\n} from \"./store.ts\";\n\nfunction date(value: unknown): Date {\n  return value instanceof Date ? new Date(value) : new Date(String(value));\n}\n\nfunction nullableDate(value: unknown): Date | null {\n  return value == null ? null : date(value);\n}\n\nfunction stringArray(value: unknown): string[] {\n  return Array.isArray(value)\n    ? value.filter((entry): entry is string => typeof entry === \"string\")\n    : [];\n}\n\nfunction metadata(value: unknown): Readonly<Record<string, unknown>> {\n  if (typeof value === \"string\") {\n    try {\n      const parsed = JSON.parse(value) as unknown;\n      return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n        ? (parsed as Record<string, unknown>)\n        : {};\n    } catch {\n      return {};\n    }\n  }\n  return value && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n}\n\nfunction client(row: Record<string, unknown>): OAuthClient {\n  return {\n    clientName: String(row.client_name),\n    clientType: \"public\",\n    clientUrl: typeof row.client_url === \"string\" ? row.client_url : null,\n    createdAt: date(row.created_at),\n    grantType: \"authorization_code\",\n    id: String(row.id),\n    isActive: row.is_active !== false,\n    metadata: metadata(row.metadata),\n    redirectUris: stringArray(row.redirect_uris),\n    registrationKind: \"pre-registered\",\n    resourceUris: stringArray(row.resource_uris),\n    responseType: \"code\",\n    scopes: stringArray(row.scopes),\n    tokenEndpointAuthMethod: \"none\",\n    updatedAt: date(row.updated_at),\n  };\n}\n\nfunction grant(row: Record<string, unknown>): OAuthAuthorizationGrant {\n  return {\n    authorizedAt: date(row.authorized_at),\n    clientId: String(row.client_id),\n    createdAt: date(row.created_at),\n    expiresAt: nullableDate(row.expires_at),\n    id: String(row.id),\n    lastUsedAt: nullableDate(row.last_used_at),\n    organizationId:\n      typeof row.organization_id === \"string\" ? row.organization_id : null,\n    resource: String(row.resource),\n    revokedAt: nullableDate(row.revoked_at),\n    revokedBy: typeof row.revoked_by === \"string\" ? row.revoked_by : null,\n    revokeReason:\n      typeof row.revoke_reason === \"string\" ? row.revoke_reason : null,\n    scopes: stringArray(row.scopes),\n    status:\n      row.status === \"revoked\" || row.status === \"expired\"\n        ? row.status\n        : \"active\",\n    updatedAt: date(row.updated_at),\n    userId: String(row.user_id),\n  };\n}\n\nfunction authorizationRequest(\n  row: Record<string, unknown>\n): OAuthAuthorizationRequest {\n  return {\n    clientId: String(row.client_id),\n    codeChallenge: String(row.code_challenge),\n    codeChallengeMethod: \"S256\",\n    createdAt: date(row.created_at),\n    expiresAt: date(row.expires_at),\n    id: String(row.id),\n    organizationId:\n      typeof row.organization_id === \"string\" ? row.organization_id : null,\n    redirectUri: String(row.redirect_uri),\n    requestedScopes: stringArray(row.requested_scopes),\n    resolvedAt: nullableDate(row.resolved_at),\n    resource: String(row.resource),\n    stateCiphertext: String(row.state_ciphertext),\n    status:\n      row.status === \"approved\" ||\n      row.status === \"denied\" ||\n      row.status === \"expired\" ||\n      row.status === \"consumed\"\n        ? row.status\n        : \"pending\",\n    userId: typeof row.user_id === \"string\" ? row.user_id : null,\n  };\n}\n\nfunction authorizationCode(row: Record<string, unknown>): OAuthAuthorizationCode {\n  return {\n    clientId: String(row.client_id),\n    codeChallenge: String(row.code_challenge),\n    codeChallengeMethod: \"S256\",\n    consumedAt: nullableDate(row.consumed_at),\n    consumeReason:\n      typeof row.consume_reason === \"string\" ? row.consume_reason : null,\n    createdAt: date(row.created_at),\n    expiresAt: date(row.expires_at),\n    grantId: String(row.grant_id),\n    id: String(row.id),\n    organizationId:\n      typeof row.organization_id === \"string\" ? row.organization_id : null,\n    redirectUri: String(row.redirect_uri),\n    resource: String(row.resource),\n    scopes: stringArray(row.scopes),\n    userId: String(row.user_id),\n  };\n}\n\nfunction refreshToken(row: Record<string, unknown>): OAuthRefreshToken {\n  const status = row.status;\n  return {\n    clientId: String(row.client_id),\n    createdAt: date(row.created_at),\n    expiresAt: date(row.expires_at),\n    familyId: String(row.family_id),\n    grantId: String(row.grant_id),\n    id: String(row.id),\n    organizationId:\n      typeof row.organization_id === \"string\" ? row.organization_id : null,\n    parentTokenId:\n      typeof row.parent_token_id === \"string\" ? row.parent_token_id : null,\n    resource: String(row.resource),\n    revokedAt: nullableDate(row.revoked_at),\n    revokeReason:\n      typeof row.revoke_reason === \"string\" ? row.revoke_reason : null,\n    rotatedAt: nullableDate(row.rotated_at),\n    scopes: stringArray(row.scopes),\n    status:\n      status === \"rotated\" ||\n      status === \"revoked\" ||\n      status === \"expired\" ||\n      status === \"reuse_detected\"\n        ? status\n        : \"active\",\n    usedAt: nullableDate(row.used_at),\n    userId: String(row.user_id),\n  };\n}\n\nexport function createPostgresOAuthAuthorizationServerStores(\n  database: AthenaAuthDatabase,\n  options: { transactionBound?: boolean } = {}\n): OAuthAuthorizationServerStores {\n  const transaction = <T>(\n    fn: (tx: AthenaAuthDatabase) => Promise<T>\n  ): Promise<T> =>\n    options.transactionBound ? fn(database) : database.transaction(fn);\n\n  return {\n    completeAuthorization: async (input) =>\n      transaction(async (tx) => {\n        const requestResult = await tx.query<Record<string, unknown>>(\n          `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthAuthorizationRequests}\n           WHERE id = $1\n           FOR UPDATE`,\n          [input.requestId]\n        );\n        const requestRow = requestResult.rows[0];\n        const request = requestRow\n          ? authorizationRequest(requestRow)\n          : undefined;\n        if (\n          !request ||\n          request.status !== \"pending\" ||\n          request.userId !== null ||\n          request.expiresAt.getTime() <= Date.now()\n        ) {\n          throw new Error(\"OAuth authorization interaction is not pending\");\n        }\n        const existingGrant = await tx.query<Record<string, unknown>>(\n          `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants}\n           WHERE client_id = $1 AND user_id = $2\n             AND organization_id IS NOT DISTINCT FROM $3\n             AND resource = $4 AND status = 'active'\n           FOR UPDATE`,\n          [input.clientId, input.userId, input.organizationId ?? null, input.resource]\n        );\n        let grantRow: Record<string, unknown>;\n        if (existingGrant.rows[0]) {\n          const updated = await tx.query<Record<string, unknown>>(\n            `UPDATE ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants}\n             SET scopes = $2, authorized_at = NOW(), updated_at = NOW()\n             WHERE id = $1\n             RETURNING *`,\n            [existingGrant.rows[0].id, input.scopes]\n          );\n          grantRow = updated.rows[0] as Record<string, unknown>;\n        } else {\n          const created = await tx.query<Record<string, unknown>>(\n            `INSERT INTO ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants} (\n               id, user_id, organization_id, client_id, resource, scopes\n             ) VALUES ($1, $2, $3, $4, $5, $6)\n             RETURNING *`,\n            [\n              crypto.randomUUID(),\n              input.userId,\n              input.organizationId ?? null,\n              input.clientId,\n              input.resource,\n              input.scopes,\n            ]\n          );\n          grantRow = created.rows[0] as Record<string, unknown>;\n        }\n        const codeResult = await tx.query<Record<string, unknown>>(\n          `INSERT INTO ${ATHENA_AUTH_TABLES.oauthAuthorizationCodes} (\n             id, code_hash, grant_id, user_id, organization_id, client_id,\n             redirect_uri, resource, scopes, code_challenge,\n             code_challenge_method, expires_at\n           ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)\n           RETURNING *`,\n          [\n            input.id,\n            input.codeHash,\n            grantRow.id,\n            input.userId,\n            input.organizationId ?? null,\n            input.clientId,\n            input.redirectUri,\n            input.resource,\n            input.scopes,\n            input.codeChallenge,\n            input.codeChallengeMethod,\n            input.expiresAt,\n          ]\n        );\n        const consumedRequest = await tx.query<Record<string, unknown>>(\n          `UPDATE ${ATHENA_AUTH_TABLES.oauthAuthorizationRequests}\n           SET status = 'consumed', user_id = $2, organization_id = $3,\n               resolved_at = NOW()\n           WHERE id = $1 AND status = 'pending'\n           RETURNING *`,\n          [input.requestId, input.userId, input.organizationId ?? null]\n        );\n        if (!consumedRequest.rows[0]) {\n          throw new Error(\"OAuth authorization interaction could not be consumed\");\n        }\n        return {\n          code: authorizationCode(codeResult.rows[0] as Record<string, unknown>),\n          grant: grant(grantRow),\n          request: authorizationRequest(consumedRequest.rows[0]),\n        };\n      }),\n    accessTokens: {\n      async isRevoked(jti) {\n        const result = await database.query<Record<string, unknown>>(\n          `SELECT jti FROM ${ATHENA_AUTH_TABLES.oauthRevokedAccessTokens}\n           WHERE jti = $1 AND expires_at > NOW()`,\n          [jti]\n        );\n        return Boolean(result.rows[0]);\n      },\n      async revoke(input: OAuthRevokedAccessToken) {\n        await database.query(\n          `INSERT INTO ${ATHENA_AUTH_TABLES.oauthRevokedAccessTokens}\n             (jti, grant_id, expires_at, revoked_at, reason)\n           VALUES ($1, $2, $3, $4, $5)\n           ON CONFLICT (jti) DO UPDATE SET\n             expires_at = EXCLUDED.expires_at,\n             reason = EXCLUDED.reason`,\n          [\n            input.jti,\n            input.grantId,\n            input.expiresAt,\n            input.revokedAt,\n            input.reason,\n          ]\n        );\n      },\n    },\n    authorizationCodes: {\n      async consume(input) {\n        return transaction(async (tx) => {\n          const result = await tx.query<Record<string, unknown>>(\n            `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthAuthorizationCodes}\n             WHERE code_hash = $1\n             FOR UPDATE`,\n            [input.codeHash]\n          );\n          const row = result.rows[0];\n          if (!row) {\n            return null;\n          }\n          const code = authorizationCode(row);\n          if (\n            code.consumedAt ||\n            code.expiresAt.getTime() <= Date.now() ||\n            code.clientId !== input.clientId ||\n            code.redirectUri !== input.redirectUri ||\n            code.resource !== input.resource\n          ) {\n            return null;\n          }\n          const consumed = await tx.query<Record<string, unknown>>(\n            `UPDATE ${ATHENA_AUTH_TABLES.oauthAuthorizationCodes}\n             SET consumed_at = NOW(), consume_reason = 'consumed'\n             WHERE code_hash = $1 AND consumed_at IS NULL\n             RETURNING *`,\n            [input.codeHash]\n          );\n          return consumed.rows[0] ? authorizationCode(consumed.rows[0]) : null;\n        });\n      },\n      async create(\n        input: CreateOAuthAuthorizationCodeInput & { codeHash: string }\n      ) {\n        const result = await database.query<Record<string, unknown>>(\n          `INSERT INTO ${ATHENA_AUTH_TABLES.oauthAuthorizationCodes} (\n             id, code_hash, grant_id, user_id, organization_id, client_id,\n             redirect_uri, resource, scopes, code_challenge,\n             code_challenge_method, expires_at\n           ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)\n           RETURNING *`,\n          [\n            input.id,\n            input.codeHash,\n            input.grantId,\n            input.userId,\n            input.organizationId ?? null,\n            input.clientId,\n            input.redirectUri,\n            input.resource,\n            input.scopes,\n            input.codeChallenge,\n            input.codeChallengeMethod,\n            input.expiresAt,\n          ]\n        );\n        return authorizationCode(result.rows[0] as Record<string, unknown>);\n      },\n      async getByHash(codeHash) {\n        const result = await database.query<Record<string, unknown>>(\n          `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthAuthorizationCodes}\n           WHERE code_hash = $1`,\n          [codeHash]\n        );\n        return result.rows[0] ? authorizationCode(result.rows[0]) : null;\n      },\n    },\n    authorizationRequests: {\n      async approve(id, input) {\n        const result = await database.query<Record<string, unknown>>(\n          `UPDATE ${ATHENA_AUTH_TABLES.oauthAuthorizationRequests}\n           SET status = 'approved', user_id = $2, organization_id = $3,\n               resolved_at = NOW()\n           WHERE id = $1 AND status = 'pending' AND expires_at > NOW()\n           RETURNING *`,\n          [id, input.userId, input.organizationId ?? null]\n        );\n        return result.rows[0]\n          ? authorizationRequest(result.rows[0])\n          : null;\n      },\n      async create(input) {\n        const result = await database.query<Record<string, unknown>>(\n          `INSERT INTO ${ATHENA_AUTH_TABLES.oauthAuthorizationRequests} (\n             id, request_hash, client_id, redirect_uri, resource,\n             requested_scopes, state_ciphertext, code_challenge,\n             code_challenge_method, user_id, organization_id, expires_at\n           ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)\n           RETURNING *`,\n          [\n            input.id,\n            input.requestHash,\n            input.clientId,\n            input.redirectUri,\n            input.resource,\n            input.requestedScopes,\n            input.stateCiphertext,\n            input.codeChallenge,\n            input.codeChallengeMethod,\n            input.userId ?? null,\n            input.organizationId ?? null,\n            input.expiresAt,\n          ]\n        );\n        return authorizationRequest(result.rows[0] as Record<string, unknown>);\n      },\n      async deny(id) {\n        await database.query(\n          `UPDATE ${ATHENA_AUTH_TABLES.oauthAuthorizationRequests}\n           SET status = 'denied', resolved_at = NOW()\n           WHERE id = $1 AND status = 'pending'`,\n          [id]\n        );\n      },\n      async get(id) {\n        const result = await database.query<Record<string, unknown>>(\n          `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthAuthorizationRequests}\n           WHERE id = $1`,\n          [id]\n        );\n        return result.rows[0] ? authorizationRequest(result.rows[0]) : null;\n      },\n      async consume(id) {\n        const result = await database.query<Record<string, unknown>>(\n          `UPDATE ${ATHENA_AUTH_TABLES.oauthAuthorizationRequests}\n           SET status = 'consumed', resolved_at = NOW()\n           WHERE id = $1 AND status = 'approved'\n           RETURNING *`,\n          [id]\n        );\n        return result.rows[0] ? authorizationRequest(result.rows[0]) : null;\n      },\n    },\n    clients: {\n      async create(input: CreateOAuthClientInput) {\n        const result = await database.query<Record<string, unknown>>(\n          `INSERT INTO ${ATHENA_AUTH_TABLES.oauthClients} (\n             id, client_name, client_type, registration_kind, response_type,\n             grant_type, token_authentication_method, redirect_uris, scopes,\n             resource_uris, client_url, metadata\n           ) VALUES ($1, $2, 'public', 'pre-registered', 'code',\n             'authorization_code', 'none', $3, $4, $5, $6, $7)\n           RETURNING *`,\n          [\n            input.id,\n            input.clientName,\n            input.redirectUris.map(normalizeRegisteredRedirectUri),\n            input.scopes,\n            input.resourceUris,\n            input.clientUrl ?? null,\n            input.metadata ?? {},\n          ]\n        );\n        return client(result.rows[0] as Record<string, unknown>);\n      },\n      async disable(clientId) {\n        await database.query(\n          `UPDATE ${ATHENA_AUTH_TABLES.oauthClients}\n           SET is_active = FALSE, updated_at = NOW()\n           WHERE id = $1`,\n          [clientId]\n        );\n      },\n      async get(clientId) {\n        const result = await database.query<Record<string, unknown>>(\n          `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthClients} WHERE id = $1`,\n          [clientId]\n        );\n        return result.rows[0] ? client(result.rows[0]) : null;\n      },\n      async update(clientId, input) {\n        const existing = await this.get(clientId);\n        if (!existing) {\n          return null;\n        }\n        const result = await database.query<Record<string, unknown>>(\n          `UPDATE ${ATHENA_AUTH_TABLES.oauthClients}\n           SET client_name = $2, client_url = $3, redirect_uris = $4,\n               scopes = $5, resource_uris = $6, metadata = $7,\n               updated_at = NOW()\n           WHERE id = $1\n           RETURNING *`,\n          [\n            clientId,\n            input.clientName ?? existing.clientName,\n            input.clientUrl === undefined ? existing.clientUrl : input.clientUrl,\n            input.redirectUris\n              ? input.redirectUris.map(normalizeRegisteredRedirectUri)\n              : existing.redirectUris,\n            input.scopes ?? existing.scopes,\n            input.resourceUris ?? existing.resourceUris,\n            input.metadata ?? existing.metadata,\n          ]\n        );\n        return result.rows[0] ? client(result.rows[0]) : null;\n      },\n    },\n    grants: {\n      async authorize(input: AuthorizeOAuthGrantInput) {\n        try {\n          return await transaction(async (tx) => {\n          const existing = await tx.query<Record<string, unknown>>(\n            `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants}\n             WHERE client_id = $1 AND user_id = $2\n               AND organization_id IS NOT DISTINCT FROM $3\n               AND resource = $4 AND status = 'active'\n             FOR UPDATE`,\n            [input.clientId, input.userId, input.organizationId, input.resource]\n          );\n          if (existing.rows[0]) {\n            const result = await tx.query<Record<string, unknown>>(\n              `UPDATE ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants}\n               SET scopes = $2, authorized_at = NOW(), updated_at = NOW()\n               WHERE id = $1\n               RETURNING *`,\n              [existing.rows[0].id, input.scopes]\n            );\n            return grant(result.rows[0] as Record<string, unknown>);\n          }\n          const result = await tx.query<Record<string, unknown>>(\n            `INSERT INTO ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants} (\n               id, user_id, organization_id, client_id, resource, scopes\n             ) VALUES ($1, $2, $3, $4, $5, $6)\n             RETURNING *`,\n            [\n              crypto.randomUUID(),\n              input.userId,\n              input.organizationId,\n              input.clientId,\n              input.resource,\n              input.scopes,\n            ]\n          );\n          return grant(result.rows[0] as Record<string, unknown>);\n          });\n        } catch (error) {\n          if (!isUniqueViolation(error)) {\n            throw error;\n          }\n          const raced = await this.findActive(input);\n          if (!raced) {\n            throw error;\n          }\n          const result = await database.query<Record<string, unknown>>(\n            `UPDATE ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants}\n             SET scopes = $2, authorized_at = NOW(), updated_at = NOW()\n             WHERE id = $1\n             RETURNING *`,\n            [raced.id, input.scopes]\n          );\n          return grant(result.rows[0] as Record<string, unknown>);\n        }\n      },\n      async findActive(input) {\n        const result = await database.query<Record<string, unknown>>(\n          `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants}\n           WHERE client_id = $1 AND user_id = $2\n             AND organization_id IS NOT DISTINCT FROM $3\n             AND resource = $4 AND status = 'active'\n             AND (expires_at IS NULL OR expires_at > NOW())`,\n          [input.clientId, input.userId, input.organizationId, input.resource]\n        );\n        return result.rows[0] ? grant(result.rows[0]) : null;\n      },\n      async listForUser(userId) {\n        const result = await database.query<Record<string, unknown>>(\n          `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants}\n           WHERE user_id = $1\n           ORDER BY authorized_at DESC`,\n          [userId]\n        );\n        return result.rows.map(grant);\n      },\n      async get(id) {\n        const result = await database.query<Record<string, unknown>>(\n          `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants}\n           WHERE id = $1`,\n          [id]\n        );\n        return result.rows[0] ? grant(result.rows[0]) : null;\n      },\n      async revoke(input) {\n        await database.query(\n          `UPDATE ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants}\n           SET status = 'revoked', revoked_at = NOW(), revoked_by = $2,\n               revoke_reason = $3, updated_at = NOW()\n           WHERE id = $1`,\n          [input.grantId, input.revokedBy ?? null, input.reason]\n        );\n      },\n      async touch(id) {\n        await database.query(\n          `UPDATE ${ATHENA_AUTH_TABLES.oauthAuthorizationGrants}\n           SET last_used_at = NOW(), updated_at = NOW()\n           WHERE id = $1 AND status = 'active'`,\n          [id]\n        );\n      },\n    },\n    refreshTokens: {\n      async create(input) {\n        const result = await database.query<Record<string, unknown>>(\n          `INSERT INTO ${ATHENA_AUTH_TABLES.oauthRefreshTokens} (\n             id, token_hash, family_id, grant_id, client_id, user_id,\n             organization_id, resource, scopes, parent_token_id, expires_at\n           ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)\n           RETURNING *`,\n          [\n            input.id,\n            input.tokenHash,\n            input.familyId,\n            input.grantId,\n            input.clientId,\n            input.userId,\n            input.organizationId ?? null,\n            input.resource,\n            input.scopes,\n            input.parentTokenId ?? null,\n            input.expiresAt,\n          ]\n        );\n        return refreshToken(result.rows[0] as Record<string, unknown>);\n      },\n      async getByHash(tokenHash) {\n        const result = await database.query<Record<string, unknown>>(\n          `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthRefreshTokens}\n           WHERE token_hash = $1`,\n          [tokenHash]\n        );\n        return result.rows[0] ? refreshToken(result.rows[0]) : null;\n      },\n      async listFamily(familyId) {\n        const result = await database.query<Record<string, unknown>>(\n          `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthRefreshTokens}\n           WHERE family_id = $1\n           ORDER BY created_at ASC`,\n          [familyId]\n        );\n        return result.rows.map(refreshToken);\n      },\n      async revokeFamily(familyId, reason) {\n        await database.query(\n          `UPDATE ${ATHENA_AUTH_TABLES.oauthRefreshTokens}\n           SET status = 'revoked', revoked_at = NOW(), revoke_reason = $2\n           WHERE family_id = $1 AND status <> 'revoked'`,\n          [familyId, reason]\n        );\n      },\n      async rotate(input: RotateOAuthRefreshTokenInput) {\n        return transaction(async (tx): Promise<OAuthRefreshRotationResult> => {\n          const selected = await tx.query<Record<string, unknown>>(\n            `SELECT * FROM ${ATHENA_AUTH_TABLES.oauthRefreshTokens}\n             WHERE token_hash = $1\n             FOR UPDATE`,\n            [input.tokenHash]\n          );\n          const raw = selected.rows[0];\n          if (!raw) {\n            return { kind: \"missing\" };\n          }\n          const previous = refreshToken(raw);\n          if (previous.status !== \"active\") {\n            await tx.query(\n              `UPDATE ${ATHENA_AUTH_TABLES.oauthRefreshTokens}\n               SET status = 'reuse_detected', revoked_at = NOW(),\n                   revoke_reason = 'refresh_token_reuse'\n               WHERE family_id = $1`,\n              [previous.familyId]\n            );\n            return { familyId: previous.familyId, kind: \"replay\" };\n          }\n          if (\n            previous.clientId !== input.clientId ||\n            previous.resource !== input.resource ||\n            previous.expiresAt.getTime() <= Date.now()\n          ) {\n            return { kind: \"missing\" };\n          }\n          await tx.query(\n            `UPDATE ${ATHENA_AUTH_TABLES.oauthRefreshTokens}\n             SET status = 'rotated', used_at = NOW(), rotated_at = NOW()\n             WHERE token_hash = $1 AND status = 'active'`,\n            [input.tokenHash]\n          );\n          const inserted = await tx.query<Record<string, unknown>>(\n            `INSERT INTO ${ATHENA_AUTH_TABLES.oauthRefreshTokens} (\n               id, token_hash, family_id, grant_id, client_id, user_id,\n               organization_id, resource, scopes, parent_token_id, expires_at\n             ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)\n             RETURNING *`,\n            [\n              input.replacement.id,\n              input.replacement.tokenHash,\n              input.replacement.familyId,\n              input.replacement.grantId,\n              input.replacement.clientId,\n              input.replacement.userId,\n              input.replacement.organizationId ?? null,\n              input.replacement.resource,\n              input.replacement.scopes,\n              input.replacement.parentTokenId ?? null,\n              input.replacement.expiresAt,\n            ]\n          );\n          return {\n            kind: \"rotated\",\n            previous,\n            replacement: refreshToken(\n              inserted.rows[0] as Record<string, unknown>\n            ),\n          };\n        });\n      },\n    },\n  };\n}\n","import { decodeJwt, decodeProtectedHeader } from \"jose\";\nimport {\n  assertClientResource,\n  assertClientScopes,\n  assertRedirectUri,\n  assertS256CodeChallenge,\n  createAccessTokenClaims,\n  generateOpaqueSecret,\n  hashOAuthSecret,\n  intersectScopes,\n  isScopeSubset,\n  OAuthProtocolError,\n  openOAuthState,\n  parseProtocolScopes,\n  parseScopes,\n  sealOAuthState,\n  verifyCodeVerifier,\n} from \"../../authorization-server/index.ts\";\nimport type { IssuedOAuthTokenSet } from \"../../authorization-server/tokens.ts\";\nimport type {\n  OAuthAuthorizationGrant,\n  OAuthAuthorizationRequest,\n  OAuthClient,\n} from \"../../authorization-server/types.ts\";\nimport type { NormalizedAthenaAuthorizationServerConfig } from \"../../config.ts\";\nimport type { AthenaAuthMutationScope } from \"../../hooks/scope.ts\";\nimport type { AthenaTokenAuthority } from \"../athena-token-authority.ts\";\nimport type { AuthClock } from \"../clock.ts\";\nimport { systemAuthClock } from \"../clock.ts\";\nimport type { AthenaAuthStores } from \"../store-contract.ts\";\nimport type { TokenKeyStore } from \"../token-key-store.ts\";\nimport type { OAuthAuthorizationServerStores } from \"./store.ts\";\n\nexport interface OAuthUserEligibilityInput {\n  organizationId: string | null;\n  userId: string;\n}\n\nexport interface OAuthAuthorizationServerServiceOptions {\n  clock?: AuthClock;\n  config: NormalizedAthenaAuthorizationServerConfig;\n  issuer: string;\n  keyStore: TokenKeyStore;\n  signing: AthenaTokenAuthority;\n  stateSecret: string;\n  stores: OAuthAuthorizationServerStores;\n  userIsEligible: (\n    input: OAuthUserEligibilityInput,\n    stores?: AthenaAuthStores\n  ) => Promise<boolean> | boolean;\n}\n\nexport type OAuthTokenResponse = IssuedOAuthTokenSet;\n\nexport type OAuthRefreshMutationResult =\n  | {\n      kind: \"rotated\";\n      response: IssuedOAuthTokenSet;\n    }\n  | {\n      clientId: string;\n      familyId: string;\n      grantId: string;\n      kind: \"reuse_detected\";\n    };\n\nexport type OAuthRefreshMutationIntent = {\n  clientId: string;\n  familyId: string;\n  grantId: string;\n  kind: \"reuse_detected\" | \"rotated\";\n};\n\nfunction scopesIssuedForGrant(\n  requested: readonly string[],\n  grant: OAuthAuthorizationGrant\n): string[] {\n  const issued = intersectScopes(requested, grant.scopes);\n  if (issued.length === 0 && requested.length > 0) {\n    throw new OAuthProtocolError(\n      \"invalid_scope\",\n      \"The authorization grant no longer includes the requested scope.\"\n    );\n  }\n  return issued;\n}\n\nfunction activeGrant(grant: OAuthAuthorizationGrant, now: Date): boolean {\n  return (\n    grant.status === \"active\" &&\n    (grant.expiresAt === null || grant.expiresAt.getTime() > now.getTime()) &&\n    grant.revokedAt === null\n  );\n}\n\nexport class OAuthAuthorizationServerService {\n  constructor(\n    private readonly options: OAuthAuthorizationServerServiceOptions\n  ) {}\n\n  private now(): Date {\n    return (this.options.clock ?? systemAuthClock).now();\n  }\n\n  withStores(\n    stores: OAuthAuthorizationServerStores\n  ): OAuthAuthorizationServerService {\n    return new OAuthAuthorizationServerService({\n      ...this.options,\n      stores,\n    });\n  }\n\n  withMutationScope(\n    scope: AthenaAuthMutationScope\n  ): OAuthAuthorizationServerService {\n    if (!(scope.oauth && scope.tokenKeys)) {\n      throw new Error(\"OAuth mutation scope is not transaction-bound\");\n    }\n    return new OAuthAuthorizationServerService({\n      ...this.options,\n      keyStore: scope.tokenKeys,\n      signing: this.options.signing.withKeyStore(scope.tokenKeys),\n      stores: scope.oauth,\n      userIsEligible: (input) =>\n        this.options.userIsEligible(input, scope.stores),\n    });\n  }\n\n  async getClient(clientId: string): Promise<OAuthClient> {\n    const client = await this.options.stores.clients.get(clientId);\n    if (!client?.isActive) {\n      throw new OAuthProtocolError(\"invalid_client\", \"The client is invalid.\");\n    }\n    return client;\n  }\n\n  async disableClient(clientId: string): Promise<void> {\n    const client = await this.options.stores.clients.get(clientId);\n    if (!client) {\n      throw new OAuthProtocolError(\"invalid_client\", \"The client is invalid.\");\n    }\n    await this.options.stores.clients.disable(clientId);\n  }\n\n  validateResourceAndScopes(\n    client: OAuthClient,\n    resource: string,\n    scope: string | null | undefined\n  ): { resource: string; scopes: string[] } {\n    const normalizedResource = assertClientResource(client, resource);\n    const resourceConfig = this.options.config.resources[normalizedResource];\n    if (!resourceConfig) {\n      throw new OAuthProtocolError(\n        \"invalid_request\",\n        \"The requested resource is not configured.\"\n      );\n    }\n    const parsed = parseProtocolScopes(scope);\n    if (parsed.identity.length > 0) {\n      throw new OAuthProtocolError(\n        \"invalid_scope\",\n        \"OpenID identity scopes are not supported.\"\n      );\n    }\n    assertClientScopes(client, resourceConfig.scopes, parsed.resource);\n    return { resource: normalizedResource, scopes: parsed.resource };\n  }\n\n  validateAuthorizationRequest(input: {\n    clientId: string;\n    codeChallenge: string;\n    codeChallengeMethod: string;\n    redirectUri: string;\n    resource: string;\n    responseType: string;\n    scope: string | null | undefined;\n  }): Promise<{\n    client: OAuthClient;\n    resource: string;\n    scopes: string[];\n  }> {\n    return (async () => {\n      const client = await this.getClient(input.clientId);\n      if (input.responseType !== \"code\" || client.responseType !== \"code\") {\n        throw new OAuthProtocolError(\n          \"unsupported_response_type\",\n          \"Only the authorization code response type is supported.\"\n        );\n      }\n      assertRedirectUri({\n        clientType: client.clientType,\n        registeredUris: client.redirectUris,\n        requestedUri: input.redirectUri,\n      });\n      const { resource, scopes } = this.validateResourceAndScopes(\n        client,\n        input.resource,\n        input.scope\n      );\n      assertS256CodeChallenge(input.codeChallenge, input.codeChallengeMethod);\n      return { client, resource, scopes };\n    })();\n  }\n\n  async createAuthorizationRequest(input: {\n    clientId: string;\n    codeChallenge: string;\n    codeChallengeMethod: \"S256\";\n    redirectUri: string;\n    resource: string;\n    scope: string | null | undefined;\n    state: string;\n  }): Promise<OAuthAuthorizationRequest> {\n    const validated = await this.validateAuthorizationRequest({\n      ...input,\n      responseType: \"code\",\n    });\n    const id = crypto.randomUUID();\n    const requestHash = await hashOAuthSecret(\n      `oauth:request:${id}:${input.clientId}:${input.redirectUri}`\n    );\n    return this.options.stores.authorizationRequests.create({\n      clientId: validated.client.id,\n      codeChallenge: input.codeChallenge,\n      codeChallengeMethod: input.codeChallengeMethod,\n      expiresAt: new Date(\n        this.now().getTime() +\n          this.options.config.authorizationRequestTtlSeconds * 1000\n      ),\n      id,\n      redirectUri: input.redirectUri,\n      requestedScopes: validated.scopes,\n      requestHash,\n      resource: validated.resource,\n      stateCiphertext: await sealOAuthState(\n        input.state,\n        this.options.stateSecret\n      ),\n    });\n  }\n\n  async readAuthorizationState(\n    request: OAuthAuthorizationRequest\n  ): Promise<string> {\n    return openOAuthState(request.stateCiphertext, this.options.stateSecret);\n  }\n\n  async approveAuthorizationRequest(input: {\n    id: string;\n    organizationId: string | null;\n    scopes?: readonly string[];\n    userId: string;\n  }): Promise<{\n    code: string;\n    grant: OAuthAuthorizationGrant;\n    request: OAuthAuthorizationRequest;\n  }> {\n    const request = await this.options.stores.authorizationRequests.get(\n      input.id\n    );\n    if (request?.status !== \"pending\") {\n      throw new OAuthProtocolError(\n        \"invalid_request\",\n        \"The authorization interaction is invalid or expired.\"\n      );\n    }\n    if (\n      request.expiresAt.getTime() <= this.now().getTime() ||\n      request.userId !== null\n    ) {\n      throw new OAuthProtocolError(\n        \"invalid_request\",\n        \"The authorization interaction is invalid or expired.\"\n      );\n    }\n    const client = await this.getClient(request.clientId);\n    const eligible = await this.options.userIsEligible({\n      organizationId: input.organizationId,\n      userId: input.userId,\n    });\n    if (!eligible) {\n      throw new OAuthProtocolError(\n        \"access_denied\",\n        \"The user is not eligible for this organization.\"\n      );\n    }\n    const code = generateOpaqueSecret();\n    const completed = await this.options.stores.completeAuthorization({\n      clientId: client.id,\n      codeChallenge: request.codeChallenge,\n      codeChallengeMethod: request.codeChallengeMethod,\n      codeHash: await hashOAuthSecret(code),\n      expiresAt: new Date(\n        this.now().getTime() +\n          this.options.config.authorizationCodeTtlSeconds * 1000\n      ),\n      grantId: crypto.randomUUID(),\n      id: crypto.randomUUID(),\n      organizationId: input.organizationId,\n      redirectUri: request.redirectUri,\n      requestId: input.id,\n      resource: request.resource,\n      scopes: input.scopes ?? request.requestedScopes,\n      userId: input.userId,\n    });\n    return {\n      code,\n      grant: completed.grant,\n      request: completed.request,\n    };\n  }\n\n  async denyAuthorizationRequest(\n    id: string\n  ): Promise<OAuthAuthorizationRequest> {\n    const request = await this.options.stores.authorizationRequests.get(id);\n    if (!request) {\n      throw new OAuthProtocolError(\n        \"invalid_request\",\n        \"The authorization interaction is invalid or expired.\"\n      );\n    }\n    await this.options.stores.authorizationRequests.deny(id);\n    return request;\n  }\n\n  async exchangeAuthorizationCode(input: {\n    clientId: string;\n    code: string;\n    codeVerifier: string;\n    redirectUri: string;\n    resource: string;\n  }): Promise<OAuthTokenResponse> {\n    const client = await this.getClient(input.clientId);\n    const resource = assertClientResource(client, input.resource);\n    const codeHash = await hashOAuthSecret(input.code);\n    const candidate =\n      await this.options.stores.authorizationCodes.getByHash(codeHash);\n    if (\n      !candidate ||\n      candidate.clientId !== client.id ||\n      candidate.redirectUri !== input.redirectUri ||\n      candidate.resource !== resource ||\n      candidate.consumedAt ||\n      candidate.expiresAt.getTime() <= this.now().getTime()\n    ) {\n      throw new OAuthProtocolError(\n        \"invalid_grant\",\n        \"The authorization code is invalid or expired.\"\n      );\n    }\n    await verifyCodeVerifier(\n      input.codeVerifier,\n      candidate.codeChallenge,\n      candidate.codeChallengeMethod\n    );\n    const grant = await this.options.stores.grants.get(candidate.grantId);\n    if (!(grant && activeGrant(grant, this.now()))) {\n      throw new OAuthProtocolError(\n        \"invalid_grant\",\n        \"The authorization grant is no longer active.\"\n      );\n    }\n    if (\n      !(await this.options.userIsEligible({\n        organizationId: grant.organizationId,\n        userId: grant.userId,\n      }))\n    ) {\n      throw new OAuthProtocolError(\n        \"invalid_grant\",\n        \"The authorization grant is no longer eligible.\"\n      );\n    }\n    const consumed = await this.options.stores.authorizationCodes.consume({\n      clientId: client.id,\n      codeChallenge: candidate.codeChallenge,\n      codeHash,\n      redirectUri: input.redirectUri,\n      resource,\n    });\n    if (!consumed) {\n      throw new OAuthProtocolError(\n        \"invalid_grant\",\n        \"The authorization code is invalid or expired.\"\n      );\n    }\n    await this.options.stores.grants.touch(grant.id);\n    return this.issueInitialTokens({\n      client,\n      grant,\n      scopes: scopesIssuedForGrant(candidate.scopes, grant),\n    });\n  }\n\n  async refreshMutation(\n    input: {\n      clientId: string;\n      refreshToken: string;\n      resource: string;\n      scope?: string | null;\n    },\n    expectedKind?: OAuthRefreshMutationIntent[\"kind\"]\n  ): Promise<OAuthRefreshMutationResult> {\n    const client = await this.getClient(input.clientId);\n    const resource = assertClientResource(client, input.resource);\n    const tokenHash = await hashOAuthSecret(input.refreshToken);\n    const current =\n      await this.options.stores.refreshTokens.getByHash(tokenHash);\n    if (\n      !current ||\n      current.clientId !== client.id ||\n      current.resource !== resource\n    ) {\n      throw new OAuthProtocolError(\n        \"invalid_grant\",\n        \"The refresh token is invalid.\"\n      );\n    }\n    const requestedScopes =\n      input.scope == null ? [...current.scopes] : parseScopes(input.scope);\n    if (!isScopeSubset(requestedScopes, current.scopes)) {\n      throw new OAuthProtocolError(\n        \"invalid_scope\",\n        \"The requested scope exceeds the original grant.\"\n      );\n    }\n    const grant = await this.options.stores.grants.get(current.grantId);\n    if (\n      !(\n        grant &&\n        activeGrant(grant, this.now()) &&\n        (await this.options.userIsEligible({\n          organizationId: current.organizationId,\n          userId: current.userId,\n        }))\n      )\n    ) {\n      throw new OAuthProtocolError(\n        \"invalid_grant\",\n        \"The authorization grant is no longer active.\"\n      );\n    }\n    const scopes = scopesIssuedForGrant(requestedScopes, grant);\n    const replacementToken = generateOpaqueSecret();\n    const result = await this.options.stores.refreshTokens.rotate({\n      clientId: client.id,\n      replacement: {\n        clientId: client.id,\n        expiresAt: new Date(\n          this.now().getTime() +\n            this.options.config.refreshTokenTtlSeconds * 1000\n        ),\n        familyId: current.familyId,\n        grantId: current.grantId,\n        id: crypto.randomUUID(),\n        organizationId: current.organizationId,\n        parentTokenId: current.id,\n        resource,\n        scopes,\n        tokenHash: await hashOAuthSecret(replacementToken),\n        userId: current.userId,\n      },\n      resource,\n      tokenHash,\n    });\n    if (result.kind === \"replay\") {\n      if (expectedKind === \"rotated\") {\n        throw new OAuthProtocolError(\n          \"invalid_grant\",\n          \"The refresh token outcome changed during the request.\",\n          {\n            cause: {\n              actualKind: \"reuse_detected\",\n              clientId: client.id,\n              event: \"oauth.refresh.outcome_mismatch\",\n              familyId: result.familyId,\n              grantId: current.grantId,\n            },\n          }\n        );\n      }\n      return {\n        clientId: client.id,\n        familyId: result.familyId,\n        grantId: current.grantId,\n        kind: \"reuse_detected\",\n      };\n    }\n    if (result.kind !== \"rotated\") {\n      throw new OAuthProtocolError(\n        \"invalid_grant\",\n        \"The refresh token is invalid or expired.\"\n      );\n    }\n    if (expectedKind === \"reuse_detected\") {\n      throw new OAuthProtocolError(\n        \"invalid_grant\",\n        \"The refresh token outcome changed during the request.\",\n        {\n          cause: {\n            actualKind: \"rotated\",\n            clientId: client.id,\n            event: \"oauth.refresh.outcome_mismatch\",\n            familyId: current.familyId,\n            grantId: current.grantId,\n          },\n        }\n      );\n    }\n    const tokens = await this.issueAccessToken({\n      client,\n      familyId: current.familyId,\n      grant,\n      scopes,\n    });\n    return {\n      kind: \"rotated\",\n      response: {\n        ...tokens,\n        refreshToken: replacementToken,\n      },\n    };\n  }\n\n  async refreshMutationIntent(input: {\n    clientId: string;\n    refreshToken: string;\n    resource: string;\n  }): Promise<OAuthRefreshMutationIntent> {\n    const client = await this.getClient(input.clientId);\n    const resource = assertClientResource(client, input.resource);\n    const tokenHash = await hashOAuthSecret(input.refreshToken);\n    const current =\n      await this.options.stores.refreshTokens.getByHash(tokenHash);\n    if (\n      !current ||\n      current.clientId !== client.id ||\n      current.resource !== resource\n    ) {\n      throw new OAuthProtocolError(\n        \"invalid_grant\",\n        \"The refresh token is invalid.\"\n      );\n    }\n    return {\n      clientId: client.id,\n      familyId: current.familyId,\n      grantId: current.grantId,\n      kind: current.status === \"active\" ? \"rotated\" : \"reuse_detected\",\n    };\n  }\n\n  async refresh(input: {\n    clientId: string;\n    refreshToken: string;\n    resource: string;\n    scope?: string | null;\n  }): Promise<OAuthTokenResponse> {\n    const result = await this.refreshMutation(input);\n    if (result.kind === \"reuse_detected\") {\n      throw new OAuthProtocolError(\n        \"invalid_grant\",\n        \"The refresh token has been reused.\",\n        {\n          cause: {\n            clientId: result.clientId,\n            event: \"oauth.refresh.reuse_detected\",\n            familyId: result.familyId,\n            grantId: result.grantId,\n          },\n        }\n      );\n    }\n    return result.response;\n  }\n\n  async revoke(input: {\n    clientId: string;\n    token: string;\n    tokenTypeHint?: \"access_token\" | \"refresh_token\";\n  }): Promise<void> {\n    const hash = await hashOAuthSecret(input.token);\n    const refresh = await this.options.stores.refreshTokens.getByHash(hash);\n    if (refresh?.clientId === input.clientId) {\n      await this.options.stores.refreshTokens.revokeFamily(\n        refresh.familyId,\n        \"client_revocation\"\n      );\n      return;\n    }\n    try {\n      const decoded = decodeJwt(input.token);\n      if (\n        typeof decoded.aud !== \"string\" ||\n        typeof decoded.client_id !== \"string\"\n      ) {\n        return;\n      }\n      const header = decodeProtectedHeader(input.token);\n      if (header.alg !== \"ES256\" || typeof header.kid !== \"string\") {\n        return;\n      }\n      const key = (await this.options.keyStore.listVerificationKeys()).find(\n        (entry) => entry.kid === header.kid\n      );\n      if (!key) {\n        return;\n      }\n      const claims = await this.options.signing.verifyAthenaToken({\n        audience: decoded.aud,\n        token: input.token,\n      });\n      if (\n        typeof claims.jti !== \"string\" ||\n        typeof claims.exp !== \"number\" ||\n        typeof claims.athena_grant_id !== \"string\" ||\n        claims.client_id !== input.clientId\n      ) {\n        return;\n      }\n      const grant = await this.options.stores.grants.get(\n        claims.athena_grant_id\n      );\n      if (!grant || grant.clientId !== input.clientId) {\n        return;\n      }\n      await this.options.stores.accessTokens.revoke({\n        expiresAt: new Date(claims.exp * 1000),\n        grantId: grant.id,\n        jti: claims.jti,\n        reason: \"client_revocation\",\n        revokedAt: this.now(),\n      });\n    } catch {\n      // RFC 7009 intentionally does not disclose whether a token was known.\n    }\n  }\n\n  async listGrants(userId: string): Promise<\n    Array<{\n      client: OAuthClient | null;\n      grant: OAuthAuthorizationGrant;\n    }>\n  > {\n    const grants = await this.options.stores.grants.listForUser(userId);\n    return Promise.all(\n      grants.map(async (grant) => ({\n        client: await this.options.stores.clients.get(grant.clientId),\n        grant,\n      }))\n    );\n  }\n\n  async revokeGrant(input: { grantId: string; userId: string }): Promise<void> {\n    const grant = await this.options.stores.grants.get(input.grantId);\n    if (!grant || grant.userId !== input.userId) {\n      throw new OAuthProtocolError(\n        \"invalid_request\",\n        \"The authorization grant is invalid.\"\n      );\n    }\n    await this.options.stores.grants.revoke({\n      grantId: grant.id,\n      reason: \"user_revocation\",\n      revokedBy: input.userId,\n    });\n  }\n\n  private async issueInitialTokens(input: {\n    client: OAuthClient;\n    grant: OAuthAuthorizationGrant;\n    scopes: readonly string[];\n  }): Promise<OAuthTokenResponse> {\n    const familyId = this.options.config.issueRefreshTokens\n      ? crypto.randomUUID()\n      : undefined;\n    const response = await this.issueAccessToken({\n      ...input,\n      ...(familyId ? { familyId } : {}),\n    });\n    if (!familyId) {\n      return response;\n    }\n    const refreshToken = generateOpaqueSecret();\n    await this.options.stores.refreshTokens.create({\n      clientId: input.client.id,\n      expiresAt: new Date(\n        this.now().getTime() + this.options.config.refreshTokenTtlSeconds * 1000\n      ),\n      familyId,\n      grantId: input.grant.id,\n      id: crypto.randomUUID(),\n      organizationId: input.grant.organizationId,\n      resource: input.grant.resource,\n      scopes: input.scopes,\n      tokenHash: await hashOAuthSecret(refreshToken),\n      userId: input.grant.userId,\n    });\n    return { ...response, refreshToken };\n  }\n\n  private async issueAccessToken(input: {\n    client: OAuthClient;\n    familyId?: string;\n    grant: OAuthAuthorizationGrant;\n    scopes: readonly string[];\n  }): Promise<IssuedOAuthTokenSet> {\n    const scopes = scopesIssuedForGrant(input.scopes, input.grant);\n    const claims = createAccessTokenClaims({\n      clientId: input.client.id,\n      familyId: input.familyId,\n      grantId: input.grant.id,\n      issuer: this.options.issuer,\n      now: this.now(),\n      organizationId: input.grant.organizationId,\n      resource: input.grant.resource,\n      scopes,\n      subject: input.grant.userId,\n      ttlSeconds: this.options.config.accessTokenTtlSeconds,\n    });\n    const accessToken = await this.options.signing.signOAuthAccessToken(claims);\n    return {\n      accessToken,\n      expiresIn: this.options.config.accessTokenTtlSeconds,\n      familyId: input.familyId,\n      grantId: input.grant.id,\n      scopes,\n    };\n  }\n}\n","import { hashAuthBridgeCode } from \"../../bridge/code.ts\";\nimport type { AuthBridgeCodeStore } from \"../../bridge/store.ts\";\nimport type {\n  AuthBridgeCodeRecord,\n  AuthBridgeConsumeReason,\n  ConsumeAuthBridgeCodeInput,\n  ConsumedBridgeCode,\n  IssueAuthBridgeCodeInput,\n} from \"../../bridge/types.ts\";\n\ntype MemoryBridgeRow = AuthBridgeCodeRecord;\n\nfunction cloneRecord(row: MemoryBridgeRow): AuthBridgeCodeRecord {\n  return {\n    codeHash: row.codeHash,\n    consumedAt: row.consumedAt ? new Date(row.consumedAt) : null,\n    consumeReason: row.consumeReason,\n    createdAt: new Date(row.createdAt),\n    destinationOrigin: row.destinationOrigin,\n    expiresAt: new Date(row.expiresAt),\n    id: row.id,\n    organizationId: row.organizationId,\n    redirectPath: row.redirectPath,\n    sessionId: row.sessionId,\n    userId: row.userId,\n  };\n}\n\nfunction isOutstanding(row: MemoryBridgeRow, now: Date): boolean {\n  return row.consumedAt === null && row.expiresAt.getTime() > now.getTime();\n}\n\nexport function createMemoryAuthBridgeCodeStore(): AuthBridgeCodeStore {\n  const rows = new Map<string, MemoryBridgeRow>();\n  let chain: Promise<unknown> = Promise.resolve();\n\n  const withLock = <T>(fn: () => Promise<T>): Promise<T> => {\n    const run = chain.then(fn, fn);\n    chain = run.then(\n      () => undefined,\n      () => undefined\n    );\n    return run;\n  };\n\n  return {\n    consume(\n      input: ConsumeAuthBridgeCodeInput\n    ): Promise<ConsumedBridgeCode | null> {\n      return withLock(async () => {\n        const now = new Date();\n        const codeHash = await hashAuthBridgeCode(input.code);\n        const row = rows.get(codeHash);\n        if (!(row && isOutstanding(row, now))) {\n          return null;\n        }\n        if (row.destinationOrigin !== input.destinationOrigin) {\n          row.consumedAt = now;\n          row.consumeReason = \"destination_mismatch\";\n          return null;\n        }\n        row.consumedAt = now;\n        row.consumeReason = \"consumed\";\n        return {\n          consumedAt: new Date(now),\n          destinationOrigin: row.destinationOrigin,\n          organizationId: row.organizationId,\n          redirectPath: row.redirectPath,\n          sessionId: row.sessionId,\n          userId: row.userId,\n        };\n      });\n    },\n\n    async deleteExpired(now = new Date()): Promise<number> {\n      let count = 0;\n      for (const [hash, row] of rows) {\n        if (row.expiresAt.getTime() > now.getTime()) {\n          continue;\n        }\n        rows.delete(hash);\n        count += 1;\n      }\n      return count;\n    },\n    async issue(\n      input: IssueAuthBridgeCodeInput\n    ): Promise<AuthBridgeCodeRecord> {\n      const record: MemoryBridgeRow = {\n        codeHash: input.codeHash,\n        consumedAt: null,\n        consumeReason: null,\n        createdAt: new Date(),\n        destinationOrigin: input.destinationOrigin,\n        expiresAt: new Date(input.expiresAt),\n        id: input.id ?? crypto.randomUUID(),\n        organizationId: input.organizationId ?? null,\n        redirectPath: input.redirectPath,\n        sessionId: input.sessionId,\n        userId: input.userId,\n      };\n      rows.set(record.codeHash, record);\n      return cloneRecord(record);\n    },\n\n    async revokeForSession(\n      sessionId: string,\n      _reason?: string\n    ): Promise<number> {\n      const now = new Date();\n      const consumeReason: AuthBridgeConsumeReason = \"session_revoked\";\n      let count = 0;\n      for (const row of rows.values()) {\n        if (row.sessionId !== sessionId || !isOutstanding(row, now)) {\n          continue;\n        }\n        row.consumedAt = now;\n        row.consumeReason = consumeReason;\n        count += 1;\n      }\n      return count;\n    },\n  };\n}\n","import { hashAuthBridgeCode } from \"../../bridge/code.ts\";\nimport type { AuthBridgeCodeStore } from \"../../bridge/store.ts\";\nimport type {\n  AuthBridgeCodeRecord,\n  AuthBridgeConsumeReason,\n  ConsumeAuthBridgeCodeInput,\n  ConsumedBridgeCode,\n  IssueAuthBridgeCodeInput,\n} from \"../../bridge/types.ts\";\nimport { ATHENA_AUTH_TABLES } from \"../../contract/index.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\n\nconst TABLE = ATHENA_AUTH_TABLES.authBridgeCodes;\n\nfunction asDate(value: unknown): Date {\n  if (value instanceof Date) {\n    return value;\n  }\n  return new Date(String(value));\n}\n\nfunction asNullableDate(value: unknown): Date | null {\n  if (value === null || value === undefined) {\n    return null;\n  }\n  return asDate(value);\n}\n\nfunction hydrate(row: Record<string, unknown>): AuthBridgeCodeRecord {\n  const consumeReason = row.consume_reason;\n  return {\n    codeHash: String(row.code_hash),\n    consumedAt: asNullableDate(row.consumed_at),\n    consumeReason:\n      consumeReason === \"consumed\" ||\n      consumeReason === \"destination_mismatch\" ||\n      consumeReason === \"session_revoked\"\n        ? consumeReason\n        : null,\n    createdAt: asDate(row.created_at),\n    destinationOrigin: String(row.destination_origin),\n    expiresAt: asDate(row.expires_at),\n    id: String(row.id),\n    organizationId:\n      typeof row.organization_id === \"string\" ? row.organization_id : null,\n    redirectPath: String(row.redirect_path),\n    sessionId: String(row.session_id),\n    userId: String(row.user_id),\n  };\n}\n\nexport function createPostgresAuthBridgeCodeStore(\n  database: AthenaAuthDatabase\n): AuthBridgeCodeStore {\n  return {\n    async consume(\n      input: ConsumeAuthBridgeCodeInput\n    ): Promise<ConsumedBridgeCode | null> {\n      const codeHash = await hashAuthBridgeCode(input.code);\n      return database.transaction(async (tx) => {\n        const selected = await tx.query<Record<string, unknown>>(\n          `SELECT * FROM ${TABLE} WHERE code_hash = $1 FOR UPDATE`,\n          [codeHash]\n        );\n        const raw = selected.rows[0];\n        if (!raw) {\n          return null;\n        }\n        const row = hydrate(raw);\n        const now = new Date();\n        if (\n          row.consumedAt !== null ||\n          row.expiresAt.getTime() <= now.getTime()\n        ) {\n          return null;\n        }\n        const reason: AuthBridgeConsumeReason =\n          row.destinationOrigin === input.destinationOrigin\n            ? \"consumed\"\n            : \"destination_mismatch\";\n        await tx.query(\n          `UPDATE ${TABLE}\n\t\t\t\t\t SET consumed_at = $2, consume_reason = $3\n\t\t\t\t\t WHERE code_hash = $1 AND consumed_at IS NULL`,\n          [codeHash, now, reason]\n        );\n        if (reason === \"destination_mismatch\") {\n          return null;\n        }\n        return {\n          consumedAt: now,\n          destinationOrigin: row.destinationOrigin,\n          organizationId: row.organizationId,\n          redirectPath: row.redirectPath,\n          sessionId: row.sessionId,\n          userId: row.userId,\n        };\n      });\n    },\n\n    async deleteExpired(now = new Date()): Promise<number> {\n      const result = await database.query(\n        `DELETE FROM ${TABLE} WHERE expires_at <= $1`,\n        [now]\n      );\n      return result.rowCount;\n    },\n    async issue(\n      input: IssueAuthBridgeCodeInput\n    ): Promise<AuthBridgeCodeRecord> {\n      const id = input.id ?? crypto.randomUUID();\n      const createdAt = new Date();\n      await database.query(\n        `INSERT INTO ${TABLE} (\n\t\t\t\t\tid, code_hash, session_id, user_id, organization_id,\n\t\t\t\t\tdestination_origin, redirect_path, expires_at, created_at\n\t\t\t\t) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`,\n        [\n          id,\n          input.codeHash,\n          input.sessionId,\n          input.userId,\n          input.organizationId ?? null,\n          input.destinationOrigin,\n          input.redirectPath,\n          input.expiresAt,\n          createdAt,\n        ]\n      );\n      return {\n        codeHash: input.codeHash,\n        consumedAt: null,\n        consumeReason: null,\n        createdAt,\n        destinationOrigin: input.destinationOrigin,\n        expiresAt: new Date(input.expiresAt),\n        id,\n        organizationId: input.organizationId ?? null,\n        redirectPath: input.redirectPath,\n        sessionId: input.sessionId,\n        userId: input.userId,\n      };\n    },\n\n    async revokeForSession(\n      sessionId: string,\n      _reason?: string\n    ): Promise<number> {\n      const result = await database.query(\n        `UPDATE ${TABLE}\n\t\t\t\t SET consumed_at = NOW(), consume_reason = $2\n\t\t\t\t WHERE session_id = $1\n\t\t\t\t   AND consumed_at IS NULL\n\t\t\t\t   AND expires_at > NOW()`,\n        [sessionId, \"session_revoked\"]\n      );\n      return result.rowCount;\n    },\n  };\n}\n","import { ATHENA_AUTH_TABLES } from \"../../contract/index.ts\";\nimport type {\n  AthenaAuthEmailFailureRow,\n  AthenaAuthEmailRecordRow,\n  AthenaAuthEmailTemplateRow,\n} from \"../../email/contract.ts\";\nimport type { AthenaAuthEmailEventDefinition } from \"../../email/events.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\nimport type { AthenaAuthEmailStore } from \"./store.ts\";\n\nconst TEMPLATE_COLUMNS =\n  \"id, template_key, event_type, locale, subject_template, text_template, html_template, variables, variable_bindings, attachments, attachment_failure_mode, is_active, metadata, created_at, updated_at\";\nconst FAILURE_COLUMNS =\n  \"id, user_id, recipient_email, flow, provider, error_message, error_code, template_id, template_key, metadata, resolved, resolution_note, created_at, updated_at\";\nconst EMAIL_COLUMNS =\n  \"id, recipient_email, subject, from_address, from_name, text_body, html_body, provider, flow, metadata, created_at, updated_at\";\nconst EVENT_COLUMNS =\n  \"event_type, category, description, default_template_key, required_variables, optional_variables, is_active, is_system, metadata, created_at, updated_at\";\n\nfunction asJson(value: unknown, fallback: unknown): unknown {\n  if (value === undefined || value === null) {\n    return fallback;\n  }\n  if (typeof value === \"string\") {\n    try {\n      return JSON.parse(value);\n    } catch {\n      return fallback;\n    }\n  }\n  return value;\n}\n\nfunction asIso(value: unknown): string {\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n  if (typeof value === \"string\" && value.length > 0) {\n    return value;\n  }\n  return new Date().toISOString();\n}\n\nfunction hydrateTemplate(\n  row: Record<string, unknown> | undefined\n): AthenaAuthEmailTemplateRow | undefined {\n  if (!row) {\n    return;\n  }\n  return {\n    attachment_failure_mode:\n      row.attachment_failure_mode === \"skip\" ? \"skip\" : \"fail\",\n    attachments: asJson(\n      row.attachments,\n      []\n    ) as AthenaAuthEmailTemplateRow[\"attachments\"],\n    created_at: asIso(row.created_at),\n    event_type: typeof row.event_type === \"string\" ? row.event_type : null,\n    html_template:\n      typeof row.html_template === \"string\" ? row.html_template : null,\n    id: String(row.id),\n    is_active: row.is_active !== false,\n    locale: typeof row.locale === \"string\" ? row.locale : \"en\",\n    metadata: asJson(row.metadata, {}) as Record<string, unknown>,\n    subject_template: String(row.subject_template ?? \"\"),\n    template_key: String(row.template_key),\n    text_template:\n      typeof row.text_template === \"string\" ? row.text_template : null,\n    updated_at: asIso(row.updated_at),\n    variable_bindings: asJson(\n      row.variable_bindings,\n      []\n    ) as AthenaAuthEmailTemplateRow[\"variable_bindings\"],\n    variables: asJson(row.variables, []) as string[],\n  };\n}\n\nfunction hydrateFailure(\n  row: Record<string, unknown> | undefined\n): AthenaAuthEmailFailureRow | undefined {\n  if (!row) {\n    return;\n  }\n  return {\n    created_at: asIso(row.created_at),\n    error_code: typeof row.error_code === \"string\" ? row.error_code : undefined,\n    error_message: String(row.error_message ?? \"\"),\n    flow: String(row.flow ?? \"\"),\n    id: String(row.id),\n    metadata: asJson(row.metadata, {}) as Record<string, unknown>,\n    provider: typeof row.provider === \"string\" ? row.provider : null,\n    recipient_email: String(row.recipient_email ?? \"\"),\n    resolution_note:\n      typeof row.resolution_note === \"string\" ? row.resolution_note : null,\n    resolved: row.resolved === true,\n    template_id: typeof row.template_id === \"string\" ? row.template_id : null,\n    template_key:\n      typeof row.template_key === \"string\" ? row.template_key : null,\n    updated_at: asIso(row.updated_at),\n  };\n}\n\nfunction hydrateEmail(\n  row: Record<string, unknown> | undefined\n): AthenaAuthEmailRecordRow | undefined {\n  if (!row) {\n    return;\n  }\n  return {\n    created_at: asIso(row.created_at),\n    flow: typeof row.flow === \"string\" ? row.flow : null,\n    from_address: String(row.from_address ?? \"\"),\n    from_name: typeof row.from_name === \"string\" ? row.from_name : null,\n    html_body: typeof row.html_body === \"string\" ? row.html_body : null,\n    id: String(row.id),\n    metadata: asJson(row.metadata, {}) as Record<string, unknown>,\n    provider: String(row.provider ?? \"\"),\n    recipient_email: String(row.recipient_email ?? \"\"),\n    subject: String(row.subject ?? \"\"),\n    text_body: typeof row.text_body === \"string\" ? row.text_body : null,\n    updated_at: asIso(row.updated_at),\n  };\n}\n\nfunction hydrateEventType(\n  row: Record<string, unknown>\n): AthenaAuthEmailEventDefinition {\n  return {\n    category: String(row.category ?? \"\"),\n    default_template_key:\n      typeof row.default_template_key === \"string\"\n        ? row.default_template_key\n        : \"\",\n    description: String(row.description ?? \"\"),\n    event_type: String(row.event_type ?? \"\"),\n    is_active: row.is_active !== false,\n    is_system: row.is_system !== false,\n    optional_variables: asJson(row.optional_variables, []) as string[],\n    required_variables: asJson(row.required_variables, []) as string[],\n  };\n}\n\nexport class PostgresAuthEmailStore implements AthenaAuthEmailStore {\n  constructor(private readonly db: AthenaAuthDatabase) {}\n\n  async listEventTypes(): Promise<AthenaAuthEmailEventDefinition[]> {\n    const result = await this.db.query<Record<string, unknown>>(\n      `SELECT ${EVENT_COLUMNS} FROM ${ATHENA_AUTH_TABLES.emailEventTypes} ORDER BY event_type`\n    );\n    return result.rows.map((row) => hydrateEventType(row));\n  }\n\n  async listTemplates(filters?: {\n    event_type?: string;\n    is_active?: boolean;\n    locale?: string;\n    template_key?: string;\n  }): Promise<AthenaAuthEmailTemplateRow[]> {\n    const clauses: string[] = [];\n    const values: unknown[] = [];\n    const push = (clause: string, value: unknown) => {\n      values.push(value);\n      clauses.push(`${clause} $${values.length}`);\n    };\n    if (filters?.template_key) {\n      push(\"template_key =\", filters.template_key);\n    }\n    if (filters?.event_type) {\n      push(\"event_type =\", filters.event_type);\n    }\n    if (filters?.locale) {\n      push(\"locale =\", filters.locale);\n    }\n    if (filters?.is_active !== undefined) {\n      push(\"is_active =\", filters.is_active);\n    }\n    const where = clauses.length > 0 ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n    const result = await this.db.query<Record<string, unknown>>(\n      `SELECT ${TEMPLATE_COLUMNS} FROM ${ATHENA_AUTH_TABLES.emailTemplates} ${where} ORDER BY created_at DESC`,\n      values\n    );\n    return result.rows.flatMap((row) => {\n      const hydrated = hydrateTemplate(row);\n      return hydrated ? [hydrated] : [];\n    });\n  }\n\n  async getTemplate(\n    id: string\n  ): Promise<AthenaAuthEmailTemplateRow | undefined> {\n    const result = await this.db.query<Record<string, unknown>>(\n      `SELECT ${TEMPLATE_COLUMNS} FROM ${ATHENA_AUTH_TABLES.emailTemplates} WHERE id = $1`,\n      [id]\n    );\n    return hydrateTemplate(result.rows[0]);\n  }\n\n  async createTemplate(\n    row: AthenaAuthEmailTemplateRow\n  ): Promise<AthenaAuthEmailTemplateRow> {\n    const result = await this.db.query<Record<string, unknown>>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.emailTemplates} (\n        id, template_key, event_type, locale, subject_template, text_template, html_template,\n        variables, variable_bindings, attachments, attachment_failure_mode, is_active, metadata,\n        created_at, updated_at\n      ) VALUES (\n        $1, $2, $3, $4, $5, $6, $7, $8::jsonb, $9::jsonb, $10::jsonb, $11, $12, $13::jsonb, $14, $15\n      ) RETURNING ${TEMPLATE_COLUMNS}`,\n      [\n        row.id,\n        row.template_key,\n        row.event_type,\n        row.locale,\n        row.subject_template,\n        row.text_template,\n        row.html_template,\n        JSON.stringify(row.variables),\n        JSON.stringify(row.variable_bindings),\n        JSON.stringify(row.attachments),\n        row.attachment_failure_mode,\n        row.is_active,\n        JSON.stringify(row.metadata),\n        row.created_at,\n        row.updated_at,\n      ]\n    );\n    const created = hydrateTemplate(result.rows[0]);\n    if (!created) {\n      throw new Error(\"Failed to create email template\");\n    }\n    return created;\n  }\n\n  async updateTemplate(\n    id: string,\n    patch: Partial<AthenaAuthEmailTemplateRow>\n  ): Promise<AthenaAuthEmailTemplateRow | undefined> {\n    const existing = await this.getTemplate(id);\n    if (!existing) {\n      return;\n    }\n    const next = { ...existing, ...patch, id };\n    const result = await this.db.query<Record<string, unknown>>(\n      `UPDATE ${ATHENA_AUTH_TABLES.emailTemplates} SET\n        template_key = $2, event_type = $3, locale = $4, subject_template = $5,\n        text_template = $6, html_template = $7, variables = $8::jsonb,\n        variable_bindings = $9::jsonb, attachments = $10::jsonb,\n        attachment_failure_mode = $11, is_active = $12, metadata = $13::jsonb, updated_at = $14\n      WHERE id = $1\n      RETURNING ${TEMPLATE_COLUMNS}`,\n      [\n        id,\n        next.template_key,\n        next.event_type,\n        next.locale,\n        next.subject_template,\n        next.text_template,\n        next.html_template,\n        JSON.stringify(next.variables),\n        JSON.stringify(next.variable_bindings),\n        JSON.stringify(next.attachments),\n        next.attachment_failure_mode,\n        next.is_active,\n        JSON.stringify(next.metadata),\n        new Date().toISOString(),\n      ]\n    );\n    return hydrateTemplate(result.rows[0]);\n  }\n\n  async deleteTemplate(id: string): Promise<boolean> {\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.emailTemplates} WHERE id = $1`,\n      [id]\n    );\n    return result.rowCount > 0;\n  }\n\n  async listFailures(): Promise<AthenaAuthEmailFailureRow[]> {\n    const result = await this.db.query<Record<string, unknown>>(\n      `SELECT ${FAILURE_COLUMNS} FROM ${ATHENA_AUTH_TABLES.emailSendFailures} ORDER BY created_at DESC`\n    );\n    return result.rows.flatMap((row) => {\n      const hydrated = hydrateFailure(row);\n      return hydrated ? [hydrated] : [];\n    });\n  }\n\n  async getFailure(id: string): Promise<AthenaAuthEmailFailureRow | undefined> {\n    const result = await this.db.query<Record<string, unknown>>(\n      `SELECT ${FAILURE_COLUMNS} FROM ${ATHENA_AUTH_TABLES.emailSendFailures} WHERE id = $1`,\n      [id]\n    );\n    return hydrateFailure(result.rows[0]);\n  }\n\n  async createFailure(\n    row: AthenaAuthEmailFailureRow\n  ): Promise<AthenaAuthEmailFailureRow> {\n    const result = await this.db.query<Record<string, unknown>>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.emailSendFailures} (\n        id, recipient_email, flow, provider, error_message, error_code, template_id, template_key,\n        metadata, resolved, resolution_note, created_at, updated_at\n      ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9::jsonb, $10, $11, $12, $13)\n      RETURNING ${FAILURE_COLUMNS}`,\n      [\n        row.id,\n        row.recipient_email,\n        row.flow,\n        row.provider ?? null,\n        row.error_message,\n        row.error_code ?? null,\n        row.template_id ?? null,\n        row.template_key ?? null,\n        JSON.stringify(row.metadata),\n        row.resolved,\n        row.resolution_note ?? null,\n        row.created_at,\n        row.updated_at,\n      ]\n    );\n    const created = hydrateFailure(result.rows[0]);\n    if (!created) {\n      throw new Error(\"Failed to create email failure\");\n    }\n    return created;\n  }\n\n  async updateFailure(\n    id: string,\n    patch: Partial<AthenaAuthEmailFailureRow>\n  ): Promise<AthenaAuthEmailFailureRow | undefined> {\n    const existing = await this.getFailure(id);\n    if (!existing) {\n      return;\n    }\n    const next = { ...existing, ...patch, id };\n    const result = await this.db.query<Record<string, unknown>>(\n      `UPDATE ${ATHENA_AUTH_TABLES.emailSendFailures} SET\n        resolved = $2, resolution_note = $3, updated_at = $4\n      WHERE id = $1\n      RETURNING ${FAILURE_COLUMNS}`,\n      [\n        id,\n        next.resolved,\n        next.resolution_note ?? null,\n        new Date().toISOString(),\n      ]\n    );\n    return hydrateFailure(result.rows[0]);\n  }\n\n  async deleteFailure(id: string): Promise<boolean> {\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.emailSendFailures} WHERE id = $1`,\n      [id]\n    );\n    return result.rowCount > 0;\n  }\n\n  async listEmails(): Promise<AthenaAuthEmailRecordRow[]> {\n    const result = await this.db.query<Record<string, unknown>>(\n      `SELECT ${EMAIL_COLUMNS} FROM ${ATHENA_AUTH_TABLES.emails} ORDER BY created_at DESC`\n    );\n    return result.rows.flatMap((row) => {\n      const hydrated = hydrateEmail(row);\n      return hydrated ? [hydrated] : [];\n    });\n  }\n\n  async getEmail(id: string): Promise<AthenaAuthEmailRecordRow | undefined> {\n    const result = await this.db.query<Record<string, unknown>>(\n      `SELECT ${EMAIL_COLUMNS} FROM ${ATHENA_AUTH_TABLES.emails} WHERE id = $1`,\n      [id]\n    );\n    return hydrateEmail(result.rows[0]);\n  }\n\n  async createEmail(\n    row: AthenaAuthEmailRecordRow\n  ): Promise<AthenaAuthEmailRecordRow> {\n    const result = await this.db.query<Record<string, unknown>>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.emails} (\n        id, recipient_email, subject, from_address, from_name, text_body, html_body,\n        provider, flow, metadata, created_at, updated_at\n      ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10::jsonb, $11, $12)\n      RETURNING ${EMAIL_COLUMNS}`,\n      [\n        row.id,\n        row.recipient_email,\n        row.subject,\n        row.from_address,\n        row.from_name,\n        row.text_body,\n        row.html_body,\n        row.provider,\n        row.flow,\n        JSON.stringify(row.metadata),\n        row.created_at,\n        row.updated_at,\n      ]\n    );\n    const created = hydrateEmail(result.rows[0]);\n    if (!created) {\n      throw new Error(\"Failed to create email record\");\n    }\n    return created;\n  }\n\n  async updateEmail(\n    id: string,\n    patch: Partial<AthenaAuthEmailRecordRow>\n  ): Promise<AthenaAuthEmailRecordRow | undefined> {\n    const existing = await this.getEmail(id);\n    if (!existing) {\n      return;\n    }\n    const next = { ...existing, ...patch, id };\n    const stamp = next.updated_at || new Date().toISOString();\n    const result = await this.db.query<Record<string, unknown>>(\n      `UPDATE ${ATHENA_AUTH_TABLES.emails} SET\n        subject = $2,\n        from_address = $3,\n        from_name = $4,\n        provider = $5,\n        metadata = $6::jsonb,\n        updated_at = $7\n      WHERE id = $1 RETURNING ${EMAIL_COLUMNS}`,\n      [\n        id,\n        next.subject,\n        next.from_address,\n        next.from_name,\n        next.provider,\n        JSON.stringify(next.metadata ?? {}),\n        stamp,\n      ]\n    );\n    return hydrateEmail(result.rows[0]);\n  }\n\n  async deleteEmail(id: string): Promise<boolean> {\n    const result = await this.db.query(\n      `DELETE FROM ${ATHENA_AUTH_TABLES.emails} WHERE id = $1`,\n      [id]\n    );\n    return result.rowCount > 0;\n  }\n}\n","import type {\n  AthenaAuthEmailFailureRow,\n  AthenaAuthEmailRecordRow,\n  AthenaAuthEmailTemplateRow,\n} from \"../../email/contract.ts\";\nimport {\n  type AthenaAuthEmailEventDefinition,\n  AUTH_EMAIL_EVENT_CATALOG,\n} from \"../../email/events.ts\";\n\nexport interface AthenaAuthEmailStore {\n  createEmail(row: AthenaAuthEmailRecordRow): Promise<AthenaAuthEmailRecordRow>;\n  createFailure(\n    row: AthenaAuthEmailFailureRow\n  ): Promise<AthenaAuthEmailFailureRow>;\n  createTemplate(\n    row: AthenaAuthEmailTemplateRow\n  ): Promise<AthenaAuthEmailTemplateRow>;\n  deleteEmail(id: string): Promise<boolean>;\n  deleteFailure(id: string): Promise<boolean>;\n  deleteTemplate(id: string): Promise<boolean>;\n  getEmail(id: string): Promise<AthenaAuthEmailRecordRow | undefined>;\n  getFailure(id: string): Promise<AthenaAuthEmailFailureRow | undefined>;\n  getTemplate(id: string): Promise<AthenaAuthEmailTemplateRow | undefined>;\n  listEmails(): Promise<AthenaAuthEmailRecordRow[]>;\n  listEventTypes(): Promise<AthenaAuthEmailEventDefinition[]>;\n  listFailures(): Promise<AthenaAuthEmailFailureRow[]>;\n  listTemplates(filters?: {\n    event_type?: string;\n    is_active?: boolean;\n    locale?: string;\n    template_key?: string;\n  }): Promise<AthenaAuthEmailTemplateRow[]>;\n  updateEmail(\n    id: string,\n    patch: Partial<AthenaAuthEmailRecordRow>\n  ): Promise<AthenaAuthEmailRecordRow | undefined>;\n  updateFailure(\n    id: string,\n    patch: Partial<AthenaAuthEmailFailureRow>\n  ): Promise<AthenaAuthEmailFailureRow | undefined>;\n  updateTemplate(\n    id: string,\n    patch: Partial<AthenaAuthEmailTemplateRow>\n  ): Promise<AthenaAuthEmailTemplateRow | undefined>;\n}\n\nfunction clone<T>(value: T): T {\n  return structuredClone(value);\n}\n\nexport class MemoryAuthEmailStore implements AthenaAuthEmailStore {\n  readonly emails = new Map<string, AthenaAuthEmailRecordRow>();\n  readonly failures = new Map<string, AthenaAuthEmailFailureRow>();\n  readonly templates = new Map<string, AthenaAuthEmailTemplateRow>();\n\n  async listEventTypes(): Promise<AthenaAuthEmailEventDefinition[]> {\n    return [...AUTH_EMAIL_EVENT_CATALOG];\n  }\n\n  async listTemplates(filters?: {\n    event_type?: string;\n    is_active?: boolean;\n    locale?: string;\n    template_key?: string;\n  }): Promise<AthenaAuthEmailTemplateRow[]> {\n    return [...this.templates.values()]\n      .filter((row) => {\n        if (\n          filters?.template_key &&\n          row.template_key !== filters.template_key\n        ) {\n          return false;\n        }\n        if (filters?.event_type && row.event_type !== filters.event_type) {\n          return false;\n        }\n        if (filters?.locale && row.locale !== filters.locale) {\n          return false;\n        }\n        if (\n          filters?.is_active !== undefined &&\n          row.is_active !== filters.is_active\n        ) {\n          return false;\n        }\n        return true;\n      })\n      .map((row) => clone(row));\n  }\n\n  async getTemplate(\n    id: string\n  ): Promise<AthenaAuthEmailTemplateRow | undefined> {\n    const row = this.templates.get(id);\n    return row ? clone(row) : undefined;\n  }\n\n  async createTemplate(\n    row: AthenaAuthEmailTemplateRow\n  ): Promise<AthenaAuthEmailTemplateRow> {\n    this.templates.set(row.id, clone(row));\n    return clone(row);\n  }\n\n  async updateTemplate(\n    id: string,\n    patch: Partial<AthenaAuthEmailTemplateRow>\n  ): Promise<AthenaAuthEmailTemplateRow | undefined> {\n    const existing = this.templates.get(id);\n    if (!existing) {\n      return;\n    }\n    const next = {\n      ...existing,\n      ...patch,\n      id,\n      updated_at: new Date().toISOString(),\n    };\n    this.templates.set(id, next);\n    return clone(next);\n  }\n\n  async deleteTemplate(id: string): Promise<boolean> {\n    return this.templates.delete(id);\n  }\n\n  async listFailures(): Promise<AthenaAuthEmailFailureRow[]> {\n    return [...this.failures.values()].map((row) => clone(row));\n  }\n\n  async getFailure(id: string): Promise<AthenaAuthEmailFailureRow | undefined> {\n    const row = this.failures.get(id);\n    return row ? clone(row) : undefined;\n  }\n\n  async createFailure(\n    row: AthenaAuthEmailFailureRow\n  ): Promise<AthenaAuthEmailFailureRow> {\n    this.failures.set(row.id, clone(row));\n    return clone(row);\n  }\n\n  async updateFailure(\n    id: string,\n    patch: Partial<AthenaAuthEmailFailureRow>\n  ): Promise<AthenaAuthEmailFailureRow | undefined> {\n    const existing = this.failures.get(id);\n    if (!existing) {\n      return;\n    }\n    const next = {\n      ...existing,\n      ...patch,\n      id,\n      updated_at: new Date().toISOString(),\n    };\n    this.failures.set(id, next);\n    return clone(next);\n  }\n\n  async deleteFailure(id: string): Promise<boolean> {\n    return this.failures.delete(id);\n  }\n\n  async listEmails(): Promise<AthenaAuthEmailRecordRow[]> {\n    return [...this.emails.values()].map((row) => clone(row));\n  }\n\n  async getEmail(id: string): Promise<AthenaAuthEmailRecordRow | undefined> {\n    const row = this.emails.get(id);\n    return row ? clone(row) : undefined;\n  }\n\n  async createEmail(\n    row: AthenaAuthEmailRecordRow\n  ): Promise<AthenaAuthEmailRecordRow> {\n    this.emails.set(row.id, clone(row));\n    return clone(row);\n  }\n\n  async updateEmail(\n    id: string,\n    patch: Partial<AthenaAuthEmailRecordRow>\n  ): Promise<AthenaAuthEmailRecordRow | undefined> {\n    const existing = this.emails.get(id);\n    if (!existing) {\n      return;\n    }\n    const next = {\n      ...existing,\n      ...patch,\n      id,\n      updated_at: new Date().toISOString(),\n    };\n    this.emails.set(id, next);\n    return clone(next);\n  }\n\n  async deleteEmail(id: string): Promise<boolean> {\n    return this.emails.delete(id);\n  }\n}\n","import {\n  ATHENA_AUTH_INIT_ADVISORY_LOCK,\n  ATHENA_AUTH_RUNTIME_KEY_PURPOSE,\n  ATHENA_AUTH_TABLES,\n} from \"../contract/index.ts\";\nimport type { AthenaAuthDatabase } from \"./database.ts\";\n\nexport interface AthenaAuthRuntimeKey {\n  activatedAt: string;\n  createdAt: string;\n  keyId: string;\n  material: string;\n  purpose: string;\n  retiredAt: string | null;\n}\n\nfunction randomKeyMaterial(): string {\n  const bytes = new Uint8Array(32);\n  crypto.getRandomValues(bytes);\n  return Buffer.from(bytes).toString(\"base64url\");\n}\n\nexport async function resolveRuntimeKey(\n  db: AthenaAuthDatabase,\n  explicitSecret?: string\n): Promise<AthenaAuthRuntimeKey> {\n  if (explicitSecret) {\n    return {\n      activatedAt: new Date().toISOString(),\n      createdAt: new Date().toISOString(),\n      keyId: \"configured\",\n      material: explicitSecret,\n      purpose: ATHENA_AUTH_RUNTIME_KEY_PURPOSE,\n      retiredAt: null,\n    };\n  }\n\n  return db.transaction(async (tx) => {\n    await tx.query(\"SELECT pg_advisory_xact_lock($1)\", [\n      ATHENA_AUTH_INIT_ADVISORY_LOCK,\n    ]);\n    const existing = await tx.query<{\n      activated_at: Date | string;\n      created_at: Date | string;\n      key_id: string;\n      key_material: string;\n      purpose: string;\n      retired_at: Date | string | null;\n    }>(\n      `SELECT key_id, purpose, key_material, created_at, activated_at, retired_at\n       FROM ${ATHENA_AUTH_TABLES.runtimeKey}\n       WHERE purpose = $1 AND retired_at IS NULL\n       ORDER BY activated_at ASC\n       LIMIT 1`,\n      [ATHENA_AUTH_RUNTIME_KEY_PURPOSE]\n    );\n    const row = existing.rows[0];\n    if (row) {\n      return {\n        activatedAt: new Date(row.activated_at).toISOString(),\n        createdAt: new Date(row.created_at).toISOString(),\n        keyId: row.key_id,\n        material: row.key_material,\n        purpose: row.purpose,\n        retiredAt: row.retired_at\n          ? new Date(row.retired_at).toISOString()\n          : null,\n      };\n    }\n\n    const keyId = crypto.randomUUID();\n    const material = randomKeyMaterial();\n    const inserted = await tx.query<{\n      activated_at: Date | string;\n      created_at: Date | string;\n      key_id: string;\n      key_material: string;\n      purpose: string;\n      retired_at: Date | string | null;\n    }>(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.runtimeKey}\n        (key_id, purpose, key_material)\n       VALUES ($1, $2, $3)\n       ON CONFLICT DO NOTHING\n       RETURNING key_id, purpose, key_material, created_at, activated_at, retired_at`,\n      [keyId, ATHENA_AUTH_RUNTIME_KEY_PURPOSE, material]\n    );\n    const created = inserted.rows[0];\n    if (created) {\n      return {\n        activatedAt: new Date(created.activated_at).toISOString(),\n        createdAt: new Date(created.created_at).toISOString(),\n        keyId: created.key_id,\n        material: created.key_material,\n        purpose: created.purpose,\n        retiredAt: null,\n      };\n    }\n\n    const raced = await tx.query<{\n      activated_at: Date | string;\n      created_at: Date | string;\n      key_id: string;\n      key_material: string;\n      purpose: string;\n    }>(\n      `SELECT key_id, purpose, key_material, created_at, activated_at\n       FROM ${ATHENA_AUTH_TABLES.runtimeKey}\n       WHERE purpose = $1 AND retired_at IS NULL\n       ORDER BY activated_at ASC\n       LIMIT 1`,\n      [ATHENA_AUTH_RUNTIME_KEY_PURPOSE]\n    );\n    const winner = raced.rows[0];\n    if (!winner) {\n      throw new Error(\"Failed to bootstrap Athena Auth runtime key\");\n    }\n    return {\n      activatedAt: new Date(winner.activated_at).toISOString(),\n      createdAt: new Date(winner.created_at).toISOString(),\n      keyId: winner.key_id,\n      material: winner.key_material,\n      purpose: winner.purpose,\n      retiredAt: null,\n    };\n  });\n}\n","import type { AthenaAuthDatabase } from \"./database.ts\";\nimport { MemoryAuthStores } from \"./memory-stores.ts\";\nimport { ATHENA_AUTH_SQLITE_SCHEMA } from \"./sqlite-schema.ts\";\nimport type {\n  AuthAccountRow,\n  AuthMemberRow,\n  AuthOrganizationRow,\n  AuthSessionRow,\n  AuthUserRow,\n  AuthVerificationRow,\n} from \"./models.ts\";\nimport type { CreateSessionInput, CreateUserInput } from \"./stores.ts\";\n\nfunction iso(value: Date | string): string {\n  return value instanceof Date ? value.toISOString() : value;\n}\n\nfunction flag(value: boolean | number | null | undefined): number {\n  return value ? 1 : 0;\n}\n\nexport async function applyAthenaAuthSqliteSchema(\n  database: AthenaAuthDatabase,\n): Promise<void> {\n  for (const sql of ATHENA_AUTH_SQLITE_SCHEMA) {\n    await database.query(sql);\n  }\n}\n\n/**\n * Persistence over SQLite-authored tables. Methods keep the MemoryAuthStores\n * contract so handlers can run without PostgreSQL SQL.\n */\nexport class SqliteAuthStores extends MemoryAuthStores {\n  constructor(private readonly database: AthenaAuthDatabase) {\n    super();\n  }\n\n  static async connect(database: AthenaAuthDatabase): Promise<SqliteAuthStores> {\n    await applyAthenaAuthSqliteSchema(database);\n    const stores = new SqliteAuthStores(database);\n    await stores.hydrate();\n    return stores;\n  }\n\n  async hydrate(): Promise<void> {\n    const users = await this.database.query<AuthUserRow>(\n      \"SELECT * FROM athena_auth_user\",\n    );\n    for (const row of users.rows) {\n      this.users.set(row.id, {\n        ...row,\n        banned: Boolean(row.banned),\n        email_verified: Boolean(row.email_verified),\n        two_factor_enabled: Boolean(row.two_factor_enabled),\n      });\n    }\n    const sessions = await this.database.query<AuthSessionRow>(\n      \"SELECT * FROM athena_auth_session\",\n    );\n    for (const row of sessions.rows) {\n      this.sessions.set(row.token, {\n        ...row,\n        active: Boolean(row.active),\n      });\n    }\n    const accounts = await this.database.query<AuthAccountRow>(\n      \"SELECT * FROM athena_auth_account\",\n    );\n    for (const row of accounts.rows) {\n      this.accounts.set(row.id, row);\n    }\n    const verifications = await this.database.query<AuthVerificationRow>(\n      \"SELECT * FROM athena_auth_verification\",\n    );\n    for (const row of verifications.rows) {\n      this.verifications.set(row.id, row);\n    }\n    const organizations = await this.database.query<AuthOrganizationRow>(\n      \"SELECT * FROM athena_auth_organization\",\n    );\n    for (const row of organizations.rows) {\n      this.organizations.set(row.id, row);\n    }\n    const members = await this.database.query<AuthMemberRow>(\n      \"SELECT * FROM athena_auth_member\",\n    );\n    for (const row of members.rows) {\n      this.members.set(row.id, row);\n    }\n    const userRoles = await this.database.query<{ role_key: string; user_id: string }>(\n      \"SELECT user_id, role_key FROM athena_auth_user_role\",\n    );\n    for (const row of userRoles.rows) {\n      try {\n        await this.authorization.assignUserRole(row.user_id, row.role_key);\n      } catch {\n        // Catalog roles are MemoryAuthorizationStore builtins; unknown keys stay unassigned.\n      }\n    }\n    const memberRoles = await this.database.query<{\n      member_id: string;\n      role_key: string;\n    }>(\"SELECT member_id, role_key FROM athena_auth_member_role\");\n    for (const row of memberRoles.rows) {\n      const member = this.members.get(row.member_id);\n      try {\n        await this.authorization.assignMemberRole(\n          row.member_id,\n          row.role_key,\n          undefined,\n          member?.organization_id,\n        );\n      } catch {\n        // Same catalog boundary as user roles.\n      }\n    }\n  }\n\n  override async createUser(input: CreateUserInput): Promise<AuthUserRow> {\n    const row = await super.createUser(input);\n    await this.database.query(\n      `INSERT INTO athena_auth_user (\n        id, email, name, image, username, display_username, email_verified,\n        metadata, created_at, updated_at\n      ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n      [\n        row.id,\n        row.email,\n        row.name,\n        row.image,\n        row.username,\n        row.display_username,\n        flag(row.email_verified),\n        JSON.stringify(row.metadata ?? {}),\n        iso(row.created_at),\n        iso(row.updated_at),\n      ],\n    );\n    return row;\n  }\n\n  override async createSession(input: CreateSessionInput): Promise<AuthSessionRow> {\n    const row = await super.createSession(input);\n    await this.database.query(\n      `INSERT INTO athena_auth_session (\n        id, user_id, token, expires_at, ip_address, user_agent, impersonated_by,\n        active_organization_id, active, authenticated_at, authentication_methods,\n        created_at, updated_at\n      ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n      [\n        row.id,\n        row.user_id,\n        row.token,\n        iso(row.expires_at),\n        row.ip_address,\n        row.user_agent,\n        row.impersonated_by,\n        row.active_organization_id,\n        flag(row.active),\n        iso(row.authenticated_at),\n        JSON.stringify(row.authentication_methods),\n        iso(row.created_at),\n        iso(row.updated_at),\n      ],\n    );\n    return row;\n  }\n\n  override async createAccount(input: {\n    accountId: string;\n    id: string;\n    password?: string;\n    providerId: string;\n    userId: string;\n  }): Promise<AuthAccountRow> {\n    const row = await super.createAccount(input);\n    await this.database.query(\n      `INSERT INTO athena_auth_account (\n        id, user_id, provider_id, account_id, password, created_at, updated_at\n      ) VALUES (?, ?, ?, ?, ?, ?, ?)`,\n      [\n        row.id,\n        row.user_id,\n        row.provider_id,\n        row.account_id,\n        row.password,\n        iso(row.created_at),\n        iso(row.updated_at),\n      ],\n    );\n    return row;\n  }\n\n  override async createVerification(input: {\n    expiresAt: Date;\n    id: string;\n    identifier: string;\n    value: string;\n  }): Promise<AuthVerificationRow> {\n    const row = await super.createVerification(input);\n    await this.database.query(\n      `INSERT INTO athena_auth_verification (\n        id, identifier, value, expires_at, created_at, updated_at\n      ) VALUES (?, ?, ?, ?, ?, ?)`,\n      [\n        row.id,\n        row.identifier,\n        row.value,\n        iso(row.expires_at),\n        iso(row.created_at),\n        iso(row.updated_at),\n      ],\n    );\n    return row;\n  }\n\n  override async createOrganization(input: {\n    createdByUserId: string;\n    id: string;\n    name: string;\n    slug: string;\n  }): Promise<AuthOrganizationRow> {\n    const row = await super.createOrganization(input);\n    await this.database.query(\n      `INSERT INTO athena_auth_organization (\n        id, name, slug, logo, metadata, created_by_user_id, created_at, updated_at\n      ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n      [\n        row.id,\n        row.name,\n        row.slug,\n        row.logo,\n        JSON.stringify(row.metadata ?? {}),\n        row.created_by_user_id,\n        iso(row.created_at),\n        iso(row.updated_at),\n      ],\n    );\n    return row;\n  }\n\n  override async addMember(input: {\n    assignedBy?: string;\n    id: string;\n    organizationId: string;\n    role: string;\n    userId: string;\n  }): Promise<AuthMemberRow> {\n    const row = await super.addMember(input);\n    await this.database.query(\n      `INSERT INTO athena_auth_member (\n        id, organization_id, user_id, role, created_at\n      ) VALUES (?, ?, ?, ?, ?)`,\n      [row.id, row.organization_id, row.user_id, row.role, iso(row.created_at)],\n    );\n    await this.database.query(\n      `INSERT INTO athena_auth_member_role (member_id, role_key) VALUES (?, ?)`,\n      [row.id, row.role],\n    );\n    return row;\n  }\n}\n","/**\n * SQLite-authored Auth schema. Independently specified from PostgreSQL\n * migrations; createClient never executes these statements.\n */\nexport const ATHENA_AUTH_SQLITE_SCHEMA = Object.freeze([\n  `CREATE TABLE IF NOT EXISTS athena_auth_user (\n    id TEXT PRIMARY KEY,\n    email TEXT UNIQUE,\n    name TEXT,\n    image TEXT,\n    username TEXT UNIQUE,\n    display_username TEXT,\n    email_verified INTEGER NOT NULL DEFAULT 0,\n    two_factor_enabled INTEGER NOT NULL DEFAULT 0,\n    role TEXT,\n    banned INTEGER NOT NULL DEFAULT 0,\n    ban_reason TEXT,\n    ban_expires TEXT,\n    metadata TEXT NOT NULL DEFAULT '{}',\n    created_at TEXT NOT NULL,\n    updated_at TEXT NOT NULL\n  )`,\n  `CREATE TABLE IF NOT EXISTS athena_auth_session (\n    id TEXT PRIMARY KEY,\n    user_id TEXT NOT NULL,\n    token TEXT NOT NULL UNIQUE,\n    expires_at TEXT NOT NULL,\n    ip_address TEXT,\n    user_agent TEXT,\n    impersonated_by TEXT,\n    active_organization_id TEXT,\n    active INTEGER NOT NULL DEFAULT 1,\n    authenticated_at TEXT NOT NULL,\n    authentication_methods TEXT NOT NULL DEFAULT '[]',\n    created_at TEXT NOT NULL,\n    updated_at TEXT NOT NULL,\n    FOREIGN KEY (user_id) REFERENCES athena_auth_user(id)\n  )`,\n  `CREATE TABLE IF NOT EXISTS athena_auth_account (\n    id TEXT PRIMARY KEY,\n    user_id TEXT NOT NULL,\n    provider_id TEXT NOT NULL,\n    account_id TEXT NOT NULL,\n    password TEXT,\n    created_at TEXT NOT NULL,\n    updated_at TEXT NOT NULL,\n    FOREIGN KEY (user_id) REFERENCES athena_auth_user(id)\n  )`,\n  `CREATE TABLE IF NOT EXISTS athena_auth_verification (\n    id TEXT PRIMARY KEY,\n    identifier TEXT NOT NULL,\n    value TEXT NOT NULL,\n    expires_at TEXT NOT NULL,\n    created_at TEXT NOT NULL,\n    updated_at TEXT NOT NULL\n  )`,\n  `CREATE TABLE IF NOT EXISTS athena_auth_organization (\n    id TEXT PRIMARY KEY,\n    name TEXT NOT NULL,\n    slug TEXT NOT NULL UNIQUE,\n    logo TEXT,\n    metadata TEXT NOT NULL DEFAULT '{}',\n    created_by_user_id TEXT,\n    created_at TEXT NOT NULL,\n    updated_at TEXT NOT NULL\n  )`,\n  `CREATE TABLE IF NOT EXISTS athena_auth_member (\n    id TEXT PRIMARY KEY,\n    organization_id TEXT NOT NULL,\n    user_id TEXT NOT NULL,\n    role TEXT NOT NULL,\n    created_at TEXT NOT NULL,\n    FOREIGN KEY (organization_id) REFERENCES athena_auth_organization(id),\n    FOREIGN KEY (user_id) REFERENCES athena_auth_user(id)\n  )`,\n  `CREATE TABLE IF NOT EXISTS athena_auth_user_role (\n    user_id TEXT NOT NULL,\n    role_key TEXT NOT NULL,\n    PRIMARY KEY (user_id, role_key),\n    FOREIGN KEY (user_id) REFERENCES athena_auth_user(id)\n  )`,\n  `CREATE TABLE IF NOT EXISTS athena_auth_member_role (\n    member_id TEXT NOT NULL,\n    role_key TEXT NOT NULL,\n    PRIMARY KEY (member_id, role_key),\n    FOREIGN KEY (member_id) REFERENCES athena_auth_member(id)\n  )`,\n] as const);\n","import type {\n  AthenaAuthMutationScope,\n  AuthMutationTransaction,\n} from \"../hooks/scope.ts\";\nimport {\n  insertAuditLogAuth,\n  type MemoryAuthAuditSink,\n} from \"../observability/audit.ts\";\nimport { MemoryAdminAuthStore, PostgresAdminAuthStore } from \"./admin-store.ts\";\nimport type { AthenaAuthDatabase } from \"./database.ts\";\nimport { MemoryAuthStores } from \"./memory-stores.ts\";\nimport { PostgresAuthStores } from \"./stores.ts\";\nimport {\n  createMemoryOAuthAuthorizationServerStores,\n  restoreMemoryOAuthAuthorizationServerState,\n  snapshotMemoryOAuthAuthorizationServerState,\n  type MemoryOAuthAuthorizationServerState,\n} from \"./authorization-server/memory-stores.ts\";\nimport { createPostgresOAuthAuthorizationServerStores } from \"./authorization-server/postgres-stores.ts\";\nimport { PostgresTokenKeyStore } from \"./postgres-token-key-store.ts\";\nimport type { TokenKeyStore } from \"./token-key-store.ts\";\n\ntype PostgresTokenKeyOptions = {\n  encryptionSecret: string;\n  issuer: string;\n};\n\ninterface MemoryStoreSnapshot {\n  accounts: MemoryAuthStores[\"accounts\"];\n  apiKeys: MemoryAuthStores[\"apiKeys\"];\n  invitations: MemoryAuthStores[\"invitations\"];\n  members: MemoryAuthStores[\"members\"];\n  organizations: MemoryAuthStores[\"organizations\"];\n  passkeyRegistrationTransactions: MemoryAuthStores[\"passkeyRegistrationTransactions\"];\n  passkeys: MemoryAuthStores[\"passkeys\"];\n  sessions: MemoryAuthStores[\"sessions\"];\n  twoFactors: MemoryAuthStores[\"twoFactors\"];\n  users: MemoryAuthStores[\"users\"];\n  verifications: MemoryAuthStores[\"verifications\"];\n}\n\nfunction cloneMap<K, V>(source: Map<K, V>): Map<K, V> {\n  return new Map(\n    [...source.entries()].map(([key, value]) => [key, structuredClone(value)])\n  );\n}\n\nfunction snapshotMemoryStores(stores: MemoryAuthStores): MemoryStoreSnapshot {\n  return {\n    accounts: cloneMap(stores.accounts),\n    apiKeys: cloneMap(stores.apiKeys),\n    invitations: cloneMap(stores.invitations),\n    members: cloneMap(stores.members),\n    organizations: cloneMap(stores.organizations),\n    passkeyRegistrationTransactions: cloneMap(\n      stores.passkeyRegistrationTransactions\n    ),\n    passkeys: cloneMap(stores.passkeys),\n    sessions: cloneMap(stores.sessions),\n    twoFactors: cloneMap(stores.twoFactors),\n    users: cloneMap(stores.users),\n    verifications: cloneMap(stores.verifications),\n  };\n}\n\nfunction restoreMemoryStores(\n  stores: MemoryAuthStores,\n  snapshot: MemoryStoreSnapshot\n): void {\n  replaceMap(stores.accounts, snapshot.accounts);\n  replaceMap(stores.apiKeys, snapshot.apiKeys);\n  replaceMap(stores.invitations, snapshot.invitations);\n  replaceMap(stores.members, snapshot.members);\n  replaceMap(stores.organizations, snapshot.organizations);\n  replaceMap(stores.passkeys, snapshot.passkeys);\n  replaceMap(\n    stores.passkeyRegistrationTransactions,\n    snapshot.passkeyRegistrationTransactions\n  );\n  replaceMap(stores.sessions, snapshot.sessions);\n  replaceMap(stores.twoFactors, snapshot.twoFactors);\n  replaceMap(stores.users, snapshot.users);\n  replaceMap(stores.verifications, snapshot.verifications);\n}\n\nfunction replaceMap<K, V>(target: Map<K, V>, source: Map<K, V>): void {\n  target.clear();\n  for (const [key, value] of source) {\n    target.set(key, structuredClone(value));\n  }\n}\n\nexport function createMemoryAuthMutationTransaction(\n  stores: MemoryAuthStores,\n  admin = new MemoryAdminAuthStore(stores),\n  auditSink?: MemoryAuthAuditSink,\n  oauthState?: MemoryOAuthAuthorizationServerState,\n  tokenKeys?: () => TokenKeyStore | undefined\n): AuthMutationTransaction {\n  let queue: Promise<unknown> = Promise.resolve();\n  return async <T>(fn: (scope: AthenaAuthMutationScope) => Promise<T>) => {\n    const run = async () => {\n      const snapshot = snapshotMemoryStores(stores);\n      const oauthSnapshot = oauthState\n        ? snapshotMemoryOAuthAuthorizationServerState(oauthState)\n        : undefined;\n      const auditSnapshot = auditSink ? auditSink.entries.slice() : undefined;\n      try {\n        return await fn({\n          admin,\n          ...(oauthState\n            ? {\n                oauth: createMemoryOAuthAuthorizationServerStores({\n                  state: oauthState,\n                  transactionBound: true,\n                }),\n              }\n            : {}),\n          tokenKeys: tokenKeys?.(),\n          stores,\n        });\n      } catch (error) {\n        restoreMemoryStores(stores, snapshot);\n        if (oauthState && oauthSnapshot) {\n          restoreMemoryOAuthAuthorizationServerState(oauthState, oauthSnapshot);\n        }\n        if (auditSink && auditSnapshot) {\n          auditSink.entries.splice(\n            0,\n            auditSink.entries.length,\n            ...auditSnapshot\n          );\n        }\n        throw error;\n      }\n    };\n    const next = queue.then(run, run);\n    queue = next.then(\n      () => undefined,\n      () => undefined\n    );\n    return next;\n  };\n}\n\nexport function createPostgresAuthMutationTransaction(\n  database: AthenaAuthDatabase,\n  persistAudit = false,\n  tokenKeyOptions?: () => PostgresTokenKeyOptions | undefined\n): AuthMutationTransaction {\n  return async <T>(fn: (scope: AthenaAuthMutationScope) => Promise<T>) =>\n    database.transaction(async (txDb) =>\n      fn({\n        admin: new PostgresAdminAuthStore(txDb),\n        oauth: createPostgresOAuthAuthorizationServerStores(txDb, {\n          transactionBound: true,\n        }),\n        tokenKeys: (() => {\n          const options = tokenKeyOptions?.();\n          return options\n            ? new PostgresTokenKeyStore({\n                ...options,\n                database: txDb,\n                transactionBound: true,\n              })\n            : undefined;\n        })(),\n        persistAudit: persistAudit\n          ? (entry) => insertAuditLogAuth(txDb, entry)\n          : undefined,\n        stores: new PostgresAuthStores(txDb),\n      })\n    );\n}\n\nexport function createAuthMutationTransaction(input: {\n  auditSink?: MemoryAuthAuditSink;\n  database?: AthenaAuthDatabase;\n  oauthState?: MemoryOAuthAuthorizationServerState;\n  persistAudit?: boolean;\n  tokenKeyOptions?: () => PostgresTokenKeyOptions | undefined;\n  tokenKeys?: () => TokenKeyStore | undefined;\n  stores: MemoryAuthStores | PostgresAuthStores;\n}): AuthMutationTransaction {\n  if (input.database) {\n    return createPostgresAuthMutationTransaction(\n      input.database,\n      input.persistAudit === true,\n      input.tokenKeyOptions\n    );\n  }\n  if (input.stores instanceof MemoryAuthStores) {\n    return createMemoryAuthMutationTransaction(\n      input.stores,\n      undefined,\n      input.auditSink,\n      input.oauthState,\n      input.tokenKeys\n    );\n  }\n  throw new Error(\n    \"Auth mutation transactions require a database or MemoryAuthStores\"\n  );\n}\n","import { type CryptoKey, exportJWK, importJWK, type JWK } from \"jose\";\nimport {\n  ATHENA_AUTH_SIGNING_KEY_ADVISORY_LOCK,\n  ATHENA_AUTH_TABLES,\n} from \"../contract/index.ts\";\nimport type { AthenaAuthDatabase } from \"./database.ts\";\nimport {\n  issuerAdvisoryLockKey,\n  openTokenPrivateJwk,\n  sealTokenPrivateJwk,\n} from \"./token-key-crypto.ts\";\nimport {\n  DEFAULT_TOKEN_RETIRE_WINDOW_MS,\n  generateSigningKey,\n  type TokenKeyStatus,\n  type TokenKeyStore,\n  type TokenSigningKey,\n  type TokenVerificationKey,\n} from \"./token-key-store.ts\";\n\ninterface SigningKeyRow {\n  activated_at: Date | string | null;\n  algorithm: string;\n  expires_at: Date | string | null;\n  issuer: string;\n  kid: string;\n  private_jwk_ciphertext: string;\n  public_jwk: JWK | string;\n  retires_at: Date | string | null;\n  status: TokenKeyStatus;\n}\n\nfunction asDate(value: Date | string | null | undefined): Date | undefined {\n  if (value == null) {\n    return;\n  }\n  return value instanceof Date ? value : new Date(value);\n}\n\nfunction parsePublicJwk(value: JWK | string): JWK {\n  if (typeof value === \"string\") {\n    return JSON.parse(value) as JWK;\n  }\n  return value;\n}\n\nexport class PostgresTokenKeyStore implements TokenKeyStore {\n  constructor(\n    private readonly input: {\n      database: AthenaAuthDatabase;\n      encryptionSecret: string;\n      issuer: string;\n      retireWindowMs?: number;\n      transactionBound?: boolean;\n    }\n  ) {}\n\n  async acquireBootstrapLock(): Promise<() => void> {\n    return () => undefined;\n  }\n\n  async getActiveSigningKey(): Promise<TokenSigningKey | undefined> {\n    return this.withLock(async (tx) => {\n      await this.pruneExpired(tx);\n      const result = await tx.query<SigningKeyRow>(\n        `SELECT kid, issuer, status, algorithm, public_jwk, private_jwk_ciphertext,\n\t\t\t\t        created_at, activated_at, retires_at, expires_at\n\t\t\t\t FROM ${ATHENA_AUTH_TABLES.authSigningKeys}\n\t\t\t\t WHERE issuer = $1 AND status = 'active'\n\t\t\t\t LIMIT 1`,\n        [this.input.issuer]\n      );\n      const row = result.rows[0];\n      return row ? this.hydrateSigningKey(row) : undefined;\n    });\n  }\n\n  async listVerificationKeys(\n    now = new Date()\n  ): Promise<TokenVerificationKey[]> {\n    return this.withLock(async (tx) => {\n      await this.pruneExpired(tx, now);\n      const result = await tx.query<SigningKeyRow>(\n        `SELECT kid, issuer, status, algorithm, public_jwk, private_jwk_ciphertext,\n\t\t\t\t        created_at, activated_at, retires_at, expires_at\n\t\t\t\t FROM ${ATHENA_AUTH_TABLES.authSigningKeys}\n\t\t\t\t WHERE issuer = $1\n\t\t\t\t   AND status IN ('active', 'retiring')\n\t\t\t\t   AND (expires_at IS NULL OR expires_at > $2)`,\n        [this.input.issuer, now.toISOString()]\n      );\n      return Promise.all(\n        result.rows.map(async (row) => {\n          const key = await this.hydrateSigningKey(row);\n          return {\n            kid: key.kid,\n            publicJwk: key.publicJwk,\n            status: key.status === \"active\" ? \"active\" : \"retiring\",\n          };\n        })\n      );\n    });\n  }\n\n  async compareAndActivate(key: TokenSigningKey): Promise<void> {\n    await this.withLock(async (tx) => {\n      const existing = await tx.query<{ kid: string }>(\n        `SELECT kid FROM ${ATHENA_AUTH_TABLES.authSigningKeys}\n\t\t\t\t WHERE issuer = $1 AND status = 'active'\n\t\t\t\t LIMIT 1`,\n        [this.input.issuer]\n      );\n      if (existing.rows[0]) {\n        return;\n      }\n      await this.insertActive(tx, key);\n    });\n  }\n\n  async activateKey(key: TokenSigningKey): Promise<void> {\n    await this.compareAndActivate(key);\n  }\n\n  async rotateSigningKey(): Promise<TokenSigningKey> {\n    const next = await generateSigningKey();\n    const windowMs =\n      this.input.retireWindowMs ?? DEFAULT_TOKEN_RETIRE_WINDOW_MS;\n    const retiresAt = new Date(Date.now() + windowMs);\n    return this.withLock(async (tx) => {\n      await this.pruneExpired(tx);\n      const active = await tx.query<{ kid: string }>(\n        `SELECT kid FROM ${ATHENA_AUTH_TABLES.authSigningKeys}\n\t\t\t\t WHERE issuer = $1 AND status = 'active'\n\t\t\t\t FOR UPDATE`,\n        [this.input.issuer]\n      );\n      const current = active.rows[0];\n      if (current) {\n        await tx.query(\n          `UPDATE ${ATHENA_AUTH_TABLES.authSigningKeys}\n\t\t\t\t\t SET status = 'retiring', retires_at = $2, expires_at = $2\n\t\t\t\t\t WHERE kid = $1 AND issuer = $3 AND status = 'active'`,\n          [current.kid, retiresAt.toISOString(), this.input.issuer]\n        );\n      }\n      await this.insertActive(tx, next);\n      return next;\n    });\n  }\n\n  async retireKey(kid: string): Promise<void> {\n    const windowMs =\n      this.input.retireWindowMs ?? DEFAULT_TOKEN_RETIRE_WINDOW_MS;\n    const retiresAt = new Date(Date.now() + windowMs);\n    await this.withLock(async (tx) => {\n      await tx.query(\n        `UPDATE ${ATHENA_AUTH_TABLES.authSigningKeys}\n\t\t\t\t SET status = 'retiring', retires_at = $2, expires_at = $2\n\t\t\t\t WHERE kid = $1 AND issuer = $3 AND status = 'active'`,\n        [kid, retiresAt.toISOString(), this.input.issuer]\n      );\n    });\n  }\n\n  private async withLock<T>(\n    fn: (tx: AthenaAuthDatabase) => Promise<T>\n  ): Promise<T> {\n    if (this.input.transactionBound) {\n      await this.input.database.query(\"SELECT pg_advisory_xact_lock($1, $2)\", [\n        ATHENA_AUTH_SIGNING_KEY_ADVISORY_LOCK,\n        issuerAdvisoryLockKey(this.input.issuer),\n      ]);\n      return fn(this.input.database);\n    }\n    return this.input.database.transaction(async (tx) => {\n      await tx.query(\"SELECT pg_advisory_xact_lock($1, $2)\", [\n        ATHENA_AUTH_SIGNING_KEY_ADVISORY_LOCK,\n        issuerAdvisoryLockKey(this.input.issuer),\n      ]);\n      return fn(tx);\n    });\n  }\n\n  private async pruneExpired(\n    tx: AthenaAuthDatabase,\n    now = new Date()\n  ): Promise<void> {\n    await tx.query(\n      `UPDATE ${ATHENA_AUTH_TABLES.authSigningKeys}\n\t\t\t SET status = 'retired'\n\t\t\t WHERE issuer = $1\n\t\t\t   AND status = 'retiring'\n\t\t\t   AND retires_at IS NOT NULL\n\t\t\t   AND retires_at <= $2`,\n      [this.input.issuer, now.toISOString()]\n    );\n  }\n\n  private async insertActive(\n    tx: AthenaAuthDatabase,\n    key: TokenSigningKey\n  ): Promise<void> {\n    const privateJwk = await exportJWK(key.privateKey);\n    const ciphertext = await sealTokenPrivateJwk(\n      privateJwk as Record<string, unknown>,\n      this.input.encryptionSecret\n    );\n    await tx.query(\n      `INSERT INTO ${ATHENA_AUTH_TABLES.authSigningKeys} (\n\t\t\t\tkid, issuer, status, algorithm, public_jwk, private_jwk_ciphertext,\n\t\t\t\tactivated_at\n\t\t\t) VALUES ($1, $2, 'active', 'ES256', $3::jsonb, $4, NOW())`,\n      [key.kid, this.input.issuer, JSON.stringify(key.publicJwk), ciphertext]\n    );\n  }\n\n  private async hydrateSigningKey(\n    row: SigningKeyRow\n  ): Promise<TokenSigningKey> {\n    const publicJwk = parsePublicJwk(row.public_jwk);\n    const privateJwk = await openTokenPrivateJwk(\n      row.private_jwk_ciphertext,\n      this.input.encryptionSecret\n    );\n    const privateKey = (await importJWK(\n      { ...privateJwk, alg: \"ES256\" },\n      \"ES256\"\n    )) as CryptoKey;\n    const publicKey = (await importJWK(\n      { ...publicJwk, alg: \"ES256\" },\n      \"ES256\"\n    )) as CryptoKey;\n    const status = row.status === \"active\" ? \"active\" : \"retiring\";\n    return {\n      expiresAt: asDate(row.expires_at),\n      kid: row.kid,\n      privateKey,\n      publicJwk,\n      publicKey,\n      retiresAt: asDate(row.retires_at),\n      status,\n    };\n  }\n}\n","const TEXT_ENCODER = new TextEncoder();\n\nasync function aesGcmKey(secret: string, usage: KeyUsage): Promise<CryptoKey> {\n  const material = await crypto.subtle.digest(\n    \"SHA-256\",\n    TEXT_ENCODER.encode(secret)\n  );\n  return crypto.subtle.importKey(\"raw\", material, \"AES-GCM\", false, [usage]);\n}\n\nexport async function sealTokenPrivateJwk(\n  privateJwk: Record<string, unknown>,\n  secret: string\n): Promise<string> {\n  const key = await aesGcmKey(secret, \"encrypt\");\n  const iv = crypto.getRandomValues(new Uint8Array(12));\n  const cipher = await crypto.subtle.encrypt(\n    { iv, name: \"AES-GCM\" },\n    key,\n    TEXT_ENCODER.encode(JSON.stringify(privateJwk))\n  );\n  const packed = new Uint8Array(iv.byteLength + cipher.byteLength);\n  packed.set(iv);\n  packed.set(new Uint8Array(cipher), iv.byteLength);\n  return Buffer.from(packed).toString(\"base64url\");\n}\n\nexport async function openTokenPrivateJwk(\n  ciphertext: string,\n  secret: string\n): Promise<Record<string, unknown>> {\n  const packed = Buffer.from(ciphertext, \"base64url\");\n  const iv = packed.subarray(0, 12);\n  const data = packed.subarray(12);\n  const key = await aesGcmKey(secret, \"decrypt\");\n  const plain = await crypto.subtle.decrypt({ iv, name: \"AES-GCM\" }, key, data);\n  return JSON.parse(new TextDecoder().decode(plain)) as Record<string, unknown>;\n}\n\nexport function issuerAdvisoryLockKey(issuer: string): number {\n  let hash = 0;\n  for (let index = 0; index < issuer.length; index += 1) {\n    hash = (hash * 31 + issuer.charCodeAt(index)) | 0;\n  }\n  return hash === 0 ? 1 : hash;\n}\n","import type { AthenaAuthMutationScope } from \"../hooks/scope.ts\";\nimport type { AthenaAuthProtocolIdentity } from \"../protocol-identity.ts\";\nimport type { AthenaTokenAuthority } from \"./athena-token-authority.ts\";\nimport type { OAuthAuthorizationServerService } from \"./authorization-server/service.ts\";\nimport type { AuthClock } from \"./clock.ts\";\nimport type { LocalTokenAuthority } from \"./token-authority.ts\";\n\nexport interface AuthProtocolRuntime {\n  clock: AuthClock;\n  forMutation(scope: AthenaAuthMutationScope): AuthProtocolRuntime;\n  identity: AthenaAuthProtocolIdentity;\n  legacyToken: LocalTokenAuthority;\n  oauth: OAuthAuthorizationServerService;\n  signing: AthenaTokenAuthority;\n  stateSecret: string;\n}\n\nexport function rebindProtocolRuntime(\n  runtime: AuthProtocolRuntime,\n  scope: AthenaAuthMutationScope\n): AuthProtocolRuntime {\n  return {\n    clock: runtime.clock,\n    forMutation: (next) => rebindProtocolRuntime(runtime, next),\n    identity: runtime.identity,\n    legacyToken: runtime.legacyToken,\n    oauth: runtime.oauth.withMutationScope(scope),\n    signing: scope.tokenKeys\n      ? runtime.signing.withKeyStore(scope.tokenKeys)\n      : runtime.signing,\n    stateSecret: runtime.stateSecret,\n  };\n}\n","import type { AthenaTokenAuthority } from \"./athena-token-authority.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"./errors.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\nimport type { TokenKeyStore } from \"./token-key-store.ts\";\n\nconst JWKS_CACHE_CONTROL = \"public, max-age=300, stale-while-revalidate=300\";\n\nexport interface LocalTokenAuthority {\n  handle(\n    path: string,\n    method: string,\n    request: Request,\n    session: { session: AuthSessionRow; user: AuthUserRow } | null\n  ): Promise<Response | undefined>;\n}\n\nexport function buildOidcDiscoveryDocument(input: {\n  issuer: string;\n  jwksUri: string;\n  tokenEndpoint: string;\n}): {\n  issuer: string;\n  jwks_uri: string;\n  response_types_supported: string[];\n  subject_types_supported: string[];\n  token_endpoint: string;\n} {\n  return {\n    issuer: input.issuer,\n    jwks_uri: input.jwksUri,\n    response_types_supported: [],\n    subject_types_supported: [\"public\"],\n    token_endpoint: input.tokenEndpoint,\n  };\n}\n\nexport async function createLocalTokenAuthority(options: {\n  audiences?: string[];\n  signing: AthenaTokenAuthority;\n  tokenEndpoint: string;\n}): Promise<LocalTokenAuthority> {\n  const allowlist = options.audiences ?? [];\n  const identity = options.signing.identity;\n\n  return {\n    async handle(path, method, request, session) {\n      if (path === \"/.well-known/jwks.json\" && method === \"GET\") {\n        const headers = new Headers({\n          \"cache-control\": JWKS_CACHE_CONTROL,\n        });\n        return jsonResponse(200, await options.signing.getJwks(), headers);\n      }\n      if (path === \"/.well-known/openid-configuration\" && method === \"GET\") {\n        return jsonResponse(\n          200,\n          buildOidcDiscoveryDocument({\n            issuer: identity.issuer,\n            jwksUri: identity.jwksUri,\n            tokenEndpoint: options.tokenEndpoint,\n          })\n        );\n      }\n      if (\n        (path === \"/token\" ||\n          path === \"/get-access-token\" ||\n          path === \"/refresh-token\") &&\n        method === \"POST\"\n      ) {\n        if (!session) {\n          throw AthenaAuthRuntimeError.unauthenticated();\n        }\n        if (session.user.banned) {\n          throw AthenaAuthRuntimeError.forbidden(\"User is banned\");\n        }\n        const body = (await request.json().catch(() => ({}))) as {\n          audience?: string | string[];\n          expiresIn?: number;\n        };\n        const requested = normalizeAudiences(body.audience);\n        const audiences =\n          requested.length > 0 ? requested : allowlist.slice(0, 1);\n        if (audiences.length === 0) {\n          throw AthenaAuthRuntimeError.badRequest(\"audience is required\");\n        }\n        if (allowlist.length > 0) {\n          for (const audience of audiences) {\n            if (!allowlist.includes(audience)) {\n              throw AthenaAuthRuntimeError.forbidden(\n                `audience ${audience} is not in the configured allowlist`\n              );\n            }\n          }\n        }\n        const ttl = Math.min(Math.max(body.expiresIn ?? 900, 1), 3600);\n        const signed = await options.signing.signSessionToken({\n          audiences,\n          session: session.session,\n          ttl,\n          user: session.user,\n        });\n        return jsonResponse(200, {\n          audience: audiences,\n          expiresAt: new Date(Date.now() + ttl * 1000).toISOString(),\n          expiresIn: ttl,\n          issuer: identity.issuer,\n          kid: signed.kid,\n          token: signed.token,\n          tokenType: \"Bearer\",\n        });\n      }\n    },\n  };\n}\n\nfunction normalizeAudiences(audience: string | string[] | undefined): 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 type { TokenKeyStore };\n","/**\n * Node-facing social OAuth adapter.\n *\n * The normalization algorithm lives in the browser-safe shared config\n * module. Local Node Auth configs retain provider secrets there; remote\n * configs are normalized without them.\n */\nexport type {\n  AthenaAuthSocialOptions,\n  AthenaAuthSocialProviderOptions,\n  NormalizedSocialAuthConfig,\n} from \"../config.ts\";\n\nimport { normalizeAuthSocialProviders } from \"../config.ts\";\n\nexport function normalizeSocialAuthConfig(raw: Record<string, unknown>) {\n  return normalizeAuthSocialProviders({ ...raw, mode: \"local\" });\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","import { sha256HexUtf8 } from \"../../../node-crypto.ts\";\nimport type { BillingSchedulerHandle } from \"../../reconciliation/scheduler.ts\";\nimport type { AthenaBillingRuntimeDispatch } from \"../dispatch.ts\";\n\nconst OWNERS = Symbol.for(\"@xylex-group/athena.embeddedBillingRuntimeOwners\");\nconst RECOVERY_ATTEMPTS = Symbol.for(\n  \"@xylex-group/athena.embeddedBillingRuntimeRecoveryAttempts\",\n);\n\nexport interface EmbeddedBillingRuntimeSurfaces {\n  dispatch?: AthenaBillingRuntimeDispatch;\n  eventIngress?: unknown;\n}\n\ntype EmbeddedBillingRuntimeOwnerRecord = {\n  dispatch?: AthenaBillingRuntimeDispatch;\n  eventIngress?: unknown;\n  generation: number;\n  mutex: Promise<void>;\n  schedulers: BillingSchedulerHandle[];\n};\n\ntype EmbeddedBillingRuntimeOwnerMap = Map<\n  string,\n  EmbeddedBillingRuntimeOwnerRecord\n>;\n\ntype EmbeddedBillingRuntimeRecoveryMap = Map<string, Promise<unknown>>;\n\nfunction ownerMap(): EmbeddedBillingRuntimeOwnerMap {\n  const holder = globalThis as typeof globalThis & {\n    [OWNERS]?: EmbeddedBillingRuntimeOwnerMap;\n  };\n  holder[OWNERS] ??= new Map();\n  return holder[OWNERS];\n}\n\nfunction recoveryMap(): EmbeddedBillingRuntimeRecoveryMap {\n  const holder = globalThis as typeof globalThis & {\n    [RECOVERY_ATTEMPTS]?: EmbeddedBillingRuntimeRecoveryMap;\n  };\n  holder[RECOVERY_ATTEMPTS] ??= new Map();\n  return holder[RECOVERY_ATTEMPTS];\n}\n\nexport function runEmbeddedBillingRuntimeRecoveryOnce<T>(\n  ownerKey: string,\n  run: () => Promise<T>,\n  projectJoinedResult?: (result: T) => Promise<void> | void,\n): Promise<T> {\n  const existing = recoveryMap().get(ownerKey);\n  if (existing != null) {\n    return existing.then(async (result) => {\n      await projectJoinedResult?.(result as T);\n      return result as T;\n    });\n  }\n  const started = Promise.resolve().then(run);\n  const tracked = started.then(\n    (result) => {\n      recoveryMap().delete(ownerKey);\n      return result;\n    },\n    (error: unknown) => {\n      recoveryMap().delete(ownerKey);\n      throw error;\n    },\n  );\n  tracked.catch(() => undefined);\n  recoveryMap().set(ownerKey, tracked);\n  return tracked;\n}\n\nexport function fingerprintBillingDatabaseIdentity(\n  databaseUri: string | undefined\n): string {\n  const trimmed = databaseUri?.trim();\n  if (trimmed == null || trimmed.length === 0) {\n    return \"memory\";\n  }\n  return sha256HexUtf8(trimmed);\n}\n\nexport function embeddedBillingRuntimeOwnerKey(input: {\n  applicationId?: string | null;\n  databaseIdentity?: string;\n}): string {\n  const applicationId = input.applicationId?.trim();\n  return `${applicationId != null && applicationId.length > 0 ? applicationId : \"_\"}\\0${input.databaseIdentity ?? \"memory\"}`;\n}\n\nexport function claimEmbeddedBillingRuntimeOwner(key: string): {\n  generation: number;\n  isCurrent: () => boolean;\n} {\n  const owners = ownerMap();\n  const previous = owners.get(key);\n  const toDrain = [...(previous?.schedulers ?? [])];\n  for (const handle of toDrain) {\n    handle.cancel();\n  }\n  const generation = (previous?.generation ?? 0) + 1;\n  const drained = previous?.mutex ?? Promise.resolve();\n  owners.set(key, {\n    generation,\n    mutex: drained.then(async () => {\n      await Promise.all(toDrain.map((handle) => handle.drain()));\n    }),\n    schedulers: [],\n  });\n  return {\n    generation,\n    isCurrent: () => ownerMap().get(key)?.generation === generation,\n  };\n}\n\nexport async function runExclusiveEmbeddedBillingRuntime<T>(\n  key: string,\n  generation: number,\n  work: () => Promise<T>\n): Promise<T | undefined> {\n  const owners = ownerMap();\n  const record = owners.get(key);\n  if (record == null || record.generation !== generation) {\n    return;\n  }\n  let result: T | undefined;\n  const run = record.mutex.then(async () => {\n    if (ownerMap().get(key)?.generation !== generation) {\n      return;\n    }\n    result = await work();\n  });\n  record.mutex = run.then(\n    () => undefined,\n    () => undefined\n  );\n  await run;\n  return result;\n}\n\nexport function retainEmbeddedBillingRuntimeScheduler(\n  key: string,\n  generation: number,\n  handle: BillingSchedulerHandle | null\n): void {\n  if (handle == null) {\n    return;\n  }\n  const record = ownerMap().get(key);\n  if (record == null || record.generation !== generation) {\n    handle.cancel();\n    return;\n  }\n  record.schedulers.push(handle);\n}\n\nexport function bindEmbeddedBillingRuntimeSurfaces(\n  key: string,\n  generation: number,\n  surfaces: EmbeddedBillingRuntimeSurfaces\n): void {\n  const record = ownerMap().get(key);\n  if (record == null || record.generation !== generation) {\n    return;\n  }\n  if (surfaces.dispatch !== undefined) {\n    record.dispatch = surfaces.dispatch;\n  }\n  if (surfaces.eventIngress !== undefined) {\n    record.eventIngress = surfaces.eventIngress;\n  }\n}\n\nexport function peekEmbeddedBillingRuntimeSurfaces(\n  key: string | undefined\n): EmbeddedBillingRuntimeSurfaces | undefined {\n  if (key == null || key.length === 0) {\n    return;\n  }\n  const record = ownerMap().get(key);\n  if (record == null) {\n    return;\n  }\n  return {\n    ...(record.dispatch === undefined ? {} : { dispatch: record.dispatch }),\n    ...(record.eventIngress === undefined\n      ? {}\n      : { eventIngress: record.eventIngress }),\n  };\n}\n\nexport async function releaseEmbeddedBillingRuntimeOwner(\n  key: string,\n  generation: number\n): Promise<void> {\n  const owners = ownerMap();\n  const record = owners.get(key);\n  if (record == null || record.generation !== generation) {\n    return;\n  }\n  for (const handle of record.schedulers) {\n    handle.cancel();\n  }\n  await Promise.all(record.schedulers.map((handle) => handle.drain()));\n  if (owners.get(key)?.generation === generation) {\n    owners.delete(key);\n  }\n}\n\n/** Test helper — not a product API. */\nexport function resetEmbeddedBillingRuntimeOwnersForTests(): void {\n  ownerMap().clear();\n}\n","import { ATHENA_AUTH_TABLES } from \"../auth/contract/index.ts\";\nimport type {\n  NotificationPreferenceApplyManyResult,\n  NotificationPreferenceDeleteInput,\n  NotificationPreferenceListInput,\n  NotificationPreferenceSqlExecutor,\n  NotificationPreferenceStore,\n  NotificationPreferenceStoreMutation,\n  NotificationPreferenceUpsertInput,\n} from \"./store.ts\";\nimport { assertSinglePreferenceScope } from \"./store.ts\";\nimport type {\n  NotificationChannelId,\n  NotificationDigest,\n  NotificationPreferenceOverride,\n  NotificationPreferenceRow,\n} from \"./types.ts\";\n\nconst TABLE = ATHENA_AUTH_TABLES.notificationPreferences;\n\ntype PreferenceSqlRow = {\n  channel: string;\n  created_at: Date | string;\n  digest: string | null;\n  enabled: boolean;\n  id: string;\n  metadata: unknown;\n  organization_id: string | null;\n  topic: string;\n  updated_at: Date | string;\n  user_id: string;\n};\n\nfunction asIso(value: Date | string): string {\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n  return value;\n}\n\nfunction asMetadata(value: unknown): Record<string, unknown> {\n  if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n    return value as Record<string, unknown>;\n  }\n  return {};\n}\n\nfunction hydrate(row: PreferenceSqlRow): NotificationPreferenceRow {\n  return {\n    channel: row.channel as NotificationChannelId,\n    createdAt: asIso(row.created_at),\n    digest: row.digest as NotificationDigest | null,\n    enabled: row.enabled,\n    id: row.id,\n    metadata: asMetadata(row.metadata),\n    organizationId: row.organization_id,\n    topic: row.topic,\n    updatedAt: asIso(row.updated_at),\n    userId: row.user_id,\n  };\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\nasync function deleteOne(\n  db: NotificationPreferenceSqlExecutor,\n  input: NotificationPreferenceDeleteInput\n): Promise<boolean> {\n  const organizationId = input.organizationId ?? null;\n  const result = await db.query(\n    organizationId === null\n      ? `DELETE FROM ${TABLE}\n\t\t\t\t WHERE user_id = $1 AND channel = $2 AND topic = $3 AND organization_id IS NULL\n\t\t\t\t RETURNING id`\n      : `DELETE FROM ${TABLE}\n\t\t\t\t WHERE user_id = $1 AND channel = $2 AND topic = $3 AND organization_id = $4\n\t\t\t\t RETURNING id`,\n    organizationId === null\n      ? [input.userId, input.channel, input.topic]\n      : [input.userId, input.channel, input.topic, organizationId]\n  );\n  return result.rows.length > 0;\n}\n\nasync function deleteManyRows(\n  db: NotificationPreferenceSqlExecutor,\n  inputs: readonly NotificationPreferenceDeleteInput[]\n): Promise<number> {\n  if (inputs.length === 0) {\n    return 0;\n  }\n  const scope = assertSinglePreferenceScope(inputs);\n  if (!scope) {\n    return 0;\n  }\n  if (inputs.length === 1) {\n    const first = inputs[0];\n    if (!first) {\n      return 0;\n    }\n    return (await deleteOne(db, first)) ? 1 : 0;\n  }\n  const values: unknown[] = [scope.userId];\n  const tuples: string[] = [];\n  let param = 2;\n  for (const input of inputs) {\n    tuples.push(`($${param++}::text, $${param++}::text)`);\n    values.push(input.channel, input.topic);\n  }\n  if (scope.organizationId === null) {\n    const result = await db.query(\n      `DELETE FROM ${TABLE} AS p\n\t\t\t USING (VALUES ${tuples.join(\", \")}) AS target(channel, topic)\n\t\t\t WHERE p.user_id = $1\n\t\t\t   AND p.organization_id IS NULL\n\t\t\t   AND p.channel = target.channel\n\t\t\t   AND p.topic = target.topic\n\t\t\t RETURNING p.id`,\n      values\n    );\n    return result.rows.length;\n  }\n  values.splice(1, 0, scope.organizationId);\n  param = 3;\n  const orgTuples: string[] = [];\n  const orgValues: unknown[] = [scope.userId, scope.organizationId];\n  for (const input of inputs) {\n    orgTuples.push(`($${param++}::text, $${param++}::text)`);\n    orgValues.push(input.channel, input.topic);\n  }\n  const result = await db.query(\n    `DELETE FROM ${TABLE} AS p\n\t\t USING (VALUES ${orgTuples.join(\", \")}) AS target(channel, topic)\n\t\t WHERE p.user_id = $1\n\t\t   AND p.organization_id = $2\n\t\t   AND p.channel = target.channel\n\t\t   AND p.topic = target.topic\n\t\t RETURNING p.id`,\n    orgValues\n  );\n  return result.rows.length;\n}\n\nasync function upsertOne(\n  db: NotificationPreferenceSqlExecutor,\n  input: NotificationPreferenceUpsertInput\n): Promise<NotificationPreferenceRow> {\n  const organizationId = input.organizationId ?? null;\n  const digest = input.digest ?? null;\n  const result = await db.query(\n    organizationId === null\n      ? `INSERT INTO ${TABLE} (\n\t\t\t\t\tid, user_id, organization_id, channel, topic, enabled, digest, metadata\n\t\t\t\t) VALUES ($1, $2, NULL, $3, $4, $5, $6, '{}'::jsonb)\n\t\t\t\tON CONFLICT (user_id, channel, topic) WHERE organization_id IS NULL\n\t\t\t\tDO UPDATE SET\n\t\t\t\t\tenabled = EXCLUDED.enabled,\n\t\t\t\t\tdigest = EXCLUDED.digest,\n\t\t\t\t\tupdated_at = NOW()\n\t\t\t\tRETURNING *`\n      : `INSERT INTO ${TABLE} (\n\t\t\t\t\tid, user_id, organization_id, channel, topic, enabled, digest, metadata\n\t\t\t\t) VALUES ($1, $2, $3, $4, $5, $6, $7, '{}'::jsonb)\n\t\t\t\tON CONFLICT (user_id, organization_id, channel, topic) WHERE organization_id IS NOT NULL\n\t\t\t\tDO UPDATE SET\n\t\t\t\t\tenabled = EXCLUDED.enabled,\n\t\t\t\t\tdigest = EXCLUDED.digest,\n\t\t\t\t\tupdated_at = NOW()\n\t\t\t\tRETURNING *`,\n    organizationId === null\n      ? [\n          crypto.randomUUID(),\n          input.userId,\n          input.channel,\n          input.topic,\n          input.enabled,\n          digest,\n        ]\n      : [\n          crypto.randomUUID(),\n          input.userId,\n          organizationId,\n          input.channel,\n          input.topic,\n          input.enabled,\n          digest,\n        ]\n  );\n  const row = result.rows[0];\n  if (!row) {\n    return {\n      channel: input.channel,\n      createdAt: new Date().toISOString(),\n      digest,\n      enabled: input.enabled,\n      id: crypto.randomUUID(),\n      metadata: {},\n      organizationId,\n      topic: input.topic,\n      updatedAt: new Date().toISOString(),\n      userId: input.userId,\n    };\n  }\n  return hydrate(row as PreferenceSqlRow);\n}\n\nasync function upsertManyRows(\n  db: NotificationPreferenceSqlExecutor,\n  inputs: readonly NotificationPreferenceUpsertInput[]\n): Promise<NotificationPreferenceRow[]> {\n  if (inputs.length === 0) {\n    return [];\n  }\n  assertSinglePreferenceScope(inputs);\n  const organizationId = inputs[0]?.organizationId ?? null;\n  const userScoped = organizationId === null;\n  const values: unknown[] = [];\n  const tuples: string[] = [];\n  let param = 1;\n  for (const input of inputs) {\n    if (userScoped) {\n      tuples.push(\n        `($${param++}, $${param++}, NULL, $${param++}, $${param++}, $${param++}, $${param++}, '{}'::jsonb)`\n      );\n      values.push(\n        crypto.randomUUID(),\n        input.userId,\n        input.channel,\n        input.topic,\n        input.enabled,\n        input.digest ?? null\n      );\n    } else {\n      tuples.push(\n        `($${param++}, $${param++}, $${param++}, $${param++}, $${param++}, $${param++}, $${param++}, '{}'::jsonb)`\n      );\n      values.push(\n        crypto.randomUUID(),\n        input.userId,\n        input.organizationId ?? null,\n        input.channel,\n        input.topic,\n        input.enabled,\n        input.digest ?? null\n      );\n    }\n  }\n  const conflict = userScoped\n    ? `ON CONFLICT (user_id, channel, topic) WHERE organization_id IS NULL\n\t\t\t DO UPDATE SET\n\t\t\t\tenabled = EXCLUDED.enabled,\n\t\t\t\tdigest = EXCLUDED.digest,\n\t\t\t\tupdated_at = NOW()`\n    : `ON CONFLICT (user_id, organization_id, channel, topic) WHERE organization_id IS NOT NULL\n\t\t\t DO UPDATE SET\n\t\t\t\tenabled = EXCLUDED.enabled,\n\t\t\t\tdigest = EXCLUDED.digest,\n\t\t\t\tupdated_at = NOW()`;\n  const result = await db.query(\n    `INSERT INTO ${TABLE} (\n\t\t\tid, user_id, organization_id, channel, topic, enabled, digest, metadata\n\t\t) VALUES ${tuples.join(\", \")}\n\t\t${conflict}\n\t\tRETURNING *`,\n    values\n  );\n  return result.rows.map((row) => hydrate(row as PreferenceSqlRow));\n}\n\nexport function createPostgresNotificationPreferenceStore(\n  db: NotificationPreferenceSqlExecutor\n): NotificationPreferenceStore {\n  return {\n    async applyMany(\n      operations: readonly NotificationPreferenceStoreMutation[]\n    ): Promise<NotificationPreferenceApplyManyResult> {\n      if (operations.length === 0) {\n        return { deleted: 0, upserted: [] };\n      }\n      assertSinglePreferenceScope(operations);\n      const resets = operations.filter(\n        (operation) => operation.operation === \"reset\"\n      );\n      const sets = operations.filter(\n        (operation) => operation.operation === \"set\"\n      );\n      const run = async (\n        executor: NotificationPreferenceSqlExecutor\n      ): Promise<NotificationPreferenceApplyManyResult> => {\n        const deleted = await deleteManyRows(executor, resets);\n        const upserted = await upsertManyRows(executor, sets);\n        return { deleted, upserted };\n      };\n      if (resets.length > 0 && sets.length > 0) {\n        const transaction = db.transaction;\n        if (typeof transaction !== \"function\") {\n          throw new Error(\n            \"mixed preference applyMany requires a pinned SQL transaction\"\n          );\n        }\n        return transaction(run);\n      }\n      return run(db);\n    },\n    async delete(input: NotificationPreferenceDeleteInput): Promise<boolean> {\n      return deleteOne(db, input);\n    },\n    async deleteMany(\n      inputs: readonly NotificationPreferenceDeleteInput[]\n    ): Promise<number> {\n      return deleteManyRows(db, inputs);\n    },\n    async list(\n      input: NotificationPreferenceListInput\n    ): Promise<NotificationPreferenceOverride[]> {\n      const result = await db.query(\n        `SELECT id, user_id, organization_id, channel, topic, enabled, digest, metadata, created_at, updated_at\n\t\t\t\t FROM ${TABLE}\n\t\t\t\t WHERE user_id = $1`,\n        [input.userId]\n      );\n      return result.rows.map((row) =>\n        toOverride(hydrate(row as PreferenceSqlRow))\n      );\n    },\n    async upsert(\n      input: NotificationPreferenceUpsertInput\n    ): Promise<NotificationPreferenceRow> {\n      return upsertOne(db, input);\n    },\n    async upsertMany(\n      inputs: readonly NotificationPreferenceUpsertInput[]\n    ): Promise<NotificationPreferenceRow[]> {\n      return upsertManyRows(db, inputs);\n    },\n  };\n}\n","import {\n\ttype AthenaModelAuthorizationBinding,\n\tfingerprintAthenaModelAuthorizationBinding,\n} from \"./model-binding.ts\";\nimport type { NormalizedAthenaAuthorizationConfig } from \"./config.ts\";\n\nexport const ATHENA_AUTHORIZATION_MODEL_INDEX_KIND =\n\t\"athena.authorization.model-index\" as const;\nexport const ATHENA_AUTHORIZATION_MODEL_INDEX_IR_VERSION = 1 as const;\n\nexport interface AthenaAuthorizationModelIndex {\n\treadonly bindings: readonly AthenaModelAuthorizationBinding[];\n\treadonly get: (resource: string) => AthenaModelAuthorizationBinding | undefined;\n\treadonly irVersion: typeof ATHENA_AUTHORIZATION_MODEL_INDEX_IR_VERSION;\n\treadonly kind: typeof ATHENA_AUTHORIZATION_MODEL_INDEX_KIND;\n\treadonly registryFingerprint: string;\n\treadonly rightsFingerprint: string;\n}\n\nconst MODEL_INDEX = Symbol.for(\"@xylex-group/athena.authorization.modelIndex\");\nconst MODEL_INDEX_MAP = Symbol.for(\n\t\"@xylex-group/athena.authorization.modelIndexMap\",\n);\n\ntype ModelIndexHolder = typeof globalThis & {\n\t[MODEL_INDEX_MAP]?: WeakMap<object, AthenaAuthorizationModelIndex>;\n};\n\ntype IndexedObject = object & {\n\t[MODEL_INDEX]?: AthenaAuthorizationModelIndex;\n};\n\nfunction modelIndexMap(): WeakMap<object, AthenaAuthorizationModelIndex> {\n\tconst holder = globalThis as ModelIndexHolder;\n\tholder[MODEL_INDEX_MAP] ??= new WeakMap();\n\treturn holder[MODEL_INDEX_MAP];\n}\n\nfunction createBindingLookup(\n\tbindings: readonly AthenaModelAuthorizationBinding[],\n): Map<string, AthenaModelAuthorizationBinding> {\n\tconst lookup = new Map<string, AthenaModelAuthorizationBinding>();\n\tfor (const binding of bindings) {\n\t\tlookup.set(binding.resource.canonicalResource, binding);\n\t\tlookup.set(binding.resource.model, binding);\n\t\tlookup.set(binding.resource.table, binding);\n\t}\n\treturn lookup;\n}\n\nfunction fallbackRegistryFingerprint(\n\tbindings: readonly AthenaModelAuthorizationBinding[],\n): string {\n\treturn JSON.stringify(\n\t\tbindings.map((binding) => ({\n\t\t\tfingerprint: fingerprintAthenaModelAuthorizationBinding(binding),\n\t\t\tresource: binding.resource.canonicalResource,\n\t\t})),\n\t);\n}\n\nexport function createAthenaAuthorizationModelIndex(\n\tconfig: NormalizedAthenaAuthorizationConfig,\n): AthenaAuthorizationModelIndex {\n\tconst bindings = config.bindingRegistry?.bindings ?? Object.freeze([]);\n\tconst lookup = createBindingLookup(bindings);\n\tconst index = {\n\t\tbindings,\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);\n\t\t},\n\t\tirVersion: ATHENA_AUTHORIZATION_MODEL_INDEX_IR_VERSION,\n\t\tkind: ATHENA_AUTHORIZATION_MODEL_INDEX_KIND,\n\t\tregistryFingerprint:\n\t\t\tconfig.registryFingerprint ?? fallbackRegistryFingerprint(bindings),\n\t\trightsFingerprint: config.rightsState.rightsFingerprint,\n\t};\n\treturn Object.freeze(index);\n}\n\nexport function attachAthenaAuthorizationModelIndex(\n\ttarget: object,\n\tindex: AthenaAuthorizationModelIndex,\n): void {\n\tmodelIndexMap().set(target, index);\n\ttry {\n\t\tObject.defineProperty(target, MODEL_INDEX, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: index,\n\t\t\twritable: false,\n\t\t});\n\t} catch {\n\t\t// Frozen views keep the WeakMap entry only.\n\t}\n}\n\nexport function getAthenaAuthorizationModelIndex(\n\ttarget: object,\n): AthenaAuthorizationModelIndex | undefined {\n\treturn modelIndexMap().get(target) ?? (target as IndexedObject)[MODEL_INDEX];\n}\n\nexport function propagateAthenaAuthorizationModelIndex(\n\tsource: object,\n\ttarget: object,\n): AthenaAuthorizationModelIndex | undefined {\n\tconst index = getAthenaAuthorizationModelIndex(source);\n\tif (!index) {\n\t\treturn;\n\t}\n\tattachAthenaAuthorizationModelIndex(target, index);\n\treturn index;\n}\n\nexport function serializeAthenaAuthorizationModelIndex(\n\tindex: AthenaAuthorizationModelIndex,\n): string {\n\treturn JSON.stringify({\n\t\tbindings: index.bindings.map((binding) => ({\n\t\t\tfingerprint: fingerprintAthenaModelAuthorizationBinding(binding),\n\t\t\tresource: binding.resource.canonicalResource,\n\t\t})),\n\t\tirVersion: index.irVersion,\n\t\tkind: index.kind,\n\t\tregistryFingerprint: index.registryFingerprint,\n\t\trightsFingerprint: index.rightsFingerprint,\n\t});\n}\n","/**\n * Billing materializer — selects and constructs exactly one plan binding.\n */\n\nimport {\n  type AthenaBillingModule,\n  createBillingModule,\n} from \"../../billing/module.ts\";\nimport {\n  createBillingRuntimeFacade,\n  createUnavailableBillingFacade,\n} from \"../../billing/runtime/facade.ts\";\nimport {\n  billingSqlFromPostgresRuntime,\n  bootstrapLocalBillingRuntime,\n  createLocalBillingRuntimeBinding,\n  type MaterializedLocalBillingRuntime,\n} from \"../../billing/runtime/local/materialize.ts\";\nimport { createBillingProviderRegistry } from \"../../billing/runtime/local/providers/create-registry.ts\";\nimport { createRemoteBillingRuntime } from \"../../billing/runtime/remote/runtime.ts\";\nimport type { AthenaPostgresRuntime } from \"../../postgres/owned-runtime.ts\";\nimport type { AthenaRuntimePlan } from \"../plan/types.ts\";\n\nexport { bootstrapLocalBillingRuntime, createBillingProviderRegistry };\n\nexport type AthenaMaterializedBilling =\n  | ({\n      kind: \"local\";\n      module: ReturnType<typeof createBillingRuntimeFacade>;\n    } & MaterializedLocalBillingRuntime)\n  | {\n      kind: \"remote\";\n      module: AthenaBillingModule;\n      runtime: ReturnType<typeof createRemoteBillingRuntime>;\n    }\n  | {\n      kind: \"unavailable\";\n      module: ReturnType<typeof createUnavailableBillingFacade>;\n    };\n\nfunction materializeBillingBinding(\n  plan: AthenaRuntimePlan,\n  postgresRuntime?: AthenaPostgresRuntime,\n): AthenaMaterializedBilling {\n  const billing = plan.billing;\n  if (billing.kind === \"local\") {\n    const binding = createLocalBillingRuntimeBinding({\n      applicationId: billing.applicationId,\n      appUrl: billing.appUrl,\n      catalog: billing.catalog,\n      configuredProviders: billing.providers,\n      customerImport: billing.customerImport,\n      ingestion: billing.ingestion,\n      mode: billing.mode,\n      observability: billing.observability,\n      ...(postgresRuntime\n        ? { sql: billingSqlFromPostgresRuntime(postgresRuntime) }\n        : {}),\n      selfEnrollment: billing.selfEnrollment,\n      testMode: billing.testMode,\n    });\n    return {\n      ...binding,\n      kind: \"local\",\n      module: createBillingRuntimeFacade(binding.runtime),\n    };\n  }\n\n  if (billing.kind === \"remote\") {\n    const baseUrl = billing.endpoint;\n    if (!baseUrl) {\n      return {\n        kind: \"unavailable\",\n        module: createUnavailableBillingFacade(\n          \"Athena billing has no runnable remote transport.\",\n        ),\n      };\n    }\n    const clientConfig = {\n      apiKey: billing.apiKey ?? \"\",\n      baseUrl,\n      client: billing.client,\n      headers: billing.headers,\n    };\n    const runtime = createRemoteBillingRuntime(clientConfig);\n    const compatibility = createBillingModule(clientConfig, runtime);\n    return {\n      kind: \"remote\",\n      module: createBillingRuntimeFacade(runtime, compatibility),\n      runtime,\n    };\n  }\n\n  return {\n    kind: \"unavailable\",\n    module: createUnavailableBillingFacade(),\n  };\n}\n\nexport function materializeBillingPlan(\n  plan: AthenaRuntimePlan,\n  postgresRuntime?: AthenaPostgresRuntime,\n): AthenaMaterializedBilling {\n  return materializeBillingBinding(plan, postgresRuntime);\n}\n\nexport { materializeBillingCompat as materializeBilling } from \"../compat/materializers.ts\";\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport { AthenaBillingCapabilityError } from \"../errors.ts\";\nimport type { AthenaBillingModule } from \"../module.ts\";\nimport {\n  invokeBillingRuntimePort,\n  type AthenaBillingRuntimeDispatch,\n  type BillingRuntimeDispatchOperation,\n} from \"./dispatch.ts\";\n\ntype FlatMember =\n  | \"cancelPayment\"\n  | \"cancelRefund\"\n  | \"cancelSubscription\"\n  | \"createCheckout\"\n  | \"createConnection\"\n  | \"createCustomer\"\n  | \"createPayment\"\n  | \"createPaymentLink\"\n  | \"createRefund\"\n  | \"createSubscription\"\n  | \"createWebhook\"\n  | \"deleteConnection\"\n  | \"deleteCustomer\"\n  | \"deletePaymentLink\"\n  | \"deleteWebhook\"\n  | \"getConnection\"\n  | \"getCustomer\"\n  | \"getDebugBilling\"\n  | \"getInvoice\"\n  | \"getPayment\"\n  | \"getPaymentLink\"\n  | \"getRefund\"\n  | \"getSubscription\"\n  | \"getWebhook\"\n  | \"ingestProviderWebhook\"\n  | \"listConnections\"\n  | \"listCustomers\"\n  | \"listGrants\"\n  | \"listInvoices\"\n  | \"listPaymentLinks\"\n  | \"listPayments\"\n  | \"listPrices\"\n  | \"listProducts\"\n  | \"listProviders\"\n  | \"listRefunds\"\n  | \"listSinkHelpers\"\n  | \"listSubscriptions\"\n  | \"listWebhookEvents\"\n  | \"listWebhooks\"\n  | \"provisionWebhookSinks\"\n  | \"reconcileDocument\"\n  | \"testWebhook\"\n  | \"updateConnection\"\n  | \"updateCustomer\"\n  | \"updatePaymentLink\"\n  | \"updateSubscription\"\n  | \"updateWebhook\";\n\ntype FlatDisposition =\n  | BillingRuntimeDispatchOperation\n  | \"compound_identity\"\n  | \"unsupported\";\n\nconst FLAT_OPERATIONS: Record<FlatMember, FlatDisposition> = {\n  cancelPayment: \"payments.cancel\",\n  cancelRefund: \"refunds.cancel\",\n  cancelSubscription: \"compound_identity\",\n  createCheckout: \"checkout.create\",\n  createConnection: \"unsupported\",\n  createCustomer: \"customers.create\",\n  createPayment: \"payments.create\",\n  createPaymentLink: \"paymentLinks.create\",\n  createRefund: \"refunds.create\",\n  createSubscription: \"subscriptions.create\",\n  createWebhook: \"webhooks.create\",\n  deleteConnection: \"unsupported\",\n  deleteCustomer: \"customers.delete\",\n  deletePaymentLink: \"paymentLinks.delete\",\n  deleteWebhook: \"webhooks.delete\",\n  getConnection: \"unsupported\",\n  getCustomer: \"customers.get\",\n  getDebugBilling: \"unsupported\",\n  getInvoice: \"invoices.get\",\n  getPayment: \"payments.get\",\n  getPaymentLink: \"paymentLinks.get\",\n  getRefund: \"refunds.get\",\n  getSubscription: \"compound_identity\",\n  getWebhook: \"webhooks.get\",\n  ingestProviderWebhook: \"unsupported\",\n  listConnections: \"unsupported\",\n  listCustomers: \"customers.list\",\n  listGrants: \"unsupported\",\n  listInvoices: \"invoices.list\",\n  listPaymentLinks: \"paymentLinks.list\",\n  listPayments: \"payments.list\",\n  listPrices: \"prices.list\",\n  listProducts: \"products.list\",\n  listProviders: \"unsupported\",\n  listRefunds: \"refunds.list\",\n  listSinkHelpers: \"unsupported\",\n  listSubscriptions: \"subscriptions.list\",\n  listWebhookEvents: \"unsupported\",\n  listWebhooks: \"webhooks.list\",\n  provisionWebhookSinks: \"unsupported\",\n  reconcileDocument: \"unsupported\",\n  testWebhook: \"webhooks.test\",\n  updateConnection: \"unsupported\",\n  updateCustomer: \"customers.update\",\n  updatePaymentLink: \"paymentLinks.update\",\n  updateSubscription: \"compound_identity\",\n  updateWebhook: \"webhooks.update\",\n};\n\nfunction isFlatMember(value: string): value is FlatMember {\n  return value in FLAT_OPERATIONS;\n}\n\nfunction withId(id: unknown, input: unknown): Record<string, unknown> {\n  return {\n    ...(input != null && typeof input === \"object\"\n      ? (input as Record<string, unknown>)\n      : {}),\n    id,\n  };\n}\n\nfunction unsupportedFlatOperation(name: string): never {\n  throw new AthenaBillingCapabilityError({\n    message: `Billing compatibility operation ${name} cannot be losslessly adapted to the selected runtime.`,\n    operation: name,\n    reason: \"unsupported_operation\",\n  });\n}\n\nfunction withSubscriptionId(\n  id: unknown,\n  input: unknown,\n  operation: string\n): Record<string, unknown> {\n  const record =\n    input != null && typeof input === \"object\" && !Array.isArray(input)\n      ? (input as Record<string, unknown>)\n      : undefined;\n  if (\n    record == null ||\n    typeof record.customerId !== \"string\" ||\n    record.customerId.length === 0\n  ) {\n    return unsupportedFlatOperation(operation);\n  }\n  return {\n    ...record,\n    subscriptionId: id,\n  };\n}\n\nfunction flatPayload(name: string, args: readonly unknown[]): unknown {\n  switch (name) {\n    case \"cancelPayment\":\n    case \"cancelRefund\":\n    case \"deleteCustomer\":\n    case \"deletePaymentLink\":\n    case \"getCustomer\":\n    case \"getInvoice\":\n    case \"getPayment\":\n    case \"getPaymentLink\":\n    case \"getRefund\":\n    case \"getWebhook\":\n    case \"testWebhook\":\n      return withId(args[0], args[1]);\n    case \"cancelSubscription\":\n      return withSubscriptionId(args[0], args[1], \"subscriptions.cancel\");\n    case \"getSubscription\":\n      return withSubscriptionId(args[0], args[1], \"subscriptions.get\");\n    case \"createWebhook\":\n      return {\n        ...(args[0] != null && typeof args[0] === \"object\"\n          ? (args[0] as Record<string, unknown>)\n          : {}),\n        ...(args[1] != null && typeof args[1] === \"object\"\n          ? (args[1] as Record<string, unknown>)\n          : {}),\n      };\n    case \"updateWebhook\":\n      return {\n        ...withId(args[0], args[1]),\n        ...(args[2] != null && typeof args[2] === \"object\"\n          ? (args[2] as Record<string, unknown>)\n          : {}),\n      };\n    case \"updateSubscription\":\n      return withSubscriptionId(args[0], args[1], \"subscriptions.update\");\n    case \"createCheckout\":\n    case \"createCustomer\":\n    case \"createPayment\":\n    case \"createPaymentLink\":\n    case \"createRefund\":\n    case \"createSubscription\":\n    case \"listCustomers\":\n    case \"listInvoices\":\n    case \"listPaymentLinks\":\n    case \"listPayments\":\n    case \"listPrices\":\n    case \"listProducts\":\n    case \"listRefunds\":\n    case \"listSubscriptions\":\n    case \"listWebhooks\":\n      return args[0] ?? {};\n    case \"updateCustomer\":\n    case \"updatePaymentLink\":\n      return withId(args[0], args[1]);\n    default:\n      return args[0] ?? {};\n  }\n}\n\nexport function createBillingRuntimeFacade(\n  runtime: AthenaBillingRuntimeDispatch,\n  compatibility?: AthenaBillingModule\n): AthenaBillingModule {\n  const canonical = {\n    ...(compatibility ?? {}),\n    admin: runtime.admin,\n    catalog: {\n      prices: runtime.prices,\n      products: runtime.products,\n      relations: runtime.relations,\n    },\n    checkout: runtime.checkout,\n    customers: runtime.customers,\n    getCapabilities: runtime.getCapabilities,\n    health: runtime.health,\n    invoices: runtime.invoices,\n    paymentLinks: runtime.paymentLinks,\n    payments: runtime.payments,\n    refunds: runtime.refunds,\n    self: runtime.self,\n    subscriptions: runtime.subscriptions,\n    webhooks: runtime.webhooks,\n  };\n\n  return new Proxy(canonical, {\n    get(target, property, receiver) {\n      if (typeof property !== \"string\") {\n        return Reflect.get(target, property, receiver);\n      }\n\n      const existing = Reflect.get(target, property, receiver);\n      if (existing !== undefined) {\n        return existing;\n      }\n      if (!isFlatMember(property)) {\n        return undefined;\n      }\n      const operation = FLAT_OPERATIONS[property];\n      if (operation === \"unsupported\") {\n        return async (..._args: readonly unknown[]) =>\n          unsupportedFlatOperation(property);\n      }\n      if (operation === \"compound_identity\") {\n        return async (...args: readonly unknown[]) =>\n          invokeBillingRuntimePort(\n            runtime,\n            property === \"cancelSubscription\"\n              ? \"subscriptions.cancel\"\n              : property === \"getSubscription\"\n                ? \"subscriptions.get\"\n                : \"subscriptions.update\",\n            flatPayload(property, args)\n          );\n      }\n      return (...args: readonly unknown[]) =>\n        invokeBillingRuntimePort(\n          runtime,\n          operation,\n          flatPayload(property, args)\n        );\n    },\n  }) as AthenaBillingModule;\n}\n\nexport function createUnavailableBillingFacade(\n  reason = \"Athena billing is not configured.\"\n): AthenaBillingModule {\n  const fail = (): never => {\n    throw new AthenaConfigurationError(\n      \"ATHENA_SERVICE_NOT_CONFIGURED\",\n      reason,\n      \"billing\"\n    );\n  };\n  const namespace = (): unknown =>\n    new Proxy(fail, {\n      apply: fail,\n      get: () => namespace(),\n    });\n  return namespace() as AthenaBillingModule;\n}\n","import { athenaAuthConfig } from \"../../../auth/config.ts\";\nimport { assertLocalAuthHooks } from \"../../../auth/hooks/assert-local.ts\";\nimport { assertLocalAuthObservability } from \"../../../auth/observability/config.ts\";\nimport {\n  type AthenaClient,\n  type AthenaClientConfig,\n  createClientWithNormalizer,\n  normalizeUniversalCreateClientConfig,\n} from \"../../../client/create-client.ts\";\nimport { AthenaConfigurationError } from \"../../../config/errors.ts\";\nimport {\n  AthenaBillingCapabilityError,\n  AthenaBillingProviderError,\n} from \"../../errors.ts\";\nimport {\n  getAthenaClientInternals,\n  type AthenaClientOwnedRuntime,\n} from \"../../../runtime/client-internals.ts\";\nimport { assertDataLifecycleConfig } from \"../../../runtime/data/lifecycle/assert.ts\";\nimport { materializeDatabase } from \"../../../runtime/materializers/database.ts\";\nimport { resolveAthenaConstruction } from \"../../../runtime/construction/resolve.ts\";\nimport { createAthenaRuntimeReadiness } from \"../../../runtime/readiness/index.ts\";\nimport { normalizeUniversalConfig } from \"../../../runtime/plan/normalize.ts\";\nimport { resolveRuntimePlan } from \"../../../runtime/plan/resolve.ts\";\nimport { resolveDatabaseUri } from \"../../../runtime/resolve.ts\";\nimport type { AthenaBillingConfig } from \"../../create-client-config.ts\";\nimport { shouldAutomaticallyImportBillingCustomers } from \"../../import/automatic.ts\";\nimport { resolveBillingWebhookApplicationId } from \"../../ingestion/application-id.ts\";\nimport {\n  assertAthenaBillingIngestion,\n  signingSecretsFromWebhookConfig,\n} from \"../../ingestion/config.ts\";\nimport {\n  type BillingConnectionSigningSecretCache,\n  createPostgresBillingWebhookSecretStore,\n  rememberConnectionSigningSecret,\n  rememberConnectionSigningSecretSet,\n  resolveBillingWebhookMasterKey,\n  signingSecretsForConnection,\n} from \"../../ingestion/secrets/index.ts\";\nimport type { AthenaBillingModule } from \"../../module.ts\";\nimport type { AthenaBillingRuntimeDispatch } from \"../dispatch.ts\";\nimport type { BillingAdminBootstrapRetryResult } from \"../admin/types.ts\";\nimport { createBillingRuntimeFacade } from \"../facade.ts\";\nimport {\n  assertLocalBillingObservability,\n  normalizeAthenaBillingObservability,\n} from \"../../observability/config.ts\";\nimport { purgeBillingObservability } from \"../../observability/retention.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport {\n  DEFAULT_BILLING_PLAN_CHANGE_RECOVERY_SCHEDULE,\n  DEFAULT_BILLING_WEBHOOK_RECONCILIATION_SCHEDULE,\n  registerEmbeddedBillingScheduler,\n} from \"../../reconciliation/scheduler.ts\";\nimport { isBillingSelfPlanChangeEnabled } from \"../../self-enrollment.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { AthenaBillingCatalogConfig } from \"../../types.ts\";\nimport { createPlanChangeRecoveryRuntime } from \"../../workflows/plan-change/plan-change-recovery-runtime.ts\";\nimport {\n  type AthenaBillingInspectedConnection,\n  patchBillingDiagnostics,\n} from \"../diagnostics.ts\";\nimport { resolveBillingEnvironment } from \"../environment.ts\";\nimport type { BillingCredentialKind } from \"../credentials.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport {\n  assertLocalBillingRuntimeEnvironment,\n  type BillingRuntimeModePreference,\n  resolveBillingRuntimeMode,\n} from \"../resolve-mode.ts\";\nimport {\n  getBoundPostgresRuntime,\n  type AthenaPostgresRuntime,\n} from \"../../../postgres/owned-runtime.ts\";\nimport {\n  configuredBillingConnectionInitKey,\n  configuredBillingConnectionConvergenceGeneration,\n  type MaterializeConfiguredBillingConnectionsResult,\n  type MaterializedBillingConnection,\n  materializeConfiguredBillingConnections,\n  retryConfiguredBillingConnectionMaterialize,\n  singleFlightConfiguredBillingConnectionMaterialize,\n} from \"./connections/materialize.ts\";\nimport { attachEventIngressRuntime } from \"./ingress/attach.ts\";\nimport {\n  bindEmbeddedBillingRuntimeSurfaces,\n  claimEmbeddedBillingRuntimeOwner,\n  embeddedBillingRuntimeOwnerKey,\n  fingerprintBillingDatabaseIdentity,\n  retainEmbeddedBillingRuntimeScheduler,\n  runEmbeddedBillingRuntimeRecoveryOnce,\n  runExclusiveEmbeddedBillingRuntime,\n} from \"./process-ownership.ts\";\nimport { assertBillingProviderRuntimeEnvironment } from \"./providers/config.ts\";\nimport { normalizeBillingProviderConfiguration } from \"./providers/configuration/index.ts\";\nimport { createBillingProviderRegistry } from \"./providers/create-registry.ts\";\nimport type { BillingProviderRegistry } from \"./providers/registry.ts\";\nimport { createLocalBillingRuntime } from \"./runtime.ts\";\n\nexport const BILLING_BOOTSTRAP_EVENT = {\n  connectionMaterialized: \"connection-materialized\",\n  importSchedulerRegistered: \"import-scheduler-registered\",\n  planChangeRecoverySchedulerRegistered:\n    \"plan-change-recovery-scheduler-registered\",\n  postgresReady: \"postgres-ready\",\n  providerRegistryReady: \"provider-registry-ready\",\n  runtimeReady: \"runtime-ready\",\n  webhookSchedulerRegistered: \"webhook-scheduler-registered\",\n} as const;\n\nfunction recordBillingBootstrapEvent(\n  events: string[] | undefined,\n  event: string\n): void {\n  events?.push(event);\n}\n\nfunction hasPlanChangeProvider(registry: BillingProviderRegistry): boolean {\n  return registry\n    .list()\n    .some((runtime) => runtime.prices != null && runtime.subscriptions != null);\n}\n\nfunction billingSqlFromInternals(client: {\n  billing: AthenaBillingModule;\n}): BillingSqlExecutor | undefined {\n  const internals = getAthenaClientInternals(client);\n  const owned = internals?.postgresRuntime;\n  if (!owned) {\n    return;\n  }\n  return billingSqlFromPostgresRuntime(owned);\n}\n\nexport function billingSqlFromPostgresRuntime(\n  owned: AthenaClientOwnedRuntime | AthenaPostgresRuntime\n): BillingSqlExecutor {\n  return {\n    async query(sql, params) {\n      const result = await owned.query(\n        sql,\n        params != null && params.length > 0 ? [...params] : undefined\n      );\n      return { rows: result.rows as Record<string, unknown>[] };\n    },\n    async transaction<T>(fn: (transaction: BillingSqlExecutor) => Promise<T>) {\n      return owned.transaction(async (transactionRuntime) =>\n        fn({\n          async query(sql, params) {\n            const result = await transactionRuntime.query(\n              sql,\n              params != null && params.length > 0 ? [...params] : undefined\n            );\n            return { rows: result.rows as Record<string, unknown>[] };\n          },\n        })\n      );\n    },\n  };\n}\n\nexport interface MaterializedLocalBillingRuntime {\n  bootstrapReadiness: {\n    fail(error: unknown): void;\n    reset(): void;\n    succeed(): void;\n    wait(): Promise<void>;\n  };\n  connectionState: {\n    bootstrap: BillingBootstrapState;\n    bootstrapRetry?: () => Promise<BillingAdminBootstrapRetryResult>;\n    connections: MaterializedBillingConnection[];\n    initializationFailed?: boolean;\n    initializationMessage?: string;\n    initialized: boolean;\n    recoveryCoordinatorEnabled: boolean;\n  };\n  ingestion: ReturnType<typeof assertAthenaBillingIngestion>;\n  observability: ReturnType<typeof normalizeAthenaBillingObservability>;\n  readiness: ReturnType<typeof createAthenaRuntimeReadiness>;\n  registry: BillingProviderRegistry;\n  runtime: AthenaBillingRuntimeDispatch;\n  sql?: BillingSqlExecutor;\n  testMode: boolean;\n  webhookApplicationId?: string;\n}\n\nexport type BillingBootstrapPhase =\n  | \"uninitialized\"\n  | \"provider-registry-ready\"\n  | \"persistence-ready\"\n  | \"materializing-connections\"\n  | \"verifying-connections\"\n  | \"reconciling-ingress\"\n  | \"registering-schedulers\"\n  | \"ready\"\n  | \"failed\"\n  | \"recovering\";\n\nexport interface BillingBootstrapFailure {\n  code: string;\n  retryable: boolean;\n  sanitizedMessage: string;\n  stage: BillingBootstrapPhase;\n}\n\nexport interface BillingBootstrapState {\n  failedAt?: Date;\n  generation: number;\n  lastError?: BillingBootstrapFailure;\n  lastSuccessAt?: Date;\n  phase: BillingBootstrapPhase;\n  recoveredAt?: Date;\n}\n\nfunction createRetryableBootstrapReadiness(): {\n  bootstrapReadiness: MaterializedLocalBillingRuntime[\"bootstrapReadiness\"];\n} {\n  let resolveCurrent: () => void = () => {};\n  let rejectCurrent: (error: unknown) => void = () => {};\n  let current = Promise.resolve();\n  let settled = true;\n  const reset = (): void => {\n    current = new Promise<void>((resolve, reject) => {\n      resolveCurrent = resolve;\n      rejectCurrent = reject;\n    });\n    current.catch(() => undefined);\n    settled = false;\n  };\n  reset();\n  return {\n    bootstrapReadiness: {\n      fail(error) {\n        if (!settled) {\n          settled = true;\n          rejectCurrent(error);\n        }\n      },\n      reset,\n      succeed() {\n        if (!settled) {\n          settled = true;\n          resolveCurrent();\n        }\n      },\n      wait() {\n        return current;\n      },\n    },\n  };\n}\n\nexport function createLocalBillingRuntimeBinding(input: {\n  appUrl?: string | null;\n  applicationId?: string;\n  catalog?: AthenaBillingCatalogConfig;\n  configuredProviders?: BillingProviderConfigMap;\n  customerImport?: AthenaBillingConfig[\"import\"];\n  ingestion?: AthenaBillingConfig[\"ingestion\"];\n  mode?: BillingRuntimeModePreference;\n  observability?: AthenaBillingConfig[\"observability\"];\n  registry?: BillingProviderRegistry;\n  selfEnrollment?: AthenaBillingConfig[\"selfEnrollment\"];\n  sql?: BillingSqlExecutor;\n  testMode?: boolean;\n  readiness?: ReturnType<typeof createAthenaRuntimeReadiness>;\n}): MaterializedLocalBillingRuntime {\n  const billingMode = resolveBillingRuntimeMode({\n    configuredProviders: input.configuredProviders,\n    mode: input.mode,\n  });\n  if (billingMode !== \"local\") {\n    throw new AthenaBillingProviderError({\n      code: \"ATHENA_BILLING_CONFIG_CONFLICT\",\n      message: \"Local Billing materialization requires local runtime intent.\",\n    });\n  }\n  const testMode = resolveBillingEnvironment({\n    testMode: input.testMode,\n  }).testMode;\n  const mollieKind = normalizeBillingProviderConfiguration({\n    configuredProviders: input.configuredProviders,\n    environment: testMode ? \"test\" : \"live\",\n  }).providers.get(\"mollie\")?.defaultSlot?.credentialKind as\n    | BillingCredentialKind\n    | undefined;\n  const ingestion = assertAthenaBillingIngestion({\n    appUrl: input.appUrl,\n    credentialKind: mollieKind,\n    ingestion: input.ingestion,\n    live: testMode === false,\n  });\n  const observability = normalizeAthenaBillingObservability(\n    input.observability\n  );\n  const registry =\n    input.registry ??\n    createBillingProviderRegistry(input.configuredProviders, input.catalog);\n  const webhookApplicationId = input.applicationId?.trim();\n  if (\n    ingestion.webhooks.enabled &&\n    (webhookApplicationId == null || webhookApplicationId.length === 0)\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_BILLING_APPLICATION_ID_REQUIRED\",\n      \"createClient({ app: { id } }) or client is required when billing webhook management is enabled. app.name is not a webhook ownership id.\",\n      \"billing\"\n    );\n  }\n  const bootstrapReadiness = createRetryableBootstrapReadiness();\n  const connectionState: MaterializedLocalBillingRuntime[\"connectionState\"] = {\n    bootstrap: {\n      generation: 0,\n      phase: \"uninitialized\",\n    },\n    connections: [],\n    initialized: false,\n    recoveryCoordinatorEnabled: false,\n  };\n  const readiness = input.readiness ?? createAthenaRuntimeReadiness();\n  const runtime = createLocalBillingRuntime({\n    applicationId: webhookApplicationId,\n    appUrl: input.appUrl,\n    configuredProviders: input.configuredProviders,\n    connectionState,\n    customerImport: input.customerImport,\n    ingestion: input.ingestion,\n    invocation: PROCESS_BILLING_INVOCATION,\n    observability,\n    waitForOperational: bootstrapReadiness.bootstrapReadiness.wait,\n    registry,\n    selfEnrollmentEnabled: input.selfEnrollment,\n    sql: input.sql,\n    testMode,\n  });\n  return {\n    bootstrapReadiness: bootstrapReadiness.bootstrapReadiness,\n    connectionState,\n    ingestion,\n    observability,\n    readiness,\n    registry,\n    runtime,\n    ...(input.sql ? { sql: input.sql } : {}),\n    testMode,\n    ...(webhookApplicationId ? { webhookApplicationId } : {}),\n  };\n}\n\nexport function bootstrapLocalBillingRuntime(\n  client: { billing: AthenaBillingModule },\n  input: {\n    appUrl?: string | null;\n    applicationId?: string;\n    catalog?: AthenaBillingCatalogConfig;\n    configuredProviders?: BillingProviderConfigMap;\n    customerImport?: AthenaBillingConfig[\"import\"];\n    ingestion?: AthenaBillingConfig[\"ingestion\"];\n    mode?: BillingRuntimeModePreference;\n    observability?: AthenaBillingConfig[\"observability\"];\n    registry?: BillingProviderRegistry;\n    selfEnrollment?: AthenaBillingConfig[\"selfEnrollment\"];\n    testMode?: boolean;\n    binding?: MaterializedLocalBillingRuntime;\n  }\n): void {\n  const existing = getAthenaClientInternals(client);\n  const binding =\n    input.binding ??\n    createLocalBillingRuntimeBinding({\n      ...input,\n      registry:\n        input.registry ??\n        existing?.billingProviderRegistry ??\n        createBillingProviderRegistry(input.configuredProviders, input.catalog),\n      sql: billingSqlFromInternals(client),\n      readiness: existing?.runtimeReadiness,\n    });\n  const {\n    bootstrapReadiness,\n    connectionState,\n    ingestion,\n    observability,\n    readiness: bindingReadiness,\n    registry,\n    runtime: localRuntime,\n    sql: bindingSql,\n    testMode,\n    webhookApplicationId,\n  } = binding;\n  const bootstrapEvents: string[] = [];\n  recordBillingBootstrapEvent(\n    bootstrapEvents,\n    BILLING_BOOTSTRAP_EVENT.providerRegistryReady\n  );\n  connectionState.bootstrap = {\n    generation: 0,\n    phase: \"provider-registry-ready\",\n  };\n  if (existing) {\n    patchBillingDiagnostics(existing, {\n      connectionCount: 0,\n      phase: \"provider-registry\",\n      startedAt: Date.now(),\n    });\n  }\n  const sql = bindingSql ?? billingSqlFromInternals(client);\n  const databaseIdentity = fingerprintBillingDatabaseIdentity(\n    existing ? resolveDatabaseUri(existing.config) : undefined\n  );\n  const ownerKey = embeddedBillingRuntimeOwnerKey({\n    applicationId: webhookApplicationId,\n    databaseIdentity,\n  });\n  const ownership = claimEmbeddedBillingRuntimeOwner(ownerKey);\n  if (existing) {\n    existing.billingRuntimeGeneration = ownership.generation;\n    existing.billingRuntimeOwnerKey = ownerKey;\n    existing.billingSchedulerHandles = [];\n  }\n  if (sql != null) {\n    recordBillingBootstrapEvent(\n      bootstrapEvents,\n      BILLING_BOOTSTRAP_EVENT.postgresReady\n    );\n  }\n  const webhookMasterKey = resolveBillingWebhookMasterKey({\n    configured: ingestion.webhooks.secretMasterKey,\n    databaseUrl: existing ? resolveDatabaseUri(existing.config) : undefined,\n  });\n  const secretStore =\n    sql != null && webhookMasterKey != null\n      ? createPostgresBillingWebhookSecretStore({\n          masterKey: webhookMasterKey,\n          sql,\n        })\n      : undefined;\n  const readiness =\n    existing?.runtimeReadiness ?? bindingReadiness ?? createAthenaRuntimeReadiness();\n  if (existing) {\n    existing.billingBootstrapEvents = bootstrapEvents;\n    existing.runtimeReadiness = readiness;\n  }\n  const billing = client.billing;\n  void billing;\n  const signingSecretCache: BillingConnectionSigningSecretCache = new Map();\n  const configuredSecrets = signingSecretsFromWebhookConfig(ingestion.webhooks);\n  const rememberSigningSecret = (entry: {\n    connectionId: string;\n    secret: string;\n  }): void => {\n    rememberConnectionSigningSecret(\n      signingSecretCache,\n      entry.connectionId,\n      entry.secret\n    );\n  };\n  const resolveSigningSecrets = (connectionId: string): readonly string[] =>\n    signingSecretsForConnection(signingSecretCache, connectionId);\n  if (existing) {\n    existing.billingRuntime = localRuntime;\n    existing.billingProviderRegistry = registry;\n    patchBillingDiagnostics(existing, {\n      phase: \"attaching-ingress\",\n    });\n    attachEventIngressRuntime(existing, {\n      configuredProviders: input.configuredProviders,\n      registry,\n      resolveSigningSecrets,\n      testMode,\n    });\n  }\n  bindEmbeddedBillingRuntimeSurfaces(ownerKey, ownership.generation, {\n    dispatch: localRuntime,\n    ...(existing?.eventIngressRuntime === undefined\n      ? {}\n      : { eventIngress: existing.eventIngressRuntime }),\n  });\n  const retainScheduler = (\n    handle: ReturnType<typeof registerEmbeddedBillingScheduler>,\n    schedulerOwnership = ownership,\n  ): void => {\n    if (existing && handle) {\n      existing.billingSchedulerHandles?.push(handle);\n    }\n    retainEmbeddedBillingRuntimeScheduler(\n      ownerKey,\n      schedulerOwnership.generation,\n      handle\n    );\n  };\n  const projectJoinedRecoveryResult = async (\n    result: MaterializeConfiguredBillingConnectionsResult,\n  ): Promise<void> => {\n    if (\n      connectionState.initialized &&\n      connectionState.bootstrap.phase === \"ready\"\n    ) {\n      return;\n    }\n    bootstrapReadiness.reset();\n    readiness.reset(\"billing\");\n    connectionState.connections = result.connections.map((connection) => ({\n      accountReference: connection.accountReference,\n      classicWebhookUrl: connection.classicWebhookUrl,\n      credentialReference: connection.credentialReference,\n      eventsWebhookUrl: connection.eventsWebhookUrl,\n      id: connection.id,\n      provider: connection.provider,\n    }));\n    const firstConnection = connectionState.connections[0];\n    registry.ingress = {\n      ...(firstConnection?.classicWebhookUrl\n        ? { classicWebhookUrl: firstConnection.classicWebhookUrl }\n        : {}),\n      ...(connectionState.connections.length > 0\n        ? {\n            classicWebhookUrlsByConnectionId: Object.fromEntries(\n              connectionState.connections.flatMap((connection) =>\n                connection.classicWebhookUrl == null\n                  ? []\n                  : [[connection.id, connection.classicWebhookUrl] as const],\n              ),\n            ),\n          }\n        : {}),\n    };\n    if (existing) {\n      existing.billingMaterializedConnections =\n        connectionState.connections.map((connection) => ({\n          accountReference: connection.accountReference,\n          credentialReference: connection.credentialReference,\n          id: connection.id,\n          provider: connection.provider,\n          ...(connection.classicWebhookUrl\n            ? { classicWebhookUrl: connection.classicWebhookUrl }\n            : {}),\n          ...(connection.eventsWebhookUrl\n            ? { eventsWebhookUrl: connection.eventsWebhookUrl }\n            : {}),\n        }));\n    }\n    for (const connection of connectionState.connections) {\n      if (secretStore) {\n        const stored = await secretStore.resolve(connection.id);\n        rememberConnectionSigningSecretSet(\n          signingSecretCache,\n          connection.id,\n          stored,\n        );\n      }\n      if (connectionState.connections.length === 1) {\n        rememberConnectionSigningSecretSet(\n          signingSecretCache,\n          connection.id,\n          configuredSecrets,\n        );\n      }\n    }\n    connectionState.initialized = true;\n    delete connectionState.initializationFailed;\n    delete connectionState.initializationMessage;\n    connectionState.bootstrap = {\n      generation: connectionState.bootstrap.generation + 1,\n      lastSuccessAt: new Date(),\n      phase: \"ready\",\n      recoveredAt: new Date(),\n    };\n    bootstrapReadiness.succeed();\n    readiness.ready(\"billing\");\n  };\n  const projectAdminRecoveryResult = async (\n    result: BillingAdminBootstrapRetryResult,\n  ): Promise<void> => {\n    await projectJoinedRecoveryResult({\n      connections: result.connections.map((connection) => ({\n        accountReference: connection.accountReference,\n        classicWebhookUrl: connection.classicWebhookUrl,\n        credentialReference: connection.credentialReference,\n        eventsWebhookUrl: connection.eventsWebhookUrl,\n        id: connection.id,\n        provider: connection.provider,\n      })),\n    });\n  };\n  let retryPromise: Promise<BillingAdminBootstrapRetryResult> | undefined;\n  connectionState.bootstrapRetry = () => {\n    if (retryPromise != null) {\n      return retryPromise;\n    }\n    retryPromise = runEmbeddedBillingRuntimeRecoveryOnce(ownerKey, async () => {\n      if (\n        sql == null ||\n        webhookApplicationId == null ||\n        webhookApplicationId.length === 0\n      ) {\n        throw new AthenaBillingCapabilityError({\n          operation: \"admin.bootstrap.retry\",\n          reason: \"runtime_unavailable\",\n        });\n      }\n      const key = configuredBillingConnectionInitKey({\n        applicationId: webhookApplicationId,\n        databaseIdentity,\n        testMode,\n      });\n      const generation =\n        configuredBillingConnectionConvergenceGeneration(key) + 1;\n      const retryOwnership = claimEmbeddedBillingRuntimeOwner(ownerKey);\n      if (existing) {\n        existing.billingRuntimeGeneration = retryOwnership.generation;\n        existing.billingSchedulerHandles = [];\n      }\n      bindEmbeddedBillingRuntimeSurfaces(\n        ownerKey,\n        retryOwnership.generation,\n        {\n          dispatch: localRuntime,\n          ...(existing?.eventIngressRuntime === undefined\n            ? {}\n            : { eventIngress: existing.eventIngressRuntime }),\n        },\n      );\n      connectionState.bootstrap = {\n        generation,\n        phase: \"recovering\",\n      };\n      bootstrapReadiness.reset();\n      readiness.reset(\"billing\");\n      delete connectionState.initializationFailed;\n      delete connectionState.initializationMessage;\n      const materialized = await retryConfiguredBillingConnectionMaterialize(\n        key,\n        () =>\n          runExclusiveEmbeddedBillingRuntime(\n            ownerKey,\n            retryOwnership.generation,\n            () =>\n              runBootstrapGeneration(\n                retryOwnership,\n                () =>\n                  materializeConfiguredBillingConnections({\n                    applicationId: webhookApplicationId,\n                    appUrl: input.appUrl,\n                    configuredProviders: input.configuredProviders,\n                    publicBaseUrl: ingestion.webhooks.publicBaseUrl,\n                    sql,\n                    testMode,\n                  }),\n                true,\n              ),\n          ).then((result) => result ?? { connections: [] }),\n        projectJoinedRecoveryResult,\n      );\n      return {\n        connections: materialized.connections.map((connection) => ({\n          accountReference: connection.accountReference,\n          ...(connection.classicWebhookUrl\n            ? { classicWebhookUrl: connection.classicWebhookUrl }\n            : {}),\n          credentialReference: connection.credentialReference,\n          ...(connection.eventsWebhookUrl\n            ? { eventsWebhookUrl: connection.eventsWebhookUrl }\n            : {}),\n          id: connection.id,\n          provider: connection.provider,\n        })),\n        generation,\n        phase: \"ready\" as const,\n        recoveredAt: new Date().toISOString(),\n      };\n    }, projectAdminRecoveryResult)\n      .catch((error) => {\n        connectionState.initializationFailed = true;\n        connectionState.initializationMessage =\n          error instanceof Error ? error.message : String(error);\n        connectionState.bootstrap = {\n          failedAt: new Date(),\n          generation: connectionState.bootstrap.generation,\n          lastError: {\n            code: \"bootstrap_failed\",\n            retryable: true,\n            sanitizedMessage:\n              error instanceof Error ? error.message : String(error),\n            stage: \"recovering\",\n          },\n          phase: \"failed\",\n        };\n        bootstrapReadiness.fail(error);\n        throw error;\n      })\n      .finally(() => {\n        retryPromise = undefined;\n      });\n    return retryPromise;\n  };\n  const runBootstrapGeneration = async (\n    ownership: ReturnType<typeof claimEmbeddedBillingRuntimeOwner>,\n    converge: () => Promise<MaterializeConfiguredBillingConnectionsResult>,\n    rethrow: boolean,\n  ): Promise<MaterializeConfiguredBillingConnectionsResult> => {\n      if (!ownership.isCurrent()) {\n        return { connections: [] };\n      }\n      let materialized: MaterializeConfiguredBillingConnectionsResult = {\n        connections: [],\n      };\n      try {\n        patchBillingDiagnostics(existing, {\n          phase: \"materializing-connections\",\n        });\n        connectionState.bootstrap = {\n          generation: configuredBillingConnectionConvergenceGeneration(\n            configuredBillingConnectionInitKey({\n              applicationId: webhookApplicationId ?? \"\",\n              databaseIdentity,\n              testMode,\n            })\n          ),\n          phase: \"materializing-connections\",\n        };\n        if (\n          sql != null &&\n          webhookApplicationId != null &&\n          webhookApplicationId.length > 0\n        ) {\n          materialized = await converge();\n          connectionState.connections = [...materialized.connections];\n          connectionState.bootstrap = {\n            generation: configuredBillingConnectionConvergenceGeneration(\n              configuredBillingConnectionInitKey({\n                applicationId: webhookApplicationId,\n                databaseIdentity,\n                testMode,\n              })\n            ),\n            phase: \"verifying-connections\",\n          };\n          const inspected: AthenaBillingInspectedConnection[] =\n            connectionState.connections.map((row) => ({\n              accountReference: row.accountReference,\n              credentialReference: row.credentialReference,\n              id: row.id,\n              provider: row.provider,\n              ...(row.classicWebhookUrl\n                ? { classicWebhookUrl: row.classicWebhookUrl }\n                : {}),\n              ...(row.eventsWebhookUrl\n                ? { eventsWebhookUrl: row.eventsWebhookUrl }\n                : {}),\n            }));\n          const classicWebhookUrlsByConnectionId = Object.fromEntries(\n            connectionState.connections\n              .filter(\n                (\n                  row\n                ): row is MaterializedBillingConnection & {\n                  classicWebhookUrl: string;\n                } => row.classicWebhookUrl != null\n              )\n              .map((row) => [row.id, row.classicWebhookUrl])\n          );\n          const firstConnection = connectionState.connections[0];\n          registry.ingress = {\n            ...(firstConnection?.classicWebhookUrl\n              ? { classicWebhookUrl: firstConnection.classicWebhookUrl }\n              : {}),\n            ...(Object.keys(classicWebhookUrlsByConnectionId).length > 0\n              ? { classicWebhookUrlsByConnectionId }\n              : {}),\n          };\n          if (existing) {\n            existing.billingMaterializedConnections = inspected;\n            patchBillingDiagnostics(existing, {\n              connectionCount: inspected.length,\n            });\n          }\n          for (const connection of connectionState.connections) {\n            if (secretStore) {\n              try {\n                const stored = await secretStore.resolve(connection.id);\n                rememberConnectionSigningSecretSet(\n                  signingSecretCache,\n                  connection.id,\n                  stored\n                );\n              } catch (error) {\n                console.warn(\n                  \"[athena-billing] webhook signing secrets could not be loaded; apply embedded billing migrations through 0015\",\n                  {\n                    connectionId: connection.id,\n                    error:\n                      error instanceof Error ? error.message : String(error),\n                  }\n                );\n              }\n            }\n            if (connectionState.connections.length === 1) {\n              rememberConnectionSigningSecretSet(\n                signingSecretCache,\n                connection.id,\n                configuredSecrets\n              );\n            }\n          }\n        }\n        recordBillingBootstrapEvent(\n          bootstrapEvents,\n          BILLING_BOOTSTRAP_EVENT.connectionMaterialized\n        );\n        connectionState.initialized = true;\n        if (!ownership.isCurrent()) {\n          return materialized;\n        }\n        const recoveryScheduler = registerEmbeddedBillingScheduler({\n          enabled:\n            sql != null &&\n            isBillingSelfPlanChangeEnabled(input.selfEnrollment) &&\n            connectionState.connections.length > 0 &&\n            hasPlanChangeProvider(registry),\n          isCurrent: ownership.isCurrent,\n          run: async () => {\n            await bootstrapReadiness.wait();\n            const schedulerSql = billingSqlFromInternals(client);\n            if (!schedulerSql) {\n              return;\n            }\n            const recovery = createPlanChangeRecoveryRuntime({\n              batchSize: 25,\n              configuredProviders: input.configuredProviders,\n              diagnostics: (event) => {\n                console.info(\"[athena-billing] plan change recovery\", event);\n              },\n              registry,\n              sql: schedulerSql,\n              testMode,\n            });\n            const result = await recovery.run();\n            patchBillingDiagnostics(existing, {\n              lastRecoveryBatch: {\n                attentionRequired: result.attentionRequired,\n                completed: result.completed,\n                failed: result.failed,\n                retried: result.retried,\n                scanned: result.scanned,\n              },\n              ...(result.recoverableOperationBacklog === undefined\n                ? {}\n                : {\n                    recoverableOperationBacklog:\n                      result.recoverableOperationBacklog,\n                  }),\n            });\n          },\n          schedule: DEFAULT_BILLING_PLAN_CHANGE_RECOVERY_SCHEDULE,\n        });\n        retainScheduler(recoveryScheduler, ownership);\n        connectionState.recoveryCoordinatorEnabled = recoveryScheduler != null;\n        if (existing) {\n          existing.billingPlanChangeRecoveryScheduler =\n            recoveryScheduler ?? undefined;\n          patchBillingDiagnostics(existing, {\n            recoveryCoordinatorEnabled:\n              connectionState.recoveryCoordinatorEnabled,\n          });\n        }\n        if (recoveryScheduler) {\n          recordBillingBootstrapEvent(\n            bootstrapEvents,\n            BILLING_BOOTSTRAP_EVENT.planChangeRecoverySchedulerRegistered\n          );\n        }\n        recordBillingBootstrapEvent(\n          bootstrapEvents,\n          BILLING_BOOTSTRAP_EVENT.runtimeReady\n        );\n        patchBillingDiagnostics(existing, {\n          phase: \"registering-schedulers\",\n        });\n        retainScheduler(\n          registerEmbeddedBillingScheduler({\n            enabled: ingestion.webhooks.enabled,\n            execution: ingestion.webhooks.execution,\n            isCurrent: ownership.isCurrent,\n            run: async (trigger) => {\n              await bootstrapReadiness.wait();\n              const schedulerSql = billingSqlFromInternals(client);\n              if (!schedulerSql || webhookApplicationId == null) {\n                return;\n              }\n              const { runAutomaticBillingWebhookReconcileIfEnabled } =\n                await import(\"../../ingestion/automatic.ts\");\n              await runAutomaticBillingWebhookReconcileIfEnabled({\n                applicationId: webhookApplicationId,\n                appUrl: input.appUrl,\n                configuredProviders: input.configuredProviders,\n                observability,\n                registry,\n                rememberSigningSecret,\n                secretStore,\n                sql: schedulerSql,\n                testMode,\n                trigger,\n                webhooks: ingestion.webhooks,\n              });\n            },\n            schedule: DEFAULT_BILLING_WEBHOOK_RECONCILIATION_SCHEDULE,\n          }),\n          ownership\n        );\n        recordBillingBootstrapEvent(\n          bootstrapEvents,\n          BILLING_BOOTSTRAP_EVENT.webhookSchedulerRegistered\n        );\n        retainScheduler(\n          registerEmbeddedBillingScheduler({\n            enabled: shouldAutomaticallyImportBillingCustomers({\n              enabled: input.customerImport?.customers?.enabled === true,\n              mode: input.customerImport?.customers?.mode,\n            }),\n            execution: input.customerImport?.customers?.execution,\n            isCurrent: ownership.isCurrent,\n            run: async (trigger) => {\n              await bootstrapReadiness.wait();\n              const schedulerSql = billingSqlFromInternals(client);\n              if (!schedulerSql) {\n                return;\n              }\n              const { runAutomaticBillingCustomerImportIfEnabled } =\n                await import(\"../../import/assemble.ts\");\n              await runAutomaticBillingCustomerImportIfEnabled({\n                configuredProviders: input.configuredProviders,\n                customerImport: input.customerImport,\n                observability,\n                sql: schedulerSql,\n                testMode,\n                trigger,\n              });\n              await purgeBillingObservability({\n                observability,\n                sql: schedulerSql,\n              });\n            },\n            schedule: input.customerImport?.customers?.schedule,\n          }),\n          ownership\n        );\n        recordBillingBootstrapEvent(\n          bootstrapEvents,\n          BILLING_BOOTSTRAP_EVENT.importSchedulerRegistered\n        );\n        patchBillingDiagnostics(existing, {\n          connectionCount:\n            existing?.billingMaterializedConnections?.length ??\n            connectionState.connections.length,\n          phase: \"ready\",\n          readyAt: Date.now(),\n        });\n        connectionState.bootstrap = {\n          generation: connectionState.bootstrap.generation,\n          lastSuccessAt: new Date(),\n          phase: \"ready\",\n        };\n        bootstrapReadiness.succeed();\n        readiness.ready(\"billing\");\n      } catch (error) {\n        console.error(\n          \"[athena-billing] configured billing connections failed to materialize\",\n          {\n            error: error instanceof Error ? error.message : String(error),\n          }\n        );\n        connectionState.initializationFailed = true;\n        connectionState.initializationMessage =\n          error instanceof Error ? error.message : String(error);\n        connectionState.bootstrap = {\n          failedAt: new Date(),\n          generation: connectionState.bootstrap.generation,\n          lastError: {\n            code: \"bootstrap_failed\",\n            retryable: true,\n            sanitizedMessage:\n              error instanceof Error ? error.message : String(error),\n            stage: connectionState.bootstrap.phase,\n          },\n          phase: \"failed\",\n        };\n        const raw =\n          error instanceof Error && error.message.trim().length > 0\n            ? error.message.trim()\n            : \"billing initialization failed\";\n        const sanitized = /access_|live_|test_|sk_|secret|password|token/i.test(\n          raw\n        )\n          ? \"billing initialization failed\"\n          : raw.length > 240\n            ? `${raw.slice(0, 237)}...`\n            : raw;\n        patchBillingDiagnostics(existing, {\n          failure: {\n            message: sanitized,\n            stage: \"materializing-connections\",\n          },\n          phase: \"failed\",\n        });\n        readiness.fail(\"billing\", error);\n        bootstrapReadiness.fail(error);\n        if (rethrow) {\n          throw error;\n        }\n      }\n      return materialized;\n  };\n\n  void runExclusiveEmbeddedBillingRuntime(\n    ownerKey,\n    ownership.generation,\n    () =>\n      runBootstrapGeneration(\n        ownership,\n        () =>\n          singleFlightConfiguredBillingConnectionMaterialize(\n            configuredBillingConnectionInitKey({\n              applicationId: webhookApplicationId ?? \"\",\n              databaseIdentity,\n              testMode,\n            }),\n            () =>\n              materializeConfiguredBillingConnections({\n                applicationId: webhookApplicationId ?? \"\",\n                appUrl: input.appUrl,\n                configuredProviders: input.configuredProviders,\n                publicBaseUrl: ingestion.webhooks.publicBaseUrl,\n                sql: sql as BillingSqlExecutor,\n                testMode,\n              }),\n          ),\n        false,\n      ),\n  );\n}\n\n/** Core createClient plus local Billing overlay. Used by Cloudflare façades. */\nexport function createClientWithLocalBilling<\n  TModels extends AthenaClientConfig[\"models\"] = AthenaClientConfig[\"models\"],\n>(config: AthenaClientConfig<TModels>): AthenaClient<TModels> {\n  assertDataLifecycleConfig(config);\n  assertBillingProviderRuntimeEnvironment(config.billing?.providers);\n  const normalized = normalizeUniversalConfig(config);\n  const plan = resolveRuntimePlan(normalized, {\n    environment: \"node\",\n    trustedNode: true,\n  });\n  const construction = resolveAthenaConstruction(normalized, plan);\n  const materializedDatabase = materializeDatabase(\n    plan,\n    construction.resources.db,\n  );\n  const materializedConfig = {\n    ...normalized,\n    ...(materializedDatabase.bindings.capabilities\n      ? { capabilities: materializedDatabase.bindings.capabilities }\n      : {}),\n    ...(materializedDatabase.bindings.findManyAst === undefined\n      ? {}\n      : { findManyAst: materializedDatabase.bindings.findManyAst }),\n    ...(materializedDatabase.bindings.gatewayTransport\n      ? { gatewayTransport: materializedDatabase.bindings.gatewayTransport }\n      : {}),\n    ...(materializedDatabase.bindings.key === undefined\n      ? {}\n      : { key: materializedDatabase.bindings.key }),\n    ...(materializedDatabase.bindings.db\n      ? {\n          db: {\n            ...normalized.db,\n            ...materializedDatabase.bindings.db,\n          },\n        }\n      : {}),\n  };\n  const factory = createClientWithNormalizer as unknown as (\n    input: unknown,\n    normalizer: (c: unknown) => unknown,\n    runtimeBindings?: { billing?: unknown }\n  ) => unknown;\n  const normalize = normalizeUniversalCreateClientConfig as unknown as (\n    c: unknown\n  ) => unknown;\n  const billingMode = resolveBillingRuntimeMode({\n    configuredProviders: config.billing?.providers,\n    mode: config.billing?.mode,\n  });\n  const postgresRuntime = getBoundPostgresRuntime(\n    materializedConfig.gatewayTransport,\n  ) ?? materializedDatabase.postgresRuntime;\n  const billingSql = postgresRuntime\n    ? billingSqlFromPostgresRuntime(postgresRuntime)\n    : undefined;\n  const binding =\n    billingMode === \"local\"\n      ? createLocalBillingRuntimeBinding({\n          applicationId: resolveBillingWebhookApplicationId({\n            app: config.app,\n            client: config.client,\n          }),\n          appUrl: config.app?.url,\n          catalog: config.billing?.catalog,\n          configuredProviders: config.billing?.providers,\n          customerImport: config.billing?.import,\n          ingestion: config.billing?.ingestion,\n          mode: config.billing?.mode,\n          observability: config.billing?.observability,\n          selfEnrollment: config.billing?.selfEnrollment,\n          testMode: config.billing?.testMode,\n          sql: billingSql,\n        })\n      : undefined;\n  const client = factory(\n    materializedConfig,\n    normalize,\n    binding ? { billing: createBillingRuntimeFacade(binding.runtime) } : undefined\n  ) as AthenaClient<TModels>;\n  assertLocalAuthHooks(athenaAuthConfig(config.auth));\n  assertLocalAuthObservability(athenaAuthConfig(config.auth));\n  assertLocalBillingObservability(config.billing);\n  if (binding) {\n    bootstrapLocalBillingRuntime(client, {\n      applicationId: resolveBillingWebhookApplicationId({\n        app: config.app,\n        client: config.client,\n      }),\n      appUrl: config.app?.url,\n      catalog: config.billing?.catalog,\n      configuredProviders: config.billing?.providers,\n      customerImport: config.billing?.import,\n      ingestion: config.billing?.ingestion,\n      mode: config.billing?.mode,\n      observability: config.billing?.observability,\n      selfEnrollment: config.billing?.selfEnrollment,\n      testMode: config.billing?.testMode,\n      binding,\n    });\n  }\n  assertLocalBillingRuntimeEnvironment({\n    configuredProviders: config.billing?.providers,\n    localMaterialized: true,\n    mode: config.billing?.mode,\n  });\n  return client;\n}\n","/**\n * Browser-safe universal createClient materializer (Phase 2 extraction).\n *\n * Must not import pg, node:fs, server-only, postgres/*, or v3-client.ts.\n * Node/server close + pg wiring stays in src/v3-client.ts.\n */\n\nimport type { R2BucketLike } from \"../cloudflare/types.ts\";\nimport type { AthenaClientModelsInput } from \"../schema/types.ts\";\nimport {\n  type AthenaClient,\n  type AthenaClientConfig,\n  type AthenaClientConfigWithR2,\n  type AthenaClientWithR2Storage,\n} from \"./contracts.ts\";\nimport {\n  createClientWithNormalizer as createClientWithNormalizerImpl,\n} from \"../v3-client-assembly.ts\";\nimport {\n  normalizeUniversalCreateClientConfig,\n} from \"./config/normalize.ts\";\nimport type { AthenaClientRuntimeBindings } from \"./context.ts\";\n\nexport type {\n  AthenaClient,\n  AthenaClientConfig,\n  AthenaClientConfigWithR2,\n  AthenaClientWithR2Storage,\n};\nexport { normalizeUniversalCreateClientConfig };\n\n/**\n * Shared client-construction spine with an injectable normalization pipeline.\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: forwarding the generic impl re-instantiates AthenaClient\n  // (TS2589 during declaration emit). Keep the public return types; erase\n  // the body the same way v3-client-core createClient does.\n  const factory = createClientWithNormalizerImpl as unknown as (\n    input: unknown,\n    normalizer: (c: unknown) => unknown,\n    runtimeBindings?: AthenaClientRuntimeBindings\n  ) => unknown;\n  const pipeline = normalize as (c: unknown) => unknown;\n  const client: unknown = factory(config, pipeline, runtimeBindings);\n  return client as AthenaClient<TModels> | AthenaClientWithR2Storage<TModels>;\n}\n\n/**\n * Materialize an Athena client (single public constructor — INV-CLIENT-001).\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  const factory = createClientWithNormalizer as unknown as (\n    input: unknown,\n    normalizer: (c: unknown) => unknown\n  ) => unknown;\n  const normalize = normalizeUniversalCreateClientConfig as unknown as (\n    c: unknown\n  ) => unknown;\n  const client: unknown = factory(config, normalize);\n  return client as AthenaClient<TModels> | AthenaClientWithR2Storage<TModels>;\n}\n","/**\n * Node database transport materializer (postgres / D1 already on config).\n */\n\nimport { createPostgresDirectCapabilities } from \"../../cloudflare/capabilities.ts\";\nimport {\n  ATHENA_PG_DIRECT_API_KEY,\n  ATHENA_PG_DIRECT_BASE_URL,\n} from \"../../postgres/constants.ts\";\nimport type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\nimport {\n  bindPostgresRuntime,\n  createAthenaPostgresRuntime,\n  getBoundPostgresRuntime,\n} from \"../../postgres/owned-runtime.ts\";\nimport {\n  createPostgresDirectTransport,\n  disposePostgresDirectTransport,\n} from \"../../postgres/transport.ts\";\nimport { catalogFromModels } from \"../../query/engine/index.ts\";\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\nimport type { AthenaRuntimePlan } from \"../plan/types.ts\";\nimport type {\n  AthenaDatabaseRuntimeResources,\n  AthenaRuntimeConfigBindings,\n} from \"../construction/types.ts\";\nimport { createSqliteLocalTransport, sqliteLocalTransactionCapabilities } from \"../../sqlite-local/transport.ts\";\nimport { createSqliteLocalCapabilities } from \"../../sqlite-local/materialize.ts\";\n\nexport { disposePostgresDirectTransport };\n\n/**\n * Wire `db.pgUri` into a direct PostgreSQL AthenaGatewayClient transport.\n * Runs after edge materialize so D1 wins only when selected; d1+pgUri is rejected.\n */\nexport interface AthenaMaterializedDatabase<\n  TModels extends AthenaClientModelsInput | undefined,\n> {\n  readonly bindings: AthenaRuntimeConfigBindings<TModels>;\n  readonly postgresRuntime?: ReturnType<typeof createAthenaPostgresRuntime>;\n  readonly sqliteExecutor?: AthenaDatabaseRuntimeResources[\"sqliteExecutor\"];\n}\n\nexport function materializeDatabase<\n  TModels extends AthenaClientModelsInput | undefined,\n>(\n  plan: AthenaRuntimePlan,\n  resources: AthenaDatabaseRuntimeResources,\n): AthenaMaterializedDatabase<TModels> {\n  const existingRuntime = resources.gatewayTransport\n    ? getBoundPostgresRuntime(resources.gatewayTransport)\n    : undefined;\n  if (plan.db.transport !== \"postgres\" || plan.db.source === \"none\") {\n    if (plan.db.transport === \"sqlite\" && resources.sqliteExecutor) {\n      const executor = resources.sqliteExecutor;\n      const tx = sqliteLocalTransactionCapabilities(\n        executor,\n        resources.sqliteCompiler,\n      );\n      return {\n        bindings: {\n          capabilities: createSqliteLocalCapabilities({\n            atomicTransactions: tx.atomic,\n            interactiveTransactions: tx.interactive,\n            structuredCrud: Boolean(resources.sqliteCompiler),\n          }),\n          findManyAst: false,\n          gatewayTransport: createSqliteLocalTransport(\n            executor,\n            resources.sqliteCompiler,\n          ),\n          key: \"sqlite-local\",\n        },\n        sqliteExecutor: executor,\n      };\n    }\n    return {\n      bindings: {},\n      ...(existingRuntime ? { postgresRuntime: existingRuntime } : {}),\n    };\n  }\n\n  let capabilities = plan.db.capabilities;\n  if (!capabilities) {\n    const base = createPostgresDirectCapabilities({\n      authRemote: plan.db.hasRemoteAuth,\n      findManyAst: true,\n      flatCrud: true,\n      query: true,\n      relations: true,\n      rpc: true,\n      storageLocal: plan.storage.transport === \"local\",\n      storageConfigured:\n        plan.db.hasRemoteStorage ||\n        plan.storage.transport === \"local\" ||\n        plan.storage.transport === \"s3\",\n    });\n    capabilities = {\n      ...base,\n      storage: {\n        ...base.storage,\n        ...(plan.storage.transport === \"local\" || plan.storage.transport === \"s3\"\n          ? { local: plan.storage.transport === \"local\", objects: true }\n          : {}),\n      },\n    };\n  }\n  const postgresRuntime =\n    existingRuntime ??\n    createAthenaPostgresRuntime(\n      resources.pool\n        ? { pool: resources.pool as AthenaPostgresPool }\n        : { connectionString: plan.db.pgUri as string },\n    );\n  const gatewayTransport =\n    resources.gatewayTransport ??\n    createPostgresDirectTransport({\n      relationCatalog: catalogFromModels(plan.db.models),\n      runtime: postgresRuntime,\n    });\n  bindPostgresRuntime(gatewayTransport, postgresRuntime);\n  return {\n    bindings: {\n      capabilities,\n      db: {\n        pgUri: plan.db.pgUri,\n        url: plan.db.hasRemoteDbGateway\n          ? undefined\n          : ATHENA_PG_DIRECT_BASE_URL,\n      },\n      findManyAst: plan.db.findManyAst ?? true,\n      gatewayTransport,\n      ...(plan.db.requestedKey || !plan.db.hasRemoteServices\n        ? { key: plan.db.requestedKey ?? ATHENA_PG_DIRECT_API_KEY }\n        : {}),\n      postgresRuntime,\n    },\n    postgresRuntime,\n  };\n}\n\nexport function disposeMaterializedDatabase(\n  transport: Parameters<typeof disposePostgresDirectTransport>[0]\n): Promise<void> {\n  return disposePostgresDirectTransport(transport);\n}\n","/**\n * Local sentinels for direct PostgreSQL materialization (not real HTTP endpoints).\n * Mirror Cloudflare edge sentinels so resolveCore accepts DB-only clients.\n */\nexport const ATHENA_PG_DIRECT_BASE_URL =\n  \"https://athena.local/postgres-direct\" as const;\n\nexport const ATHENA_PG_DIRECT_API_KEY = \"postgres-direct-local\" as const;\n","import { AthenaConfigurationError } from \"../config/errors.ts\";\nimport 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 {\n  AthenaQueryError,\n  type AthenaSelectQueryAst,\n  type AthenaRelationCatalog,\n} from \"../query/engine/index.ts\";\nimport { resolveMutationAffectedRows } from \"../result/mutation-meta.ts\";\nimport {\n  keepNullKeysFromFindManySelect,\n  maybeStripNullRows,\n} from \"../result/strip-null-properties.ts\";\nimport {\n  compilePostgresStructuredCount,\n  compilePostgresStructuredFetch,\n  needsPostgresAstPipeline,\n} from \"./compile-fetch.ts\";\nimport { ATHENA_PG_DIRECT_BASE_URL } from \"./constants.ts\";\nimport {\n  ATHENA_POSTGRES_POOL_DEFAULTS,\n  type AthenaPostgresPool,\n  type QueryResult,\n  type QueryResultRow,\n} from \"./driver.ts\";\nimport { mapPostgresDriverError, sanitizePostgresMessage } from \"./errors.ts\";\nimport {\n  createPostgresIdentityCache,\n  needsBoundedIdentity,\n  resolvePostgresBoundedIdentityColumn,\n} from \"./identity.ts\";\nimport {\n  type AthenaPostgresRuntime,\n  createAthenaPostgresRuntime,\n} from \"./owned-runtime.ts\";\nimport { PostgresDeadline } from \"./pool/deadline.ts\";\nimport type { PostgresPoolManager } from \"./pool/manager.ts\";\nimport { assertNodePostgresRuntime } from \"./runtime.ts\";\nimport {\n  compilePostgresCount,\n  compilePostgresDelete,\n  compilePostgresFetch,\n  compilePostgresInsert,\n  compilePostgresRpc,\n  compilePostgresUpdate,\n  extractAthenaCount,\n  type PostgresCompiledQuery,\n  type PostgresCompileOptions,\n  PostgresSqlCompileError,\n} from \"./sql.ts\";\nimport { createPostgresTransactionTransport } from \"./transaction.ts\";\n\n/** Mirrors gateway client accept shape for findMany AST payloads. */\ninterface AthenaFindManyAstPayload {\n  limit?: number;\n  orderBy?: Record<string, unknown>;\n  select: Record<string, unknown>;\n  table_name: string;\n  where?: Record<string, unknown>;\n}\n\nexport interface PostgresDirectTransportOptions {\n  connectionString?: string;\n  /**\n   * Optional default unique identity column for bounded mutations.\n   * Prefer schema-resolved PK; never invent `id` at the compiler.\n   */\n  defaultIdentityColumn?: string;\n  /** When false, dispose never ends the supplied pool. Default: true for URI-created pools. */\n  ownsPool?: boolean;\n  pool?: AthenaPostgresPool;\n  /** Priority-1 relation metadata from AthenaModels. */\n  relationCatalog?: AthenaRelationCatalog;\n  runtime?: AthenaPostgresRuntime;\n}\n\nfunction resolveStripNulls(\n  payloadStrip: boolean | undefined,\n  callOptions: AthenaGatewayCallOptions | undefined,\n  defaultValue: boolean\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  endpoint?: string\n): AthenaGatewayResponse<T> {\n  const affectedRows = resolveMutationAffectedRows({\n    count,\n    endpoint,\n    raw,\n  });\n  return {\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}\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 PostgresSqlCompileError) {\n    return errorResponse(\n      400,\n      \"HTTP_ERROR\",\n      error.message,\n      endpoint,\n      method,\n      `PostgreSQL SQL compile failed (${error.code})`\n    );\n  }\n  if (error instanceof AthenaQueryError) {\n    return errorResponse(\n      400,\n      \"HTTP_ERROR\",\n      error.message,\n      endpoint,\n      method,\n      `Athena query compile failed (${error.code})`\n    );\n  }\n  return mapDriverError(error, endpoint, method);\n}\n\nfunction mapDriverError<T>(\n  error: unknown,\n  endpoint: string,\n  method: string\n): AthenaGatewayResponse<T> {\n  const mapped = mapPostgresDriverError(error);\n  return errorResponse(\n    mapped.status,\n    mapped.code,\n    mapped.message,\n    endpoint,\n    method,\n    mapped.hint\n  );\n}\n\n/**\n * Gateway-shaped transport that executes against a long-lived Node `pg.Pool`.\n */\nexport function createPostgresDirectTransport(\n  options: PostgresDirectTransportOptions\n): AthenaGatewayClient {\n  const connectionString = options.connectionString?.trim();\n  if (!(options.runtime || options.pool || connectionString)) {\n    throw new Error(\n      \"@xylex-group/athena: db.pgUri must be a non-empty PostgreSQL connection string.\"\n    );\n  }\n\n  assertNodePostgresRuntime();\n\n  const ownsPool =\n    options.ownsPool ??\n    Boolean(connectionString && !options.runtime && !options.pool);\n\n  const ownsRuntime = !options.runtime;\n  const runtime =\n    options.runtime ??\n    createAthenaPostgresRuntime(\n      options.pool\n        ? {\n            ownership: ownsPool ? \"owned\" : \"borrowed\",\n            pool: options.pool,\n          }\n        : { connectionString: connectionString as string }\n    );\n  let disposed = false;\n\n  const attachPoolErrorHandler = (\n    pool: AthenaPostgresPool\n  ): AthenaPostgresPool => {\n    const maybeOn = pool as AthenaPostgresPool & {\n      on?: (event: string, listener: (err: Error) => void) => void;\n    };\n    if (typeof maybeOn.on === \"function\") {\n      maybeOn.on(\"error\", () => {\n        // Surface on next query via pool state; do not throw unbound.\n      });\n    }\n    return pool;\n  };\n\n  let poolErrorHandlerAttached = false;\n  const getPoolManager = (): Promise<PostgresPoolManager> => {\n    if (disposed) {\n      return Promise.reject(\n        new AthenaConfigurationError(\n          \"ATHENA_RUNTIME_DISPOSED\",\n          \"Athena PostgreSQL runtime was disposed.\",\n          \"db\"\n        )\n      );\n    }\n    assertNodePostgresRuntime();\n    return runtime.getPoolManager().then(async (manager) => {\n      if (!poolErrorHandlerAttached) {\n        attachPoolErrorHandler(await manager.getPool());\n        poolErrorHandlerAttached = true;\n      }\n      return manager;\n    });\n  };\n\n  const managedQuery = <T extends QueryResultRow = QueryResultRow>(\n    text: string,\n    values?: unknown[],\n    workload: \"query\" | \"introspection\" = \"query\"\n  ): Promise<QueryResult<T>> =>\n    getPoolManager().then((manager) =>\n      manager.query(\n        {\n          deadline: PostgresDeadline.after(\n            ATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis\n          ),\n          target: \"pooled\",\n          workload,\n        },\n        text,\n        values\n      )\n    );\n\n  const managedQueryable = {\n    query: <T extends QueryResultRow = QueryResultRow>(\n      text: string,\n      values?: unknown[]\n    ) => managedQuery<T>(text, values, \"introspection\"),\n  };\n\n  const baseUrl = ATHENA_PG_DIRECT_BASE_URL;\n  const defaultIdentity = options.defaultIdentityColumn?.trim();\n  const identityCache = createPostgresIdentityCache();\n\n  async function compileOptionsForBoundedMutation(payload: {\n    table_name?: string;\n    limit?: number;\n    offset?: number;\n    current_page?: number;\n    page_size?: number;\n    sort_by?: unknown;\n  }): Promise<PostgresCompileOptions | undefined> {\n    if (!needsBoundedIdentity(payload)) {\n      return;\n    }\n    // Compiler still raises order_without_bounds when sort_by alone.\n    const hasPage =\n      payload.limit !== undefined ||\n      payload.offset !== undefined ||\n      payload.page_size !== undefined ||\n      payload.current_page !== undefined;\n    if (!hasPage) {\n      return;\n    }\n    if (defaultIdentity) {\n      return { identityColumn: defaultIdentity };\n    }\n    const identityColumn = await resolvePostgresBoundedIdentityColumn(\n      managedQueryable,\n      payload.table_name ?? \"\",\n      identityCache\n    );\n    return { identityColumn };\n  }\n\n  async function runCompiled<T>(\n    compiled: PostgresCompiledQuery,\n    endpoint: string,\n    method: string,\n    mapResult?: (\n      rows: unknown[],\n      rowCount: number\n    ) => { data: T; count: number | null },\n    stripNulls = true,\n    keepNullKeys?: ReadonlySet<string>\n  ): Promise<AthenaGatewayResponse<T>> {\n    try {\n      const result = await managedQuery(compiled.text, compiled.values);\n      const rows = maybeStripNullRows(\n        result.rows as unknown[],\n        stripNulls,\n        keepNullKeys\n      );\n      const rowCount =\n        typeof result.rowCount === \"number\" ? result.rowCount : rows.length;\n\n      const mapped = mapResult?.(rows, rowCount) ?? {\n        count: rowCount,\n        data: rows as T,\n      };\n      return successResponse(mapped.data, mapped.count, result, endpoint);\n    } catch (error) {\n      if (error instanceof PostgresSqlCompileError) {\n        return compileErrorResponse(error, endpoint, method);\n      }\n      return mapDriverError(error, endpoint, method);\n    }\n  }\n\n  const transport: AthenaGatewayClient & {\n    __athenaPgDispose?: () => Promise<void>;\n  } = {\n    async __athenaPgDispose() {\n      disposed = true;\n      if (!ownsRuntime) {\n        return;\n      }\n      await runtime.close();\n    },\n    baseUrl,\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 compileOptions = await compileOptionsForBoundedMutation(payload);\n        const compiled = compilePostgresDelete(payload, compileOptions);\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        return runCompiled(\n          compiled,\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:\n        | AthenaFetchPayload\n        | AthenaFindManyAstPayload\n        | AthenaSelectQueryAst,\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 = needsPostgresAstPipeline(payload)\n          ? await compilePostgresStructuredFetch(payload, managedQueryable, {\n              catalog: options.relationCatalog,\n            })\n          : compilePostgresFetch(fetchPayload);\n        const stripNulls = resolveStripNulls(\n          fetchPayload.strip_nulls,\n          callOptions,\n          true\n        );\n        const keepNullKeys = keepNullKeysFromFindManySelect(payload);\n\n        if (fetchPayload.head === true) {\n          return runCompiled(\n            compiled,\n            \"/gateway/fetch\",\n            \"POST\",\n            (rows) => ({ count: extractAthenaCount(rows), data: [] as T }),\n            false\n          );\n        }\n\n        const wantsTotalCount =\n          fetchPayload.count === \"exact\" ||\n          fetchPayload.count === \"planned\" ||\n          fetchPayload.count === \"estimated\";\n\n        if (wantsTotalCount) {\n          const countCompiled = needsPostgresAstPipeline(payload)\n            ? await compilePostgresStructuredCount(payload, managedQueryable, {\n                catalog: options.relationCatalog,\n              })\n            : compilePostgresCount(fetchPayload);\n          try {\n            const [dataResult, countResult] = await Promise.all([\n              managedQuery(compiled.text, compiled.values),\n              managedQuery(countCompiled.text, countCompiled.values),\n            ]);\n            const rows = maybeStripNullRows(\n              dataResult.rows as unknown[],\n              stripNulls,\n              keepNullKeys\n            );\n            const total = extractAthenaCount(countResult.rows as unknown[]);\n            return successResponse(\n              rows as T,\n              total,\n              {\n                count: countResult,\n                data: dataResult,\n              },\n              \"/gateway/fetch\"\n            );\n          } catch (error) {\n            return mapDriverError(error, \"/gateway/fetch\", \"POST\");\n          }\n        }\n\n        return runCompiled(\n          compiled,\n          \"/gateway/fetch\",\n          \"POST\",\n          (rows) => ({ count: rows.length, data: rows as T }),\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 = compilePostgresInsert(payload);\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        return runCompiled(\n          compiled,\n          \"/gateway/insert\",\n          \"PUT\",\n          (rows, rowCount) => {\n            if (!Array.isArray(payload.insert_body) && rows.length === 1) {\n              return { count: rowCount, data: rows[0] as T };\n            }\n            return { count: rowCount, data: rows as T };\n          },\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 text = payload.query?.trim();\n        if (!text) {\n          return errorResponse(\n            400,\n            \"HTTP_ERROR\",\n            \"query is required\",\n            \"/gateway/query\",\n            \"POST\"\n          );\n        }\n        const values = Array.isArray(payload.params) ? payload.params : [];\n        return runCompiled(\n          { text, values },\n          \"/gateway/query\",\n          \"POST\",\n          (rows, rowCount) => ({ count: rowCount, data: rows as T }),\n          resolveStripNulls(undefined, callOptions, false)\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/query\", \"POST\");\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      try {\n        if (callOptions?.signal?.aborted) {\n          throw new Error(\"The operation was aborted.\");\n        }\n        const compiled = compilePostgresRpc(payload);\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        if (payload.head === true) {\n          return runCompiled(\n            compiled,\n            \"/gateway/rpc\",\n            \"POST\",\n            (rows) => ({ count: extractAthenaCount(rows), data: [] as T }),\n            false\n          );\n        }\n        const wantsCount =\n          payload.count === \"exact\" ||\n          payload.count === \"planned\" ||\n          payload.count === \"estimated\";\n        if (wantsCount) {\n          const countCompiled = compilePostgresRpc({\n            ...payload,\n            head: true,\n          });\n          const [dataResult, countResult] = await Promise.all([\n            managedQuery(compiled.text, compiled.values),\n            managedQuery(countCompiled.text, countCompiled.values),\n          ]);\n          const rows = maybeStripNullRows(\n            dataResult.rows as unknown[],\n            stripNulls\n          );\n          const total = extractAthenaCount(countResult.rows as unknown[]);\n          return successResponse(\n            rows as T,\n            total,\n            {\n              count: countResult,\n              data: dataResult,\n            },\n            \"/gateway/rpc\"\n          );\n        }\n        return runCompiled(\n          compiled,\n          \"/gateway/rpc\",\n          \"POST\",\n          (rows, rowCount) => ({ count: rowCount, data: rows as T }),\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/rpc\", \"POST\");\n      }\n    },\n    transactions: createPostgresTransactionTransport({\n      defaultIdentityColumn: defaultIdentity,\n      getPoolManager,\n      identityCache,\n    }),\n    async updateGateway<T>(\n      payload: AthenaUpdatePayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const compileOptions = await compileOptionsForBoundedMutation(payload);\n        const compiled = compilePostgresUpdate(payload, compileOptions);\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        return runCompiled(\n          compiled,\n          \"/gateway/update\",\n          \"POST\",\n          (rows, rowCount) => {\n            if (rows.length === 1) {\n              return { count: rowCount, data: rows[0] as T };\n            }\n            return { count: rowCount, data: rows as T };\n          },\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      try {\n        const result = await managedQuery(\"SELECT 1 AS ok\");\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}/pg`,\n        };\n      } catch (error) {\n        const message = sanitizePostgresMessage(\n          error instanceof Error ? error.message : String(error)\n        );\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}/pg`,\n        };\n      }\n    },\n  };\n\n  return transport;\n}\n\n/**\n * Test/tooling helper: end the underlying pool if it was created.\n * Not part of public AthenaClient API (AD-06).\n */\nexport async function disposePostgresDirectTransport(\n  transport: AthenaGatewayClient\n): Promise<void> {\n  const holder = transport as AthenaGatewayClient & {\n    __athenaPgDispose?: () => Promise<void>;\n  };\n  if (typeof holder.__athenaPgDispose === \"function\") {\n    await holder.__athenaPgDispose();\n  }\n}\n","import {\n  AthenaQueryError,\n  type AthenaQueryPlan,\n  type AthenaRelationCatalog,\n  type AthenaSelectQueryAst,\n  isAthenaQueryPlan,\n  isAthenaSelectQueryAst,\n  mergeRelationCatalogs,\n  normalizeTransportPayload,\n  resetQueryPlanAliases,\n  resolveQueryPlan,\n  selectPayloadHasRelations,\n} from \"../query/engine/index.ts\";\nimport { compilePostgresAst, compilePostgresAstCount } from \"./compile-ast.ts\";\nimport type { AthenaPostgresQueryable } from \"./driver.ts\";\nimport { quotePostgresRegclassName } from \"./identity.ts\";\nimport { loadPostgresRelationCatalog } from \"./relation-catalog.ts\";\nimport type { PostgresCompiledQuery } from \"./sql.ts\";\nimport { PostgresSqlCompileError } from \"./sql.ts\";\n\nconst RESOLVE_BARE_RELATION_SQL = `\nSELECT n.nspname AS schema_name\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE c.oid = to_regclass($1)\nLIMIT 1\n`.trim();\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function needsPostgresAstPipeline(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\nasync function resolveStructuredPlan(\n  payload: unknown,\n  queryable: AthenaPostgresQueryable,\n  options?: { catalog?: AthenaRelationCatalog }\n): Promise<AthenaQueryPlan> {\n  resetQueryPlanAliases();\n  if (isAthenaQueryPlan(payload)) {\n    return payload;\n  }\n  const ast = await qualifyBareAstSource(\n    normalizeTransportPayload(payload),\n    queryable\n  );\n  const live = await loadPostgresRelationCatalog(queryable);\n  const catalog = mergeRelationCatalogs(options?.catalog, live);\n  return resolveQueryPlan(ast, { catalog });\n}\n\n/**\n * Bare names follow the connection `search_path` (`to_regclass`). Without that\n * schema, the same table name in another schema looks like a second foreign key.\n */\nasync function qualifyBareAstSource(\n  ast: AthenaSelectQueryAst,\n  queryable: AthenaPostgresQueryable\n): Promise<AthenaSelectQueryAst> {\n  if (ast.source.schema) {\n    return ast;\n  }\n  let regclass: string;\n  try {\n    regclass = quotePostgresRegclassName(ast.source.table);\n  } catch {\n    return ast;\n  }\n  const resolved = await queryable.query<{ schema_name?: string }>(\n    RESOLVE_BARE_RELATION_SQL,\n    [regclass]\n  );\n  const schema = resolved.rows[0]?.schema_name;\n  if (typeof schema !== \"string\" || schema.length === 0) {\n    return ast;\n  }\n  return {\n    ...ast,\n    source: {\n      ...ast.source,\n      schema,\n    },\n  };\n}\n\nfunction rethrowStructuredCompile(error: unknown): never {\n  if (\n    error instanceof PostgresSqlCompileError ||\n    error instanceof AthenaQueryError\n  ) {\n    throw error instanceof PostgresSqlCompileError\n      ? error\n      : new PostgresSqlCompileError(error.code, error.message);\n  }\n  throw error;\n}\n\nexport async function compilePostgresStructuredFetch(\n  payload: unknown,\n  queryable: AthenaPostgresQueryable,\n  options?: { catalog?: AthenaRelationCatalog }\n): Promise<PostgresCompiledQuery> {\n  try {\n    return compilePostgresAst(\n      await resolveStructuredPlan(payload, queryable, options)\n    );\n  } catch (error) {\n    rethrowStructuredCompile(error);\n  }\n}\n\nexport async function compilePostgresStructuredCount(\n  payload: unknown,\n  queryable: AthenaPostgresQueryable,\n  options?: { catalog?: AthenaRelationCatalog }\n): Promise<PostgresCompiledQuery> {\n  try {\n    return compilePostgresAstCount(\n      await resolveStructuredPlan(payload, queryable, options)\n    );\n  } catch (error) {\n    rethrowStructuredCompile(error);\n  }\n}\n","import {\n  type AthenaConditionAst,\n  AthenaQueryError,\n  type AthenaQueryPlan,\n  type AthenaResolvedRelationConditionAst,\n  type AthenaResolvedSource,\n  canonicalizePagination,\n  POSTGRES_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 PostgresCompiledQuery, PostgresSqlCompileError } from \"./sql.ts\";\n\nconst SAFE_QUALIFIED = /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/;\n\nclass Binder {\n  readonly values: unknown[] = [];\n\n  add(value: unknown): string {\n    this.values.push(value);\n    return `$${this.values.length}`;\n  }\n}\n\nfunction quoteIdent(name: string): string {\n  const trimmed = name.trim();\n  if (!(trimmed && SAFE_QUALIFIED.test(trimmed))) {\n    throw new PostgresSqlCompileError(\n      \"invalid_identifier\",\n      `Invalid SQL identifier for PostgreSQL direct: ${name}`\n    );\n  }\n  return quoteQualifiedIdentifier(trimmed);\n}\n\nfunction qualifyTable(source: AthenaResolvedSource): string {\n  const name = source.schema\n    ? `${source.schema}.${source.table}`\n    : source.table;\n  return `${quoteIdent(name)} AS ${quoteIdent(source.alias)}`;\n}\n\nfunction qualifyNamedTable(\n  schema: string | undefined,\n  table: string,\n  alias: string\n): string {\n  const name = schema ? `${schema}.${table}` : table;\n  return `${quoteIdent(name)} AS ${quoteIdent(alias)}`;\n}\n\nfunction qualifyColumn(alias: string, column: string): string {\n  if (column === \"*\") {\n    return `${quoteIdent(alias)}.*`;\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)} IS TRUE`;\n    case \"is-false\":\n      return `${qualifyColumn(parent.alias, condition.field.field)} IS FALSE`;\n    case \"in\": {\n      if (condition.values.length === 0) {\n        return \"1 = 0\";\n      }\n      const placeholders = condition.values\n        .map((value) => binder.add(value ?? null))\n        .join(\", \");\n      return `${qualifyColumn(parent.alias, condition.field.field)} IN (${placeholders})`;\n    }\n    case \"contains\": {\n      const value =\n        condition.value !== null &&\n        typeof condition.value === \"object\" &&\n        !Array.isArray(condition.value)\n          ? JSON.stringify(condition.value)\n          : condition.value;\n      return `${qualifyColumn(parent.alias, condition.field.field)} @> ${binder.add(value ?? null)}::jsonb`;\n    }\n    case \"contained-by\": {\n      const value =\n        condition.value !== null &&\n        typeof condition.value === \"object\" &&\n        !Array.isArray(condition.value)\n          ? JSON.stringify(condition.value)\n          : condition.value;\n      return `${qualifyColumn(parent.alias, condition.field.field)} <@ ${binder.add(value ?? null)}::jsonb`;\n    }\n    case \"compare\": {\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 PostgreSQL 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        case \"ilike\":\n          return `${column} ILIKE ${placeholder}`;\n        default:\n          throw new PostgresSqlCompileError(\n            \"unsupported_operator\",\n            `Unknown compare operator \"${String((condition as { operator?: string }).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 PostgreSQL compiler`\n      );\n    default:\n      throw new PostgresSqlCompileError(\n        \"unsupported_operator\",\n        `Unsupported condition kind \"${String((condition as { kind?: string }).kind)}\"`\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(`(${inner}) IS NOT TRUE`);\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\ntype RelationScopeEndpoint = {\n  columns: string[];\n  schema?: string;\n  table: string;\n};\n\ntype RelationScopeJunction = {\n  fromColumns: string[];\n  schema?: string;\n  table: string;\n  toColumns: string[];\n};\n\ntype RelationScopeDescriptorShape = {\n  cardinality: string;\n  from: RelationScopeEndpoint;\n  junction?: RelationScopeJunction;\n  to: RelationScopeEndpoint;\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    | AthenaResolvedRelationConditionAst[\"descriptor\"]\n    | RelationScopeDescriptorShape,\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 ${descriptor.from.table} → ${descriptor.to.table} 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 ${qualifyNamedTable(descriptor.junction.schema, descriptor.junction.table, 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  if (fromColumns.length === 0 || fromColumns.length !== toColumns.length) {\n    throw new PostgresSqlCompileError(\n      \"invalid_condition\",\n      \"Relation join requires matching composite key columns\"\n    );\n  }\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 compileSelectList(plan: AthenaQueryPlan, binder: Binder): string {\n  const parts: string[] = [];\n  for (const field of plan.selection) {\n    if (field.kind === \"column\") {\n      const expr = qualifyColumn(plan.source.alias, field.column);\n      parts.push(\n        field.alias && field.alias !== field.column\n          ? `${expr} AS ${quoteIdent(field.alias)}`\n          : expr\n      );\n      continue;\n    }\n\n    const childPlan = field.plan;\n    const { fromSql, joinSql } = compileRelationScope(\n      plan.source,\n      childPlan.source,\n      field.descriptor,\n      field.junctionAlias\n    );\n    const innerSelect = compileSelectList(childPlan, binder);\n    const childWhere = [\n      joinSql,\n      ...compileEffectivePlanFilters(childPlan, binder),\n    ];\n    const childOrder = compileOrder(childPlan);\n    const childPage = canonicalizePagination(childPlan.pagination);\n    const resultShape = relationResultShape(\n      field.descriptor.cardinality,\n      field.selection\n    );\n    const childLimit =\n      resultShape === \"many\"\n        ? childPage.limit === undefined\n          ? \"\"\n          : ` LIMIT ${Math.max(0, Math.trunc(childPage.limit))}`\n        : ` LIMIT ${atMostOneSqlLimit(childPage.limit)}`;\n    const childOffset =\n      childPage.offset === undefined\n        ? \"\"\n        : ` OFFSET ${Math.max(0, Math.trunc(childPage.offset))}`;\n\n    const inner = `SELECT ${innerSelect} FROM ${fromSql} WHERE ${childWhere.join(\" AND \")}${childOrder}${childLimit}${childOffset}`;\n    if (resultShape === \"many\") {\n      parts.push(\n        `COALESCE((SELECT json_agg(row_to_json(${quoteIdent(childPlan.source.alias)})) FROM (${inner}) ${quoteIdent(childPlan.source.alias)}), '[]'::json) AS ${quoteIdent(field.alias)}`\n      );\n    } else {\n      parts.push(\n        `(SELECT row_to_json(${quoteIdent(childPlan.source.alias)}) FROM (${inner}) ${quoteIdent(childPlan.source.alias)}) AS ${quoteIdent(field.alias)}`\n      );\n    }\n  }\n  return parts.join(\", \");\n}\n\nfunction compileOrder(plan: AthenaQueryPlan): string {\n  if (!plan.orderBy?.length) {\n    return \"\";\n  }\n  const parts = plan.orderBy.map((order) => {\n    const direction = order.direction === \"desc\" ? \"DESC\" : \"ASC\";\n    const nulls =\n      order.nulls === \"first\"\n        ? \" NULLS FIRST\"\n        : order.nulls === \"last\"\n          ? \" NULLS LAST\"\n          : \"\";\n    return `${qualifyColumn(plan.source.alias, order.field.field)} ${direction}${nulls}`;\n  });\n  return ` ORDER BY ${parts.join(\", \")}`;\n}\n\nexport function compilePostgresAst(\n  plan: AthenaQueryPlan\n): PostgresCompiledQuery {\n  if (plan?.kind !== \"resolved-select\" || !Array.isArray(plan.selection)) {\n    throw new PostgresSqlCompileError(\n      \"unsupported_operator\",\n      \"compilePostgresAst requires a resolved AthenaQueryPlan\"\n    );\n  }\n  validatePlanAgainstCapabilities(plan, POSTGRES_QUERY_CAPABILITIES);\n  const binder = new Binder();\n  const selectList = compileSelectList(plan, binder);\n  const parts = [`SELECT ${selectList} FROM ${qualifyTable(plan.source)}`];\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  const order = compileOrder(plan);\n  if (order) {\n    parts.push(order.trim());\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 { text: parts.join(\" \"), values: binder.values };\n}\n\nexport function compilePostgresAstCount(\n  plan: AthenaQueryPlan\n): PostgresCompiledQuery {\n  validatePlanAgainstCapabilities(plan, POSTGRES_QUERY_CAPABILITIES);\n  const binder = new Binder();\n  const parts = [\n    `SELECT COUNT(*)::bigint AS __athena_count 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  return { text: parts.join(\" \"), values: binder.values };\n}\n","/**\n * PostgreSQL parameterized SQL compiler for flat gateway payloads.\n * Emits `$1..$n` binds (never string-interpolated values).\n * Mirrors D1 L1 surface with PG-native ILIKE / @> / <@ and schema-qualified names.\n */\n\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaRpcPayload,\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\";\n\nexport interface PostgresCompiledQuery {\n  text: string;\n  values: unknown[];\n}\n\nexport interface PostgresCompileOptions {\n  /**\n   * Proven single-column unique identity for bounded UPDATE/DELETE\n   * (PK or UNIQUE). Required when limit/offset/page bounds are set.\n   */\n  identityColumn?: string;\n}\n\nexport class PostgresSqlCompileError extends Error {\n  readonly code: string;\n\n  constructor(code: string, message: string) {\n    super(message);\n    this.name = \"PostgresSqlCompileError\";\n    this.code = code;\n  }\n}\n\n/** Simple/qualified SQL identifier: letter/underscore start, optional schema segments. */\nconst SAFE_QUALIFIED = /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/;\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\nconst SAFE_CASTS = new Set([\n  \"text\",\n  \"uuid\",\n  \"int\",\n  \"integer\",\n  \"bigint\",\n  \"boolean\",\n  \"bool\",\n  \"numeric\",\n  \"float\",\n  \"double\",\n  \"json\",\n  \"jsonb\",\n  \"date\",\n  \"timestamp\",\n  \"timestamptz\",\n]);\n\nclass Binder {\n  readonly values: unknown[] = [];\n\n  add(value: unknown): string {\n    this.values.push(value);\n    return `$${this.values.length}`;\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\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 PostgresSqlCompileError(\n      \"page_without_size\",\n      \"current_page requires page_size (or limit) for bounded update/delete on PostgreSQL direct\"\n    );\n  }\n  const clause = limitOffsetClause(payload);\n  if (!clause.trim()) {\n    throw new PostgresSqlCompileError(\n      \"invalid_pagination_bounds\",\n      \"Bounded update/delete requires limit, offset, and/or page_size on PostgreSQL direct\"\n    );\n  }\n}\n\nfunction quoteIdent(name: string): string {\n  const trimmed = name.trim();\n  if (!trimmed) {\n    throw new PostgresSqlCompileError(\n      \"invalid_identifier\",\n      \"Identifier is required\"\n    );\n  }\n  if (!SAFE_QUALIFIED.test(trimmed)) {\n    throw new PostgresSqlCompileError(\n      \"invalid_identifier\",\n      `Invalid SQL identifier for PostgreSQL direct: ${trimmed}`\n    );\n  }\n  return quoteQualifiedIdentifier(trimmed);\n}\n\nfunction quoteAliasedSelectToken(\n  baseIdentifier: string | undefined,\n  aliasIdentifier: string | undefined,\n  token: string\n): string {\n  if (!(baseIdentifier && aliasIdentifier)) {\n    throw new PostgresSqlCompileError(\n      \"unsafe_select\",\n      `SELECT/RETURNING expressions are not supported on PostgreSQL direct; use column names or aliases only: ${token}`\n    );\n  }\n  return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteQualifiedIdentifier(aliasIdentifier)}`;\n}\n\nfunction quoteSelectTokenStrict(token: string): string {\n  const trimmed = token.trim();\n  if (!trimmed || trimmed === \"*\") {\n    return trimmed || \"*\";\n  }\n\n  if (SAFE_QUALIFIED.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 quoteAliasedSelectToken(baseIdentifier, aliasIdentifier, token);\n  }\n\n  const sqlAlias = SQL_ALIAS_PATTERN.exec(trimmed);\n  if (sqlAlias) {\n    const [, baseIdentifier, aliasIdentifier] = sqlAlias;\n    return quoteAliasedSelectToken(baseIdentifier, aliasIdentifier, token);\n  }\n\n  throw new PostgresSqlCompileError(\n    \"unsafe_select\",\n    `SELECT/RETURNING expressions are not supported on PostgreSQL direct; use column names or aliases only: ${token}`\n  );\n}\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\nfunction wantsReturning(payload: {\n  columns?: string[] | string;\n  head?: boolean;\n}): boolean {\n  return Boolean(payload.columns) && payload.head !== true;\n}\n\nfunction applyCast(expr: string, cast?: string | null): string {\n  if (!cast) {\n    return expr;\n  }\n  const normalized = cast.trim().toLowerCase();\n  if (!SAFE_CASTS.has(normalized)) {\n    throw new PostgresSqlCompileError(\n      \"unsupported_cast\",\n      `Cast type \"${cast}\" is not allowed on PostgreSQL direct`\n    );\n  }\n  return `${expr}::${normalized}`;\n}\n\n/** Bind JSON-ish values; objects become JSON text for driver-neutral jsonb/json. */\nfunction jsonValue(value: AthenaJsonValue | undefined): unknown {\n  if (value === undefined) {\n    return null;\n  }\n  if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n    return JSON.stringify(value);\n  }\n  if (\n    Array.isArray(value) &&\n    value.some((item) => item !== null && typeof item === \"object\")\n  ) {\n    return JSON.stringify(value);\n  }\n  return value;\n}\n\ninterface WhereClause {\n  sql: string;\n  values: unknown[];\n}\n\nfunction conditionToWhere(\n  condition: AthenaGatewayCondition,\n  binder: Binder\n): string {\n  const column = condition.column?.trim() || condition.eq_column?.trim() || \"\";\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 PostgresSqlCompileError(\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 compiled = compileAthenaPredicateNode(tree, (predicate) =>\n        conditionToWhere(athenaPredicateToGatewayCondition(predicate), binder)\n      );\n      return operator === \"not\" ? `(NOT (${compiled}))` : compiled;\n    } catch (error) {\n      if (error instanceof PostgresSqlCompileError) {\n        throw error;\n      }\n      const message =\n        error instanceof LegacyBooleanParseError\n          ? error.message\n          : `Condition operator \"${operator}\" requires structured AST; raw expressions are rejected on PostgreSQL direct`;\n      throw new PostgresSqlCompileError(\"unsupported_operator\", message);\n    }\n  }\n\n  if (!column) {\n    throw new PostgresSqlCompileError(\n      \"invalid_condition\",\n      \"Condition requires a column\"\n    );\n  }\n\n  const col = applyCast(quoteIdent(column), condition.column_cast);\n\n  const bind = (v: unknown, valueCast?: string | null): string =>\n    applyCast(binder.add(v), valueCast ?? condition.value_cast);\n\n  switch (operator) {\n    case \"eq\": {\n      if (Array.isArray(value)) {\n        if (value.length === 0) {\n          return \"1 = 0\";\n        }\n        const placeholders = value.map((item) => bind(item ?? null)).join(\", \");\n        return `${col} IN (${placeholders})`;\n      }\n      if (value === null) {\n        return `${col} IS NULL`;\n      }\n      return `${col} = ${bind(value ?? null)}`;\n    }\n    case \"neq\":\n      if (value === null) {\n        return `${col} IS NOT NULL`;\n      }\n      return `${col} <> ${bind(value ?? null)}`;\n    case \"gt\":\n      return `${col} > ${bind(value ?? null)}`;\n    case \"gte\":\n      return `${col} >= ${bind(value ?? null)}`;\n    case \"lt\":\n      return `${col} < ${bind(value ?? null)}`;\n    case \"lte\":\n      return `${col} <= ${bind(value ?? null)}`;\n    case \"like\":\n      return `${col} LIKE ${bind(value ?? null)}`;\n    case \"ilike\":\n      return `${col} ILIKE ${bind(value ?? null)}`;\n    case \"in\": {\n      const items = Array.isArray(value)\n        ? value\n        : value === undefined\n          ? []\n          : [value];\n      if (items.length === 0) {\n        return \"1 = 0\";\n      }\n      const placeholders = items.map((item) => bind(item ?? null)).join(\", \");\n      return `${col} IN (${placeholders})`;\n    }\n    case \"is\": {\n      if (value === null || value === \"null\") {\n        return `${col} IS NULL`;\n      }\n      if (value === true || value === \"true\") {\n        return `${col} IS TRUE`;\n      }\n      if (value === false || value === \"false\") {\n        return `${col} IS FALSE`;\n      }\n      return `${col} IS ${bind(value)}`;\n    }\n    case \"contains\": {\n      // jsonb object containment or array @>\n      if (\n        value !== null &&\n        typeof value === \"object\" &&\n        !Array.isArray(value)\n      ) {\n        return `${col} @> ${bind(JSON.stringify(value))}::jsonb`;\n      }\n      return `${col} @> ${bind(value ?? null)}`;\n    }\n    case \"containedby\": {\n      if (\n        value !== null &&\n        typeof value === \"object\" &&\n        !Array.isArray(value)\n      ) {\n        return `${col} <@ ${bind(JSON.stringify(value))}::jsonb`;\n      }\n      return `${col} <@ ${bind(value ?? null)}`;\n    }\n    default:\n      throw new PostgresSqlCompileError(\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 { sql: \"\", values: [] };\n  }\n  const binder = new Binder();\n  const parts: string[] = [];\n  for (const condition of conditions) {\n    if (!condition.operator && condition.eq_column) {\n      parts.push(\n        conditionToWhere(\n          {\n            ...condition,\n            column: condition.eq_column,\n            operator: \"eq\",\n            value: condition.eq_value,\n          },\n          binder\n        )\n      );\n      continue;\n    }\n    parts.push(conditionToWhere(condition, binder));\n  }\n  return {\n    sql: parts.length ? `WHERE ${parts.join(\" AND \")}` : \"\",\n    values: binder.values,\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  if (limit === undefined && payload.page_size !== undefined) {\n    limit = payload.page_size;\n  }\n\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  // PostgreSQL allows OFFSET without LIMIT (unlike SQLite/D1).\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  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 PostgresSqlCompileError(\n          \"relations_unsupported\",\n          \"Nested relation selects are unsupported on PostgreSQL direct\"\n        );\n      }\n    }\n  }\n  if (payload.view_name) {\n    throw new PostgresSqlCompileError(\n      \"view_unsupported\",\n      \"view_name is unsupported on PostgreSQL direct L1\"\n    );\n  }\n}\n\nfunction resolveWhere(payload: {\n  conditions?: AthenaGatewayCondition[];\n  where?: AthenaJsonObject | Record<string, unknown>;\n}): WhereClause {\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 where;\n}\n\nfunction resolveBoundedIdentityColumn(\n  options?: PostgresCompileOptions\n): string {\n  const identity = options?.identityColumn?.trim();\n  if (!identity) {\n    throw new PostgresSqlCompileError(\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 (!SAFE_QUALIFIED.test(identity)) {\n    throw new PostgresSqlCompileError(\n      \"bounded_mutation_unsafe_identity\",\n      `Bounded update/delete cannot use identity column \"${identity}\"`\n    );\n  }\n  return identity;\n}\n\n/**\n * Bounded mutation via unique-identity IN (subquery).\n * Prefer caller-supplied PK/UNIQUE; never invent `id`.\n */\nfunction boundedIdentityInClause(\n  table: string,\n  whereSql: string,\n  whereValues: unknown[],\n  payload: {\n    limit?: number;\n    offset?: number;\n    current_page?: number;\n    page_size?: number;\n    sort_by?: AthenaSortBy;\n  },\n  options?: PostgresCompileOptions\n): { sql: string; values: unknown[] } {\n  assertEffectiveMutationBounds(payload);\n  const identity = resolveBoundedIdentityColumn(options);\n  const identitySql = quoteIdent(identity);\n  const tableSql = quoteIdent(table);\n  const innerWhere = whereSql.replace(/^WHERE\\s+/i, \"\");\n  const parts = [\n    `SELECT ${identitySql} FROM ${tableSql}`,\n    innerWhere ? `WHERE ${innerWhere}` : \"\",\n    orderClause(payload.sort_by),\n    limitOffsetClause(payload),\n  ].filter(Boolean);\n  return {\n    sql: `${identitySql} IN (${parts.join(\" \")})`,\n    values: [...whereValues],\n  };\n}\n\n/**\n * Compile flat gateway fetch to PostgreSQL SELECT.\n * When `head: true`, compiles a COUNT(*) query (no row body).\n */\nexport function compilePostgresFetch(\n  payload: AthenaFetchPayload\n): PostgresCompiledQuery {\n  rejectStructuredRelations(payload);\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new PostgresSqlCompileError(\n      \"missing_table\",\n      \"table_name is required for fetch\"\n    );\n  }\n\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  const where = resolveWhere(payload);\n\n  if (payload.head === true) {\n    return compilePostgresCountFromWhere(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 { text: parts.join(\" \"), values: where.values };\n}\n\n/**\n * COUNT(*) for the same filters as a fetch (used for head and exact totals).\n */\nexport function compilePostgresCount(\n  payload: AthenaFetchPayload\n): PostgresCompiledQuery {\n  rejectStructuredRelations(payload);\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new PostgresSqlCompileError(\n      \"missing_table\",\n      \"table_name is required for count\"\n    );\n  }\n  const where = resolveWhere(payload);\n  return compilePostgresCountFromWhere(table, where);\n}\n\nfunction compilePostgresCountFromWhere(\n  table: string,\n  where: WhereClause\n): PostgresCompiledQuery {\n  const parts = [\n    `SELECT COUNT(*)::bigint AS __athena_count FROM ${quoteIdent(table)}`,\n    where.sql,\n  ].filter(Boolean);\n  return { text: parts.join(\" \"), values: where.values };\n}\n\nexport function 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\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 PostgresSqlCompileError(\n      \"invalid_on_conflict\",\n      \"on_conflict requires at least one column\"\n    );\n  }\n  return columns;\n}\n\nfunction appendOnConflict(\n  parts: string[],\n  binder: Binder,\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      const ph = binder.add(jsonValue(value as AthenaJsonValue));\n      return `${quoteIdent(column)} = ${ph}`;\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 PostgreSQL.\n * Sparse multi-row uses DEFAULT for omitted columns (PG allows DEFAULT in VALUES).\n */\nexport function compilePostgresInsert(\n  payload: AthenaInsertPayload\n): PostgresCompiledQuery {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new PostgresSqlCompileError(\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 PostgresSqlCompileError(\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  const binder = new Binder();\n  const tableSql = quoteIdent(table);\n\n  if (columns.length === 0) {\n    if (rows.length !== 1) {\n      throw new PostgresSqlCompileError(\n        \"empty_insert\",\n        \"Multi-row insert_body cannot be empty objects; use a single {} for DEFAULT VALUES\"\n      );\n    }\n    if (payload.on_conflict) {\n      throw new PostgresSqlCompileError(\n        \"default_values_upsert_unsupported\",\n        \"DEFAULT VALUES upsert is unsupported on PostgreSQL direct; provide insert columns or omit onConflict\"\n      );\n    }\n    const parts = [`INSERT INTO ${tableSql} DEFAULT VALUES`];\n    if (wantsReturning(payload)) {\n      parts.push(`RETURNING ${selectClause(payload.columns)}`);\n    }\n    return { text: parts.join(\" \"), values: [] };\n  }\n\n  const forceNullForMissing = payload.default_to_null === true;\n\n  const valueGroups = rows.map((row) => {\n    const placeholders = columns.map((column) => {\n      const has = Object.hasOwn(row ?? {}, column);\n      if (!has) {\n        if (forceNullForMissing) {\n          return binder.add(null);\n        }\n        return \"DEFAULT\";\n      }\n      return binder.add(jsonValue((row as AthenaJsonObject)[column]));\n    });\n    return `(${placeholders.join(\", \")})`;\n  });\n\n  const parts = [\n    `INSERT INTO ${tableSql} (${columns.map(quoteIdent).join(\", \")})`,\n    `VALUES ${valueGroups.join(\", \")}`,\n  ];\n  appendOnConflict(parts, binder, payload, columns);\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n\n  return { text: parts.join(\" \"), values: binder.values };\n}\n\n/**\n * Compile update with required filters.\n * Pagination / sort bounds use a unique-identity IN (subquery).\n */\nexport function compilePostgresUpdate(\n  payload: AthenaUpdatePayload,\n  options?: PostgresCompileOptions\n): PostgresCompiledQuery {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new PostgresSqlCompileError(\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 PostgresSqlCompileError(\n      \"empty_update\",\n      \"update_body must not be empty\"\n    );\n  }\n\n  if (!payload.conditions?.length) {\n    throw new PostgresSqlCompileError(\n      \"unfiltered_update\",\n      \"UPDATE requires at least one condition on PostgreSQL direct\"\n    );\n  }\n\n  const binder = new Binder();\n  const assignments = entries.map(([column, value]) => {\n    const ph = binder.add(jsonValue(value as AthenaJsonValue));\n    return `${quoteIdent(column)} = ${ph}`;\n  });\n\n  // WHERE shares the same binder so $n continues after SET values.\n  const whereParts: string[] = [];\n  for (const condition of payload.conditions) {\n    if (!condition.operator && condition.eq_column) {\n      whereParts.push(\n        conditionToWhere(\n          {\n            ...condition,\n            column: condition.eq_column,\n            operator: \"eq\",\n            value: condition.eq_value,\n          },\n          binder\n        )\n      );\n      continue;\n    }\n    whereParts.push(conditionToWhere(condition, binder));\n  }\n  if (whereParts.length === 0) {\n    throw new PostgresSqlCompileError(\n      \"unfiltered_update\",\n      \"UPDATE requires at least one condition on PostgreSQL direct\"\n    );\n  }\n\n  let finalWhere = `WHERE ${whereParts.join(\" AND \")}`;\n\n  if (hasPaginationBounds(payload) || payload.sort_by) {\n    if (!hasPaginationBounds(payload)) {\n      throw new PostgresSqlCompileError(\n        \"order_without_bounds\",\n        \"UPDATE with sort_by requires limit/offset or page_size/current_page on PostgreSQL direct\"\n      );\n    }\n    // Rebuild with SET binds first, then a fresh where-only binder for the IN subquery.\n    const setValues = binder.values.slice(0, entries.length);\n    const whereOnly = buildWhere(payload.conditions);\n    const bound = boundedIdentityInClause(\n      table,\n      whereOnly.sql,\n      whereOnly.values,\n      payload,\n      options\n    );\n    binder.values.length = 0;\n    binder.values.push(...setValues, ...bound.values);\n    finalWhere = `WHERE ${reindexPlaceholders(bound.sql, setValues.length)}`;\n  }\n\n  const parts = [\n    `UPDATE ${quoteIdent(table)}`,\n    `SET ${assignments.join(\", \")}`,\n    finalWhere,\n  ];\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return { text: parts.join(\" \"), values: binder.values };\n}\n\n/** Shift $n placeholders by `offset` (for composing SET + IN-subquery binds). */\nfunction reindexPlaceholders(sql: string, offset: number): string {\n  if (!sql || offset === 0) {\n    return sql;\n  }\n  return sql.replace(/\\$(\\d+)/g, (_, n: string) => `$${Number(n) + offset}`);\n}\n\n/**\n * Compile delete with required filters.\n * Pagination / sort bounds use a unique-identity IN (subquery).\n *\n * `payload.resource_id` alone (no column filter) maps to `id = $n` for the common\n * Athena PK path — same contract as the D1 compiler. Explicit `.eq('resource_id', …)`\n * / other filters are preserved so tables with a real `resource_id` column are not\n * rewritten to `id`.\n */\nexport function compilePostgresDelete(\n  payload: AthenaDeletePayload,\n  options?: PostgresCompileOptions\n): PostgresCompiledQuery {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new PostgresSqlCompileError(\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 PostgresSqlCompileError(\n      \"unfiltered_delete\",\n      \"DELETE requires at least one condition or resource_id on PostgreSQL direct\"\n    );\n  }\n\n  let finalWhere = where.sql;\n  let values = where.values;\n\n  if (hasPaginationBounds(payload) || payload.sort_by) {\n    if (!hasPaginationBounds(payload)) {\n      throw new PostgresSqlCompileError(\n        \"order_without_bounds\",\n        \"DELETE with sort_by requires limit/offset or page_size/current_page on PostgreSQL direct\"\n      );\n    }\n    const bound = boundedIdentityInClause(\n      table,\n      where.sql,\n      where.values,\n      payload,\n      options\n    );\n    finalWhere = `WHERE ${bound.sql}`;\n    values = bound.values;\n  }\n\n  const parts = [`DELETE FROM ${quoteIdent(table)}`, finalWhere];\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return { text: parts.join(\" \"), values };\n}\n\n/**\n * Compile `athena.rpc(fn, args)` to `SELECT … FROM schema.fn(name => $n, …)`.\n * Filters apply to the table-valued result. Values stay bound.\n */\nexport function compilePostgresRpc(\n  payload: AthenaRpcPayload\n): PostgresCompiledQuery {\n  const name = (payload.function || payload.function_name || \"\").trim();\n  if (!name) {\n    throw new PostgresSqlCompileError(\n      \"missing_function\",\n      \"function is required for rpc\"\n    );\n  }\n  const schema = payload.schema?.trim();\n  const qualified = schema ? `${schema}.${name}` : name;\n  if (!SAFE_QUALIFIED.test(qualified)) {\n    throw new PostgresSqlCompileError(\n      \"invalid_identifier\",\n      `Invalid RPC function identifier: ${qualified}`\n    );\n  }\n\n  const binder = new Binder();\n  const args =\n    payload.args &&\n    typeof payload.args === \"object\" &&\n    !Array.isArray(payload.args)\n      ? Object.entries(payload.args)\n      : [];\n  const argSql = args\n    .map(([key, value]) => {\n      if (!SAFE_QUALIFIED.test(key)) {\n        throw new PostgresSqlCompileError(\n          \"invalid_identifier\",\n          `Invalid RPC argument name: ${key}`\n        );\n      }\n      return `${quoteIdent(key)} => ${binder.add(jsonValue(value as AthenaJsonValue))}`;\n    })\n    .join(\", \");\n\n  const select = payload.head\n    ? \"COUNT(*)::bigint AS __athena_count\"\n    : selectClause(payload.select);\n  const parts = [`SELECT ${select} FROM ${quoteIdent(qualified)}(${argSql})`];\n\n  if (payload.filters?.length) {\n    const whereParts = payload.filters.map((filter) =>\n      conditionToWhere(\n        {\n          column: filter.column,\n          operator: filter.operator,\n          value: filter.value as AthenaGatewayCondition[\"value\"],\n        },\n        binder\n      )\n    );\n    parts.push(`WHERE ${whereParts.join(\" AND \")}`);\n  }\n\n  if (payload.order?.column?.trim()) {\n    const direction = payload.order.ascending === false ? \"DESC\" : \"ASC\";\n    parts.push(`ORDER BY ${quoteIdent(payload.order.column)} ${direction}`);\n  }\n\n  if (!payload.head && payload.limit !== undefined) {\n    parts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`);\n  }\n  if (!payload.head && payload.offset !== undefined) {\n    parts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`);\n  }\n\n  return { text: parts.join(\" \"), values: binder.values };\n}\n","/**\n * Resolve a proven single-column unique identity for bounded UPDATE/DELETE.\n * Prefer single-column PRIMARY KEY (NOT NULL); else single-column UNIQUE NOT NULL\n * non-partial index. Never invent `id`.\n */\n\nimport type { AthenaPostgresQueryable } from \"./driver.ts\";\nimport { PostgresSqlCompileError } from \"./sql.ts\";\n\nexport interface ParsedTableName {\n  /** True when the caller passed an unqualified relation name. */\n  bare: boolean;\n  /** Cache / display key before search_path resolve: bare table or schema.table */\n  key: string;\n  /**\n   * Schema when qualified (`public.users`).\n   * `null` for bare names — resolve via the connection `search_path`.\n   */\n  schema: string | null;\n  table: string;\n}\n\nconst SAFE_IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/**\n * Split `public.users` or bare `users` (schema resolved via search_path later).\n */\nexport function parsePostgresTableName(tableName: string): ParsedTableName {\n  const trimmed = tableName.trim();\n  if (!trimmed) {\n    throw new PostgresSqlCompileError(\n      \"missing_table\",\n      \"table_name is required for bounded mutation identity resolve\"\n    );\n  }\n  const parts = trimmed\n    .split(\".\")\n    .map((p) => p.trim())\n    .filter(Boolean);\n  if (parts.length === 1) {\n    const table = parts[0]!;\n    if (!SAFE_IDENT.test(table)) {\n      throw new PostgresSqlCompileError(\n        \"invalid_identifier\",\n        `Invalid table name for identity resolve: ${trimmed}`\n      );\n    }\n    return { bare: true, key: table, schema: null, table };\n  }\n  if (parts.length === 2) {\n    const [schema, table] = parts as [string, string];\n    if (!(SAFE_IDENT.test(schema) && SAFE_IDENT.test(table))) {\n      throw new PostgresSqlCompileError(\n        \"invalid_identifier\",\n        `Invalid schema-qualified name for identity resolve: ${trimmed}`\n      );\n    }\n    return { bare: false, key: `${schema}.${table}`, schema, table };\n  }\n  throw new PostgresSqlCompileError(\n    \"invalid_identifier\",\n    `Identity resolve supports schema.table only: ${trimmed}`\n  );\n}\n\n/** Single-column PRIMARY KEY that is NOT NULL. */\nconst PK_IDENTITY_SQL = `\nSELECT a.attname AS column_name\nFROM pg_constraint con\nJOIN pg_class c ON c.oid = con.conrelid\nJOIN pg_namespace n ON n.oid = c.relnamespace\nJOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = con.conkey[1]\nWHERE con.contype = 'p'\n  AND n.nspname = $1\n  AND c.relname = $2\n  AND cardinality(con.conkey) = 1\n  AND a.attnotnull\n  AND NOT a.attisdropped\nLIMIT 1\n`.trim();\n\n/**\n * Single-column UNIQUE index, non-partial, column NOT NULL, and valid.\n * Excludes primary keys (handled above). Expression indexes excluded via attnum > 0.\n * `indisvalid` rejects failed CREATE UNIQUE INDEX CONCURRENTLY leftovers.\n */\nconst UNIQUE_IDENTITY_SQL = `\nSELECT a.attname AS column_name\nFROM pg_index i\nJOIN pg_class t ON t.oid = i.indrelid\nJOIN pg_namespace n ON n.oid = t.relnamespace\nJOIN pg_attribute a\n  ON a.attrelid = t.oid\n AND a.attnum = i.indkey[0]\n AND a.attnum > 0\nWHERE i.indisunique\n  AND i.indisvalid\n  AND NOT i.indisprimary\n  AND i.indnkeyatts = 1\n  AND i.indpred IS NULL\n  AND a.attnotnull\n  AND NOT a.attisdropped\n  AND n.nspname = $1\n  AND t.relname = $2\nORDER BY a.attname\nLIMIT 1\n`.trim();\n\n/**\n * Resolve a bare relation name the same way the executor would (`search_path`).\n * `to_regclass` returns NULL when no visible relation matches.\n * Callers must pass a double-quoted identifier string so mixed-case names are\n * not folded (matches compiler `\"Ident\"` quoting).\n */\nconst RESOLVE_BARE_RELATION_SQL = `\nSELECT n.nspname AS schema_name, c.relname AS table_name\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE c.oid = to_regclass($1)\nLIMIT 1\n`.trim();\n\n/**\n * Format a validated bare identifier for `to_regclass`.\n * Unquoted input would be folded to lowercase by PostgreSQL, which diverges\n * from the mutation compiler's always-quoted identifiers.\n */\nexport function quotePostgresRegclassName(identifier: string): string {\n  if (!SAFE_IDENT.test(identifier)) {\n    throw new PostgresSqlCompileError(\n      \"invalid_identifier\",\n      `Invalid table name for regclass resolve: ${identifier}`\n    );\n  }\n  return `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nexport interface PostgresIdentityCache {\n  /** Successful identity column by schema.table */\n  get(key: string): string | undefined;\n  /** Negative cache: resolved and none found */\n  getMissing(key: string): boolean;\n  set(key: string, column: string): void;\n  setMissing(key: string): void;\n}\n\nexport function createPostgresIdentityCache(): PostgresIdentityCache {\n  const hits = new Map<string, string>();\n  const misses = new Set<string>();\n  return {\n    get(key) {\n      return hits.get(key);\n    },\n    getMissing(key) {\n      return misses.has(key);\n    },\n    set(key, column) {\n      misses.delete(key);\n      hits.set(key, column);\n    },\n    setMissing(key) {\n      hits.delete(key);\n      misses.add(key);\n    },\n  };\n}\n\nfunction columnFromRows(rows: unknown[]): string | undefined {\n  const first = rows[0];\n  if (!first || typeof first !== \"object\" || Array.isArray(first)) {\n    return;\n  }\n  const name = (first as { column_name?: unknown }).column_name;\n  return typeof name === \"string\" && name.trim() ? name.trim() : undefined;\n}\n\ninterface ResolvedRelation {\n  /** Cache key for this relation (schema.table). */\n  key: string;\n  schema: string;\n  table: string;\n}\n\nasync function resolveRelationTarget(\n  pool: AthenaPostgresQueryable,\n  parsed: ParsedTableName\n): Promise<ResolvedRelation> {\n  if (!parsed.bare && parsed.schema) {\n    return {\n      key: `${parsed.schema}.${parsed.table}`,\n      schema: parsed.schema,\n      table: parsed.table,\n    };\n  }\n\n  const result = await pool.query<{\n    schema_name: string;\n    table_name: string;\n  }>(RESOLVE_BARE_RELATION_SQL, [quotePostgresRegclassName(parsed.table)]);\n  const first = result.rows[0];\n  if (\n    !first ||\n    typeof first !== \"object\" ||\n    typeof first.schema_name !== \"string\" ||\n    typeof first.table_name !== \"string\" ||\n    !first.schema_name.trim() ||\n    !first.table_name.trim()\n  ) {\n    throw new PostgresSqlCompileError(\n      \"relation_not_found\",\n      `Cannot resolve bare table \"${parsed.table}\" on the connection search_path for bounded mutation identity`\n    );\n  }\n  const schema = first.schema_name.trim();\n  const table = first.table_name.trim();\n  return { key: `${schema}.${table}`, schema, table };\n}\n\n/**\n * Resolve identity for bounded mutations against a live pool.\n * Throws PostgresSqlCompileError when no safe single-column identity exists.\n *\n * Cache keys are always schema-qualified. Bare names re-run `to_regclass` on\n * every call so a changed connection `search_path` cannot reuse a stale target.\n */\nexport async function resolvePostgresBoundedIdentityColumn(\n  pool: AthenaPostgresQueryable,\n  tableName: string,\n  cache?: PostgresIdentityCache\n): Promise<string> {\n  const parsed = parsePostgresTableName(tableName);\n\n  // Qualified names can consult the cache before any catalog round-trip.\n  if (!parsed.bare && cache) {\n    const cached = cache.get(parsed.key);\n    if (cached) {\n      return cached;\n    }\n    if (cache.getMissing(parsed.key)) {\n      throw noIdentityError(parsed.key);\n    }\n  }\n\n  // Bare names always resolve the live search_path target first.\n  const target = await resolveRelationTarget(pool, parsed);\n\n  if (cache) {\n    const cachedQualified = cache.get(target.key);\n    if (cachedQualified) {\n      return cachedQualified;\n    }\n    if (cache.getMissing(target.key)) {\n      throw noIdentityError(target.key);\n    }\n  }\n\n  const pk = await pool.query<{ column_name: string }>(PK_IDENTITY_SQL, [\n    target.schema,\n    target.table,\n  ]);\n  const pkCol = columnFromRows(pk.rows as unknown[]);\n  if (pkCol) {\n    cache?.set(target.key, pkCol);\n    return pkCol;\n  }\n\n  const uniq = await pool.query<{ column_name: string }>(UNIQUE_IDENTITY_SQL, [\n    target.schema,\n    target.table,\n  ]);\n  const uniqCol = columnFromRows(uniq.rows as unknown[]);\n  if (uniqCol) {\n    cache?.set(target.key, uniqCol);\n    return uniqCol;\n  }\n\n  cache?.setMissing(target.key);\n  throw noIdentityError(target.key);\n}\n\nfunction noIdentityError(tableKey: string): PostgresSqlCompileError {\n  return new PostgresSqlCompileError(\n    \"bounded_mutation_no_unique_identity\",\n    `Bounded update/delete on \"${tableKey}\" requires a proven single-column PRIMARY KEY or UNIQUE NOT NULL index`\n  );\n}\n\n/**\n * True when payload needs identity resolution for bounded mutations.\n */\nexport function needsBoundedIdentity(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n  sort_by?: unknown;\n}): boolean {\n  return (\n    payload.limit !== undefined ||\n    payload.offset !== undefined ||\n    payload.page_size !== undefined ||\n    payload.current_page !== undefined ||\n    Boolean(payload.sort_by)\n  );\n}\n","import type {\n  AthenaRelationCatalog,\n  AthenaRelationDescriptor,\n} from \"../query/engine/index.ts\";\nimport { canonicalIdentity } from \"../query/engine/index.ts\";\nimport type { AthenaPostgresQueryable } from \"./driver.ts\";\n\nconst FK_SQL = `\nSELECT\n  src_ns.nspname AS from_schema,\n  src_rel.relname AS from_table,\n  src_att.attname AS from_column,\n  dst_ns.nspname AS to_schema,\n  dst_rel.relname AS to_table,\n  dst_att.attname AS to_column,\n  con.conname AS constraint_name,\n  src_ord.ordinality AS position\nFROM pg_constraint con\nJOIN pg_class src_rel ON src_rel.oid = con.conrelid\nJOIN pg_namespace src_ns ON src_ns.oid = src_rel.relnamespace\nJOIN pg_class dst_rel ON dst_rel.oid = con.confrelid\nJOIN pg_namespace dst_ns ON dst_ns.oid = dst_rel.relnamespace\nJOIN LATERAL unnest(con.conkey) WITH ORDINALITY AS src_ord(attnum, ordinality) ON true\nJOIN LATERAL unnest(con.confkey) WITH ORDINALITY AS dst_ord(attnum, ordinality)\n  ON dst_ord.ordinality = src_ord.ordinality\nJOIN pg_attribute src_att\n  ON src_att.attrelid = src_rel.oid AND src_att.attnum = src_ord.attnum\nJOIN pg_attribute dst_att\n  ON dst_att.attrelid = dst_rel.oid AND dst_att.attnum = dst_ord.attnum\nWHERE con.contype = 'f'\n  AND NOT src_att.attisdropped\n  AND NOT dst_att.attisdropped\nORDER BY src_ns.nspname, src_rel.relname, con.conname, src_ord.ordinality\n`.trim();\n\nconst UNIQUE_SQL = `\nSELECT\n  n.nspname AS table_schema,\n  c.relname AS table_name,\n  a.attname AS column_name,\n  con.conname AS constraint_name\nFROM pg_constraint con\nJOIN pg_class c ON c.oid = con.conrelid\nJOIN pg_namespace n ON n.oid = c.relnamespace\nJOIN LATERAL unnest(con.conkey) AS cols(attnum) ON true\nJOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = cols.attnum\nWHERE con.contype IN ('p', 'u')\n  AND NOT a.attisdropped\nORDER BY n.nspname, c.relname, con.conname, a.attname\n`.trim();\n\ninterface ForeignKeyRow {\n  constraint_name: string;\n  from_column: string;\n  from_schema: string;\n  from_table: string;\n  position: number | string;\n  to_column: string;\n  to_schema: string;\n  to_table: string;\n}\n\ninterface UniqueKeyRow {\n  column_name: string;\n  constraint_name: string;\n  table_name: string;\n  table_schema: string;\n}\n\nconst catalogCache = new WeakMap<\n  AthenaPostgresQueryable,\n  Promise<AthenaRelationCatalog>\n>();\n\nfunction sortedJoin(columns: string[]): string {\n  return [...columns].sort().join(\"\\0\");\n}\n\nexport function childForeignKeyMatchesUniqueSet(\n  fkColumns: readonly string[],\n  uniqueColumns: readonly string[]\n): boolean {\n  if (fkColumns.length === 0) {\n    return false;\n  }\n  if (new Set(fkColumns).size !== fkColumns.length) {\n    return false;\n  }\n  return sortedJoin([...fkColumns]) === sortedJoin([...uniqueColumns]);\n}\n\nexport async function loadPostgresRelationCatalog(\n  queryable: AthenaPostgresQueryable\n): Promise<AthenaRelationCatalog> {\n  const cached = catalogCache.get(queryable);\n  if (cached) {\n    return cached;\n  }\n  const pending = Promise.all([\n    queryable.query(FK_SQL),\n    queryable.query(UNIQUE_SQL),\n  ]).then(([fkResult, uniqueResult]) => {\n    const uniqueSets = new Map<string, string[][]>();\n    const uniqueGroups = new Map<string, string[]>();\n    for (const raw of uniqueResult.rows as UniqueKeyRow[]) {\n      const key = `${raw.table_schema}.${raw.table_name}\\0${raw.constraint_name}`;\n      const columns = uniqueGroups.get(key) ?? [];\n      columns.push(raw.column_name);\n      uniqueGroups.set(key, columns);\n    }\n    for (const [key, columns] of uniqueGroups) {\n      const tableKey = key.split(\"\\0\")[0] ?? \"\";\n      const sets = uniqueSets.get(tableKey) ?? [];\n      sets.push(columns);\n      uniqueSets.set(tableKey, sets);\n    }\n\n    const groups = new Map<string, AthenaRelationDescriptor>();\n    for (const raw of fkResult.rows as ForeignKeyRow[]) {\n      const id = canonicalIdentity(\n        \"relation\",\n        \"postgres\",\n        raw.from_schema,\n        raw.from_table,\n        raw.constraint_name\n      );\n      const constraint = canonicalIdentity(\n        \"constraint\",\n        \"postgres\",\n        raw.from_schema,\n        raw.from_table,\n        raw.constraint_name\n      );\n      const existing = groups.get(id);\n      if (existing) {\n        existing.from.columns.push(raw.from_column);\n        existing.to.columns.push(raw.to_column);\n        if (!existing.constraintAliases?.includes(raw.from_column)) {\n          existing.constraintAliases?.push(raw.from_column);\n        }\n        continue;\n      }\n      groups.set(id, {\n        cardinality: \"many-to-one\",\n        constraint,\n        constraintAliases: [raw.constraint_name, raw.from_column],\n        from: {\n          columns: [raw.from_column],\n          schema: raw.from_schema,\n          table: raw.from_table,\n        },\n        id,\n        name: raw.to_table,\n        source: \"provider-discovery\",\n        to: {\n          columns: [raw.to_column],\n          schema: raw.to_schema,\n          table: raw.to_table,\n        },\n      });\n    }\n    for (const entry of groups.values()) {\n      const tableKey = `${entry.from.schema ?? \"\"}.${entry.from.table}`;\n      const unique = uniqueSets.get(tableKey) ?? [];\n      if (\n        unique.some((columns) =>\n          childForeignKeyMatchesUniqueSet(entry.from.columns, columns)\n        )\n      ) {\n        entry.cardinality = \"one-to-one\";\n      }\n    }\n    return { entries: [...groups.values()] };\n  });\n  catalogCache.set(queryable, pending);\n  return pending;\n}\n","/**\n * Map node-pg / PostgreSQL driver failures to gateway-shaped status + codes.\n * Keeps raw DriverError off the public surface (hint may include SQLSTATE).\n * SQLSTATE is a Failure IR provider fact, never the Athena public code.\n */\n\nimport type { AthenaGatewayTransportErrorCode } from \"../gateway/types.ts\";\nimport type { AthenaProviderFailureIR } from \"../runtime/error/failure.ts\";\n\nexport interface MappedPostgresError {\n  code: AthenaGatewayTransportErrorCode;\n  hint?: string;\n  message: string;\n  /** PostgreSQL SQLSTATE when known. */\n  sqlState?: string;\n  status: number;\n}\n\nexport interface PostgresDriverErrorLike {\n  code?: string;\n  column?: string;\n  constraint?: string;\n  detail?: string;\n  message?: string;\n  schema?: string;\n  table?: string;\n}\n\n/** Strip embedded connection URIs from driver messages. */\nexport function sanitizePostgresMessage(message: string): string {\n  return message.replace(/postgres(?:ql)?:\\/\\/[^\\s'\"]+/gi, \"postgresql://***\");\n}\n\nfunction asDriverError(error: unknown): PostgresDriverErrorLike {\n  if (error && typeof error === \"object\") {\n    return error as PostgresDriverErrorLike;\n  }\n  return {\n    message: error instanceof Error ? error.message : String(error),\n  };\n}\n\nfunction withConstraintHint(\n  base: string,\n  err: PostgresDriverErrorLike\n): string {\n  if (err.constraint?.trim()) {\n    return `${base} (${err.constraint.trim()})`;\n  }\n  return base;\n}\n\n/**\n * Extract PostgreSQL provider facts for Error IR. SQLSTATE is `providerCode`.\n */\nexport function postgresProviderFailure(\n  error: unknown\n): AthenaProviderFailureIR {\n  const mapped = mapPostgresDriverError(error);\n  return {\n    message: mapped.message,\n    provider: \"postgres\",\n    ...(mapped.sqlState ? { providerCode: mapped.sqlState } : {}),\n    source: \"provider\",\n    status: mapped.status,\n  };\n}\n\n/**\n * Classify a thrown `pg` error into HTTP-ish status + Athena gateway code.\n */\nexport function mapPostgresDriverError(error: unknown): MappedPostgresError {\n  const err = asDriverError(error);\n  const sqlState =\n    typeof err.code === \"string\" && /^[0-9A-Z]{5}$/i.test(err.code)\n      ? err.code.toUpperCase()\n      : undefined;\n  const message = sanitizePostgresMessage(\n    err.message?.trim() ||\n      (error instanceof Error ? error.message : String(error)) ||\n      \"PostgreSQL driver error\"\n  );\n\n  if (!sqlState) {\n    // Non-SQLSTATE driver failures (pool exhausted, network before handshake).\n    const lower = message.toLowerCase();\n    if (\n      lower.includes(\"econnrefused\") ||\n      lower.includes(\"enotfound\") ||\n      lower.includes(\"econnreset\") ||\n      lower.includes(\"connection terminated\") ||\n      lower.includes(\"timeout\")\n    ) {\n      return {\n        code: \"NETWORK_ERROR\",\n        hint: \"connection\",\n        message,\n        status: 503,\n      };\n    }\n    return {\n      code: \"HTTP_ERROR\",\n      message,\n      status: 400,\n    };\n  }\n\n  switch (sqlState) {\n    case \"23505\": // unique_violation\n      return {\n        code: \"HTTP_ERROR\",\n        hint: withConstraintHint(\"unique_violation\", err),\n        message,\n        sqlState,\n        status: 409,\n      };\n    case \"23503\": // foreign_key_violation\n      return {\n        code: \"HTTP_ERROR\",\n        hint: withConstraintHint(\"foreign_key_violation\", err),\n        message,\n        sqlState,\n        status: 409,\n      };\n    case \"23502\": // not_null_violation\n      return {\n        code: \"HTTP_ERROR\",\n        hint: err.column\n          ? `not_null_violation (${err.column})`\n          : \"not_null_violation\",\n        message,\n        sqlState,\n        status: 400,\n      };\n    case \"23514\": // check_violation\n      return {\n        code: \"HTTP_ERROR\",\n        hint: withConstraintHint(\"check_violation\", err),\n        message,\n        sqlState,\n        status: 400,\n      };\n    case \"22P02\": // invalid_text_representation\n    case \"22003\": // numeric_value_out_of_range\n    case \"22007\": // invalid_datetime_format\n    case \"22008\": // datetime_field_overflow\n    case \"22012\": // division_by_zero\n    case \"22023\": // invalid_parameter_value\n      return {\n        code: \"HTTP_ERROR\",\n        hint: sqlState,\n        message,\n        sqlState,\n        status: 400,\n      };\n    case \"42P01\": // undefined_table\n    case \"42703\": // undefined_column\n    case \"42883\": // undefined_function\n    case \"3F000\": // invalid_schema_name\n      return {\n        code: \"HTTP_ERROR\",\n        hint: sqlState,\n        message,\n        sqlState,\n        status: 404,\n      };\n    case \"42P02\": // undefined_parameter\n    case \"42704\": // undefined_object\n    case \"42601\": // syntax_error\n    case \"42602\": // invalid_name\n    case \"42701\": // duplicate_column\n    case \"42P07\": // duplicate_table\n    case \"3D000\": // invalid_catalog_name\n      return {\n        code: \"HTTP_ERROR\",\n        hint: sqlState,\n        message,\n        sqlState,\n        status: 400,\n      };\n    case \"40001\": // serialization_failure\n    case \"40P01\": // deadlock_detected\n      return {\n        code: \"HTTP_ERROR\",\n        hint: sqlState,\n        message,\n        sqlState,\n        status: 409,\n      };\n    case \"55P03\": // lock_not_available\n    case \"53300\": // too_many_connections\n    case \"53400\": // configuration_limit_exceeded\n    case \"57P03\": // cannot_connect_now\n    case \"08000\": // connection_exception\n    case \"08003\": // connection_does_not_exist\n    case \"08006\": // connection_failure\n    case \"08001\": // sqlclient_unable_to_establish_sqlconnection\n    case \"08004\": // sqlserver_rejected_establishment_of_sqlconnection\n      return {\n        code: \"NETWORK_ERROR\",\n        hint: sqlState,\n        message,\n        sqlState,\n        status: 503,\n      };\n    case \"28P01\": // invalid_password\n    case \"28000\": // invalid_authorization_specification\n      return {\n        code: \"HTTP_ERROR\",\n        hint: sqlState,\n        message,\n        sqlState,\n        status: 401,\n      };\n    case \"42501\": // insufficient_privilege\n      return {\n        code: \"HTTP_ERROR\",\n        hint: sqlState,\n        message,\n        sqlState,\n        status: 403,\n      };\n    case \"57014\": // query_canceled\n      return {\n        code: \"HTTP_ERROR\",\n        hint: sqlState,\n        message,\n        sqlState,\n        status: 408,\n      };\n    case \"25006\": // read_only_sql_transaction\n      return {\n        code: \"HTTP_ERROR\",\n        hint: sqlState,\n        message,\n        sqlState,\n        status: 403,\n      };\n    default:\n      return {\n        code: \"HTTP_ERROR\",\n        hint: sqlState,\n        message,\n        sqlState,\n        status: 400,\n      };\n  }\n}\n","import {\n  buildPostgresBeginStatement,\n  nextInternalSavepointName,\n} from \"../db/transaction/begin-sql.ts\";\nimport { AthenaTransactionError } from \"../db/transaction/errors.ts\";\nimport type {\n  AthenaInteractiveTransactionTransport,\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionOperation,\n  AthenaTransactionTransport,\n  AthenaTransactionTransportResult,\n} from \"../db/transaction/types.ts\";\nimport { POSTGRES_DIRECT_TRANSACTION_CAPABILITIES } from \"../db/transaction/types.ts\";\nimport type { AthenaGatewayResponse } from \"../gateway/types.ts\";\nimport type { AthenaPostgresClient } from \"./driver.ts\";\nimport { ATHENA_POSTGRES_POOL_DEFAULTS } from \"./driver.ts\";\nimport { executePostgresTransactionOperation } from \"./execute.ts\";\nimport type { PostgresIdentityCache } from \"./identity.ts\";\nimport { PostgresDeadline } from \"./pool/deadline.ts\";\nimport type { PostgresPoolManager } from \"./pool/manager.ts\";\nimport { classifyPostgresClientPoison } from \"./pool/poison.ts\";\n\nfunction quoteSavepointIdent(name: string): string {\n  if (!/^athena_sp_\\d+$/.test(name)) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n      \"Savepoint names must be generated internally\"\n    );\n  }\n  return `\"${name}\"`;\n}\n\nasync function runControl(\n  client: AthenaPostgresClient,\n  sql: string\n): Promise<void> {\n  await client.query(sql);\n}\n\nexport function createPostgresTransactionTransport(input: {\n  defaultIdentityColumn?: string;\n  getPoolManager: () => Promise<PostgresPoolManager>;\n  identityCache: PostgresIdentityCache;\n}): AthenaTransactionTransport {\n  const getPoolManager = input.getPoolManager;\n  return {\n    async beginInteractive(options?: AthenaResolvedTransactionOptions) {\n      const lease = await (await getPoolManager()).acquire({\n        deadline: PostgresDeadline.after(\n          options?.timeoutMs ??\n            ATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis\n        ),\n        target: \"pooled\",\n        workload: \"transaction\",\n      });\n      const client = lease.client;\n      let released = false;\n      const release = (err?: Error | boolean) => {\n        if (released) {\n          return;\n        }\n        released = true;\n        if (err === undefined) {\n          lease.release();\n        } else {\n          lease.destroy(err);\n        }\n      };\n      try {\n        await runControl(client, buildPostgresBeginStatement(options));\n      } catch (error) {\n        release(true);\n        throw error;\n      }\n      const interactive: AthenaInteractiveTransactionTransport = {\n        async commit() {\n          try {\n            await runControl(client, \"COMMIT\");\n          } finally {\n            release();\n          }\n        },\n        async createSavepoint(name) {\n          await runControl(client, `SAVEPOINT ${quoteSavepointIdent(name)}`);\n        },\n        async execute(operation: AthenaTransactionOperation) {\n          return executePostgresTransactionOperation({\n            cache: input.identityCache,\n            callOptions: options?.callOptions,\n            defaultIdentityColumn: input.defaultIdentityColumn,\n            operation,\n            queryable: client,\n          });\n        },\n        async releaseSavepoint(name) {\n          await runControl(\n            client,\n            `RELEASE SAVEPOINT ${quoteSavepointIdent(name)}`\n          );\n        },\n        async rollback() {\n          try {\n            await runControl(client, \"ROLLBACK\");\n          } finally {\n            release();\n          }\n        },\n        async rollbackToSavepoint(name) {\n          await runControl(\n            client,\n            `ROLLBACK TO SAVEPOINT ${quoteSavepointIdent(name)}`\n          );\n        },\n      };\n      return interactive;\n    },\n    capabilities: POSTGRES_DIRECT_TRANSACTION_CAPABILITIES,\n    async executeAtomic(\n      operations: readonly AthenaTransactionOperation[],\n      options?: AthenaResolvedTransactionOptions\n    ): Promise<AthenaTransactionTransportResult> {\n      const lease = await (await getPoolManager()).acquire({\n        deadline: PostgresDeadline.after(\n          options?.timeoutMs ??\n            ATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis\n        ),\n        target: \"pooled\",\n        workload: \"transaction\",\n      });\n      const client = lease.client;\n      const results: AthenaGatewayResponse<unknown>[] = [];\n      try {\n        await runControl(client, buildPostgresBeginStatement(options));\n        for (const operation of operations) {\n          const result = await executePostgresTransactionOperation({\n            cache: input.identityCache,\n            callOptions: options?.callOptions,\n            defaultIdentityColumn: input.defaultIdentityColumn,\n            operation,\n            queryable: client,\n          });\n          results.push(result);\n          if (!result.ok) {\n            await runControl(client, \"ROLLBACK\");\n            return { committed: false, results };\n          }\n        }\n        await runControl(client, \"COMMIT\");\n        return { committed: true, results };\n      } catch (error) {\n        try {\n          await runControl(client, \"ROLLBACK\");\n        } catch (rollbackError) {\n          lease.destroy(rollbackError);\n          throw error;\n        }\n        if (classifyPostgresClientPoison(error) === \"destroy\") {\n          lease.destroy(error);\n          throw error;\n        }\n        throw error;\n      } finally {\n        lease.release();\n      }\n    },\n  };\n}\n\nexport { nextInternalSavepointName };\n","import { AthenaGatewayError } from \"../gateway/errors.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaUpdatePayload,\n} from \"../gateway/types.ts\";\nimport { AthenaQueryError } from \"../query/engine/index.ts\";\nimport { resolveMutationAffectedRows } from \"../result/mutation-meta.ts\";\nimport {\n  keepNullKeysFromFindManySelect,\n  maybeStripNullRows,\n  stripNullPropertiesFromRows,\n} from \"../result/strip-null-properties.ts\";\nimport {\n  compilePostgresStructuredCount,\n  compilePostgresStructuredFetch,\n  needsPostgresAstPipeline,\n} from \"./compile-fetch.ts\";\nimport type { AthenaPostgresQueryable } from \"./driver.ts\";\nimport { mapPostgresDriverError, sanitizePostgresMessage } from \"./errors.ts\";\nimport {\n  needsBoundedIdentity,\n  type PostgresIdentityCache,\n  resolvePostgresBoundedIdentityColumn,\n} from \"./identity.ts\";\nimport {\n  compilePostgresCount,\n  compilePostgresDelete,\n  compilePostgresFetch,\n  compilePostgresInsert,\n  compilePostgresUpdate,\n  extractAthenaCount,\n  type PostgresCompiledQuery,\n  type PostgresCompileOptions,\n  PostgresSqlCompileError,\n} from \"./sql.ts\";\n\nexport function resolvePostgresStripNulls(\n  payloadStrip: boolean | undefined,\n  callOptions: AthenaGatewayCallOptions | undefined,\n  defaultValue: boolean\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\nexport { maybeStripNullRows, stripNullPropertiesFromRows };\n\nexport function postgresSuccessResponse<T>(\n  data: T,\n  count: number | null | undefined,\n  raw: unknown,\n  affectedRows?: number | null\n): AthenaGatewayResponse<T> {\n  return {\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}\n\nexport function postgresErrorResponse<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\nexport function postgresCompileErrorResponse<T>(\n  error: unknown,\n  endpoint: string,\n  method: string\n): AthenaGatewayResponse<T> {\n  if (error instanceof PostgresSqlCompileError) {\n    return postgresErrorResponse(\n      400,\n      \"HTTP_ERROR\",\n      error.message,\n      endpoint,\n      method,\n      `PostgreSQL SQL compile failed (${error.code})`\n    );\n  }\n  if (error instanceof AthenaQueryError) {\n    return postgresErrorResponse(\n      400,\n      \"HTTP_ERROR\",\n      error.message,\n      endpoint,\n      method,\n      `Athena query compile failed (${error.code})`\n    );\n  }\n  const mapped = mapPostgresDriverError(error);\n  return postgresErrorResponse(\n    mapped.status,\n    mapped.code,\n    mapped.message,\n    endpoint,\n    method,\n    mapped.hint\n  );\n}\n\nexport function mapPostgresQueryError<T>(\n  error: unknown,\n  endpoint: string,\n  method: string\n): AthenaGatewayResponse<T> {\n  if (error instanceof PostgresSqlCompileError) {\n    return postgresCompileErrorResponse(error, endpoint, method);\n  }\n  const mapped = mapPostgresDriverError(error);\n  return postgresErrorResponse(\n    mapped.status,\n    mapped.code,\n    sanitizePostgresMessage(mapped.message),\n    endpoint,\n    method,\n    mapped.hint\n  );\n}\n\nexport async function executePostgresCompiled<T>(input: {\n  compiled: PostgresCompiledQuery;\n  endpoint: string;\n  mapResult?: (\n    rows: unknown[],\n    rowCount: number\n  ) => { count: number | null; data: T };\n  method: string;\n  queryable: AthenaPostgresQueryable;\n  stripNulls?: boolean;\n  keepNullKeys?: ReadonlySet<string>;\n}): Promise<AthenaGatewayResponse<T>> {\n  try {\n    const result = await input.queryable.query(\n      input.compiled.text,\n      input.compiled.values\n    );\n    const strip = input.stripNulls ?? true;\n    const rows = maybeStripNullRows(\n      result.rows as unknown[],\n      strip,\n      input.keepNullKeys\n    );\n    const rowCount =\n      typeof result.rowCount === \"number\" ? result.rowCount : rows.length;\n    const mapped = input.mapResult?.(rows, rowCount) ?? {\n      count: rowCount,\n      data: rows as T,\n    };\n    const affectedRows = resolveMutationAffectedRows({\n      count:\n        typeof result.rowCount === \"number\"\n          ? result.rowCount\n          : (mapped.count ?? null),\n      endpoint: input.endpoint,\n      raw: result,\n    });\n    return postgresSuccessResponse(\n      mapped.data,\n      mapped.count,\n      result,\n      affectedRows\n    );\n  } catch (error) {\n    return mapPostgresQueryError(error, input.endpoint, input.method);\n  }\n}\n\nexport async function resolvePostgresMutationCompileOptions(input: {\n  cache: PostgresIdentityCache;\n  defaultIdentityColumn?: string;\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  queryable: AthenaPostgresQueryable;\n}): Promise<PostgresCompileOptions | undefined> {\n  if (!needsBoundedIdentity(input.payload)) {\n    return;\n  }\n  const hasPage =\n    input.payload.limit !== undefined ||\n    input.payload.offset !== undefined ||\n    input.payload.page_size !== undefined ||\n    input.payload.current_page !== undefined;\n  if (!hasPage) {\n    return;\n  }\n  if (input.defaultIdentityColumn) {\n    return { identityColumn: input.defaultIdentityColumn };\n  }\n  const identityColumn = await resolvePostgresBoundedIdentityColumn(\n    input.queryable,\n    input.payload.table_name ?? \"\",\n    input.cache\n  );\n  return { identityColumn };\n}\n\nexport async function executePostgresFetch<T>(input: {\n  callOptions?: AthenaGatewayCallOptions;\n  payload: AthenaFetchPayload;\n  queryable: AthenaPostgresQueryable;\n}): Promise<AthenaGatewayResponse<T>> {\n  try {\n    const compiled = needsPostgresAstPipeline(input.payload)\n      ? await compilePostgresStructuredFetch(input.payload, input.queryable)\n      : compilePostgresFetch(input.payload);\n    const stripNulls = resolvePostgresStripNulls(\n      input.payload.strip_nulls,\n      input.callOptions,\n      true\n    );\n    const keepNullKeys = keepNullKeysFromFindManySelect(input.payload);\n    if (input.payload.head === true) {\n      return executePostgresCompiled({\n        compiled,\n        endpoint: \"/gateway/fetch\",\n        mapResult: (rows) => ({\n          count: extractAthenaCount(rows),\n          data: [] as T,\n        }),\n        method: \"POST\",\n        queryable: input.queryable,\n        stripNulls: false,\n      });\n    }\n    const wantsTotalCount =\n      input.payload.count === \"exact\" ||\n      input.payload.count === \"planned\" ||\n      input.payload.count === \"estimated\";\n    if (wantsTotalCount) {\n      const countCompiled = needsPostgresAstPipeline(input.payload)\n        ? await compilePostgresStructuredCount(input.payload, input.queryable)\n        : compilePostgresCount(input.payload);\n      const [dataResult, countResult] = await Promise.all([\n        input.queryable.query(compiled.text, compiled.values),\n        input.queryable.query(countCompiled.text, countCompiled.values),\n      ]);\n      const rows = maybeStripNullRows(\n        dataResult.rows as unknown[],\n        stripNulls,\n        keepNullKeys\n      );\n      const total = extractAthenaCount(countResult.rows as unknown[]);\n      return postgresSuccessResponse(rows as T, total, {\n        count: countResult,\n        data: dataResult,\n      });\n    }\n    return executePostgresCompiled({\n      compiled,\n      endpoint: \"/gateway/fetch\",\n      keepNullKeys,\n      mapResult: (rows) => ({ count: rows.length, data: rows as T }),\n      method: \"POST\",\n      queryable: input.queryable,\n      stripNulls,\n    });\n  } catch (error) {\n    return postgresCompileErrorResponse(error, \"/gateway/fetch\", \"POST\");\n  }\n}\n\nexport async function executePostgresInsert<T>(input: {\n  callOptions?: AthenaGatewayCallOptions;\n  payload: AthenaInsertPayload;\n  queryable: AthenaPostgresQueryable;\n}): Promise<AthenaGatewayResponse<T>> {\n  try {\n    const compiled = compilePostgresInsert(input.payload);\n    const stripNulls = resolvePostgresStripNulls(\n      undefined,\n      input.callOptions,\n      true\n    );\n    return executePostgresCompiled({\n      compiled,\n      endpoint: \"/gateway/insert\",\n      mapResult: (rows, rowCount) => {\n        if (!Array.isArray(input.payload.insert_body) && rows.length === 1) {\n          return { count: rowCount, data: rows[0] as T };\n        }\n        return { count: rowCount, data: rows as T };\n      },\n      method: \"PUT\",\n      queryable: input.queryable,\n      stripNulls,\n    });\n  } catch (error) {\n    return postgresCompileErrorResponse(error, \"/gateway/insert\", \"PUT\");\n  }\n}\n\nexport async function executePostgresUpdate<T>(input: {\n  cache: PostgresIdentityCache;\n  callOptions?: AthenaGatewayCallOptions;\n  defaultIdentityColumn?: string;\n  payload: AthenaUpdatePayload;\n  queryable: AthenaPostgresQueryable;\n}): Promise<AthenaGatewayResponse<T>> {\n  try {\n    const compileOptions = await resolvePostgresMutationCompileOptions({\n      cache: input.cache,\n      defaultIdentityColumn: input.defaultIdentityColumn,\n      payload: input.payload,\n      queryable: input.queryable,\n    });\n    const compiled = compilePostgresUpdate(input.payload, compileOptions);\n    const stripNulls = resolvePostgresStripNulls(\n      input.payload.strip_nulls,\n      input.callOptions,\n      true\n    );\n    return executePostgresCompiled({\n      compiled,\n      endpoint: \"/gateway/update\",\n      mapResult: (rows, rowCount) => {\n        if (rows.length === 1) {\n          return { count: rowCount, data: rows[0] as T };\n        }\n        return { count: rowCount, data: rows as T };\n      },\n      method: \"POST\",\n      queryable: input.queryable,\n      stripNulls,\n    });\n  } catch (error) {\n    return postgresCompileErrorResponse(error, \"/gateway/update\", \"POST\");\n  }\n}\n\nexport async function executePostgresDelete<T>(input: {\n  cache: PostgresIdentityCache;\n  callOptions?: AthenaGatewayCallOptions;\n  defaultIdentityColumn?: string;\n  payload: AthenaDeletePayload;\n  queryable: AthenaPostgresQueryable;\n}): Promise<AthenaGatewayResponse<T>> {\n  try {\n    const compileOptions = await resolvePostgresMutationCompileOptions({\n      cache: input.cache,\n      defaultIdentityColumn: input.defaultIdentityColumn,\n      payload: input.payload,\n      queryable: input.queryable,\n    });\n    const compiled = compilePostgresDelete(input.payload, compileOptions);\n    const stripNulls = resolvePostgresStripNulls(\n      undefined,\n      input.callOptions,\n      true\n    );\n    return executePostgresCompiled({\n      compiled,\n      endpoint: \"/gateway/delete\",\n      method: \"DELETE\",\n      queryable: input.queryable,\n      stripNulls,\n    });\n  } catch (error) {\n    return postgresCompileErrorResponse(error, \"/gateway/delete\", \"DELETE\");\n  }\n}\n\nexport async function executePostgresTransactionOperation<T>(input: {\n  cache: PostgresIdentityCache;\n  callOptions?: AthenaGatewayCallOptions;\n  defaultIdentityColumn?: string;\n  operation: {\n    kind: \"fetch\" | \"insert\" | \"update\" | \"delete\";\n    payload:\n      | AthenaFetchPayload\n      | AthenaInsertPayload\n      | AthenaUpdatePayload\n      | AthenaDeletePayload;\n  };\n  queryable: AthenaPostgresQueryable;\n}): Promise<AthenaGatewayResponse<T>> {\n  switch (input.operation.kind) {\n    case \"fetch\":\n      return executePostgresFetch({\n        callOptions: input.callOptions,\n        payload: input.operation.payload as AthenaFetchPayload,\n        queryable: input.queryable,\n      });\n    case \"insert\":\n      return executePostgresInsert({\n        callOptions: input.callOptions,\n        payload: input.operation.payload as AthenaInsertPayload,\n        queryable: input.queryable,\n      });\n    case \"update\":\n      return executePostgresUpdate({\n        cache: input.cache,\n        callOptions: input.callOptions,\n        defaultIdentityColumn: input.defaultIdentityColumn,\n        payload: input.operation.payload as AthenaUpdatePayload,\n        queryable: input.queryable,\n      });\n    case \"delete\":\n      return executePostgresDelete({\n        cache: input.cache,\n        callOptions: input.callOptions,\n        defaultIdentityColumn: input.defaultIdentityColumn,\n        payload: input.operation.payload as AthenaDeletePayload,\n        queryable: input.queryable,\n      });\n    default:\n      return postgresErrorResponse(\n        400,\n        \"HTTP_ERROR\",\n        \"Unsupported transaction operation\",\n        \"/gateway/transaction\",\n        \"POST\"\n      );\n  }\n}\n","import { resolveBillingWebhookApplicationId } from \"../../billing/ingestion/application-id.ts\";\nimport type { AthenaBillingConfig } from \"../../billing/create-client-config.ts\";\nimport type { AthenaClientConfig } from \"../../client/contracts.ts\";\nimport {\n  hasRemoteAuthService,\n  hasRemoteDbGatewayUrl,\n  hasRemoteHttpServices,\n  hasRemoteHttpStorage,\n  normalizeOptional,\n  resolveUnifiedRemoteRoot,\n} from \"../../client/config/predicates.ts\";\nimport {\n  ATHENA_ENV_API_KEY_KEYS,\n} from \"../../env/index.ts\";\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\nimport {\n  getStorageProvider,\n  getStorageRuntime,\n} from \"../../storage/runtime/index.ts\";\nimport {\n  getLocalObjectStore as getLocalObjectStoreMarker,\n  isS3StorageConfig,\n} from \"../../storage/runtime.ts\";\nimport { isAthenaS3ObjectClient } from \"../../storage/runtime/providers/s3-provider.ts\";\nimport type { AthenaRuntimePlan } from \"../plan/types.ts\";\nimport type {\n  AthenaRuntimeResources,\n  ResolvedAthenaConstruction,\n} from \"./types.ts\";\nimport { AthenaConfigurationError } from \"../../config/errors.ts\";\n\nfunction firstEnv(\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  return;\n}\n\nfunction modeIsGateway<TModels extends AthenaClientModelsInput | undefined>(\n  config: AthenaClientConfig<TModels>,\n): boolean {\n  const mode = normalizeOptional(\n    typeof config.mode === \"string\" ? config.mode : undefined,\n  )?.toLowerCase();\n  return (\n    mode === \"gateway\" ||\n    mode === \"http\" ||\n    mode === \"remote\" ||\n    mode === \"server\"\n  );\n}\n\nfunction billingApiKey<TModels extends AthenaClientModelsInput | undefined>(\n  config: AthenaClientConfig<TModels>,\n): string {\n  return (\n    normalizeOptional(config.key) ??\n    firstEnv(config.env, ATHENA_ENV_API_KEY_KEYS) ??\n    \"\"\n  );\n}\n\nexport function resolveAthenaConstruction<\n  TModels extends AthenaClientModelsInput | undefined,\n>(\n  config: AthenaClientConfig<TModels>,\n  plan: AthenaRuntimePlan,\n): ResolvedAthenaConstruction<TModels> {\n  const storage = config.storage;\n  const chat =\n    config.chat && typeof config.chat === \"object\" ? config.chat : undefined;\n  const billing = config.billing as AthenaBillingConfig | undefined;\n  const db = config.db;\n  if (plan.db.transport === \"sqlite\") {\n    const candidate = db?.sqlite?.executor;\n    const capabilities = candidate?.capabilities;\n    if (\n      !candidate ||\n      typeof candidate.execute !== \"function\" ||\n      typeof candidate.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  const gatewayTransport = config.gatewayTransport;\n  const remoteRoot = resolveUnifiedRemoteRoot(config);\n  const pgUri = plan.db.pgUri;\n  const resolvedPlan: ResolvedAthenaConstruction<TModels>[\"plan\"] = {\n    ...plan,\n    auth: { ...plan.auth, config: config.auth },\n    billing: {\n      ...plan.billing,\n      apiKey: billingApiKey(config),\n      applicationId: resolveBillingWebhookApplicationId({\n        app: config.app,\n        client: config.client,\n      }),\n      appUrl: normalizeOptional(config.app?.url),\n      catalog: billing?.catalog,\n      client: config.client,\n      providers: billing?.providers,\n      customerImport: billing?.import,\n      headers: {\n        ...(config.headers ?? {}),\n        ...(billing?.headers ?? {}),\n      },\n      ingestion: billing?.ingestion,\n      mode: billing?.mode,\n      observability: billing?.observability,\n      selfEnrollment: billing?.selfEnrollment,\n      testMode: billing?.testMode,\n    },\n    chat: {\n      ...plan.chat,\n      auth: config.auth,\n      callOptions: chat,\n      clusterUrl: normalizeOptional(config.url),\n      context: config.context,\n      databaseUrl: pgUri,\n    },\n    db: {\n      ...plan.db,\n      capabilities: config.capabilities,\n      findManyAst: config.findManyAst,\n      hasRemoteAuth: hasRemoteAuthService<TModels>(config),\n      hasRemoteDbGateway: hasRemoteDbGatewayUrl<TModels>(config),\n      hasRemoteServices: hasRemoteHttpServices<TModels>(config),\n      hasRemoteStorage: hasRemoteHttpStorage<TModels>(config),\n      modeIsGateway: modeIsGateway(config),\n      models: config.models,\n      remoteRoot,\n      requestedKey: normalizeOptional(config.key),\n    },\n    storage: {\n      ...plan.storage,\n      bucket: normalizeOptional(storage?.bucket),\n      prefix: normalizeOptional(storage?.prefix),\n      root: normalizeOptional(storage?.root),\n    },\n  };\n  const resources: AthenaRuntimeResources = {\n    auth: {},\n    billing: {},\n    chat: {\n      existingRuntime: config.chatRuntime,\n    },\n    db: {\n      gatewayTransport,\n      pool: db?.pool as AthenaRuntimeResources[\"db\"][\"pool\"],\n      sqliteExecutor: db?.sqlite?.executor,\n      sqliteCompiler: db?.sqlite?.compiler,\n    },\n    storage: {\n      existingLocalStore: getLocalObjectStoreMarker(storage),\n      existingProvider: getStorageProvider(storage),\n      existingRuntime: getStorageRuntime(storage),\n      lifecycle: config.lifecycle?.storage,\n      r2: storage?.r2,\n      s3:\n        isS3StorageConfig(storage) && isAthenaS3ObjectClient(storage.s3)\n          ? storage.s3\n          : undefined,\n    },\n  };\n  return { plan: resolvedPlan, resources };\n}\n","import {\n  mapProviderFailure,\n  storageErrorResult,\n  storageOkResult,\n} from \"../errors.ts\";\nimport type {\n  AuthorizedStorageOperation,\n  StorageObjectProvider,\n} from \"../types.ts\";\n\nexport interface AthenaS3ObjectClient {\n  deleteObject(input: { Bucket: string; Key: string }): Promise<unknown>;\n  getObject(input: { Bucket: string; Key: string }): Promise<{\n    Body?: unknown;\n    ContentLength?: number;\n    ContentType?: string;\n    ETag?: string;\n    Metadata?: Record<string, string>;\n  }>;\n  headObject(input: { Bucket: string; Key: string }): Promise<{\n    ContentLength?: number;\n    ContentType?: string;\n    ETag?: string;\n    Metadata?: Record<string, string>;\n  }>;\n  listObjectsV2(input: {\n    Bucket: string;\n    ContinuationToken?: string;\n    MaxKeys?: number;\n    Prefix?: string;\n  }): Promise<{\n    Contents?: Array<{\n      ETag?: string;\n      Key?: string;\n      LastModified?: Date;\n      Size?: number;\n    }>;\n    IsTruncated?: boolean;\n    NextContinuationToken?: string;\n  }>;\n  putObject(input: {\n    Body?: Uint8Array;\n    Bucket: string;\n    ContentType?: string;\n    Key: string;\n    Metadata?: Record<string, string>;\n  }): Promise<unknown>;\n}\n\nexport function isAthenaS3ObjectClient(\n  value: unknown\n): value is AthenaS3ObjectClient {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const client = value as Record<string, unknown>;\n  return (\n    typeof client.getObject === \"function\" &&\n    typeof client.putObject === \"function\" &&\n    typeof client.headObject === \"function\" &&\n    typeof client.deleteObject === \"function\" &&\n    typeof client.listObjectsV2 === \"function\"\n  );\n}\n\nexport function createS3StorageProvider(options: {\n  bucket: string;\n  prefix?: string | null;\n  s3: AthenaS3ObjectClient;\n}): StorageObjectProvider {\n  const bucket = options.bucket.trim();\n  const prefix = normalizePrefix(options.prefix);\n  const { s3 } = options;\n  return {\n    async execute(op: AuthorizedStorageOperation) {\n      try {\n        switch (op.op) {\n          case \"put\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"put requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const key = toPhysicalKey(prefix, op.key);\n            await s3.putObject({\n              Body: op.body ?? new Uint8Array(),\n              Bucket: bucket,\n              ContentType: op.contentType,\n              Key: key,\n              Metadata: op.metadata,\n            });\n            return storageOkResult({ key: toLogicalKey(prefix, key) });\n          }\n          case \"get\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"get requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const result = await s3.getObject({\n              Bucket: bucket,\n              Key: toPhysicalKey(prefix, op.key),\n            });\n            return storageOkResult(await readS3Body(result.Body));\n          }\n          case \"head\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"head requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const result = await s3.headObject({\n              Bucket: bucket,\n              Key: toPhysicalKey(prefix, op.key),\n            });\n            return storageOkResult({\n              contentType: result.ContentType,\n              etag: result.ETag,\n              key: op.key,\n              metadata: result.Metadata,\n              size: result.ContentLength ?? 0,\n            });\n          }\n          case \"delete\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"delete requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const key = toPhysicalKey(prefix, op.key);\n            await s3.deleteObject({ Bucket: bucket, Key: key });\n            return storageOkResult({\n              deleted: [toLogicalKey(prefix, key)],\n            });\n          }\n          case \"list\": {\n            const listPrefix = joinPrefix(prefix, op.prefix);\n            const result = await s3.listObjectsV2({\n              Bucket: bucket,\n              ContinuationToken: op.cursor,\n              MaxKeys: op.limit,\n              Prefix: listPrefix || undefined,\n            });\n            const objects = (result.Contents ?? [])\n              .filter((entry) => typeof entry.Key === \"string\")\n              .map((entry) => ({\n                etag: entry.ETag,\n                key: toLogicalKey(prefix, entry.Key as string),\n                size: entry.Size ?? 0,\n                uploaded: entry.LastModified,\n              }));\n            return storageOkResult({\n              cursor: result.NextContinuationToken,\n              objects,\n              truncated: Boolean(result.IsTruncated),\n            });\n          }\n          default:\n            return storageErrorResult({\n              message: `unsupported op ${String(op.op)}`,\n              source: \"runtime\",\n              status: 400,\n            });\n        }\n      } catch (error) {\n        return mapS3Failure(error);\n      }\n    },\n  };\n}\n\nfunction normalizePrefix(prefix: string | null | undefined): string {\n  if (!prefix?.trim()) {\n    return \"\";\n  }\n  const normalized = prefix.replace(/^\\/+/, \"\").replace(/\\/?$/, \"/\");\n  if (normalized.includes(\"\\0\") || normalized.split(\"/\").includes(\"..\")) {\n    throw new Error(\n      \"storage prefix must not contain null bytes or .. segments\"\n    );\n  }\n  return normalized;\n}\n\nfunction assertSafeObjectKey(key: string): string {\n  if (!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  if (cleaned.split(\"/\").includes(\"..\")) {\n    throw new Error('Object key must not contain \"..\" path segments');\n  }\n  return cleaned;\n}\n\nfunction toPhysicalKey(prefix: string, key: string): string {\n  return `${prefix}${assertSafeObjectKey(key)}`;\n}\n\nfunction toLogicalKey(prefix: string, physicalKey: string): string {\n  if (prefix && physicalKey.startsWith(prefix)) {\n    return physicalKey.slice(prefix.length);\n  }\n  return physicalKey;\n}\n\nfunction joinPrefix(base: string, extra?: string): string {\n  if (!extra?.trim()) {\n    return base;\n  }\n  return `${base}${extra.replace(/^\\/+/, \"\")}`;\n}\n\nasync function readS3Body(body: unknown): Promise<Uint8Array> {\n  if (body == null) {\n    return new Uint8Array();\n  }\n  if (body instanceof Uint8Array) {\n    return body;\n  }\n  if (typeof body === \"string\") {\n    return new TextEncoder().encode(body);\n  }\n  if (typeof body === \"object\") {\n    const record = body as {\n      arrayBuffer?: () => Promise<ArrayBuffer>;\n      transformToByteArray?: () => Promise<Uint8Array | ArrayBuffer>;\n      transformToString?: () => Promise<string>;\n    };\n    if (typeof record.transformToByteArray === \"function\") {\n      return new Uint8Array(await record.transformToByteArray());\n    }\n    if (typeof record.arrayBuffer === \"function\") {\n      return new Uint8Array(await record.arrayBuffer());\n    }\n    if (typeof record.transformToString === \"function\") {\n      return new TextEncoder().encode(await record.transformToString());\n    }\n  }\n  return new Uint8Array();\n}\n\nfunction mapS3Failure(error: unknown): ReturnType<typeof storageErrorResult> {\n  const code = s3ErrorCode(error).toLowerCase();\n  const status = s3HttpStatus(error);\n  if (\n    status === 404 ||\n    code === \"nosuchkey\" ||\n    code === \"notfound\" ||\n    code === \"nosuchbucket\"\n  ) {\n    const message = error instanceof Error ? error.message : String(error);\n    return storageErrorResult({\n      message,\n      providerCode: code,\n      source: \"provider\",\n      status: 404,\n    });\n  }\n  if (\n    status === 400 ||\n    code === \"invalidargument\" ||\n    code === \"invalidbucketname\"\n  ) {\n    const message = error instanceof Error ? error.message : String(error);\n    return storageErrorResult({\n      message,\n      providerCode: code,\n      source: \"provider\",\n      status: 400,\n    });\n  }\n  if (status === 503 || code === \"slowdown\") {\n    const message = error instanceof Error ? error.message : String(error);\n    return storageErrorResult({\n      message,\n      providerCode: code,\n      source: \"provider\",\n      status: 500,\n    });\n  }\n  return mapProviderFailure(error);\n}\n\nfunction s3ErrorCode(error: unknown): string {\n  if (!error || typeof error !== \"object\") {\n    return \"\";\n  }\n  const record = error as { Code?: string; code?: string; name?: string };\n  return String(record.Code ?? record.code ?? record.name ?? \"\");\n}\n\nfunction s3HttpStatus(error: unknown): number | undefined {\n  if (!error || typeof error !== \"object\") {\n    return;\n  }\n  return (error as { $metadata?: { httpStatusCode?: number } }).$metadata\n    ?.httpStatusCode;\n}\n","import type { AthenaCapabilityEntry } from \"../../capabilities/types.ts\";\n\nexport type AthenaRuntimeSubsystem =\n  | \"database\"\n  | \"auth\"\n  | \"billing\"\n  | \"storage\"\n  | \"event-ingress\";\n\nexport type AthenaOperationAuthorization =\n  | \"allowed\"\n  | \"denied\"\n  | \"not-required\"\n  | \"unknown\";\nexport type AthenaOperationPolicy =\n  | \"allowed\"\n  | \"denied\"\n  | \"not-applicable\"\n  | \"unknown\";\n\nexport type AthenaOperationReadinessReason =\n  | \"capability-unavailable\"\n  | \"capability-unknown\"\n  | \"capability-degraded\"\n  | \"maturity-disabled\"\n  | \"authorization-denied\"\n  | \"authorization-unknown\"\n  | \"policy-denied\"\n  | \"policy-unknown\";\n\nexport interface AthenaOperationReadiness {\n  capability: AthenaCapabilityEntry;\n  authorization: AthenaOperationAuthorization;\n  policy: AthenaOperationPolicy;\n  executable: boolean;\n  reasons: readonly AthenaOperationReadinessReason[];\n}\n\nexport function resolveAthenaOperationReadiness(input: {\n  capability: AthenaCapabilityEntry;\n  authorization?: AthenaOperationAuthorization;\n  policy?: AthenaOperationPolicy;\n}): AthenaOperationReadiness {\n  const authorization = input.authorization ?? \"not-required\";\n  const policy = input.policy ?? \"not-applicable\";\n  const reasons: AthenaOperationReadinessReason[] = [];\n  if (input.capability.status === \"unavailable\") {\n    reasons.push(\"capability-unavailable\");\n  } else if (input.capability.status === \"unknown\") {\n    reasons.push(\"capability-unknown\");\n  } else if (input.capability.status === \"degraded\") {\n    reasons.push(\"capability-degraded\");\n  }\n  if (input.capability.maturity === \"disabled\") {\n    reasons.push(\"maturity-disabled\");\n  }\n  if (authorization === \"denied\") {\n    reasons.push(\"authorization-denied\");\n  } else if (authorization === \"unknown\") {\n    reasons.push(\"authorization-unknown\");\n  }\n  if (policy === \"denied\") {\n    reasons.push(\"policy-denied\");\n  } else if (policy === \"unknown\") {\n    reasons.push(\"policy-unknown\");\n  }\n  return {\n    capability: input.capability,\n    authorization,\n    policy,\n    executable: reasons.length === 0,\n    reasons,\n  };\n}\n\nexport interface AthenaRuntimeReadiness {\n  fail(subsystem: AthenaRuntimeSubsystem, error: unknown): void;\n  ready(subsystem: AthenaRuntimeSubsystem): void;\n  reset(subsystem: AthenaRuntimeSubsystem): void;\n  waitFor(subsystem: AthenaRuntimeSubsystem): Promise<void>;\n}\n\ninterface DeferredSlot {\n  promise: Promise<void>;\n  reject: (reason?: unknown) => void;\n  resolve: () => void;\n  settled: boolean;\n}\n\nfunction createSlot(): DeferredSlot {\n  let resolve!: () => void;\n  let reject!: (reason?: unknown) => void;\n  const promise = new Promise<void>((res, rej) => {\n    resolve = () => {\n      res();\n    };\n    reject = (reason) => {\n      rej(reason);\n    };\n  });\n  promise.catch(() => undefined);\n  return { promise, reject, resolve, settled: false };\n}\n\nexport function createAthenaRuntimeReadiness(): AthenaRuntimeReadiness {\n  const slots = new Map<AthenaRuntimeSubsystem, DeferredSlot>();\n  const slot = (subsystem: AthenaRuntimeSubsystem): DeferredSlot => {\n    const existing = slots.get(subsystem);\n    if (existing) {\n      return existing;\n    }\n    const created = createSlot();\n    slots.set(subsystem, created);\n    return created;\n  };\n  return {\n    fail(subsystem, error) {\n      const current = slot(subsystem);\n      if (current.settled) {\n        return;\n      }\n      current.settled = true;\n      current.reject(error);\n    },\n    ready(subsystem) {\n      const current = slot(subsystem);\n      if (current.settled) {\n        return;\n      }\n      current.settled = true;\n      current.resolve();\n    },\n    reset(subsystem) {\n      slots.set(subsystem, createSlot());\n    },\n    waitFor(subsystem) {\n      return slot(subsystem).promise;\n    },\n  };\n}\n","/**\n * Browser-safe config fold: aliases, env, execution mode, edge bindings.\n * Does not materialize Node backends.\n */\n\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\nimport type { AthenaClientConfig } from \"../../client/contracts.ts\";\nimport {\n  normalizeUniversalConfig as normalizeUniversalConfigImpl,\n} from \"../../client/config/normalize.ts\";\n\nexport function normalizeUniversalConfig<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n  return normalizeUniversalConfigImpl(config);\n}\n","/**\n * Resolve an internal AthenaRuntimePlan from createClient config.\n */\n\nimport {\n  detectAthenaRuntimeEnvironment,\n  inferEmbeddedAuthMode,\n  type ResolveAthenaRuntimeOptions,\n  type ResolveConfigInput,\n  resolveAthenaRuntime,\n  resolveDatabaseUri,\n} from \"../resolve.ts\";\nimport { AthenaBillingProviderError } from \"../../billing/errors.ts\";\nimport {\n  ATHENA_ENV_DB_URL_KEYS,\n  ATHENA_ENV_URL_KEYS,\n} from \"../../env/index.ts\";\nimport type { AthenaRuntimePlan } from \"./types.ts\";\nimport type { AthenaRuntimePlanBilling } from \"./types.ts\";\n\nfunction resolveUnifiedRemoteRoot(input: ResolveConfigInput): string | undefined {\n  return (\n    trimOptional(input.url) ??\n    ATHENA_ENV_URL_KEYS.map((key) => trimOptional(input.env?.[key])).find(\n      (value): value is string => value !== undefined,\n    )\n  );\n}\n\nfunction trimOptional(value: string | null | undefined): string | undefined {\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction hasConfiguredBillingProviders(\n  providers: Record<string, unknown> | null | undefined\n): boolean {\n  return (\n    providers != null &&\n    Object.values(providers).some((provider) => provider !== null && provider !== undefined)\n  );\n}\n\nfunction resolveBillingPlan(\n  input: ResolveConfigInput,\n  environment: ReturnType<typeof detectAthenaRuntimeEnvironment>,\n  trustedNode: boolean\n): AthenaRuntimePlanBilling {\n  const billing = input.billing;\n  const providers = hasConfiguredBillingProviders(billing?.providers);\n  const mode = billing?.mode?.trim().toLowerCase();\n  const explicitEndpoint =\n    trimOptional(billing?.url) ?? trimOptional(billing?.endpoint);\n  const databaseEndpoint =\n    trimOptional(input.db?.url) ??\n    ATHENA_ENV_DB_URL_KEYS.map((key) => trimOptional(input.env?.[key])).find(\n      (value): value is string => value !== undefined\n    );\n  const unifiedRoot = trimOptional(resolveUnifiedRemoteRoot(input));\n  const resolvedDatabaseEndpoint =\n    databaseEndpoint ??\n    (unifiedRoot ? `${unifiedRoot.replace(/\\/+$/, \"\")}/db` : undefined);\n\n  if (mode === \"remote\") {\n    if (!explicitEndpoint && !resolvedDatabaseEndpoint) {\n      return {\n        configuredProviders: providers,\n        kind: \"unavailable\",\n        reason: \"transport-unavailable\",\n      };\n    }\n    return {\n      endpoint: explicitEndpoint ?? resolvedDatabaseEndpoint,\n      configuredProviders: providers,\n      kind: \"remote\",\n      source: explicitEndpoint\n        ? \"explicit-url\"\n        : databaseEndpoint\n          ? \"db-url\"\n          : \"unified-root\",\n    };\n  }\n\n  if (providers || mode === \"local\") {\n    if (!trustedNode || 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    return {\n      configuredProviders: providers,\n      kind: \"local\",\n      modePreference: mode === \"local\" ? \"local\" : \"auto\",\n      source: \"configured-provider\",\n    };\n  }\n\n  if (mode === \"remote\" || explicitEndpoint || resolvedDatabaseEndpoint) {\n    if (mode === \"remote\" && !explicitEndpoint && !unifiedRoot) {\n      return {\n        configuredProviders: providers,\n        kind: \"unavailable\",\n        reason: \"transport-unavailable\",\n      };\n    }\n    return {\n      endpoint: explicitEndpoint ?? resolvedDatabaseEndpoint,\n      configuredProviders: providers,\n      kind: \"remote\",\n      source: explicitEndpoint\n        ? \"explicit-url\"\n        : databaseEndpoint\n          ? \"db-url\"\n        : environment === \"browser\" || environment === \"react-native\"\n          ? \"same-origin\"\n          : \"unified-root\",\n    };\n  }\n\n  return {\n    configuredProviders: providers,\n    kind: \"unavailable\",\n    reason: \"not-configured\",\n  };\n}\n\nexport function resolveRuntimePlan(\n  config: unknown,\n  options: ResolveAthenaRuntimeOptions = {}\n): AthenaRuntimePlan {\n  const input = (config ?? {}) as ResolveConfigInput;\n  const environment = options.environment ?? detectAthenaRuntimeEnvironment();\n  const trustedNode = options.trustedNode ?? environment === \"node\";\n  const inferred = trustedNode ? inferEmbeddedAuthMode(input) : input;\n  const snapshot = resolveAthenaRuntime(inferred, {\n    environment,\n    trustedNode,\n  });\n  const storage = inferred.storage;\n  const root = trimOptional(storage?.root);\n  const prefix = trimOptional(storage?.prefix);\n  const bucket = trimOptional(storage?.bucket);\n  const billing = resolveBillingPlan(inferred, environment, trustedNode);\n  return {\n    auth: { runtime: snapshot.auth.runtime },\n    billing,\n    chat: { transport: snapshot.chat.transport },\n    db: {\n      hasD1: inferred.db?.d1 !== undefined && inferred.db?.d1 !== null,\n      hasSqlite:\n        inferred.db?.sqlite !== undefined && inferred.db?.sqlite !== null,\n      engine:\n        snapshot.db.transport === \"sqlite\"\n          ? \"sqlite\"\n          : snapshot.db.transport === \"postgres\"\n            ? \"postgres\"\n            : undefined,\n      hasPool: inferred.db?.pool !== undefined && inferred.db?.pool !== null,\n      hasRemoteAuth: false,\n      hasRemoteDbGateway: false,\n      hasRemoteServices: false,\n      hasRemoteStorage: false,\n      modeIsGateway: snapshot.db.transport === \"gateway\",\n      models: undefined,\n      pgUri: resolveDatabaseUri(inferred),\n      ownership:\n        snapshot.db.transport === \"sqlite\"\n          ? inferred.db?.sqlite &&\n            typeof inferred.db.sqlite === \"object\" &&\n            (inferred.db.sqlite as { ownership?: unknown }).ownership ===\n              \"owned\"\n            ? \"owned\"\n            : \"borrowed\"\n          : snapshot.db.transport === \"postgres\"\n            ? \"owned\"\n            : \"none\",\n      profile:\n        snapshot.db.transport === \"sqlite\"\n          ? \"sqlite-local\"\n          : snapshot.db.transport === \"d1\"\n            ? \"cloudflare-d1\"\n            : snapshot.db.transport === \"postgres\"\n              ? \"postgres\"\n              : snapshot.db.transport === \"gateway\"\n                ? \"gateway\"\n                : undefined,\n      source:\n        snapshot.db.transport === \"sqlite\"\n          ? \"local-executor\"\n          : resolveDatabaseUri(inferred) !== undefined\n          ? \"uri\"\n          : inferred.db?.pool !== undefined && inferred.db?.pool !== null\n            ? \"pool\"\n            : \"none\",\n      transport: snapshot.db.transport,\n    },\n    environment,\n    storage: {\n      ...(bucket ? { bucket } : {}),\n      hasR2: storage?.r2 !== undefined && storage?.r2 !== null,\n      hasUrl: Boolean(trimOptional(storage?.url)),\n      ...(prefix ? { prefix } : {}),\n      ...(root ? { root } : {}),\n      transport: snapshot.storage.transport,\n      wantsLocal: storage?.provider === \"local\",\n      wantsS3: storage?.provider === \"s3\",\n    },\n    trustedNode,\n  };\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 { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport { throwIfMissingBillingObservabilityRelation } from \"./schema-guard.ts\";\nimport type { NormalizedAthenaBillingObservability } from \"./types.ts\";\n\nexport async function purgeBillingObservability(input: {\n  now?: Date;\n  observability: NormalizedAthenaBillingObservability;\n  sql: BillingSqlExecutor;\n}): Promise<void> {\n  const now = input.now ?? new Date();\n  const traceDays = input.observability.traces.retentionDays ?? 30;\n  const auditDays = input.observability.auditRetentionDays;\n  try {\n    await input.sql.query(\n      \"DELETE FROM athena.traces_billing WHERE completed_at < $1::timestamptz\",\n      [new Date(now.getTime() - traceDays * 24 * 60 * 60 * 1000)]\n    );\n    await input.sql.query(\n      \"DELETE FROM billing.billing_import_runs WHERE started_at < $1::timestamptz\",\n      [new Date(now.getTime() - traceDays * 24 * 60 * 60 * 1000)]\n    );\n    await input.sql.query(\n      `DELETE FROM billing.billing_import_candidates\n\t\t\t WHERE created_at < $1::timestamptz`,\n      [new Date(now.getTime() - traceDays * 24 * 60 * 60 * 1000)]\n    );\n    await input.sql.query(\n      \"DELETE FROM billing.billing_webhook_ingress_stages WHERE occurred_at < $1::timestamptz\",\n      [\n        new Date(\n          now.getTime() -\n            input.observability.webhookIngressRetentionDays *\n              24 *\n              60 *\n              60 *\n              1000\n        ),\n      ]\n    );\n    await input.sql.query(\n      \"DELETE FROM billing.billing_webhook_ingress_rejections WHERE occurred_at < $1::timestamptz\",\n      [\n        new Date(\n          now.getTime() -\n            input.observability.webhookIngressRetentionDays *\n              24 *\n              60 *\n              60 *\n              1000\n        ),\n      ]\n    );\n    if (auditDays != null) {\n      await input.sql.query(\n        \"DELETE FROM athena.audit_log_billing WHERE created_at < $1::timestamptz\",\n        [new Date(now.getTime() - auditDays * 24 * 60 * 60 * 1000)]\n      );\n    }\n  } catch (error) {\n    throwIfMissingBillingObservabilityRelation(error);\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","/**\n * Recurring customer enroll (`enabled`) and plan change (`planChange`).\n * Boolean `true` enables enroll only; `planChange` must be the object flag.\n */\nexport interface BillingSelfEnrollmentConfig {\n  enabled?: boolean;\n  planChange?: boolean;\n}\n\nexport type BillingSelfEnrollmentSetting =\n  | BillingSelfEnrollmentConfig\n  | boolean\n  | null\n  | undefined;\n\n/**\n * Recurring self-enrollment kill switch. Every environment stays off unless\n * `billing.selfEnrollment.enabled` is explicitly true. One-time checkout,\n * invoices, current subscription display, and cancellation are unaffected.\n */\nexport function isBillingSelfEnrollmentEnabled(\n  config?: BillingSelfEnrollmentSetting\n): boolean {\n  if (config === true) {\n    return true;\n  }\n  if (config === false) {\n    return false;\n  }\n  if (config != null && typeof config === \"object\") {\n    return config.enabled === true;\n  }\n  return false;\n}\n\n/**\n * Recurring `self.subscription.change` stays off unless\n * `billing.selfEnrollment.planChange` is explicitly true. Compensation\n * and version fencing must stay GREEN before enabling.\n */\nexport function isBillingSelfPlanChangeEnabled(\n  config?: BillingSelfEnrollmentSetting\n): boolean {\n  if (config != null && typeof config === \"object\") {\n    return config.planChange === true;\n  }\n  return false;\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport type { BillingSelfSubscriptionChangeResult } from \"../../runtime/types.ts\";\nimport { changeSelfSubscription } from \"../../runtime/self/change.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingProviderRegistry } from \"../../runtime/local/providers/registry.ts\";\nimport {\n  recoverExpiredPlanChanges,\n  type PlanChangeRecoveryDiagnostic,\n  type PlanChangeRecoveryResult,\n} from \"./plan-change-recovery.ts\";\nimport { createBillingPlanChangeRepository } from \"./plan-change-repository.ts\";\n\nexport interface PlanChangeRecoveryRuntimeInput {\n  batchSize?: number;\n  configuredProviders?: BillingProviderConfigMap;\n  diagnostics?: (event: PlanChangeRecoveryDiagnostic) => void;\n  registry: BillingProviderRegistry;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n}\n\nexport interface PlanChangeRecoveryRuntime {\n  run(): Promise<PlanChangeRecoveryResult>;\n}\n\nfunction recoveryPrincipal(subjectId: string): AthenaPrincipal {\n  return {\n    authenticated: true,\n    grants: [],\n    rights: [],\n    userId: subjectId,\n  };\n}\n\nfunction resultKind(\n  result: BillingSelfSubscriptionChangeResult\n): \"attention_required\" | \"completed\" | \"failed\" | \"retry_required\" {\n  if (!(\"operationId\" in result)) {\n    return \"completed\";\n  }\n  if (result.status === \"attention_required\") {\n    return \"attention_required\";\n  }\n  if (result.status === \"failed\") {\n    return \"failed\";\n  }\n  if (result.status === \"completed\") {\n    return \"completed\";\n  }\n  return \"retry_required\";\n}\n\nexport function createPlanChangeRecoveryRuntime(\n  input: PlanChangeRecoveryRuntimeInput\n): PlanChangeRecoveryRuntime {\n  const repository = createBillingPlanChangeRepository(input.sql);\n  return {\n    async run() {\n      return recoverExpiredPlanChanges({\n        coordinator: async (operationId) => {\n          const operation = await repository.load(operationId);\n          if (operation == null) {\n            throw new Error(\"Plan-change operation disappeared before recovery.\");\n          }\n          if (operation.subjectKind !== \"user\") {\n            throw new Error(\n              `Plan-change recovery does not support subject kind \"${operation.subjectKind}\".`\n            );\n          }\n          const result = await changeSelfSubscription({\n            configuredProviders: input.configuredProviders,\n            idempotencyKey: operation.idempotencyKey,\n            planChangeEnabled: { enabled: true, planChange: true },\n            principal: recoveryPrincipal(operation.subjectId),\n            priceId: operation.priceId,\n            registry: input.registry,\n            sql: input.sql,\n            subscriptionId: operation.ownedSubscriptionId,\n            testMode: input.testMode,\n          });\n          return { kind: resultKind(result) };\n        },\n        countRecoverable: repository.countRecoverable,\n        diagnostics: input.diagnostics,\n        limit: input.batchSize,\n        repository,\n      });\n    },\n  };\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport {\n  AthenaBillingCapabilityError,\n  AthenaBillingProviderRequestError,\n  isAthenaBillingCapabilityError,\n  isAthenaBillingProviderRequestError,\n} from \"../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\";\nimport {\n  type BillingSelfEnrollmentSetting,\n  isBillingSelfPlanChangeEnabled,\n} from \"../../self-enrollment.ts\";\nimport {\n  billingConfiguredConnectionOwner,\n  configuredProvidersForBillingConnection,\n  resolveBillingConnectionAffinity,\n} from \"../../subject/connection-affinity.ts\";\nimport { billingSubjectNotFound } from \"../../subject/errors.ts\";\nimport { requireBillingPrincipalUserId } from \"../../subject/principal-user.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingSubscription } from \"../../types.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport { executeLocalBillingPriceList } from \"../local/execute/price-list.ts\";\nimport {\n  executeLocalBillingSubscriptionCancel,\n  executeLocalBillingSubscriptionCreate,\n  executeLocalBillingSubscriptionGet,\n  executeLocalBillingSubscriptionList,\n  executeLocalBillingSubscriptionUpdate,\n} from \"../local/execute/subscriptions.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport {\n  runPlanChangeCoordinator,\n  type PlanChangeCoordinatorContext,\n  type PlanChangeProviderErrorKind,\n} from \"../../workflows/plan-change/plan-change-coordinator.ts\";\nimport {\n  classifyPlanChangeProviderState,\n  type PlanChangeProviderObservation,\n  type PlanChangeProviderSubscriptionState,\n} from \"../../workflows/plan-change/plan-change-reconciliation.ts\";\nimport { createBillingPlanChangeRepository } from \"../../workflows/plan-change/plan-change-repository.ts\";\nimport { createBillingProviderEffectRepository } from \"../../workflows/plan-change/provider-effect-repository.ts\";\nimport { resolveBillingCheckoutIntent } from \"./checkout-intent.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport { persistOwnedSubscription } from \"./enroll.ts\";\nimport { ensureActiveCoordinatorForSubscription } from \"./enrollment-reservation.ts\";\nimport { getSelfSubscription } from \"./subscriptions.ts\";\nimport type { BillingSelfSubscriptionChangeResult } from \"../types.ts\";\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\nexport function isProviderSubscriptionUpdateUnsupported(\n  error: unknown\n): boolean {\n  if (isAthenaBillingCapabilityError(error)) {\n    return (\n      error.reason === \"unsupported_by_provider\" ||\n      error.reason === \"provider_operation_unsupported\"\n    );\n  }\n  if (isAthenaBillingProviderRequestError(error)) {\n    return error.kind === \"unsupported_operation\";\n  }\n  if (error instanceof AthenaBillingCapabilityError) {\n    return (\n      error.reason === \"unsupported_by_provider\" ||\n      error.reason === \"provider_operation_unsupported\"\n    );\n  }\n  if (error instanceof AthenaBillingProviderRequestError) {\n    return error.kind === \"unsupported_operation\";\n  }\n  return false;\n}\n\nfunction isUncertainProviderOutcome(error: unknown): boolean {\n  if (isAthenaBillingProviderRequestError(error)) {\n    return (\n      error.retry === \"reconcile_first\" ||\n      error.kind === \"timeout\" ||\n      error.kind === \"network\" ||\n      error.kind === \"provider_unavailable\"\n    );\n  }\n  return false;\n}\n\nfunction providerErrorKind(\n  error: unknown,\n  unsupported: boolean\n): PlanChangeProviderErrorKind {\n  if (isUncertainProviderOutcome(error)) {\n    return \"uncertain\";\n  }\n  return unsupported ? \"unsupported\" : \"failed\";\n}\n\nfunction providerState(\n  value: BillingSubscription\n): PlanChangeProviderSubscriptionState {\n  return {\n    amount: value.amount,\n    interval: value.interval,\n    providerSubscriptionId: value.providerSubscriptionId,\n    status: value.status === \"canceled\" ? \"canceled\" : \"active\",\n  };\n}\n\nfunction providerObservation(\n  value: BillingSubscription,\n  intended: PlanChangeProviderSubscriptionState & {\n    status: \"active\" | \"canceled\";\n  },\n  previous?: PlanChangeProviderSubscriptionState & {\n    status: \"active\" | \"canceled\";\n  }\n): {\n  classification: PlanChangeProviderObservation;\n  evidence: PlanChangeProviderSubscriptionState;\n  providerResourceId: string;\n  result: PlanChangeProviderSubscriptionState;\n} {\n  const actual = providerState(value);\n  return {\n    classification: classifyPlanChangeProviderState({\n      actual,\n      intended,\n      previous,\n    }),\n    evidence: actual,\n    providerResourceId: value.providerSubscriptionId,\n    result: actual,\n  };\n}\n\nexport function isPlanChangeReplacementCandidate(input: {\n  candidate: BillingSubscription;\n  operationId: string;\n  priceId: string;\n}): boolean {\n  if (\n    input.candidate.status === \"canceled\" ||\n    typeof input.candidate.metadata !== \"object\" ||\n    input.candidate.metadata == null\n  ) {\n    return false;\n  }\n  return (\n    \"athenaPlanChange\" in input.candidate.metadata &&\n    input.candidate.metadata.athenaPlanChange === true &&\n    \"athenaPlanChangeOperationId\" in input.candidate.metadata &&\n    input.candidate.metadata.athenaPlanChangeOperationId ===\n      input.operationId &&\n    \"newPriceId\" in input.candidate.metadata &&\n    input.candidate.metadata.newPriceId === input.priceId\n  );\n}\n\nexport async function changeSelfSubscription(input: {\n  applicationId?: string;\n  configuredProviders?: BillingProviderConfigMap;\n  currentVersion?: string;\n  idempotencyKey: string;\n  planChangeEnabled?: BillingSelfEnrollmentSetting;\n  principal: AthenaPrincipal;\n  priceId: string;\n  proration?: \"none\" | \"immediate\";\n  registry?: BillingProviderRegistry;\n  sql: BillingSqlExecutor;\n  subscriptionId?: string;\n  testMode?: boolean;\n}): Promise<BillingSelfSubscriptionChangeResult> {\n  if (!isBillingSelfPlanChangeEnabled(input.planChangeEnabled)) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.subscription.change\",\n      reason: \"self_enrollment_disabled\",\n    });\n  }\n  const command = prepareBillingCommand({\n    operation: \"self.subscription.change\",\n    payload: {\n      currentVersion: input.currentVersion,\n      idempotencyKey: input.idempotencyKey,\n      priceId: input.priceId,\n      proration: input.proration,\n      subscriptionId: input.subscriptionId,\n    },\n  });\n  if (input.registry == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.subscription.change\",\n      reason: \"runtime_unavailable\",\n    });\n  }\n  if (typeof input.sql.transaction !== \"function\") {\n    throw new AthenaBillingCapabilityError({\n      message:\n        \"self.subscription.change requires a transactional Billing SQL runtime.\",\n      operation: \"self.subscription.change\",\n      reason: \"runtime_unavailable\",\n    });\n  }\n  const registry = input.registry;\n  const subjectId = requireBillingPrincipalUserId(input.principal);\n  const current = await getSelfSubscription({\n    principal: input.principal,\n    sql: input.sql,\n    subscriptionId: input.subscriptionId,\n  });\n  if (current.status === \"canceled\") {\n    throw billingSubjectNotFound(\"No active subscription to change.\");\n  }\n  if (current.id == null || current.id.length === 0) {\n    throw billingSubjectNotFound(\"No active subscription to change.\");\n  }\n  const ownedSubscriptionId = current.id;\n  const planChanges = createBillingPlanChangeRepository(input.sql);\n  const ownedVersion = await planChanges.loadOwnedSubscriptionVersion({\n    subjectId,\n    subjectKind: \"user\",\n    subscriptionId: ownedSubscriptionId,\n  });\n  if (!ownedVersion?.connectionId) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.subscription.change\",\n      reason: \"provider_connection_missing\",\n    });\n  }\n  const connectionAffinity = await resolveBillingConnectionAffinity({\n    configuredProviders: input.configuredProviders,\n    environment: input.testMode === false ? \"live\" : \"test\",\n    operation: \"self.subscription.change\",\n    ownedConnectionId: ownedVersion.connectionId,\n    provider: current.provider,\n    sql: input.sql,\n    subjectId,\n    subjectKind: \"user\",\n    testMode: input.testMode,\n    ...(billingConfiguredConnectionOwner(input.applicationId) ?? {}),\n  });\n  const configuredProviders = configuredProvidersForBillingConnection({\n    affinity: connectionAffinity,\n    configuredProviders: input.configuredProviders,\n    operation: \"self.subscription.change\",\n  });\n  const connectionId = connectionAffinity.connectionId;\n  const rowVersion = ownedVersion?.rowVersion ?? 1;\n  if (\n    input.currentVersion != null &&\n    input.currentVersion.trim() !== \"\" &&\n    input.currentVersion !== String(rowVersion)\n  ) {\n    throw new AthenaBillingCapabilityError({\n      message: \"Subscription version does not match the current plan.\",\n      operation: \"self.subscription.change\",\n      reason: \"unsupported_operation\",\n    });\n  }\n  const prices = await executeLocalBillingPriceList({\n    authority: PROCESS_BILLING_INVOCATION,\n    configuredProviders,\n    payload: {},\n    principal: selfDelegatedBillingPrincipal(input.principal, [\"prices.list\"]),\n    registry,\n    testMode: input.testMode,\n  });\n  const price = prices.items.find(\n    (item) => item.id === String(command.payload.priceId)\n  );\n  if (price == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.subscription.change\",\n      reason: \"missing_catalog\",\n    });\n  }\n  const intent = resolveBillingCheckoutIntent(price);\n  if (intent.kind !== \"recurring\") {\n    throw new AthenaBillingCapabilityError({\n      message: \"Plan changes require a recurring catalog price.\",\n      operation: \"self.subscription.change\",\n      reason: \"unsupported_operation\",\n    });\n  }\n  const coordinator = await ensureActiveCoordinatorForSubscription({\n    connectionId,\n    idempotencyKey: `coordinator:${current.id}`,\n    priceId: price.id,\n    providerSubscriptionId: current.providerSubscriptionId,\n    sql: input.sql,\n    subjectId,\n    subjectKind: \"user\",\n  });\n  if (coordinator.state !== \"active\") {\n    throw new AthenaBillingCapabilityError({\n      message: \"A pending enrollment must finish before changing plan.\",\n      operation: \"self.subscription.change\",\n      reason: \"unsupported_operation\",\n    });\n  }\n\n  const createdOperation = await planChanges.create({\n    connectionId,\n    enrollmentId: coordinator.id,\n    expectedRowVersion: rowVersion,\n    idempotencyKey: input.idempotencyKey,\n    ownedSubscriptionId,\n    priceId: price.id,\n    subjectId,\n    subjectKind: \"user\",\n  });\n  const providerEffects = createBillingProviderEffectRepository(input.sql);\n  if (createdOperation.state === \"completed\") {\n    return current;\n  }\n  let latestUpdated: BillingSubscription | undefined;\n  let latestReplacement: BillingSubscription | undefined;\n  const planChangeEffectMetadata = {\n    athenaPlanChange: true,\n    athenaPlanChangeOperationId: createdOperation.id,\n    newPriceId: price.id,\n    oldPriceId:\n      typeof current.metadata === \"object\" &&\n      current.metadata != null &&\n      \"priceId\" in current.metadata\n        ? String((current.metadata as { priceId?: unknown }).priceId ?? \"\")\n        : \"\",\n    proration: input.proration ?? \"none\",\n    providerOperations: [\"subscriptions.update\"],\n  };\n  const metadata = {\n    ...planChangeEffectMetadata,\n    athenaSubjectId: subjectId,\n  };\n  const replacementTarget = (): PlanChangeProviderSubscriptionState & {\n    status: \"active\";\n  } => ({\n    amount: price.amount,\n    interval: intent.interval,\n    providerSubscriptionId:\n      latestReplacement?.providerSubscriptionId ??\n      createdOperation.replacementProviderSubscriptionId,\n    status: \"active\",\n  });\n  const loadReplacement = async (\n    replacementId: string\n  ): Promise<BillingSubscription> =>\n    executeLocalBillingSubscriptionGet({\n      authority: PROCESS_BILLING_INVOCATION,\n      configuredProviders,\n      payload: {\n        customerId: current.providerCustomerId,\n        subscriptionId: replacementId,\n      },\n      principal: selfDelegatedBillingPrincipal(input.principal, [\n        \"subscriptions.get\",\n      ]),\n      registry,\n      testMode: input.testMode,\n    });\n  const observeReplacement = async (): Promise<{\n    classification: PlanChangeProviderObservation;\n    evidence?: unknown;\n    providerResourceId?: string;\n    result?: PlanChangeProviderSubscriptionState;\n  }> => {\n    const replacementId =\n      latestReplacement?.providerSubscriptionId ??\n      createdOperation.replacementProviderSubscriptionId;\n    if (replacementId != null) {\n      return providerObservation(\n        await loadReplacement(replacementId),\n        replacementTarget()\n      );\n    }\n    const listed = await executeLocalBillingSubscriptionList({\n      authority: PROCESS_BILLING_INVOCATION,\n      configuredProviders,\n      payload: {\n        customerId: current.providerCustomerId,\n        limit: 100,\n      },\n      principal: selfDelegatedBillingPrincipal(input.principal, [\n        \"subscriptions.list\",\n      ]),\n      registry,\n      testMode: input.testMode,\n    });\n    const replacement = listed.items.find((candidate) => {\n      return isPlanChangeReplacementCandidate({\n        candidate,\n        operationId: createdOperation.id,\n        priceId: price.id,\n      });\n    });\n    if (replacement == null) {\n      return {\n        classification: \"not_applied\",\n        evidence: { listed: listed.items.length },\n      };\n    }\n    return providerObservation(replacement, replacementTarget());\n  };\n  const context: PlanChangeCoordinatorContext<BillingSubscription> = {\n    actions: {\n      \"subscription.cancel.old\": {\n        effectType: \"subscription.cancel.old\",\n        idempotencyKey: `${input.idempotencyKey}:old-cancel`,\n        request: {\n          customerId: current.providerCustomerId,\n          subscriptionId: current.providerSubscriptionId,\n        },\n        invoke: async () => {\n          const canceled = await executeLocalBillingSubscriptionCancel({\n            authority: PROCESS_BILLING_INVOCATION,\n            configuredProviders,\n            payload: {\n              customerId: current.providerCustomerId,\n              subscriptionId: current.providerSubscriptionId,\n            },\n            principal: selfDelegatedBillingPrincipal(input.principal, [\n              \"subscriptions.cancel\",\n            ]),\n            registry,\n            testMode: input.testMode,\n          });\n          return {\n            evidence: providerState(canceled),\n            providerResourceId: canceled.providerSubscriptionId,\n            result: providerState(canceled),\n          };\n        },\n        observe: async () =>\n          providerObservation(\n            await executeLocalBillingSubscriptionGet({\n              authority: PROCESS_BILLING_INVOCATION,\n              configuredProviders,\n              payload: {\n                customerId: current.providerCustomerId,\n                subscriptionId: current.providerSubscriptionId,\n              },\n              principal: selfDelegatedBillingPrincipal(input.principal, [\n                \"subscriptions.get\",\n              ]),\n              registry,\n              testMode: input.testMode,\n            }),\n            {\n              providerSubscriptionId: current.providerSubscriptionId,\n              status: \"canceled\",\n            },\n            {\n              amount: current.amount,\n              interval: current.interval,\n              providerSubscriptionId: current.providerSubscriptionId,\n              status: \"active\",\n            }\n          ),\n        classifyError: (error) => providerErrorKind(error, false),\n      },\n      \"subscription.cancel.replacement\": {\n        effectType: \"subscription.cancel.replacement\",\n        idempotencyKey: `${input.idempotencyKey}:replacement-cancel`,\n        request: {\n          customerId: current.providerCustomerId,\n          subscriptionId: replacementTarget().providerSubscriptionId,\n        },\n        invoke: async () => {\n          const replacementId = replacementTarget().providerSubscriptionId;\n          if (replacementId == null) {\n            throw new Error(\"Replacement subscription id is missing.\");\n          }\n          const canceled = await executeLocalBillingSubscriptionCancel({\n            authority: PROCESS_BILLING_INVOCATION,\n            configuredProviders,\n            payload: {\n              customerId: current.providerCustomerId,\n              subscriptionId: replacementId,\n            },\n            principal: selfDelegatedBillingPrincipal(input.principal, [\n              \"subscriptions.cancel\",\n            ]),\n            registry,\n            testMode: input.testMode,\n          });\n          return {\n            evidence: providerState(canceled),\n            providerResourceId: canceled.providerSubscriptionId,\n            result: providerState(canceled),\n          };\n        },\n        observe: async () => {\n          const replacementId = replacementTarget().providerSubscriptionId;\n          if (replacementId == null) {\n            return { classification: \"unknown\" as const };\n          }\n          return providerObservation(\n            await loadReplacement(replacementId),\n            {\n              providerSubscriptionId: replacementId,\n              status: \"canceled\",\n            },\n            replacementTarget()\n          );\n        },\n        classifyError: (error) => providerErrorKind(error, false),\n      },\n      \"subscription.create.replacement\": {\n        effectType: \"subscription.create.replacement\",\n        idempotencyKey: `${input.idempotencyKey}:replacement`,\n        request: {\n          amount: price.amount,\n          customerId: current.providerCustomerId,\n          interval: mollieInterval(intent.interval),\n          metadata: planChangeEffectMetadata,\n        },\n        invoke: async () => {\n          const replacement = await executeLocalBillingSubscriptionCreate({\n            authority: PROCESS_BILLING_INVOCATION,\n            configuredProviders,\n            payload: {\n              amount: price.amount,\n              customerId: current.providerCustomerId,\n              description: `Athena plan ${price.id}`,\n              idempotencyKey: `${input.idempotencyKey}:replacement`,\n              interval: mollieInterval(intent.interval),\n              metadata,\n            },\n            principal: selfDelegatedBillingPrincipal(input.principal, [\n              \"subscriptions.create\",\n            ]),\n            registry,\n            testMode: input.testMode,\n          });\n          latestReplacement = replacement;\n          return {\n            evidence: providerState(replacement),\n            providerResourceId: replacement.providerSubscriptionId,\n            result: providerState(replacement),\n          };\n        },\n        observe: observeReplacement,\n        classifyError: (error) => providerErrorKind(error, false),\n      },\n      \"subscription.update\": {\n        effectType: \"subscription.update\",\n        idempotencyKey: input.idempotencyKey,\n        request: {\n          amount: price.amount,\n          customerId: current.providerCustomerId,\n          interval: mollieInterval(intent.interval),\n          metadata: planChangeEffectMetadata,\n          subscriptionId: current.providerSubscriptionId,\n        },\n        invoke: async () => {\n          const updated = await executeLocalBillingSubscriptionUpdate({\n            authority: PROCESS_BILLING_INVOCATION,\n            configuredProviders,\n            payload: {\n              amount: price.amount,\n              customerId: current.providerCustomerId,\n              description: `Athena plan ${price.id}`,\n              interval: mollieInterval(intent.interval),\n              metadata,\n              subscriptionId: current.providerSubscriptionId,\n            },\n            principal: selfDelegatedBillingPrincipal(input.principal, [\n              \"subscriptions.update\",\n            ]),\n            registry,\n            testMode: input.testMode,\n          });\n          latestUpdated = updated;\n          return {\n            evidence: providerState(updated),\n            providerResourceId: updated.providerSubscriptionId,\n            result: providerState(updated),\n          };\n        },\n        observe: async () =>\n          providerObservation(\n            await executeLocalBillingSubscriptionGet({\n              authority: PROCESS_BILLING_INVOCATION,\n              configuredProviders,\n              payload: {\n                customerId: current.providerCustomerId,\n                subscriptionId: current.providerSubscriptionId,\n              },\n              principal: selfDelegatedBillingPrincipal(input.principal, [\n                \"subscriptions.get\",\n              ]),\n              registry,\n              testMode: input.testMode,\n            }),\n            {\n              amount: price.amount,\n              interval: intent.interval,\n              providerSubscriptionId: current.providerSubscriptionId,\n              status: \"active\",\n            },\n            {\n              amount: current.amount,\n              interval: current.interval,\n              providerSubscriptionId: current.providerSubscriptionId,\n              status: \"active\",\n            }\n          ),\n        classifyError: (error) =>\n          providerErrorKind(\n            error,\n            isProviderSubscriptionUpdateUnsupported(error)\n          ),\n      },\n    },\n    commit: async ({ operation, phase, sql: commitSql }) => {\n      try {\n        const commitPlanChanges = commitSql\n          ? createBillingPlanChangeRepository(commitSql)\n          : planChanges;\n        const localSql = commitSql ?? input.sql;\n        if (phase === \"direct\") {\n          const updated = latestUpdated ?? {\n            ...current,\n            amount: price.amount,\n            description: `Athena plan ${price.id}`,\n            interval: intent.interval,\n          };\n          const persisted = await commitPlanChanges.updateOwnedSubscription({\n            amountCurrency: price.amount.currency,\n            amountValue: price.amount.value,\n            description: updated.description ?? `Athena plan ${price.id}`,\n            expectedRowVersion: rowVersion,\n            interval: intent.interval,\n            metadata,\n            subjectId,\n            subjectKind: \"user\",\n            subscriptionId: ownedSubscriptionId,\n          });\n          if (!persisted) {\n            return {\n              error: \"subscription_version_conflict\",\n              kind: \"attention_required\" as const,\n            };\n          }\n          return {\n            kind: \"completed\" as const,\n            result: {\n              ...current,\n              ...updated,\n              amount: price.amount,\n              description: updated.description ?? `Athena plan ${price.id}`,\n              id: current.id,\n            },\n          };\n        }\n        const replacementId = operation.replacementProviderSubscriptionId;\n        if (replacementId == null) {\n          return {\n            error: \"replacement_subscription_id_missing\",\n            kind: \"attention_required\" as const,\n          };\n        }\n        const replacement =\n          latestReplacement?.providerSubscriptionId === replacementId\n            ? latestReplacement\n            : await loadReplacement(replacementId);\n        const persisted = await persistOwnedSubscription({\n          connectionId,\n          interval: intent.interval,\n          operation: \"self.subscription.change\",\n          principal: input.principal,\n          sql: localSql,\n          subscription: replacement,\n        });\n        const canceled = await commitPlanChanges.markOwnedSubscriptionCanceled({\n          expectedRowVersion: rowVersion,\n          subjectId,\n          subscriptionId: ownedSubscriptionId,\n        });\n        if (!canceled) {\n          return {\n            error: \"subscription_version_conflict\",\n            kind: \"attention_required\" as const,\n          };\n        }\n        return { kind: \"completed\" as const, result: persisted };\n      } catch (error) {\n        return { error, kind: \"retry_required\" as const };\n      }\n    },\n    connectionId,\n    provider: current.provider,\n  };\n\n  const coordinated = await runPlanChangeCoordinator<BillingSubscription>({\n    context,\n    operationId: createdOperation.id,\n    repositories: {\n      effects: providerEffects,\n      planChanges,\n    },\n  });\n  if (coordinated.kind === \"completed\") {\n    if (coordinated.result == null) {\n      throw new Error(\"Plan-change coordinator completed without a result.\");\n    }\n    return coordinated.result;\n  }\n  return {\n    ...(coordinated.error\n      ? {\n          error:\n            coordinated.error instanceof Error\n              ? coordinated.error.message\n              : String(coordinated.error),\n        }\n      : {}),\n    operationId: coordinated.operation.id,\n    priceId: coordinated.operation.priceId,\n    state: coordinated.operation.state,\n    status:\n      coordinated.kind === \"attention_required\"\n        ? \"attention_required\"\n        : coordinated.kind === \"failed\"\n          ? \"failed\"\n          : \"processing\",\n    ...(coordinated.operation.updatedAt\n      ? { updatedAt: coordinated.operation.updatedAt }\n      : {}),\n  };\n}\n","import { AthenaBillingCapabilityError } from \"../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport type { BillingOperation } from \"../runtime/capabilities.ts\";\nimport { resolveBillingEnvironment } from \"../runtime/environment.ts\";\nimport {\n  billingConnectionHasConfiguredCredential,\n  configuredBillingCredentialReferences,\n  parseBillingCredentialReference,\n} from \"../runtime/local/providers/connection-binding.ts\";\nimport {\n  configuredProviderSlot,\n  normalizeBillingProviderConfiguration,\n  rawMollieConfig,\n  rawStripeConfig,\n} from \"../runtime/local/providers/configuration/index.ts\";\nimport type { BillingProviderName, BillingSubjectRef } from \"../types.ts\";\nimport type { BillingSqlExecutor } from \"./repository.ts\";\n\nexport const BILLING_CONFIGURED_CONNECTION_OWNER_KIND = \"tenant\" as const;\n\n/** Enough distinct usable ids to distinguish missing / unique / ambiguous. */\nconst USABLE_CONNECTION_UNIQUENESS_LIMIT = 2;\n\nexport type BillingConnectionAffinitySource =\n  | \"configured_connection\"\n  | \"eligible_connection\"\n  | \"owned_resource\"\n  | \"subject_binding\";\n\nexport interface BillingConnectionAffinity {\n  connectionId: string;\n  credentialReference: string;\n  environment: \"test\" | \"live\";\n  provider: string;\n  source: BillingConnectionAffinitySource;\n}\n\nexport type BillingConnectionAffinityInspection =\n  | { state: \"resolved\"; connection: BillingConnectionAffinity }\n  | { state: \"missing\" }\n  | { state: \"ambiguous\" };\n\nexport type InspectBillingConnectionAffinityInput = {\n  configuredProviders?: BillingProviderConfigMap;\n  credentialReference?: string;\n  environment?: \"test\" | \"live\";\n  explicitConnectionId?: string;\n  ownerId?: string;\n  ownerKind?: string;\n  ownedConnectionId?: string | null;\n  provider?: BillingProviderName;\n  sql: BillingSqlExecutor;\n  subjectId?: string;\n  subjectKind?: BillingSubjectRef[\"kind\"];\n  testMode?: boolean;\n};\n\ninterface ConnectionRow {\n  connection_id?: unknown;\n  credential_reference?: unknown;\n  environment?: unknown;\n  id?: unknown;\n  owner_id?: unknown;\n  owner_kind?: unknown;\n  provider?: unknown;\n  status?: unknown;\n}\n\n/**\n * Declared `createClient` connections are tenant-owned by application id.\n * Omit these fields when the application id is unknown — eligible fallback\n * must not scan the whole Billing database.\n */\nexport function billingConfiguredConnectionOwner(applicationId?: string | null):\n  | {\n    ownerId: string;\n    ownerKind: typeof BILLING_CONFIGURED_CONNECTION_OWNER_KIND;\n  }\n  | undefined {\n  const ownerId = applicationId?.trim();\n  if (ownerId == null || ownerId.length === 0) {\n    return;\n  }\n  return {\n    ownerId,\n    ownerKind: BILLING_CONFIGURED_CONNECTION_OWNER_KIND,\n  };\n}\n\nfunction connectionError(\n  operation: BillingOperation,\n  reason: \"provider_connection_ambiguous\" | \"provider_connection_missing\",\n): AthenaBillingCapabilityError {\n  return new AthenaBillingCapabilityError({ operation, reason });\n}\n\nfunction processEnvironment(input: {\n  environment?: \"test\" | \"live\";\n  testMode?: boolean;\n}): \"test\" | \"live\" {\n  return (\n    input.environment ??\n    resolveBillingEnvironment({ testMode: input.testMode }).name\n  );\n}\n\nfunction connectionId(row: ConnectionRow): string | undefined {\n  const value = row.id ?? row.connection_id;\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction usableAffinityFromRow(\n  row: ConnectionRow | undefined,\n  source: BillingConnectionAffinitySource,\n  input: {\n    configuredProviders?: BillingProviderConfigMap;\n    environment: \"test\" | \"live\";\n    provider: string;\n  },\n): BillingConnectionAffinity | undefined {\n  const id = row ? connectionId(row) : undefined;\n  const credentialReference =\n    typeof row?.credential_reference === \"string\"\n      ? row.credential_reference.trim()\n      : \"\";\n  if (\n    !id ||\n    row?.status !== \"active\" ||\n    row.provider !== input.provider ||\n    row.environment !== input.environment ||\n    credentialReference.length === 0\n  ) {\n    return;\n  }\n  if (input.configuredProviders != null) {\n    const usable = billingConnectionHasConfiguredCredential({\n      configuredProviders: input.configuredProviders,\n      connection: {\n        credentialReference,\n        provider: input.provider,\n        testMode: input.environment === \"test\",\n      },\n    });\n    if (!usable) {\n      return;\n    }\n  }\n  return {\n    connectionId: id,\n    credentialReference,\n    environment: input.environment,\n    provider: input.provider,\n    source,\n  };\n}\n\nfunction distinctUsableAffinities(\n  connections: readonly BillingConnectionAffinity[],\n): BillingConnectionAffinity[] {\n  const byId = new Map<string, BillingConnectionAffinity>();\n  for (const connection of connections) {\n    byId.set(connection.connectionId, connection);\n  }\n  return [...byId.values()];\n}\n\nfunction inspectionFromUsable(\n  connections: readonly BillingConnectionAffinity[],\n): BillingConnectionAffinityInspection {\n  const distinct = distinctUsableAffinities(connections);\n  if (distinct.length > 1) {\n    return { state: \"ambiguous\" };\n  }\n  const connection = distinct[0];\n  if (connection) {\n    return { connection, state: \"resolved\" };\n  }\n  return { state: \"missing\" };\n}\n\nfunction appendUsableCredentialClause(\n  query: string,\n  filters: unknown[],\n  input: {\n    column: string;\n    configuredProviders?: BillingProviderConfigMap;\n    credentialReference?: string;\n    environment: \"test\" | \"live\";\n    provider: string;\n  },\n): string | undefined {\n  if (input.credentialReference) {\n    filters.push(input.credentialReference);\n    return `${query} AND ${input.column} = $${filters.length}`;\n  }\n  if (input.configuredProviders == null) {\n    return query;\n  }\n  const refs = configuredBillingCredentialReferences({\n    configuredProviders: input.configuredProviders,\n    environment: input.environment,\n    provider: input.provider,\n  });\n  if (refs.length === 0) {\n    return;\n  }\n  filters.push(refs);\n  return `${query} AND ${input.column} = ANY($${filters.length}::text[])`;\n}\n\nasync function findConnection(\n  sql: BillingSqlExecutor,\n  id: string,\n): Promise<ConnectionRow | undefined> {\n  const result = await sql.query(\n    `SELECT id::text AS id, owner_id, owner_kind, provider, environment,\n            status, credential_reference\n     FROM billing.billing_provider_connections\n     WHERE id = $1::uuid\n       AND deleted_at IS NULL\n     LIMIT 1`,\n    [id],\n  );\n  return result.rows[0];\n}\n\n/**\n * Authoritative selectors (owned id, active subject bindings, explicit id)\n * fail closed when unusable. Application owner_* applies only to configured\n * fallback enumeration — subject bindings may target user/org-owned rows.\n */\nexport async function inspectBillingConnectionAffinity(\n  input: InspectBillingConnectionAffinityInput,\n): Promise<BillingConnectionAffinityInspection> {\n  const environment = processEnvironment(input);\n  const provider = input.provider ?? \"mollie\";\n  const usability = {\n    configuredProviders: input.configuredProviders,\n    environment,\n    provider,\n  };\n\n  const ownedId = input.ownedConnectionId?.trim();\n  if (ownedId) {\n    const owned = usableAffinityFromRow(\n      await findConnection(input.sql, ownedId),\n      \"owned_resource\",\n      usability,\n    );\n    return owned\n      ? { connection: owned, state: \"resolved\" }\n      : { state: \"missing\" };\n  }\n\n  if (input.subjectId && input.subjectKind) {\n    const existingBindings = await input.sql.query(\n      `SELECT 1\n       FROM billing.billing_subject_bindings\n       WHERE subject_kind = $1\n         AND subject_id = $2\n         AND status = 'active'\n       LIMIT 1`,\n      [input.subjectKind, input.subjectId],\n    );\n    if (existingBindings.rows.length > 0) {\n      const filters: unknown[] = [\n        input.subjectKind,\n        input.subjectId,\n        provider,\n        environment,\n      ];\n      let query = `\n        SELECT DISTINCT c.id::text AS id, c.owner_id, c.owner_kind, c.provider,\n                c.environment, c.status, c.credential_reference\n        FROM billing.billing_subject_bindings b\n        INNER JOIN billing.billing_provider_connections c\n          ON c.id = b.connection_id\n         AND c.deleted_at IS NULL\n        WHERE b.subject_kind = $1\n          AND b.subject_id = $2\n          AND b.status = 'active'\n          AND c.status = 'active'\n          AND c.provider = $3\n          AND c.environment = $4`;\n      const withCredentials = appendUsableCredentialClause(query, filters, {\n        column: \"c.credential_reference\",\n        configuredProviders: input.configuredProviders,\n        credentialReference: input.credentialReference,\n        environment,\n        provider,\n      });\n      if (withCredentials == null) {\n        return { state: \"missing\" };\n      }\n      query = `${withCredentials} LIMIT ${USABLE_CONNECTION_UNIQUENESS_LIMIT}`;\n      const bindings = await input.sql.query(query, filters);\n      const usableBindings = bindings.rows\n        .map((row) =>\n          usableAffinityFromRow(row, \"subject_binding\", usability),\n        )\n        .filter((row): row is BillingConnectionAffinity => row != null);\n      return inspectionFromUsable(usableBindings);\n    }\n  }\n\n  if (input.explicitConnectionId?.trim()) {\n    const configured = usableAffinityFromRow(\n      await findConnection(input.sql, input.explicitConnectionId.trim()),\n      \"configured_connection\",\n      usability,\n    );\n    return configured\n      ? { connection: configured, state: \"resolved\" }\n      : { state: \"missing\" };\n  }\n\n  if (input.ownerId == null || input.ownerKind == null) {\n    return { state: \"missing\" };\n  }\n\n  const filters: unknown[] = [\n    provider,\n    environment,\n    input.ownerId,\n    input.ownerKind,\n  ];\n  let query = `\n    SELECT DISTINCT id::text AS id, owner_id, owner_kind, provider, environment,\n           status, credential_reference\n    FROM billing.billing_provider_connections\n    WHERE deleted_at IS NULL\n      AND status = 'active'\n      AND provider = $1\n      AND environment = $2\n      AND owner_id = $3\n      AND owner_kind = $4`;\n  const withCredentials = appendUsableCredentialClause(query, filters, {\n    column: \"credential_reference\",\n    configuredProviders: input.configuredProviders,\n    credentialReference: input.credentialReference,\n    environment,\n    provider,\n  });\n  if (withCredentials == null) {\n    return { state: \"missing\" };\n  }\n  query = `${withCredentials} LIMIT ${USABLE_CONNECTION_UNIQUENESS_LIMIT}`;\n  const eligible = await input.sql.query(query, filters);\n  const usableEligible = eligible.rows\n    .filter(\n      (row) =>\n        row.owner_id === input.ownerId && row.owner_kind === input.ownerKind,\n    )\n    .map((row) => usableAffinityFromRow(row, \"eligible_connection\", usability))\n    .filter((row): row is BillingConnectionAffinity => row != null);\n  return inspectionFromUsable(usableEligible);\n}\n\nexport async function resolveBillingConnectionAffinity(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  credentialReference?: string;\n  environment?: \"test\" | \"live\";\n  explicitConnectionId?: string;\n  operation: BillingOperation;\n  ownerId?: string;\n  ownerKind?: string;\n  ownedConnectionId?: string | null;\n  provider?: BillingProviderName;\n  sql: BillingSqlExecutor;\n  subjectId?: string;\n  subjectKind?: BillingSubjectRef[\"kind\"];\n  testMode?: boolean;\n}): Promise<BillingConnectionAffinity> {\n  const inspection = await inspectBillingConnectionAffinity(input);\n  if (inspection.state === \"resolved\") {\n    return inspection.connection;\n  }\n  throw connectionError(\n    input.operation,\n    inspection.state === \"ambiguous\"\n      ? \"provider_connection_ambiguous\"\n      : \"provider_connection_missing\",\n  );\n}\n\nexport function configuredProvidersForBillingConnection(input: {\n  affinity: BillingConnectionAffinity;\n  configuredProviders?: BillingProviderConfigMap;\n  operation?: BillingOperation;\n}): BillingProviderConfigMap {\n  const parsed = parseBillingCredentialReference(\n    input.affinity.credentialReference,\n  );\n  const normalized = normalizeBillingProviderConfiguration({\n    configuredProviders: input.configuredProviders,\n    environment: input.affinity.environment,\n  });\n  if (parsed.provider === \"mollie\") {\n    const slot = configuredProviderSlot(\n      normalized,\n      \"mollie\",\n      parsed.accountId ?? null,\n    );\n    if (slot == null) {\n      throw connectionError(\n        input.operation ?? \"self.subscription.change\",\n        \"provider_connection_missing\",\n      );\n    }\n    return { mollie: rawMollieConfig(slot) };\n  }\n  const slot = configuredProviderSlot(\n    normalized,\n    \"stripe\",\n    parsed.accountId ?? null,\n  );\n  if (slot == null) {\n    throw connectionError(\n      input.operation ?? \"self.subscription.change\",\n      \"provider_connection_missing\",\n    );\n  }\n  return { stripe: rawStripeConfig(slot) };\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 { BillingListPricesInput, BillingPrice } from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport { executeLocalBillingOperation } from \"./invoke.ts\";\nimport { rejectUnsupportedListOffset } from \"./shared.ts\";\n\nexport async function executeLocalBillingPriceList(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingListPricesInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPage<BillingPrice>> {\n  return executeLocalBillingOperation({\n    before: (payload) =>\n      rejectUnsupportedListOffset(\"prices.list\", payload.offset),\n    invoke: (prices, context, payload) =>\n      prices.list(context, {\n        cursor: payload.cursor,\n        limit: payload.limit,\n        productId: payload.productId,\n      }),\n    operation: \"prices.list\",\n    port: \"prices\",\n    request: input,\n  });\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 { 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 { randomUUID } from \"node:crypto\";\n\nimport {\n  createBillingPlanChangeRepository,\n  type BillingPlanChangeOperationRecord,\n} from \"./plan-change-repository.ts\";\nimport type { BillingProviderEffectRecord } from \"./provider-effect-repository.ts\";\nimport type { BillingPlanChangeRepository } from \"./plan-change-repository.ts\";\nimport type { BillingProviderName } from \"../../types.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type {\n  BillingProviderEffectCreateInput,\n  BillingProviderEffectRepository,\n} from \"./provider-effect-repository.ts\";\nimport { fingerprintBillingProviderEffect } from \"./provider-effect-repository.ts\";\nimport type {\n  PlanChangeProviderObservation as PlanChangeProviderObservationKind,\n} from \"./plan-change-reconciliation.ts\";\nimport type { BillingPlanChangeState } from \"./plan-change-state.ts\";\nimport {\n  isBillingPlanChangeState,\n  transitionBillingPlanChangeState,\n} from \"./plan-change-state.ts\";\n\nexport type PlanChangeProviderEffectType =\n  | \"subscription.cancel.old\"\n  | \"subscription.cancel.replacement\"\n  | \"subscription.create.replacement\"\n  | \"subscription.update\";\n\nexport type PlanChangeProviderErrorKind =\n  | \"failed\"\n  | \"uncertain\"\n  | \"unsupported\";\n\nexport interface PlanChangeProviderMutationResult {\n  evidence?: unknown;\n  providerResourceId?: string | null;\n  result?: unknown;\n}\n\nexport interface PlanChangeProviderObservation {\n  classification: PlanChangeProviderObservationKind;\n  evidence?: unknown;\n  providerResourceId?: string | null;\n  result?: unknown;\n}\n\nexport interface PlanChangeProviderAction {\n  classifyError?: (error: unknown) => PlanChangeProviderErrorKind;\n  effectType: PlanChangeProviderEffectType;\n  idempotencyKey: string;\n  invoke: () => Promise<PlanChangeProviderMutationResult>;\n  observe: () => Promise<PlanChangeProviderObservation>;\n  request: unknown;\n}\n\nexport type PlanChangeCommitResult<TResult = unknown> =\n  | { kind: \"attention_required\"; error: string }\n  | { kind: \"completed\"; result: TResult }\n  | { error?: unknown; kind: \"retry_required\" };\n\nexport interface PlanChangeCoordinatorContext<TResult = unknown> {\n  actions: Partial<\n    Record<PlanChangeProviderEffectType, PlanChangeProviderAction>\n  >;\n  commit: (input: {\n    operation: BillingPlanChangeOperationRecord;\n    phase: \"direct\" | \"replacement\";\n    sql?: BillingSqlExecutor;\n  }) => Promise<PlanChangeCommitResult<TResult>>;\n  connectionId: string;\n  provider: BillingProviderName;\n}\n\nexport interface PlanChangeCoordinatorRepositories {\n  effects: Pick<\n    BillingProviderEffectRepository,\n    | \"claim\"\n    | \"complete\"\n    | \"create\"\n    | \"fail\"\n    | \"list\"\n    | \"markApplied\"\n    | \"markAttentionRequired\"\n    | \"markUnknown\"\n    | \"retry\"\n  >;\n  planChanges: Pick<\n    BillingPlanChangeRepository,\n    | \"attentionRequired\"\n    | \"claim\"\n    | \"complete\"\n    | \"fail\"\n    | \"load\"\n    | \"scheduleRetry\"\n    | \"transaction\"\n    | \"transition\"\n  >;\n}\n\nexport interface PlanChangeCoordinatorDiagnostic {\n  action: string;\n  event: \"plan_change_coordinator\";\n  operationId: string;\n  outcome: string;\n  state: BillingPlanChangeState;\n}\n\nexport interface PlanChangeCoordinatorResult<TResult = unknown> {\n  error?: unknown;\n  kind: \"attention_required\" | \"completed\" | \"failed\" | \"retry_required\";\n  operation: BillingPlanChangeOperationRecord;\n  result?: TResult;\n  steps: number;\n}\n\nexport interface PlanChangeRetryPolicy {\n  baseDelayMs?: number;\n  maxDelayMs?: number;\n  maxRetries?: number;\n}\n\nexport class PlanChangeCoordinatorError extends Error {\n  readonly code = \"ATHENA_BILLING_PLAN_CHANGE_COORDINATOR_ERROR\";\n\n  constructor(message: string) {\n    super(message);\n    this.name = \"PlanChangeCoordinatorError\";\n  }\n}\n\nclass PlanChangeTransactionRollback extends Error {\n  constructor() {\n    super(\"Plan-change transaction must be rolled back.\");\n    this.name = \"PlanChangeTransactionRollback\";\n  }\n}\n\nconst DEFAULT_MAX_STEPS = 24;\nconst DEFAULT_RETRY_POLICY: Required<PlanChangeRetryPolicy> = {\n  baseDelayMs: 1_000,\n  maxDelayMs: 60_000,\n  maxRetries: 5,\n};\n\ntype EffectOutcome =\n  | {\n      effect: BillingProviderEffectRecord;\n      kind: \"applied\";\n    }\n  | { error: unknown; kind: \"conflicting\" }\n  | { error: unknown; kind: \"failed\" }\n  | { error: unknown; kind: \"retry_required\" }\n  | { error: unknown; kind: \"unknown\" }\n  | { error: unknown; kind: \"unsupported\" };\n\nfunction errorText(error: unknown, fallback: string): string {\n  return error instanceof Error ? error.message : fallback;\n}\n\nfunction defaultErrorKind(error: unknown): PlanChangeProviderErrorKind {\n  return error instanceof Error &&\n    /timeout|network|unavailable|econn|fetch/i.test(error.message)\n    ? \"uncertain\"\n    : \"failed\";\n}\n\nfunction emit(\n  input: {\n    action: string;\n    diagnostics?: (event: PlanChangeCoordinatorDiagnostic) => void;\n    operation: BillingPlanChangeOperationRecord;\n    outcome: string;\n  },\n): void {\n  input.diagnostics?.({\n    action: input.action,\n    event: \"plan_change_coordinator\",\n    operationId: input.operation.id,\n    outcome: input.outcome,\n    state: input.operation.state,\n  });\n}\n\nfunction retryDelay(\n  retryCount: number,\n  policy: Required<PlanChangeRetryPolicy>,\n): number {\n  return Math.min(\n    policy.maxDelayMs,\n    policy.baseDelayMs * 2 ** Math.max(0, retryCount - 1),\n  );\n}\n\nexport async function runPlanChangeCoordinator<TResult = unknown>(input: {\n  context: PlanChangeCoordinatorContext<TResult>;\n  diagnostics?: (event: PlanChangeCoordinatorDiagnostic) => void;\n  maxSteps?: number;\n  operationId: string;\n  repositories: PlanChangeCoordinatorRepositories;\n  retryPolicy?: PlanChangeRetryPolicy;\n}): Promise<PlanChangeCoordinatorResult<TResult>> {\n  const policy = { ...DEFAULT_RETRY_POLICY, ...input.retryPolicy };\n  const maxSteps = input.maxSteps ?? DEFAULT_MAX_STEPS;\n  const loadedOperation = await input.repositories.planChanges.load(\n    input.operationId,\n  );\n  if (!loadedOperation) {\n    throw new PlanChangeCoordinatorError(\n      `Plan-change operation ${input.operationId} was not found.`,\n    );\n  }\n  let operation: BillingPlanChangeOperationRecord = loadedOperation;\n\n  let steps = 0;\n  const transition = async (\n    state: BillingPlanChangeState,\n    lastError?: string,\n    replacementProviderSubscriptionId?: string,\n  ): Promise<boolean> => {\n    transitionBillingPlanChangeState(operation.state, state);\n    const next = await input.repositories.planChanges.transition({\n      expectedFencingEpoch: operation.fencingEpoch,\n      expectedState: operation.state,\n      id: operation.id,\n      lastError,\n      leaseToken: operation.leaseToken ?? \"\",\n      replacementProviderSubscriptionId,\n      state,\n    });\n    if (!next) {\n      return false;\n    }\n    operation = next;\n    return true;\n  };\n\n  const terminalResult = (\n    kind: PlanChangeCoordinatorResult<TResult>[\"kind\"],\n    error?: unknown,\n    result?: TResult,\n  ): PlanChangeCoordinatorResult<TResult> => ({\n    ...(error === undefined ? {} : { error }),\n    kind,\n    operation,\n    ...(result === undefined ? {} : { result }),\n    steps,\n  });\n\n  const scheduleRetry = async (\n    error?: unknown,\n  ): Promise<PlanChangeCoordinatorResult<TResult>> => {\n    const retryCount = (operation.retryCount ?? 0) + 1;\n    if (retryCount > policy.maxRetries) {\n      const attention = await input.repositories.planChanges.attentionRequired({\n        error: errorText(error, \"plan_change_retry_budget_exhausted\"),\n        expectedFencingEpoch: operation.fencingEpoch,\n        expectedState: operation.state,\n        id: operation.id,\n        leaseToken: operation.leaseToken ?? \"\",\n      });\n      if (!attention) {\n        throw new PlanChangeCoordinatorError(\n          \"Plan-change lease was lost while recording retry exhaustion.\",\n        );\n      }\n      operation = attention;\n      return terminalResult(\"attention_required\", error);\n    }\n    const nextRetryAt = new Date(\n      Date.now() + retryDelay(retryCount, policy),\n    ).toISOString();\n    const scheduled = await input.repositories.planChanges.scheduleRetry({\n      expectedFencingEpoch: operation.fencingEpoch,\n      id: operation.id,\n      lastError: errorText(error, \"plan_change_retry_required\"),\n      leaseToken: operation.leaseToken ?? \"\",\n      nextRetryAt,\n      retryCount,\n      state: operation.state,\n    });\n    if (!scheduled) {\n      throw new PlanChangeCoordinatorError(\n        \"Plan-change lease was lost while scheduling retry.\",\n      );\n    }\n    operation = scheduled;\n    return terminalResult(\"retry_required\", error);\n  };\n\n  const reconcileEffect = async (\n    action: PlanChangeProviderAction,\n    effect: BillingProviderEffectRecord,\n  ): Promise<\"applied\" | \"conflicting\" | \"not_applied\" | \"unknown\"> => {\n    let observation: PlanChangeProviderObservation;\n    try {\n      observation = await action.observe();\n    } catch {\n      emit({\n        action: action.effectType,\n        diagnostics: input.diagnostics,\n        operation,\n        outcome: \"observation_failed\",\n      });\n      return \"unknown\";\n    }\n    if (observation.classification === \"applied\") {\n      const applied = await input.repositories.effects.markApplied({\n        effectId: effect.id,\n        expectedFencingEpoch: effect.fencingEpoch,\n        observedEvidence: observation.evidence,\n        observedResult: observation.result,\n        providerResourceId: observation.providerResourceId,\n      });\n      return applied ? \"applied\" : \"unknown\";\n    }\n    if (observation.classification === \"not_applied\") {\n      const reset = await input.repositories.effects.retry({\n        effectId: effect.id,\n        expectedFencingEpoch: effect.fencingEpoch,\n      });\n      return reset ? \"not_applied\" : \"unknown\";\n    }\n    if (observation.classification === \"conflicting\") {\n      const attention = await input.repositories.effects.markAttentionRequired({\n        effectId: effect.id,\n        error: \"provider_state_conflict\",\n        expectedFencingEpoch: effect.fencingEpoch,\n        observedEvidence: observation.evidence,\n      });\n      if (!attention) {\n        return \"unknown\";\n      }\n    }\n    return observation.classification;\n  };\n\n  const executeEffect = async (\n    action: PlanChangeProviderAction,\n    effects: readonly BillingProviderEffectRecord[],\n  ): Promise<EffectOutcome> => {\n    let effect = effects.find(\n      (candidate) => candidate.effectType === action.effectType,\n    );\n    let claimedEffect: BillingProviderEffectRecord | undefined;\n    if (effect?.state === \"applied\") {\n      return { effect, kind: \"applied\" };\n    }\n    if (effect?.state === \"unknown\") {\n      const observation = await reconcileEffect(action, effect);\n      if (observation === \"applied\") {\n        const refreshed = await input.repositories.effects.list(operation.id);\n        const applied = refreshed.find(\n          (candidate) => candidate.effectType === action.effectType,\n        );\n        if (applied?.state === \"applied\") {\n          return { effect: applied, kind: \"applied\" };\n        }\n      }\n      if (observation === \"not_applied\") {\n        return {\n          error: \"provider_effect_not_applied\",\n          kind: \"retry_required\",\n        };\n      }\n      if (observation === \"conflicting\") {\n        return { error: \"provider_state_conflict\", kind: \"conflicting\" };\n      }\n      return { error: \"provider_outcome_unknown\", kind: \"unknown\" };\n    }\n    if (effect?.state === \"claimed\") {\n      const leaseExpiresAt =\n        effect.leaseExpiresAt == null\n          ? undefined\n          : new Date(effect.leaseExpiresAt).getTime();\n      if (\n        leaseExpiresAt !== undefined &&\n        (!Number.isFinite(leaseExpiresAt) || leaseExpiresAt > Date.now())\n      ) {\n        return { error: \"provider_effect_claimed\", kind: \"retry_required\" };\n      }\n      const leaseToken = randomUUID();\n      claimedEffect = await input.repositories.effects.claim({\n        effectId: effect.id,\n        expectedFencingEpoch: effect.fencingEpoch,\n        leaseToken,\n      });\n      if (!claimedEffect) {\n        return { error: \"provider_effect_claimed\", kind: \"retry_required\" };\n      }\n      const markedUnknown = await input.repositories.effects.markUnknown({\n        effectId: claimedEffect.id,\n        error: \"provider_effect_lease_expired\",\n        expectedFencingEpoch: claimedEffect.fencingEpoch,\n        leaseToken,\n        observedEvidence: {\n          outcome: \"unknown\",\n          reason: \"expired_claim\",\n        },\n      });\n      if (!markedUnknown) {\n        return { error: \"provider_effect_lease_lost\", kind: \"retry_required\" };\n      }\n      return { error: \"provider_outcome_unknown\", kind: \"unknown\" };\n    }\n    if (effect?.state === \"failed\" || effect?.state === \"attention_required\") {\n      return {\n        error: effect.lastError ?? \"provider_effect_terminal\",\n        kind: \"failed\",\n      };\n    }\n    if (!effect) {\n      const createInput: BillingProviderEffectCreateInput = {\n        connectionId: input.context.connectionId,\n        effectType: action.effectType,\n        idempotencyKey: action.idempotencyKey,\n        operationId: operation.id,\n        provider: input.context.provider,\n        requestFingerprint: fingerprintBillingProviderEffect(action.request),\n      };\n      effect = await input.repositories.effects.create(createInput);\n    }\n    if (effect.state === \"claimed\") {\n      return { error: \"provider_effect_claimed\", kind: \"retry_required\" };\n    }\n    if (effect.state !== \"pending\") {\n      return { error: \"provider_effect_not_pending\", kind: \"failed\" };\n    }\n    if (!claimedEffect) {\n      const leaseToken = randomUUID();\n      claimedEffect = await input.repositories.effects.claim({\n        effectId: effect.id,\n        expectedFencingEpoch: effect.fencingEpoch,\n        leaseToken,\n      });\n      if (!claimedEffect) {\n        return { error: \"provider_effect_claimed\", kind: \"retry_required\" };\n      }\n    }\n    const leaseToken = claimedEffect.leaseToken ?? \"\";\n    try {\n      const mutation = await action.invoke();\n      const completed = await input.repositories.effects.complete({\n        effectId: claimedEffect.id,\n        expectedFencingEpoch: claimedEffect.fencingEpoch,\n        leaseToken,\n        observedEvidence: mutation.evidence,\n        observedResult: mutation.result,\n        providerResourceId: mutation.providerResourceId,\n      });\n      if (!completed) {\n        return { error: \"provider_effect_completion_lost\", kind: \"retry_required\" };\n      }\n      return { effect: completed, kind: \"applied\" };\n    } catch (error) {\n      const kind = action.classifyError?.(error) ?? defaultErrorKind(error);\n      if (kind === \"uncertain\") {\n        const unknown = await input.repositories.effects.markUnknown({\n          effectId: claimedEffect.id,\n          error: \"provider_outcome_unknown\",\n          expectedFencingEpoch: claimedEffect.fencingEpoch,\n          leaseToken,\n          observedEvidence: { outcome: \"unknown\" },\n        });\n        return unknown\n          ? { error, kind: \"unknown\" }\n          : { error: \"provider_effect_lease_lost\", kind: \"retry_required\" };\n      }\n      const failed = await input.repositories.effects.fail({\n        effectId: claimedEffect.id,\n        error: errorText(error, \"provider_mutation_failed\"),\n        expectedFencingEpoch: claimedEffect.fencingEpoch,\n        leaseToken,\n      });\n      return failed\n        ? { error, kind: kind === \"unsupported\" ? \"unsupported\" : \"failed\" }\n        : { error: \"provider_effect_lease_lost\", kind: \"retry_required\" };\n    }\n  };\n\n  while (steps < maxSteps) {\n    steps += 1;\n    const effects = await input.repositories.effects.list(operation.id);\n    if (!isBillingPlanChangeState(operation.state)) {\n      throw new PlanChangeCoordinatorError(\n        `Invalid plan-change state for ${operation.id}.`,\n      );\n    }\n    if (\n      operation.state !== \"completed\" &&\n      operation.state !== \"attention_required\" &&\n      operation.state !== \"failed\" &&\n      operation.leaseToken == null\n    ) {\n      const claimed = await input.repositories.planChanges.claim({\n        expectedFencingEpoch: operation.fencingEpoch,\n        expectedState:\n          operation.state === \"requested\" ? \"requested\" : undefined,\n        id: operation.id,\n        leaseToken: randomUUID(),\n      });\n      if (!claimed) {\n        return terminalResult(\"retry_required\", \"plan_change_claim_unavailable\");\n      }\n      operation = claimed;\n      emit({\n        action: \"claim\",\n        diagnostics: input.diagnostics,\n        operation,\n        outcome: \"claimed\",\n      });\n      continue;\n    }\n\n    switch (operation.state) {\n      case \"requested\":\n        continue;\n      case \"claimed\":\n        if (!(await transition(\"provider_update_pending\"))) {\n          return scheduleRetry(\"plan_change_transition_lost\");\n        }\n        continue;\n      case \"provider_update_pending\":\n      case \"replacement_create_pending\":\n      case \"old_cancel_pending\":\n      case \"compensation_pending\": {\n        const effectType =\n          operation.state === \"provider_update_pending\"\n            ? \"subscription.update\"\n            : operation.state === \"replacement_create_pending\"\n              ? \"subscription.create.replacement\"\n              : operation.state === \"old_cancel_pending\"\n                ? \"subscription.cancel.old\"\n                : \"subscription.cancel.replacement\";\n        const action = input.context.actions[effectType];\n        if (!action) {\n          throw new PlanChangeCoordinatorError(\n            `No provider action is registered for ${effectType}.`,\n          );\n        }\n        const outcome = await executeEffect(action, effects);\n        emit({\n          action: effectType,\n          diagnostics: input.diagnostics,\n          operation,\n          outcome: outcome.kind,\n        });\n        if (outcome.kind === \"applied\") {\n          const nextState =\n            operation.state === \"provider_update_pending\"\n              ? \"provider_update_applied\"\n              : operation.state === \"replacement_create_pending\"\n                ? \"replacement_created\"\n                : operation.state === \"old_cancel_pending\"\n                  ? \"old_cancelled\"\n                  : \"compensation_applied\";\n          if (\n            !(await transition(\n              nextState,\n              undefined,\n              operation.state === \"replacement_create_pending\"\n                ? outcome.effect.providerResourceId ?? undefined\n                : undefined,\n            ))\n          ) {\n            return scheduleRetry(\"plan_change_transition_lost\");\n          }\n          continue;\n        }\n        if (outcome.kind === \"unknown\") {\n          const nextState =\n            operation.state === \"provider_update_pending\"\n              ? \"provider_update_unknown\"\n              : operation.state === \"replacement_create_pending\"\n                ? \"replacement_create_unknown\"\n                : operation.state === \"old_cancel_pending\"\n                  ? \"old_cancel_unknown\"\n                  : \"compensation_unknown\";\n          if (!(await transition(nextState, errorText(outcome.error, \"unknown\")))) {\n            return scheduleRetry(\"plan_change_transition_lost\");\n          }\n          return scheduleRetry(outcome.error);\n        }\n        if (outcome.kind === \"retry_required\") {\n          return scheduleRetry(outcome.error);\n        }\n        if (outcome.kind === \"conflicting\") {\n          if (!(await transition(\"attention_required\", errorText(outcome.error, \"provider_state_conflict\")))) {\n            return scheduleRetry(\"plan_change_transition_lost\");\n          }\n          return terminalResult(\"attention_required\", outcome.error);\n        }\n        if (\n          outcome.kind === \"unsupported\" &&\n          operation.state === \"provider_update_pending\"\n        ) {\n          if (!(await transition(\"replacement_create_pending\"))) {\n            return scheduleRetry(\"plan_change_transition_lost\");\n          }\n          continue;\n        }\n        const failureState =\n          operation.state === \"old_cancel_pending\"\n            ? \"compensating\"\n            : operation.state === \"compensation_pending\"\n              ? \"attention_required\"\n              : \"failed\";\n        if (!(await transition(failureState, errorText(outcome.error, \"failed\")))) {\n          return scheduleRetry(\"plan_change_transition_lost\");\n        }\n        if (failureState === \"compensating\") {\n          continue;\n        }\n        return terminalResult(\n          failureState === \"attention_required\" ? \"attention_required\" : \"failed\",\n          outcome.error,\n        );\n      }\n      case \"provider_update_unknown\":\n      case \"replacement_create_unknown\":\n      case \"old_cancel_unknown\":\n      case \"compensation_unknown\": {\n        const effectType =\n          operation.state === \"provider_update_unknown\"\n            ? \"subscription.update\"\n            : operation.state === \"replacement_create_unknown\"\n              ? \"subscription.create.replacement\"\n              : operation.state === \"old_cancel_unknown\"\n                ? \"subscription.cancel.old\"\n                : \"subscription.cancel.replacement\";\n        const action = input.context.actions[effectType];\n        const effect = effects.find(\n          (candidate) => candidate.effectType === effectType,\n        );\n        if (!action || !effect) {\n          throw new PlanChangeCoordinatorError(\n            `Missing provider evidence for ${effectType}.`,\n          );\n        }\n        const observation = await reconcileEffect(action, effect);\n        emit({\n          action: effectType,\n          diagnostics: input.diagnostics,\n          operation,\n          outcome: observation,\n        });\n        if (observation === \"applied\") {\n          const appliedEffect = (\n            await input.repositories.effects.list(operation.id)\n          ).find((candidate) => candidate.effectType === effectType);\n          const nextState =\n            operation.state === \"provider_update_unknown\"\n              ? \"provider_update_applied\"\n              : operation.state === \"replacement_create_unknown\"\n                ? \"replacement_created\"\n                : operation.state === \"old_cancel_unknown\"\n                  ? \"old_cancelled\"\n                  : \"compensation_applied\";\n          if (\n            !(await transition(\n              nextState,\n              undefined,\n              operation.state === \"replacement_create_unknown\"\n                ? appliedEffect?.providerResourceId ?? undefined\n                : undefined,\n            ))\n          ) {\n            return scheduleRetry(\"plan_change_transition_lost\");\n          }\n          continue;\n        }\n        if (observation === \"not_applied\") {\n          const nextState =\n            operation.state === \"provider_update_unknown\"\n              ? \"provider_update_pending\"\n              : operation.state === \"replacement_create_unknown\"\n                ? \"replacement_create_pending\"\n                : operation.state === \"old_cancel_unknown\"\n                  ? \"old_cancel_pending\"\n                  : \"compensation_pending\";\n          if (!(await transition(nextState))) {\n            return scheduleRetry(\"plan_change_transition_lost\");\n          }\n          continue;\n        }\n        if (observation === \"conflicting\") {\n          if (!(await transition(\"attention_required\", \"provider_state_conflict\"))) {\n            return scheduleRetry(\"plan_change_transition_lost\");\n          }\n          return terminalResult(\"attention_required\", \"provider_state_conflict\");\n        }\n        return scheduleRetry(\"provider_outcome_unknown\");\n      }\n      case \"provider_update_applied\":\n        if (!(await transition(\"local_commit_pending\"))) {\n          return scheduleRetry(\"plan_change_transition_lost\");\n        }\n        continue;\n      case \"replacement_created\":\n        if (!(await transition(\"old_cancel_pending\"))) {\n          return scheduleRetry(\"plan_change_transition_lost\");\n        }\n        continue;\n      case \"old_cancelled\":\n        if (!(await transition(\"local_commit_pending\"))) {\n          return scheduleRetry(\"plan_change_transition_lost\");\n        }\n        continue;\n      case \"compensating\":\n        if (!(await transition(\"compensation_pending\"))) {\n          return scheduleRetry(\"plan_change_transition_lost\");\n        }\n        continue;\n      case \"local_commit_pending\": {\n        let commit: PlanChangeCommitResult<TResult> | undefined;\n        const phase = operation.replacementProviderSubscriptionId\n          ? \"replacement\"\n          : \"direct\";\n        const transaction = input.repositories.planChanges.transaction;\n        if (transaction) {\n          try {\n            await transaction(async (sql) => {\n              commit = await input.context.commit({ operation, phase, sql });\n              if (commit.kind !== \"completed\") {\n                throw new PlanChangeTransactionRollback();\n              }\n              const completed = await createBillingPlanChangeRepository(\n                sql\n              ).complete({\n                expectedFencingEpoch: operation.fencingEpoch,\n                expectedState: operation.state,\n                id: operation.id,\n                leaseToken: operation.leaseToken ?? \"\",\n              });\n              if (!completed) {\n                commit = {\n                  error: \"plan_change_completion_lost\",\n                  kind: \"retry_required\",\n                };\n                throw new PlanChangeTransactionRollback();\n              }\n              operation = completed;\n            });\n          } catch (error) {\n            if (!(error instanceof PlanChangeTransactionRollback)) {\n              throw error;\n            }\n          }\n        } else {\n          commit = await input.context.commit({ operation, phase });\n          if (commit.kind === \"completed\") {\n            const completed = await input.repositories.planChanges.complete({\n              expectedFencingEpoch: operation.fencingEpoch,\n              expectedState: operation.state,\n              id: operation.id,\n              leaseToken: operation.leaseToken ?? \"\",\n            });\n            if (!completed) {\n              return scheduleRetry(\"plan_change_completion_lost\");\n            }\n            operation = completed;\n          }\n        }\n        if (!commit) {\n          throw new PlanChangeCoordinatorError(\n            `Plan-change commit did not produce an outcome for ${operation.id}.`\n          );\n        }\n        if (commit.kind === \"completed\") {\n          return terminalResult(\"completed\", undefined, commit.result);\n        }\n        if (commit.kind === \"attention_required\") {\n          if (!(await transition(\"attention_required\", commit.error))) {\n            return scheduleRetry(\"plan_change_transition_lost\");\n          }\n          return terminalResult(\"attention_required\", commit.error);\n        }\n        return scheduleRetry(commit.error);\n      }\n      case \"compensation_applied\":\n        {\n          const failureError = operation.lastError ?? \"compensation_applied\";\n          if (!(await transition(\"failed\", failureError))) {\n            return scheduleRetry(\"plan_change_transition_lost\");\n          }\n          return terminalResult(\"failed\", failureError);\n        }\n      case \"completed\":\n        return terminalResult(\"completed\");\n      case \"attention_required\":\n        return terminalResult(\"attention_required\", operation.lastError);\n      case \"failed\":\n        return terminalResult(\"failed\", operation.lastError);\n    }\n  }\n\n  return scheduleRetry(\"plan_change_step_budget_exhausted\");\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport {\n  assertBillingPlanChangeTransition,\n  type BillingPlanChangeState,\n  parseBillingPlanChangeState,\n} from \"./plan-change-state.ts\";\n\nexport interface BillingPlanChangeOperationRecord {\n  connectionId?: string;\n  createdAt?: string | null;\n  enrollmentId?: string | null;\n  expectedRowVersion: number;\n  fencingEpoch: number;\n  id: string;\n  idempotencyKey: string;\n  lastError: string | null;\n  lastOutcome?: string | null;\n  leaseExpiresAt: string | null;\n  leaseToken: string | null;\n  nextRetryAt?: string | null;\n  ownedSubscriptionId: string;\n  priceId: string;\n  retryCount?: number;\n  replacementProviderSubscriptionId: string | null;\n  state: BillingPlanChangeState;\n  subjectId: string;\n  subjectKind: \"user\" | \"organization\";\n  updatedAt?: string | null;\n}\n\nexport interface BillingPlanChangeCreateInput {\n  connectionId: string;\n  enrollmentId?: string | null;\n  expectedRowVersion: number;\n  idempotencyKey: string;\n  ownedSubscriptionId: string;\n  priceId: string;\n  subjectId: string;\n  subjectKind: \"user\" | \"organization\";\n}\n\nexport interface BillingPlanChangeRecoveryCandidate {\n  expectedFencingEpoch: number;\n  id: string;\n  retryCount: number;\n}\n\nexport interface BillingOwnedSubscriptionVersion {\n  connectionId?: string;\n  id: string;\n  rowVersion: number;\n}\n\nexport class BillingPlanChangeRepositoryError extends Error {\n  readonly code = \"ATHENA_BILLING_PLAN_CHANGE_REPOSITORY_ERROR\";\n\n  constructor(message: string) {\n    super(message);\n    this.name = \"BillingPlanChangeRepositoryError\";\n  }\n}\n\nfunction nullableString(value: unknown): string | null {\n  return typeof value === \"string\" ? value : null;\n}\n\nfunction nullableTimestamp(value: unknown): string | null {\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n  return typeof value === \"string\" ? value : null;\n}\n\nfunction asRecord(\n  row: Record<string, unknown>,\n): BillingPlanChangeOperationRecord {\n  const subjectKind = row.subject_kind;\n  if (subjectKind !== \"user\" && subjectKind !== \"organization\") {\n    throw new BillingPlanChangeRepositoryError(\n      `Invalid plan-change subject kind: ${String(subjectKind)}.`,\n    );\n  }\n  return {\n    connectionId: String(row.connection_id),\n    createdAt: nullableTimestamp(row.created_at),\n    enrollmentId: nullableString(row.enrollment_id),\n    expectedRowVersion: Number(row.expected_row_version),\n    fencingEpoch: Number(row.fencing_epoch),\n    id: String(row.id),\n    idempotencyKey: String(row.idempotency_key),\n    lastError: nullableString(row.last_error),\n    lastOutcome: nullableString(row.last_outcome),\n    leaseExpiresAt: nullableTimestamp(row.lease_expires_at),\n    leaseToken: nullableString(row.lease_token),\n    nextRetryAt: nullableTimestamp(row.next_retry_at),\n    ownedSubscriptionId: String(row.owned_subscription_id),\n    priceId: String(row.price_id),\n    retryCount: Number(row.retry_count ?? 0),\n    replacementProviderSubscriptionId: nullableString(\n      row.replacement_provider_subscription_id,\n    ),\n    state: parseBillingPlanChangeState(row.state),\n    subjectId: String(row.subject_id),\n    subjectKind,\n    updatedAt: nullableTimestamp(row.updated_at),\n  };\n}\n\nfunction assertCreateIdentity(\n  existing: BillingPlanChangeOperationRecord,\n  input: BillingPlanChangeCreateInput,\n): void {\n  if (\n    existing.connectionId !== input.connectionId ||\n    (existing.enrollmentId ?? null) !== (input.enrollmentId ?? null) ||\n    existing.idempotencyKey !== input.idempotencyKey ||\n    existing.ownedSubscriptionId !== input.ownedSubscriptionId ||\n    existing.priceId !== input.priceId ||\n    existing.subjectId !== input.subjectId ||\n    existing.subjectKind !== input.subjectKind\n  ) {\n    throw new BillingPlanChangeRepositoryError(\n      \"Plan-change idempotency key was reused with different operation data.\",\n    );\n  }\n}\n\nexport interface BillingPlanChangeRepository {\n  attentionRequired(input: {\n    error: string;\n    expectedFencingEpoch: number;\n    expectedState: BillingPlanChangeState;\n    id: string;\n    leaseToken: string;\n  }): Promise<BillingPlanChangeOperationRecord | undefined>;\n  completeTerminal(input: {\n    expectedFencingEpoch: number;\n    expectedState: BillingPlanChangeState;\n    id: string;\n    leaseToken: string;\n  }): Promise<BillingPlanChangeOperationRecord | undefined>;\n  claim(input: {\n    expectedFencingEpoch: number;\n    expectedState?: BillingPlanChangeState;\n    id: string;\n    leaseToken: string;\n  }): Promise<BillingPlanChangeOperationRecord | undefined>;\n  complete(input: {\n    expectedFencingEpoch: number;\n    expectedState: BillingPlanChangeState;\n    id: string;\n    leaseToken: string;\n  }): Promise<BillingPlanChangeOperationRecord | undefined>;\n  create(\n    input: BillingPlanChangeCreateInput,\n  ): Promise<BillingPlanChangeOperationRecord>;\n  fail(input: {\n    error: string;\n    expectedFencingEpoch: number;\n    expectedState: BillingPlanChangeState;\n    id: string;\n    leaseToken: string;\n  }): Promise<BillingPlanChangeOperationRecord | undefined>;\n  findExpired(input?: {\n    limit?: number;\n  }): Promise<readonly BillingPlanChangeRecoveryCandidate[]>;\n  heartbeat(input: {\n    expectedFencingEpoch: number;\n    id: string;\n    leaseToken: string;\n  }): Promise<boolean>;\n  loadOwnedSubscriptionVersion(input: {\n    subjectId: string;\n    subjectKind: \"user\" | \"organization\";\n    subscriptionId: string;\n  }): Promise<BillingOwnedSubscriptionVersion | undefined>;\n  load(\n    id: string,\n  ): Promise<BillingPlanChangeOperationRecord | undefined>;\n  countRecoverable(): Promise<number>;\n  markAttentionRequired(input: {\n    error: string;\n    expectedFencingEpoch: number;\n    expectedState: BillingPlanChangeState;\n    id: string;\n    leaseToken: string;\n  }): Promise<BillingPlanChangeOperationRecord | undefined>;\n  markOwnedSubscriptionCanceled(input: {\n    expectedRowVersion: number;\n    subjectId: string;\n    subscriptionId: string;\n  }): Promise<boolean>;\n  release(input: {\n    expectedFencingEpoch: number;\n    id: string;\n    leaseToken: string;\n  }): Promise<boolean>;\n  scheduleRetry(input: {\n    expectedFencingEpoch: number;\n    id: string;\n    lastError?: string | null;\n    leaseToken: string;\n    nextRetryAt: string;\n    retryCount: number;\n    state: BillingPlanChangeState;\n  }): Promise<BillingPlanChangeOperationRecord | undefined>;\n  updateOwnedSubscription(input: {\n    amountCurrency: string;\n    amountValue: string;\n    description: string;\n    expectedRowVersion: number;\n    interval: string;\n    metadata: unknown;\n    subjectId: string;\n    subscriptionId: string;\n    subjectKind: \"user\" | \"organization\";\n  }): Promise<Record<string, unknown> | undefined>;\n  transition(input: {\n    expectedFencingEpoch: number;\n    expectedState: BillingPlanChangeState;\n    id: string;\n    lastError?: string | null;\n    leaseToken: string;\n    replacementProviderSubscriptionId?: string | null;\n    state: BillingPlanChangeState;\n  }): Promise<BillingPlanChangeOperationRecord | undefined>;\n  transaction?<T>(fn: (sql: BillingSqlExecutor) => Promise<T>): Promise<T>;\n}\n\nexport function createBillingPlanChangeRepository(\n  sql: BillingSqlExecutor,\n): BillingPlanChangeRepository {\n  const loadOwnedSubscriptionVersion = async (input: {\n    subjectId: string;\n    subjectKind: \"user\" | \"organization\";\n    subscriptionId: string;\n  }): Promise<BillingOwnedSubscriptionVersion | undefined> => {\n    const result = await sql.query(\n      `SELECT id, connection_id::text AS connection_id, row_version, updated_at\n       FROM billing.billing_subscriptions\n       WHERE id = $1::uuid\n         AND subject_kind = $2\n         AND subject_id = $3\n         AND ownership_status = 'resolved'\n       LIMIT 1`,\n      [input.subscriptionId, input.subjectKind, input.subjectId],\n    );\n    const row = result.rows[0];\n    if (!row) {\n      return undefined;\n    }\n    return {\n      connectionId:\n        typeof row.connection_id === \"string\"\n          ? row.connection_id\n          : undefined,\n      id: String(row.id),\n      rowVersion: Number(row.row_version ?? 1),\n    };\n  };\n\n  const load = async (\n    id: string,\n  ): Promise<BillingPlanChangeOperationRecord | undefined> => {\n    const result = await sql.query(\n      `SELECT *\n       FROM billing.billing_plan_change_operations\n       WHERE id = $1::uuid\n       LIMIT 1`,\n      [id],\n    );\n    const row = result.rows[0];\n    return row ? asRecord(row) : undefined;\n  };\n\n  const findByIdentity = async (\n    input: BillingPlanChangeCreateInput,\n  ): Promise<BillingPlanChangeOperationRecord | undefined> => {\n    const result = await sql.query(\n      `SELECT *\n       FROM billing.billing_plan_change_operations\n       WHERE subject_kind = $1\n         AND subject_id = $2\n         AND idempotency_key = $3\n       LIMIT 1`,\n      [input.subjectKind, input.subjectId, input.idempotencyKey],\n    );\n    const row = result.rows[0];\n    return row ? asRecord(row) : undefined;\n  };\n\n  const transition = async (\n    input: Parameters<BillingPlanChangeRepository[\"transition\"]>[0],\n  ): Promise<BillingPlanChangeOperationRecord | undefined> => {\n    assertBillingPlanChangeTransition(input.expectedState, input.state);\n    const result = await sql.query(\n      `UPDATE billing.billing_plan_change_operations\n       SET state = $2,\n           replacement_provider_subscription_id = COALESCE($3, replacement_provider_subscription_id),\n           last_error = COALESCE($4, last_error),\n           fencing_epoch = fencing_epoch + 1,\n           lease_expires_at = now() + interval '30 seconds',\n           updated_at = now()\n       WHERE id = $1::uuid\n         AND state = $5\n         AND lease_token = $6\n         AND fencing_epoch = $7\n         AND lease_expires_at > now()\n       RETURNING *`,\n      [\n        input.id,\n        input.state,\n        input.replacementProviderSubscriptionId ?? null,\n        input.lastError ?? null,\n        input.expectedState,\n        input.leaseToken,\n        input.expectedFencingEpoch,\n      ],\n    );\n    const row = result.rows[0];\n    return row ? asRecord(row) : undefined;\n  };\n\n  const attentionRequired = async (\n    input: Parameters<BillingPlanChangeRepository[\"attentionRequired\"]>[0],\n  ): Promise<BillingPlanChangeOperationRecord | undefined> =>\n    transition({\n      expectedFencingEpoch: input.expectedFencingEpoch,\n      expectedState: input.expectedState,\n      id: input.id,\n      lastError: input.error,\n      leaseToken: input.leaseToken,\n      state: \"attention_required\",\n    });\n\n  const complete = async (\n    input: Parameters<BillingPlanChangeRepository[\"complete\"]>[0],\n  ): Promise<BillingPlanChangeOperationRecord | undefined> => {\n    assertBillingPlanChangeTransition(input.expectedState, \"completed\");\n    const result = await sql.query(\n      `UPDATE billing.billing_plan_change_operations\n       SET state = 'completed',\n           lease_token = NULL,\n           lease_expires_at = NULL,\n           fencing_epoch = fencing_epoch + 1,\n           updated_at = now()\n       WHERE id = $1::uuid\n         AND state = $4\n         AND lease_token = $2\n         AND fencing_epoch = $3\n         AND lease_expires_at > now()\n       RETURNING *`,\n      [\n        input.id,\n        input.leaseToken,\n        input.expectedFencingEpoch,\n        input.expectedState,\n      ],\n    );\n    const row = result.rows[0];\n    return row ? asRecord(row) : undefined;\n  };\n\n  const transaction = sql.transaction;\n  const transactionMethods = transaction\n    ? {\n        transaction<T>(fn: (sql: BillingSqlExecutor) => Promise<T>) {\n          return transaction(fn);\n        },\n      }\n    : {};\n\n  return {\n    attentionRequired,\n\n    async claim(input) {\n      if (input.expectedState === \"requested\") {\n        assertBillingPlanChangeTransition(\"requested\", \"claimed\");\n      }\n      const result = await sql.query(\n        `UPDATE billing.billing_plan_change_operations\n         SET state = CASE WHEN state = 'requested' THEN 'claimed' ELSE state END,\n             lease_token = $2,\n             lease_expires_at = now() + interval '30 seconds',\n             fencing_epoch = fencing_epoch + 1,\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND fencing_epoch = $3\n           AND ($4::text IS NULL OR state = $4)\n           AND state NOT IN ('completed', 'attention_required', 'failed')\n           AND (next_retry_at IS NULL OR next_retry_at <= now())\n           AND (\n             lease_token IS NULL\n             OR lease_expires_at IS NULL\n             OR lease_expires_at < now()\n             OR lease_token = $2\n           )\n         RETURNING *`,\n        [\n          input.id,\n          input.leaseToken,\n          input.expectedFencingEpoch,\n          input.expectedState ?? null,\n        ],\n      );\n      const row = result.rows[0];\n      return row ? asRecord(row) : undefined;\n    },\n\n    complete,\n    completeTerminal: complete,\n\n    async countRecoverable() {\n      const result = await sql.query(\n        `SELECT COUNT(*)::int AS count\n         FROM billing.billing_plan_change_operations\n         WHERE state NOT IN ('completed', 'attention_required', 'failed')\n           AND (lease_expires_at IS NULL OR lease_expires_at < now())\n           AND (next_retry_at IS NULL OR next_retry_at <= now())`\n      );\n      return Number(result.rows[0]?.count ?? 0);\n    },\n\n    async create(input) {\n      const result = await sql.query(\n        `INSERT INTO billing.billing_plan_change_operations (\n           id,\n           connection_id,\n           subject_kind,\n           subject_id,\n           owned_subscription_id,\n           enrollment_id,\n           idempotency_key,\n           expected_row_version,\n           fencing_epoch,\n           state,\n           price_id\n         ) VALUES (\n           $1::uuid,\n           $2::uuid,\n           $3,\n           $4,\n           $5::uuid,\n           $6::uuid,\n           $7,\n           $8,\n           0,\n           'requested',\n           $9\n         )\n         ON CONFLICT (subject_kind, subject_id, idempotency_key) DO NOTHING\n         RETURNING *`,\n        [\n          randomUUID(),\n          input.connectionId,\n          input.subjectKind,\n          input.subjectId,\n          input.ownedSubscriptionId,\n          input.enrollmentId ?? null,\n          input.idempotencyKey,\n          input.expectedRowVersion,\n          input.priceId,\n        ],\n      );\n      const inserted = result.rows[0];\n      if (inserted) {\n        return asRecord(inserted);\n      }\n      const existing = await findByIdentity(input);\n      if (!existing) {\n        throw new BillingPlanChangeRepositoryError(\n          \"Plan-change operation disappeared after an idempotent insert.\",\n        );\n      }\n      assertCreateIdentity(existing, input);\n      return existing;\n    },\n\n    async fail(input) {\n      return transition({\n        expectedFencingEpoch: input.expectedFencingEpoch,\n        expectedState: input.expectedState,\n        id: input.id,\n        lastError: input.error,\n        leaseToken: input.leaseToken,\n        state: \"failed\",\n      });\n    },\n\n    async findExpired(input = {}) {\n      const limit = Math.max(1, Math.min(Math.trunc(input.limit ?? 50), 100));\n      const result = await sql.query(\n        `SELECT id, fencing_epoch, retry_count\n         FROM billing.billing_plan_change_operations\n         WHERE state NOT IN ('completed', 'attention_required', 'failed')\n           AND (lease_expires_at IS NULL OR lease_expires_at < now())\n           AND (next_retry_at IS NULL OR next_retry_at <= now())\n         ORDER BY updated_at\n         LIMIT $1`,\n        [limit],\n      );\n      return result.rows.map((row) => ({\n        expectedFencingEpoch: Number(row.fencing_epoch ?? 0),\n        id: String(row.id),\n        retryCount: Number(row.retry_count ?? 0),\n      }));\n    },\n\n    async heartbeat(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_plan_change_operations\n         SET lease_expires_at = now() + interval '30 seconds',\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND lease_token = $2\n           AND fencing_epoch = $3\n           AND state NOT IN ('completed', 'attention_required', 'failed')\n           AND lease_expires_at > now()\n         RETURNING id`,\n        [input.id, input.leaseToken, input.expectedFencingEpoch],\n      );\n      return result.rows.length > 0;\n    },\n\n    async loadOwnedSubscriptionVersion(input) {\n      return loadOwnedSubscriptionVersion(input);\n    },\n\n    load,\n    markAttentionRequired: attentionRequired,\n\n    async markOwnedSubscriptionCanceled(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_subscriptions\n         SET status = 'canceled',\n             canceled_at = now(),\n             row_version = row_version + 1\n         WHERE id = $1::uuid\n           AND subject_id = $2\n           AND row_version = $3\n         RETURNING id`,\n        [input.subscriptionId, input.subjectId, input.expectedRowVersion],\n      );\n      return result.rows.length > 0;\n    },\n\n    async release(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_plan_change_operations\n         SET lease_token = NULL,\n             lease_expires_at = NULL,\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND lease_token = $2\n           AND fencing_epoch = $3\n           AND state NOT IN ('completed', 'attention_required', 'failed')\n         RETURNING id`,\n        [input.id, input.leaseToken, input.expectedFencingEpoch],\n      );\n      return result.rows.length > 0;\n    },\n\n    async scheduleRetry(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_plan_change_operations\n         SET retry_count = $5,\n             next_retry_at = $6,\n             last_error = COALESCE($7, last_error),\n             last_outcome = 'retry_scheduled',\n             lease_token = NULL,\n             lease_expires_at = NULL,\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND state = $4\n           AND lease_token = $2\n           AND fencing_epoch = $3\n           AND lease_expires_at > now()\n         RETURNING *`,\n        [\n          input.id,\n          input.leaseToken,\n          input.expectedFencingEpoch,\n          input.state,\n          input.retryCount,\n          input.nextRetryAt,\n          input.lastError ?? null,\n        ],\n      );\n      const row = result.rows[0];\n      return row ? asRecord(row) : undefined;\n    },\n\n    transition,\n\n    async updateOwnedSubscription(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_subscriptions\n         SET amount_currency = $4,\n             amount_value = $5,\n             interval = $6,\n             description = $7,\n             metadata = COALESCE(metadata, '{}'::jsonb) || $8::jsonb,\n             row_version = row_version + 1,\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND subject_kind = $2\n           AND subject_id = $3\n           AND ownership_status = 'resolved'\n           AND row_version = $9\n         RETURNING *`,\n        [\n          input.subscriptionId,\n          input.subjectKind,\n          input.subjectId,\n          input.amountCurrency,\n          input.amountValue,\n          input.interval,\n          input.description,\n          JSON.stringify(input.metadata),\n          input.expectedRowVersion,\n        ],\n      );\n      return result.rows[0];\n    },\n    ...transactionMethods,\n  };\n}\n\nexport const createPostgresBillingPlanChangeRepository =\n  createBillingPlanChangeRepository;\n","export const BILLING_PLAN_CHANGE_STATES = [\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] as const;\n\nexport type BillingPlanChangeState =\n  (typeof BILLING_PLAN_CHANGE_STATES)[number];\n\nexport const BILLING_PLAN_CHANGE_STATE_TRANSITIONS: Readonly<\n  Record<BillingPlanChangeState, readonly BillingPlanChangeState[]>\n> = {\n  attention_required: [],\n  claimed: [\"provider_update_pending\", \"replacement_create_pending\", \"failed\"],\n  compensation_applied: [\"failed\", \"attention_required\"],\n  compensation_pending: [\n    \"compensation_applied\",\n    \"compensation_unknown\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  compensation_unknown: [\n    \"compensation_pending\",\n    \"compensation_applied\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  compensating: [\"compensation_pending\", \"attention_required\", \"failed\"],\n  completed: [],\n  failed: [],\n  local_commit_pending: [\"completed\", \"attention_required\", \"failed\"],\n  old_cancel_pending: [\n    \"old_cancelled\",\n    \"old_cancel_unknown\",\n    \"compensating\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  old_cancel_unknown: [\n    \"old_cancel_pending\",\n    \"old_cancelled\",\n    \"compensating\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  old_cancelled: [\"local_commit_pending\", \"attention_required\", \"failed\"],\n  provider_update_applied: [\n    \"local_commit_pending\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  provider_update_pending: [\n    \"provider_update_unknown\",\n    \"provider_update_applied\",\n    \"replacement_create_pending\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  provider_update_unknown: [\n    \"provider_update_pending\",\n    \"provider_update_applied\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  replacement_create_pending: [\n    \"replacement_created\",\n    \"replacement_create_unknown\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  replacement_create_unknown: [\n    \"replacement_create_pending\",\n    \"replacement_created\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  replacement_created: [\"old_cancel_pending\", \"attention_required\", \"failed\"],\n  requested: [\"claimed\", \"failed\"],\n};\n\nconst BILLING_PLAN_CHANGE_STATE_SET = new Set<BillingPlanChangeState>(\n  BILLING_PLAN_CHANGE_STATES,\n);\n\nexport class BillingPlanChangeTransitionError extends Error {\n  readonly code = \"ATHENA_BILLING_PLAN_CHANGE_INVALID_TRANSITION\";\n  readonly from: string;\n  readonly to: string;\n\n  constructor(from: string, to: string) {\n    super(`Illegal plan-change transition: ${from} -> ${to}.`);\n    this.name = \"BillingPlanChangeTransitionError\";\n    this.from = from;\n    this.to = to;\n  }\n}\n\nexport function isBillingPlanChangeState(\n  value: unknown,\n): value is BillingPlanChangeState {\n  return (\n    typeof value === \"string\" &&\n    BILLING_PLAN_CHANGE_STATE_SET.has(value as BillingPlanChangeState)\n  );\n}\n\nexport function parseBillingPlanChangeState(\n  value: unknown,\n): BillingPlanChangeState {\n  if (!isBillingPlanChangeState(value)) {\n    throw new BillingPlanChangeTransitionError(String(value), \"<invalid>\");\n  }\n  return value;\n}\n\nexport function canTransitionBillingPlanChange(\n  from: unknown,\n  to: unknown,\n): boolean {\n  return (\n    isBillingPlanChangeState(from) &&\n    isBillingPlanChangeState(to) &&\n    BILLING_PLAN_CHANGE_STATE_TRANSITIONS[from].includes(to)\n  );\n}\n\nexport function assertBillingPlanChangeTransition(\n  from: string,\n  to: string,\n): asserts to is BillingPlanChangeState {\n  if (!canTransitionBillingPlanChange(from, to)) {\n    throw new BillingPlanChangeTransitionError(from, to);\n  }\n}\n\nexport function transitionBillingPlanChangeState(\n  from: BillingPlanChangeState,\n  to: BillingPlanChangeState,\n): BillingPlanChangeState {\n  assertBillingPlanChangeTransition(from, to);\n  return to;\n}\n","import { createHash, randomUUID } from \"node:crypto\";\n\nimport type { BillingProviderName } from \"../../types.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\n\nexport const BILLING_PROVIDER_EFFECT_STATES = [\n  \"pending\",\n  \"claimed\",\n  \"applied\",\n  \"unknown\",\n  \"failed\",\n  \"attention_required\",\n] as const;\n\nexport type BillingProviderEffectState =\n  (typeof BILLING_PROVIDER_EFFECT_STATES)[number];\n\nconst BILLING_PROVIDER_EFFECT_STATE_SET = new Set<BillingProviderEffectState>(\n  BILLING_PROVIDER_EFFECT_STATES,\n);\n\nexport function isBillingProviderEffectState(\n  value: unknown,\n): value is BillingProviderEffectState {\n  return (\n    typeof value === \"string\" &&\n    BILLING_PROVIDER_EFFECT_STATE_SET.has(value as BillingProviderEffectState)\n  );\n}\n\nexport interface BillingProviderEffectRecord {\n  attempts: number;\n  claimedAt: string | null;\n  completedAt: string | null;\n  connectionId: string;\n  createdAt: string | null;\n  effectType: string;\n  failedAt: string | null;\n  fencingEpoch: number;\n  id: string;\n  idempotencyKey: string;\n  lastError: string | null;\n  leaseExpiresAt: string | null;\n  leaseToken: string | null;\n  observedEvidence: unknown | null;\n  observedResult: unknown | null;\n  operationId: string;\n  provider: BillingProviderName;\n  providerResourceId: string | null;\n  requestFingerprint: string;\n  state: BillingProviderEffectState;\n  unknownAt: string | null;\n  updatedAt: string | null;\n}\n\nexport class BillingProviderEffectStateError extends Error {\n  readonly code = \"ATHENA_BILLING_PROVIDER_EFFECT_INVALID_STATE\";\n\n  constructor(value: unknown) {\n    super(`Invalid provider-effect state: ${String(value)}.`);\n    this.name = \"BillingProviderEffectStateError\";\n  }\n}\n\nexport class BillingProviderEffectIdentityError extends Error {\n  readonly code = \"ATHENA_BILLING_PROVIDER_EFFECT_IDENTITY_CONFLICT\";\n\n  constructor(operationId: string, effectType: string) {\n    super(\n      `Provider effect identity already exists with different request metadata: ${operationId}/${effectType}.`,\n    );\n    this.name = \"BillingProviderEffectIdentityError\";\n  }\n}\n\nfunction effectState(value: unknown): BillingProviderEffectState {\n  if (isBillingProviderEffectState(value)) {\n    return value;\n  }\n  throw new BillingProviderEffectStateError(value);\n}\n\nfunction nullableString(value: unknown): string | null {\n  return typeof value === \"string\" ? value : null;\n}\n\nfunction nullableTimestamp(value: unknown): string | null {\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n  return typeof value === \"string\" ? value : null;\n}\n\nfunction asRecord(row: Record<string, unknown>): BillingProviderEffectRecord {\n  return {\n    attempts: Number(row.attempts ?? 0),\n    claimedAt: nullableTimestamp(row.claimed_at),\n    completedAt: nullableTimestamp(row.completed_at),\n    connectionId: String(row.connection_id),\n    createdAt: nullableTimestamp(row.created_at),\n    effectType: String(row.effect_type),\n    failedAt: nullableTimestamp(row.failed_at),\n    fencingEpoch: Number(row.fencing_epoch ?? 0),\n    id: String(row.id),\n    idempotencyKey: String(row.idempotency_key),\n    lastError: nullableString(row.last_error),\n    leaseExpiresAt: nullableTimestamp(row.lease_expires_at),\n    leaseToken: nullableString(row.lease_token),\n    observedEvidence: row.observed_evidence ?? null,\n    observedResult: row.observed_result ?? null,\n    operationId: String(row.operation_id),\n    provider: String(row.provider),\n    providerResourceId: nullableString(row.provider_resource_id),\n    requestFingerprint: String(row.request_fingerprint),\n    state: effectState(row.state),\n    unknownAt: nullableTimestamp(row.unknown_at),\n    updatedAt: nullableTimestamp(row.updated_at),\n  };\n}\n\nfunction json(value: unknown): string {\n  return JSON.stringify(value ?? null);\n}\n\nexport function fingerprintBillingProviderEffect(input: unknown): string {\n  return createHash(\"sha256\")\n    .update(JSON.stringify(input) ?? \"\", \"utf8\")\n    .digest(\"hex\");\n}\n\nexport interface BillingProviderEffectCreateInput {\n  connectionId: string;\n  effectType: string;\n  idempotencyKey: string;\n  operationId: string;\n  provider: BillingProviderName;\n  requestFingerprint: string;\n}\n\nexport type BillingProviderEffectFindInput =\n  | { effectId: string }\n  | { effectType: string; operationId: string };\n\nexport interface BillingProviderEffectRepository {\n  claim(input: {\n    effectId: string;\n    expectedFencingEpoch: number;\n    leaseToken: string;\n  }): Promise<BillingProviderEffectRecord | undefined>;\n  complete(input: {\n    effectId: string;\n    expectedFencingEpoch: number;\n    leaseToken: string;\n    observedEvidence?: unknown;\n    observedResult?: unknown;\n    providerResourceId?: string | null;\n  }): Promise<BillingProviderEffectRecord | undefined>;\n  create(\n    input: BillingProviderEffectCreateInput,\n  ): Promise<BillingProviderEffectRecord>;\n  fail(input: {\n    effectId: string;\n    error: string;\n    expectedFencingEpoch: number;\n    leaseToken: string;\n  }): Promise<BillingProviderEffectRecord | undefined>;\n  find(\n    input: BillingProviderEffectFindInput,\n  ): Promise<BillingProviderEffectRecord | undefined>;\n  markUnknown(input: {\n    effectId: string;\n    error: string;\n    expectedFencingEpoch: number;\n    leaseToken: string;\n    observedEvidence?: unknown;\n  }): Promise<BillingProviderEffectRecord | undefined>;\n  markApplied(input: {\n    effectId: string;\n    expectedFencingEpoch: number;\n    observedEvidence?: unknown;\n    observedResult?: unknown;\n    providerResourceId?: string | null;\n  }): Promise<BillingProviderEffectRecord | undefined>;\n  markAttentionRequired(input: {\n    effectId: string;\n    error: string;\n    expectedFencingEpoch: number;\n    observedEvidence?: unknown;\n  }): Promise<BillingProviderEffectRecord | undefined>;\n  list(\n    operationId: string,\n  ): Promise<readonly BillingProviderEffectRecord[]>;\n  retry(input: {\n    effectId: string;\n    expectedFencingEpoch: number;\n  }): Promise<BillingProviderEffectRecord | undefined>;\n}\n\nfunction assertCreateIdentity(\n  existing: BillingProviderEffectRecord,\n  input: BillingProviderEffectCreateInput,\n): void {\n  if (\n    existing.connectionId !== input.connectionId ||\n    existing.effectType !== input.effectType ||\n    existing.idempotencyKey !== input.idempotencyKey ||\n    existing.operationId !== input.operationId ||\n    existing.provider !== input.provider ||\n    existing.requestFingerprint !== input.requestFingerprint\n  ) {\n    throw new BillingProviderEffectIdentityError(\n      input.operationId,\n      input.effectType,\n    );\n  }\n}\n\nexport function createBillingProviderEffectRepository(\n  sql: BillingSqlExecutor,\n): BillingProviderEffectRepository {\n  const find = async (\n    input: BillingProviderEffectFindInput,\n  ): Promise<BillingProviderEffectRecord | undefined> => {\n    const result =\n      \"effectId\" in input\n        ? await sql.query(\n            `SELECT *\n             FROM billing.billing_provider_effects\n             WHERE id = $1::uuid\n             LIMIT 1`,\n            [input.effectId],\n          )\n        : await sql.query(\n            `SELECT *\n             FROM billing.billing_provider_effects\n             WHERE operation_id = $1::uuid\n               AND effect_type = $2\n             LIMIT 1`,\n            [input.operationId, input.effectType],\n          );\n    const row = result.rows[0];\n    return row ? asRecord(row) : undefined;\n  };\n\n  return {\n    async claim(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_provider_effects\n         SET state = 'claimed',\n             lease_token = $2,\n             lease_expires_at = now() + interval '30 seconds',\n             fencing_epoch = fencing_epoch + 1,\n             attempts = attempts + 1,\n             claimed_at = now(),\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND fencing_epoch = $3\n           AND state IN ('pending', 'claimed')\n           AND (\n             state = 'pending'\n             OR lease_token = $2\n             OR lease_expires_at IS NULL\n             OR lease_expires_at < now()\n           )\n         RETURNING *`,\n        [input.effectId, input.leaseToken, input.expectedFencingEpoch],\n      );\n      const row = result.rows[0];\n      return row ? asRecord(row) : undefined;\n    },\n\n    async complete(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_provider_effects\n         SET state = 'applied',\n             provider_resource_id = COALESCE($4, provider_resource_id),\n             observed_result = $5::jsonb,\n             observed_evidence = $6::jsonb,\n             lease_token = NULL,\n             lease_expires_at = NULL,\n             completed_at = now(),\n             last_error = NULL,\n             fencing_epoch = fencing_epoch + 1,\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND lease_token = $2\n           AND fencing_epoch = $3\n           AND state = 'claimed'\n           AND lease_expires_at > now()\n         RETURNING *`,\n        [\n          input.effectId,\n          input.leaseToken,\n          input.expectedFencingEpoch,\n          input.providerResourceId ?? null,\n          json(input.observedResult),\n          json(input.observedEvidence),\n        ],\n      );\n      const row = result.rows[0];\n      return row ? asRecord(row) : undefined;\n    },\n\n    async create(input) {\n      const result = await sql.query(\n        `INSERT INTO billing.billing_provider_effects (\n           id,\n           operation_id,\n           effect_type,\n           provider,\n           connection_id,\n           idempotency_key,\n           state,\n           request_fingerprint\n         ) VALUES ($1::uuid, $2::uuid, $3, $4, $5::uuid, $6, 'pending', $7)\n         ON CONFLICT (operation_id, effect_type) DO NOTHING\n         RETURNING *`,\n        [\n          randomUUID(),\n          input.operationId,\n          input.effectType,\n          input.provider,\n          input.connectionId,\n          input.idempotencyKey,\n          input.requestFingerprint,\n        ],\n      );\n      const inserted = result.rows[0];\n      if (inserted) {\n        return asRecord(inserted);\n      }\n      const existing = await find({\n        effectType: input.effectType,\n        operationId: input.operationId,\n      });\n      if (!existing) {\n        throw new Error(\"Provider effect disappeared after an idempotent insert.\");\n      }\n      assertCreateIdentity(existing, input);\n      return existing;\n    },\n\n    async fail(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_provider_effects\n         SET state = 'failed',\n             last_error = $4,\n             lease_token = NULL,\n             lease_expires_at = NULL,\n             failed_at = now(),\n             fencing_epoch = fencing_epoch + 1,\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND lease_token = $2\n           AND fencing_epoch = $3\n           AND state = 'claimed'\n           AND lease_expires_at > now()\n         RETURNING *`,\n        [\n          input.effectId,\n          input.leaseToken,\n          input.expectedFencingEpoch,\n          input.error,\n        ],\n      );\n      const row = result.rows[0];\n      return row ? asRecord(row) : undefined;\n    },\n\n    find,\n\n    async markUnknown(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_provider_effects\n         SET state = 'unknown',\n             last_error = $4,\n             observed_evidence = $5::jsonb,\n             lease_token = NULL,\n             lease_expires_at = NULL,\n             unknown_at = now(),\n             fencing_epoch = fencing_epoch + 1,\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND lease_token = $2\n           AND fencing_epoch = $3\n           AND state = 'claimed'\n           AND lease_expires_at > now()\n         RETURNING *`,\n        [\n          input.effectId,\n          input.leaseToken,\n          input.expectedFencingEpoch,\n          input.error,\n          json(input.observedEvidence),\n        ],\n      );\n      const row = result.rows[0];\n      return row ? asRecord(row) : undefined;\n    },\n\n    async markApplied(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_provider_effects\n         SET state = 'applied',\n             provider_resource_id = COALESCE($3, provider_resource_id),\n             observed_result = $4::jsonb,\n             observed_evidence = $5::jsonb,\n             completed_at = now(),\n             last_error = NULL,\n             fencing_epoch = fencing_epoch + 1,\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND fencing_epoch = $2\n           AND state = 'unknown'\n         RETURNING *`,\n        [\n          input.effectId,\n          input.expectedFencingEpoch,\n          input.providerResourceId ?? null,\n          json(input.observedResult),\n          json(input.observedEvidence),\n        ],\n      );\n      const row = result.rows[0];\n      return row ? asRecord(row) : undefined;\n    },\n\n    async markAttentionRequired(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_provider_effects\n         SET state = 'attention_required',\n             last_error = $3,\n             observed_evidence = $4::jsonb,\n             fencing_epoch = fencing_epoch + 1,\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND fencing_epoch = $2\n           AND state = 'unknown'\n         RETURNING *`,\n        [\n          input.effectId,\n          input.expectedFencingEpoch,\n          input.error,\n          json(input.observedEvidence),\n        ],\n      );\n      const row = result.rows[0];\n      return row ? asRecord(row) : undefined;\n    },\n\n    async list(operationId) {\n      const result = await sql.query(\n        `SELECT *\n         FROM billing.billing_provider_effects\n         WHERE operation_id = $1::uuid\n         ORDER BY created_at, effect_type`,\n        [operationId],\n      );\n      return result.rows.map(asRecord);\n    },\n\n    async retry(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_provider_effects\n         SET state = 'pending',\n             fencing_epoch = fencing_epoch + 1,\n             updated_at = now()\n         WHERE id = $1::uuid\n           AND fencing_epoch = $2\n           AND state = 'unknown'\n         RETURNING *`,\n        [input.effectId, input.expectedFencingEpoch],\n      );\n      const row = result.rows[0];\n      return row ? asRecord(row) : undefined;\n    },\n  };\n}\n\nexport const createPostgresBillingProviderEffectRepository =\n  createBillingProviderEffectRepository;\n","import type { BillingMoney } from \"../../types.ts\";\n\nexport type PlanChangeProviderObservation =\n  | \"applied\"\n  | \"conflicting\"\n  | \"not_applied\"\n  | \"unknown\";\n\nexport interface PlanChangeProviderSubscriptionState {\n  amount?: BillingMoney | null;\n  interval?: string | null;\n  providerSubscriptionId?: string | null;\n  status?: string | null;\n}\n\nexport interface PlanChangeProviderSubscriptionTarget\n  extends PlanChangeProviderSubscriptionState {\n  status: \"active\" | \"canceled\";\n}\n\nfunction normalizedInterval(value: string | null | undefined): string {\n  const normalized = value?.trim().toLowerCase() ?? \"\";\n  return normalized.replace(/^1\\s+/, \"\");\n}\n\nfunction sameAmount(\n  actual: BillingMoney | null | undefined,\n  intended: BillingMoney | null | undefined,\n): boolean {\n  return (\n    actual?.currency === intended?.currency && actual?.value === intended?.value\n  );\n}\n\nfunction matchesTarget(\n  actual: PlanChangeProviderSubscriptionState,\n  intended: PlanChangeProviderSubscriptionTarget,\n): boolean {\n  if (\n    intended.providerSubscriptionId != null &&\n    actual.providerSubscriptionId !== intended.providerSubscriptionId\n  ) {\n    return false;\n  }\n  if (intended.amount != null && !sameAmount(actual.amount, intended.amount)) {\n    return false;\n  }\n  if (\n    intended.interval != null &&\n    normalizedInterval(actual.interval) !== normalizedInterval(intended.interval)\n  ) {\n    return false;\n  }\n  return actual.status === intended.status;\n}\n\nexport function classifyPlanChangeProviderState(input: {\n  actual: PlanChangeProviderSubscriptionState | undefined;\n  intended: PlanChangeProviderSubscriptionTarget;\n  previous?: PlanChangeProviderSubscriptionTarget;\n}): PlanChangeProviderObservation {\n  if (input.actual == null || input.actual.status == null) {\n    return \"unknown\";\n  }\n  if (matchesTarget(input.actual, input.intended)) {\n    return \"applied\";\n  }\n  if (\n    input.intended.status === \"canceled\" &&\n    input.actual.status !== \"canceled\" &&\n    input.actual.status !== \"cancelled\"\n  ) {\n    return input.actual.status === \"active\" ? \"not_applied\" : \"unknown\";\n  }\n  if (\n    input.previous != null &&\n    matchesTarget(input.actual, input.previous)\n  ) {\n    return \"not_applied\";\n  }\n  return \"conflicting\";\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 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 { AthenaBillingCapabilityError } from \"../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../runtime/invocation-authority.ts\";\nimport { executeLocalBillingCustomerCreate } from \"../runtime/local/execute/customers.ts\";\nimport type { BillingProviderRegistry } from \"../runtime/local/providers/registry.ts\";\nimport { selfDelegatedBillingPrincipal } from \"../runtime/self/delegated-principal.ts\";\nimport type { BillingCustomer } from \"../types.ts\";\nimport {\n  billingConfiguredConnectionOwner,\n  configuredProvidersForBillingConnection,\n  resolveBillingConnectionAffinity,\n} from \"./connection-affinity.ts\";\nimport {\n  createVerifiedBillingContact,\n  type VerifiedBillingContact,\n} from \"./contact.ts\";\nimport {\n  createPostgresBillingSubjectRepository,\n  isBillingUniqueViolation,\n  subjectFromPrincipalUser,\n} from \"./postgres.ts\";\nimport { requireBillingPrincipalUserId } from \"./principal-user.ts\";\nimport type {\n  BillingSqlExecutor,\n  BillingSubjectBindingRecord,\n} from \"./repository.ts\";\n\nfunction isPlaceholderProviderId(value: string): boolean {\n  return value.startsWith(\"reserve:\");\n}\n\nfunction usableProviderCustomer(\n  bindings: readonly BillingSubjectBindingRecord[]\n): BillingSubjectBindingRecord | undefined {\n  return bindings.find(\n    (binding) =>\n      binding.providerSubjectKind === \"customer\" &&\n      binding.status === \"active\" &&\n      !isPlaceholderProviderId(binding.providerSubjectId)\n  );\n}\n\nasync function verifiedBillingContact(input: {\n  now?: () => Date;\n  sql: BillingSqlExecutor;\n  subjectId: string;\n}): Promise<VerifiedBillingContact | undefined> {\n  const result = await input.sql.query(\n    `SELECT id, email, email_verified\n     FROM athena.users\n     WHERE id = $1\n     LIMIT 1`,\n    [input.subjectId],\n  );\n  const row = result.rows[0];\n  if (\n    !row ||\n    typeof row.email !== \"string\" ||\n    row.email_verified !== true\n  ) {\n    return undefined;\n  }\n  const verifiedEmailObservedAt = (input.now ?? (() => new Date()))();\n  return createVerifiedBillingContact({\n    email: row.email,\n    source: \"athena-auth\",\n    subjectId: input.subjectId,\n    verifiedEmailObservedAt,\n  });\n}\n\n/**\n * Ensure an active provider customer exists for the Athena subject.\n * Binding keys are subject_kind + subject_id. Email is never identity.\n * Concurrent callers serialize on the live unique index: only the INSERT winner\n * creates a Mollie customer.\n */\nexport async function ensureActiveProviderCustomer(input: {\n  applicationId?: string;\n  configuredProviders?: BillingProviderConfigMap;\n  connectionId?: string;\n  idempotencyKey: string;\n  now?: () => Date;\n  principal: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n}): Promise<{ customerId: string; provider: BillingCustomer[\"provider\"] }> {\n  const subjectId = requireBillingPrincipalUserId(input.principal);\n  const affinity = await resolveBillingConnectionAffinity({\n    ownedConnectionId: input.connectionId,\n    operation: \"customers.create\",\n    provider: \"mollie\",\n    sql: input.sql,\n    subjectId,\n    subjectKind: \"user\",\n    testMode: input.testMode,\n    ...(billingConfiguredConnectionOwner(input.applicationId) ?? {}),\n  });\n  const connectionId = affinity.connectionId;\n  const configuredProviders = configuredProvidersForBillingConnection({\n    affinity,\n    configuredProviders: input.configuredProviders,\n    operation: \"customers.create\",\n  });\n  const contact = await verifiedBillingContact({\n    now: input.now,\n    sql: input.sql,\n    subjectId,\n  });\n  const createCustomer = () =>\n    executeLocalBillingCustomerCreate({\n      authority: PROCESS_BILLING_INVOCATION,\n      configuredProviders,\n      payload: {\n        ...(contact ? { email: contact.email } : {}),\n        idempotencyKey: `${input.idempotencyKey}:customer`,\n        metadata: {\n          athenaSubjectId: requireBillingPrincipalUserId(input.principal),\n          athenaSubjectKind: \"user\",\n        },\n      },\n      principal: selfDelegatedBillingPrincipal(input.principal, [\n        \"customers.create\",\n      ]),\n      registry: input.registry,\n      testMode: input.testMode,\n    });\n  const repository = createPostgresBillingSubjectRepository(input.sql);\n  const subject = subjectFromPrincipalUser(\n    requireBillingPrincipalUserId(input.principal)\n  );\n  for (let attempt = 0; attempt < 8; attempt++) {\n    const bindings = await repository.listActiveBindings({\n      connectionId,\n      subject,\n    });\n    const usable = usableProviderCustomer(bindings);\n    if (usable) {\n      if (contact) {\n        const recorded = await repository.recordContact({\n          bindingId: usable.id,\n          contact,\n        });\n        if (!recorded) {\n          throw new Error(\"Failed to record verified Billing contact.\");\n        }\n      }\n      return {\n        customerId: usable.providerSubjectId,\n        provider: \"mollie\",\n      };\n    }\n    const reserved = await repository.reserve({\n      connectionId,\n      providerSubjectKind: \"customer\",\n      source: \"created\",\n      subject,\n      contact,\n    });\n    if (!reserved.inserted) {\n      const existing =\n        usableProviderCustomer([reserved.binding]) ??\n        usableProviderCustomer(\n          await repository.listActiveBindings({\n            connectionId,\n            subject,\n          })\n        );\n      if (existing) {\n        return {\n          customerId: existing.providerSubjectId,\n          provider: \"mollie\",\n        };\n      }\n      continue;\n    }\n    const created = await createCustomer();\n    try {\n      await repository.activate({\n        id: reserved.binding.id,\n        providerSubjectId: created.providerCustomerId,\n        reservationToken: reserved.binding.reservationToken,\n      });\n    } catch (error) {\n      if (!isBillingUniqueViolation(error)) {\n        throw error;\n      }\n      const after = usableProviderCustomer(\n        await repository.listActiveBindings({\n          connectionId,\n          subject,\n        })\n      );\n      if (after) {\n        return {\n          customerId: after.providerSubjectId,\n          provider: \"mollie\",\n        };\n      }\n      throw error;\n    }\n    return {\n      customerId: created.providerCustomerId,\n      provider: created.provider,\n    };\n  }\n  throw new AthenaBillingCapabilityError({\n    operation: \"customers.create\",\n    reason: \"runtime_unavailable\",\n  });\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n  BillingCreateCustomerInput,\n  BillingCustomer,\n  BillingDeleteCustomerInput,\n  BillingGetCustomerInput,\n  BillingListCustomersInput,\n  BillingUpdateCustomerInput,\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 executeLocalBillingCustomerCreate(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingCreateCustomerInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingCustomer> {\n  return executeLocalBillingOperation({\n    invoke: (customers, context, payload) =>\n      customers.create(context, {\n        ...(payload.email == null ? {} : { email: payload.email }),\n        idempotencyKey: payload.idempotencyKey,\n        metadata: payload.metadata,\n        name: payload.name,\n      }),\n    operation: \"customers.create\",\n    port: \"customers\",\n    request: input,\n    safety: \"defer-then-finalize\",\n  });\n}\n\nexport async function executeLocalBillingCustomerGet(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingGetCustomerInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingCustomer> {\n  return executeLocalBillingOperation({\n    invoke: (customers, context, payload) =>\n      customers.get(context, { id: payload.id }),\n    operation: \"customers.get\",\n    port: \"customers\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingCustomerList(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingListCustomersInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPage<BillingCustomer>> {\n  return executeLocalBillingOperation({\n    before: (payload) =>\n      rejectUnsupportedListOffset(\"customers.list\", payload.offset),\n    invoke: (customers, context, payload) =>\n      customers.list(context, {\n        cursor: payload.cursor,\n        limit: payload.limit,\n      }),\n    operation: \"customers.list\",\n    port: \"customers\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingCustomerUpdate(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingUpdateCustomerInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingCustomer> {\n  return executeLocalBillingOperation({\n    invoke: (customers, context, payload) =>\n      customers.update(context, {\n        email: payload.email,\n        id: payload.id,\n        name: payload.name,\n      }),\n    operation: \"customers.update\",\n    port: \"customers\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingCustomerDelete(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingDeleteCustomerInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<void> {\n  return executeLocalBillingOperation({\n    invoke: async (customers, context, payload) => {\n      await customers.delete(context, { id: payload.id });\n    },\n    operation: \"customers.delete\",\n    port: \"customers\",\n    request: input,\n  });\n}\n","export type VerifiedBillingContactSource = \"athena-auth\";\n\nexport interface VerifiedBillingContact {\n  email: string;\n  source: VerifiedBillingContactSource;\n  subjectId: string;\n  verifiedEmailObservedAt: string;\n}\n\nexport function createVerifiedBillingContact(input: {\n  email: string;\n  source: VerifiedBillingContactSource;\n  subjectId: string;\n  verifiedEmailObservedAt: string | Date | null;\n}): VerifiedBillingContact {\n  const email = input.email.trim();\n  const subjectId = input.subjectId.trim();\n  const verifiedEmailObservedAt =\n    input.verifiedEmailObservedAt instanceof Date\n      ? input.verifiedEmailObservedAt.toISOString()\n      : input.verifiedEmailObservedAt?.trim() ?? \"\";\n  if (!email || !subjectId || !verifiedEmailObservedAt) {\n    throw new Error(\n      \"A verified Billing contact requires an email, subject, and observation time.\",\n    );\n  }\n  if (input.source !== \"athena-auth\") {\n    throw new Error(\"Billing contact provenance must come from Athena Auth.\");\n  }\n  if (!Number.isFinite(Date.parse(verifiedEmailObservedAt))) {\n    throw new Error(\"Billing contact observation time is invalid.\");\n  }\n  return {\n    email,\n    source: input.source,\n    subjectId,\n    verifiedEmailObservedAt,\n  };\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n  BillingListProductsInput,\n  BillingProduct,\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 executeLocalBillingProductList(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingListProductsInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPage<BillingProduct>> {\n  return executeLocalBillingOperation({\n    before: (payload) =>\n      rejectUnsupportedListOffset(\"products.list\", payload.offset),\n    invoke: (products, context, payload) =>\n      products.list(context, {\n        cursor: payload.cursor,\n        limit: payload.limit,\n      }),\n    operation: \"products.list\",\n    port: \"products\",\n    request: input,\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 { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingPayment } from \"../../types.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport { executeLocalBillingPaymentCreate } from \"../local/execute/payments.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport {\n  payableCheckoutSnapshotLines,\n  paymentAmountFromCheckoutSnapshot,\n} from \"./checkout-snapshot.ts\";\nimport { parseBillingPaymentPresentation } from \"./checkout-presentation.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport {\n  type BillingCheckoutSessionRecord,\n  listCheckoutSessionLines,\n} from \"./enrollment-session.ts\";\n\nfunction metadataString(\n  metadata: Record<string, unknown>,\n  key: string\n): string | undefined {\n  const value = metadata[key];\n  return typeof value === \"string\" && value.trim().length > 0\n    ? value\n    : undefined;\n}\n\nexport function paymentCreateIdempotencyKey(\n  session: BillingCheckoutSessionRecord\n): string {\n  const stored = metadataString(session.metadata, \"paymentIdempotencyKey\");\n  if (stored) {\n    return stored;\n  }\n  if (session.kind === \"one_off\") {\n    return session.idempotencyKey;\n  }\n  return `${session.idempotencyKey}:first-payment`;\n}\n\n/**\n * Provider payment amount and price identity come from the accepted line\n * snapshot, never from a later catalog read.\n */\nexport async function createProviderPaymentFromCheckoutSnapshot(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  principal: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  session: BillingCheckoutSessionRecord;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n}): Promise<BillingPayment | undefined> {\n  const lines = await listCheckoutSessionLines({\n    checkoutSessionId: input.session.id,\n    sql: input.sql,\n  });\n  const amount = paymentAmountFromCheckoutSnapshot(lines);\n  const payable = payableCheckoutSnapshotLines(lines);\n  const priceIds = payable.map((line) => line.priceId);\n  const snapshotPriceId = priceIds[0];\n  if (amount == null || snapshotPriceId == null || priceIds.length === 0) {\n    return;\n  }\n  const successUrl = metadataString(input.session.metadata, \"successUrl\");\n  const cancelUrl = metadataString(input.session.metadata, \"cancelUrl\");\n  const redirectUrl = successUrl ?? cancelUrl;\n  if (redirectUrl == null) {\n    return;\n  }\n  const presentation = parseBillingPaymentPresentation(\n    input.session.metadata.paymentPresentation,\n  );\n  const identityDescription = priceIds.join(\" + \");\n  const delegated = selfDelegatedBillingPrincipal(input.principal, [\n    \"payments.create\",\n  ]);\n  return executeLocalBillingPaymentCreate({\n    authority: PROCESS_BILLING_INVOCATION,\n    configuredProviders: input.configuredProviders,\n    payload: {\n      amount,\n      customerId: input.session.providerCustomerId ?? undefined,\n      description:\n        presentation?.description ??\n        (input.session.kind === \"one_off\"\n          ? `Athena checkout ${identityDescription}`\n          : `Athena first payment ${identityDescription}`),\n      idempotencyKey: paymentCreateIdempotencyKey(input.session),\n      metadata: {\n        athenaCheckoutSessionId: input.session.id,\n        athenaSubjectId: input.session.subjectId,\n        athenaSubjectKind: input.session.subjectKind,\n        priceId: snapshotPriceId,\n        priceIds,\n        ...(input.session.metadata.athenaEnrollment === true\n          ? { athenaEnrollment: true }\n          : {}),\n      },\n      cancelUrl,\n      redirectUrl,\n      ...(input.session.metadata.paymentSequenceType === \"first\"\n        ? { sequenceType: \"first\" as const }\n        : {}),\n    },\n    principal: delegated,\n    registry: input.registry,\n    testMode: input.testMode,\n  });\n}\n\nexport async function requireProviderPaymentFromCheckoutSnapshot(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  principal: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  session: BillingCheckoutSessionRecord;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n}): Promise<BillingPayment> {\n  const payment = await createProviderPaymentFromCheckoutSnapshot(input);\n  if (payment == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.checkout.create\",\n      reason: \"unsupported_operation\",\n    });\n  }\n  return payment;\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n  BillingCancelPaymentInput,\n  BillingCreatePaymentInput,\n  BillingGetPaymentInput,\n  BillingListPaymentsInput,\n  BillingPayment,\n} from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport type { BillingProviderCreatePaymentInput } from \"../providers/types.ts\";\nimport { executeLocalBillingOperation } from \"./invoke.ts\";\nimport {\n  rejectUnsupportedListOffset,\n  rejectUnsupportedLocalPaymentListSource,\n} from \"./shared.ts\";\n\ntype BillingLocalPaymentCreatePayload = BillingCreatePaymentInput & {\n  cancelUrl?: string | null;\n};\n\nexport async function executeLocalBillingPaymentCreate(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingLocalPaymentCreatePayload;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPayment> {\n  return executeLocalBillingOperation({\n    invoke: (payments, context, payload) => {\n      const providerInput: BillingProviderCreatePaymentInput = {\n        amount: payload.amount,\n        cancelUrl: payload.cancelUrl,\n        customerId: payload.customerId,\n        description: payload.description,\n        idempotencyKey: payload.idempotencyKey,\n        metadata: payload.metadata,\n        redirectUrl: payload.redirectUrl,\n        sequenceType: payload.sequenceType,\n      };\n      return payments.create(context, providerInput);\n    },\n    operation: \"payments.create\",\n    port: \"payments\",\n    request: input,\n    safety: \"defer-then-finalize\",\n  });\n}\n\nexport async function executeLocalBillingPaymentGet(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingGetPaymentInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPayment> {\n  return executeLocalBillingOperation({\n    invoke: (payments, context, payload) =>\n      payments.get(context, { id: payload.id }),\n    operation: \"payments.get\",\n    port: \"payments\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingPaymentCancel(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingCancelPaymentInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPayment> {\n  return executeLocalBillingOperation({\n    invoke: (payments, context, payload) =>\n      payments.cancel(context, { id: payload.id }),\n    operation: \"payments.cancel\",\n    port: \"payments\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingPaymentList(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingListPaymentsInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPage<BillingPayment>> {\n  return executeLocalBillingOperation({\n    before: (payload) => {\n      rejectUnsupportedListOffset(\"payments.list\", payload.offset);\n      rejectUnsupportedLocalPaymentListSource(payload.source);\n    },\n    invoke: (payments, context, payload) =>\n      payments.list(context, {\n        cursor: payload.cursor,\n        limit: payload.limit,\n      }),\n    operation: \"payments.list\",\n    port: \"payments\",\n    request: input,\n  });\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 { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport type { BillingProduct } from \"../../types.ts\";\n\nexport type BillingPaymentPresentationKind = \"checkout\" | \"first_payment\";\n\nexport interface BillingPaymentPresentationLine {\n  priceId: string;\n  productId: string;\n  productName: string;\n  quantity: number;\n}\n\nexport interface BillingPaymentPresentation {\n  description: string;\n  lines: readonly BillingPaymentPresentationLine[];\n}\n\nexport interface BillingPaymentPresentationLineInput {\n  interval?: string | null;\n  priceId: string;\n  productId: string;\n  quantity: number;\n}\n\nfunction paymentPresentationLabel(\n  line: BillingPaymentPresentationLine,\n): string {\n  return line.quantity === 1\n    ? line.productName\n    : `${line.quantity} x ${line.productName}`;\n}\n\nexport function freezeBillingPaymentPresentation(input: {\n  kind: BillingPaymentPresentationKind;\n  lines: readonly BillingPaymentPresentationLineInput[];\n  operation: string;\n  products: readonly Pick<BillingProduct, \"id\" | \"name\">[];\n}): BillingPaymentPresentation {\n  const productsById = new Map<string, number>();\n  for (const product of input.products) {\n    productsById.set(product.id, (productsById.get(product.id) ?? 0) + 1);\n  }\n  const lines = input.lines.map((line) => {\n    const productCount = productsById.get(line.productId) ?? 0;\n    const product = input.products.find(\n      (candidate) => candidate.id === line.productId,\n    );\n    const productName = product?.name.trim() ?? \"\";\n    if (\n      productCount !== 1 ||\n      productName.length === 0 ||\n      line.priceId.trim().length === 0 ||\n      line.productId.trim().length === 0 ||\n      !Number.isSafeInteger(line.quantity) ||\n      line.quantity < 1\n    ) {\n      throw new AthenaBillingCapabilityError({\n        operation: input.operation,\n        reason: \"missing_catalog\",\n      });\n    }\n    return {\n      priceId: line.priceId,\n      productId: line.productId,\n      productName,\n      quantity: line.quantity,\n    };\n  });\n  if (lines.length === 0) {\n    throw new AthenaBillingCapabilityError({\n      operation: input.operation,\n      reason: \"missing_catalog\",\n    });\n  }\n  const prefix =\n    input.kind === \"checkout\" ? \"Athena checkout\" : \"Athena first payment\";\n  return {\n    description: `${prefix} ${lines\n      .map(paymentPresentationLabel)\n      .join(\" + \")}`,\n    lines,\n  };\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 parseBillingPaymentPresentation(\n  value: unknown,\n): BillingPaymentPresentation | null {\n  if (!isRecord(value) || typeof value.description !== \"string\") {\n    return null;\n  }\n  if (!Array.isArray(value.lines) || value.lines.length === 0) {\n    return null;\n  }\n  const lines: BillingPaymentPresentationLine[] = [];\n  for (const candidate of value.lines) {\n    if (!isRecord(candidate)) {\n      return null;\n    }\n    const { priceId, productId, productName, quantity } = candidate;\n    if (\n      typeof priceId !== \"string\" ||\n      typeof productId !== \"string\" ||\n      typeof productName !== \"string\" ||\n      typeof quantity !== \"number\" ||\n      priceId.trim().length === 0 ||\n      productId.trim().length === 0 ||\n      productName.trim().length === 0 ||\n      !Number.isSafeInteger(quantity) ||\n      quantity < 1\n    ) {\n      return null;\n    }\n    lines.push({ priceId, productId, productName, quantity });\n  }\n  return {\n    description: value.description,\n    lines,\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 { createHash } from \"node:crypto\";\n\nimport { AthenaBillingError } from \"../../errors.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingCheckoutComposition } from \"./composition.ts\";\nimport {\n  type BillingCheckoutSessionLineRecord,\n  type BillingCheckoutSessionRecord,\n  listCheckoutSessionLines,\n} from \"./enrollment-session.ts\";\n\nexport const CHECKOUT_INTENT_HASH_METADATA_KEY = \"checkoutIntentHash\";\n\nexport interface CheckoutIntentDigestLine {\n  amountCurrency: string;\n  amountValue: string;\n  interval: string | null;\n  priceId: string;\n  productId: string;\n  quantity: number;\n  relationId: string | null;\n}\n\nexport function digestLinesFromComposition(\n  composition: Pick<BillingCheckoutComposition, \"oneOffLines\" | \"recurringLine\">\n): CheckoutIntentDigestLine[] {\n  const lines = [\n    ...composition.oneOffLines,\n    ...(composition.recurringLine ? [composition.recurringLine] : []),\n  ];\n  return lines.map((line) => ({\n    amountCurrency: line.amount.currency,\n    amountValue: line.amount.value,\n    interval: line.interval ?? null,\n    priceId: line.price.id,\n    productId: line.productId,\n    quantity: line.quantity,\n    relationId: line.relationId ?? null,\n  }));\n}\n\nexport function digestLinesFromRecords(\n  lines: readonly BillingCheckoutSessionLineRecord[]\n): CheckoutIntentDigestLine[] {\n  return lines.map((line) => ({\n    amountCurrency: line.amountCurrency,\n    amountValue: line.amountValue,\n    interval: line.interval,\n    priceId: line.priceId,\n    productId: line.productId,\n    quantity: line.quantity,\n    relationId: line.relationId,\n  }));\n}\n\nexport function hashCheckoutRequestIdentity(\n  lines: readonly { priceId: string; quantity: number }[]\n): string {\n  const canonical = [...lines]\n    .map((line) => ({\n      priceId: line.priceId,\n      quantity: line.quantity,\n    }))\n    .sort((left, right) => {\n      const price = left.priceId.localeCompare(right.priceId);\n      if (price !== 0) {\n        return price;\n      }\n      return left.quantity - right.quantity;\n    });\n  return createHash(\"sha256\")\n    .update(JSON.stringify(canonical), \"utf8\")\n    .digest(\"hex\");\n}\n\nexport function hashCheckoutIntent(\n  lines: readonly CheckoutIntentDigestLine[]\n): string {\n  const canonical = [...lines]\n    .map((line) => ({\n      amount: {\n        currency: line.amountCurrency,\n        value: line.amountValue,\n      },\n      interval: line.interval ?? null,\n      priceId: line.priceId,\n      productId: line.productId,\n      quantity: line.quantity,\n      relationId: line.relationId ?? null,\n    }))\n    .sort((left, right) => {\n      const price = left.priceId.localeCompare(right.priceId);\n      if (price !== 0) {\n        return price;\n      }\n      const product = left.productId.localeCompare(right.productId);\n      if (product !== 0) {\n        return product;\n      }\n      return left.quantity - right.quantity;\n    });\n  return createHash(\"sha256\")\n    .update(JSON.stringify(canonical), \"utf8\")\n    .digest(\"hex\");\n}\n\nexport function checkoutIdempotencyConflict(\n  sessionId: string\n): AthenaBillingError {\n  return new AthenaBillingError({\n    body: { sessionId },\n    code: \"ATHENA_BILLING_IDEMPOTENCY_CONFLICT\",\n    endpoint: \"\",\n    message:\n      \"This idempotencyKey already identifies a different checkout purchase.\",\n    method: \"POST\",\n    status: 409,\n  });\n}\n\nexport async function assertMatchingCheckoutRequest(input: {\n  existing: BillingCheckoutSessionRecord;\n  requests: readonly { priceId: string; quantity: number }[];\n  sql: BillingSqlExecutor;\n}): Promise<void> {\n  const lines = await listCheckoutSessionLines({\n    checkoutSessionId: input.existing.id,\n    sql: input.sql,\n  });\n  if (lines.length === 0) {\n    return;\n  }\n  if (\n    hashCheckoutRequestIdentity(input.requests) !==\n    hashCheckoutRequestIdentity(\n      lines.map((line) => ({\n        priceId: line.priceId,\n        quantity: line.quantity,\n      }))\n    )\n  ) {\n    throw checkoutIdempotencyConflict(input.existing.id);\n  }\n}\n\nexport async function assertMatchingCheckoutIntent(input: {\n  existing: BillingCheckoutSessionRecord;\n  intentHash: string;\n  sql: BillingSqlExecutor;\n}): Promise<void> {\n  const stored = storedCheckoutIntentHash(input.existing);\n  if (stored != null) {\n    if (stored !== input.intentHash) {\n      throw checkoutIdempotencyConflict(input.existing.id);\n    }\n    return;\n  }\n  const lines = await listCheckoutSessionLines({\n    checkoutSessionId: input.existing.id,\n    sql: input.sql,\n  });\n  if (lines.length === 0) {\n    return;\n  }\n  if (hashCheckoutIntent(digestLinesFromRecords(lines)) !== input.intentHash) {\n    throw checkoutIdempotencyConflict(input.existing.id);\n  }\n}\n\nfunction storedCheckoutIntentHash(\n  session: BillingCheckoutSessionRecord\n): string | null {\n  const value = session.metadata[CHECKOUT_INTENT_HASH_METADATA_KEY];\n  return typeof value === \"string\" && value.trim().length > 0 ? value : null;\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 { parseWebOrigin } from \"../../../runtime/data/origin.ts\";\nimport { AthenaBillingError } from \"../../errors.ts\";\n\nexport function billingRedirectAllowlistFromAppUrl(\n  appUrl?: string | null\n): readonly string[] {\n  const origin = parseWebOrigin(appUrl ?? undefined);\n  return origin ? [origin] : [];\n}\n\nfunction rejectRedirect(field: string): never {\n  throw new AthenaBillingError({\n    body: { field },\n    code: \"ATHENA_BILLING_INVALID_REQUEST\",\n    endpoint: \"\",\n    message: `${field} must be an https (or loopback http) URL on the configured app origin.`,\n    method: \"POST\",\n    status: 400,\n  });\n}\n\nfunction isLoopbackHostname(hostname: string): boolean {\n  const host = hostname.replace(/^\\[(.*)\\]$/, \"$1\").toLowerCase();\n  return host === \"localhost\" || host === \"127.0.0.1\" || host === \"::1\";\n}\n\nfunction isAllowedBillingRedirectProtocol(url: URL): boolean {\n  if (url.protocol === \"https:\") {\n    return true;\n  }\n  return url.protocol === \"http:\" && isLoopbackHostname(url.hostname);\n}\n\nfunction isSafeAbsolutePath(path: string): boolean {\n  if (!path.startsWith(\"/\") || path.startsWith(\"//\") || path.includes(\"\\\\\")) {\n    return false;\n  }\n  if (/%5c/i.test(path) || /^\\/{2,}/.test(path)) {\n    return false;\n  }\n  return true;\n}\n\nfunction parseAbsoluteHttpUrl(value: string): URL | null {\n  try {\n    const url = new URL(value);\n    if (url.username !== \"\" || url.password !== \"\") {\n      return null;\n    }\n    if (!isAllowedBillingRedirectProtocol(url)) {\n      return null;\n    }\n    return url;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Self checkout / enroll redirects must land on the configured app origin\n * (`createClient({ app: { url } })` / `APP_URL`). Relative paths are rewritten\n * onto that origin. Foreign hosts, `javascript:` / `data:`, protocol-relative\n * URLs, non-loopback `http:`, and missing app origin fail closed.\n */\nexport function resolveAllowedBillingRedirectUrl(input: {\n  allowedOrigins: readonly string[];\n  field: \"successUrl\" | \"cancelUrl\" | \"redirectUrl\";\n  url: string | undefined;\n}): string | undefined {\n  if (input.url == null || input.url.trim() === \"\") {\n    return;\n  }\n  const trimmed = input.url.trim();\n  const allowed = input.allowedOrigins\n    .map((origin) => parseAbsoluteHttpUrl(origin))\n    .filter((url): url is URL => url != null)\n    .map((url) => url.origin);\n  if (allowed.length === 0) {\n    rejectRedirect(input.field);\n  }\n  let parsed: URL | null = null;\n  if (isSafeAbsolutePath(trimmed)) {\n    const baseOrigin = allowed[0];\n    if (baseOrigin === undefined) {\n      rejectRedirect(input.field);\n    }\n    try {\n      parsed = new URL(trimmed, `${baseOrigin}/`);\n    } catch {\n      rejectRedirect(input.field);\n    }\n    if (parsed.origin !== baseOrigin) {\n      rejectRedirect(input.field);\n    }\n  } else {\n    parsed = parseAbsoluteHttpUrl(trimmed);\n  }\n  if (parsed == null) {\n    rejectRedirect(input.field);\n  }\n  if (parsed.username !== \"\" || parsed.password !== \"\") {\n    rejectRedirect(input.field);\n  }\n  if (!isAllowedBillingRedirectProtocol(parsed)) {\n    rejectRedirect(input.field);\n  }\n  if (!allowed.includes(parsed.origin)) {\n    rejectRedirect(input.field);\n  }\n  return parsed.href;\n}\n\n/**\n * Self checkout / enroll redirects must be http(s) URLs on an allowlisted origin.\n * Relative URLs are rewritten onto the app origin; foreign hosts fail closed.\n */\nexport function assertAllowedBillingRedirectUrl(input: {\n  allowedOrigins: readonly string[];\n  field: \"successUrl\" | \"cancelUrl\" | \"redirectUrl\";\n  url: string | undefined;\n}): void {\n  resolveAllowedBillingRedirectUrl(input);\n}\n","/**\n * Same-origin helpers. Compare `URL.origin` only — never startsWith/substring.\n */\n\nexport function parseWebOrigin(\n  value: string | null | undefined\n): string | null {\n  if (value == null) {\n    return null;\n  }\n  const trimmed = value.trim();\n  if (!trimmed || trimmed === \"null\") {\n    return null;\n  }\n  try {\n    const url = new URL(trimmed);\n    if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n      return null;\n    }\n    return url.origin;\n  } catch {\n    return null;\n  }\n}\n\nexport function requestOrigin(request: Request): string | null {\n  return parseWebOrigin(new URL(request.url).origin);\n}\n\nexport function headerOrigin(request: Request): string | null {\n  return parseWebOrigin(request.headers.get(\"origin\"));\n}\n\nexport function originsMatch(\n  left: string | null,\n  right: string | null\n): boolean {\n  return left != null && right != null && left === right;\n}\n\nexport type AllowedRequestOriginOptions = {\n  /**\n   * Same-origin GET/HEAD often omit `Origin`. Cross-origin CORS GET still\n   * sends `Origin`. Do not enable this on mutating Data/Billing POST.\n   */\n  allowMissingOriginOnSafeMethods?: boolean;\n};\n\nexport function isAllowedRequestOrigin(\n  request: Request,\n  extraAllowed: readonly string[] = [],\n  options?: AllowedRequestOriginOptions\n): boolean {\n  const incoming = headerOrigin(request);\n  const target = requestOrigin(request);\n  if (incoming) {\n    if (originsMatch(incoming, target)) {\n      return true;\n    }\n    return extraAllowed.some((candidate) =>\n      originsMatch(incoming, parseWebOrigin(candidate))\n    );\n  }\n  if (!options?.allowMissingOriginOnSafeMethods) {\n    return false;\n  }\n  const method = request.method.toUpperCase();\n  if (method !== \"GET\" && method !== \"HEAD\") {\n    return false;\n  }\n  const referer = parseWebOrigin(request.headers.get(\"referer\"));\n  if (referer) {\n    if (originsMatch(referer, target)) {\n      return true;\n    }\n    return extraAllowed.some((candidate) =>\n      originsMatch(referer, parseWebOrigin(candidate))\n    );\n  }\n  return true;\n}\n","import { createHash, randomBytes } from \"node:crypto\";\n\nexport {\n  ATHENA_BILLING_RETURN_QUERY,\n  appendBillingReturnToken,\n} from \"./return-query.ts\";\n\nexport function hashBillingReturnNonce(token: string): string {\n  return createHash(\"sha256\").update(token, \"utf8\").digest(\"hex\");\n}\n\nexport function createBillingReturnNonce(): {\n  hash: string;\n  token: string;\n} {\n  const token = randomBytes(32).toString(\"base64url\");\n  return { hash: hashBillingReturnNonce(token), token };\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport { billingSubjectNotFound } from \"../../subject/errors.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingSubscription } from \"../../types.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport { executeLocalBillingSubscriptionCancel } from \"../local/execute/subscriptions.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\n\nconst GET_OWNED_SUBSCRIPTION_SQL = `\nSELECT *\nFROM billing.billing_subscriptions\nWHERE ($1::uuid IS NULL OR id = $1)\n  AND subject_kind = $2\n  AND subject_id = $3\n  AND ownership_status = 'resolved'\nORDER BY ingested_at DESC\nLIMIT 1\n`;\n\nconst CANCEL_OWNED_SUBSCRIPTION_SQL = `\nUPDATE billing.billing_subscriptions\nSET status = 'canceled',\n    canceled_at = now()\nWHERE id = $1\n  AND subject_kind = $2\n  AND subject_id = $3\n  AND ownership_status = 'resolved'\nRETURNING *\n`;\n\nfunction asSubscription(row: Record<string, unknown>): BillingSubscription {\n  return {\n    id: String(row.id ?? \"\"),\n    metadata: row.metadata ?? {},\n    provider: row.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n    providerCustomerId: String(row.provider_customer_id ?? \"\"),\n    providerSubscriptionId: String(row.provider_subscription_id ?? \"\"),\n    raw: row.raw ?? {},\n    status: String(row.status ?? \"active\"),\n  } as BillingSubscription;\n}\n\nconst CANONICAL_UUID =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nfunction optionalCanonicalUuid(value: string | undefined): string | null {\n  if (value == null || value.trim() === \"\") {\n    return null;\n  }\n  if (!CANONICAL_UUID.test(value.trim())) {\n    throw billingSubjectNotFound();\n  }\n  return value.trim();\n}\n\nexport async function getSelfSubscription(input: {\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n  subscriptionId?: string;\n}): Promise<BillingSubscription> {\n  const subscriptionId = optionalCanonicalUuid(input.subscriptionId);\n  const result = await input.sql.query(GET_OWNED_SUBSCRIPTION_SQL, [\n    subscriptionId,\n    \"user\",\n    input.principal.userId,\n  ]);\n  const row = result.rows[0];\n  if (!row) {\n    throw billingSubjectNotFound();\n  }\n  return asSubscription(row);\n}\n\nexport async function cancelSelfSubscription(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  principal: AthenaPrincipal;\n  registry?: BillingProviderRegistry;\n  sql: BillingSqlExecutor;\n  subscriptionId: string;\n  testMode?: boolean;\n}): Promise<BillingSubscription> {\n  const owned = await input.sql.query(GET_OWNED_SUBSCRIPTION_SQL, [\n    input.subscriptionId,\n    \"user\",\n    input.principal.userId,\n  ]);\n  const ownedRow = owned.rows[0];\n  if (!ownedRow) {\n    throw billingSubjectNotFound();\n  }\n  if (input.registry == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.subscription.cancel\",\n      reason: \"runtime_unavailable\",\n    });\n  }\n  const ownedSubscription = asSubscription(ownedRow);\n  await executeLocalBillingSubscriptionCancel({\n    authority: PROCESS_BILLING_INVOCATION,\n    configuredProviders: input.configuredProviders,\n    payload: {\n      customerId: ownedSubscription.providerCustomerId,\n      subscriptionId: ownedSubscription.providerSubscriptionId,\n    },\n    principal: selfDelegatedBillingPrincipal(input.principal, [\n      \"subscriptions.cancel\",\n    ]),\n    registry: input.registry,\n    testMode: input.testMode,\n  });\n  const result = await input.sql.query(CANCEL_OWNED_SUBSCRIPTION_SQL, [\n    input.subscriptionId,\n    \"user\",\n    input.principal.userId,\n  ]);\n  const row = result.rows[0];\n  if (!row) {\n    throw billingSubjectNotFound();\n  }\n  return asSubscription(row);\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport type {\n  BillingPlanChangeRecoveryCandidate,\n  BillingPlanChangeRepository,\n} from \"./plan-change-repository.ts\";\nimport type {\n  PlanChangeCoordinatorResult,\n} from \"./plan-change-coordinator.ts\";\n\nexport interface PlanChangeRecoveryDiagnostic {\n  event: \"plan_change_recovery\";\n  error?: string;\n  operationId: string;\n  outcome: \"attention_required\" | \"completed\" | \"failed\" | \"retry_required\" | \"claim_unavailable\";\n  retryCount: number;\n}\n\nexport interface PlanChangeRecoveryDependencies {\n  coordinator: (\n    operationId: string,\n  ) => Promise<Pick<PlanChangeCoordinatorResult, \"kind\">>;\n  countRecoverable?: () => Promise<number>;\n  diagnostics?: (event: PlanChangeRecoveryDiagnostic) => void;\n  repository: Pick<BillingPlanChangeRepository, \"claim\" | \"findExpired\">;\n  limit?: number;\n}\n\nexport interface PlanChangeRecoveryResult {\n  attentionRequired: number;\n  completed: number;\n  failed: number;\n  recoverableOperationBacklog?: number;\n  retried: number;\n  scanned: number;\n}\n\nfunction emit(\n  diagnostics: ((event: PlanChangeRecoveryDiagnostic) => void) | undefined,\n  candidate: BillingPlanChangeRecoveryCandidate,\n  outcome: PlanChangeRecoveryDiagnostic[\"outcome\"],\n  error?: string,\n): void {\n  diagnostics?.({\n    event: \"plan_change_recovery\",\n    ...(error ? { error } : {}),\n    operationId: candidate.id,\n    outcome,\n    retryCount: candidate.retryCount,\n  });\n}\n\nfunction safeRecoveryError(error: unknown): string {\n  const message =\n    error instanceof Error && error.message.trim().length > 0\n      ? error.message.trim()\n      : \"recovery coordinator failed\";\n  if (/access_|live_|test_|sk_|secret|password|token/i.test(message)) {\n    return \"recovery coordinator failed\";\n  }\n  return message.length > 240 ? `${message.slice(0, 237)}...` : message;\n}\n\nexport async function recoverExpiredPlanChanges(\n  input: PlanChangeRecoveryDependencies,\n): Promise<PlanChangeRecoveryResult> {\n  const candidates = await input.repository.findExpired({\n    limit: input.limit,\n  });\n  const result: PlanChangeRecoveryResult = {\n    attentionRequired: 0,\n    completed: 0,\n    failed: 0,\n    retried: 0,\n    scanned: candidates.length,\n  };\n\n  for (const candidate of candidates) {\n    const claimed = await input.repository.claim({\n      expectedFencingEpoch: candidate.expectedFencingEpoch,\n      id: candidate.id,\n      leaseToken: randomUUID(),\n    });\n    if (!claimed) {\n      emit(input.diagnostics, candidate, \"claim_unavailable\");\n      continue;\n    }\n    let outcome: Pick<PlanChangeCoordinatorResult, \"kind\">;\n    try {\n      outcome = await input.coordinator(candidate.id);\n    } catch (error) {\n      emit(input.diagnostics, candidate, \"retry_required\", safeRecoveryError(error));\n      result.retried += 1;\n      continue;\n    }\n    emit(input.diagnostics, candidate, outcome.kind);\n    if (outcome.kind === \"completed\") {\n      result.completed += 1;\n    } else if (outcome.kind === \"failed\") {\n      result.failed += 1;\n    } else if (outcome.kind === \"attention_required\") {\n      result.attentionRequired += 1;\n    } else {\n      result.retried += 1;\n    }\n  }\n  const recoverableOperationBacklog = input.countRecoverable\n    ? await input.countRecoverable()\n    : undefined;\n  return {\n    ...result,\n    ...(recoverableOperationBacklog === undefined\n      ? {}\n      : { recoverableOperationBacklog }),\n  };\n}\n\nexport const recoverPlanChanges = recoverExpiredPlanChanges;\n","import type { AthenaClientInternals } from \"../../runtime/client-internals.ts\";\nimport type { BillingProviderName } from \"../types.ts\";\n\nexport type AthenaBillingDiagnosticsPhase =\n  | \"unconfigured\"\n  | \"provider-registry\"\n  | \"materializing-connections\"\n  | \"attaching-ingress\"\n  | \"registering-schedulers\"\n  | \"ready\"\n  | \"failed\";\n\nexport interface AthenaBillingDiagnostics {\n  attentionRequiredOperations?: number;\n  billingSchemaReady?: boolean;\n  connectionCount: number;\n  connectionAffinitySource?: string;\n  eligibleConnectionCount?: number;\n  failure?: {\n    code?: string;\n    message: string;\n    stage: string;\n  };\n  ingressAdmissionControl?: \"disabled\" | \"enabled\" | \"unknown\";\n  lastRecoveryBatch?: {\n    attentionRequired: number;\n    completed: number;\n    failed: number;\n    retried: number;\n    scanned: number;\n  };\n  planChangeConfigured?: boolean;\n  planChangeSafety?: \"disabled\" | \"preview\" | \"stable\";\n  phase: AthenaBillingDiagnosticsPhase;\n  recoveryCoordinatorEnabled?: boolean;\n  recoverableOperationBacklog?: number;\n  readyAt?: number;\n  selectedConnectionId?: string | null;\n  startedAt?: number;\n  unfinishedRecoverableOperations?: number;\n  verifiedBillingContact?: \"available\" | \"unavailable\" | \"unknown\";\n  webhookIngressUrlTemplates?: readonly {\n    classic: string;\n    connectionId: string;\n    events: string;\n  }[];\n  webhookSecretLifecycle?: \"degraded\" | \"healthy\" | \"unknown\";\n}\n\nexport interface AthenaBillingInspectedConnection {\n  accountReference: string;\n  classicWebhookUrl?: string;\n  credentialReference: string;\n  eventsWebhookUrl?: string;\n  id: string;\n  provider: BillingProviderName;\n}\n\nexport function emptyBillingDiagnostics(): AthenaBillingDiagnostics {\n  return {\n    connectionCount: 0,\n    phase: \"unconfigured\",\n  };\n}\n\nexport function patchBillingDiagnostics(\n  internals: AthenaClientInternals | undefined,\n  patch: Partial<AthenaBillingDiagnostics>\n): void {\n  if (!internals) {\n    return;\n  }\n  const current = internals.billingDiagnostics ?? emptyBillingDiagnostics();\n  internals.billingDiagnostics = {\n    ...current,\n    ...patch,\n    failure: patch.failure ?? current.failure,\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\";\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 { 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 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","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 { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\n// Preflight lives in execute/invoke.ts: prepareBillingCommand (src/billing/safety).\nimport {\n  AthenaBillingCapabilityError,\n  isAthenaBillingCredentialError,\n} from \"../../errors.ts\";\nimport { billingWebhookUrlTemplate } from \"../../ingestion/urls.ts\";\nimport {\n  type BillingSelfEnrollmentSetting,\n  isBillingSelfEnrollmentEnabled,\n  isBillingSelfPlanChangeEnabled,\n} from \"../../self-enrollment.ts\";\nimport {\n  type BillingConnectionAffinityInspection,\n  billingConfiguredConnectionOwner,\n  configuredProvidersForBillingConnection,\n  inspectBillingConnectionAffinity,\n} from \"../../subject/connection-affinity.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type {\n  BillingCancelPaymentInput,\n  BillingCancelRefundInput,\n  BillingCancelSubscriptionInput,\n  BillingCreateCustomerInput,\n  BillingCreatePaymentInput,\n  BillingCreatePaymentLinkInput,\n  BillingCreateRefundInput,\n  BillingCreateSubscriptionInput,\n  BillingDeleteCustomerInput,\n  BillingDeletePaymentLinkInput,\n  BillingExecutionTarget,\n  BillingGetCustomerInput,\n  BillingGetInvoiceInput,\n  BillingGetPaymentInput,\n  BillingGetPaymentLinkInput,\n  BillingGetRefundInput,\n  BillingGetSubscriptionInput,\n  BillingListCustomersInput,\n  BillingListInvoicesInput,\n  BillingListPaymentLinksInput,\n  BillingListPaymentsInput,\n  BillingListRefundsInput,\n  BillingListSubscriptionsInput,\n  BillingPayment,\n  BillingUpdateCustomerInput,\n  BillingUpdatePaymentLinkInput,\n  BillingUpdateSubscriptionInput,\n} from \"../../types.ts\";\nimport {\n  type BillingAdminRuntimeOptions,\n  createBillingAdminPort,\n  executeAdminBillingOperation,\n} from \"../admin/execute.ts\";\nimport type { BillingAdminBootstrapRetryResult } from \"../admin/types.ts\";\nimport { isAdminBillingOperation } from \"../admin/operations.ts\";\nimport {\n  type BillingCredentialAuthority,\n  readBillingCredentialAuthority,\n} from \"../authority.ts\";\nimport type {\n  BillingCapabilities,\n  BillingOperation,\n  BillingOperationCapability,\n  BillingOperationSafety,\n  BillingPortName,\n} from \"../capabilities.ts\";\nimport {\n  availableBillingCredentialEnvironments,\n  type BillingCredentialKind,\n  resolveBillingCredential,\n} from \"../credentials.ts\";\nimport {\n  type AthenaBillingRuntimeDispatch,\n  invokeBillingRuntimePort,\n} from \"../dispatch.ts\";\nimport { resolveBillingEnvironment } from \"../environment.ts\";\nimport { projectAthenaBillingHealth } from \"../health.ts\";\nimport {\n  type BillingInvocationAuthority,\n  isProcessBillingInvocation,\n  PROCESS_BILLING_INVOCATION,\n  resolveBillingInvocationAuthority,\n  SESSION_BILLING_INVOCATION,\n} from \"../invocation-authority.ts\";\nimport {\n  denyBillingInvocation,\n  isProcessOwnedBillingPrincipal,\n  overlayCallerBillingCapabilities,\n  PROCESS_OWNED_BILLING_PRINCIPAL,\n} from \"../rights.ts\";\nimport {\n  createSelfBillingPort,\n  executeSelfBillingOperation,\n  isSelfBillingOperation,\n} from \"../self/runtime.ts\";\nimport type {\n  BillingCheckoutPort,\n  BillingCustomerPort,\n  BillingInvoicePort,\n  BillingPage,\n  BillingPaymentLinkPort,\n  BillingPaymentPort,\n  BillingPricePort,\n  BillingProductPort,\n  BillingRefundPort,\n  BillingRelationPort,\n  BillingSubscriptionPort,\n  BillingWebhookPort,\n} from \"../types.ts\";\nimport {\n  decideLocalBillingOperationCapability,\n  selectedModeAllowedForCapability,\n} from \"./capability-decision.ts\";\nimport type { MaterializedBillingConnection } from \"./connections/materialize.ts\";\nimport {\n  executeLocalBillingCustomerCreate,\n  executeLocalBillingCustomerDelete,\n  executeLocalBillingCustomerGet,\n  executeLocalBillingCustomerList,\n  executeLocalBillingCustomerUpdate,\n  executeLocalBillingInvoiceGet,\n  executeLocalBillingInvoiceList,\n  executeLocalBillingPaymentCancel,\n  executeLocalBillingPaymentCreate,\n  executeLocalBillingPaymentGet,\n  executeLocalBillingPaymentLinkCreate,\n  executeLocalBillingPaymentLinkDelete,\n  executeLocalBillingPaymentLinkGet,\n  executeLocalBillingPaymentLinkList,\n  executeLocalBillingPaymentLinkUpdate,\n  executeLocalBillingPaymentList,\n  executeLocalBillingPriceList,\n  executeLocalBillingProductList,\n  executeLocalBillingRefundCancel,\n  executeLocalBillingRefundCreate,\n  executeLocalBillingRefundGet,\n  executeLocalBillingRefundList,\n  executeLocalBillingRelationList,\n  executeLocalBillingSubscriptionCancel,\n  executeLocalBillingSubscriptionCreate,\n  executeLocalBillingSubscriptionGet,\n  executeLocalBillingSubscriptionList,\n  executeLocalBillingSubscriptionUpdate,\n  executeLocalBillingWebhookCreate,\n  executeLocalBillingWebhookDelete,\n  executeLocalBillingWebhookList,\n  executeLocalBillingWebhookUpdate,\n} from \"./execute/index.ts\";\nimport { createConfiguredProviderBinding } from \"./providers/binding.ts\";\nimport { resolveBillingExecutionTarget } from \"./providers/resolve-target.ts\";\nimport type { BillingProviderCapabilities } from \"./providers/types.ts\";\n\nconst BILLING_OPERATIONS: BillingOperation[] = [\n  \"payments.list\",\n  \"payments.create\",\n  \"payments.get\",\n  \"payments.cancel\",\n  \"customers.list\",\n  \"customers.create\",\n  \"customers.get\",\n  \"customers.update\",\n  \"customers.delete\",\n  \"refunds.list\",\n  \"refunds.create\",\n  \"refunds.get\",\n  \"refunds.cancel\",\n  \"paymentLinks.list\",\n  \"paymentLinks.create\",\n  \"paymentLinks.get\",\n  \"paymentLinks.update\",\n  \"paymentLinks.delete\",\n  \"subscriptions.list\",\n  \"subscriptions.create\",\n  \"subscriptions.get\",\n  \"subscriptions.update\",\n  \"subscriptions.cancel\",\n  \"invoices.list\",\n  \"invoices.get\",\n  \"webhooks.list\",\n  \"webhooks.create\",\n  \"webhooks.get\",\n  \"webhooks.update\",\n  \"webhooks.delete\",\n  \"webhooks.test\",\n  \"products.list\",\n  \"prices.list\",\n  \"relations.list\",\n  \"checkout.create\",\n  \"self.invoices.list\",\n  \"self.invoices.get\",\n  \"self.payments.list\",\n  \"self.payments.get\",\n  \"self.subscription.get\",\n  \"self.subscription.cancel\",\n  \"self.subscription.enroll\",\n  \"self.subscription.change\",\n  \"self.checkout.create\",\n  \"self.checkout.resume\",\n  \"self.customer.get\",\n  \"self.entitlements\",\n  \"admin.connections.materialize\",\n  \"admin.bootstrap.retry\",\n  \"admin.reconciliation.run\",\n  \"admin.reconciliation.retry\",\n  \"admin.webhooks.reconcile\",\n  \"admin.webhooks.verify\",\n  \"admin.webhooks.status\",\n  \"admin.ingestion.health\",\n  \"admin.conflicts.resolve\",\n  \"admin.conflicts.list\",\n];\n\nfunction sanitizeBillingInitializationMessage(error: unknown): string {\n  const raw =\n    error instanceof Error && error.message.trim().length > 0\n      ? error.message.trim()\n      : \"billing initialization failed\";\n  if (/access_|live_|test_|sk_|secret|password|token/i.test(raw)) {\n    return \"billing initialization failed\";\n  }\n  return raw.length > 240 ? `${raw.slice(0, 237)}...` : raw;\n}\n\nfunction bootstrapFailedBillingCapabilities(input: {\n  bootstrapRetryAvailable: boolean;\n  error: unknown;\n  sqlPresent: boolean;\n  target: BillingExecutionTarget;\n}): BillingCapabilities {\n  const operations = Object.fromEntries(\n    BILLING_OPERATIONS.map((operation) => [\n      operation,\n      { available: false, reason: \"bootstrap_failed\" as const },\n    ]),\n  ) as BillingCapabilities[\"operations\"];\n  if (input.bootstrapRetryAvailable) {\n    operations[\"admin.bootstrap.retry\"] = {\n      available: true,\n      authorized: true,\n      effectiveAvailable: true,\n      providerSupported: true,\n      runtimeAvailable: true,\n      safety: \"stable\",\n    };\n  }\n  const provider =\n    typeof input.target.provider === \"string\" ? input.target.provider : \"\";\n  return {\n    connected: false,\n    diagnostics: {\n      initializationFailed: true,\n      initializationMessage: sanitizeBillingInitializationMessage(input.error),\n      runtimeSource: \"local\",\n    },\n    initialized: false,\n    operations,\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      self: input.sqlPresent,\n      subscriptions: false,\n      webhooks: false,\n    },\n    provider,\n    runtime: \"local\",\n    target: {\n      kind: input.target.connectionId ? \"connection\" : \"configured\",\n      provider,\n      ...(typeof input.target.connectionId === \"string\"\n        ? { connectionId: input.target.connectionId }\n        : {}),\n    },\n  };\n}\n\nfunction omitUndefinedKeys<T>(value: T): T {\n  if (value === undefined || value === null || typeof value !== \"object\") {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map((entry) => omitUndefinedKeys(entry)) as T;\n  }\n  const out: Record<string, unknown> = {};\n  for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n    if (entry === undefined) {\n      continue;\n    }\n    out[key] = omitUndefinedKeys(entry);\n  }\n  return out as T;\n}\n\nfunction unavailable(\n  operation: BillingOperation,\n  reason: BillingOperationCapability[\"reason\"] = \"unsupported_operation\",\n): never {\n  throw new AthenaBillingCapabilityError({\n    operation,\n    reason: reason ?? \"unsupported_operation\",\n  });\n}\n\nfunction createUnsupportedPort<T extends object>(\n  methods: Record<keyof T, BillingOperation>,\n  principal: AthenaPrincipal,\n  authority: BillingInvocationAuthority,\n): T {\n  const port = {} as T;\n  for (const [method, operation] of Object.entries(methods) as [\n    keyof T,\n    BillingOperation,\n  ][]) {\n    port[method] = ((..._args: unknown[]) => {\n      const denied = denyBillingInvocation(principal, operation, authority);\n      if (denied) {\n        throw denied;\n      }\n      return unavailable(operation);\n    }) as T[keyof T];\n  }\n  return port;\n}\n\nfunction athenaInfrastructureOperationCapability(\n  sqlPresent: boolean,\n): BillingOperationCapability {\n  return sqlPresent\n    ? { available: true }\n    : { available: false, reason: \"runtime_unavailable\" };\n}\n\nfunction billingSqlSupportsTransactions(\n  sql: BillingSqlExecutor | undefined,\n): boolean {\n  return sql != null && typeof sql.transaction === \"function\";\n}\n\nfunction operationsFromProviderCapabilities(input: {\n  anyCredentialConfigured: boolean;\n  authority?: BillingCredentialAuthority;\n  configuredProfileId?: string | null;\n  credentialKind?: string;\n  missingReason?: BillingOperationCapability[\"reason\"];\n  ports: BillingCapabilities[\"ports\"];\n  provider: string;\n  providerOperations?: BillingProviderCapabilities[\"operations\"];\n  requestedProfileId?: string | null;\n  selectedCredentialConfigured?: boolean;\n  selectedEnvironment: \"test\" | \"live\";\n  selfEnrollmentEnabled?: BillingSelfEnrollmentSetting;\n  planChangeReady?: boolean;\n  sqlPresent?: boolean;\n  sqlTransactional?: boolean;\n  connectionAffinityReason?: BillingOperationCapability[\"reason\"];\n}): BillingCapabilities[\"operations\"] {\n  const operations: BillingCapabilities[\"operations\"] = {};\n  const selectedModeAllowed = selectedModeAllowedForCapability({\n    authority: input.authority,\n    selectedCredentialConfigured:\n      input.selectedCredentialConfigured ?? input.anyCredentialConfigured,\n    selectedEnvironment: input.selectedEnvironment,\n  });\n  const providerConfig = {\n    credentialKind: input.credentialKind,\n    profileId: input.configuredProfileId,\n  };\n  const decideBase = {\n    anyCredentialConfigured: input.anyCredentialConfigured,\n    authority: input.authority,\n    provider: input.provider,\n    providerConfig,\n    requestedProfileId: input.requestedProfileId,\n    selectedModeAllowed,\n  };\n  for (const operation of BILLING_OPERATIONS) {\n    if (\n      input.missingReason != null &&\n      !isSelfBillingOperation(operation) &&\n      !isAdminBillingOperation(operation)\n    ) {\n      operations[operation] = {\n        available: false,\n        reason: input.missingReason,\n      };\n      continue;\n    }\n    if (isAdminBillingOperation(operation)) {\n      operations[operation] = athenaInfrastructureOperationCapability(\n        input.sqlPresent === true,\n      );\n      continue;\n    }\n    if (isSelfBillingOperation(operation)) {\n      const sqlPresent = input.sqlPresent === true;\n      if (\n        operation === \"self.invoices.list\" ||\n        operation === \"self.invoices.get\" ||\n        operation === \"self.payments.list\" ||\n        operation === \"self.payments.get\" ||\n        operation === \"self.subscription.get\" ||\n        operation === \"self.customer.get\" ||\n        operation === \"self.entitlements\"\n      ) {\n        operations[operation] =\n          athenaInfrastructureOperationCapability(sqlPresent);\n      } else if (operation === \"self.subscription.cancel\") {\n        operations[operation] = decideLocalBillingOperationCapability({\n          ...decideBase,\n          operation,\n          portAvailable: sqlPresent && input.ports.subscriptions === true,\n          providerOperationEnabled:\n            input.providerOperations?.[\"subscriptions.cancel\"] === true,\n          unimplementedReason: sqlPresent\n            ? \"unsupported_operation\"\n            : \"runtime_unavailable\",\n        });\n      } else if (\n        operation === \"self.subscription.enroll\" ||\n        operation === \"self.subscription.change\"\n      ) {\n        const enrollEnabled = isBillingSelfEnrollmentEnabled(\n          input.selfEnrollmentEnabled,\n        );\n        const changeEnabled = isBillingSelfPlanChangeEnabled(\n          input.selfEnrollmentEnabled,\n        );\n        const capability = decideLocalBillingOperationCapability({\n          ...decideBase,\n          operation,\n          portAvailable:\n            (operation === \"self.subscription.change\"\n              ? changeEnabled\n              : enrollEnabled) &&\n            sqlPresent &&\n            input.ports.prices === true &&\n            input.ports.payments === true &&\n            input.ports.subscriptions === true &&\n            input.ports.customers === true,\n          providerOperationEnabled:\n            operation === \"self.subscription.change\"\n              ? changeEnabled &&\n              input.providerOperations?.[\"subscriptions.update\"] === true\n              : enrollEnabled &&\n              input.providerOperations?.[\"payments.create\"] === true &&\n              input.providerOperations?.[\"subscriptions.create\"] === true &&\n              input.providerOperations?.[\"customers.create\"] === true,\n          unimplementedReason: (\n            operation === \"self.subscription.change\"\n              ? changeEnabled\n              : enrollEnabled\n          )\n            ? sqlPresent\n              ? \"unsupported_operation\"\n              : \"runtime_unavailable\"\n            : \"self_enrollment_disabled\",\n        });\n        if (operation === \"self.subscription.change\") {\n          const safety: BillingOperationSafety =\n            capability.available &&\n              input.sqlPresent === true &&\n              input.planChangeReady === true\n              ? \"stable\"\n              : \"disabled\";\n          operations[operation] = { ...capability, safety };\n        } else {\n          operations[operation] = capability;\n        }\n      } else if (operation === \"self.checkout.resume\") {\n        operations[operation] = decideLocalBillingOperationCapability({\n          ...decideBase,\n          operation,\n          portAvailable: sqlPresent && input.ports.payments === true,\n          providerOperationEnabled:\n            input.providerOperations?.[\"payments.get\"] === true,\n          unimplementedReason: sqlPresent\n            ? \"unsupported_operation\"\n            : \"runtime_unavailable\",\n        });\n      } else if (operation === \"self.checkout.create\") {\n        const transactional = input.sqlTransactional === true;\n        operations[operation] = decideLocalBillingOperationCapability({\n          ...decideBase,\n          operation,\n          portAvailable:\n            sqlPresent &&\n            transactional &&\n            input.ports.prices === true &&\n            input.ports.payments === true,\n          providerOperationEnabled:\n            input.providerOperations?.[\"payments.create\"] === true,\n          unimplementedReason:\n            sqlPresent && transactional\n              ? input.ports.prices === true\n                ? \"unsupported_operation\"\n                : \"missing_catalog\"\n              : \"runtime_unavailable\",\n        });\n      } else {\n        const exhaustive: never = operation;\n        void exhaustive;\n      }\n      continue;\n    }\n    const portName = operation.split(\".\")[0] as BillingPortName;\n    operations[operation] = decideLocalBillingOperationCapability({\n      ...decideBase,\n      operation,\n      portAvailable: input.ports[portName] === true,\n      providerOperationEnabled: input.providerOperations?.[operation] === true,\n    });\n  }\n  overlaySelfConnectionAffinity(operations, input.connectionAffinityReason);\n  return operations;\n}\n\nfunction overlaySelfConnectionAffinity(\n  operations: BillingCapabilities[\"operations\"],\n  reason: BillingOperationCapability[\"reason\"] | undefined,\n): void {\n  if (reason == null) {\n    return;\n  }\n  for (const operation of [\n    \"self.checkout.create\",\n    \"self.subscription.enroll\",\n    \"self.subscription.change\",\n  ] as const) {\n    const current = operations[operation];\n    if (current?.available !== true) {\n      continue;\n    }\n    operations[operation] = { available: false, reason };\n  }\n}\n\nfunction connectionAffinityCapabilityReason(\n  inspection: BillingConnectionAffinityInspection,\n): BillingOperationCapability[\"reason\"] | undefined {\n  if (inspection.state === \"resolved\") {\n    return;\n  }\n  return inspection.state === \"ambiguous\"\n    ? \"provider_connection_ambiguous\"\n    : \"provider_connection_missing\";\n}\n\nexport interface CreateLocalBillingRuntimeInput\n  extends BillingAdminRuntimeOptions {\n  connectionState?: {\n    bootstrapRetry?: () => Promise<BillingAdminBootstrapRetryResult>;\n    connections: readonly MaterializedBillingConnection[];\n    initializationFailed?: boolean;\n    initializationMessage?: string;\n    initialized: boolean;\n    recoveryCoordinatorEnabled?: boolean;\n  };\n  invocation: BillingInvocationAuthority;\n  principal?: AthenaPrincipal;\n  ready?: Promise<void>;\n  waitForOperational?: () => Promise<void>;\n}\n\nexport function createLocalBillingRuntime(\n  input: CreateLocalBillingRuntimeInput,\n): AthenaBillingRuntimeDispatch {\n  const invocation = resolveBillingInvocationAuthority({\n    authority: input.invocation,\n  });\n  const principal =\n    input.principal ??\n    (isProcessBillingInvocation(invocation)\n      ? PROCESS_OWNED_BILLING_PRINCIPAL\n      : undefined);\n  if (principal == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"payments.list\",\n      reason: \"runtime_unavailable\",\n    });\n  }\n  const ready = input.ready ?? Promise.resolve();\n  const waitForOperational = input.waitForOperational ?? (() => ready);\n  const gate = <T>(run: () => Promise<T>): Promise<T> =>\n    waitForOperational().then(run);\n  const gatePort = <T extends object>(port: T): T => {\n    const wrapped = {} as T;\n    for (const [key, value] of Object.entries(port)) {\n      if (typeof value === \"function\") {\n        (wrapped as Record<string, unknown>)[key] = (...args: unknown[]) =>\n          gate(() =>\n            (value as (...inner: unknown[]) => Promise<unknown>)(...args),\n          );\n        continue;\n      }\n      if (\n        value !== null &&\n        typeof value === \"object\" &&\n        !Array.isArray(value)\n      ) {\n        (wrapped as Record<string, unknown>)[key] = gatePort(value as object);\n        continue;\n      }\n      (wrapped as Record<string, unknown>)[key] = value;\n    }\n    return wrapped;\n  };\n\n  const payments: BillingPaymentPort = {\n    cancel: (payload: BillingCancelPaymentInput): Promise<BillingPayment> =>\n      executeLocalBillingPaymentCancel({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    create: (payload: BillingCreatePaymentInput): Promise<BillingPayment> =>\n      executeLocalBillingPaymentCreate({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    get: (payload: BillingGetPaymentInput): Promise<BillingPayment> =>\n      executeLocalBillingPaymentGet({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    list: (\n      payload: BillingListPaymentsInput,\n    ): Promise<BillingPage<BillingPayment>> =>\n      executeLocalBillingPaymentList({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n  };\n\n  const customers: BillingCustomerPort = {\n    create: (payload: BillingCreateCustomerInput) =>\n      executeLocalBillingCustomerCreate({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    delete: (payload: BillingDeleteCustomerInput) =>\n      executeLocalBillingCustomerDelete({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    get: (payload: BillingGetCustomerInput) =>\n      executeLocalBillingCustomerGet({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    list: (payload: BillingListCustomersInput) =>\n      executeLocalBillingCustomerList({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    update: (payload: BillingUpdateCustomerInput) =>\n      executeLocalBillingCustomerUpdate({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n  };\n  const refunds: BillingRefundPort = {\n    cancel: (payload: BillingCancelRefundInput) =>\n      executeLocalBillingRefundCancel({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    create: (payload: BillingCreateRefundInput) =>\n      executeLocalBillingRefundCreate({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    get: (payload: BillingGetRefundInput) =>\n      executeLocalBillingRefundGet({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    list: (payload: BillingListRefundsInput) =>\n      executeLocalBillingRefundList({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n  };\n  const paymentLinks: BillingPaymentLinkPort = {\n    create: (payload: BillingCreatePaymentLinkInput) =>\n      executeLocalBillingPaymentLinkCreate({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    delete: (payload: BillingDeletePaymentLinkInput) =>\n      executeLocalBillingPaymentLinkDelete({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    get: (payload: BillingGetPaymentLinkInput) =>\n      executeLocalBillingPaymentLinkGet({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    list: (payload: BillingListPaymentLinksInput) =>\n      executeLocalBillingPaymentLinkList({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    update: (payload: BillingUpdatePaymentLinkInput) =>\n      executeLocalBillingPaymentLinkUpdate({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n  };\n  const subscriptions: BillingSubscriptionPort = {\n    cancel: (payload: BillingCancelSubscriptionInput) =>\n      executeLocalBillingSubscriptionCancel({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    create: (payload: BillingCreateSubscriptionInput) =>\n      executeLocalBillingSubscriptionCreate({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    get: (payload: BillingGetSubscriptionInput) =>\n      executeLocalBillingSubscriptionGet({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    list: (payload: BillingListSubscriptionsInput) =>\n      executeLocalBillingSubscriptionList({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    update: (payload: BillingUpdateSubscriptionInput) =>\n      executeLocalBillingSubscriptionUpdate({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n  };\n  const invoices: BillingInvoicePort = {\n    get: (payload: BillingGetInvoiceInput) =>\n      executeLocalBillingInvoiceGet({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    list: (payload: BillingListInvoicesInput) =>\n      executeLocalBillingInvoiceList({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n  };\n  const unsupportedWebhooks = createUnsupportedPort<BillingWebhookPort>(\n    {\n      create: \"webhooks.create\",\n      delete: \"webhooks.delete\",\n      get: \"webhooks.get\",\n      list: \"webhooks.list\",\n      test: \"webhooks.test\",\n      update: \"webhooks.update\",\n    },\n    principal,\n    invocation,\n  );\n  const webhooks: BillingWebhookPort = {\n    ...unsupportedWebhooks,\n    create: (payload) =>\n      executeLocalBillingWebhookCreate({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    delete: (payload) =>\n      executeLocalBillingWebhookDelete({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    list: (payload) =>\n      executeLocalBillingWebhookList({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n    update: (payload) =>\n      executeLocalBillingWebhookUpdate({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n  };\n  const products: BillingProductPort = {\n    list: (payload) =>\n      executeLocalBillingProductList({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n  };\n  const prices: BillingPricePort = {\n    list: (payload) =>\n      executeLocalBillingPriceList({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n  };\n  const relations: BillingRelationPort = {\n    list: (payload) =>\n      executeLocalBillingRelationList({\n        authority: invocation,\n        configuredProviders: input.configuredProviders,\n        payload,\n        principal,\n        registry: input.registry,\n        testMode: input.testMode,\n      }),\n  };\n  const checkout = createUnsupportedPort<BillingCheckoutPort>(\n    { create: \"checkout.create\" },\n    principal,\n    invocation,\n  );\n  const adminOptions = {\n    applicationId: input.applicationId,\n    appUrl: input.appUrl,\n    configuredProviders: input.configuredProviders,\n    customerImport: input.customerImport,\n    ingestion: input.ingestion,\n    observability: input.observability,\n    registry: input.registry,\n    sql: input.sql,\n    testMode: input.testMode,\n    bootstrapRetry: async () => {\n      const retry = input.connectionState?.bootstrapRetry;\n      if (retry == null) {\n        throw new AthenaBillingCapabilityError({\n          operation: \"admin.bootstrap.retry\",\n          reason: \"runtime_unavailable\",\n        });\n      }\n      return retry();\n    },\n  };\n  const admin = createBillingAdminPort({\n    authority: invocation,\n    options: adminOptions,\n    principal,\n  });\n  const gatedAdmin = gatePort(admin);\n  const controlPlaneAdmin = {\n    ...gatedAdmin,\n    bootstrap: admin.bootstrap,\n  };\n\n  return {\n    admin: controlPlaneAdmin,\n    checkout: gatePort(checkout),\n    // Shared src/billing/safety preflight is applied in execute/* create paths.\n    customers: gatePort(customers),\n    async execute(operation, payload, requestPrincipal) {\n      if (operation === \"admin.bootstrap.retry\") {\n        const denied = denyBillingInvocation(\n          requestPrincipal,\n          operation,\n          PROCESS_BILLING_INVOCATION\n        );\n        if (denied) {\n          throw denied;\n        }\n        return omitUndefinedKeys(await admin.bootstrap.retry());\n      }\n      if (operation === \"getCapabilities\") {\n        const capabilities = await this.getCapabilities(\n          (payload ?? {}) as BillingExecutionTarget,\n          requestPrincipal,\n        );\n        return omitUndefinedKeys(\n          overlayCallerBillingCapabilities(capabilities, requestPrincipal),\n        );\n      }\n      const sessionDenied = denyBillingInvocation(\n        requestPrincipal,\n        operation,\n        SESSION_BILLING_INVOCATION,\n      );\n      if (sessionDenied) {\n        throw sessionDenied;\n      }\n      await waitForOperational();\n      if (isSelfBillingOperation(operation)) {\n        return omitUndefinedKeys(\n          await executeSelfBillingOperation({\n            appUrl: input.appUrl,\n            applicationId: input.applicationId,\n            configuredProviders: input.configuredProviders,\n            operation,\n            payload,\n            principal: requestPrincipal,\n            registry: input.registry,\n            selfEnrollmentEnabled: input.selfEnrollmentEnabled,\n            sql: input.sql,\n            testMode: input.testMode,\n          }),\n        );\n      }\n      if (isAdminBillingOperation(operation)) {\n        return omitUndefinedKeys(\n          await executeAdminBillingOperation({\n            authority: PROCESS_BILLING_INVOCATION,\n            operation,\n            options: adminOptions,\n            payload,\n            principal: requestPrincipal,\n          }),\n        );\n      }\n      const scoped = createLocalBillingRuntime({\n        applicationId: input.applicationId,\n        appUrl: input.appUrl,\n        configuredProviders: input.configuredProviders,\n        connectionState: input.connectionState,\n        customerImport: input.customerImport,\n        ingestion: input.ingestion,\n        invocation: SESSION_BILLING_INVOCATION,\n        observability: input.observability,\n        principal: requestPrincipal,\n        ready,\n        registry: input.registry,\n        selfEnrollmentEnabled: input.selfEnrollmentEnabled,\n        sql: input.sql,\n        testMode: input.testMode,\n      });\n      return omitUndefinedKeys(\n        await invokeBillingRuntimePort(scoped, operation, payload),\n      );\n    },\n    async getCapabilities(\n      target: BillingExecutionTarget,\n      requestPrincipal?: AthenaPrincipal,\n    ): Promise<BillingCapabilities> {\n      if (input.connectionState?.initializationFailed) {\n        return bootstrapFailedBillingCapabilities({\n          error:\n            input.connectionState.initializationMessage ??\n            \"billing initialization failed\",\n          bootstrapRetryAvailable:\n            input.connectionState.bootstrapRetry != null &&\n            input.sql != null,\n          sqlPresent: input.sql != null,\n          target,\n        });\n      }\n      try {\n        await waitForOperational();\n      } catch (error) {\n        return bootstrapFailedBillingCapabilities({\n          error,\n          bootstrapRetryAvailable:\n            input.connectionState?.bootstrapRetry != null &&\n            input.sql != null,\n          sqlPresent: input.sql != null,\n          target,\n        });\n      }\n      const resolved = resolveBillingExecutionTarget({\n        configuredProviders: input.configuredProviders,\n        registry: input.registry,\n        target,\n      });\n      if (resolved.kind === \"connection\") {\n        const emptyPorts = {\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          self: input.sql != null,\n          subscriptions: false,\n          webhooks: false,\n        };\n        return {\n          connected: false,\n          connectionId: resolved.connectionId,\n          initialized: input.connectionState?.initialized !== false,\n          operations: operationsFromProviderCapabilities({\n            anyCredentialConfigured: false,\n            missingReason: \"missing_connection\",\n            ports: emptyPorts,\n            provider: resolved.provider ?? \"\",\n            selectedEnvironment: \"test\",\n            selfEnrollmentEnabled: input.selfEnrollmentEnabled,\n            planChangeReady: false,\n            sqlPresent: input.sql != null,\n            sqlTransactional: billingSqlSupportsTransactions(input.sql),\n          }),\n          ports: emptyPorts,\n          provider: resolved.provider ?? \"\",\n          runtime: \"local\",\n          target: {\n            connectionId: resolved.connectionId,\n            kind: \"connection\",\n            provider: resolved.provider ?? \"\",\n          },\n        };\n      }\n      const environment = resolveBillingEnvironment({\n        testMode: input.testMode,\n      });\n      const inspectPrincipal = requestPrincipal ?? principal;\n      const sessionSubject = isProcessOwnedBillingPrincipal(inspectPrincipal)\n        ? undefined\n        : (() => {\n          const subjectId = inspectPrincipal.userId?.trim();\n          return subjectId\n            ? { subjectId, subjectKind: \"user\" as const }\n            : undefined;\n        })();\n      let connectionInspection: Awaited<\n        ReturnType<typeof inspectBillingConnectionAffinity>\n      > | undefined;\n      if (input.sql != null) {\n        try {\n          connectionInspection = await inspectBillingConnectionAffinity({\n            configuredProviders: input.configuredProviders,\n            environment: environment.name,\n            provider: resolved.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n            sql: input.sql,\n            testMode: input.testMode,\n            ...(billingConfiguredConnectionOwner(input.applicationId) ?? {}),\n            ...(sessionSubject ?? {}),\n          });\n        } catch (error) {\n          return bootstrapFailedBillingCapabilities({\n            error,\n            bootstrapRetryAvailable:\n              input.connectionState?.bootstrapRetry != null &&\n              input.sql != null,\n            sqlPresent: input.sql != null,\n            target,\n          });\n        }\n      }\n      const configuredForCapabilities =\n        connectionInspection?.state === \"resolved\"\n          ? configuredProvidersForBillingConnection({\n            affinity: connectionInspection.connection,\n            configuredProviders: input.configuredProviders,\n            operation: \"self.checkout.create\",\n          })\n          : input.configuredProviders;\n      const binding = createConfiguredProviderBinding({\n        configuredProviders: configuredForCapabilities,\n        provider: resolved.provider,\n      });\n      const providerCapabilities =\n        await resolved.runtime.getCapabilities(binding);\n      const providerPorts = providerCapabilities.ports;\n      const ports = {\n        checkout: resolved.runtime.checkout != null && providerPorts.checkout,\n        customers:\n          resolved.runtime.customers != null && providerPorts.customers,\n        invoices: resolved.runtime.invoices != null && providerPorts.invoices,\n        paymentLinks:\n          resolved.runtime.paymentLinks != null && providerPorts.paymentLinks,\n        payments: resolved.runtime.payments != null && providerPorts.payments,\n        prices: resolved.runtime.prices != null && providerPorts.prices,\n        products: resolved.runtime.products != null && providerPorts.products,\n        relations:\n          resolved.runtime.relations != null && providerPorts.relations,\n        refunds: resolved.runtime.refunds != null && providerPorts.refunds,\n        self: input.sql != null,\n        subscriptions:\n          resolved.runtime.subscriptions !== null &&\n          providerPorts.subscriptions,\n        webhooks: resolved.runtime.webhooks != null && providerPorts.webhooks,\n      };\n      const availableEnvironments = availableBillingCredentialEnvironments(\n        binding.credentials,\n      );\n      const authority = readBillingCredentialAuthority(binding.providerConfig);\n      let credentialKind: BillingCredentialKind | undefined =\n        typeof binding.providerConfig.credentialKind === \"string\"\n          ? (binding.providerConfig.credentialKind as BillingCredentialKind)\n          : undefined;\n      try {\n        const selection = resolveBillingCredential({\n          binding,\n          provider: resolved.provider,\n          testMode: environment.testMode,\n        });\n        credentialKind = selection.credentialKind;\n      } catch (error) {\n        if (!isAthenaBillingCredentialError(error)) {\n          throw error;\n        }\n      }\n      const configuredProfileId = binding.providerConfig.profileId;\n      const operations = operationsFromProviderCapabilities({\n        anyCredentialConfigured: availableEnvironments.length > 0,\n        authority,\n        configuredProfileId:\n          typeof configuredProfileId === \"string\" ||\n            configuredProfileId === null\n            ? configuredProfileId\n            : undefined,\n        credentialKind,\n        ...(connectionInspection == null\n          ? {}\n          : {\n            connectionAffinityReason:\n              connectionAffinityCapabilityReason(connectionInspection),\n          }),\n        ports,\n        provider: resolved.provider,\n        providerOperations: providerCapabilities.operations,\n        requestedProfileId: target.profileId,\n        selectedCredentialConfigured:\n          binding.credentials[environment.name] != null,\n        selectedEnvironment: environment.name,\n        selfEnrollmentEnabled: input.selfEnrollmentEnabled,\n        planChangeReady:\n          input.connectionState?.recoveryCoordinatorEnabled === true,\n        sqlPresent: input.sql != null,\n        sqlTransactional: billingSqlSupportsTransactions(input.sql),\n      });\n      const inspectedConnection =\n        connectionInspection?.state === \"resolved\"\n          ? connectionInspection.connection\n          : undefined;\n      const materialized = input.connectionState?.connections.find(\n        (connection) => connection.provider === resolved.provider,\n      );\n      const publicConnectionId = inspectedConnection?.connectionId;\n      const webhookConfig =\n        input.ingestion?.webhooks != null &&\n          typeof input.ingestion.webhooks === \"object\"\n          ? input.ingestion.webhooks\n          : undefined;\n      const nextGenWebhooks = webhookConfig?.providers?.mollie?.nextGen;\n      const webhooksEnabled =\n        input.ingestion?.webhooks === true ||\n        (webhookConfig != null && webhookConfig.enabled !== false);\n      const planChangeCapability = operations[\"self.subscription.change\"];\n      const ingressAdmissionControl: \"disabled\" | \"enabled\" = webhooksEnabled\n        ? \"enabled\"\n        : \"disabled\";\n      const verifiedBillingContact: \"available\" | \"unknown\" = input.sql\n        ? \"available\"\n        : \"unknown\";\n      const webhookSecretLifecycle: \"healthy\" | \"unknown\" =\n        nextGenWebhooks?.enabled === false || !webhooksEnabled\n          ? \"unknown\"\n          : typeof webhookConfig?.secretMasterKey === \"string\"\n            ? \"healthy\"\n            : \"unknown\";\n      const webhookIngressUrlTemplates = (\n        input.connectionState?.connections ?? []\n      )\n        .filter(\n          (\n            connection,\n          ): connection is MaterializedBillingConnection & {\n            classicWebhookUrl: string;\n            eventsWebhookUrl: string;\n          } =>\n            connection.classicWebhookUrl != null &&\n            connection.eventsWebhookUrl != null,\n        )\n        .map((connection) => ({\n          classic: billingWebhookUrlTemplate(connection.classicWebhookUrl),\n          connectionId: connection.id,\n          events: billingWebhookUrlTemplate(connection.eventsWebhookUrl),\n        }));\n      const developmentDiagnostics =\n        process.env.NODE_ENV === \"production\"\n          ? undefined\n          : {\n            billingSchemaReady:\n              input.sql != null &&\n              input.connectionState?.initialized !== false,\n            connectionSource: \"application_config\",\n            connectionAffinitySource:\n              inspectedConnection?.source ??\n              (materialized?.id ? \"materialized\" : \"application_config\"),\n            eligibleConnectionCount:\n              connectionInspection?.state === \"resolved\"\n                ? 1\n                : connectionInspection?.state === \"ambiguous\"\n                  ? 2\n                  : input.sql == null\n                    ? (input.connectionState?.connections.length ?? 0)\n                    : 0,\n            ingressAdmissionControl,\n            planChangeConfigured: isBillingSelfPlanChangeEnabled(\n              input.selfEnrollmentEnabled,\n            ),\n            planChangeSafety: planChangeCapability?.safety ?? \"disabled\",\n            providerRegistrationSource: \"createClient\",\n            recoveryCoordinatorEnabled:\n              input.connectionState?.recoveryCoordinatorEnabled === true,\n            runtimeSource: \"local\",\n            selectedConnectionId: publicConnectionId ?? materialized?.id ?? null,\n            verifiedBillingContact,\n            ...(webhookIngressUrlTemplates.length > 0\n              ? { webhookIngressUrlTemplates }\n              : {}),\n            webhookSecretLifecycle,\n          };\n      return omitUndefinedKeys({\n        authority:\n          authority == null\n            ? undefined\n            : {\n              modes: authority.modes,\n              permissions: { ...authority.permissions },\n              scope: authority.scope,\n              source: authority.source,\n            },\n        connected: inspectedConnection != null,\n        ...(publicConnectionId == null\n          ? {}\n          : { connectionId: publicConnectionId }),\n        credentials: {\n          availableEnvironments,\n          configured: true,\n          credentialKind,\n          selectedEnvironment: environment.name,\n        },\n        ...(developmentDiagnostics === null\n          ? {}\n          : { diagnostics: developmentDiagnostics }),\n        environment: environment.name,\n        initialized: input.connectionState?.initialized !== false,\n        operations,\n        ports,\n        provider: resolved.provider,\n        runtime: \"local\",\n        target: {\n          kind: \"configured\",\n          provider: resolved.provider,\n          ...(publicConnectionId == null\n            ? {}\n            : { connectionId: publicConnectionId }),\n        },\n        testMode: environment.testMode,\n      });\n    },\n    async health() {\n      const ingestion = await admin.ingestion.health();\n      return projectAthenaBillingHealth(ingestion);\n    },\n    invoices: gatePort(invoices),\n    mode: \"local\",\n    paymentLinks: gatePort(paymentLinks),\n    payments: gatePort(payments),\n    prices: gatePort(prices),\n    products: gatePort(products),\n    relations: gatePort(relations),\n    refunds: gatePort(refunds),\n    self: gatePort(\n      createSelfBillingPort({\n        appUrl: input.appUrl,\n        applicationId: input.applicationId,\n        configuredProviders: input.configuredProviders,\n        principal,\n        registry: input.registry,\n        selfEnrollmentEnabled: input.selfEnrollmentEnabled,\n        sql: input.sql,\n        testMode: input.testMode,\n      }),\n    ),\n    subscriptions: gatePort(subscriptions),\n    webhooks: gatePort(webhooks),\n  };\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport {\n  ATHENA_BILLING_PROVIDER_MATERIALIZATION_UNSUPPORTED,\n  AthenaBillingCapabilityError,\n  AthenaBillingProviderError,\n} from \"../../errors.ts\";\nimport { runBillingCustomerImportWithPostgres } from \"../../import/assemble.ts\";\nimport {\n  createPostgresBillingImportBindingStore,\n  createPostgresBillingImportDocumentStore,\n  listActiveBillingImportConnections,\n  resolveBillingImportConnection,\n} from \"../../import/postgres.ts\";\nimport { reconcileBillingDocumentsForBinding } from \"../../import/project.ts\";\nimport {\n  type BillingImportRunReport,\n  DEFAULT_BILLING_IMPORT_POLICY,\n} from \"../../import/types.ts\";\nimport { runAutomaticBillingWebhookReconcileIfEnabled } from \"../../ingestion/automatic.ts\";\nimport { assertAthenaBillingIngestion } from \"../../ingestion/config.ts\";\nimport {\n  billingWebhookOperatorHealth,\n  createPostgresBillingWebhookIngressObservability,\n} from \"../../ingestion/observability/health.ts\";\nimport { billingWebhookOperationalStatus } from \"../../ingestion/observability/operational-status.ts\";\nimport {\n  billingWebhookConfigHash,\n  buildDesiredBillingWebhookState,\n} from \"../../ingestion/reconciliation/desired-state.ts\";\nimport { connectionIngestionHealthFromRegistrations } from \"../../ingestion/reconciliation/health.ts\";\nimport { createPostgresBillingWebhookRegistrationStore } from \"../../ingestion/reconciliation/repository.ts\";\nimport type {\n  AthenaBillingIngestionConfig,\n  NormalizedAthenaBillingIngestionConfig,\n} from \"../../ingestion/types.ts\";\nimport {\n  BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH,\n  BILLING_MOLLIE_EVENTS_WEBHOOK_PATH,\n  resolveBillingIngressEndpoints,\n} from \"../../ingestion/urls.ts\";\nimport { createPostgresBillingAuditWriter } from \"../../observability/audit.ts\";\nimport { normalizeAthenaBillingObservability } from \"../../observability/config.ts\";\nimport { billingEventDefinition } from \"../../observability/events.ts\";\nimport type { AthenaBillingAuditEntry } from \"../../observability/types.ts\";\nimport {\n  mintBillingAuditIdentity,\n  validateBillingAuditEntry,\n} from \"../../observability/validate.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport type { BillingSelfEnrollmentSetting } from \"../../self-enrollment.ts\";\nimport { mintManualBillingReconciliationContext } from \"../../reconciliation/context.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingOperation } from \"../capabilities.ts\";\nimport type { BillingInvocationAuthority } from \"../invocation-authority.ts\";\nimport { materializeConfiguredBillingConnections } from \"../local/connections/materialize.ts\";\nimport { createConnectionProviderExecutionContext } from \"../local/providers/connection-binding.ts\";\nimport { resolveMollieWebhookManagementCapability } from \"../local/providers/mollie/webhook-capability.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { denyBillingInvocation } from \"../rights.ts\";\nimport {\n  ADMIN_OP,\n  type AdminBillingOperation,\n  isAdminBillingOperation,\n} from \"./operations.ts\";\nimport type {\n  BillingAdminBootstrapRetryResult,\n  BillingAdminConflictResolveInput,\n  BillingAdminConflictResolveResult,\n  BillingAdminConnectionInput,\n  BillingAdminIngestionHealth,\n  BillingAdminPort,\n  BillingAdminWebhookReconcileInput,\n  BillingAdminWebhookStatus,\n  BillingWebhookDesiredActualRow,\n} from \"./types.ts\";\n\nexport interface BillingAdminRuntimeOptions {\n  applicationId?: string;\n  appUrl?: string | null;\n  configuredProviders?: BillingProviderConfigMap;\n  customerImport?: {\n    customers?: { allowUniqueEmailAutoBind?: boolean };\n  };\n  ingestion?: AthenaBillingIngestionConfig;\n  observability?: Parameters<typeof normalizeAthenaBillingObservability>[0];\n  registry: BillingProviderRegistry;\n  selfEnrollmentEnabled?: BillingSelfEnrollmentSetting;\n  sql?: BillingSqlExecutor;\n  testMode?: boolean;\n  bootstrapRetry?: () => Promise<BillingAdminBootstrapRetryResult>;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n  if (value != null && typeof value === \"object\" && !Array.isArray(value)) {\n    return value as Record<string, unknown>;\n  }\n  return {};\n}\n\nfunction requireSql(\n  sql: BillingSqlExecutor | undefined,\n  operation: AdminBillingOperation\n): BillingSqlExecutor {\n  if (!sql) {\n    throw new AthenaBillingCapabilityError({\n      operation,\n      reason: \"runtime_unavailable\",\n    });\n  }\n  return sql;\n}\n\nfunction actorFromPrincipal(\n  principal: AthenaPrincipal\n): AthenaBillingAuditEntry[\"actor\"] {\n  if (\n    principal.authenticated === true &&\n    typeof principal.userId === \"string\"\n  ) {\n    return { kind: \"user\", userId: principal.userId };\n  }\n  return { kind: \"system\" };\n}\n\nfunction requireString(record: Record<string, unknown>, key: string): string {\n  const value = record[key];\n  if (typeof value !== \"string\" || value.trim() === \"\") {\n    throw new Error(`ATHENA_BILLING_FIELD_REQUIRED:${key}`);\n  }\n  return value;\n}\n\nasync function latestImportRun(\n  sql: BillingSqlExecutor,\n  connectionId?: string\n): Promise<{ completedAt: string | null; status: string } | null> {\n  const result = connectionId\n    ? await sql.query(\n        `SELECT status, completed_at FROM billing.billing_import_runs\n\t\t\t\t WHERE connection_id = $1::uuid\n\t\t\t\t ORDER BY started_at DESC LIMIT 1`,\n        [connectionId]\n      )\n    : await sql.query(\n        `SELECT status, completed_at FROM billing.billing_import_runs\n\t\t\t\t ORDER BY started_at DESC LIMIT 1`\n      );\n  const row = result.rows[0];\n  if (!row) {\n    return null;\n  }\n  return {\n    completedAt:\n      row.completed_at instanceof Date\n        ? row.completed_at.toISOString()\n        : typeof row.completed_at === \"string\"\n          ? row.completed_at\n          : null,\n    status: String(row.status ?? \"\"),\n  };\n}\n\nasync function conflictCount(\n  sql: BillingSqlExecutor,\n  connectionId?: string\n): Promise<number> {\n  const result = connectionId\n    ? await sql.query(\n        `SELECT\n\t\t\t\t (SELECT count(*)::int FROM billing.billing_import_candidates\n\t\t\t\t  WHERE connection_id = $1::uuid\n\t\t\t\t    AND decision IN ('conflict', 'manual_review')\n\t\t\t\t    AND resolved_at IS NULL)\n\t\t\t\t +\n\t\t\t\t (SELECT count(*)::int FROM billing.billing_binding_conflicts\n\t\t\t\t  WHERE connection_id = $1::uuid AND status = 'open')\n\t\t\t\t AS n`,\n        [connectionId]\n      )\n    : await sql.query(\n        `SELECT\n\t\t\t\t (SELECT count(*)::int FROM billing.billing_import_candidates\n\t\t\t\t  WHERE decision IN ('conflict', 'manual_review')\n\t\t\t\t    AND resolved_at IS NULL)\n\t\t\t\t +\n\t\t\t\t (SELECT count(*)::int FROM billing.billing_binding_conflicts\n\t\t\t\t  WHERE status = 'open')\n\t\t\t\t AS n`\n      );\n  const n = result.rows[0]?.n;\n  return typeof n === \"number\" ? n : Number(n ?? 0);\n}\n\nasync function resolveConnectionId(\n  sql: BillingSqlExecutor,\n  input: BillingAdminConnectionInput | undefined,\n  provider: string\n): Promise<string> {\n  if (\n    typeof input?.connectionId === \"string\" &&\n    input.connectionId.length > 0\n  ) {\n    return input.connectionId;\n  }\n  const connections = await listActiveBillingImportConnections(sql, provider);\n  const first = connections[0];\n  if (!first) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"admin.ingestion.health\",\n      reason: \"missing_connection\",\n    });\n  }\n  return first.id;\n}\n\nfunction webhookRejectionCode(error: unknown): string | null {\n  if (error == null || typeof error !== \"object\" || Array.isArray(error)) {\n    return null;\n  }\n  if (!(\"code\" in error)) {\n    return null;\n  }\n  const code = error.code;\n  if (typeof code !== \"string\" || code.length === 0 || /secret/i.test(code)) {\n    return null;\n  }\n  return code;\n}\n\nasync function webhookStatus(input: {\n  applicationId: string;\n  appUrl?: string | null;\n  configuredProviders?: BillingProviderConfigMap;\n  connectionId: string;\n  ingestion: NormalizedAthenaBillingIngestionConfig;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n}): Promise<BillingAdminWebhookStatus> {\n  const webhooks = input.ingestion.webhooks;\n  const connection = await resolveBillingImportConnection(input.sql, {\n    connectionId: input.connectionId,\n    provider: \"mollie\",\n  });\n  const endpoints = resolveBillingIngressEndpoints({\n    appUrl: input.appUrl,\n    publicBaseUrl: webhooks.publicBaseUrl,\n    webhookIngressToken: connection.webhookIngressToken,\n  });\n  const execution = createConnectionProviderExecutionContext({\n    configuredProviders: input.configuredProviders,\n    connection,\n    operationScope: \"organization\",\n  });\n  const capability = resolveMollieWebhookManagementCapability(\n    execution.binding\n  );\n  const environment = connection.environment;\n  const desired = endpoints\n    ? buildDesiredBillingWebhookState({\n        applicationId: input.applicationId,\n        capability,\n        connectionId: input.connectionId,\n        endpoints,\n        environment,\n        management: webhooks.management,\n        provider: \"mollie\",\n        webhooks,\n      })\n    : undefined;\n  const store = createPostgresBillingWebhookRegistrationStore(input.sql);\n  const rows = await store.list(input.connectionId);\n  const classic = rows.find((row) => row.kind === \"classic\");\n  const nextGen = rows.find((row) => row.kind === \"next_gen\");\n  const health = connectionIngestionHealthFromRegistrations(rows);\n  const desiredClassicUrl = desired?.classic?.url ?? null;\n  const desiredEvents = desired?.nextGen?.eventTypes.length ?? 0;\n  const actualEvents = nextGen?.eventTypes.length ?? 0;\n  const desiredHash = desired?.nextGen\n    ? billingWebhookConfigHash({\n        eventTypes: desired.nextGen.eventTypes,\n        kind: \"next_gen\",\n        url: desired.nextGen.url,\n      })\n    : null;\n  const comparison: BillingWebhookDesiredActualRow[] = [\n    {\n      actual: health.classic,\n      desired: desired?.classic ? \"enabled\" : \"disabled\",\n      key: \"classic\",\n    },\n    {\n      actual: health.nextGen,\n      desired:\n        desired?.nextGen == null\n          ? \"disabled\"\n          : desired.nextGen.enabled\n            ? \"auto\"\n            : \"unsupported\",\n      key: \"nextGen\",\n    },\n    {\n      actual: classic?.url ?? nextGen?.url ?? null,\n      desired: desiredClassicUrl ?? desired?.nextGen?.url ?? null,\n      key: \"endpoint\",\n    },\n    {\n      actual: actualEvents,\n      desired: desiredEvents,\n      key: \"events\",\n    },\n    {\n      actual: nextGen?.configHash ?? classic?.configHash ?? null,\n      desired: desiredHash,\n      key: \"configHash\",\n    },\n    {\n      actual: \"authoritative_refetch\",\n      desired: \"authoritative_refetch\",\n      key: \"verification.classic\",\n    },\n    {\n      actual: \"signature_and_refetch\",\n      desired: \"signature_and_refetch\",\n      key: \"verification.nextGen\",\n    },\n    {\n      actual: desiredClassicUrl,\n      desired: desiredClassicUrl,\n      key: \"classic.url.configured\",\n    },\n    {\n      actual: classic?.url ?? null,\n      desired: desiredClassicUrl,\n      key: \"classic.url.registered\",\n    },\n    {\n      actual: desired?.nextGen?.url ?? null,\n      desired: desired?.nextGen?.url ?? null,\n      key: \"nextGen.url.configured\",\n    },\n    {\n      actual: nextGen?.url ?? null,\n      desired: desired?.nextGen?.url ?? null,\n      key: \"nextGen.url.registered\",\n    },\n    {\n      actual: classic?.lastDeliveryAt?.toISOString() ?? null,\n      desired: null,\n      key: \"classic.lastDeliveryAt\",\n    },\n    {\n      actual: nextGen?.lastDeliveryAt?.toISOString() ?? null,\n      desired: null,\n      key: \"nextGen.lastDeliveryAt\",\n    },\n    {\n      actual:\n        classic?.lastRejectionCode ??\n        nextGen?.lastRejectionCode ??\n        webhookRejectionCode(classic?.lastError ?? nextGen?.lastError),\n      desired: null,\n      key: \"lastRejectionCode\",\n    },\n    {\n      actual: Boolean(endpoints),\n      desired: Boolean(endpoints),\n      key: \"routeMounted\",\n    },\n    {\n      actual: classic?.lastAcceptedAt?.toISOString() ?? null,\n      desired: null,\n      key: \"classic.lastAcceptedAt\",\n    },\n    {\n      actual: classic?.lastIngressStage ?? null,\n      desired: null,\n      key: \"classic.lastIngressStage\",\n    },\n    {\n      actual: classic?.lastReconciliationOutcome ?? null,\n      desired: null,\n      key: \"classic.lastReconciliationOutcome\",\n    },\n    {\n      actual: nextGen?.lastAcceptedAt?.toISOString() ?? null,\n      desired: null,\n      key: \"nextGen.lastAcceptedAt\",\n    },\n    {\n      actual: nextGen?.lastIngressStage ?? null,\n      desired: null,\n      key: \"nextGen.lastIngressStage\",\n    },\n    {\n      actual: nextGen?.lastReconciliationOutcome ?? null,\n      desired: null,\n      key: \"nextGen.lastReconciliationOutcome\",\n    },\n  ];\n  const secretRow = nextGen ?? classic;\n  const signingSecretConfigured = Boolean(\n    webhooks.providers.mollie.nextGen.signingSecret\n  );\n  const previousSigningSecretsConfigured =\n    webhooks.providers.mollie.nextGen.previousSigningSecrets.length;\n  const deliveryRows = await createPostgresBillingWebhookIngressObservability(\n    input.sql\n  ).listDelivery(input.connectionId);\n  const classicDelivery = deliveryRows.find((row) => row.kind === \"classic\");\n  const nextGenDelivery = deliveryRows.find((row) => row.kind === \"next_gen\");\n  const mounted = endpoints ? (\"unknown\" as const) : false;\n  const channels = {\n    classic: billingWebhookOperationalStatus({\n      connectionId: input.connectionId,\n      endpoint: endpoints?.classicUrl ?? BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH,\n      kind: \"classic\",\n      mounted,\n      previousSigningSecretsConfigured: 0,\n      signingSecretConfigured: false,\n      ...(classic ? { registration: classic } : {}),\n      ...(classicDelivery ? { delivery: classicDelivery } : {}),\n    }),\n    nextGen: billingWebhookOperationalStatus({\n      connectionId: input.connectionId,\n      endpoint: endpoints?.eventsUrl ?? BILLING_MOLLIE_EVENTS_WEBHOOK_PATH,\n      kind: \"next_gen\",\n      mounted,\n      previousSigningSecretsConfigured,\n      signingSecretConfigured,\n      ...(nextGen ? { registration: nextGen } : {}),\n      ...(nextGenDelivery ? { delivery: nextGenDelivery } : {}),\n    }),\n  };\n  return {\n    channels,\n    classic: health.classic,\n    configSource: \"application_configuration\",\n    connectionId: input.connectionId,\n    delivery: billingWebhookOperatorHealth({\n      ...(classic ? { classic } : {}),\n      ...(endpoints ? { endpoints } : {}),\n      ...(nextGen ? { nextGen } : {}),\n      signingSecretConfigured,\n    }),\n    drift: health.drifted || desiredEvents !== actualEvents,\n    environment,\n    management: webhooks.management,\n    nextGen: health.nextGen,\n    provider: \"mollie\",\n    rows: comparison,\n    secret: {\n      configured: signingSecretConfigured,\n      ...(typeof secretRow?.secretFingerprint === \"string\"\n        ? { fingerprint: secretRow.secretFingerprint }\n        : {}),\n      ...(typeof secretRow?.secretVersion === \"number\"\n        ? { version: secretRow.secretVersion }\n        : {}),\n    },\n    strategy: webhooks.providers.mollie.strategy,\n  };\n}\n\nasync function runReconciliation(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  connectionId?: string;\n  customerImport?: BillingAdminRuntimeOptions[\"customerImport\"];\n  dryRun?: boolean;\n  observability?: BillingAdminRuntimeOptions[\"observability\"];\n  provider?: string;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n}): Promise<BillingImportRunReport> {\n  return runBillingCustomerImportWithPostgres({\n    configuredProviders: input.configuredProviders,\n    connectionId: input.connectionId,\n    dryRun: input.dryRun === true,\n    observability: normalizeAthenaBillingObservability(input.observability),\n    policy: {\n      ...DEFAULT_BILLING_IMPORT_POLICY,\n      allowUniqueEmailAutoBind:\n        input.customerImport?.customers?.allowUniqueEmailAutoBind === true,\n    },\n    provider: input.provider,\n    sql: input.sql,\n    testMode: input.testMode,\n    trigger: \"manual\",\n  });\n}\n\nasync function resolveConflict(input: {\n  payload: BillingAdminConflictResolveInput;\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n}): Promise<BillingAdminConflictResolveResult> {\n  const context = mintManualBillingReconciliationContext({\n    connectionId: input.payload.connectionId,\n    provider: \"mollie\",\n    trigger: \"manual\",\n  });\n  const bindings = createPostgresBillingImportBindingStore(input.sql);\n  const existing = await bindings.findByLocator({\n    connectionId: input.payload.connectionId,\n    providerCustomerId: input.payload.providerCustomerId,\n  });\n  if (input.payload.action === \"keep\") {\n    return {\n      action: \"keep\",\n      bindingId: existing?.id,\n      traceId: context.traceId,\n    };\n  }\n  const subject = input.payload.subject;\n  if (!subject) {\n    throw new Error(\"ATHENA_BILLING_FIELD_REQUIRED:subject\");\n  }\n  if (input.payload.action === \"reassign\") {\n    if (input.payload.confirmReassign !== true) {\n      throw new Error(\"ATHENA_BILLING_FIELD_REQUIRED:confirmReassign\");\n    }\n    if (existing) {\n      await input.sql.query(\n        `UPDATE billing.billing_subject_bindings\n\t\t\t\t SET status = 'revoked', is_primary = false, updated_at = now()\n\t\t\t\t WHERE id = $1::uuid`,\n        [existing.id]\n      );\n      const audit = createPostgresBillingAuditWriter(input.sql);\n      const ir = billingEventDefinition(\"billing.subject.binding.revoked\");\n      const entry: AthenaBillingAuditEntry = {\n        actor: actorFromPrincipal(input.principal),\n        causationId: context.causationId,\n        connectionId: input.payload.connectionId,\n        correlationId: context.correlationId,\n        event: \"billing.subject.binding.revoked\",\n        ...mintBillingAuditIdentity(),\n        outcome: \"success\",\n        previous: existing,\n        provider: \"mollie\",\n        providerSubject: {\n          id: input.payload.providerCustomerId,\n          kind: \"customer\",\n        },\n        result: { action: \"reassign\" },\n        subject,\n        traceId: context.traceId,\n      };\n      validateBillingAuditEntry(entry, ir);\n      await audit.write(entry);\n    }\n  }\n  const created = await bindings.insertActive({\n    connectionId: input.payload.connectionId,\n    providerCustomerId: input.payload.providerCustomerId,\n    source: \"reconciled\",\n    subject,\n  });\n  await reconcileBillingDocumentsForBinding(\n    createPostgresBillingImportDocumentStore(input.sql),\n    {\n      connectionId: input.payload.connectionId,\n      providerCustomerId: input.payload.providerCustomerId,\n      subject,\n    }\n  );\n  await input.sql.query(\n    `UPDATE billing.billing_import_candidates\n\t\t SET decision = 'bind', subject_kind = $3, subject_id = $4, resolved_at = now()\n\t\t WHERE connection_id = $1::uuid\n\t\t   AND provider_customer_id = $2\n\t\t   AND resolved_at IS NULL`,\n    [\n      input.payload.connectionId,\n      input.payload.providerCustomerId,\n      subject.kind,\n      subject.id,\n    ]\n  );\n  const audit = createPostgresBillingAuditWriter(input.sql);\n  const ir = billingEventDefinition(\"billing.subject.binding.created\");\n  const entry: AthenaBillingAuditEntry = {\n    actor: actorFromPrincipal(input.principal),\n    causationId: context.causationId,\n    connectionId: input.payload.connectionId,\n    correlationId: context.correlationId,\n    event: \"billing.subject.binding.created\",\n    ...mintBillingAuditIdentity(),\n    outcome: \"success\",\n    provider: \"mollie\",\n    providerSubject: {\n      id: input.payload.providerCustomerId,\n      kind: \"customer\",\n    },\n    result: { action: input.payload.action, bindingId: created.id },\n    subject,\n    traceId: context.traceId,\n  };\n  validateBillingAuditEntry(entry, ir);\n  await audit.write(entry);\n  return {\n    action: input.payload.action,\n    bindingId: created.id,\n    traceId: context.traceId,\n  };\n}\n\nexport async function executeAdminBillingOperation(input: {\n  authority: BillingInvocationAuthority;\n  operation: string;\n  options: BillingAdminRuntimeOptions;\n  payload: unknown;\n  principal: AthenaPrincipal;\n}): Promise<unknown> {\n  if (!isAdminBillingOperation(input.operation)) {\n    throw new AthenaBillingCapabilityError({\n      operation: input.operation,\n      reason: \"unsupported_operation\",\n    });\n  }\n  const operation = input.operation;\n  const denied = denyBillingInvocation(\n    input.principal,\n    operation as BillingOperation,\n    input.authority\n  );\n  if (denied) {\n    throw denied;\n  }\n  prepareBillingCommand({\n    operation: operation as BillingOperation,\n    payload: asRecord(input.payload),\n    testMode: input.options.testMode,\n  });\n  if (operation === \"admin.bootstrap.retry\") {\n    if (input.options.bootstrapRetry == null) {\n      throw new AthenaBillingCapabilityError({\n        operation,\n        reason: \"runtime_unavailable\",\n      });\n    }\n    return input.options.bootstrapRetry();\n  }\n  const sql = requireSql(input.options.sql, operation);\n  const applicationId = input.options.applicationId?.trim();\n  if (applicationId == null || applicationId.length === 0) {\n    throw new AthenaBillingCapabilityError({\n      operation,\n      reason: \"runtime_unavailable\",\n    });\n  }\n  const payload = asRecord(input.payload);\n  const ingestion = assertAthenaBillingIngestion({\n    appUrl: input.options.appUrl,\n    ingestion: input.options.ingestion,\n    live: input.options.testMode === false,\n  });\n  if (operation === \"admin.connections.materialize\") {\n    const provider =\n      typeof payload.provider === \"string\" && payload.provider.trim().length > 0\n        ? payload.provider.trim().toLowerCase()\n        : undefined;\n    if (provider != null && !input.options.registry.has(provider)) {\n      throw new AthenaBillingProviderError({\n        code: ATHENA_BILLING_PROVIDER_MATERIALIZATION_UNSUPPORTED,\n        message: `Billing provider \"${provider}\" is not registered for connection materialization.`,\n      });\n    }\n    return materializeConfiguredBillingConnections({\n      applicationId,\n      appUrl: input.options.appUrl,\n      configuredProviders: input.options.configuredProviders,\n      ...(provider == null ? {} : { provider }),\n      publicBaseUrl: ingestion.webhooks.publicBaseUrl,\n      sql,\n      testMode: input.options.testMode,\n    });\n  }\n  if (operation === \"admin.reconciliation.run\") {\n    return runReconciliation({\n      configuredProviders: input.options.configuredProviders,\n      connectionId:\n        typeof payload.connectionId === \"string\"\n          ? payload.connectionId\n          : undefined,\n      customerImport: input.options.customerImport,\n      dryRun: payload.dryRun === true,\n      observability: input.options.observability,\n      provider:\n        typeof payload.provider === \"string\" ? payload.provider : undefined,\n      sql,\n      testMode: input.options.testMode,\n    });\n  }\n  if (operation === \"admin.reconciliation.retry\") {\n    const runId = requireString(payload, \"runId\");\n    const run = await sql.query(\n      \"SELECT connection_id, provider FROM billing.billing_import_runs WHERE id = $1::uuid\",\n      [runId]\n    );\n    const row = run.rows[0];\n    if (!row) {\n      throw new AthenaBillingCapabilityError({\n        operation,\n        reason: \"unsupported_operation\",\n      });\n    }\n    return runReconciliation({\n      configuredProviders: input.options.configuredProviders,\n      connectionId: String(row.connection_id),\n      customerImport: input.options.customerImport,\n      observability: input.options.observability,\n      provider: String(row.provider ?? \"mollie\"),\n      sql,\n      testMode: input.options.testMode,\n    });\n  }\n  if (operation === \"admin.webhooks.reconcile\") {\n    await runAutomaticBillingWebhookReconcileIfEnabled({\n      applicationId,\n      appUrl: input.options.appUrl,\n      configuredProviders: input.options.configuredProviders,\n      observability: normalizeAthenaBillingObservability(\n        input.options.observability\n      ),\n      registry: input.options.registry,\n      sql,\n      testMode: input.options.testMode,\n      trigger: \"manual\",\n      webhooks: ingestion.webhooks,\n    });\n    const connectionId = await resolveConnectionId(\n      sql,\n      payload as BillingAdminWebhookReconcileInput,\n      \"mollie\"\n    );\n    return webhookStatus({\n      applicationId,\n      appUrl: input.options.appUrl,\n      configuredProviders: input.options.configuredProviders,\n      connectionId,\n      ingestion,\n      sql,\n      testMode: input.options.testMode,\n    });\n  }\n  if (\n    operation === \"admin.webhooks.status\" ||\n    operation === \"admin.webhooks.verify\"\n  ) {\n    const connectionId = await resolveConnectionId(\n      sql,\n      payload as BillingAdminConnectionInput,\n      \"mollie\"\n    );\n    if (operation === \"admin.webhooks.verify\") {\n      const store = createPostgresBillingWebhookRegistrationStore(sql);\n      const listed = await store.list(connectionId);\n      for (const row of listed) {\n        await store.upsert({\n          ...row,\n          lastVerifiedAt: new Date(),\n        });\n      }\n    }\n    return webhookStatus({\n      applicationId,\n      appUrl: input.options.appUrl,\n      configuredProviders: input.options.configuredProviders,\n      connectionId,\n      ingestion,\n      sql,\n      testMode: input.options.testMode,\n    });\n  }\n  if (operation === \"admin.ingestion.health\") {\n    const connectionId =\n      typeof payload.connectionId === \"string\"\n        ? payload.connectionId\n        : (await listActiveBillingImportConnections(sql, \"mollie\"))[0]?.id;\n    const warnings: string[] = [];\n    if (!connectionId) {\n      return {\n        classic: \"unsupported\",\n        conflicts: 0,\n        connectionStatus: \"missing\",\n        drift: false,\n        enabled: false,\n        healthy: false,\n        nextGen: \"unsupported\",\n        provider: \"mollie\",\n        reconciliation: \"unknown\",\n        warnings: [\"No billing provider connection\"],\n        webhookIngestion: \"unsupported\",\n      } satisfies BillingAdminIngestionHealth;\n    }\n    const connection = await resolveBillingImportConnection(sql, {\n      connectionId,\n    });\n    const status = await webhookStatus({\n      applicationId,\n      appUrl: input.options.appUrl,\n      configuredProviders: input.options.configuredProviders,\n      connectionId,\n      ingestion,\n      sql,\n      testMode: input.options.testMode,\n    });\n    const conflicts = await conflictCount(sql, connectionId);\n    const lastRun = await latestImportRun(sql, connectionId);\n    if (status.drift) {\n      warnings.push(\"Webhook config drift\");\n    }\n    if (\n      status.channels.classic.registration.health === \"unhealthy\" ||\n      status.channels.nextGen.registration.health === \"unhealthy\"\n    ) {\n      warnings.push(\"Webhook registration is not operationally healthy\");\n    }\n    if (conflicts > 0) {\n      warnings.push(`${conflicts} unresolved identity conflicts`);\n    }\n    if (lastRun?.status === \"checkpointed\") {\n      warnings.push(\"Reconciliation behind\");\n    }\n    const webhookIngestion =\n      status.classic === \"error\" || status.nextGen === \"error\"\n        ? \"error\"\n        : status.drift\n          ? \"degraded\"\n          : status.classic;\n    const recent =\n      await createPostgresBillingWebhookIngressObservability(\n        sql\n      ).aggregateRecent(connectionId);\n    const healthy =\n      warnings.length === 0 &&\n      recent.rejected === 0 &&\n      recent.reconciliationFailures === 0;\n    return {\n      classic: status.classic,\n      conflicts,\n      connectionId,\n      connectionStatus: connection.status,\n      drift: status.drift,\n      enabled: ingestion.webhooks.enabled,\n      healthy,\n      ...(status.rows.find((row) => row.key === \"endpoint\") ? {} : {}),\n      lastReconcileAt: lastRun?.completedAt ?? undefined,\n      nextGen: status.nextGen,\n      provider: connection.provider,\n      recent: { ...recent, window: \"24h\" },\n      reconciliation:\n        lastRun?.status === \"checkpointed\"\n          ? \"behind\"\n          : lastRun\n            ? \"caught_up\"\n            : \"unknown\",\n      routes: {\n        classic: {\n          expected: BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH,\n          mounted: status.channels.classic.route.mounted,\n        },\n        nextGen: {\n          expected: BILLING_MOLLIE_EVENTS_WEBHOOK_PATH,\n          mounted: status.channels.nextGen.route.mounted,\n        },\n      },\n      warnings,\n      webhookIngestion,\n    } satisfies BillingAdminIngestionHealth;\n  }\n  if (operation === \"admin.conflicts.list\") {\n    const connectionId =\n      typeof payload.connectionId === \"string\"\n        ? payload.connectionId\n        : undefined;\n    const result = connectionId\n      ? await sql.query(\n          `SELECT id::text AS id, subject_kind, subject_id, connection_id::text AS connection_id,\n\t\t\t\t        candidate_provider_customer_id, reason, confidence, status,\n\t\t\t\t        last_observed_at, observation_count\n\t\t\t\t FROM billing.billing_binding_conflicts\n\t\t\t\t WHERE connection_id = $1::uuid AND status = 'open'\n\t\t\t\t ORDER BY last_observed_at DESC, created_at DESC\n\t\t\t\t LIMIT 100`,\n          [connectionId]\n        )\n      : await sql.query(\n          `SELECT id::text AS id, subject_kind, subject_id, connection_id::text AS connection_id,\n\t\t\t\t        candidate_provider_customer_id, reason, confidence, status,\n\t\t\t\t        last_observed_at, observation_count\n\t\t\t\t FROM billing.billing_binding_conflicts\n\t\t\t\t WHERE status = 'open'\n\t\t\t\t ORDER BY last_observed_at DESC, created_at DESC\n\t\t\t\t LIMIT 100`\n        );\n    return {\n      items: result.rows.map((row) => ({\n        candidateProviderCustomerId: String(\n          row.candidate_provider_customer_id ?? \"\"\n        ),\n        confidence: String(row.confidence ?? \"none\"),\n        connectionId: String(row.connection_id ?? \"\"),\n        id: String(row.id ?? \"\"),\n        lastObservedAt:\n          row.last_observed_at instanceof Date\n            ? row.last_observed_at.toISOString()\n            : typeof row.last_observed_at === \"string\"\n              ? row.last_observed_at\n              : undefined,\n        observationCount:\n          typeof row.observation_count === \"number\"\n            ? row.observation_count\n            : Number(row.observation_count ?? 1),\n        reason: String(row.reason ?? \"manual_review_required\"),\n        status: String(row.status ?? \"open\"),\n        subjectId:\n          typeof row.subject_id === \"string\" ? row.subject_id : undefined,\n        subjectKind:\n          row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n      })),\n    };\n  }\n  if (operation === \"admin.conflicts.resolve\") {\n    const action = payload.action;\n    if (action !== \"bind\" && action !== \"keep\" && action !== \"reassign\") {\n      throw new Error(\"ATHENA_BILLING_FIELD_REQUIRED:action\");\n    }\n    const subjectRaw = payload.subject;\n    const subject =\n      subjectRaw != null &&\n      typeof subjectRaw === \"object\" &&\n      !Array.isArray(subjectRaw)\n        ? {\n            id: requireString(subjectRaw as Record<string, unknown>, \"id\"),\n            kind:\n              (subjectRaw as Record<string, unknown>).kind === \"organization\"\n                ? (\"organization\" as const)\n                : (\"user\" as const),\n          }\n        : undefined;\n    return resolveConflict({\n      payload: {\n        action,\n        confirmReassign: payload.confirmReassign === true,\n        connectionId: requireString(payload, \"connectionId\"),\n        providerCustomerId: requireString(payload, \"providerCustomerId\"),\n        ...(subject ? { subject } : {}),\n      },\n      principal: input.principal,\n      sql,\n    });\n  }\n  throw new AthenaBillingCapabilityError({\n    operation,\n    reason: \"unsupported_operation\",\n  });\n}\n\nexport function createBillingAdminPort(input: {\n  authority: BillingInvocationAuthority;\n  options: BillingAdminRuntimeOptions;\n  principal: AthenaPrincipal;\n}): BillingAdminPort {\n  const bind = (key: keyof typeof ADMIN_OP) => (payload: unknown) =>\n    executeAdminBillingOperation({\n      authority: input.authority,\n      operation: ADMIN_OP[key],\n      options: input.options,\n      payload,\n      principal: input.principal,\n    });\n  return {\n    bootstrap: {\n      retry: bind(\"bootstrapRetry\") as BillingAdminPort[\"bootstrap\"][\"retry\"],\n    },\n    conflicts: {\n      list: bind(\"conflictsList\") as BillingAdminPort[\"conflicts\"][\"list\"],\n      resolve: bind(\n        \"conflictsResolve\"\n      ) as BillingAdminPort[\"conflicts\"][\"resolve\"],\n    },\n    connections: {\n      materialize: bind(\n        \"connectionsMaterialize\"\n      ) as BillingAdminPort[\"connections\"][\"materialize\"],\n    },\n    ingestion: {\n      health: bind(\n        \"ingestionHealth\"\n      ) as BillingAdminPort[\"ingestion\"][\"health\"],\n    },\n    reconciliation: {\n      retry: bind(\n        \"reconciliationRetry\"\n      ) as BillingAdminPort[\"reconciliation\"][\"retry\"],\n      run: bind(\n        \"reconciliationRun\"\n      ) as BillingAdminPort[\"reconciliation\"][\"run\"],\n    },\n    webhooks: {\n      reconcile: bind(\n        \"webhooksReconcile\"\n      ) as BillingAdminPort[\"webhooks\"][\"reconcile\"],\n      status: bind(\"webhooksStatus\") as BillingAdminPort[\"webhooks\"][\"status\"],\n      verify: bind(\"webhooksVerify\") as BillingAdminPort[\"webhooks\"][\"verify\"],\n    },\n  };\n}\n","import type { BillingWebhookRegistrationRecord } from \"../reconciliation/types.ts\";\nimport type { BillingWebhookKind } from \"../types.ts\";\nimport type { BillingWebhookDeliveryHealthRow } from \"./delivery-health.ts\";\nimport type { BillingWebhookReconciliationOutcome } from \"./stages.ts\";\n\nexport type BillingWebhookRouteMountState = true | false | \"unknown\";\n\nexport type BillingWebhookOperationalHealth =\n  | \"healthy\"\n  | \"degraded\"\n  | \"unhealthy\";\n\nexport interface BillingWebhookOperationalStatus {\n  connectionId: string;\n  delivery: {\n    lastAcceptedAt?: Date;\n    lastReceivedAt?: Date;\n    lastRejectedAt?: Date;\n    lastRejectionCode?: string;\n    lastRejectionMessage?: string;\n  };\n  kind: BillingWebhookKind;\n  provider: \"mollie\";\n  reconciliation: {\n    lastCompletedAt?: Date;\n    lastError?: string;\n    lastFailedAt?: Date;\n    lastOutcome?: BillingWebhookReconciliationOutcome;\n    lastStartedAt?: Date;\n  };\n  registration: {\n    health: BillingWebhookOperationalHealth;\n    lastReconciledAt?: Date;\n    lastVerifiedAt?: Date;\n    providerWebhookId?: string;\n    status: \"pending\" | \"active\" | \"error\" | \"disabled\";\n  };\n  route: {\n    endpoint: string;\n    mounted: BillingWebhookRouteMountState;\n  };\n  verification: {\n    previousSigningSecretsConfigured: number;\n    signingSecretConfigured: boolean;\n    strategy: \"authoritative_refetch\" | \"signature_and_refetch\";\n  };\n}\n\nfunction registrationFailureCode(\n  record: BillingWebhookRegistrationRecord | undefined\n): string | undefined {\n  if (record == null) {\n    return;\n  }\n  if (\n    typeof record.lastRejectionCode === \"string\" &&\n    record.lastRejectionCode.length > 0\n  ) {\n    return record.lastRejectionCode;\n  }\n  const error = record.lastError;\n  if (typeof error === \"string\" && error.length > 0) {\n    return error;\n  }\n  if (\n    error != null &&\n    typeof error === \"object\" &&\n    !Array.isArray(error) &&\n    \"code\" in error &&\n    typeof error.code === \"string\"\n  ) {\n    return error.code;\n  }\n}\n\nexport function billingWebhookRegistrationOperationalHealth(\n  record: BillingWebhookRegistrationRecord | undefined\n): BillingWebhookOperationalHealth {\n  if (record == null) {\n    return \"degraded\";\n  }\n  const failure = registrationFailureCode(record);\n  if (\n    failure === \"ATHENA_BILLING_CREDENTIAL_UNAVAILABLE\" ||\n    record.lastIngressStage === \"failed\" ||\n    record.status === \"error\"\n  ) {\n    return \"unhealthy\";\n  }\n  if (record.status === \"disabled\") {\n    return \"unhealthy\";\n  }\n  if (\n    record.status === \"drifted\" ||\n    record.status === \"degraded\" ||\n    record.lastReconciliationOutcome === \"failed\"\n  ) {\n    return \"degraded\";\n  }\n  if (record.status === \"active\") {\n    return \"healthy\";\n  }\n  return \"degraded\";\n}\n\nfunction registrationStatus(\n  status: BillingWebhookRegistrationRecord[\"status\"] | undefined\n): BillingWebhookOperationalStatus[\"registration\"][\"status\"] {\n  if (status === \"error\") {\n    return \"error\";\n  }\n  if (status === \"disabled\") {\n    return \"disabled\";\n  }\n  if (status === \"active\") {\n    return \"active\";\n  }\n  return \"pending\";\n}\n\nexport function billingWebhookOperationalStatus(input: {\n  connectionId: string;\n  delivery?: BillingWebhookDeliveryHealthRow;\n  endpoint: string;\n  kind: BillingWebhookKind;\n  mounted: BillingWebhookRouteMountState;\n  previousSigningSecretsConfigured: number;\n  registration?: BillingWebhookRegistrationRecord;\n  signingSecretConfigured: boolean;\n}): BillingWebhookOperationalStatus {\n  const delivery = input.delivery;\n  return {\n    connectionId: input.connectionId,\n    delivery: {\n      ...(delivery?.lastAcceptedAt\n        ? { lastAcceptedAt: delivery.lastAcceptedAt }\n        : {}),\n      ...(delivery?.lastReceivedAt\n        ? { lastReceivedAt: delivery.lastReceivedAt }\n        : {}),\n      ...(delivery?.lastRejectedAt\n        ? { lastRejectedAt: delivery.lastRejectedAt }\n        : {}),\n      ...(delivery?.lastRejectionCode\n        ? { lastRejectionCode: delivery.lastRejectionCode }\n        : {}),\n      ...(delivery?.lastRejectionMessage\n        ? { lastRejectionMessage: delivery.lastRejectionMessage }\n        : {}),\n    },\n    kind: input.kind,\n    provider: \"mollie\",\n    reconciliation: {\n      ...(delivery?.lastReconciliationCompletedAt\n        ? { lastCompletedAt: delivery.lastReconciliationCompletedAt }\n        : {}),\n      ...(delivery?.lastReconciliationError\n        ? { lastError: delivery.lastReconciliationError }\n        : {}),\n      ...(delivery?.lastReconciliationFailedAt\n        ? { lastFailedAt: delivery.lastReconciliationFailedAt }\n        : {}),\n      ...(delivery?.lastReconciliationOutcome\n        ? { lastOutcome: delivery.lastReconciliationOutcome }\n        : {}),\n      ...(delivery?.lastReconciliationStartedAt\n        ? { lastStartedAt: delivery.lastReconciliationStartedAt }\n        : {}),\n    },\n    registration: {\n      health: billingWebhookRegistrationOperationalHealth(input.registration),\n      status: registrationStatus(input.registration?.status),\n      ...(input.registration?.lastReconciledAt\n        ? { lastReconciledAt: input.registration.lastReconciledAt }\n        : {}),\n      ...(input.registration?.lastVerifiedAt\n        ? { lastVerifiedAt: input.registration.lastVerifiedAt }\n        : {}),\n      ...(input.registration?.providerWebhookId\n        ? { providerWebhookId: input.registration.providerWebhookId }\n        : {}),\n    },\n    route: {\n      endpoint: input.endpoint,\n      mounted: input.mounted,\n    },\n    verification: {\n      previousSigningSecretsConfigured: input.previousSigningSecretsConfigured,\n      signingSecretConfigured: input.signingSecretConfigured,\n      strategy:\n        input.kind === \"classic\"\n          ? \"authoritative_refetch\"\n          : \"signature_and_refetch\",\n    },\n  };\n}\n","import { billingWebhookRegistrationOperationalHealth } from \"../observability/operational-status.ts\";\nimport type { BillingConnectionIngestionHealth } from \"../types.ts\";\nimport type { BillingWebhookRegistrationRecord } from \"./types.ts\";\n\nexport function connectionIngestionHealthFromRegistrations(\n  rows: readonly BillingWebhookRegistrationRecord[]\n): BillingConnectionIngestionHealth {\n  const classic = rows.find((row) => row.kind === \"classic\");\n  const nextGen = rows.find((row) => row.kind === \"next_gen\");\n  const mapClassic = (): BillingConnectionIngestionHealth[\"classic\"] => {\n    if (!classic) {\n      return \"unsupported\";\n    }\n    if (\n      classic.status === \"error\" ||\n      billingWebhookRegistrationOperationalHealth(classic) === \"unhealthy\"\n    ) {\n      return \"error\";\n    }\n    if (classic.status === \"disabled\") {\n      return \"disabled\";\n    }\n    return \"active\";\n  };\n  const mapNextGen = (): BillingConnectionIngestionHealth[\"nextGen\"] => {\n    if (!nextGen) {\n      return \"unsupported\";\n    }\n    if (\n      nextGen.status === \"error\" ||\n      billingWebhookRegistrationOperationalHealth(nextGen) === \"unhealthy\"\n    ) {\n      return \"error\";\n    }\n    if (nextGen.status === \"degraded\") {\n      return \"degraded\";\n    }\n    if (nextGen.status === \"disabled\") {\n      return \"disabled\";\n    }\n    if (nextGen.status === \"drifted\") {\n      return \"degraded\";\n    }\n    return \"active\";\n  };\n  return {\n    classic: mapClassic(),\n    drifted: rows.some((row) => row.status === \"drifted\"),\n    nextGen: mapNextGen(),\n    ...((classic?.lastVerifiedAt ?? nextGen?.lastVerifiedAt)\n      ? { lastVerifiedAt: classic?.lastVerifiedAt ?? nextGen?.lastVerifiedAt }\n      : {}),\n    ...((classic?.lastDeliveryAt ?? nextGen?.lastDeliveryAt)\n      ? { lastDeliveryAt: classic?.lastDeliveryAt ?? nextGen?.lastDeliveryAt }\n      : {}),\n  };\n}\n","import type { BillingAdminOperation } from \"../capabilities.ts\";\n\nexport type AdminBillingOperation = BillingAdminOperation;\n\nexport const ADMIN_BILLING_OPERATIONS = [\n  \"admin.connections.materialize\",\n  \"admin.bootstrap.retry\",\n  \"admin.reconciliation.run\",\n  \"admin.reconciliation.retry\",\n  \"admin.webhooks.reconcile\",\n  \"admin.webhooks.verify\",\n  \"admin.webhooks.status\",\n  \"admin.ingestion.health\",\n  \"admin.conflicts.resolve\",\n  \"admin.conflicts.list\",\n] as const satisfies readonly AdminBillingOperation[];\n\nexport const ADMIN_OP = {\n  conflictsList: \"admin.conflicts.list\",\n  conflictsResolve: \"admin.conflicts.resolve\",\n  connectionsMaterialize: \"admin.connections.materialize\",\n  bootstrapRetry: \"admin.bootstrap.retry\",\n  ingestionHealth: \"admin.ingestion.health\",\n  reconciliationRetry: \"admin.reconciliation.retry\",\n  reconciliationRun: \"admin.reconciliation.run\",\n  webhooksReconcile: \"admin.webhooks.reconcile\",\n  webhooksStatus: \"admin.webhooks.status\",\n  webhooksVerify: \"admin.webhooks.verify\",\n} as const satisfies Record<string, AdminBillingOperation>;\n\nexport function isAdminBillingOperation(\n  operation: string\n): operation is AdminBillingOperation {\n  return (ADMIN_BILLING_OPERATIONS as readonly string[]).includes(operation);\n}\n","import type { BillingAdminIngestionHealth } from \"./admin/types.ts\";\n\nexport interface AthenaBillingHealth {\n  readonly canonicalLag: number;\n  readonly credentials: \"healthy\" | \"degraded\" | \"unavailable\";\n  readonly failedEvents: number;\n  readonly lastReconciliation: string | null;\n  readonly lastWebhook: string | null;\n  readonly pendingConflicts: number;\n  readonly providerConnection: \"healthy\" | \"degraded\" | \"unavailable\";\n  readonly reconciliation: \"healthy\" | \"degraded\" | \"unavailable\";\n  readonly webhookRegistration: \"healthy\" | \"degraded\" | \"unavailable\";\n}\n\nexport function projectAthenaBillingHealth(\n  ingestion: BillingAdminIngestionHealth\n): AthenaBillingHealth {\n  const healthy = ingestion.healthy === true;\n  const connectionOk = ingestion.connectionStatus === \"active\";\n  return {\n    canonicalLag: ingestion.reconciliation === \"behind\" ? 1 : 0,\n    credentials: connectionOk ? \"healthy\" : \"degraded\",\n    failedEvents: ingestion.recent?.rejected ?? 0,\n    lastReconciliation: ingestion.lastReconcileAt ?? null,\n    lastWebhook:\n      ingestion.lastSuccessfulIngressAt ?? ingestion.lastIngressAt ?? null,\n    pendingConflicts: ingestion.conflicts,\n    providerConnection: connectionOk\n      ? \"healthy\"\n      : healthy\n        ? \"degraded\"\n        : \"unavailable\",\n    reconciliation:\n      ingestion.reconciliation === \"caught_up\"\n        ? \"healthy\"\n        : ingestion.reconciliation === \"behind\"\n          ? \"degraded\"\n          : \"unavailable\",\n    webhookRegistration:\n      ingestion.webhookIngestion === \"degraded\" ? \"degraded\" : \"healthy\",\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 { BillingSelfEnrollmentSetting } from \"../../self-enrollment.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { denyBillingInvocation } from \"../rights.ts\";\nimport type { BillingSelfPort } from \"../types.ts\";\nimport { changeSelfSubscription } from \"./change.ts\";\nimport { createSelfCheckout } from \"./checkout.ts\";\nimport { getSelfCustomer } from \"./customer.ts\";\nimport {\n  isSelfBillingOperation,\n  rejectSelfPayloadSelectors,\n  type SelfBillingOperation,\n} from \"./dispatch.ts\";\nimport { enrollSelfSubscription } from \"./enroll.ts\";\nimport { getSelfEntitlements } from \"./entitlements.ts\";\nimport { getSelfInvoice, listSelfInvoices } from \"./invoices.ts\";\nimport { getSelfPayment, listSelfPayments } from \"./payments.ts\";\nimport { billingRedirectAllowlistFromAppUrl } from \"./redirect-url.ts\";\nimport { resumeSelfCheckout } from \"./resume.ts\";\nimport {\n  cancelSelfSubscription,\n  getSelfSubscription,\n} from \"./subscriptions.ts\";\nimport { getSelfSubscriptionChangeOperation } from \"../../workflows/plan-change/change-operation.ts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return {};\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction requireString(\n  record: Record<string, unknown>,\n  key: string,\n  operation: SelfBillingOperation\n): string {\n  const value = record[key];\n  if (typeof value !== \"string\" || !value.trim()) {\n    throw new AthenaBillingCapabilityError({\n      operation,\n      reason: \"unsupported_operation\",\n    });\n  }\n  return value;\n}\n\nexport async function executeSelfBillingOperation(input: {\n  appUrl?: string | null;\n  applicationId?: string;\n  configuredProviders?: BillingProviderConfigMap;\n  operation: SelfBillingOperation;\n  payload: unknown;\n  principal: AthenaPrincipal;\n  registry?: BillingProviderRegistry;\n  selfEnrollmentEnabled?: BillingSelfEnrollmentSetting;\n  sql?: BillingSqlExecutor;\n  testMode?: boolean;\n}): Promise<unknown> {\n  rejectSelfPayloadSelectors(input.payload);\n  const denied = denyBillingInvocation(input.principal, input.operation, {\n    kind: \"session\",\n  });\n  if (denied) {\n    throw denied;\n  }\n  if (!input.sql) {\n    throw new AthenaBillingCapabilityError({\n      operation: input.operation,\n      reason: \"runtime_unavailable\",\n    });\n  }\n  const payload = asRecord(input.payload);\n  const allowedRedirectOrigins = billingRedirectAllowlistFromAppUrl(\n    input.appUrl\n  );\n  switch (input.operation) {\n    case \"self.customer.get\":\n      return getSelfCustomer({\n        principal: input.principal,\n        sql: input.sql,\n      });\n    case \"self.entitlements\":\n      return getSelfEntitlements({\n        principal: input.principal,\n        sql: input.sql,\n      });\n    case \"self.invoices.list\":\n      return listSelfInvoices({\n        limit: typeof payload.limit === \"number\" ? payload.limit : undefined,\n        principal: input.principal,\n        sql: input.sql,\n      });\n    case \"self.invoices.get\":\n      return getSelfInvoice({\n        invoiceId: requireString(payload, \"invoiceId\", \"self.invoices.get\"),\n        principal: input.principal,\n        sql: input.sql,\n      });\n    case \"self.payments.list\":\n      return listSelfPayments({\n        limit: typeof payload.limit === \"number\" ? payload.limit : undefined,\n        principal: input.principal,\n        sql: input.sql,\n      });\n    case \"self.payments.get\":\n      return getSelfPayment({\n        paymentId: requireString(payload, \"paymentId\", \"self.payments.get\"),\n        principal: input.principal,\n        sql: input.sql,\n      });\n    case \"self.subscription.get\":\n      if (typeof payload.operationId === \"string\") {\n        return getSelfSubscriptionChangeOperation({\n          operationId: payload.operationId,\n          principal: input.principal,\n          sql: input.sql,\n        });\n      }\n      return getSelfSubscription({\n        principal: input.principal,\n        sql: input.sql,\n        subscriptionId:\n          typeof payload.subscriptionId === \"string\"\n            ? payload.subscriptionId\n            : undefined,\n      });\n    case \"self.subscription.cancel\":\n      return cancelSelfSubscription({\n        configuredProviders: input.configuredProviders,\n        principal: input.principal,\n        registry: input.registry,\n        sql: input.sql,\n        subscriptionId: requireString(\n          payload,\n          \"subscriptionId\",\n          \"self.subscription.cancel\"\n        ),\n        testMode: input.testMode,\n      });\n    case \"self.subscription.enroll\":\n      return enrollSelfSubscription({\n        allowedRedirectOrigins,\n        applicationId: input.applicationId,\n        cancelUrl:\n          typeof payload.cancelUrl === \"string\" ? payload.cancelUrl : undefined,\n        configuredProviders: input.configuredProviders,\n        idempotencyKey: requireString(\n          payload,\n          \"idempotencyKey\",\n          \"self.subscription.enroll\"\n        ),\n        priceId: requireString(payload, \"priceId\", \"self.subscription.enroll\"),\n        principal: input.principal,\n        registry: input.registry,\n        selfEnrollmentEnabled: input.selfEnrollmentEnabled,\n        sql: input.sql,\n        successUrl:\n          typeof payload.successUrl === \"string\"\n            ? payload.successUrl\n            : undefined,\n        testMode: input.testMode,\n      });\n    case \"self.subscription.change\":\n      return changeSelfSubscription({\n        applicationId: input.applicationId,\n        configuredProviders: input.configuredProviders,\n        currentVersion:\n          typeof payload.currentVersion === \"string\"\n            ? payload.currentVersion\n            : undefined,\n        idempotencyKey: requireString(\n          payload,\n          \"idempotencyKey\",\n          \"self.subscription.change\"\n        ),\n        planChangeEnabled: input.selfEnrollmentEnabled,\n        priceId: requireString(payload, \"priceId\", \"self.subscription.change\"),\n        principal: input.principal,\n        proration:\n          payload.proration === \"immediate\" || payload.proration === \"none\"\n            ? payload.proration\n            : undefined,\n        registry: input.registry,\n        sql: input.sql,\n        subscriptionId:\n          typeof payload.subscriptionId === \"string\"\n            ? payload.subscriptionId\n            : undefined,\n        testMode: input.testMode,\n      });\n    case \"self.checkout.create\":\n      return createSelfCheckout({\n        allowedRedirectOrigins,\n        applicationId: input.applicationId,\n        cancelUrl:\n          typeof payload.cancelUrl === \"string\" ? payload.cancelUrl : undefined,\n        configuredProviders: input.configuredProviders,\n        idempotencyKey: requireString(\n          payload,\n          \"idempotencyKey\",\n          \"self.checkout.create\"\n        ),\n        lines: Array.isArray(payload.lines)\n          ? (payload.lines as { priceId: string; quantity?: number }[])\n          : undefined,\n        priceId:\n          typeof payload.priceId === \"string\" ? payload.priceId : undefined,\n        principal: input.principal,\n        registry: input.registry,\n        selfEnrollmentEnabled: input.selfEnrollmentEnabled,\n        sql: input.sql,\n        successUrl:\n          typeof payload.successUrl === \"string\"\n            ? payload.successUrl\n            : undefined,\n        testMode: input.testMode,\n      });\n    case \"self.checkout.resume\":\n      return resumeSelfCheckout({\n        configuredProviders: input.configuredProviders,\n        principal: input.principal,\n        registry: input.registry,\n        returnToken: requireString(payload, \"returnToken\", \"self.checkout.resume\"),\n        sql: input.sql,\n        testMode: input.testMode,\n      });\n    default: {\n      const _exhaustive: never = input.operation;\n      return _exhaustive;\n    }\n  }\n}\n\nexport { createUnavailableBillingSelfPort } from \"./unavailable.ts\";\n\nexport function createSelfBillingPort(input: {\n  appUrl?: string | null;\n  applicationId?: string;\n  configuredProviders?: BillingProviderConfigMap;\n  principal: AthenaPrincipal;\n  registry?: BillingProviderRegistry;\n  selfEnrollmentEnabled?: BillingSelfEnrollmentSetting;\n  sql?: BillingSqlExecutor;\n  testMode?: boolean;\n}): BillingSelfPort {\n  const run = async (\n    operation: SelfBillingOperation,\n    payload: unknown\n  ): Promise<unknown> =>\n    executeSelfBillingOperation({\n      appUrl: input.appUrl,\n      applicationId: input.applicationId,\n      configuredProviders: input.configuredProviders,\n      operation,\n      payload,\n      principal: input.principal,\n      registry: input.registry,\n      selfEnrollmentEnabled: input.selfEnrollmentEnabled,\n      sql: input.sql,\n      testMode: input.testMode,\n    });\n  return {\n    checkout: {\n      create: (payload) =>\n        run(\"self.checkout.create\", payload) as ReturnType<\n          BillingSelfPort[\"checkout\"][\"create\"]\n        >,\n      resume: (payload) =>\n        run(\"self.checkout.resume\", payload) as ReturnType<\n          BillingSelfPort[\"checkout\"][\"resume\"]\n        >,\n    },\n    customer: {\n      get: (payload) =>\n        run(\"self.customer.get\", payload ?? {}) as ReturnType<\n          BillingSelfPort[\"customer\"][\"get\"]\n        >,\n    },\n    entitlements: (payload) =>\n      run(\"self.entitlements\", payload ?? {}) as ReturnType<\n        BillingSelfPort[\"entitlements\"]\n      >,\n    invoices: {\n      get: (payload) =>\n        run(\"self.invoices.get\", payload) as ReturnType<\n          BillingSelfPort[\"invoices\"][\"get\"]\n        >,\n      list: (payload) =>\n        run(\"self.invoices.list\", payload ?? {}) as ReturnType<\n          BillingSelfPort[\"invoices\"][\"list\"]\n        >,\n    },\n    payments: {\n      get: (payload) =>\n        run(\"self.payments.get\", payload) as ReturnType<\n          BillingSelfPort[\"payments\"][\"get\"]\n        >,\n      list: (payload) =>\n        run(\"self.payments.list\", payload ?? {}) as ReturnType<\n          BillingSelfPort[\"payments\"][\"list\"]\n        >,\n    },\n    subscription: {\n      cancel: (payload) =>\n        run(\"self.subscription.cancel\", payload) as ReturnType<\n          BillingSelfPort[\"subscription\"][\"cancel\"]\n        >,\n      change: (payload) =>\n        run(\"self.subscription.change\", payload) as ReturnType<\n          BillingSelfPort[\"subscription\"][\"change\"]\n        >,\n      enroll: (payload) =>\n        run(\"self.subscription.enroll\", payload) as ReturnType<\n          BillingSelfPort[\"subscription\"][\"enroll\"]\n        >,\n      get: (payload) =>\n        run(\"self.subscription.get\", payload ?? {}) as ReturnType<\n          BillingSelfPort[\"subscription\"][\"get\"]\n        >,\n      getChangeOperation: (payload) =>\n        run(\"self.subscription.get\", payload) as ReturnType<\n          NonNullable<BillingSelfPort[\"subscription\"][\"getChangeOperation\"]>\n        >,\n    },\n  };\n}\n\nexport { isSelfBillingOperation };\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport {\n  AthenaBillingCapabilityError,\n  AthenaBillingError,\n  isAthenaBillingCapabilityError,\n} from \"../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\";\nimport type { BillingSelfEnrollmentSetting } from \"../../self-enrollment.ts\";\nimport { isBillingSelfEnrollmentEnabled } 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 { requireBillingPrincipalUserId } from \"../../subject/principal-user.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingCheckout } from \"../../types.ts\";\nimport { billingHalLinkHref } from \"../hal-link-href.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport { executeLocalBillingPriceList } from \"../local/execute/price-list.ts\";\nimport { executeLocalBillingProductList } from \"../local/execute/product-list.ts\";\nimport { executeLocalBillingRelationList } from \"../local/execute/relation-list.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport {\n  assertMatchingCheckoutIntent,\n  assertMatchingCheckoutRequest,\n  CHECKOUT_INTENT_HASH_METADATA_KEY,\n  digestLinesFromComposition,\n  hashCheckoutIntent,\n} from \"./checkout-intent-hash.ts\";\nimport { resolveSelfCheckoutLineRequests } from \"./checkout-lines.ts\";\nimport { requireProviderPaymentFromCheckoutSnapshot } from \"./checkout-payment.ts\";\nimport { resolveCheckoutSettlement } from \"./checkout-settlement.ts\";\nimport {\n  checkoutSessionKindForWorkflow,\n  resolveCheckoutWorkflow,\n} from \"./checkout-workflow.ts\";\nimport { planSelfCheckoutComposition } from \"./composition.ts\";\nimport { freezeBillingPaymentPresentation } from \"./checkout-presentation.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport { hasUsableMandate } from \"./enroll.ts\";\nimport {\n  reserveSubjectEnrollment,\n  updateEnrollment,\n} from \"./enrollment-reservation.ts\";\nimport {\n  billingSqlTransactionOrThrow,\n  checkoutAttemptExpiresAtIso,\n  getCheckoutSessionByIdempotency,\n  insertCheckoutSession,\n  insertCheckoutSessionLines,\n  isCheckoutSessionResumeExpired,\n  listCheckoutSessionLines,\n  requireBillingSqlTransaction,\n  updateCheckoutSession,\n} from \"./enrollment-session.ts\";\nimport { resolveAllowedBillingRedirectUrl } from \"./redirect-url.ts\";\nimport { appendBillingReturnToken } from \"./return-query.ts\";\nimport { createBillingReturnNonce } from \"./return-token.ts\";\n\nconst OWNED_SUBSCRIPTION_RESOURCE_SQL = `\nSELECT provider_customer_id, connection_id\nFROM billing.billing_subscriptions\nWHERE subject_kind = 'user'\n  AND subject_id = $1\n  AND ownership_status = 'resolved'\n  AND lower(status) NOT IN ('canceled', 'cancelled', 'expired', 'completed')\nORDER BY ingested_at DESC\nLIMIT 2\n`;\n\nconst OWNED_PAYMENT_RESOURCE_SQL = `\nSELECT provider_customer_id, connection_id\nFROM billing.billing_payments\nWHERE subject_kind = 'user'\n  AND subject_id = $1\n  AND ownership_status = 'resolved'\n  AND provider_customer_id IS NOT NULL\n  AND btrim(provider_customer_id) <> ''\nORDER BY ingested_at DESC\nLIMIT 2\n`;\n\nfunction checkoutUrlFromRaw(raw: unknown): string | null {\n  return billingHalLinkHref(raw, \"checkout\");\n}\n\nasync function ownedBillingResource(input: {\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n}): Promise<{ connectionId?: string; customerId?: string }> {\n  const subjectUserId = requireBillingPrincipalUserId(input.principal);\n  const fromSubscription = await input.sql.query(\n    OWNED_SUBSCRIPTION_RESOURCE_SQL,\n    [subjectUserId],\n  );\n  const subscription = uniqueOwnedResource(\n    fromSubscription.rows,\n    \"self.checkout.create\",\n  );\n  if (subscription) {\n    return {\n      ...(typeof subscription.connection_id === \"string\"\n        ? { connectionId: subscription.connection_id }\n        : {}),\n      ...(typeof subscription.provider_customer_id === \"string\" &&\n        subscription.provider_customer_id.trim()\n        ? { customerId: subscription.provider_customer_id }\n        : {}),\n    };\n  }\n  const fromPayment = await input.sql.query(OWNED_PAYMENT_RESOURCE_SQL, [\n    subjectUserId,\n  ]);\n  const payment = uniqueOwnedResource(fromPayment.rows, \"self.checkout.create\");\n  if (payment) {\n    return {\n      ...(typeof payment.connection_id === \"string\"\n        ? { connectionId: payment.connection_id }\n        : {}),\n      ...(typeof payment.provider_customer_id === \"string\" &&\n        payment.provider_customer_id.trim()\n        ? { customerId: payment.provider_customer_id }\n        : {}),\n    };\n  }\n  return {};\n}\n\nfunction uniqueOwnedResource(\n  rows: readonly Record<string, unknown>[],\n  operation: \"self.checkout.create\",\n): Record<string, unknown> | undefined {\n  if (rows.length === 0) {\n    return;\n  }\n  const connectionIds = [\n    ...new Set(\n      rows\n        .map((row) => row.connection_id)\n        .filter(\n          (id): id is string => typeof id === \"string\" && id.trim().length > 0,\n        ),\n    ),\n  ];\n  if (connectionIds.length > 1) {\n    throw new AthenaBillingCapabilityError({\n      operation,\n      reason: \"provider_connection_ambiguous\",\n    });\n  }\n  const uniqueConnectionId = connectionIds[0];\n  if (uniqueConnectionId == null) {\n    return;\n  }\n  const provenance = rows.find((row) => row.connection_id === uniqueConnectionId);\n  const customerId =\n    typeof provenance?.provider_customer_id === \"string\" &&\n    provenance.provider_customer_id.trim().length > 0\n      ? provenance.provider_customer_id.trim()\n      : undefined;\n  return {\n    connection_id: uniqueConnectionId,\n    ...(customerId == null ? {} : { provider_customer_id: customerId }),\n  };\n}\n\n/**\n * Customer checkout. Mixed carts (one recurring + one-off add-ons) use\n * setup/add-on settlement: the provider payment is add-ons only; the\n * subscription is created after that payment is paid. Recurring first\n * installment is collected by `enrollSelfSubscription`, not folded into\n * this payment.\n */\nexport async function createSelfCheckout(input: {\n  allowedRedirectOrigins?: readonly string[];\n  applicationId?: string;\n  cancelUrl?: string;\n  configuredProviders?: BillingProviderConfigMap;\n  idempotencyKey: string;\n  lines?: readonly { priceId: string; quantity?: number }[];\n  principal: AthenaPrincipal;\n  priceId?: string;\n  registry?: BillingProviderRegistry;\n  selfEnrollmentEnabled?: BillingSelfEnrollmentSetting;\n  sql: BillingSqlExecutor;\n  successUrl?: string;\n  testMode?: boolean;\n}): Promise<BillingCheckout> {\n  const subjectUserId = requireBillingPrincipalUserId(input.principal);\n  const command = prepareBillingCommand({\n    operation: \"self.checkout.create\",\n    payload: {\n      cancelUrl: input.cancelUrl,\n      idempotencyKey: input.idempotencyKey,\n      lines: input.lines,\n      priceId: input.priceId,\n      successUrl: input.successUrl,\n    },\n  });\n  const lineRequests = resolveSelfCheckoutLineRequests(command.payload);\n  const priceId = lineRequests[0]?.priceId ?? \"\";\n  const idempotencyKey = String(command.payload.idempotencyKey);\n  if (input.registry == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.checkout.create\",\n      reason: \"runtime_unavailable\",\n    });\n  }\n  billingSqlTransactionOrThrow(input.sql);\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 checkout with a new idempotencyKey.\",\n        method: \"POST\",\n        status: 400,\n      });\n    }\n  }\n  const persistedLines = existing\n    ? await listCheckoutSessionLines({\n      checkoutSessionId: existing.id,\n      sql: input.sql,\n    })\n    : [];\n  if (existing && persistedLines.length > 0) {\n    await assertMatchingCheckoutRequest({\n      existing,\n      requests: lineRequests,\n      sql: input.sql,\n    });\n  }\n  const owned = await ownedBillingResource({\n    principal: input.principal,\n    sql: input.sql,\n  });\n  const existingConnectionId =\n    typeof existing?.metadata.billingConnectionId === \"string\"\n      ? existing.metadata.billingConnectionId\n      : undefined;\n  const ownedConnectionId =\n    owned.connectionId?.trim() || existingConnectionId?.trim() || undefined;\n  const connectionAffinity = await resolveBillingConnectionAffinity({\n    configuredProviders: input.configuredProviders,\n    environment: input.testMode === false ? \"live\" : \"test\",\n    operation: \"self.checkout.create\",\n    ownedConnectionId,\n    provider: \"mollie\",\n    sql: input.sql,\n    subjectId: subjectUserId,\n    subjectKind: \"user\",\n    testMode: input.testMode,\n    ...(billingConfiguredConnectionOwner(input.applicationId) ?? {}),\n  });\n  const configuredProviders = configuredProvidersForBillingConnection({\n    affinity: connectionAffinity,\n    configuredProviders: input.configuredProviders,\n    operation: \"self.checkout.create\",\n  });\n  if (existing && persistedLines.length > 0) {\n    if (\n      existing.providerPaymentId != null &&\n      existing.providerPaymentId.trim() !== \"\"\n    ) {\n      return {\n        checkoutUrl: existing.checkoutUrl,\n        metadata: {\n          paymentId: existing.providerPaymentId,\n          priceId: existing.priceId,\n          sessionId: existing.id,\n        },\n        provider: existing.provider,\n        providerCheckoutId: existing.providerPaymentId,\n        raw: {},\n      };\n    }\n    const expiresAt = checkoutAttemptExpiresAtIso();\n    const session = await updateCheckoutSession({\n      expiresAt,\n      id: existing.id,\n      sql: input.sql,\n      status: existing.status,\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 checkoutUrl = checkoutUrlFromRaw(payment.raw);\n    await updateCheckoutSession({\n      checkoutUrl,\n      id: session.id,\n      providerCustomerId:\n        payment.providerCustomerId ?? session.providerCustomerId,\n      providerPaymentId: payment.providerPaymentId,\n      sql: input.sql,\n      status: \"first_payment_required\",\n    });\n    if (session.enrollmentId != null && session.enrollmentId.trim() !== \"\") {\n      await updateEnrollment({\n        id: session.enrollmentId,\n        providerPaymentId: payment.providerPaymentId,\n        sql: input.sql,\n        state: \"first_payment_pending\",\n      });\n    }\n    return {\n      checkoutUrl,\n      metadata: {\n        paymentId: payment.providerPaymentId,\n        priceId: session.priceId,\n        sessionId: session.id,\n      },\n      provider: payment.provider,\n      providerCheckoutId: payment.providerPaymentId,\n      raw: payment.raw,\n    };\n  }\n  const mixed = lineRequests.length > 1;\n  const delegated = selfDelegatedBillingPrincipal(input.principal, [\n    \"prices.list\",\n    \"products.list\",\n    \"relations.list\",\n    \"payments.create\",\n    ...(mixed ? ([\"subscriptions.create\", \"customers.create\"] as const) : []),\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  let relationsItems: Awaited<\n    ReturnType<typeof executeLocalBillingRelationList>\n  >[\"items\"] = [];\n  try {\n    const relationsPage = await executeLocalBillingRelationList({\n      authority: PROCESS_BILLING_INVOCATION,\n      configuredProviders,\n      payload: {},\n      principal: delegated,\n      registry: input.registry,\n      testMode: input.testMode,\n    });\n    relationsItems = relationsPage.items;\n  } catch (error) {\n    if (\n      !isAthenaBillingCapabilityError(error) ||\n      error.reason !== \"missing_catalog\"\n    ) {\n      throw error;\n    }\n  }\n  const composition = planSelfCheckoutComposition({\n    lines: lineRequests,\n    prices: prices.items,\n    relations: relationsItems,\n  });\n  const paymentPresentation =\n    existing == null || persistedLines.length === 0\n      ? freezeBillingPaymentPresentation({\n          kind: \"checkout\",\n          lines: [\n            ...composition.oneOffLines,\n            ...(composition.recurringLine\n              ? [composition.recurringLine]\n              : []),\n          ].map((line) => ({\n            interval: line.interval,\n            priceId: line.price.id,\n            productId: line.productId,\n            quantity: line.quantity,\n          })),\n          operation: \"self.checkout.create\",\n          products: (\n            await executeLocalBillingProductList({\n              authority: PROCESS_BILLING_INVOCATION,\n              configuredProviders,\n              payload: {},\n              principal: delegated,\n              registry: input.registry,\n              testMode: input.testMode,\n            })\n          ).items,\n        })\n      : undefined;\n  const intentHash = hashCheckoutIntent(\n    digestLinesFromComposition(composition),\n  );\n  if (existing) {\n    await assertMatchingCheckoutIntent({\n      existing,\n      intentHash,\n      sql: input.sql,\n    });\n    if (\n      existing.providerPaymentId != null &&\n      existing.providerPaymentId.trim() !== \"\"\n    ) {\n      return {\n        checkoutUrl: existing.checkoutUrl,\n        metadata: {\n          paymentId: existing.providerPaymentId,\n          priceId: existing.priceId,\n          sessionId: existing.id,\n        },\n        provider: existing.provider,\n        providerCheckoutId: existing.providerPaymentId,\n        raw: {},\n      };\n    }\n  }\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 (successUrl == null && cancelUrl == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.checkout.create\",\n      reason: \"unsupported_operation\",\n    });\n  }\n  const expiresAt = checkoutAttemptExpiresAtIso();\n  const existingSuccess =\n    typeof existing?.metadata.successUrl === \"string\"\n      ? existing.metadata.successUrl\n      : undefined;\n  const existingCancel =\n    typeof existing?.metadata.cancelUrl === \"string\"\n      ? existing.metadata.cancelUrl\n      : undefined;\n  const nonce = existing == null ? createBillingReturnNonce() : null;\n  const correlatedSuccess =\n    existing != null\n      ? existingSuccess\n      : successUrl != null && nonce != null\n        ? appendBillingReturnToken(successUrl, nonce.token)\n        : undefined;\n  const correlatedCancel =\n    existing != null\n      ? existingCancel\n      : cancelUrl != null && nonce != null\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.checkout.create\",\n      reason: \"unsupported_operation\",\n    });\n  }\n\n  let enrollmentId: string | null = null;\n  let customerId = owned.customerId;\n  let mandateReady = false;\n  if (composition.recurringLine != null) {\n    if (!isBillingSelfEnrollmentEnabled(input.selfEnrollmentEnabled)) {\n      throw new AthenaBillingCapabilityError({\n        operation: \"self.checkout.create\",\n        reason: \"self_enrollment_disabled\",\n      });\n    }\n    const enrollment = await reserveSubjectEnrollment({\n      connectionId: connectionAffinity.connectionId,\n      idempotencyKey,\n      priceId: composition.recurringLine.price.id,\n      sql: input.sql,\n      subjectId: subjectUserId,\n      subjectKind: \"user\",\n    });\n    enrollmentId = enrollment.id;\n    const customer = await ensureActiveProviderCustomer({\n      applicationId: input.applicationId,\n      configuredProviders: input.configuredProviders,\n      connectionId: connectionAffinity.connectionId,\n      idempotencyKey,\n      principal: input.principal,\n      registry: input.registry,\n      sql: input.sql,\n      testMode: input.testMode,\n    });\n    customerId = customer.customerId;\n    mandateReady = await hasUsableMandate({\n      providerCustomerId: customer.customerId,\n      sql: input.sql,\n      subjectId: subjectUserId,\n    });\n  }\n\n  const settlement = resolveCheckoutSettlement(composition);\n  if (settlement == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.checkout.create\",\n      reason: \"unsupported_operation\",\n    });\n  }\n  const sessionId = existing?.id ?? crypto.randomUUID();\n  const workflow = resolveCheckoutWorkflow(composition);\n  const sessionKind = checkoutSessionKindForWorkflow(workflow);\n  const needsMandateEstablishment =\n    composition.recurringLine != null && !mandateReady;\n  const snapshotLines = [\n    ...composition.oneOffLines,\n    ...(composition.recurringLine ? [composition.recurringLine] : []),\n  ].map((line, ordinal) => ({\n    amountCurrency: line.amount.currency,\n    amountValue: line.amount.value,\n    interval: line.interval,\n    ordinal,\n    priceId: line.price.id,\n    productId: line.productId,\n    quantity: line.quantity,\n    relationId: line.relationId,\n  }));\n  const session = await requireBillingSqlTransaction(input.sql, async (sql) => {\n    if (existing) {\n      const persisted = await updateCheckoutSession({\n        enrollmentId,\n        expiresAt,\n        id: existing.id,\n        metadata: {\n          athenaCheckoutSessionId: existing.id,\n          athenaCheckoutWorkflow: workflow,\n          [CHECKOUT_INTENT_HASH_METADATA_KEY]: intentHash,\n          billingConnectionId: connectionAffinity.connectionId,\n          checkoutSettlement: settlement.model,\n          oneOffAmountCurrency: settlement.providerPaymentAmount.currency,\n          oneOffAmountValue: settlement.providerPaymentAmount.value,\n          paymentIdempotencyKey: idempotencyKey,\n          cancelUrl: normalizedCancelUrl,\n          ...(needsMandateEstablishment\n            ? { paymentSequenceType: \"first\" }\n            : {}),\n          priceId,\n          successUrl: normalizedSuccessUrl,\n          ...(paymentPresentation\n            ? { paymentPresentation }\n            : {}),\n        },\n        providerCustomerId: customerId ?? null,\n        sql,\n        status: existing.status,\n      });\n      await insertCheckoutSessionLines({\n        checkoutSessionId: persisted.id,\n        lines: snapshotLines,\n        sql,\n      });\n      return persisted;\n    }\n    if (nonce == null) {\n      throw new AthenaBillingCapabilityError({\n        operation: \"self.checkout.create\",\n        reason: \"unsupported_operation\",\n      });\n    }\n    const persisted = await insertCheckoutSession({\n      checkoutUrl: null,\n      connectionId: connectionAffinity.connectionId,\n      enrollmentId,\n      expiresAt,\n      id: sessionId,\n      idempotencyKey,\n      kind: sessionKind,\n      metadata: {\n        athenaCheckoutSessionId: sessionId,\n        athenaCheckoutWorkflow: workflow,\n        [CHECKOUT_INTENT_HASH_METADATA_KEY]: intentHash,\n        billingConnectionId: connectionAffinity.connectionId,\n        checkoutSettlement: settlement.model,\n        oneOffAmountCurrency: settlement.providerPaymentAmount.currency,\n        oneOffAmountValue: settlement.providerPaymentAmount.value,\n        paymentIdempotencyKey: idempotencyKey,\n        cancelUrl: normalizedCancelUrl,\n        ...(needsMandateEstablishment ? { paymentSequenceType: \"first\" } : {}),\n        paymentPresentation,\n        priceId,\n        successUrl: normalizedSuccessUrl,\n      },\n      priceId: composition.recurringLine?.price.id ?? priceId,\n      provider: \"mollie\",\n      providerCustomerId: customerId ?? null,\n      providerPaymentId: null,\n      providerSubscriptionId: null,\n      returnNonceHash: nonce.hash,\n      sql,\n      status: \"first_payment_required\",\n      subjectId: subjectUserId,\n      subjectKind: \"user\",\n    });\n    await insertCheckoutSessionLines({\n      checkoutSessionId: persisted.id,\n      lines: snapshotLines,\n      sql,\n    });\n    return persisted;\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 checkoutUrl = checkoutUrlFromRaw(payment.raw);\n  await updateCheckoutSession({\n    checkoutUrl,\n    id: session.id,\n    providerCustomerId: payment.providerCustomerId ?? customerId ?? null,\n    providerPaymentId: payment.providerPaymentId,\n    sql: input.sql,\n    status: \"first_payment_required\",\n  });\n  if (enrollmentId != null) {\n    await updateEnrollment({\n      id: enrollmentId,\n      providerPaymentId: payment.providerPaymentId,\n      sql: input.sql,\n      state: \"first_payment_pending\",\n    });\n  }\n  return {\n    checkoutUrl,\n    metadata: {\n      paymentId: payment.providerPaymentId,\n      priceId,\n      sessionId: session.id,\n    },\n    provider: payment.provider,\n    providerCheckoutId: payment.providerPaymentId,\n    raw: payment.raw,\n  };\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n  BillingCatalogRelation,\n  BillingListRelationsInput,\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 executeLocalBillingRelationList(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingListRelationsInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPage<BillingCatalogRelation>> {\n  return executeLocalBillingOperation({\n    before: (payload) =>\n      rejectUnsupportedListOffset(\"relations.list\", payload.offset),\n    invoke: (relations, context, payload) =>\n      relations.list(context, {\n        cursor: payload.cursor,\n        limit: payload.limit,\n        sourceProductId: payload.sourceProductId,\n      }),\n    operation: \"relations.list\",\n    port: \"relations\",\n    request: input,\n  });\n}\n","import type { BillingMoney } from \"../../types.ts\";\nimport type { BillingCheckoutComposition } from \"./composition.ts\";\n\n/**\n * Mixed `self.checkout.create` is **setup / add-on settlement** (Model B):\n *\n * - Provider payment = one-off catalog lines only.\n * - Recurring first installment is **not** collected in that payment.\n * - After the payment is paid, `self.subscription.enroll` advance creates the\n *   subscription at the recurring price under provider start semantics.\n *\n * Pure `self.subscription.enroll` remains **first-installment** (the first\n * payment equals the recurring price). Those contracts are not the same.\n *\n * Model A (first installment + add-ons, subscription starts next period) is\n * not implemented in this slice.\n */\nexport const MIXED_CHECKOUT_SETTLEMENT = \"setup_addons_only\" as const;\n\nexport type BillingCheckoutSettlementModel =\n  | \"one_off_lines\"\n  | typeof MIXED_CHECKOUT_SETTLEMENT;\n\nexport type BillingCheckoutSettlement = {\n  includesRecurringFirstInstallment: false;\n  model: BillingCheckoutSettlementModel;\n  providerPaymentAmount: BillingMoney;\n};\n\nexport function resolveCheckoutSettlement(\n  composition: Pick<BillingCheckoutComposition, \"oneOffTotal\" | \"recurringLine\">\n): BillingCheckoutSettlement | null {\n  const providerPaymentAmount = composition.oneOffTotal;\n  if (providerPaymentAmount == null) {\n    return null;\n  }\n  if (composition.recurringLine != null) {\n    return {\n      includesRecurringFirstInstallment: false,\n      model: MIXED_CHECKOUT_SETTLEMENT,\n      providerPaymentAmount,\n    };\n  }\n  return {\n    includesRecurringFirstInstallment: false,\n    model: \"one_off_lines\",\n    providerPaymentAmount,\n  };\n}\n","import type { BillingCheckoutComposition } from \"./composition.ts\";\nimport type {\n  BillingCheckoutSessionKind,\n  BillingCheckoutSessionRecord,\n} from \"./enrollment-session.ts\";\n\n/**\n * Durable checkout workflow identity. Session `kind` stays the two-value\n * recovery discriminator (`one_off` vs enrollment). Mixed recurring +\n * one-off checkout is `composed` and must still persist\n * `subscription_enrollment` so browser resume advances enrollment.\n */\nexport type BillingCheckoutWorkflow =\n  | \"one_off\"\n  | \"subscription_enrollment\"\n  | \"composed\";\n\nexport function resolveCheckoutWorkflow(\n  composition: Pick<BillingCheckoutComposition, \"oneOffLines\" | \"recurringLine\">\n): BillingCheckoutWorkflow {\n  if (composition.recurringLine != null) {\n    return composition.oneOffLines.length > 0\n      ? \"composed\"\n      : \"subscription_enrollment\";\n  }\n  return \"one_off\";\n}\n\nexport function checkoutSessionKindForWorkflow(\n  workflow: BillingCheckoutWorkflow\n): BillingCheckoutSessionKind {\n  return workflow === \"one_off\" ? \"one_off\" : \"subscription_enrollment\";\n}\n\nexport function checkoutSessionNeedsEnrollmentAdvance(\n  session: Pick<BillingCheckoutSessionRecord, \"enrollmentId\">\n): boolean {\n  return session.enrollmentId != null && session.enrollmentId.trim() !== \"\";\n}\n","/**\n * Mixed checkout composition is a directed addon graph from the primary\n * product (first requested line). `upsell` and `upgrade` are catalog\n * recommendations, not permission to purchase both products. `requires`\n * and `incompatible` remain constraints over the selected set. There is\n * no transitive walk: A→B and B→C does not admit C on a cart whose\n * primary is A.\n */\nimport { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport {\n  addBillingMoney,\n  scaleBillingMoney,\n} from \"../../safety/money.ts\";\nimport type {\n  BillingCatalogRelation,\n  BillingMoney,\n  BillingPrice,\n} from \"../../types.ts\";\nimport { resolveBillingCheckoutIntent } from \"./checkout-intent.ts\";\nimport type { BillingSelfCheckoutLineRequest } from \"./checkout-lines.ts\";\n\n/** Only `addon` may be purchased with the primary product. */\nconst COMPOSITION_EDGES = new Set([\"addon\"]);\n\nexport interface BillingCheckoutCompositionLine {\n  amount: BillingMoney;\n  interval?: string | null;\n  price: BillingPrice;\n  productId: string;\n  quantity: number;\n  relationId?: string;\n}\n\nexport interface BillingCheckoutComposition {\n  basePrice: BillingPrice;\n  oneOffLines: readonly BillingCheckoutCompositionLine[];\n  /**\n   * Catalog sum of one-off lines only. The mixed provider payment is\n   * `resolveCheckoutSettlement`, not this field plus the recurring line.\n   */\n  oneOffTotal: BillingMoney | null;\n  recurringLine: BillingCheckoutCompositionLine | null;\n}\n\nfunction compositionError(message: string): AthenaBillingCapabilityError {\n  return new AthenaBillingCapabilityError({\n    message,\n    operation: \"self.checkout.create\",\n    reason: \"unsupported_operation\",\n  });\n}\n\nfunction lineAmount(price: BillingPrice, quantity: number): BillingMoney {\n  return scaleBillingMoney(price.amount, quantity);\n}\n\nfunction relationForTarget(input: {\n  primaryProductId: string;\n  relations: readonly BillingCatalogRelation[];\n  targetProductId: string;\n}): BillingCatalogRelation | undefined {\n  return input.relations.find(\n    (relation) =>\n      COMPOSITION_EDGES.has(relation.type) &&\n      relation.targetProductId === input.targetProductId &&\n      relation.sourceProductId === input.primaryProductId\n  );\n}\n\nexport function planSelfCheckoutComposition(input: {\n  lines: readonly BillingSelfCheckoutLineRequest[];\n  prices: readonly BillingPrice[];\n  relations: readonly BillingCatalogRelation[];\n}): BillingCheckoutComposition {\n  if (input.lines.length === 0) {\n    throw compositionError(\"Self checkout requires at least one catalog price.\");\n  }\n  const byPriceId = new Map(input.prices.map((price) => [price.id, price]));\n  const resolved: BillingCheckoutCompositionLine[] = [];\n  for (const request of input.lines) {\n    const price = byPriceId.get(request.priceId);\n    if (price == null) {\n      throw new AthenaBillingCapabilityError({\n        operation: \"self.checkout.create\",\n        reason: \"missing_catalog\",\n      });\n    }\n    resolved.push({\n      amount: lineAmount(price, request.quantity),\n      interval: price.interval,\n      price,\n      productId: price.productId,\n      quantity: request.quantity,\n    });\n  }\n\n  const currency = resolved[0]?.amount.currency;\n  if (\n    currency == null ||\n    resolved.some((line) => line.amount.currency !== currency)\n  ) {\n    throw compositionError(\n      \"Self checkout lines must share a single currency.\"\n    );\n  }\n\n  const oneOffLines: BillingCheckoutCompositionLine[] = [];\n  const recurringLines: BillingCheckoutCompositionLine[] = [];\n  for (const line of resolved) {\n    const intent = resolveBillingCheckoutIntent(line.price);\n    if (intent.kind === \"recurring\") {\n      recurringLines.push(line);\n    } else {\n      oneOffLines.push(line);\n    }\n  }\n  if (recurringLines.length > 1) {\n    throw compositionError(\n      \"Self checkout accepts at most one recurring catalog price.\"\n    );\n  }\n  if (oneOffLines.length === 0) {\n    throw compositionError(\n      \"Recurring catalog prices require recurring enrollment and must not execute as one-off payments.\"\n    );\n  }\n\n  const selectedProductIds = new Set(resolved.map((line) => line.productId));\n  const primaryProductId = resolved[0]?.productId ?? \"\";\n  if (selectedProductIds.size > 1) {\n    const extras = [...selectedProductIds].filter(\n      (productId) => productId !== primaryProductId\n    );\n    for (const extra of extras) {\n      const relation = relationForTarget({\n        primaryProductId,\n        relations: input.relations,\n        targetProductId: extra,\n      });\n      if (relation == null) {\n        throw compositionError(\n          \"Self checkout lines must follow catalog relations from the primary product.\"\n        );\n      }\n      for (const line of resolved) {\n        if (line.productId === extra && line.relationId == null) {\n          line.relationId = relation.id;\n        }\n      }\n      const extraQty = resolved\n        .filter((line) => line.productId === extra)\n        .reduce((sum, line) => sum + line.quantity, 0);\n      if (\n        relation.constraints?.minQuantityContext != null &&\n        extraQty < relation.constraints.minQuantityContext\n      ) {\n        throw compositionError(\n          `Self checkout quantity for ${extra} is below the relation minimum.`\n        );\n      }\n      if (\n        relation.constraints?.maxQuantityContext != null &&\n        extraQty > relation.constraints.maxQuantityContext\n      ) {\n        throw compositionError(\n          `Self checkout quantity for ${extra} exceeds the relation maximum.`\n        );\n      }\n    }\n  }\n\n  for (const relation of input.relations) {\n    if (relation.type === \"incompatible\") {\n      if (\n        selectedProductIds.has(relation.sourceProductId) &&\n        selectedProductIds.has(relation.targetProductId)\n      ) {\n        throw compositionError(\n          \"Self checkout includes incompatible catalog products.\"\n        );\n      }\n    }\n    if (relation.type === \"requires\") {\n      if (\n        selectedProductIds.has(relation.sourceProductId) &&\n        !selectedProductIds.has(relation.targetProductId)\n      ) {\n        throw compositionError(\n          \"Self checkout is missing a required related catalog product.\"\n        );\n      }\n    }\n  }\n\n  let oneOffTotal: BillingMoney | null = null;\n  for (const line of oneOffLines) {\n    oneOffTotal =\n      oneOffTotal == null ? line.amount : addBillingMoney(oneOffTotal, line.amount);\n  }\n\n  const basePrice = resolved[0]?.price;\n  if (basePrice == null) {\n    throw compositionError(\"Self checkout requires at least one catalog price.\");\n  }\n\n  return {\n    basePrice,\n    oneOffLines,\n    oneOffTotal,\n    recurringLine: recurringLines[0] ?? null,\n  };\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { billingSubjectNotFound } from \"../../subject/errors.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\n\nexport interface BillingSelfCustomerView {\n  readonly status: \"unbound\" | \"pending\" | \"active\";\n  readonly subjectId: string;\n  readonly subjectKind: \"user\" | \"organization\";\n}\n\nconst LIST_SUBJECT_BINDINGS_SQL = `\nSELECT status\nFROM billing.billing_subject_bindings\nWHERE subject_kind = $1\n  AND subject_id = $2\nORDER BY updated_at DESC\n`;\n\nexport async function getSelfCustomer(input: {\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n}): Promise<BillingSelfCustomerView> {\n  const userId = input.principal.userId;\n  if (typeof userId !== \"string\" || userId.length === 0) {\n    throw billingSubjectNotFound();\n  }\n  const subject = {\n    id: userId,\n    kind: \"user\" as const,\n  };\n  const result = await input.sql.query(LIST_SUBJECT_BINDINGS_SQL, [\n    subject.kind,\n    subject.id,\n  ]);\n  const statuses = result.rows.map((row) => String(row.status ?? \"\"));\n  if (statuses.some((status) => status === \"conflict\")) {\n    throw billingSubjectNotFound();\n  }\n  if (statuses.includes(\"active\")) {\n    return {\n      status: \"active\",\n      subjectId: subject.id,\n      subjectKind: subject.kind,\n    };\n  }\n  if (statuses.includes(\"pending\")) {\n    return {\n      status: \"pending\",\n      subjectId: subject.id,\n      subjectKind: subject.kind,\n    };\n  }\n  return {\n    status: \"unbound\",\n    subjectId: subject.id,\n    subjectKind: subject.kind,\n  };\n}\n","import { AthenaBillingError } from \"../../errors.ts\";\n\nconst FORBIDDEN_SELF_SELECTORS = [\n  \"userId\",\n  \"email\",\n  \"customerId\",\n  \"provider\",\n  \"connectionId\",\n] as const;\n\nexport function rejectSelfPayloadSelectors(payload: unknown): void {\n  if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n    return;\n  }\n  const record = payload as Record<string, unknown>;\n  for (const key of FORBIDDEN_SELF_SELECTORS) {\n    if (record[key] != null) {\n      throw new AthenaBillingError({\n        body: { selector: key },\n        code: \"ATHENA_BILLING_INVALID_REQUEST\",\n        endpoint: \"\",\n        message: `Customer billing payloads cannot select ${key}.`,\n        method: \"POST\",\n        status: 400,\n      });\n    }\n  }\n}\n\nexport type SelfBillingOperation =\n  | \"self.invoices.list\"\n  | \"self.invoices.get\"\n  | \"self.payments.list\"\n  | \"self.payments.get\"\n  | \"self.subscription.get\"\n  | \"self.subscription.cancel\"\n  | \"self.subscription.enroll\"\n  | \"self.subscription.change\"\n  | \"self.checkout.create\"\n  | \"self.checkout.resume\"\n  | \"self.customer.get\"\n  | \"self.entitlements\";\n\nexport function isSelfBillingOperation(\n  operation: string\n): operation is SelfBillingOperation {\n  return (\n    operation === \"self.invoices.list\" ||\n    operation === \"self.invoices.get\" ||\n    operation === \"self.payments.list\" ||\n    operation === \"self.payments.get\" ||\n    operation === \"self.subscription.get\" ||\n    operation === \"self.subscription.cancel\" ||\n    operation === \"self.subscription.enroll\" ||\n    operation === \"self.subscription.change\" ||\n    operation === \"self.checkout.create\" ||\n    operation === \"self.checkout.resume\" ||\n    operation === \"self.customer.get\" ||\n    operation === \"self.entitlements\"\n  );\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { canonicalizeBillingSubscriptionStatus } from \"../../canonical/status.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\n\nexport interface BillingEntitlementsSnapshot {\n  readonly features: {\n    readonly prioritySupport: boolean;\n    readonly projects: number;\n    readonly storageGb: number;\n  };\n  readonly plans: readonly string[];\n  readonly subscription: {\n    readonly canonicalStatus: string;\n    readonly providerStatus: string;\n    readonly renewsAt: string | null;\n    readonly status: string;\n  } | null;\n}\n\nconst STARTER_FEATURES = {\n  prioritySupport: false,\n  projects: 10,\n  storageGb: 50,\n} as const;\n\nconst PRO_FEATURES = {\n  prioritySupport: true,\n  projects: 100,\n  storageGb: 500,\n} as const;\n\nconst EMPTY_FEATURES = {\n  prioritySupport: false,\n  projects: 0,\n  storageGb: 0,\n} as const;\n\nconst LIST_OWNED_SUBSCRIPTIONS_SQL = `\nSELECT status, next_payment_date, metadata, description\nFROM billing.billing_subscriptions\nWHERE subject_kind = $1\n  AND subject_id = $2\n  AND ownership_status = 'resolved'\nORDER BY ingested_at DESC\nLIMIT 8\n`;\n\nfunction featuresForPlan(\n  plan: string\n): BillingEntitlementsSnapshot[\"features\"] {\n  if (plan === \"pro\") {\n    return { ...PRO_FEATURES };\n  }\n  if (plan === \"starter\") {\n    return { ...STARTER_FEATURES };\n  }\n  return { ...EMPTY_FEATURES };\n}\n\nfunction planFromMetadata(\n  metadata: unknown,\n  description: unknown\n): string | null {\n  if (\n    metadata !== null &&\n    typeof metadata === \"object\" &&\n    !Array.isArray(metadata)\n  ) {\n    const record = metadata as Record<string, unknown>;\n    const productId = record.productId ?? record.plan;\n    if (typeof productId === \"string\" && productId.trim()) {\n      return productId.trim();\n    }\n    const priceId = record.priceId;\n    if (priceId === \"pro-monthly\") {\n      return \"pro\";\n    }\n    if (priceId === \"starter-monthly\") {\n      return \"starter\";\n    }\n  }\n  if (typeof description === \"string\") {\n    const lowered = description.toLowerCase();\n    if (lowered.includes(\"pro\")) {\n      return \"pro\";\n    }\n    if (lowered.includes(\"starter\")) {\n      return \"starter\";\n    }\n  }\n  return null;\n}\n\nexport function projectBillingEntitlementsFromCanonical(input: {\n  description?: string | null;\n  metadata?: unknown;\n  nextPaymentDate?: string | null;\n  providerStatus: string;\n}): BillingEntitlementsSnapshot {\n  const plan = planFromMetadata(input.metadata, input.description);\n  const canonicalStatus = canonicalizeBillingSubscriptionStatus({\n    providerStatus: input.providerStatus,\n  });\n  const active = canonicalStatus === \"active\" || canonicalStatus === \"past_due\";\n  const plans = plan && active ? [plan] : [];\n  return {\n    features: plans[0] ? featuresForPlan(plans[0]) : { ...EMPTY_FEATURES },\n    plans,\n    subscription: {\n      canonicalStatus,\n      providerStatus: input.providerStatus,\n      renewsAt: input.nextPaymentDate ?? null,\n      status: canonicalStatus,\n    },\n  };\n}\n\nexport async function getSelfEntitlements(input: {\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n}): Promise<BillingEntitlementsSnapshot> {\n  const result = await input.sql.query(LIST_OWNED_SUBSCRIPTIONS_SQL, [\n    \"user\",\n    input.principal.userId,\n  ]);\n  const row = result.rows[0];\n  if (!row) {\n    return {\n      features: { ...EMPTY_FEATURES },\n      plans: [],\n      subscription: null,\n    };\n  }\n  return projectBillingEntitlementsFromCanonical({\n    description: typeof row.description === \"string\" ? row.description : null,\n    metadata: row.metadata,\n    nextPaymentDate:\n      typeof row.next_payment_date === \"string\" ? row.next_payment_date : null,\n    providerStatus: String(row.status ?? \"\"),\n  });\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { billingSubjectNotFound } from \"../../subject/errors.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingInvoice } from \"../../types.ts\";\nimport type { BillingPage } from \"../types.ts\";\n\nexport const SELF_LIST_LIMIT_DEFAULT = 50;\nexport const SELF_LIST_LIMIT_MAX = 100;\n\nexport function clampSelfListLimit(limit: unknown): number {\n  const raw =\n    typeof limit === \"number\" && Number.isFinite(limit)\n      ? Math.trunc(limit)\n      : SELF_LIST_LIMIT_DEFAULT;\n  return Math.min(SELF_LIST_LIMIT_MAX, Math.max(1, raw));\n}\n\nconst LIST_OWNED_INVOICES_SQL = `\nSELECT *\nFROM billing.billing_invoices\nWHERE subject_kind = $1\n  AND subject_id = $2\n  AND ownership_status = 'resolved'\nORDER BY ingested_at DESC\nLIMIT $3\n`;\n\nconst GET_OWNED_INVOICE_SQL = `\nSELECT *\nFROM billing.billing_invoices\nWHERE id = $1\n  AND subject_kind = $2\n  AND subject_id = $3\n  AND ownership_status = 'resolved'\n`;\n\nfunction asInvoice(row: Record<string, unknown>): BillingInvoice {\n  return {\n    amount: {\n      currency:\n        typeof row.amount_currency === \"string\" ? row.amount_currency : \"EUR\",\n      value: String(row.amount_value ?? \"0\"),\n    },\n    metadata: row.metadata ?? {},\n    provider: row.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n    providerInvoiceId: String(row.provider_invoice_id ?? \"\"),\n    raw: row.raw ?? {},\n    status: String(row.status ?? \"open\"),\n  } as BillingInvoice;\n}\n\nexport async function listSelfInvoices(input: {\n  limit?: number;\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n}): Promise<BillingPage<BillingInvoice>> {\n  const result = await input.sql.query(LIST_OWNED_INVOICES_SQL, [\n    \"user\",\n    input.principal.userId,\n    clampSelfListLimit(input.limit),\n  ]);\n  return { items: result.rows.map(asInvoice) };\n}\n\nexport async function getSelfInvoice(input: {\n  invoiceId: string;\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n}): Promise<BillingInvoice> {\n  const result = await input.sql.query(GET_OWNED_INVOICE_SQL, [\n    input.invoiceId,\n    \"user\",\n    input.principal.userId,\n  ]);\n  const row = result.rows[0];\n  if (!row) {\n    throw billingSubjectNotFound();\n  }\n  return asInvoice(row);\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { billingSubjectNotFound } from \"../../subject/errors.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingPage, BillingSelfPaymentView } from \"../types.ts\";\nimport { clampSelfListLimit } from \"./invoices.ts\";\n\nconst LIST_OWNED_PAYMENTS_SQL = `\nSELECT\n  id,\n  provider,\n  provider_payment_id,\n  status,\n  amount_currency,\n  amount_value,\n  description,\n  created_at,\n  ingested_at,\n  paid_at,\n  metadata->>'priceId' AS price_id\nFROM billing.billing_payments\nWHERE subject_kind = $1\n  AND subject_id = $2\n  AND ownership_status = 'resolved'\nORDER BY ingested_at DESC\nLIMIT $3\n`;\n\nconst GET_OWNED_PAYMENT_SQL = `\nSELECT\n  id,\n  provider,\n  provider_payment_id,\n  status,\n  amount_currency,\n  amount_value,\n  description,\n  created_at,\n  ingested_at,\n  paid_at,\n  metadata->>'priceId' AS price_id\nFROM billing.billing_payments\nWHERE id = $1\n  AND subject_kind = $2\n  AND subject_id = $3\n  AND ownership_status = 'resolved'\n`;\n\nfunction isoDate(value: unknown): string | undefined {\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}\n\nexport function asSelfPaymentView(\n  row: Record<string, unknown>\n): BillingSelfPaymentView {\n  const createdAt =\n    isoDate(row.created_at) ??\n    isoDate(row.ingested_at) ??\n    new Date(0).toISOString();\n  const paidAt = isoDate(row.paid_at);\n  const description =\n    typeof row.description === \"string\" && row.description.trim().length > 0\n      ? row.description\n      : undefined;\n  const metadata = row.metadata;\n  const metadataPriceId =\n    metadata != null &&\n    typeof metadata === \"object\" &&\n    !Array.isArray(metadata) &&\n    typeof (metadata as { priceId?: unknown }).priceId === \"string\"\n      ? (metadata as { priceId: string }).priceId\n      : undefined;\n  const priceId =\n    typeof row.price_id === \"string\" && row.price_id.trim().length > 0\n      ? row.price_id\n      : metadataPriceId && metadataPriceId.trim().length > 0\n        ? metadataPriceId\n        : undefined;\n  const reference =\n    typeof row.provider_payment_id === \"string\" &&\n    row.provider_payment_id.trim().length > 0\n      ? row.provider_payment_id\n      : undefined;\n  return {\n    amount: {\n      currency:\n        typeof row.amount_currency === \"string\" ? row.amount_currency : \"EUR\",\n      value: String(row.amount_value ?? \"0\"),\n    },\n    createdAt,\n    id: String(row.id ?? \"\"),\n    provider: row.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n    status: String(row.status ?? \"pending\"),\n    ...(description ? { description } : {}),\n    ...(paidAt ? { paidAt } : {}),\n    ...(priceId ? { priceId } : {}),\n    ...(reference ? { reference } : {}),\n  };\n}\n\nexport async function listSelfPayments(input: {\n  limit?: number;\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n}): Promise<BillingPage<BillingSelfPaymentView>> {\n  const result = await input.sql.query(LIST_OWNED_PAYMENTS_SQL, [\n    \"user\",\n    input.principal.userId,\n    clampSelfListLimit(input.limit),\n  ]);\n  return { items: result.rows.map(asSelfPaymentView) };\n}\n\nexport async function getSelfPayment(input: {\n  paymentId: string;\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n}): Promise<BillingSelfPaymentView> {\n  const result = await input.sql.query(GET_OWNED_PAYMENT_SQL, [\n    input.paymentId,\n    \"user\",\n    input.principal.userId,\n  ]);\n  const row = result.rows[0];\n  if (!row) {\n    throw billingSubjectNotFound();\n  }\n  return asSelfPaymentView(row);\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport type { CanonicalPayment } from \"../../canonical/document.ts\";\nimport { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\";\nimport {\n  billingSubjectNotFound,\n  isAthenaBillingSubjectError,\n} from \"../../subject/errors.ts\";\nimport { requireBillingPrincipalUserId } from \"../../subject/principal-user.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingPayment, BillingPaymentStatus } from \"../../types.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport { executeLocalBillingPaymentGet } from \"../local/execute/payments.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport type {\n  BillingSelfCheckoutResumeResult,\n  BillingSelfPaymentView,\n} from \"../types.ts\";\nimport { advanceSelfSubscriptionEnrollment } from \"./advance-enrollment.ts\";\nimport { createProviderPaymentFromCheckoutSnapshot } from \"./checkout-payment.ts\";\nimport { checkoutSessionNeedsEnrollmentAdvance } from \"./checkout-workflow.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport {\n  type BillingCheckoutSessionStatus,\n  getCheckoutSessionByReturnNonce,\n  isCheckoutSessionResumeExpired,\n  updateCheckoutSession,\n} from \"./enrollment-session.ts\";\nimport { persistOwnedPayment } from \"./persist-owned-payment.ts\";\nimport { hashBillingReturnNonce } from \"./return-token.ts\";\n\nfunction asPaymentStatus(value: string): BillingPaymentStatus {\n  if (\n    value === \"authorized\" ||\n    value === \"paid\" ||\n    value === \"failed\" ||\n    value === \"canceled\" ||\n    value === \"refunded\"\n  ) {\n    return value;\n  }\n  return \"pending\";\n}\n\nfunction sessionStatusFromPayment(\n  status: BillingPaymentStatus,\n  current: BillingCheckoutSessionStatus\n): BillingCheckoutSessionStatus {\n  if (current === \"enrolled\") {\n    return \"enrolled\";\n  }\n  if (status === \"paid\" || status === \"authorized\" || status === \"refunded\") {\n    return \"first_payment_paid\";\n  }\n  if (status === \"failed\") {\n    return \"first_payment_failed\";\n  }\n  if (status === \"canceled\") {\n    return \"first_payment_canceled\";\n  }\n  return \"first_payment_required\";\n}\n\nfunction paymentToCanonical(payment: BillingPayment): CanonicalPayment {\n  return {\n    amount: payment.amount,\n    createdAt: payment.createdAt,\n    description: payment.description,\n    kind: \"payment\",\n    metadata: payment.metadata ?? {},\n    paidAt: payment.paidAt,\n    provider: payment.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n    providerCustomerId: payment.providerCustomerId,\n    providerPaymentId: payment.providerPaymentId,\n    raw: payment.raw,\n    status: asPaymentStatus(payment.status),\n  };\n}\n\nexport async function resumeSelfCheckout(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  principal: AthenaPrincipal;\n  registry?: BillingProviderRegistry;\n  returnToken: string;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n}): Promise<BillingSelfCheckoutResumeResult> {\n  const subjectUserId = requireBillingPrincipalUserId(input.principal);\n  const command = prepareBillingCommand({\n    operation: \"self.checkout.resume\",\n    payload: { returnToken: input.returnToken },\n  });\n  const returnToken = String(command.payload.returnToken);\n  const session = await getCheckoutSessionByReturnNonce({\n    returnNonceHash: hashBillingReturnNonce(returnToken),\n    sql: input.sql,\n    subjectId: subjectUserId,\n    subjectKind: \"user\",\n  });\n  if (session == null || isCheckoutSessionResumeExpired(session)) {\n    throw billingSubjectNotFound();\n  }\n  if (input.registry == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.checkout.resume\",\n      reason: \"runtime_unavailable\",\n    });\n  }\n  const delegated = selfDelegatedBillingPrincipal(input.principal, [\n    \"payments.get\",\n  ]);\n  let paymentId = session.providerPaymentId;\n  if (paymentId == null || paymentId.trim() === \"\") {\n    const recovered = await createProviderPaymentFromCheckoutSnapshot({\n      configuredProviders: input.configuredProviders,\n      principal: input.principal,\n      registry: input.registry,\n      session,\n      sql: input.sql,\n      testMode: input.testMode,\n    });\n    if (recovered) {\n      paymentId = recovered.providerPaymentId;\n      await updateCheckoutSession({\n        id: session.id,\n        providerCustomerId:\n          recovered.providerCustomerId ?? session.providerCustomerId,\n        providerPaymentId: paymentId,\n        sql: input.sql,\n        status: session.status,\n      });\n    }\n  }\n  if (paymentId == null || paymentId.trim() === \"\") {\n    return {\n      checkout: {\n        id: session.id,\n        kind:\n          session.kind === \"one_off\" ? \"one_off\" : \"subscription_enrollment\",\n        priceId: session.priceId,\n        status: session.status,\n      },\n      payment: null,\n    };\n  }\n  const payment = await executeLocalBillingPaymentGet({\n    authority: PROCESS_BILLING_INVOCATION,\n    configuredProviders: input.configuredProviders,\n    payload: { id: paymentId },\n    principal: delegated,\n    registry: input.registry,\n    testMode: input.testMode,\n  });\n  let view: BillingSelfPaymentView;\n  try {\n    view = await persistOwnedPayment({\n      connectionId: session.connectionId,\n      payment,\n      principal: input.principal,\n      sql: input.sql,\n    });\n  } catch (error) {\n    if (isAthenaBillingSubjectError(error) && error.status === 409) {\n      throw billingSubjectNotFound();\n    }\n    throw error;\n  }\n  const nextStatus = sessionStatusFromPayment(\n    asPaymentStatus(payment.status),\n    session.status\n  );\n  if (nextStatus !== session.status) {\n    await updateCheckoutSession({\n      id: session.id,\n      providerCustomerId:\n        payment.providerCustomerId ?? session.providerCustomerId,\n      providerPaymentId: payment.providerPaymentId,\n      sql: input.sql,\n      status: nextStatus,\n    });\n  }\n  if (checkoutSessionNeedsEnrollmentAdvance(session)) {\n    await advanceSelfSubscriptionEnrollment({\n      configuredProviders: input.configuredProviders,\n      document: paymentToCanonical(payment),\n      registry: input.registry,\n      sql: input.sql,\n      testMode: input.testMode,\n    });\n  }\n  return {\n    checkout: {\n      id: session.id,\n      kind: session.kind === \"one_off\" ? \"one_off\" : \"subscription_enrollment\",\n      priceId: session.priceId,\n      status: nextStatus,\n    },\n    payment: view,\n  };\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport { billingSubjectConflict } from \"../../subject/errors.ts\";\nimport { requireBillingPrincipalUserId } from \"../../subject/principal-user.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport {\n  requireReadyBillingConnectionId,\n  resolveActiveBillingConnection,\n} from \"../../subject/sole-connection.ts\";\nimport type { BillingPayment } from \"../../types.ts\";\nimport type { BillingSelfPaymentView } from \"../types.ts\";\nimport { asSelfPaymentView } from \"./payments.ts\";\n\nconst PERSIST_OWNED_PAYMENT_SQL = `\nINSERT INTO billing.billing_payments (\n\tconnection_id,\n\tprovider,\n\tprovider_payment_id,\n\tprovider_customer_id,\n\tstatus,\n\tamount_currency,\n\tamount_value,\n\tdescription,\n\tmetadata,\n\traw,\n\tpaid_at,\n\tcreated_at,\n\tsubject_kind,\n\tsubject_id,\n\townership_status\n) VALUES (\n\t$1::uuid, $2, $3, $4, $5, $6, $7, $8, $9::jsonb, $10::jsonb, $11, $12, 'user', $13, 'resolved'\n)\nON CONFLICT (connection_id, provider_payment_id) WHERE connection_id IS NOT NULL DO UPDATE SET\n\tstatus = EXCLUDED.status,\n\tamount_currency = EXCLUDED.amount_currency,\n\tamount_value = EXCLUDED.amount_value,\n\tdescription = EXCLUDED.description,\n\tmetadata = EXCLUDED.metadata,\n\traw = EXCLUDED.raw,\n\tpaid_at = EXCLUDED.paid_at,\n\tsubject_kind = EXCLUDED.subject_kind,\n\tsubject_id = EXCLUDED.subject_id,\n\townership_status = 'resolved'\nWHERE\n\tbilling.billing_payments.ownership_status IS DISTINCT FROM 'resolved'\n\tOR (\n\t\tbilling.billing_payments.subject_kind IS NOT DISTINCT FROM EXCLUDED.subject_kind\n\t\tAND billing.billing_payments.subject_id IS NOT DISTINCT FROM EXCLUDED.subject_id\n\t)\nRETURNING *\n`;\n\nexport async function persistOwnedPayment(input: {\n  connectionId?: string | null;\n  payment: BillingPayment;\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n}): Promise<BillingSelfPaymentView> {\n  const connectionId =\n    input.connectionId?.trim() ||\n    requireReadyBillingConnectionId(\n      await resolveActiveBillingConnection(input.sql),\n      \"self.checkout.resume\"\n    );\n  if (connectionId.length === 0) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.checkout.resume\",\n      reason: \"provider_connection_missing\",\n    });\n  }\n  const result = await input.sql.query(PERSIST_OWNED_PAYMENT_SQL, [\n    connectionId,\n    input.payment.provider,\n    input.payment.providerPaymentId,\n    input.payment.providerCustomerId ?? null,\n    input.payment.status,\n    input.payment.amount.currency,\n    input.payment.amount.value,\n    input.payment.description ?? null,\n    JSON.stringify(input.payment.metadata ?? {}),\n    JSON.stringify(input.payment.raw ?? {}),\n    input.payment.paidAt ?? null,\n    input.payment.createdAt ?? null,\n    requireBillingPrincipalUserId(input.principal),\n  ]);\n  const row = result.rows[0];\n  if (!row) {\n    throw billingSubjectConflict(\n      \"This provider payment is already bound to another billing subject.\"\n    );\n  }\n  return asSelfPaymentView(row);\n}\n","import { AthenaBillingCapabilityError } from \"../errors.ts\";\nimport type { BillingSqlExecutor } from \"./repository.ts\";\n\nexport type ActiveBillingConnectionResolution =\n  | { status: \"none\" }\n  | { status: \"ready\"; connectionId: string }\n  | { status: \"ambiguous\" };\n\n/**\n * Active billing connection when exactly one row exists.\n * Zero and many active rows are distinct outcomes — never collapsed.\n */\nexport async function resolveActiveBillingConnection(\n  sql: BillingSqlExecutor\n): Promise<ActiveBillingConnectionResolution> {\n  const result = await sql.query(\n    `SELECT id::text AS id\n\t\t\t FROM billing.billing_provider_connections\n\t\t\t WHERE status = 'active'\n\t\t\t LIMIT 2`\n  );\n  if (result.rows.length === 0) {\n    return { status: \"none\" };\n  }\n  if (result.rows.length > 1) {\n    return { status: \"ambiguous\" };\n  }\n  const id = result.rows[0]?.id;\n  if (typeof id !== \"string\" || id.trim() === \"\") {\n    return { status: \"none\" };\n  }\n  return { connectionId: id, status: \"ready\" };\n}\n\nexport function requireReadyBillingConnectionId(\n  resolution: ActiveBillingConnectionResolution,\n  operation: string\n): string {\n  if (resolution.status === \"ready\") {\n    return resolution.connectionId;\n  }\n  if (resolution.status === \"ambiguous\") {\n    throw new AthenaBillingCapabilityError({\n      operation,\n      reason: \"provider_connection_ambiguous\",\n    });\n  }\n  throw new AthenaBillingCapabilityError({\n    operation,\n    reason: \"provider_connection_missing\",\n  });\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { billingSubjectNotFound } from \"../../subject/errors.ts\";\nimport { requireBillingPrincipalUserId } from \"../../subject/principal-user.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type {\n  BillingSelfSubscriptionChangeOperation,\n  BillingSelfSubscriptionChangeStatus,\n} from \"../../runtime/types.ts\";\nimport { createBillingPlanChangeRepository } from \"./plan-change-repository.ts\";\n\nfunction operationStatus(\n  state: BillingSelfSubscriptionChangeOperation[\"state\"]\n): BillingSelfSubscriptionChangeStatus {\n  if (state === \"completed\") {\n    return \"completed\";\n  }\n  if (state === \"attention_required\") {\n    return \"attention_required\";\n  }\n  if (state === \"failed\") {\n    return \"failed\";\n  }\n  return \"processing\";\n}\n\nexport async function getSelfSubscriptionChangeOperation(input: {\n  operationId: string;\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n}): Promise<BillingSelfSubscriptionChangeOperation> {\n  const subjectId = requireBillingPrincipalUserId(input.principal);\n  const operation = await createBillingPlanChangeRepository(input.sql).load(\n    input.operationId\n  );\n  if (\n    operation == null ||\n    operation.subjectKind !== \"user\" ||\n    operation.subjectId !== subjectId\n  ) {\n    throw billingSubjectNotFound(\"Plan-change operation was not found.\");\n  }\n  return {\n    ...(operation.lastError ? { error: operation.lastError } : {}),\n    operationId: operation.id,\n    ...(operation.priceId ? { priceId: operation.priceId } : {}),\n    state: operation.state,\n    status: operationStatus(operation.state),\n    ...(operation.updatedAt ? { updatedAt: operation.updatedAt } : {}),\n  };\n}\n","export {\n  executeLocalBillingCustomerCreate,\n  executeLocalBillingCustomerDelete,\n  executeLocalBillingCustomerGet,\n  executeLocalBillingCustomerList,\n  executeLocalBillingCustomerUpdate,\n} from \"./customers.ts\";\nexport {\n  executeLocalBillingInvoiceGet,\n  executeLocalBillingInvoiceList,\n} from \"./invoices.ts\";\nexport {\n  executeLocalBillingOperation,\n  type LocalBillingExecutorRequest,\n} from \"./invoke.ts\";\nexport {\n  executeLocalBillingPaymentLinkCreate,\n  executeLocalBillingPaymentLinkDelete,\n  executeLocalBillingPaymentLinkGet,\n  executeLocalBillingPaymentLinkList,\n  executeLocalBillingPaymentLinkUpdate,\n} from \"./payment-links.ts\";\nexport {\n  executeLocalBillingPaymentCancel,\n  executeLocalBillingPaymentCreate,\n  executeLocalBillingPaymentGet,\n  executeLocalBillingPaymentList,\n} from \"./payments.ts\";\nexport { executeLocalBillingPriceList } from \"./price-list.ts\";\nexport { executeLocalBillingProductList } from \"./product-list.ts\";\nexport {\n  executeLocalBillingRefundCancel,\n  executeLocalBillingRefundCreate,\n  executeLocalBillingRefundGet,\n  executeLocalBillingRefundList,\n} from \"./refunds.ts\";\nexport { executeLocalBillingRelationList } from \"./relation-list.ts\";\nexport {\n  type PreparedBillingInvocation,\n  prepareLocalBillingInvocation,\n  type ResolvedLocalBillingProviderExecution,\n  resolveLocalBillingProviderExecution,\n} from \"./shared.ts\";\nexport {\n  executeLocalBillingSubscriptionCancel,\n  executeLocalBillingSubscriptionCreate,\n  executeLocalBillingSubscriptionGet,\n  executeLocalBillingSubscriptionList,\n  executeLocalBillingSubscriptionUpdate,\n} from \"./subscriptions.ts\";\nexport {\n  executeLocalBillingWebhookCreate,\n  executeLocalBillingWebhookDelete,\n  executeLocalBillingWebhookList,\n  executeLocalBillingWebhookUpdate,\n} from \"./webhooks.ts\";\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n  BillingGetInvoiceInput,\n  BillingInvoice,\n  BillingListInvoicesInput,\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 executeLocalBillingInvoiceGet(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingGetInvoiceInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingInvoice> {\n  return executeLocalBillingOperation({\n    invoke: (invoices, context, payload) =>\n      invoices.get(context, { invoiceId: payload.invoiceId }),\n    operation: \"invoices.get\",\n    port: \"invoices\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingInvoiceList(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingListInvoicesInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPage<BillingInvoice>> {\n  return executeLocalBillingOperation({\n    before: (payload) =>\n      rejectUnsupportedListOffset(\"invoices.list\", payload.offset),\n    invoke: (invoices, context, payload) =>\n      invoices.list(context, {\n        cursor: payload.cursor,\n        limit: payload.limit,\n      }),\n    operation: \"invoices.list\",\n    port: \"invoices\",\n    request: input,\n  });\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n  BillingCreatePaymentLinkInput,\n  BillingDeletePaymentLinkInput,\n  BillingGetPaymentLinkInput,\n  BillingListPaymentLinksInput,\n  BillingPaymentLink,\n  BillingUpdatePaymentLinkInput,\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 executeLocalBillingPaymentLinkCreate(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingCreatePaymentLinkInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPaymentLink> {\n  return executeLocalBillingOperation({\n    invoke: (paymentLinks, context, payload) =>\n      paymentLinks.create(context, {\n        amount: payload.amount,\n        description: payload.description,\n        idempotencyKey: payload.idempotencyKey,\n        redirectUrl: payload.redirectUrl,\n      }),\n    operation: \"paymentLinks.create\",\n    port: \"paymentLinks\",\n    request: input,\n    safety: \"defer-then-finalize\",\n  });\n}\n\nexport async function executeLocalBillingPaymentLinkGet(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingGetPaymentLinkInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPaymentLink> {\n  return executeLocalBillingOperation({\n    invoke: (paymentLinks, context, payload) =>\n      paymentLinks.get(context, { id: payload.id }),\n    operation: \"paymentLinks.get\",\n    port: \"paymentLinks\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingPaymentLinkList(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingListPaymentLinksInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPage<BillingPaymentLink>> {\n  return executeLocalBillingOperation({\n    before: (payload) =>\n      rejectUnsupportedListOffset(\"paymentLinks.list\", payload.offset),\n    invoke: (paymentLinks, context, payload) =>\n      paymentLinks.list(context, {\n        cursor: payload.cursor,\n        limit: payload.limit,\n      }),\n    operation: \"paymentLinks.list\",\n    port: \"paymentLinks\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingPaymentLinkUpdate(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingUpdatePaymentLinkInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPaymentLink> {\n  return executeLocalBillingOperation({\n    invoke: (paymentLinks, context, payload) =>\n      paymentLinks.update(context, {\n        description: payload.description,\n        id: payload.id,\n      }),\n    operation: \"paymentLinks.update\",\n    port: \"paymentLinks\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingPaymentLinkDelete(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingDeletePaymentLinkInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<void> {\n  return executeLocalBillingOperation({\n    invoke: async (paymentLinks, context, payload) => {\n      await paymentLinks.delete(context, { id: payload.id });\n    },\n    operation: \"paymentLinks.delete\",\n    port: \"paymentLinks\",\n    request: input,\n  });\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n  BillingCancelRefundInput,\n  BillingCreateRefundInput,\n  BillingGetRefundInput,\n  BillingListRefundsInput,\n  BillingRefund,\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 executeLocalBillingRefundCreate(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingCreateRefundInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingRefund> {\n  return executeLocalBillingOperation({\n    invoke: (refunds, context, payload) =>\n      refunds.create(context, {\n        amount: payload.amount,\n        description: payload.description,\n        idempotencyKey: payload.idempotencyKey,\n        paymentId: payload.paymentId,\n      }),\n    operation: \"refunds.create\",\n    port: \"refunds\",\n    request: input,\n    safety: \"defer-then-finalize\",\n  });\n}\n\nexport async function executeLocalBillingRefundGet(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingGetRefundInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingRefund> {\n  return executeLocalBillingOperation({\n    invoke: (refunds, context, payload) =>\n      refunds.get(context, {\n        paymentId: payload.paymentId,\n        refundId: payload.refundId,\n      }),\n    operation: \"refunds.get\",\n    port: \"refunds\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingRefundCancel(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingCancelRefundInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingRefund> {\n  return executeLocalBillingOperation({\n    invoke: (refunds, context, payload) =>\n      refunds.cancel(context, {\n        ...(typeof payload.idempotencyKey === \"string\"\n          ? { idempotencyKey: payload.idempotencyKey }\n          : {}),\n        paymentId: payload.paymentId,\n        refundId: payload.refundId,\n      }),\n    operation: \"refunds.cancel\",\n    port: \"refunds\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingRefundList(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingListRefundsInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPage<BillingRefund>> {\n  return executeLocalBillingOperation({\n    before: (payload) =>\n      rejectUnsupportedListOffset(\"refunds.list\", payload.offset),\n    invoke: (refunds, context, payload) =>\n      refunds.list(context, {\n        cursor: payload.cursor,\n        limit: payload.limit,\n      }),\n    operation: \"refunds.list\",\n    port: \"refunds\",\n    request: input,\n  });\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport { DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES } from \"../../../ingestion/types.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n  BillingCreateWebhookInput,\n  BillingDeleteWebhookInput,\n  BillingListWebhooksInput,\n  BillingUpdateWebhookInput,\n  BillingWebhook,\n} from \"../../../types.ts\";\nimport type { BillingInvocationAuthority } from \"../../invocation-authority.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport { normalizeBillingProviderName } from \"../providers/registry.ts\";\nimport type { BillingProviderWebhook } from \"../providers/types.ts\";\nimport { executeLocalBillingOperation } from \"./invoke.ts\";\nimport { rejectUnsupportedListOffset, requireProviderPort } from \"./shared.ts\";\n\nconst DEFAULT_WEBHOOK_NAME = \"athena-billing\";\n\nfunction defaultWebhookIdempotencyKey(input: {\n  environment: \"test\" | \"live\";\n  eventTypes: readonly string[];\n  name: string;\n  url: string;\n}): string {\n  const eventTypes = [\n    ...new Set(input.eventTypes.map((eventType) => eventType.trim())),\n  ].sort();\n  return [\n    \"athena-webhook\",\n    input.environment,\n    encodeURIComponent(input.url),\n    encodeURIComponent(input.name),\n    eventTypes.map(encodeURIComponent).join(\",\"),\n  ].join(\":\");\n}\n\nexport function projectBillingWebhook(\n  webhook: BillingProviderWebhook\n): BillingWebhook {\n  return {\n    eventTypes: [...webhook.eventTypes],\n    metadata: {},\n    mode: webhook.environment,\n    name: webhook.name ?? null,\n    provider: normalizeBillingProviderName(webhook.provider),\n    providerWebhookId: webhook.id,\n    raw: webhook,\n    status: webhook.status,\n    url: webhook.url,\n  };\n}\n\nexport async function executeLocalBillingWebhookCreate(input: {\n  authority: BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingCreateWebhookInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingWebhook> {\n  const webhook = await executeLocalBillingOperation({\n    invoke: (webhooks, context, payload) =>\n      webhooks.create(context, {\n        eventTypes: payload.eventTypes ?? DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n        idempotencyKey:\n          payload.idempotencyKey ??\n          defaultWebhookIdempotencyKey({\n            environment: context.environment.testMode ? \"test\" : \"live\",\n            eventTypes:\n              payload.eventTypes ?? DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n            name: payload.name ?? DEFAULT_WEBHOOK_NAME,\n            url: payload.url,\n          }),\n        name: payload.name ?? DEFAULT_WEBHOOK_NAME,\n        url: payload.url,\n      }),\n    operation: \"webhooks.create\",\n    port: \"webhooks\",\n    request: input,\n  });\n  return projectBillingWebhook(webhook);\n}\n\nexport async function executeLocalBillingWebhookList(input: {\n  authority: BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingListWebhooksInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPage<BillingWebhook>> {\n  const page = await executeLocalBillingOperation({\n    before: (payload) =>\n      rejectUnsupportedListOffset(\"webhooks.list\", payload.offset),\n    invoke: (webhooks, context, payload) => webhooks.list(context, payload),\n    operation: \"webhooks.list\",\n    port: \"webhooks\",\n    request: input,\n  });\n  return {\n    items: page.items.map(projectBillingWebhook),\n    nextCursor: page.nextCursor,\n  };\n}\n\nexport async function executeLocalBillingWebhookUpdate(input: {\n  authority: BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingUpdateWebhookInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingWebhook> {\n  const webhook = await executeLocalBillingOperation({\n    invoke: (webhooks, context, payload) =>\n      requireProviderPort(webhooks.update, \"webhooks.update\")(context, {\n        eventTypes: payload.eventTypes,\n        id: payload.id,\n        name: payload.name,\n        url: payload.url,\n      }),\n    operation: \"webhooks.update\",\n    port: \"webhooks\",\n    request: input,\n  });\n  return projectBillingWebhook(webhook);\n}\n\nexport async function executeLocalBillingWebhookDelete(input: {\n  authority: BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingDeleteWebhookInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<void> {\n  await executeLocalBillingOperation({\n    invoke: async (webhooks, context, payload) => {\n      await requireProviderPort(webhooks.delete, \"webhooks.delete\")(context, {\n        id: payload.id,\n      });\n    },\n    operation: \"webhooks.delete\",\n    port: \"webhooks\",\n    request: input,\n  });\n}\n","/**\n * Node storage materializer — plan-selected provider plus opaque handles.\n */\n\nimport { createLocalStorageModule } from \"../../storage/local.ts\";\nimport { createStorageRuntime } from \"../../storage/runtime/index.ts\";\nimport { createLocalStorageProvider } from \"../../storage/runtime/providers/local-provider.ts\";\nimport { createR2StorageProvider } from \"../../storage/runtime/providers/r2-provider.ts\";\nimport {\n  createS3StorageProvider,\n  isAthenaS3ObjectClient,\n} from \"../../storage/runtime/providers/s3-provider.ts\";\nimport { ATHENA_LOCAL_OBJECT_STORE } from \"../../storage/runtime.ts\";\nimport {\n  ATHENA_STORAGE_PROVIDER,\n  ATHENA_STORAGE_RUNTIME,\n} from \"../../storage/runtime/types.ts\";\nimport { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { AthenaRuntimePlan } from \"../plan/types.ts\";\nimport type {\n  AthenaRuntimeConfigBindings,\n  AthenaStorageRuntimeResources,\n} from \"../construction/types.ts\";\n\nexport interface AthenaMaterializedStorage {\n  readonly bindings: Pick<AthenaRuntimeConfigBindings<never>, \"storage\">;\n}\n\nfunction bindingFor(\n  provider: NonNullable<AthenaStorageRuntimeResources[\"existingProvider\"]>,\n  resources: AthenaStorageRuntimeResources,\n): AthenaMaterializedStorage {\n  const runtime =\n    resources.existingRuntime ??\n    createStorageRuntime({\n      lifecycle: resources.lifecycle,\n      provider,\n    });\n  return {\n    bindings: {\n      storage: {\n        ...(resources.existingLocalStore\n          ? { [ATHENA_LOCAL_OBJECT_STORE]: resources.existingLocalStore }\n          : {}),\n        [ATHENA_STORAGE_PROVIDER]: provider,\n        [ATHENA_STORAGE_RUNTIME]: runtime,\n      },\n    },\n  };\n}\n\nfunction materializeStorageBinding(\n  plan: AthenaRuntimePlan,\n  resources: AthenaStorageRuntimeResources,\n): AthenaMaterializedStorage {\n  if (plan.storage.transport === \"local\") {\n    if (!plan.storage.root) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_RUNTIME_CONFIG_INVALID\",\n        'storage.provider \"local\" requires a filesystem root.',\n        \"storage\",\n      );\n    }\n    const store =\n      resources.existingLocalStore ??\n      createLocalStorageModule({\n        prefix: plan.storage.prefix,\n        root: plan.storage.root,\n      });\n    const provider =\n      resources.existingProvider ?? createLocalStorageProvider(store);\n    return bindingFor(provider, { ...resources, existingLocalStore: store });\n  }\n\n  if (plan.storage.transport === \"r2\") {\n    if (!resources.r2) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_RUNTIME_CONFIG_INVALID\",\n        'storage provider \"r2\" requires an injected R2 binding.',\n        \"storage\",\n      );\n    }\n    const provider =\n      resources.existingProvider ??\n      createR2StorageProvider(resources.r2, plan.storage.prefix);\n    return bindingFor(provider, resources);\n  }\n\n  if (plan.storage.transport === \"s3\") {\n    if (\n      !plan.storage.bucket ||\n      !resources.s3 ||\n      !isAthenaS3ObjectClient(resources.s3)\n    ) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_RUNTIME_CONFIG_INVALID\",\n        'storage.provider \"s3\" requires a bucket and an injected S3 object client (getObject/putObject/headObject/deleteObject/listObjectsV2).',\n        \"storage\",\n      );\n    }\n    const provider =\n      resources.existingProvider ??\n      createS3StorageProvider({\n        bucket: plan.storage.bucket,\n        prefix: plan.storage.prefix,\n        s3: resources.s3,\n      });\n    return bindingFor(provider, resources);\n  }\n\n  return { bindings: {} };\n}\n\nexport function materializeStoragePlan(\n  plan: AthenaRuntimePlan,\n  resources: AthenaStorageRuntimeResources,\n): AthenaMaterializedStorage {\n  return materializeStorageBinding(plan, resources);\n}\n\nexport { materializeStorageCompat as materializeStorage } from \"../compat/materializers.ts\";\n","/**\n * Trusted-Node filesystem ObjectStore behind `athena.storage`.\n *\n * Catalog-optional: keys resolve under a configured root. Unsupported\n * control-plane ops throw `ATHENA_STORAGE_CAPABILITY_UNSUPPORTED`.\n */\n\nimport type { Dirent } from \"node:fs\";\nimport {\n  mkdir,\n  readdir,\n  readFile,\n  rename,\n  rm,\n  stat,\n  writeFile,\n} from \"node:fs/promises\";\nimport {\n  basename,\n  dirname,\n  isAbsolute,\n  relative,\n  resolve,\n  sep,\n} from \"node:path\";\n\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport {\n  ATHENA_STORAGE_CAPABILITY_UNSUPPORTED,\n  AthenaStorageCapabilityError,\n} from \"./errors.ts\";\nimport type { AthenaStorageUploadProgress } from \"./file.ts\";\nimport type { AthenaStorageModule } from \"./module.ts\";\nimport {\n  isFolderPrefixInside,\n  joinObjectKey,\n  normalizeObjectPrefix,\n  renameObjectKey,\n  validateFolderSegment,\n} from \"./object-keys.ts\";\n\nexport interface AthenaLocalStorageOptions {\n  prefix?: string | null;\n  root: string;\n}\n\nfunction capabilityError(operation: string): AthenaStorageCapabilityError {\n  return new AthenaStorageCapabilityError(operation);\n}\n\nfunction rejectUnsupported(operation: string): Promise<never> {\n  return Promise.reject(capabilityError(operation));\n}\n\nfunction unsupportedTree(path: string): unknown {\n  const thrower = (): Promise<never> => rejectUnsupported(path);\n  return new Proxy(thrower, {\n    apply() {\n      return rejectUnsupported(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 unsupportedTree(`${path}.${property}`);\n      }\n    },\n  });\n}\n\nfunction normalizePrefix(prefix: string | undefined | null): string {\n  if (!prefix?.trim()) {\n    return \"\";\n  }\n  const normalized = prefix.replace(/^\\/+/, \"\").replace(/\\/?$/, \"/\");\n  assertSafeObjectKey(normalized.replace(/\\/$/, \"\") || \"prefix\");\n  return normalized;\n}\n\nexport function assertSafeObjectKey(key: string): string {\n  if (typeof key !== \"string\" || !key.trim()) {\n    throw new Error(\"Object key is invalid: key is required\");\n  }\n  if (key.includes(\"\\0\")) {\n    throw new Error(\"Object key is invalid: must not contain null bytes\");\n  }\n  if (/^[a-zA-Z]:[\\\\/]/.test(key)) {\n    throw new Error(\"Object key is invalid: must not be an absolute path\");\n  }\n  if (key.startsWith(\"/\") || key.startsWith(\"\\\\\")) {\n    throw new Error(\"Object key is invalid: must not be an absolute path\");\n  }\n  const cleaned = key.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\");\n  if (!cleaned) {\n    throw new Error(\"Object key is invalid: 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 segments.filter((segment) => segment && segment !== \".\").join(\"/\");\n}\n\nfunction resolveUnderRoot(\n  root: string,\n  key: string\n): { abs: string; key: string } {\n  const logical = assertSafeObjectKey(key);\n  const resolvedRoot = resolve(root);\n  const target = resolve(resolvedRoot, ...logical.split(\"/\"));\n  const rel = relative(resolvedRoot, target);\n  if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n    throw new Error(\"Object key escapes storage root\");\n  }\n  const rootPrefix = resolvedRoot.endsWith(sep)\n    ? resolvedRoot\n    : `${resolvedRoot}${sep}`;\n  if (target !== resolvedRoot && !target.startsWith(rootPrefix)) {\n    throw new Error(\"Object key escapes storage root\");\n  }\n  return { abs: target, key: logical };\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  if (value && typeof value === \"object\" && !Array.isArray(value)) {\n    return value as Record<string, unknown>;\n  }\n}\n\nfunction readString(\n  record: Record<string, unknown> | undefined,\n  ...keys: string[]\n): string | undefined {\n  if (!record) {\n    return;\n  }\n  for (const key of keys) {\n    const value = record[key];\n    if (typeof value === \"string\" && value.trim()) {\n      return value;\n    }\n  }\n}\n\nasync function toBytes(value: unknown): Promise<Uint8Array> {\n  if (value instanceof Uint8Array) {\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  if (typeof value === \"string\") {\n    return new TextEncoder().encode(value);\n  }\n  if (value && typeof value === \"object\") {\n    const record = value as Record<string, unknown>;\n    for (const candidate of [\n      record.body,\n      record.bytes,\n      record.data,\n      record.content,\n      record.files,\n    ]) {\n      if (candidate !== undefined && candidate !== value) {\n        return toBytes(candidate);\n      }\n    }\n  }\n  throw new Error(\"storage.file.upload requires file bytes\");\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 { item?: unknown; length?: unknown };\n  return (\n    typeof record.length === \"number\" &&\n    Number.isFinite(record.length) &&\n    record.length >= 0\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 readOnProgress(\n  input: unknown\n): ((progress: AthenaStorageUploadProgress) => void) | undefined {\n  const record = asRecord(input);\n  const onProgress = record?.onProgress;\n  return typeof onProgress === \"function\"\n    ? (onProgress as (progress: AthenaStorageUploadProgress) => void)\n    : undefined;\n}\n\nfunction readPrefixPath(input: unknown): string {\n  const record = asRecord(input);\n  const prefix = record?.prefixPath ?? record?.prefix;\n  return typeof prefix === \"string\" ? prefix : \"\";\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 extractUploadSource(input: unknown): unknown {\n  if (isBinarySource(input)) {\n    return input;\n  }\n  const record = asRecord(input);\n  if (!record) {\n    return input;\n  }\n  const files = record.files;\n  if (isBinarySource(files)) {\n    return files;\n  }\n  if (Array.isArray(files)) {\n    return files[0];\n  }\n  return record.source ?? record.body ?? files ?? input;\n}\n\nfunction extractKey(input: unknown, fallback?: string): string {\n  if (typeof input === \"string\") {\n    return input;\n  }\n  const record = asRecord(input);\n  const key =\n    readString(record, \"storage_key\", \"storageKey\", \"key\") ?? fallback;\n  if (!key) {\n    throw new Error(\"storage key is required\");\n  }\n  return key;\n}\n\nfunction applyPrefix(prefix: string, key: string): string {\n  if (!prefix) {\n    return key;\n  }\n  return `${prefix}${key}`;\n}\n\nfunction stripPrefix(prefix: string, key: string): string {\n  if (prefix && key.startsWith(prefix)) {\n    return key.slice(prefix.length);\n  }\n  return key;\n}\n\nasync function collectFiles(\n  root: string,\n  dir: string\n): Promise<Array<{ abs: string; key: string; size: number }>> {\n  const out: Array<{ abs: string; key: string; size: number }> = [];\n  let entries: Dirent[];\n  try {\n    entries = await readdir(dir, { withFileTypes: true });\n  } catch (error) {\n    const code =\n      error && typeof error === \"object\" && \"code\" in error\n        ? String((error as { code: unknown }).code)\n        : \"\";\n    if (code === \"ENOENT\") {\n      return out;\n    }\n    throw error;\n  }\n  for (const entry of entries) {\n    const full = `${dir}${sep}${entry.name}`;\n    if (entry.isDirectory()) {\n      const rel = relative(root, full).split(sep).join(\"/\");\n      if (rel) {\n        out.push({ abs: full, key: `${rel}/`, size: 0 });\n      }\n      out.push(...(await collectFiles(root, full)));\n      continue;\n    }\n    if (!entry.isFile()) {\n      continue;\n    }\n    const info = await stat(full);\n    const rel = relative(root, full).split(sep).join(\"/\");\n    out.push({ abs: full, key: rel, size: info.size });\n  }\n  return out;\n}\n\nexport function createLocalStorageModule(\n  options: AthenaLocalStorageOptions\n): AthenaStorageModule {\n  const root = options.root?.trim();\n  if (!root) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      'storage.provider \"local\" requires a filesystem root.',\n      \"storage\"\n    );\n  }\n  const resolvedRoot = resolve(root);\n  const prefix = normalizePrefix(options.prefix);\n\n  const putBytes = async (logicalKey: string, body: Uint8Array) => {\n    const prefixed = applyPrefix(prefix, assertSafeObjectKey(logicalKey));\n    const dest = resolveUnderRoot(resolvedRoot, prefixed);\n    await mkdir(dirname(dest.abs), { recursive: true });\n    await writeFile(dest.abs, body);\n    return dest;\n  };\n\n  const putOne = async (\n    key: string,\n    source: unknown,\n    fileName: string,\n    contentType?: string\n  ) => {\n    const bytes = await toBytes(source);\n    const dest = await putBytes(key, bytes);\n    const logical = stripPrefix(prefix, dest.key);\n    const now = new Date().toISOString();\n    const name = fileName || basename(logical);\n    return {\n      file: {\n        bucket: \"local\",\n        content_type: contentType ?? null,\n        created_at: now,\n        id: logical,\n        is_public: false,\n        metadata: {},\n        name,\n        size_bytes: bytes.byteLength,\n        status: \"ready\",\n        storage_key: logical,\n        updated_at: now,\n      },\n      fileName: name,\n      storage_key: logical,\n    };\n  };\n\n  const upload = async (input: unknown) => {\n    const record = asRecord(input);\n    const filesField = record?.files;\n    const onProgress = readOnProgress(input);\n    if (isFileListLike(filesField) && !isBinarySource(filesField)) {\n      const prefixPath = readPrefixPath(input);\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 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: Array<Awaited<ReturnType<typeof putOne>>> = [];\n      let aggregateLoaded = 0;\n      for (let index = 0; index < described.length; index += 1) {\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 putOne(\n          key,\n          item.source,\n          item.fileName,\n          readString(record, \"contentType\", \"content_type\", \"mime_type\")\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        storage_key: uploaded[0]?.storage_key,\n      };\n    }\n    const key = extractKey(input);\n    const bytesSource = extractUploadSource(input);\n    const name =\n      readString(record, \"name\", \"fileName\", \"original_name\") ?? basename(key);\n    const contentType = readString(record, \"content_type\", \"mime_type\");\n    onProgress?.(\n      progressSnapshot(\n        \"preparing\",\n        [{ fileName: name, sizeBytes: sourceSizeOf(bytesSource) }],\n        0,\n        0,\n        0\n      )\n    );\n    const uploaded = await putOne(key, bytesSource, name, contentType);\n    onProgress?.(\n      progressSnapshot(\n        \"complete\",\n        [{ fileName: name, sizeBytes: uploaded.file.size_bytes }],\n        0,\n        uploaded.file.size_bytes,\n        uploaded.file.size_bytes\n      )\n    );\n    return {\n      count: 1,\n      files: [uploaded],\n      storage_key: uploaded.storage_key,\n    };\n  };\n\n  const head = async (input: unknown) => {\n    const logical = assertSafeObjectKey(extractKey(input));\n    const dest = resolveUnderRoot(resolvedRoot, applyPrefix(prefix, logical));\n    try {\n      const info = await stat(dest.abs);\n      if (!info.isFile()) {\n        throw new Error(`Object not found: ${logical}`);\n      }\n      return {\n        key: logical,\n        size: info.size,\n        storage_key: logical,\n      };\n    } catch (error) {\n      if (\n        error &&\n        typeof error === \"object\" &&\n        \"code\" in error &&\n        (error as { code: unknown }).code === \"ENOENT\"\n      ) {\n        throw new Error(`Object not found: ${logical}`);\n      }\n      throw error;\n    }\n  };\n\n  const get = async (input: unknown) => {\n    const logical = assertSafeObjectKey(extractKey(input));\n    const dest = resolveUnderRoot(resolvedRoot, applyPrefix(prefix, logical));\n    try {\n      return new Uint8Array(await readFile(dest.abs));\n    } catch (error) {\n      if (\n        error &&\n        typeof error === \"object\" &&\n        \"code\" in error &&\n        (error as { code: unknown }).code === \"ENOENT\"\n      ) {\n        throw new Error(`Object not found: ${logical}`);\n      }\n      throw error;\n    }\n  };\n\n  const remove = async (input: unknown) => {\n    const logical = assertSafeObjectKey(extractKey(input));\n    const dest = resolveUnderRoot(resolvedRoot, applyPrefix(prefix, logical));\n    await rm(dest.abs, { force: true, recursive: true });\n    return { deleted: true, storage_key: logical };\n  };\n\n  const moveFile = async (input: unknown) => {\n    const record = asRecord(input);\n    const from = assertSafeObjectKey(\n      readString(record, \"from\", \"from_key\", \"source_key\", \"key\") ?? \"\"\n    );\n    const to = assertSafeObjectKey(\n      readString(record, \"to\", \"to_key\", \"destination_key\") ?? \"\"\n    );\n    const fromDest = resolveUnderRoot(resolvedRoot, applyPrefix(prefix, from));\n    const toDest = resolveUnderRoot(resolvedRoot, applyPrefix(prefix, to));\n    await mkdir(dirname(toDest.abs), { recursive: true });\n    await rename(fromDest.abs, toDest.abs);\n    return { from, storage_key: to, to };\n  };\n\n  const renameFile = async (input: unknown) => {\n    const record = asRecord(input);\n    const key = assertSafeObjectKey(\n      readString(record, \"key\", \"from\", \"storage_key\") ?? \"\"\n    );\n    const name = readString(record, \"name\", \"to\", \"newName\");\n    if (!name) {\n      throw new Error(\"storage.file.rename requires name\");\n    }\n    const to = renameObjectKey(key, name, false);\n    return moveFile({ from: key, to });\n  };\n\n  const createFolder = async (input: unknown) => {\n    const record = asRecord(input);\n    const name = readString(record, \"name\");\n    const parent = readPrefixPath(input) || readString(record, \"prefix\") || \"\";\n    const rawPrefix = name\n      ? joinObjectKey(parent, validateFolderSegment(name))\n      : (readString(record, \"prefix\", \"key\", \"path\") ?? \"\");\n    const folderPrefix = normalizeObjectPrefix(rawPrefix);\n    const dest = resolveUnderRoot(\n      resolvedRoot,\n      applyPrefix(prefix, assertSafeObjectKey(folderPrefix.replace(/\\/$/, \"\")))\n    );\n    await mkdir(dest.abs, { recursive: true });\n    return { created: true, prefix: folderPrefix };\n  };\n\n  const deleteFolder = async (input: unknown) => {\n    const record = asRecord(input);\n    const folderPrefix = normalizeObjectPrefix(\n      readString(record, \"prefix\", \"key\", \"from_prefix\") ?? \"\"\n    );\n    const dest = resolveUnderRoot(\n      resolvedRoot,\n      applyPrefix(prefix, assertSafeObjectKey(folderPrefix.replace(/\\/$/, \"\")))\n    );\n    await rm(dest.abs, { force: true, recursive: true });\n    return { deleted: true, prefix: folderPrefix };\n  };\n\n  const moveFolder = async (input: unknown) => {\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 fromDest = resolveUnderRoot(\n      resolvedRoot,\n      applyPrefix(prefix, assertSafeObjectKey(from.replace(/\\/$/, \"\")))\n    );\n    const toDest = resolveUnderRoot(\n      resolvedRoot,\n      applyPrefix(prefix, assertSafeObjectKey(to.replace(/\\/$/, \"\")))\n    );\n    await mkdir(dirname(toDest.abs), { recursive: true });\n    await rename(fromDest.abs, toDest.abs);\n    return { from, prefix: to, to };\n  };\n\n  const renameFolder = async (input: unknown) => {\n    const record = asRecord(input);\n    const from = normalizeObjectPrefix(\n      readString(record, \"from\", \"from_prefix\", \"prefix\", \"key\") ?? \"\"\n    );\n    const name = readString(record, \"name\", \"to\");\n    const explicitTo = readString(record, \"to_prefix\", \"to\");\n    const to = explicitTo\n      ? normalizeObjectPrefix(explicitTo)\n      : renameObjectKey(from, validateFolderSegment(name ?? \"\"), true);\n    return moveFolder({ from, to });\n  };\n\n  const list = async (input?: unknown) => {\n    const record = asRecord(input);\n    const rawPrefix = readString(record, \"prefix\") ?? \"\";\n    const filter = rawPrefix ? assertSafeObjectKey(rawPrefix) : \"\";\n    const files = await collectFiles(resolvedRoot, resolvedRoot);\n    const listed = files\n      .map((file) => ({\n        ...file,\n        key: stripPrefix(prefix, file.key),\n      }))\n      .filter((file) => {\n        if (prefix && !file.key && file.key !== \"\") {\n          return false;\n        }\n        if (!filter) {\n          return true;\n        }\n        return (\n          file.key === filter ||\n          file.key.startsWith(`${filter}/`) ||\n          file.key.startsWith(filter)\n        );\n      })\n      .map((file) => ({\n        id: file.key,\n        name: basename(file.key.replace(/\\/$/, \"\")),\n        size_bytes: file.size,\n        storage_key: file.key,\n      }))\n      .sort((left, right) =>\n        left.storage_key < right.storage_key\n          ? -1\n          : left.storage_key > right.storage_key\n            ? 1\n            : 0\n      );\n    const cursor = readString(record, \"cursor\");\n    const limitRaw = record?.limit;\n    const limit =\n      typeof limitRaw === \"number\" && Number.isFinite(limitRaw) && limitRaw > 0\n        ? Math.trunc(limitRaw)\n        : undefined;\n    let start = 0;\n    if (cursor) {\n      const exact = listed.findIndex((file) => file.storage_key === cursor);\n      if (exact >= 0) {\n        start = exact + 1;\n      } else {\n        const after = listed.findIndex((file) => file.storage_key > cursor);\n        start = after >= 0 ? after : listed.length;\n      }\n    }\n    const page =\n      limit == null ? listed.slice(start) : listed.slice(start, start + limit);\n    const hasMore = limit != null && start + page.length < listed.length;\n    const nextCursor =\n      hasMore && page.length > 0\n        ? page[page.length - 1]?.storage_key\n        : undefined;\n    return {\n      count: page.length,\n      files: page,\n      ...(typeof nextCursor === \"string\" ? { cursor: nextCursor } : {}),\n    };\n  };\n\n  const file = {\n    delete: remove,\n    get,\n    head,\n    list,\n    move: moveFile,\n    rename: renameFile,\n    retention: unsupportedTree(\"file.retention\"),\n    upload,\n    uploadMultipart: () => rejectUnsupported(\"file.uploadMultipart\"),\n  };\n\n  const folder = {\n    create: createFolder,\n    delete: deleteFolder,\n    move: moveFolder,\n    rename: renameFolder,\n  };\n\n  const object = {\n    delete: remove,\n    folder: {\n      create: createFolder,\n      delete: deleteFolder,\n      rename: renameFolder,\n    },\n    head,\n    list,\n    uploadUrl: () => rejectUnsupported(\"object.uploadUrl\"),\n    url: () => rejectUnsupported(\"object.url\"),\n  };\n\n  const permissions = {\n    grant: () => rejectUnsupported(\"permissions.grant\"),\n    list: () => rejectUnsupported(\"permissions.list\"),\n    revoke: () => rejectUnsupported(\"permissions.revoke\"),\n  };\n\n  const base = {\n    catalog: unsupportedTree(\"catalog\"),\n    connections: unsupportedTree(\"connections\"),\n    file,\n    files: {\n      upload: () => rejectUnsupported(\"files.upload\"),\n    },\n    folder,\n    object,\n    permission: unsupportedTree(\"permission\"),\n    permissions,\n  };\n\n  return new Proxy(base as unknown as AthenaStorageModule, {\n    get(target, property, receiver) {\n      if (property === ATHENA_STORAGE_CAPABILITY_UNSUPPORTED) {\n        return ATHENA_STORAGE_CAPABILITY_UNSUPPORTED;\n      }\n      if (property in target) {\n        return Reflect.get(target, property, receiver);\n      }\n      if (typeof property === \"string\") {\n        return unsupportedTree(property);\n      }\n    },\n  });\n}\n","import { createLocalStorageModule } from \"../../local.ts\";\nimport type { AthenaStorageModule } from \"../../module.ts\";\nimport {\n  mapProviderFailure,\n  storageErrorResult,\n  storageOkResult,\n} from \"../errors.ts\";\nimport type {\n  AuthorizedStorageOperation,\n  StorageObjectProvider,\n} from \"../types.ts\";\n\nexport function createLocalStorageProvider(\n  store: AthenaStorageModule\n): StorageObjectProvider {\n  return {\n    async execute(op: AuthorizedStorageOperation) {\n      try {\n        switch (op.op) {\n          case \"put\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"put requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const data = await store.file.upload({\n              body: op.body ?? new Uint8Array(),\n              name: op.key,\n              source: op.body ?? new Uint8Array(),\n              storage_key: op.key,\n            } as never);\n            return storageOkResult(data);\n          }\n          case \"get\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"get requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const data = await store.file.get({ storage_key: op.key } as never);\n            return storageOkResult(data);\n          }\n          case \"head\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"head requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const data = await (\n              store.file as typeof store.file & {\n                head: (input: never) => Promise<unknown>;\n              }\n            ).head({ storage_key: op.key } as never);\n            return storageOkResult(data);\n          }\n          case \"delete\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"delete requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const data = await store.file.delete({\n              storage_key: op.key,\n            } as never);\n            return storageOkResult(data);\n          }\n          case \"list\": {\n            const data = await store.file.list({\n              cursor: op.cursor,\n              limit: op.limit,\n              prefix: op.prefix,\n            } as never);\n            return storageOkResult(data);\n          }\n          default:\n            return storageErrorResult({\n              message: `unsupported op ${String(op.op)}`,\n              source: \"runtime\",\n              status: 400,\n            });\n        }\n      } catch (error) {\n        return mapProviderFailure(error);\n      }\n    },\n  };\n}\n\nexport function createLocalStorageProviderFromRoot(options: {\n  prefix?: string | null;\n  root: string;\n}): StorageObjectProvider {\n  return createLocalStorageProvider(\n    createLocalStorageModule({\n      prefix: options.prefix,\n      root: options.root,\n    })\n  );\n}\n","import {\n  type CloudflareR2ObjectStorage,\n  createCloudflareR2ObjectStorage,\n} from \"../../../cloudflare/r2/storage.ts\";\nimport type { R2BucketLike } from \"../../../cloudflare/types.ts\";\nimport {\n  mapProviderFailure,\n  storageErrorResult,\n  storageOkResult,\n} from \"../errors.ts\";\nimport type {\n  AuthorizedStorageOperation,\n  StorageObjectProvider,\n} from \"../types.ts\";\n\nexport function createR2StorageProvider(\n  r2: R2BucketLike,\n  prefix?: string | null\n): StorageObjectProvider {\n  const objects: CloudflareR2ObjectStorage = createCloudflareR2ObjectStorage({\n    prefix: prefix ?? undefined,\n    r2,\n  });\n  return {\n    async execute(op: AuthorizedStorageOperation) {\n      try {\n        switch (op.op) {\n          case \"put\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"put requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const data = await objects.putObject({\n              body: op.body ?? new Uint8Array(),\n              contentType: op.contentType,\n              key: op.key,\n            });\n            return storageOkResult(data);\n          }\n          case \"get\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"get requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const object = await objects.getObject({ key: op.key });\n            if (!object) {\n              return storageErrorResult({\n                message: `Object not found: ${op.key}`,\n                source: \"runtime\",\n                status: 404,\n              });\n            }\n            const bytes = await readR2Body(object.body);\n            return storageOkResult(bytes);\n          }\n          case \"head\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"head requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const object = await objects.getObject({ key: op.key });\n            if (!object) {\n              return storageErrorResult({\n                message: `Object not found: ${op.key}`,\n                source: \"runtime\",\n                status: 404,\n              });\n            }\n            return storageOkResult({\n              key: object.key,\n              size: object.size,\n            });\n          }\n          case \"delete\": {\n            if (!op.key?.trim()) {\n              return storageErrorResult({\n                message: \"delete requires key\",\n                source: \"runtime\",\n                status: 400,\n              });\n            }\n            const data = await objects.deleteObject({ key: op.key });\n            return storageOkResult(data);\n          }\n          case \"list\": {\n            const data = await objects.listObjects({ prefix: op.prefix });\n            return storageOkResult(data);\n          }\n          default:\n            return storageErrorResult({\n              message: `unsupported op ${String(op.op)}`,\n              source: \"runtime\",\n              status: 400,\n            });\n        }\n      } catch (error) {\n        return mapProviderFailure(error);\n      }\n    },\n  };\n}\n\nasync function readR2Body(body: {\n  arrayBuffer?: () => Promise<ArrayBuffer>;\n  text?: () => Promise<string>;\n}): Promise<Uint8Array> {\n  if (typeof body.arrayBuffer === \"function\") {\n    return new Uint8Array(await body.arrayBuffer());\n  }\n  if (typeof body.text === \"function\") {\n    return new TextEncoder().encode(await body.text());\n  }\n  return new Uint8Array();\n}\n","/**\n * Dispatch a resolved construction to independent Node domain materializers.\n */\n\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\nimport {\n  materializeBillingPlan,\n  type AthenaMaterializedBilling,\n} from \"../materializers/billing.ts\";\nimport { materializeChat, type AthenaMaterializedChat } from \"../materializers/chat.ts\";\nimport {\n  materializeDatabase,\n  type AthenaMaterializedDatabase,\n} from \"../materializers/database.ts\";\nimport {\n  materializeStoragePlan,\n  type AthenaMaterializedStorage,\n} from \"../materializers/storage.ts\";\nimport type {\n  AthenaRuntimeConfigBindings,\n  ResolvedAthenaConstruction,\n} from \"../construction/types.ts\";\nimport { recordRuntimePlanMaterialized } from \"../ownership.ts\";\nimport { validateRuntimePlan } from \"./validate.ts\";\n\nexport interface AthenaMaterializedRuntime<\n  TModels extends AthenaClientModelsInput | undefined,\n> {\n  readonly billing: AthenaMaterializedBilling;\n  readonly bindings: AthenaRuntimeConfigBindings<TModels>;\n  readonly chat: AthenaMaterializedChat;\n  readonly database: AthenaMaterializedDatabase<TModels>;\n  readonly plan: ResolvedAthenaConstruction<TModels>[\"plan\"];\n  readonly storage: AthenaMaterializedStorage;\n}\n\nexport function materializeRuntimePlan<\n  TModels extends AthenaClientModelsInput | undefined,\n>(\n  construction: ResolvedAthenaConstruction<TModels>,\n): AthenaMaterializedRuntime<TModels> {\n  const plan = validateRuntimePlan(construction.plan);\n  recordRuntimePlanMaterialized();\n  const database = materializeDatabase<TModels>(plan, construction.resources.db);\n  const storage = materializeStoragePlan(plan, construction.resources.storage);\n  const chat = materializeChat(\n    plan,\n    construction.resources.chat,\n    database.postgresRuntime,\n  );\n  const billing = materializeBillingPlan(\n    plan,\n    database.postgresRuntime,\n  );\n  return {\n    billing,\n    bindings: {\n      ...database.bindings,\n      ...storage.bindings,\n      ...chat.bindings,\n    },\n    chat,\n    database,\n    plan,\n    storage,\n  };\n}\n","/**\n * Node chat materializer — local Chat borrows the selected database binding.\n */\n\nimport { createChatDatabaseFromRuntime } from \"../../chat/local/database.ts\";\nimport { createRootChatPrincipalResolver } from \"../../chat/local/principal.ts\";\nimport { createLocalChatRuntime } from \"../../chat/local/runtime.ts\";\nimport type { AthenaPostgresRuntime } from \"../../postgres/owned-runtime.ts\";\nimport type { AthenaChatRuntime } from \"../../chat/runtime.ts\";\nimport type { AthenaRuntimePlan } from \"../plan/types.ts\";\nimport type {\n  AthenaChatRuntimeResources,\n  AthenaRuntimeConfigBindings,\n} from \"../construction/types.ts\";\n\nexport interface AthenaMaterializedChat {\n  readonly bindings: Pick<AthenaRuntimeConfigBindings<never>, \"chatRuntime\">;\n  readonly runtime?: AthenaChatRuntime;\n}\n\nexport function materializeChat(\n  plan: AthenaRuntimePlan,\n  resources: AthenaChatRuntimeResources,\n  databaseRuntime?: AthenaPostgresRuntime,\n): AthenaMaterializedChat {\n  if (resources.existingRuntime) {\n    return {\n      bindings: { chatRuntime: resources.existingRuntime },\n      runtime: resources.existingRuntime,\n    };\n  }\n  if (plan.chat.transport !== \"local\" || !databaseRuntime) {\n    return { bindings: {} };\n  }\n\n  const runtime = createLocalChatRuntime({\n    authorization: plan.chat.callOptions?.authorization,\n    database: createChatDatabaseFromRuntime(databaseRuntime),\n    resolvePrincipal: createRootChatPrincipalResolver({\n      auth: plan.chat.auth,\n      callOptions: plan.chat.callOptions,\n      context: plan.chat.context,\n      databaseUrl: plan.chat.databaseUrl,\n      resolvePrincipal: plan.chat.callOptions?.resolvePrincipal,\n    }),\n  });\n  return {\n    bindings: { chatRuntime: runtime },\n    runtime,\n  };\n}\n","import type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\nimport {\n  type AthenaPostgresRuntime,\n  createAthenaPostgresRuntime,\n} from \"../../postgres/owned-runtime.ts\";\n\nexport type AthenaChatPoolOwnership = \"borrowed\" | \"owned\";\nconst CHAT_DATABASE_OPERATION_TIMEOUT_MS = 15_000;\n\nexport interface AthenaChatQueryResult<TRow = Record<string, unknown>> {\n  rows: TRow[];\n}\n\nexport interface AthenaChatDatabase {\n  close(): Promise<void>;\n  readonly ownership: AthenaChatPoolOwnership;\n  query<TRow = Record<string, unknown>>(\n    text: string,\n    values?: unknown[]\n  ): Promise<AthenaChatQueryResult<TRow>>;\n  transaction<T>(fn: (database: AthenaChatDatabase) => Promise<T>): Promise<T>;\n}\n\nfunction chatDatabaseFromRuntime(\n  runtime: Pick<AthenaPostgresRuntime, \"query\" | \"transaction\">,\n  ownership: AthenaChatPoolOwnership\n): AthenaChatDatabase {\n  return {\n    async close() {},\n    ownership,\n    async query(text, values) {\n      const result = await runtime.query(text, values, {\n        deadlineMs: CHAT_DATABASE_OPERATION_TIMEOUT_MS,\n        workload: \"chat\",\n      });\n      return { rows: (result.rows ?? []) as never };\n    },\n    async transaction(fn) {\n      return runtime.transaction(\n        async (tx) => fn(chatDatabaseFromRuntime(tx, \"borrowed\")),\n        {\n          deadlineMs: CHAT_DATABASE_OPERATION_TIMEOUT_MS,\n          workload: \"chat\",\n        }\n      );\n    },\n  };\n}\n\nexport function createChatDatabaseFromPool(\n  pool: AthenaPostgresPool\n): AthenaChatDatabase {\n  return chatDatabaseFromRuntime(\n    createAthenaPostgresRuntime({ ownership: \"borrowed\", pool }),\n    \"borrowed\"\n  );\n}\n\nexport function createChatDatabaseFromRuntime(\n  runtime: Pick<AthenaPostgresRuntime, \"query\" | \"transaction\">\n): AthenaChatDatabase {\n  return chatDatabaseFromRuntime(runtime, \"borrowed\");\n}\n","import { isLocalAthenaAuthConfig } from \"../../auth/config.ts\";\nimport type {\n  AthenaRequestContext,\n  AthenaRequestContextProvider,\n} from \"../../client/request-context.ts\";\nimport {\n  normalizeAthenaRuntimeAuth,\n  resolveAthenaRuntimePrincipal,\n} from \"../../runtime/authority/index.ts\";\nimport type {\n  AthenaPrincipal,\n  AthenaPrincipalResolver,\n  AthenaResolvedPrincipal,\n} from \"../../runtime/data/principal.ts\";\nimport { normalizeAthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { tryParseAthenaRightKey } from \"../../rights/key.ts\";\nimport type { AthenaChatCallOptions } from \"../types.ts\";\nimport { chatBadRequest, chatUnauthenticated } from \"./errors.ts\";\n\nexport interface ChatExecutionContext {\n  readonly correlationId?: string;\n  readonly organizationId: string;\n  readonly principal: AthenaPrincipal;\n  readonly rightsValid: boolean;\n  readonly resolvedPrincipal: AthenaResolvedPrincipal;\n  readonly requestId?: string;\n  readonly traceId?: string;\n  readonly userId: string;\n}\n\nexport function executionContextFromResolved(\n  resolved: AthenaResolvedPrincipal | null | undefined,\n  options?: AthenaChatCallOptions\n): ChatExecutionContext {\n  if (!resolved) {\n    throw chatUnauthenticated();\n  }\n  const principal = normalizeAthenaPrincipal(resolved.principal, {\n    source:\n      resolved.authority === \"service\"\n        ? \"service\"\n        : resolved.authority === \"athena-session\"\n          ? \"athena-session\"\n          : \"custom-trusted\",\n  });\n  const normalizedResolved: AthenaResolvedPrincipal = {\n    authority: resolved.authority,\n    principal,\n  };\n  const rightsValid = resolved.principal.rights.every(\n    (right) => tryParseAthenaRightKey(String(right)) !== undefined\n  );\n  const userId = principal.userId?.trim();\n  const serviceId = principal.service?.trim();\n  const organizationId = principal?.organizationId?.trim();\n  if (!(principal?.authenticated && (userId || serviceId))) {\n    throw chatUnauthenticated();\n  }\n  if (!organizationId) {\n    throw chatBadRequest(\"Authenticated principal is missing organization_id.\");\n  }\n  return {\n    ...(options?.correlationId ? { correlationId: options.correlationId } : {}),\n    organizationId,\n    principal,\n    rightsValid,\n    resolvedPrincipal: normalizedResolved,\n    ...(options?.requestId ? { requestId: options.requestId } : {}),\n    ...(options?.traceId ? { traceId: options.traceId } : {}),\n    userId: userId ?? serviceId ?? \"\",\n  };\n}\n\n/**\n * INV-CHAT-011: actor identity comes only from the root principal resolver.\n * Call-option tokens may feed the resolver; payload fields never override it.\n */\nexport async function resolveChatContext(\n  resolvePrincipal: AthenaPrincipalResolver,\n  options?: AthenaChatCallOptions\n): Promise<ChatExecutionContext> {\n  const headers = new Headers(options?.headers);\n  if (options?.bearerToken && !headers.has(\"authorization\")) {\n    headers.set(\"authorization\", `Bearer ${options.bearerToken}`);\n  }\n  if (options?.sessionToken && !headers.has(\"cookie\")) {\n    headers.set(\"cookie\", `athena_session=${options.sessionToken}`);\n  }\n  const resolved = await resolvePrincipal({ headers });\n  return executionContextFromResolved(resolved, {\n    ...options,\n    correlationId:\n      options?.correlationId ??\n      headers.get(\"x-athena-correlation-id\") ??\n      undefined,\n    requestId:\n      options?.requestId ?? headers.get(\"x-athena-request-id\") ?? undefined,\n    traceId:\n      options?.traceId ?? headers.get(\"x-athena-trace-id\") ?? undefined,\n  });\n}\n\n/** Payload fields that must never become actor identity. */\nexport interface ChatRootPrincipalSource {\n  auth?: unknown;\n  callOptions?: Pick<\n    AthenaChatCallOptions,\n    \"bearerToken\" | \"cookie\" | \"headers\" | \"sessionToken\"\n  >;\n  context?: AthenaRequestContext | AthenaRequestContextProvider;\n  databaseUrl?: string;\n  resolvedPrincipal?: AthenaResolvedPrincipal;\n  resolvePrincipal?: AthenaPrincipalResolver;\n}\n\nasync function resolveRootContext(\n  context: ChatRootPrincipalSource[\"context\"]\n): Promise<AthenaRequestContext | undefined> {\n  if (typeof context === \"function\") {\n    return context();\n  }\n  return context;\n}\n\nfunction applyRootContextHeaders(\n  headers: Headers,\n  context?: AthenaRequestContext\n): Headers {\n  const next = new Headers(headers);\n  if (context?.headers) {\n    for (const [name, value] of Object.entries(context.headers)) {\n      if (value && !next.has(name)) {\n        next.set(name, value);\n      }\n    }\n  }\n  if (context?.bearerToken && !next.has(\"authorization\")) {\n    next.set(\"authorization\", `Bearer ${context.bearerToken}`);\n  }\n  if (context?.sessionToken && !next.has(\"cookie\")) {\n    next.set(\"cookie\", `athena_session=${context.sessionToken}`);\n  } else if (context?.cookie && !next.has(\"cookie\")) {\n    next.set(\"cookie\", context.cookie);\n  }\n  if (context?.organizationId && !next.has(\"x-athena-organization\")) {\n    next.set(\"x-athena-organization\", context.organizationId);\n  }\n  return next;\n}\n\nfunction principalFromRootContext(\n  context?: AthenaRequestContext,\n  resolvedPrincipal?: AthenaResolvedPrincipal\n): AthenaResolvedPrincipal | null {\n  if (resolvedPrincipal) {\n    return resolvedPrincipal;\n  }\n  const userId = context?.userId?.trim();\n  const organizationId = context?.organizationId?.trim();\n  if (!(userId && organizationId)) {\n    return null;\n  }\n  return {\n    authority: \"custom-trusted\",\n    principal: {\n      authenticated: true,\n      grants: [],\n      organizationId,\n      rights: [],\n      userId,\n    },\n  };\n}\n\n/**\n * INV-CHAT-011 composition: explicit resolver, then Embedded Auth session,\n * then server-owned request context. Payload fields never enter this graph.\n */\nexport function createRootChatPrincipalResolver(\n  source: ChatRootPrincipalSource\n): AthenaPrincipalResolver {\n  if (source.resolvePrincipal) {\n    return source.resolvePrincipal;\n  }\n\n  const authMaterial = isLocalAthenaAuthConfig(source.auth)\n    ? normalizeAthenaRuntimeAuth({ mode: \"athena-session\" }, \"trusted\", {\n        databaseUrl: source.databaseUrl,\n      })\n    : { mode: false as const };\n\n  return async (input) => {\n    const context = await resolveRootContext(source.context);\n    if (source.resolvedPrincipal) {\n      return source.resolvedPrincipal;\n    }\n    const headers = new Headers(source.callOptions?.headers);\n    input.headers.forEach((value, name) => {\n      headers.set(name, value);\n    });\n    if (source.callOptions?.bearerToken && !headers.has(\"authorization\")) {\n      headers.set(\"authorization\", `Bearer ${source.callOptions.bearerToken}`);\n    }\n    if (source.callOptions?.sessionToken && !headers.has(\"cookie\")) {\n      headers.set(\n        \"cookie\",\n        `athena_session=${source.callOptions.sessionToken}`\n      );\n    } else if (source.callOptions?.cookie && !headers.has(\"cookie\")) {\n      headers.set(\"cookie\", source.callOptions.cookie);\n    }\n    const resolvedHeaders = applyRootContextHeaders(headers, context);\n    if (authMaterial.mode !== false) {\n      const headerRecord: Record<string, string> = {};\n      resolvedHeaders.forEach((value, name) => {\n        headerRecord[name] = value;\n      });\n      const outcome = await resolveAthenaRuntimePrincipal(\n        authMaterial,\n        \"trusted\",\n        {\n          headers: headerRecord,\n          request: input.request,\n          requestId: input.requestId,\n        }\n      );\n      if (outcome.ok && outcome.resolved.principal.authenticated) {\n        return outcome.resolved;\n      }\n      return null;\n    }\n    return principalFromRootContext(context, source.resolvedPrincipal);\n  };\n}\n\nexport const CHAT_NON_AUTHORITATIVE_IDENTITY_KEYS = [\n  \"sender_id\",\n  \"senderId\",\n  \"user_id\",\n  \"userId\",\n  \"organization_id\",\n  \"organizationId\",\n  \"created_by\",\n  \"createdBy\",\n] as const;\n","/**\n * Canonical HTTP principal authority (internal).\n *\n * Request headers are authentication material. The resolved caller is\n * always AthenaResolvedPrincipal from runtime/data/principal.ts.\n */\nexport {\n  headersFromContext,\n  NON_AUTHORITATIVE_IDENTITY_HEADERS,\n  ORGANIZATION_HINT_HEADERS,\n  readOrganizationHint,\n  readPresentedSessionToken,\n} from \"./headers.ts\";\nexport {\n  type AthenaPrincipalResolutionFailure,\n  type AthenaPrincipalResolutionOutcome,\n  type AthenaRuntimeAuthMaterial,\n  authModeFromMaterial,\n  normalizeAthenaRuntimeAuth,\n  resolveAthenaRuntimePrincipal,\n} from \"./resolve.ts\";\nexport {\n  asJwtPrincipalVerifier,\n  createOAuthAccessTokenVerifier,\n  createOAuthRuntimeJwtVerifier,\n} from \"./oauth-verifier.ts\";\n","/**\n * HTTP request headers are authentication material, not trusted identity.\n *\n * Bearer / Cookie tokens are presented to a trusted session lookup.\n * Organization headers are membership hints. Identity-shaped headers\n * (`x-user-id`, `x-role`, `x-rights`, …) MUST NOT populate AthenaPrincipal.\n */\nimport {\n  readBearerToken,\n  readSessionTokenFromCookies,\n} from \"../../auth/local/cookies.ts\";\nimport type { AthenaRuntimeRequestContext } from \"../data/types.ts\";\n\nexport const NON_AUTHORITATIVE_IDENTITY_HEADERS = Object.freeze([\n  \"x-athena-user-id\",\n  \"x-grants\",\n  \"x-rights\",\n  \"x-role\",\n  \"x-service\",\n  \"x-user-id\",\n] as const);\n\nexport const ORGANIZATION_HINT_HEADERS = Object.freeze([\n  \"x-athena-organization\",\n  \"x-organization-id\",\n] as const);\n\nexport function headersFromContext(\n  context?: AthenaRuntimeRequestContext\n): Headers {\n  if (context?.request) {\n    return context.request.headers;\n  }\n  const headers = new Headers();\n  if (context?.headers) {\n    for (const [name, value] of Object.entries(context.headers)) {\n      if (value) {\n        headers.set(name, value);\n      }\n    }\n  }\n  return headers;\n}\n\nexport function readOrganizationHint(headers: Headers): string | undefined {\n  const hinted =\n    headers.get(\"x-athena-organization\") ?? headers.get(\"x-organization-id\");\n  const trimmed = hinted?.trim();\n  return trimmed ? trimmed : undefined;\n}\n\nexport function readPresentedSessionToken(\n  headers: Headers\n): string | undefined {\n  return (\n    readPresentedBearerToken(headers) ??\n    readSessionTokenFromCookies(headers.get(\"cookie\"))\n  );\n}\n\nexport function readPresentedBearerToken(\n  headers: Headers\n): string | undefined {\n  return readBearerToken(headers.get(\"authorization\"));\n}\n","/**\n * HTTP principal resolution (internal). Node-ok; not a Next `server-only` edge.\n * Browser / Next-client / RN must not import this module (graph + bundle audits).\n */\nimport { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport {\n  createDeferredPostgresAuthStores,\n  createLookupSessionFromAuthStores,\n  createMembershipVerifierFromAuthStores,\n} from \"../data/athena-session.ts\";\nimport {\n  type AthenaPrincipalResolutionInput,\n  type AthenaResolvedPrincipal,\n  type AthenaRuntimeAuthConfig,\n  type AthenaRuntimeAuthMaterial,\n  type AthenaRuntimeJwtVerifier,\n  type AthenaRuntimeSessionLookup,\n  anonymousResolvedPrincipal,\n  normalizeAthenaPrincipal,\n} from \"../data/principal.ts\";\nimport { validateAthenaRightsProjection } from \"../data/rights-resolution.ts\";\nimport type {\n  AthenaRuntimeAuthMode,\n  AthenaRuntimeErrorCode,\n  AthenaRuntimeRequestContext,\n  AthenaRuntimeSecurityMode,\n} from \"../data/types.ts\";\nimport {\n  headersFromContext,\n  readOrganizationHint,\n  readPresentedBearerToken,\n  readPresentedSessionToken,\n} from \"./headers.ts\";\n\nexport type { AthenaRuntimeAuthMaterial };\n\nexport interface AthenaPrincipalResolutionFailure {\n  code: AthenaRuntimeErrorCode;\n  message: string;\n  status: number;\n}\n\nexport type AthenaPrincipalResolutionOutcome =\n  | { ok: true; resolved: AthenaResolvedPrincipal }\n  | { ok: false; failure: AthenaPrincipalResolutionFailure };\n\nfunction authConfigInvalid(message: string): AthenaConfigurationError {\n  return new AthenaConfigurationError(\n    \"ATHENA_RUNTIME_CONFIG_INVALID\",\n    `ATHENA_AUTH_CONFIG_INVALID: ${message}`,\n    \"auth\"\n  );\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 normalizeAthenaRuntimeAuth(\n  auth: AthenaRuntimeAuthConfig | { mode: string } | undefined,\n  security: AthenaRuntimeSecurityMode,\n  options: { databaseUrl?: string } = {}\n): AthenaRuntimeAuthMaterial {\n  if (auth === undefined || auth === false) {\n    if (security === \"authenticated\") {\n      throw authConfigInvalid(\n        'security.mode \"authenticated\" requires a configured Auth resolver.'\n      );\n    }\n    return { mode: false };\n  }\n\n  if (!isRecord(auth) || typeof auth.mode !== \"string\") {\n    throw authConfigInvalid(\"auth must be false or an object with a mode.\");\n  }\n\n  const configured = auth as AthenaRuntimeAuthConfig;\n  if (configured === false) {\n    return { mode: false };\n  }\n\n  if (configured.mode === \"athena-session\") {\n    if (configured.authorization?.strictRoles === true) {\n      const projection = validateAthenaRightsProjection(\n        configured.authorization\n      );\n      const first = projection.issues[0];\n      if (!projection.ok && first) {\n        throw authConfigInvalid(first.message);\n      }\n    }\n    const stores =\n      configured.stores ??\n      (options.databaseUrl\n        ? createDeferredPostgresAuthStores(options.databaseUrl)\n        : undefined);\n    const lookupSession =\n      configured.lookupSession ??\n      (stores\n        ? createLookupSessionFromAuthStores(stores, {\n            authorization: configured.authorization,\n          })\n        : undefined);\n    if (typeof lookupSession !== \"function\") {\n      throw authConfigInvalid(\n        'auth.mode \"athena-session\" requires Athena Auth stores, lookupSession, or databaseUrl.'\n      );\n    }\n    const verifyOrganizationMembership =\n      configured.verifyOrganizationMembership ??\n      (stores ? createMembershipVerifierFromAuthStores(stores) : undefined);\n    return {\n      ...(configured.jwtVerifier\n        ? { jwtVerifier: configured.jwtVerifier }\n        : {}),\n      lookupSession,\n      mode: \"athena-session\",\n      ...(verifyOrganizationMembership ? { verifyOrganizationMembership } : {}),\n    };\n  }\n\n  if (configured.mode === \"jwt\") {\n    if (typeof configured.verifyToken !== \"function\") {\n      throw authConfigInvalid('auth.mode \"jwt\" requires verifyToken.');\n    }\n    return {\n      mode: \"jwt\",\n      verifyToken: configured.verifyToken,\n    };\n  }\n\n  if (configured.mode === \"custom\") {\n    if (typeof configured.resolvePrincipal !== \"function\") {\n      throw authConfigInvalid('auth.mode \"custom\" requires resolvePrincipal.');\n    }\n    return {\n      mode: \"custom\",\n      resolvePrincipal: configured.resolvePrincipal,\n    };\n  }\n\n  if (configured.mode === \"service\") {\n    if (!isRecord(configured.principal)) {\n      throw authConfigInvalid(\n        'auth.mode \"service\" requires a server-configured principal.'\n      );\n    }\n    const principal = normalizeAthenaPrincipal(configured.principal, {\n      source: \"service\",\n    });\n    if (!(principal.authenticated && principal.service)) {\n      throw authConfigInvalid(\n        \"service principal must be authenticated and include principal.service.\"\n      );\n    }\n    return { mode: \"service\", principal };\n  }\n\n  throw authConfigInvalid(`Unsupported auth.mode \"${String(auth.mode)}\".`);\n}\n\nexport function authModeFromMaterial(\n  material: AthenaRuntimeAuthMaterial\n): AthenaRuntimeAuthMode {\n  return material.mode;\n}\n\nfunction isExpired(expiresAt: string | Date | null | undefined): boolean {\n  if (expiresAt == null) {\n    return false;\n  }\n  const millis =\n    expiresAt instanceof Date ? expiresAt.getTime() : Date.parse(expiresAt);\n  if (Number.isNaN(millis)) {\n    return false;\n  }\n  return millis <= Date.now();\n}\n\nfunction deny(\n  code: AthenaRuntimeErrorCode,\n  message: string,\n  status: number\n): AthenaPrincipalResolutionOutcome {\n  return { failure: { code, message, status }, ok: false };\n}\n\nfunction allow(\n  resolved: AthenaResolvedPrincipal\n): AthenaPrincipalResolutionOutcome {\n  return { ok: true, resolved };\n}\n\nasync function resolveSessionPrincipal(\n  material: Extract<AthenaRuntimeAuthMaterial, { mode: \"athena-session\" }>,\n  input: AthenaPrincipalResolutionInput\n): Promise<AthenaPrincipalResolutionOutcome> {\n  const bearer = readPresentedBearerToken(input.headers);\n  if (bearer && bearer.split(\".\").length === 3) {\n    if (!material.jwtVerifier) {\n      return deny(\n        \"ATHENA_AUTH_INVALID_SESSION\",\n        \"Athena access token is missing or invalid.\",\n        401\n      );\n    }\n    return resolveJwtPrincipal(material.jwtVerifier, input);\n  }\n  const token = bearer ?? readPresentedSessionToken(input.headers);\n  if (!token) {\n    return allow(anonymousResolvedPrincipal());\n  }\n\n  let lookup: AthenaRuntimeSessionLookup | null;\n  try {\n    lookup = await material.lookupSession(token);\n  } catch {\n    return deny(\n      \"ATHENA_AUTH_PRINCIPAL_RESOLUTION_FAILED\",\n      \"Athena could not resolve the caller principal.\",\n      401\n    );\n  }\n\n  if (!lookup) {\n    return deny(\n      \"ATHENA_AUTH_INVALID_SESSION\",\n      \"Athena session is missing or invalid.\",\n      401\n    );\n  }\n\n  if (lookup.session.revoked === true || lookup.user.banned === true) {\n    return deny(\n      \"ATHENA_AUTH_INVALID_SESSION\",\n      \"Athena session is missing or invalid.\",\n      401\n    );\n  }\n\n  if (isExpired(lookup.session.expiresAt)) {\n    return deny(\n      \"ATHENA_AUTH_SESSION_EXPIRED\",\n      \"Athena session has expired.\",\n      401\n    );\n  }\n\n  const userId = lookup.user.id.trim();\n  if (!userId) {\n    return deny(\n      \"ATHENA_AUTH_INVALID_SESSION\",\n      \"Athena session is missing or invalid.\",\n      401\n    );\n  }\n\n  const sessionOrg = lookup.session.activeOrganizationId?.trim() || undefined;\n  const hintedOrg = readOrganizationHint(input.headers);\n  let organizationId = sessionOrg;\n\n  if (hintedOrg && hintedOrg !== sessionOrg) {\n    if (!material.verifyOrganizationMembership) {\n      return deny(\n        \"ATHENA_AUTH_ORG_NOT_ALLOWED\",\n        \"Requested organization is not verified for this principal.\",\n        403\n      );\n    }\n    let allowed: boolean;\n    try {\n      allowed = await material.verifyOrganizationMembership({\n        organizationId: hintedOrg,\n        userId,\n      });\n    } catch {\n      return deny(\n        \"ATHENA_AUTH_PRINCIPAL_RESOLUTION_FAILED\",\n        \"Athena could not resolve the caller principal.\",\n        401\n      );\n    }\n    if (!allowed) {\n      return deny(\n        \"ATHENA_AUTH_ORG_NOT_ALLOWED\",\n        \"Requested organization is not verified for this principal.\",\n        403\n      );\n    }\n    organizationId = hintedOrg;\n  }\n\n  const role = lookup.user.role?.trim() || undefined;\n  return allow({\n    authority: \"athena-session\",\n    principal: normalizeAthenaPrincipal(\n      {\n        authenticated: true,\n        grants: lookup.user.grants ?? [],\n        ...(organizationId ? { organizationId } : {}),\n        ...(role ? { role } : {}),\n        rights: lookup.user.rights ?? [],\n        sessionId: lookup.session.id,\n        userId,\n      },\n      { source: \"athena-session\" }\n    ),\n  });\n}\n\nasync function resolveJwtPrincipal(\n  verifyToken: AthenaRuntimeJwtVerifier,\n  input: AthenaPrincipalResolutionInput\n): Promise<AthenaPrincipalResolutionOutcome> {\n  try {\n    const resolved = await verifyToken(input);\n    if (!resolved) {\n      return deny(\n        \"ATHENA_AUTH_INVALID_SESSION\",\n        \"Athena access token is missing or invalid.\",\n        401\n      );\n    }\n    return allow({\n      authority: \"jwt\",\n      principal: normalizeAthenaPrincipal(resolved.principal, {\n        source: \"jwt\",\n      }),\n    });\n  } catch {\n    return deny(\n      \"ATHENA_AUTH_INVALID_SESSION\",\n      \"Athena access token is missing or invalid.\",\n      401\n    );\n  }\n}\n\nasync function resolveCustomPrincipal(\n  material: Extract<AthenaRuntimeAuthMaterial, { mode: \"custom\" }>,\n  input: AthenaPrincipalResolutionInput\n): Promise<AthenaPrincipalResolutionOutcome> {\n  let resolved: AthenaResolvedPrincipal | null;\n  try {\n    resolved = await material.resolvePrincipal(input);\n  } catch {\n    return deny(\n      \"ATHENA_AUTH_PRINCIPAL_RESOLUTION_FAILED\",\n      \"Athena could not resolve the caller principal.\",\n      401\n    );\n  }\n  if (!resolved) {\n    return allow(anonymousResolvedPrincipal());\n  }\n  return allow({\n    authority: \"custom-trusted\",\n    principal: normalizeAthenaPrincipal(resolved.principal, {\n      source: \"custom-trusted\",\n    }),\n  });\n}\n\nexport async function resolveAthenaRuntimePrincipal(\n  material: AthenaRuntimeAuthMaterial,\n  security: AthenaRuntimeSecurityMode,\n  context?: AthenaRuntimeRequestContext\n): Promise<AthenaPrincipalResolutionOutcome> {\n  const headers = headersFromContext(context);\n  const input: AthenaPrincipalResolutionInput = {\n    headers,\n    ...(context?.request ? { request: context.request } : {}),\n    ...(context?.requestId ? { requestId: context.requestId } : {}),\n  };\n\n  let outcome: AthenaPrincipalResolutionOutcome;\n  try {\n    if (material.mode === false) {\n      outcome = allow(anonymousResolvedPrincipal());\n    } else if (material.mode === \"service\") {\n      outcome = allow({\n        authority: \"service\",\n        principal: material.principal,\n      });\n    } else if (material.mode === \"athena-session\") {\n      outcome = await resolveSessionPrincipal(material, input);\n    } else if (material.mode === \"jwt\") {\n      const bearer = readPresentedBearerToken(input.headers);\n      outcome = bearer\n        ? await resolveJwtPrincipal(material.verifyToken, input)\n        : allow(anonymousResolvedPrincipal());\n    } else {\n      outcome = await resolveCustomPrincipal(material, input);\n    }\n  } catch {\n    outcome = deny(\n      \"ATHENA_AUTH_PRINCIPAL_RESOLUTION_FAILED\",\n      \"Athena could not resolve the caller principal.\",\n      401\n    );\n  }\n\n  if (!outcome.ok) {\n    return outcome;\n  }\n\n  if (\n    security === \"authenticated\" &&\n    outcome.resolved.principal.authenticated !== true\n  ) {\n    return deny(\n      \"ATHENA_AUTH_REQUIRED\",\n      \"Authentication is required for this Athena Local Runtime.\",\n      401\n    );\n  }\n\n  return outcome;\n}\n","/**\n * Athena-session principal source.\n *\n * Uses existing Auth store primitives (getSessionByToken / getUserById / getMember).\n * Does not issue ad-hoc SQL from the data runtime.\n */\nimport { isUserEffectivelyBanned } from \"../../auth/local/admin-contract.ts\";\nimport { createPostgresAuthDatabase } from \"../../auth/local/database.ts\";\nimport type { AuthMemberRow } from \"../../auth/local/models.ts\";\nimport { PostgresAuthStores } from \"../../auth/local/stores.ts\";\nimport { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport {\n  compareAuthorizationShadow,\n  hasLegacyRoleMap,\n} from \"../authorization/shadow.ts\";\nimport {\n  type AthenaAuthorizationStore,\n  isPersistedAuthorizationStore,\n} from \"../authorization/store.ts\";\nimport type {\n  AthenaPrincipalRightsProjection,\n  AthenaRuntimeAuthConfig,\n  AthenaRuntimeAuthSessionStore,\n  AthenaRuntimeJwtVerifier,\n  AthenaRuntimeOrganizationVerifier,\n  AthenaRuntimeSessionLookup,\n  AthenaRuntimeSessionLookupFn,\n} from \"./principal.ts\";\nimport {\n  ATHENA_PERSISTED_AUTHORIZATION_RESOLUTION_KIND,\n  type AthenaRightsResolution,\n  effectiveRightsFromResolution,\n  emitAthenaPersistedAuthorizationDiagnostic,\n  resolveStoredUserRightsResolution,\n  validateAthenaRightsProjection,\n} from \"./rights-resolution.ts\";\n\nexport type { AthenaRightsResolution } from \"./rights-resolution.ts\";\n\nexport class AthenaAuthorizationResolutionError extends Error {\n  constructor(message: string, options?: { cause?: unknown }) {\n    super(message, options);\n    this.name = \"AthenaAuthorizationResolutionError\";\n  }\n}\n\n/** Create a lookup session from auth stores. */\nexport function createLookupSessionFromAuthStores(\n  stores: AthenaRuntimeAuthSessionStore,\n  options?: { authorization?: AthenaPrincipalRightsProjection }\n): AthenaRuntimeSessionLookupFn {\n  assertStrictRoleProjection(options?.authorization);\n  const useLegacyRoleMap = hasLegacyRoleMap(options?.authorization);\n  return async (token) => {\n    const session = await stores.getSessionByToken(token);\n    if (!session) {\n      return null;\n    }\n    const user = await stores.getUserById(session.user_id);\n    if (!user) {\n      return null;\n    }\n    let rights: readonly string[];\n    if (useLegacyRoleMap) {\n      const assigned = await resolveAssignedRightsCompat(\n        stores,\n        user.id,\n        session.active_organization_id\n      );\n      const resolution = resolveStoredUserRightsResolution(\n        user,\n        options?.authorization,\n        { userId: user.id }\n      );\n      rights = effectiveRightsFromResolution(resolution);\n      if (assigned !== undefined) {\n        compareAuthorizationShadow({\n          assignedRights: assigned,\n          legacyRights: rights,\n          userId: user.id,\n        });\n      }\n    } else {\n      const assigned = await resolveAssignedRightsAuthoritative(\n        stores,\n        user.id,\n        session.active_organization_id\n      );\n      rights = assigned ?? [];\n    }\n    const grants = Array.isArray(user.grants)\n      ? user.grants.map((entry) => String(entry))\n      : [];\n    const lookup: AthenaRuntimeSessionLookup = {\n      session: {\n        activeOrganizationId: session.active_organization_id ?? null,\n        expiresAt: session.expires_at,\n        id: session.id,\n        revoked: session.active === false,\n        userId: session.user_id,\n      },\n      user: {\n        banned: isUserEffectivelyBanned(user),\n        ...(grants.length > 0 ? { grants } : {}),\n        id: user.id,\n        ...(rights.length > 0 ? { rights } : {}),\n        ...(user.role ? { role: user.role } : {}),\n      },\n    };\n    return lookup;\n  };\n}\n\nexport function resolveStoredUserRights(\n  user: {\n    metadata?: unknown;\n    rights?: readonly string[];\n    role?: string | null;\n  },\n  authorization?: AthenaPrincipalRightsProjection\n): AthenaRightsResolution {\n  return resolveStoredUserRightsResolution(user, authorization);\n}\n\nexport function createAthenaSessionAuthFromStores(input: {\n  authorization?: AthenaPrincipalRightsProjection;\n  getStores: () => Promise<AthenaRuntimeAuthSessionStore>;\n  jwtVerifier?: AthenaRuntimeJwtVerifier;\n}): Extract<AthenaRuntimeAuthConfig, { mode: \"athena-session\" }> {\n  assertStrictRoleProjection(input.authorization);\n  return {\n    ...(input.jwtVerifier ? { jwtVerifier: input.jwtVerifier } : {}),\n    lookupSession: async (token) => {\n      const stores = await input.getStores();\n      return createLookupSessionFromAuthStores(stores, {\n        authorization: input.authorization,\n      })(token);\n    },\n    mode: \"athena-session\",\n  };\n}\n\nexport function readAuthRightsProjection(\n  config: unknown\n): AthenaPrincipalRightsProjection | undefined {\n  if (!config || typeof config !== \"object\") {\n    return;\n  }\n  const auth = (config as { auth?: unknown }).auth;\n  if (!auth || typeof auth !== \"object\") {\n    return;\n  }\n  const authorization = (auth as { authorization?: unknown }).authorization;\n  if (!authorization || typeof authorization !== \"object\") {\n    return;\n  }\n  const record = authorization as AthenaPrincipalRightsProjection;\n  return {\n    ...(typeof record.defaultRole === \"string\"\n      ? { defaultRole: record.defaultRole }\n      : {}),\n    ...(record.mode === \"role\" || record.mode === \"stored\"\n      ? { mode: record.mode }\n      : {}),\n    ...(record.rightsByRole ? { rightsByRole: record.rightsByRole } : {}),\n    ...(record.strictRoles === true ? { strictRoles: true } : {}),\n  };\n}\n\nfunction assertStrictRoleProjection(\n  authorization: AthenaPrincipalRightsProjection | undefined\n): void {\n  if (authorization?.strictRoles !== true) {\n    return;\n  }\n  const projection = validateAthenaRightsProjection(authorization);\n  const first = projection.issues[0];\n  if (!projection.ok && first) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `ATHENA_AUTH_CONFIG_INVALID: ${first.message}`,\n      \"auth\"\n    );\n  }\n}\n\n/** Create a membership verifier from auth stores. */\nexport function createMembershipVerifierFromAuthStores(\n  stores: AthenaRuntimeAuthSessionStore\n): AthenaRuntimeOrganizationVerifier | undefined {\n  if (typeof stores.getMember !== \"function\") {\n    return;\n  }\n  return async ({ organizationId, userId }) => {\n    const member = await stores.getMember?.(organizationId, userId);\n    return member != null;\n  };\n}\n\ntype DeferredPostgresAuthBacking = {\n  authorization: AthenaAuthorizationStore;\n  getMember(\n    organizationId: string,\n    userId: string\n  ): Promise<AuthMemberRow | undefined>;\n  getSessionByToken: AthenaRuntimeAuthSessionStore[\"getSessionByToken\"];\n  getUserById: AthenaRuntimeAuthSessionStore[\"getUserById\"];\n};\n\n/** Create deferred Postgres auth stores. */\nexport function createDeferredPostgresAuthStores(\n  databaseUrl: string\n): AthenaRuntimeAuthSessionStore {\n  let ready: Promise<DeferredPostgresAuthBacking> | undefined;\n  const resolve = () => {\n    ready ??= (async () => {\n      const database = await createPostgresAuthDatabase(databaseUrl);\n      return new PostgresAuthStores(database);\n    })();\n    return ready;\n  };\n  return {\n    async getMember(organizationId, userId) {\n      const stores = await resolve();\n      return stores.getMember(organizationId, userId);\n    },\n    async getSessionByToken(token) {\n      const stores = await resolve();\n      return stores.getSessionByToken(token);\n    },\n    async getUserById(id) {\n      const stores = await resolve();\n      return stores.getUserById(id);\n    },\n    async hasAuthorizationAssignment(userId) {\n      const stores = await resolve();\n      return stores.authorization.hasUserAssignment(userId);\n    },\n    async resolveEffectiveRights(input) {\n      const stores = await resolve();\n      const rights = await stores.authorization.resolveEffectiveRights({\n        activeOrganizationId: input.activeOrganizationId,\n        getMember: (organizationId, userId) =>\n          stores.getMember(organizationId, userId),\n        userId: input.userId,\n      });\n      return [...rights];\n    },\n  };\n}\n\nasync function resolveAssignedRightsCompat(\n  stores: AthenaRuntimeAuthSessionStore,\n  userId: string,\n  activeOrganizationId?: string | null\n): Promise<readonly string[] | undefined> {\n  try {\n    return await resolveAssignedRightsOrThrow(\n      stores,\n      userId,\n      activeOrganizationId\n    );\n  } catch (error) {\n    const assignment = await assignmentPresence(stores, userId);\n    emitAthenaPersistedAuthorizationDiagnostic({\n      assignment,\n      error: errorMessage(error),\n      fallback: \"legacy-role-map\",\n      kind: ATHENA_PERSISTED_AUTHORIZATION_RESOLUTION_KIND,\n      resolution: \"failed\",\n      source: \"persisted\",\n      userId,\n    });\n  }\n}\n\nasync function resolveAssignedRightsAuthoritative(\n  stores: AthenaRuntimeAuthSessionStore,\n  userId: string,\n  activeOrganizationId?: string | null\n): Promise<readonly string[] | undefined> {\n  try {\n    return await resolveAssignedRightsOrThrow(\n      stores,\n      userId,\n      activeOrganizationId\n    );\n  } catch (error) {\n    const assignment = await assignmentPresence(stores, userId);\n    emitAthenaPersistedAuthorizationDiagnostic({\n      assignment,\n      error: errorMessage(error),\n      fallback: \"forbidden\",\n      kind: ATHENA_PERSISTED_AUTHORIZATION_RESOLUTION_KIND,\n      resolution: \"failed\",\n      source: \"persisted\",\n      userId,\n    });\n    throw new AthenaAuthorizationResolutionError(\n      \"Persisted authorization resolution failed.\",\n      { cause: error }\n    );\n  }\n}\n\nasync function resolveAssignedRightsOrThrow(\n  stores: AthenaRuntimeAuthSessionStore,\n  userId: string,\n  activeOrganizationId?: string | null\n): Promise<readonly string[] | undefined> {\n  if (typeof stores.resolveEffectiveRights !== \"function\") {\n    const authorization = authorizationFromUnknownStore(stores);\n    if (!authorization) {\n      return;\n    }\n    const hasAssignment = await authorization.hasUserAssignment(userId);\n    if (!hasAssignment) {\n      return;\n    }\n    const getMember = stores.getMember;\n    if (typeof getMember !== \"function\") {\n      return [\n        ...(await authorization.resolveEffectiveRights({\n          activeOrganizationId,\n          getMember: async () => undefined,\n          userId,\n        })),\n      ];\n    }\n    return [\n      ...(await authorization.resolveEffectiveRights({\n        activeOrganizationId,\n        getMember: async (organizationId, memberUserId) => {\n          const member = await getMember(organizationId, memberUserId);\n          return member as AuthStoreMemberLookupRow | undefined;\n        },\n        userId,\n      })),\n    ];\n  }\n  const hasAssignment = await stores.hasAuthorizationAssignment?.(userId);\n  if (hasAssignment === false) {\n    return;\n  }\n  return stores.resolveEffectiveRights({\n    activeOrganizationId,\n    userId,\n  });\n}\n\nexport function authorizationFromUnknownStore(\n  stores: AthenaRuntimeAuthSessionStore\n): AthenaAuthorizationStore | undefined {\n  if (!(\"authorization\" in stores)) {\n    return;\n  }\n  const candidate = (stores as { authorization?: unknown }).authorization;\n  if (!isPersistedAuthorizationStore(candidate)) {\n    return;\n  }\n  return candidate;\n}\n\nfunction errorMessage(error: unknown): string {\n  if (error instanceof Error && error.message.trim().length > 0) {\n    return error.message;\n  }\n  return String(error);\n}\n\nasync function assignmentPresence(\n  stores: AthenaRuntimeAuthSessionStore,\n  userId: string\n): Promise<\"present\" | \"absent\" | \"unknown\"> {\n  if (typeof stores.hasAuthorizationAssignment !== \"function\") {\n    return \"unknown\";\n  }\n  try {\n    const hasAssignment = await stores.hasAuthorizationAssignment(userId);\n    if (hasAssignment === true) {\n      return \"present\";\n    }\n    if (hasAssignment === false) {\n      return \"absent\";\n    }\n    return \"unknown\";\n  } catch {\n    return \"unknown\";\n  }\n}\n\ntype AuthStoreMemberLookupRow = {\n  created_at: Date | string;\n  id: string;\n  organization_id: string;\n  role: string;\n  user_id: string;\n};\n","import type { AthenaPrincipalRightsProjection } from \"../data/principal.ts\";\nimport {\n  effectiveRightsFromResolution,\n  resolveStoredUserRightsResolution,\n} from \"../data/rights-resolution.ts\";\nimport type { AthenaAuthorizationShadowDiagnostic } from \"./types.ts\";\nimport { ATHENA_AUTHORIZATION_SHADOW_KIND } from \"./types.ts\";\n\nconst listeners = new Set<\n  (diagnostic: AthenaAuthorizationShadowDiagnostic) => void\n>();\n\nexport function subscribeAthenaAuthorizationShadow(\n  listener: (diagnostic: AthenaAuthorizationShadowDiagnostic) => void\n): () => void {\n  listeners.add(listener);\n  return () => {\n    listeners.delete(listener);\n  };\n}\n\nexport function emitAuthorizationShadow(\n  diagnostic: AthenaAuthorizationShadowDiagnostic\n): void {\n  for (const listener of listeners) {\n    listener(diagnostic);\n  }\n}\n\nexport function compareAuthorizationShadow(input: {\n  assignedRights: readonly string[];\n  legacyRights: readonly string[];\n  userId: string;\n}): AthenaAuthorizationShadowDiagnostic {\n  const assigned = [...input.assignedRights].sort();\n  const legacy = [...input.legacyRights].sort();\n  const matched =\n    assigned.length === legacy.length &&\n    assigned.every((key, index) => key === legacy[index]);\n  const diagnostic: AthenaAuthorizationShadowDiagnostic = {\n    assignedRights: assigned,\n    kind: ATHENA_AUTHORIZATION_SHADOW_KIND,\n    legacyRights: legacy,\n    matched,\n    userId: input.userId,\n  };\n  emitAuthorizationShadow(diagnostic);\n  return diagnostic;\n}\n\nexport function legacyRightsFromProjection(\n  user: {\n    metadata?: unknown;\n    rights?: readonly string[];\n    role?: string | null;\n  },\n  authorization?: AthenaPrincipalRightsProjection\n): readonly string[] {\n  return effectiveRightsFromResolution(\n    resolveStoredUserRightsResolution(user, authorization, {\n      userId: \"shadow\",\n    })\n  );\n}\n\nexport function hasLegacyRoleMap(\n  authorization?: AthenaPrincipalRightsProjection\n): boolean {\n  return Object.keys(authorization?.rightsByRole ?? {}).length > 0;\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 type { AthenaRightKey } from \"../../rights/key.ts\";\nimport type {\n  AthenaRightDefinition,\n  AthenaRightRiskLevel,\n  AthenaRightScopeKind,\n} from \"../../rights/types.ts\";\n\nexport type AthenaAuthorizationScopeKind = AthenaRightScopeKind;\nexport type AthenaAuthorizationRiskLevel = AthenaRightRiskLevel;\nexport type AthenaAuthorizationRoleScope = \"platform\" | \"organization\";\n\nexport type AthenaAuthorizationRightDefinition = AthenaRightDefinition;\n\n/** Persistence compatibility projection; canonical meaning lives in Roles IR. */\nexport interface AthenaAuthorizationRoleRecord {\n  assignable: boolean;\n  id: string;\n  key: string;\n  name: string;\n  organizationId: string | null;\n  protected: boolean;\n  scopeKind: AthenaAuthorizationRoleScope;\n  systemKind: \"owner\" | \"admin\" | \"member\" | null;\n  version: number;\n}\n\nexport interface AssignedRoleSummary {\n  displayName: string;\n  key: string;\n  scopeKind: AthenaAuthorizationRoleScope;\n}\n\n/** Snapshot/admin compatibility projection; not canonical role-definition state. */\nexport interface RoleDescriptor {\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: AthenaAuthorizationRoleScope;\n  systemKind: \"owner\" | \"admin\" | \"member\" | null;\n  version: number;\n}\n\nexport interface AthenaAuthorizationRoleDetail\n  extends AthenaAuthorizationRoleRecord {\n  assignmentCount: number;\n  rightCount: number;\n  rights: readonly AthenaRightKey[];\n}\n\nexport interface AuthorizationCapabilities {\n  canChangeMemberRole: boolean;\n  canDeleteOrganization: boolean;\n  canInviteMembers: boolean;\n  canManageOrganizationRoles: boolean;\n  canManagePlatformRoles: boolean;\n  canRemoveMember: boolean;\n}\n\nexport interface MemberAuthorizationActions {\n  assignedRoleIds: readonly string[];\n  canChangeRole: boolean;\n  canRemove: boolean;\n  denialReasons: {\n    changeRole?: string;\n    remove?: string;\n  };\n  roleDisplayName: string;\n  roleKey: string;\n}\n\nexport interface AuthorizationSnapshot {\n  activeOrganizationId?: string;\n  assignableRoles: RoleDescriptor[];\n  capabilities: AuthorizationCapabilities;\n  effectiveRights: readonly AthenaRightKey[];\n  revision: number;\n  roles: AssignedRoleSummary[];\n}\n\nexport type {\n  OrganizationAssignmentRevision,\n  OrganizationMemberAssignmentSnapshot,\n  OrganizationMemberRoleAssignment,\n  PlatformAssignmentRevision,\n  PlatformUserAssignmentSnapshot,\n  PlatformUserRoleAssignment,\n} from \"./assignment-snapshot.ts\";\n\nexport const ATHENA_AUTHORIZATION_SHADOW_KIND =\n  \"athena_authorization_shadow\" as const;\n\nexport interface AthenaAuthorizationShadowDiagnostic {\n  assignedRights: readonly string[];\n  kind: typeof ATHENA_AUTHORIZATION_SHADOW_KIND;\n  legacyRights: readonly string[];\n  matched: boolean;\n  userId: string;\n}\n","import type { AuthMemberRow } from \"../../auth/local/models.ts\";\nimport type { AthenaRightKey } from \"../../rights/key.ts\";\nimport type {\n  OrganizationMemberAssignmentSnapshot,\n  OrganizationMemberRoleAssignment,\n  PlatformUserAssignmentSnapshot,\n  PlatformUserRoleAssignment,\n} from \"./assignment-snapshot.ts\";\nimport type { AthenaAuthorizationInspectGraph } from \"./inspect.ts\";\nimport type {\n  AthenaAuthorizationRoleDetail,\n  AthenaAuthorizationRoleRecord,\n  AthenaAuthorizationRoleScope,\n  AuthorizationSnapshot,\n  MemberAuthorizationActions,\n  RoleDescriptor,\n} from \"./types.ts\";\n\nexport interface AthenaAuthorizationStore {\n  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  assignMemberRole(\n    memberId: string,\n    roleKey: string,\n    assignedBy?: string,\n    organizationId?: string | null\n  ): Promise<void>;\n  assignUserRole(\n    userId: string,\n    roleKey: string,\n    assignedBy?: string\n  ): Promise<void>;\n  cloneRole(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    name: string;\n    sourceRoleId: string;\n    organizationId?: string | null;\n    unrestrictedGrant?: boolean;\n  }): Promise<AthenaAuthorizationRoleRecord>;\n  createRole(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    name: string;\n    organizationId?: string | null;\n    rights?: readonly string[];\n    scopeKind: AthenaAuthorizationRoleScope;\n    unrestrictedGrant?: boolean;\n  }): Promise<AthenaAuthorizationRoleRecord>;\n  deleteRole(input: {\n    actorUserId: string;\n    expectedVersion: number;\n    id: string;\n    organizationId?: string | null;\n    reassignmentRoleId?: string | null;\n  }): Promise<void>;\n  ensureCatalog(): Promise<void>;\n  getRole(\n    id: string,\n    organizationId?: string | null\n  ): Promise<AthenaAuthorizationRoleDetail | undefined>;\n  hasUserAssignment(userId: string): Promise<boolean>;\n  inspectGraph?(): Promise<AthenaAuthorizationInspectGraph>;\n  listAudit(input: {\n    limit?: number;\n    organizationId?: string | null;\n  }): Promise<readonly Record<string, unknown>[]>;\n  listMemberRoleAssignments(input: {\n    organizationId: string;\n  }): Promise<readonly OrganizationMemberRoleAssignment[]>;\n  listRoleRights(roleId: string): Promise<readonly AthenaRightKey[]>;\n  listRoles(input: {\n    organizationId?: string | null;\n    scopeKind: AthenaAuthorizationRoleScope;\n  }): Promise<readonly RoleDescriptor[]>;\n  listUserRoleAssignments(input?: {\n    userIds?: readonly string[];\n  }): Promise<readonly PlatformUserRoleAssignment[]>;\n  lookupAssignableOrganizationRole(\n    organizationId: string,\n    roleRef: string\n  ): Promise<AthenaAuthorizationRoleRecord | undefined>;\n  materialize(): Promise<void>;\n  readMemberRoleAssignmentsSnapshot(input: {\n    organizationId: string;\n  }): Promise<OrganizationMemberAssignmentSnapshot>;\n  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  readUserRoleAssignmentsSnapshot(input?: {\n    userIds?: readonly string[];\n  }): Promise<PlatformUserAssignmentSnapshot>;\n  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  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  replaceUserRoleAssignments(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    expectedVersion: number;\n    roleIds: readonly string[];\n    userId: string;\n  }): Promise<{ revision: number }>;\n  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  updateRole(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}\n\nfunction isStoreMethod(\n  value: unknown,\n  key: keyof AthenaAuthorizationStore\n): boolean {\n  return typeof (value as AthenaAuthorizationStore)[key] === \"function\";\n}\n\n/** Persisted Authorization store (not the HTTP `auth.authorization` client). */\nexport function isPersistedAuthorizationStore(\n  value: unknown\n): value is AthenaAuthorizationStore {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  return (\n    isStoreMethod(value, \"hasUserAssignment\") &&\n    isStoreMethod(value, \"readSnapshot\") &&\n    isStoreMethod(value, \"resolveEffectiveRights\")\n  );\n}\n\n/** Store that can project the DevTools inspect graph. */\nexport function isInspectableAuthorizationStore(\n  value: unknown\n): value is AthenaAuthorizationStore {\n  return (\n    isPersistedAuthorizationStore(value) && isStoreMethod(value, \"inspectGraph\")\n  );\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","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","import { AthenaChatError } from \"../error.ts\";\nimport { errorDescriptor } from \"../../runtime/error/registry.ts\";\n\nexport function chatError(\n  status: number,\n  message: string,\n  code: string,\n  details: Record<string, unknown> = {}\n): AthenaChatError {\n  const descriptor = errorDescriptor(\"chat\", code);\n  return new AthenaChatError({\n    body: {\n      ...details,\n      code,\n      message,\n      ...(descriptor ? { errorNumber: descriptor.errorNumber } : {}),\n    },\n    endpoint: \"local\",\n    message,\n    method: \"LOCAL\",\n    status,\n  });\n}\n\nexport function chatUnauthenticated(): AthenaChatError {\n  return chatError(\n    401,\n    \"Authentication required\",\n    \"ATHENA_CHAT_UNAUTHENTICATED\"\n  );\n}\n\nexport function chatForbidden(\n  message = \"Insufficient permissions\"\n): AthenaChatError {\n  return chatError(403, message, \"ATHENA_CHAT_FORBIDDEN\");\n}\n\nexport function chatAuthorizationDenied(message: string): AthenaChatError {\n  return chatError(403, message, \"ATHENA_CHAT_AUTHORIZATION_DENIED\");\n}\n\nexport function chatMembershipDenied(\n  message = \"Not a member of this chat room.\"\n): AthenaChatError {\n  return chatError(403, message, \"ATHENA_CHAT_MEMBERSHIP_DENIED\");\n}\n\nexport function chatRoleDenied(message: string): AthenaChatError {\n  return chatError(403, message, \"ATHENA_CHAT_ROLE_DENIED\");\n}\n\nexport function chatNotFound(message = \"Not found\"): AthenaChatError {\n  return chatError(404, message, \"ATHENA_CHAT_NOT_FOUND\");\n}\n\nexport function chatConflict(message: string): AthenaChatError {\n  return chatError(409, message, \"ATHENA_CHAT_CONFLICT\");\n}\n\nexport function chatBadRequest(message: string): AthenaChatError {\n  return chatError(400, message, \"ATHENA_CHAT_BAD_REQUEST\");\n}\n\nexport function chatCapabilityUnsupported(\n  capability: string,\n  runtime: \"local\" | \"remote\" = \"local\"\n): AthenaChatError {\n  return chatError(\n    501,\n    `Chat capability \"${capability}\" is unsupported on ${runtime} realtime.`,\n    \"ATHENA_CHAT_CAPABILITY_UNSUPPORTED\",\n    { capability, runtime }\n  );\n}\n\nexport function chatTransactionFailed(): AthenaChatError {\n  return chatError(\n    500,\n    \"Chat transaction failed.\",\n    \"ATHENA_CHAT_TRANSACTION_FAILED\"\n  );\n}\n\nexport function chatPublicationFailed(): AthenaChatError {\n  return chatError(\n    500,\n    \"Chat event publication failed after commit.\",\n    \"ATHENA_CHAT_PUBLICATION_FAILED\"\n  );\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { AthenaPrincipalResolver } from \"../../runtime/data/principal.ts\";\nimport {\n  authorizeChatOperation,\n  CHAT_AUTHORIZATION_DEFAULT_MODE,\n  type ChatOperation,\n} from \"../authorization.ts\";\nimport { LOCAL_CHAT_CAPABILITIES } from \"../capabilities.ts\";\nimport type { ChatMutationCommit } from \"../events.ts\";\nimport { emitChatExecutionEvent } from \"../observability.ts\";\nimport { createChatRealtimeSession } from \"../realtime/session.ts\";\nimport type { AthenaChatRuntime } from \"../runtime.ts\";\nimport type {\n  AthenaChatCallOptions,\n  AthenaChatConnectOptions,\n  AthenaChatRealtimeInfoResponse,\n} from \"../types.ts\";\nimport type { AthenaChatDatabase } from \"./database.ts\";\nimport { createChatMutationExecutor } from \"./mutation.ts\";\nimport { createPostgresChatStore } from \"./postgres-store.ts\";\nimport { resolveChatContext } from \"./principal.ts\";\nimport {\n  createInProcessRealtimeConnection,\n  InProcessChatRealtimeBus,\n} from \"./realtime.ts\";\nimport type { MemoryChatStore } from \"./store.ts\";\n\nexport interface LocalChatRuntimeDeps {\n  authorization?: {\n    mode?: \"compatibility\" | \"enforce\";\n  };\n  database?: AthenaChatDatabase;\n  resolvePrincipal: AthenaPrincipalResolver;\n  store?: MemoryChatStore;\n}\n\nfunction resolveLocalChatStore(deps: LocalChatRuntimeDeps) {\n  if (deps.store) {\n    return deps.store;\n  }\n  if (deps.database) {\n    return createPostgresChatStore(deps.database);\n  }\n  throw new AthenaConfigurationError(\n    \"ATHENA_CHAT_LOCAL_DATABASE_REQUIRED\",\n    \"Local Chat requires a borrowed AthenaChatDatabase or an explicit test store.\",\n    \"chat\"\n  );\n}\n\nexport function createLocalChatRuntime(\n  deps: LocalChatRuntimeDeps\n): AthenaChatRuntime {\n  const store = resolveLocalChatStore(deps);\n  const database = deps.database;\n  const bus = new InProcessChatRealtimeBus();\n  const executeMutation = createChatMutationExecutor(\n    deps.authorization?.mode ?? CHAT_AUTHORIZATION_DEFAULT_MODE\n  );\n  const authorizationMode =\n    deps.authorization?.mode ?? CHAT_AUTHORIZATION_DEFAULT_MODE;\n\n  const actorOf = async (options?: AthenaChatCallOptions) => {\n    const started = Date.now();\n    try {\n      return await resolveChatContext(deps.resolvePrincipal, options);\n    } catch (error) {\n      emitChatExecutionEvent({\n        errorPhase: \"principal\",\n        operation: \"principal.resolve\",\n        outcome: \"denied\",\n        principalAuthority: \"anonymous\",\n        totalMs: Date.now() - started,\n        traceId: options?.traceId,\n        transactionSemantics: \"atomic\",\n      });\n      throw error;\n    }\n  };\n  const authorizeRead = (\n    context: Awaited<ReturnType<typeof actorOf>>,\n    operation: ChatOperation\n  ): void => {\n    const started = Date.now();\n    try {\n      authorizeChatOperation(context, operation, authorizationMode);\n    } catch (error) {\n      emitChatExecutionEvent({\n        correlationId: context.correlationId,\n        errorPhase: \"authorize\",\n        operation,\n        organizationId: context.organizationId,\n        outcome: \"denied\",\n        principalAuthority: context.resolvedPrincipal.authority,\n        requestId: context.requestId,\n        totalMs: Date.now() - started,\n        traceId: context.traceId,\n        transactionSemantics: \"atomic\",\n      });\n      throw error;\n    }\n    emitChatExecutionEvent({\n      correlationId: context.correlationId,\n      operation,\n      organizationId: context.organizationId,\n      outcome: \"success\",\n      principalAuthority: context.resolvedPrincipal.authority,\n      requestId: context.requestId,\n      totalMs: Date.now() - started,\n      traceId: context.traceId,\n      transactionSemantics: \"atomic\",\n    });\n  };\n  const publish = <T>(commit: ChatMutationCommit<T>): void => {\n    if (commit.event) {\n      bus.publish(commit.event);\n    }\n  };\n  const mutate = <T>(\n    context: Awaited<ReturnType<typeof actorOf>>,\n    operation: ChatOperation,\n    callback: (next: typeof store) => Promise<ChatMutationCommit<T>>\n  ) =>\n    executeMutation({\n      context,\n      execute: () => store.transaction(callback),\n      operation,\n      publish,\n    });\n\n  const runtime: AthenaChatRuntime = {\n    capabilities: LOCAL_CHAT_CAPABILITIES,\n    message: {\n      reaction: {\n        async add(messageId, input, options) {\n          const actor = await actorOf(options);\n          const reactions = await mutate(actor, \"reactions.write\", (next) =>\n            Promise.resolve(next.addReaction(messageId, actor, input.emoji))\n          );\n          return { message_id: messageId, reactions };\n        },\n        async remove(messageId, emoji, options) {\n          const actor = await actorOf(options);\n          const reactions = await mutate(actor, \"reactions.write\", (next) =>\n            Promise.resolve(next.removeReaction(messageId, actor, emoji))\n          );\n          return { message_id: messageId, reactions };\n        },\n      },\n      async search(input, options) {\n        const actor = await actorOf(options);\n        authorizeRead(actor, \"search.read\");\n        return store.search(actor, input);\n      },\n    },\n    realtime: {\n      connect(options?: AthenaChatConnectOptions) {\n        return createInProcessRealtimeConnection(bus, options);\n      },\n      createSession(options) {\n        return createChatRealtimeSession(\n          {\n            async authorize(roomId) {\n              const actor = await actorOf();\n              authorizeRead(actor, \"rooms.read\");\n              await Promise.resolve(store.requireMember(roomId, actor));\n            },\n            local: true,\n            open(onEvent, onClose) {\n              const connection = createInProcessRealtimeConnection(bus, {\n                onMessage: (event) => onEvent(event),\n              });\n              return {\n                ...connection,\n                close(code, reason) {\n                  connection.close(code, reason);\n                  onClose();\n                },\n              };\n            },\n          },\n          options\n        );\n      },\n      async info(): Promise<AthenaChatRealtimeInfoResponse> {\n        return {\n          data: {\n            actions: [\"subscribe\", \"resume\"],\n            path: database?.ownership ?? \"memory\",\n            transport: \"in-process\",\n          },\n          message: \"Local Chat realtime is in-process.\",\n          status: \"success\",\n        };\n      },\n    },\n    room: {\n      async archive(roomId, options) {\n        const actor = await actorOf(options);\n        return mutate(actor, \"rooms.admin\", async (next) =>\n          next.archiveRoom(roomId, actor)\n        );\n      },\n      async create(input, options) {\n        const actor = await actorOf(options);\n        const data = await mutate(actor, \"rooms.write\", async (next) =>\n          next.createRoom(actor, input)\n        );\n        return { data, message: \"Room created\", status: \"success\" };\n      },\n      async get(roomId, options) {\n        const actor = await actorOf(options);\n        authorizeRead(actor, \"rooms.read\");\n        return store.getRoom(roomId, actor);\n      },\n      async list(query, options) {\n        const actor = await actorOf(options);\n        authorizeRead(actor, \"rooms.read\");\n        return { items: await store.listRooms(actor, query) };\n      },\n      member: {\n        async add(roomId, input, options) {\n          const actor = await actorOf(options);\n          return mutate(actor, \"members.write\", async (next) =>\n            next.addMembers(\n              roomId,\n              actor,\n              input.user_ids,\n              input.role ?? \"member\"\n            )\n          );\n        },\n        async list(roomId, options) {\n          const actor = await actorOf(options);\n          authorizeRead(actor, \"members.read\");\n          return store.listMembers(roomId, actor);\n        },\n        async remove(roomId, userId, options) {\n          const actor = await actorOf(options);\n          await mutate(actor, \"members.write\", async (next) =>\n            Promise.resolve(next.removeMember(roomId, actor, userId))\n          );\n          return { ok: true, user_id: userId };\n        },\n        async updateRole(roomId, userId, role, options) {\n          const actor = await actorOf(options);\n          return mutate(actor, \"members.write\", async (next) =>\n            next.updateMemberRole(roomId, actor, userId, role)\n          );\n        },\n      },\n      message: {\n        async delete(roomId, messageId, options) {\n          const actor = await actorOf(options);\n          await mutate(actor, \"messages.delete\", async (next) =>\n            Promise.resolve(next.deleteMessage(roomId, messageId, actor))\n          );\n          return { message_id: messageId, ok: true };\n        },\n        async list(roomId, query, options) {\n          const actor = await actorOf(options);\n          authorizeRead(actor, \"messages.read\");\n          return store.listMessages(roomId, actor, query);\n        },\n        async send(roomId, input, options) {\n          const actor = await actorOf(options);\n          const result = await mutate(actor, \"messages.write\", async (next) =>\n            next.sendMessage(roomId, actor, input)\n          );\n          return {\n            data: result.message,\n            message: \"Message sent\",\n            status: \"success\",\n          };\n        },\n        async update(roomId, messageId, input, options) {\n          const actor = await actorOf(options);\n          const result = await mutate(actor, \"messages.write\", async (next) =>\n            next.updateMessage(roomId, messageId, actor, input)\n          );\n          return result.message;\n        },\n      },\n      readCursor: {\n        async upTo(roomId, input, options) {\n          const actor = await actorOf(options);\n          const cursor = await mutate(actor, \"read.write\", async (next) =>\n            next.markRead(roomId, actor, input)\n          );\n          return {\n            last_read_message_id: cursor.last_read_message_id,\n            last_read_seq: cursor.last_read_seq,\n            room_id: roomId,\n            user_id: actor.userId,\n          };\n        },\n      },\n      async resolveDirect(input, options) {\n        const actor = await actorOf(options);\n        return mutate(actor, \"rooms.write\", async (next) =>\n          next.resolveDirect(actor, input.participant_user_ids)\n        );\n      },\n      async update(roomId, input, options) {\n        const actor = await actorOf(options);\n        return mutate(actor, \"rooms.admin\", async (next) =>\n          next.updateRoom(roomId, actor, input.title)\n        );\n      },\n    },\n  };\n\n  return runtime;\n}\n","import { missingRequiredRights } from \"../rights/matching.ts\";\nimport { parseAthenaRightKey, type AthenaRightKey } from \"../rights/key.ts\";\nimport type { ChatExecutionContext } from \"./local/principal.ts\";\nimport { chatAuthorizationDenied } from \"./local/errors.ts\";\n\nexport type ChatOperation =\n  | \"members.read\"\n  | \"members.write\"\n  | \"messages.delete\"\n  | \"messages.read\"\n  | \"messages.write\"\n  | \"read.write\"\n  | \"reactions.write\"\n  | \"rooms.admin\"\n  | \"rooms.read\"\n  | \"rooms.write\"\n  | \"search.read\";\n\nconst CHAT_OPERATION_RIGHTS: Readonly<Record<ChatOperation, AthenaRightKey>> =\n  Object.freeze({\n    \"members.read\": parseAthenaRightKey(\"chat.members.read\"),\n    \"members.write\": parseAthenaRightKey(\"chat.members.write\"),\n    \"messages.delete\": parseAthenaRightKey(\"chat.messages.delete\"),\n    \"messages.read\": parseAthenaRightKey(\"chat.messages.read\"),\n    \"messages.write\": parseAthenaRightKey(\"chat.messages.write\"),\n    \"read.write\": parseAthenaRightKey(\"chat.read.write\"),\n    \"reactions.write\": parseAthenaRightKey(\"chat.reactions.write\"),\n    \"rooms.admin\": parseAthenaRightKey(\"chat.rooms.admin\"),\n    \"rooms.read\": parseAthenaRightKey(\"chat.rooms.read\"),\n    \"rooms.write\": parseAthenaRightKey(\"chat.rooms.write\"),\n    \"search.read\": parseAthenaRightKey(\"chat.search.read\"),\n  });\n\nexport type ChatAuthorizationMode = \"compatibility\" | \"enforce\";\n\n/**\n * 5.x default. Compatibility is an explicit migration concession for trusted\n * custom principals with empty Rights; it is not the Hummingbird / Athena 6\n * authorization model. New deployments should set `authorization.mode: \"enforce\"`.\n * Athena 6 should flip this default to `\"enforce\"`.\n */\nexport const CHAT_AUTHORIZATION_DEFAULT_MODE: ChatAuthorizationMode =\n  \"compatibility\";\n\nfunction hasLegacyCompatibleIdentity(context: ChatExecutionContext): boolean {\n  const { principal } = context;\n  return (\n    context.rightsValid &&\n    context.resolvedPrincipal.authority === \"custom-trusted\" &&\n    principal.rights.length === 0 &&\n    principal.grants.length === 0 &&\n    !principal.service\n  );\n}\n\nexport function requiredChatRight(operation: ChatOperation): AthenaRightKey {\n  return CHAT_OPERATION_RIGHTS[operation];\n}\n\nexport function authorizeChatOperation(\n  context: ChatExecutionContext,\n  operation: ChatOperation,\n  mode: ChatAuthorizationMode\n): void {\n  if (!context.rightsValid) {\n    throw chatAuthorizationDenied(\"Chat principal contains malformed Rights.\");\n  }\n  if (mode === \"compatibility\" && hasLegacyCompatibleIdentity(context)) {\n    return;\n  }\n\n  const required = [requiredChatRight(operation)];\n  const missing = missingRequiredRights(context.principal.rights, required);\n  if (missing.length > 0) {\n    throw chatAuthorizationDenied(\n      `Chat operation \"${operation}\" requires ${missing.join(\", \")}.`\n    );\n  }\n}\n","import { recordAthenaDevtoolsEvent } from \"../devtools/buffer/index.ts\";\nimport { sanitizeAthenaDevtoolsDataEvent } from \"../devtools/sanitize/index.ts\";\n\nexport type ChatExecutionOutcome = \"denied\" | \"failure\" | \"success\";\n\nexport interface ChatExecutionEvent {\n  correlationId?: string;\n  errorPhase?:\n    | \"authorize\"\n    | \"principal\"\n    | \"publish\"\n    | \"transaction\"\n    | \"validation\";\n  eventId?: string;\n  operation: string;\n  organizationId?: string;\n  outcome: ChatExecutionOutcome;\n  principalAuthority: string;\n  requestId?: string;\n  roomId?: string;\n  roomSeq?: number | null;\n  totalMs: number;\n  traceId?: string;\n  transactionSemantics: \"atomic\";\n}\n\nexport function emitChatExecutionEvent(event: ChatExecutionEvent): void {\n  const sanitized = sanitizeAthenaDevtoolsDataEvent({\n    correlationId: event.correlationId,\n    domain: \"chat\",\n    errorPhase: event.errorPhase,\n    event: `chat.${event.operation}`,\n    eventId: event.eventId,\n    organizationId: event.organizationId,\n    operation: event.operation,\n    outcome: event.outcome,\n    principal: { authority: event.principalAuthority },\n    requestId: event.requestId,\n    resource: event.roomId,\n    roomId: event.roomId,\n    roomSeq: event.roomSeq,\n    traceId: event.traceId,\n    transactionSemantics: event.transactionSemantics,\n    timings: { totalMs: event.totalMs },\n  });\n  if (sanitized && process.env.NODE_ENV !== \"production\") {\n    recordAthenaDevtoolsEvent(sanitized);\n  }\n}\n","import type { AthenaDevtoolsDataEvent } from \"../protocol/index.ts\";\nimport { sanitizeAthenaDevtoolsDataEvent } from \"../sanitize/index.ts\";\n\nexport type AthenaDevtoolsEventBuffer = {\n  clear: () => void;\n  list: (options?: {\n    limit?: number;\n    since?: string;\n  }) => AthenaDevtoolsDataEvent[];\n  push: (event: AthenaDevtoolsDataEvent) => void;\n  readonly capacity: number;\n};\n\nconst DEFAULT_CAPACITY = 256;\n\nexport function createAthenaDevtoolsEventBuffer(options?: {\n  capacity?: number;\n  limit?: number;\n  max?: number;\n}): AthenaDevtoolsEventBuffer {\n  const capacity = Math.max(\n    1,\n    options?.capacity ?? options?.limit ?? options?.max ?? DEFAULT_CAPACITY\n  );\n  const items: AthenaDevtoolsDataEvent[] = [];\n\n  return {\n    get capacity() {\n      return capacity;\n    },\n    clear() {\n      items.length = 0;\n    },\n    list(listOptions) {\n      const since = listOptions?.since?.trim();\n      let selected = items;\n      if (since) {\n        const index = items.findIndex(\n          (event) => event.eventId === since || event.traceId === since\n        );\n        selected = index >= 0 ? items.slice(index + 1) : items;\n      }\n      const limit = listOptions?.limit;\n      const chronological =\n        typeof limit === \"number\" && Number.isFinite(limit) && limit >= 0\n          ? selected.slice(Math.max(0, selected.length - limit))\n          : [...selected];\n      return chronological.reverse();\n    },\n    push(event) {\n      const sanitized = sanitizeAthenaDevtoolsDataEvent(event);\n      if (!sanitized) {\n        return;\n      }\n      items.push(sanitized);\n      while (items.length > capacity) {\n        items.shift();\n      }\n    },\n  };\n}\n\nconst ATHENA_DEVTOOLS_RING = createAthenaDevtoolsEventBuffer({\n  capacity: DEFAULT_CAPACITY,\n});\n\nexport function getAthenaDevtoolsProcessEventBuffer(): AthenaDevtoolsEventBuffer {\n  return ATHENA_DEVTOOLS_RING;\n}\n\nexport function recordAthenaDevtoolsEvent(\n  event: AthenaDevtoolsDataEvent\n): void {\n  ATHENA_DEVTOOLS_RING.push(event);\n}\n","import type {\n  AthenaDevtoolsDataEvent,\n  AthenaDevtoolsDataTimings,\n} from \"../protocol/index.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction nullableNumber(value: unknown): number | null {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction nullableString(value: unknown): string | null {\n  return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction transactionSemantics(\n  value: unknown\n): AthenaDevtoolsDataEvent[\"transactionSemantics\"] {\n  if (\n    value === \"atomic\" ||\n    value === \"backend-managed\" ||\n    value === \"unknown\"\n  ) {\n    return value;\n  }\n  return null;\n}\n\nfunction timingsFrom(value: unknown): AthenaDevtoolsDataTimings {\n  const timings = isRecord(value) ? value : {};\n  const billingRaw = isRecord(timings.billing) ? timings.billing : undefined;\n  const phaseRaw = isRecord(billingRaw?.phaseTimings)\n    ? billingRaw.phaseTimings\n    : undefined;\n  return {\n    afterHooksMs: nullableNumber(timings.afterHooksMs),\n    authorizeMs: nullableNumber(timings.authorizeMs),\n    beforeHooksMs: nullableNumber(timings.beforeHooksMs),\n    ...(billingRaw\n      ? {\n          billing: {\n            phaseTimings: {\n              checkpointMs: nullableNumber(phaseRaw?.checkpointMs) ?? undefined,\n              projectionMs: nullableNumber(phaseRaw?.projectionMs) ?? undefined,\n              providerMs: nullableNumber(phaseRaw?.providerMs) ?? undefined,\n              resolveMs: nullableNumber(phaseRaw?.resolveMs) ?? undefined,\n              transactionMs:\n                nullableNumber(phaseRaw?.transactionMs) ?? undefined,\n            },\n            providerResourceId:\n              nullableString(billingRaw.providerResourceId) ?? undefined,\n            resourceId: nullableString(billingRaw.resourceId) ?? undefined,\n            resourceKind: nullableString(billingRaw.resourceKind) ?? undefined,\n          },\n        }\n      : {}),\n    executeMs: nullableNumber(timings.executeMs),\n    prepareMs: nullableNumber(timings.prepareMs),\n    totalMs: nullableNumber(timings.totalMs),\n  };\n}\n\n/** Allowlisted Data Nucleus summary. Drops payloads, records, and unknown keys. */\nexport function sanitizeAthenaDevtoolsDataEvent(\n  value: unknown\n): AthenaDevtoolsDataEvent | null {\n  if (!isRecord(value)) {\n    return null;\n  }\n  const principal = isRecord(value.principal) ? value.principal : null;\n  const operation = nullableString(value.operation);\n  const organizationId = nullableString(value.organizationId);\n  const roomId = nullableString(value.roomId);\n  const roomSeq = nullableNumber(value.roomSeq);\n  if (!operation) {\n    return null;\n  }\n  return {\n    affectedRows: nullableNumber(value.affectedRows),\n    connectionId: nullableString(value.connectionId) ? \"configured\" : null,\n    correlationId: nullableString(value.correlationId),\n    domain:\n      value.domain === \"auth\" ||\n      value.domain === \"billing\" ||\n      value.domain === \"chat\" ||\n      value.domain === \"data\" ||\n      value.domain === \"storage\"\n        ? value.domain\n        : null,\n    errorPhase: nullableString(value.errorPhase),\n    event: nullableString(value.event) ?? operation,\n    eventId: nullableString(value.eventId),\n    operation,\n    ...(organizationId ? { organizationId } : {}),\n    outcome: nullableString(value.outcome),\n    policyIds: Array.isArray(value.policyIds)\n      ? value.policyIds.filter(\n          (id): id is string => typeof id === \"string\" && Boolean(id.trim())\n        )\n      : null,\n    policyOutcome: nullableString(value.policyOutcome),\n    principal: {\n      authority: nullableString(principal?.authority),\n    },\n    provider: nullableString(value.provider),\n    requestId: nullableString(value.requestId),\n    resource: nullableString(value.resource),\n    ...(roomId ? { roomId } : {}),\n    ...(value.roomSeq !== undefined ? { roomSeq } : {}),\n    timings: timingsFrom(value.timings),\n    traceId: nullableString(value.traceId),\n    transactionSemantics: transactionSemantics(value.transactionSemantics),\n  };\n}\n\nexport function sanitizeAthenaDevtoolsDataEvents(\n  value: unknown\n): AthenaDevtoolsDataEvent[] {\n  if (!Array.isArray(value)) {\n    if (isRecord(value) && Array.isArray(value.events)) {\n      return sanitizeAthenaDevtoolsDataEvents(value.events);\n    }\n    return [];\n  }\n  return value\n    .map((entry) => sanitizeAthenaDevtoolsDataEvent(entry))\n    .filter((entry): entry is AthenaDevtoolsDataEvent => entry !== null);\n}\n","import {\n  authorizeChatOperation,\n  type ChatAuthorizationMode,\n  type ChatOperation,\n} from \"../authorization.ts\";\nimport type { ChatMutationCommit } from \"../events.ts\";\nimport {\n  emitChatExecutionEvent,\n  type ChatExecutionEvent,\n} from \"../observability.ts\";\nimport { AthenaChatError } from \"../error.ts\";\nimport {\n  chatPublicationFailed,\n  chatTransactionFailed,\n} from \"./errors.ts\";\nimport type { ChatExecutionContext } from \"./principal.ts\";\n\nexport interface ChatMutationInput<T> {\n  authorize?: (context: ChatExecutionContext) => void;\n  context: ChatExecutionContext;\n  execute: () => Promise<ChatMutationCommit<T>>;\n  operation: ChatOperation;\n  publish: (commit: ChatMutationCommit<T>) => void;\n}\n\nexport function createChatMutationExecutor(\n  mode: ChatAuthorizationMode,\n  onExecutionEvent: (event: ChatExecutionEvent) => void = emitChatExecutionEvent\n): <T>(input: ChatMutationInput<T>) => Promise<T> {\n  return <T>(input: ChatMutationInput<T>) =>\n    executeChatMutation(input, mode, onExecutionEvent);\n}\n\nexport async function executeChatMutation<T>(\n  input: ChatMutationInput<T>,\n  mode: ChatAuthorizationMode,\n  onExecutionEvent: (event: ChatExecutionEvent) => void = emitChatExecutionEvent\n): Promise<T> {\n    const started = Date.now();\n    let phase: ChatExecutionEvent[\"errorPhase\"] = \"authorize\";\n    try {\n      authorizeChatOperation(input.context, input.operation, mode);\n      input.authorize?.(input.context);\n      phase = \"transaction\";\n      const commit = await input.execute();\n      phase = \"publish\";\n      input.publish(commit);\n      onExecutionEvent({\n        correlationId: input.context.correlationId,\n        eventId: commit.event?.eventId,\n        operation: input.operation,\n        organizationId: input.context.organizationId,\n        outcome: \"success\",\n        principalAuthority: input.context.resolvedPrincipal.authority,\n        requestId: input.context.requestId,\n        roomId: commit.event?.roomId,\n        roomSeq: commit.event?.roomSeq,\n        totalMs: Date.now() - started,\n        traceId: input.context.traceId,\n        transactionSemantics: \"atomic\",\n      });\n      return commit.value;\n    } catch (error) {\n      const surfacedError =\n        error instanceof AthenaChatError\n          ? error\n          : phase === \"publish\"\n            ? chatPublicationFailed()\n            : chatTransactionFailed();\n      const status =\n        surfacedError && typeof surfacedError === \"object\" && \"status\" in surfacedError\n          ? (surfacedError as { status?: unknown }).status\n          : undefined;\n      onExecutionEvent({\n        correlationId: input.context.correlationId,\n        errorPhase:\n          status === 400 ? \"validation\" : phase === \"authorize\" ? \"authorize\" : phase,\n        operation: input.operation,\n        organizationId: input.context.organizationId,\n        outcome: phase === \"authorize\" ? \"denied\" : \"failure\",\n        principalAuthority: input.context.resolvedPrincipal.authority,\n        requestId: input.context.requestId,\n        totalMs: Date.now() - started,\n        traceId: input.context.traceId,\n        transactionSemantics: \"atomic\",\n      });\n      throw surfacedError;\n    }\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n  type ChatEventEnvelope,\n  type ChatMutationCommit,\n  createChatEvent,\n} from \"../events.ts\";\nimport { decodeChatSearchCursor, encodeChatSearchCursor } from \"../search.ts\";\nimport type {\n  AthenaChatAttachmentInput,\n  AthenaChatAttachmentView,\n  AthenaChatListRoomsQuery,\n  AthenaChatMember,\n  AthenaChatMemberRole,\n  AthenaChatMessage,\n  AthenaChatReactionCount,\n  AthenaChatRoom,\n  AthenaChatRoomKind,\n} from \"../types.ts\";\nimport type { AthenaChatDatabase } from \"./database.ts\";\nimport {\n  chatBadRequest,\n  chatConflict,\n  chatMembershipDenied,\n  chatNotFound,\n  chatRoleDenied,\n} from \"./errors.ts\";\nimport {\n  type ChatPersistenceIdentity,\n  normalizeChatRoomListQuery,\n} from \"./store.ts\";\n\ntype RoomRow = Record<string, unknown>;\ntype MessageRow = Record<string, unknown>;\ntype MemberRow = Record<string, unknown>;\n\nfunction nowIso(): string {\n  return new Date().toISOString();\n}\n\nfunction asString(value: unknown): string {\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n  if (value === null || value === undefined) {\n    return \"\";\n  }\n  return String(value);\n}\n\nfunction asNullableString(value: unknown): string | null {\n  if (value === null || value === undefined) {\n    return null;\n  }\n  const text = asString(value);\n  return text ? text : null;\n}\n\nfunction asNumber(value: unknown): number {\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    return value;\n  }\n  if (typeof value === \"bigint\") {\n    return Number(value);\n  }\n  if (typeof value === \"string\" && value.trim()) {\n    return Number(value);\n  }\n  return 0;\n}\n\nfunction asJson(value: unknown): Record<string, unknown> | null {\n  if (value === null || value === undefined) {\n    return null;\n  }\n  if (typeof value === \"string\") {\n    try {\n      const parsed: unknown = JSON.parse(value);\n      if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n        return parsed as Record<string, unknown>;\n      }\n    } catch {\n      return null;\n    }\n    return null;\n  }\n  if (typeof value === \"object\" && !Array.isArray(value)) {\n    return value as Record<string, unknown>;\n  }\n  return null;\n}\n\nfunction isUniqueViolation(error: unknown): boolean {\n  return (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"code\" in error &&\n    (error as { code?: string }).code === \"23505\"\n  );\n}\n\nfunction canonicalPair(left: string, right: string): [string, string] {\n  return left < right ? [left, right] : [right, left];\n}\n\nfunction mapRoom(row: RoomRow): AthenaChatRoom {\n  return {\n    archived_at: asNullableString(row.archived_at) ?? undefined,\n    created_at: asString(row.created_at),\n    created_by: asString(row.created_by),\n    id: asString(row.id),\n    kind: asString(row.kind) as AthenaChatRoomKind,\n    last_message_at: asNullableString(row.last_message_at) ?? undefined,\n    last_message_id: asNullableString(row.last_message_id) ?? undefined,\n    last_message_seq: asNumber(row.last_message_seq),\n    organization_id: asString(row.organization_id),\n    title: asNullableString(row.title),\n    updated_at: asString(row.updated_at),\n    version: asNumber(row.version),\n  };\n}\n\nfunction mapMember(row: MemberRow): AthenaChatMember {\n  return {\n    hidden_at: asNullableString(row.hidden_at) ?? undefined,\n    joined_at: asString(row.joined_at),\n    last_read_message_id:\n      asNullableString(row.last_read_message_id) ?? undefined,\n    last_read_seq: asNumber(row.last_read_seq),\n    muted: row.muted === true,\n    notification_mode: asNullableString(row.notification_mode) ?? undefined,\n    role: asString(row.role) as AthenaChatMemberRole,\n    room_id: asString(row.room_id),\n    user_id: asString(row.user_id),\n  };\n}\n\nfunction mapMessage(\n  row: MessageRow,\n  attachments: AthenaChatAttachmentView[],\n  reactions: AthenaChatReactionCount[]\n): AthenaChatMessage {\n  return {\n    attachments,\n    body_json: asJson(row.body_json),\n    body_text: asNullableString(row.body_text),\n    client_message_id: asNullableString(row.client_message_id),\n    created_at: asString(row.created_at),\n    deleted_at: asNullableString(row.deleted_at) ?? undefined,\n    edited_at: asNullableString(row.edited_at) ?? undefined,\n    id: asString(row.id),\n    metadata_json: asJson(row.metadata_json),\n    reactions,\n    reply_to_message_id: asNullableString(row.reply_to_message_id),\n    room_id: asString(row.room_id),\n    room_seq: asNumber(row.room_seq),\n    sender_id: asString(row.sender_id),\n  };\n}\n\nfunction mapAttachment(row: RoomRow): AthenaChatAttachmentView {\n  return {\n    authorized_url_path: `/files/${asString(row.file_id)}`,\n    bucket: asNullableString(row.bucket),\n    content_type: asNullableString(row.content_type),\n    extension: asNullableString(row.extension),\n    file_id: asString(row.file_id),\n    file_name: asNullableString(row.file_name),\n    file_url: asNullableString(row.url),\n    mime_type: asNullableString(row.mime_type),\n    ordinal: asNumber(row.ordinal),\n    original_name: asNullableString(row.original_name),\n    proxy_url_path: `/files/${asString(row.file_id)}`,\n    public_url_path: `/files/${asString(row.file_id)}`,\n    size_bytes: row.size_bytes == null ? null : asNumber(row.size_bytes),\n    status: asNullableString(row.status),\n    storage_key: asNullableString(row.storage_key),\n    visibility: asNullableString(row.visibility),\n  };\n}\n\nfunction mapReaction(row: RoomRow): AthenaChatReactionCount {\n  return {\n    count: asNumber(row.count),\n    emoji: asString(row.emoji),\n    reacted: row.reacted === true,\n  };\n}\n\nfunction attachmentView(\n  input: AthenaChatAttachmentInput\n): AthenaChatAttachmentView {\n  return {\n    ...input,\n    authorized_url_path: `/files/${input.file_id}`,\n    proxy_url_path: `/files/${input.file_id}`,\n    public_url_path: `/files/${input.file_id}`,\n  };\n}\n\nexport class PostgresChatStore {\n  constructor(private readonly database: AthenaChatDatabase) {}\n\n  async transaction<T>(\n    fn: (store: PostgresChatStore) => Promise<T>\n  ): Promise<T> {\n    return this.database.transaction(async (scoped) =>\n      fn(new PostgresChatStore(scoped))\n    );\n  }\n\n  async requireMember(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    lock = false\n  ): Promise<AthenaChatMember> {\n    const sql = `\n\t\t\tSELECT r.id, r.organization_id, r.archived_at, r.last_message_seq,\n\t\t\t\tm.room_id, m.user_id, m.role, m.joined_at, m.hidden_at, m.muted,\n\t\t\t\tm.notification_mode, m.last_read_seq, m.last_read_message_id\n\t\t\tFROM athena.chat_rooms AS r\n\t\t\tLEFT JOIN athena.chat_room_members AS m\n\t\t\t\tON m.room_id = r.id AND m.user_id = $2\n\t\t\tWHERE r.id = $1\n\t\t\t${lock ? \"FOR UPDATE OF r\" : \"\"}\n\t\t`;\n    const result = await this.database.query<RoomRow>(sql, [\n      roomId,\n      actor.userId,\n    ]);\n    const row = result.rows[0];\n    if (!row || asString(row.organization_id) !== actor.organizationId) {\n      throw chatNotFound(\"Chat room not found.\");\n    }\n    if (!row.user_id || row.hidden_at) {\n      throw chatMembershipDenied();\n    }\n    return mapMember(row);\n  }\n\n  async listRooms(\n    actor: ChatPersistenceIdentity,\n    query?: AthenaChatListRoomsQuery\n  ): Promise<AthenaChatRoom[]> {\n    const normalizedQuery = normalizeChatRoomListQuery(query);\n    const result = await this.database.query<RoomRow>(\n      `\n\t\t\tSELECT r.*\n\t\t\tFROM athena.chat_rooms AS r\n\t\t\tINNER JOIN athena.chat_room_members AS m\n\t\t\t\tON m.room_id = r.id\n\t\t\tWHERE r.organization_id = $1\n\t\t\t\tAND m.user_id = $2\n\t\t\t\tAND m.hidden_at IS NULL\n\t\t\t\tAND ($3::boolean OR r.archived_at IS NULL)\n\t\t\tORDER BY COALESCE(r.last_message_at, r.created_at) DESC,\n\t\t\t\tr.updated_at DESC, r.id DESC\n\t\t\tLIMIT $4 OFFSET $5\n\t\t\t`,\n      [\n        actor.organizationId,\n        actor.userId,\n        normalizedQuery.includeArchived,\n        normalizedQuery.limit,\n        normalizedQuery.offset,\n      ]\n    );\n    return result.rows.map(mapRoom);\n  }\n\n  async getRoom(\n    roomId: string,\n    actor: ChatPersistenceIdentity\n  ): Promise<AthenaChatRoom> {\n    await this.requireMember(roomId, actor);\n    const result = await this.database.query<RoomRow>(\n      \"SELECT * FROM athena.chat_rooms WHERE id = $1\",\n      [roomId]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw chatNotFound(\"Chat room not found.\");\n    }\n    return mapRoom(row);\n  }\n\n  async createRoom(\n    actor: ChatPersistenceIdentity,\n    input: {\n      kind: AthenaChatRoomKind;\n      member_user_ids?: string[];\n      title?: string | null;\n    }\n  ): Promise<ChatMutationCommit<AthenaChatRoom>> {\n    if (input.kind === \"dm\") {\n      throw chatBadRequest(\"Use resolveDirect for dm rooms.\");\n    }\n    const createdAt = nowIso();\n    const room: AthenaChatRoom = {\n      created_at: createdAt,\n      created_by: actor.userId,\n      id: randomUUID(),\n      kind: input.kind,\n      last_message_seq: 0,\n      organization_id: actor.organizationId,\n      title: input.title ?? null,\n      updated_at: createdAt,\n      version: 1,\n    };\n    await this.database.query(\n      `\n\t\t\tINSERT INTO athena.chat_rooms\n\t\t\t\t(id, organization_id, kind, title, created_by, last_message_seq, version, created_at, updated_at)\n\t\t\tVALUES\n\t\t\t\t($1, $2, $3, $4, $5, 0, 1, $6::timestamptz, $6::timestamptz)\n\t\t\t`,\n      [\n        room.id,\n        room.organization_id,\n        room.kind,\n        room.title,\n        room.created_by,\n        createdAt,\n      ]\n    );\n    const memberIds = new Set([actor.userId, ...(input.member_user_ids ?? [])]);\n    for (const userId of memberIds) {\n      await this.#putMember(\n        room.id,\n        userId,\n        userId === actor.userId ? \"owner\" : \"member\"\n      );\n    }\n    const event = createChatEvent({\n      payload: { room, type: \"chat.room.created\" },\n      roomId: room.id,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_room\", room.id, event);\n    return { event, value: room };\n  }\n\n  async resolveDirect(\n    actor: ChatPersistenceIdentity,\n    participantUserIds: [string, string]\n  ): Promise<ChatMutationCommit<AthenaChatRoom>> {\n    const [left, right] = participantUserIds;\n    if (!(left && right) || left === right) {\n      throw chatBadRequest(\"Direct rooms require two distinct participants.\");\n    }\n    if (actor.userId !== left && actor.userId !== right) {\n      throw chatMembershipDenied(\"Caller must be a direct-room participant.\");\n    }\n    const [one, two] = canonicalPair(left, right);\n    const createdAt = nowIso();\n    const candidateId = randomUUID();\n    await this.database.query(\n      `\n\t\t\tINSERT INTO athena.chat_rooms\n\t\t\t\t(id, organization_id, kind, title, created_by, last_message_seq, version, created_at, updated_at)\n\t\t\tVALUES\n\t\t\t\t($1, $2, 'dm', NULL, $3, 0, 1, $4::timestamptz, $4::timestamptz)\n\t\t\t`,\n      [candidateId, actor.organizationId, actor.userId, createdAt]\n    );\n    for (const userId of [one, two]) {\n      await this.#putMember(\n        candidateId,\n        userId,\n        userId === actor.userId ? \"owner\" : \"member\"\n      );\n    }\n    const inserted = await this.database.query<{ room_id: string }>(\n      `\n\t\t\tINSERT INTO athena.chat_direct_rooms\n\t\t\t\t(organization_id, participant_one_id, participant_two_id, room_id)\n\t\t\tVALUES\n\t\t\t\t($1, $2, $3, $4)\n\t\t\tON CONFLICT (organization_id, participant_one_id, participant_two_id) DO NOTHING\n\t\t\tRETURNING room_id\n\t\t\t`,\n      [actor.organizationId, one, two, candidateId]\n    );\n    const createdId = inserted.rows[0]?.room_id;\n    if (!createdId) {\n      await this.database.query(\"DELETE FROM athena.chat_rooms WHERE id = $1\", [\n        candidateId,\n      ]);\n      const existing = await this.database.query<{ room_id: string }>(\n        `\n\t\t\t\tSELECT room_id\n\t\t\t\tFROM athena.chat_direct_rooms\n\t\t\t\tWHERE organization_id = $1\n\t\t\t\t\tAND participant_one_id = $2\n\t\t\t\t\tAND participant_two_id = $3\n\t\t\t\t`,\n        [actor.organizationId, one, two]\n      );\n      const roomId = existing.rows[0]?.room_id;\n      if (!roomId) {\n        throw chatConflict(\n          \"direct room resolution conflicted without a durable room\"\n        );\n      }\n      return { value: await this.getRoom(roomId, actor) };\n    }\n    const room: AthenaChatRoom = {\n      created_at: createdAt,\n      created_by: actor.userId,\n      id: candidateId,\n      kind: \"dm\",\n      last_message_seq: 0,\n      organization_id: actor.organizationId,\n      title: null,\n      updated_at: createdAt,\n      version: 1,\n    };\n    const event = createChatEvent({\n      payload: { room, type: \"chat.room.created\" },\n      roomId: room.id,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_room\", room.id, event);\n    return { event, value: room };\n  }\n\n  async updateRoom(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    title?: string | null\n  ): Promise<ChatMutationCommit<AthenaChatRoom>> {\n    const member = await this.requireMember(roomId, actor, true);\n    if (member.role === \"member\") {\n      throw chatRoleDenied(\"Only owners and admins can update this room.\");\n    }\n    const current = await this.getRoom(roomId, actor);\n    const nextTitle = title === undefined ? current.title : title;\n    if (nextTitle === current.title) {\n      return { value: current };\n    }\n    await this.database.query(\n      `\n\t\t\tUPDATE athena.chat_rooms\n\t\t\tSET title = $2,\n\t\t\t\tupdated_at = now(),\n\t\t\t\tversion = version + 1\n\t\t\tWHERE id = $1\n\t\t\t`,\n      [roomId, nextTitle]\n    );\n    const room = await this.getRoom(roomId, actor);\n    const event = createChatEvent({\n      payload: { room, type: \"chat.room.updated\" },\n      roomId,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_room\", roomId, event);\n    return { event, value: room };\n  }\n\n  async archiveRoom(\n    roomId: string,\n    actor: ChatPersistenceIdentity\n  ): Promise<ChatMutationCommit<AthenaChatRoom>> {\n    const member = await this.requireMember(roomId, actor, true);\n    if (member.role === \"member\") {\n      throw chatRoleDenied(\"Only owners and admins can archive this room.\");\n    }\n    const current = await this.getRoom(roomId, actor);\n    if (current.archived_at) {\n      return { value: current };\n    }\n    await this.database.query(\n      `\n\t\t\tUPDATE athena.chat_rooms\n\t\t\tSET archived_at = now(),\n\t\t\t\tupdated_at = now(),\n\t\t\t\tversion = version + 1\n\t\t\tWHERE id = $1\n\t\t\t`,\n      [roomId]\n    );\n    const room = await this.getRoom(roomId, actor);\n    const event = createChatEvent({\n      payload: { room, type: \"chat.room.archived\" },\n      roomId,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_room\", roomId, event);\n    return { event, value: room };\n  }\n\n  async listMembers(\n    roomId: string,\n    actor: ChatPersistenceIdentity\n  ): Promise<AthenaChatMember[]> {\n    await this.requireMember(roomId, actor);\n    const result = await this.database.query<MemberRow>(\n      `\n\t\t\tSELECT *\n\t\t\tFROM athena.chat_room_members\n\t\t\tWHERE room_id = $1 AND hidden_at IS NULL\n\t\t\t`,\n      [roomId]\n    );\n    return result.rows.map(mapMember);\n  }\n\n  async addMembers(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    userIds: string[],\n    role: AthenaChatMemberRole = \"member\"\n  ): Promise<ChatMutationCommit<AthenaChatMember[]>> {\n    const member = await this.requireMember(roomId, actor, true);\n    if (member.role === \"member\") {\n      throw chatRoleDenied(\"Only owners and admins can add members.\");\n    }\n    if (![\"owner\", \"admin\", \"member\"].includes(role)) {\n      throw chatBadRequest(\"Invalid chat member role.\");\n    }\n    if (role === \"owner\" && member.role !== \"owner\") {\n      throw chatRoleDenied(\"Only an owner can grant owner role.\");\n    }\n    let changed = false;\n    for (const userId of userIds) {\n      changed = (await this.#putMember(roomId, userId, role)) || changed;\n    }\n    if (changed) {\n      await this.database.query(\n        \"UPDATE athena.chat_rooms SET version = version + 1, updated_at = now() WHERE id = $1\",\n        [roomId]\n      );\n    }\n    const members = await this.listMembers(roomId, actor);\n    const room = await this.database.query<{ version: unknown }>(\n      \"SELECT version FROM athena.chat_rooms WHERE id = $1\",\n      [roomId]\n    );\n    const version = asNumber(room.rows[0]?.version);\n    if (!changed) {\n      return { value: members };\n    }\n    const event = createChatEvent({\n      payload: {\n        type: \"chat.members.updated\",\n        version,\n      },\n      roomId,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_room\", roomId, event);\n    return { event, value: members };\n  }\n\n  async removeMember(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    userId: string\n  ): Promise<ChatMutationCommit<void>> {\n    const member = await this.requireMember(roomId, actor, true);\n    if (actor.userId !== userId && member.role === \"member\") {\n      throw chatRoleDenied(\"Only owners and admins can remove members.\");\n    }\n    const targetResult = await this.database.query<{\n      created_by: unknown;\n      role: unknown;\n    }>(\n      `\n\t\t\tSELECT r.created_by, m.role\n\t\t\tFROM athena.chat_rooms AS r\n\t\t\tINNER JOIN athena.chat_room_members AS m ON m.room_id = r.id\n\t\t\tWHERE r.id = $1 AND m.user_id = $2 AND m.hidden_at IS NULL\n\t\t\t`,\n      [roomId, userId]\n    );\n    const target = targetResult.rows[0];\n    if (!target) {\n      throw chatNotFound(\"Chat member not found.\");\n    }\n    const targetRole = asString(target.role);\n    if (targetRole === \"owner\") {\n      if (asString(target.created_by) === userId) {\n        throw chatRoleDenied(\"The founding owner cannot be removed.\");\n      }\n      if (actor.userId !== userId && member.role !== \"owner\") {\n        throw chatRoleDenied(\"Only an owner can remove another owner.\");\n      }\n      const owners = await this.database.query<{ count: unknown }>(\n        `\n\t\t\t\tSELECT COUNT(*)::int AS count\n\t\t\t\tFROM athena.chat_room_members\n\t\t\t\tWHERE room_id = $1 AND role = 'owner' AND hidden_at IS NULL\n\t\t\t\t`,\n        [roomId]\n      );\n      if (actor.userId === userId && asNumber(owners.rows[0]?.count) <= 1) {\n        throw chatRoleDenied(\"The last remaining owner cannot leave.\");\n      }\n    }\n    const result = await this.database.query(\n      `\n\t\t\tUPDATE athena.chat_room_members\n\t\t\tSET hidden_at = now()\n\t\t\tWHERE room_id = $1 AND user_id = $2\n\t\t\tRETURNING user_id\n\t\t\t`,\n      [roomId, userId]\n    );\n    if ((result.rows?.length ?? 0) === 0) {\n      throw chatNotFound(\"Chat member not found.\");\n    }\n    await this.database.query(\n      \"UPDATE athena.chat_rooms SET version = version + 1, updated_at = now() WHERE id = $1\",\n      [roomId]\n    );\n    const room = await this.database.query<{ version: unknown }>(\n      \"SELECT version FROM athena.chat_rooms WHERE id = $1\",\n      [roomId]\n    );\n    const event = createChatEvent({\n      payload: {\n        type: \"chat.members.updated\",\n        version: asNumber(room.rows[0]?.version),\n      },\n      roomId,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_room\", roomId, event);\n    return { event, value: undefined };\n  }\n\n  async updateMemberRole(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    userId: string,\n    role: AthenaChatMemberRole\n  ): Promise<ChatMutationCommit<AthenaChatMember[]>> {\n    const actorMember = await this.requireMember(roomId, actor, true);\n    if (actorMember.role !== \"owner\" && actorMember.role !== \"admin\") {\n      throw chatRoleDenied(\"Only owners and admins can update member roles.\");\n    }\n    if (![\"owner\", \"admin\", \"member\"].includes(role)) {\n      throw chatBadRequest(\"Invalid chat member role.\");\n    }\n    const targetResult = await this.database.query<{\n      created_by: unknown;\n      role: unknown;\n    }>(\n      `\n\t\t\tSELECT r.created_by, m.role\n\t\t\tFROM athena.chat_rooms AS r\n\t\t\tINNER JOIN athena.chat_room_members AS m ON m.room_id = r.id\n\t\t\tWHERE r.id = $1 AND m.user_id = $2 AND m.hidden_at IS NULL\n\t\t\t`,\n      [roomId, userId]\n    );\n    const target = targetResult.rows[0];\n    if (!target) {\n      throw chatNotFound(\"Chat member not found.\");\n    }\n    const previousRole = asString(target.role);\n    if (asString(target.created_by) === userId && role !== \"owner\") {\n      throw chatRoleDenied(\"The founding owner cannot be demoted.\");\n    }\n    if (previousRole === \"owner\" && role !== \"owner\") {\n      const owners = await this.database.query<{ count: unknown }>(\n        `\n\t\t\t\tSELECT COUNT(*)::int AS count\n\t\t\t\tFROM athena.chat_room_members\n\t\t\t\tWHERE room_id = $1 AND role = 'owner' AND hidden_at IS NULL\n\t\t\t\t`,\n        [roomId]\n      );\n      if (asNumber(owners.rows[0]?.count) <= 1) {\n        throw chatRoleDenied(\"The last remaining owner cannot be demoted.\");\n      }\n      if (actorMember.role !== \"owner\") {\n        throw chatRoleDenied(\"Only an owner can demote another owner.\");\n      }\n    }\n    if (role === \"owner\" && actorMember.role !== \"owner\") {\n      throw chatRoleDenied(\"Only an owner can grant owner role.\");\n    }\n    if (previousRole === role) {\n      return { value: await this.listMembers(roomId, actor) };\n    }\n    await this.database.query(\n      \"UPDATE athena.chat_room_members SET role = $3 WHERE room_id = $1 AND user_id = $2\",\n      [roomId, userId, role]\n    );\n    await this.database.query(\n      \"UPDATE athena.chat_rooms SET version = version + 1, updated_at = now() WHERE id = $1\",\n      [roomId]\n    );\n    const members = await this.listMembers(roomId, actor);\n    const room = await this.database.query<{ version: unknown }>(\n      \"SELECT version FROM athena.chat_rooms WHERE id = $1\",\n      [roomId]\n    );\n    const event = createChatEvent({\n      payload: {\n        type: \"chat.members.updated\",\n        version: asNumber(room.rows[0]?.version),\n      },\n      roomId,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_room\", roomId, event);\n    return { event, value: members };\n  }\n\n  async listMessages(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    query?: { after_seq?: number; before_seq?: number; limit?: number }\n  ): Promise<{\n    items: AthenaChatMessage[];\n    next_after_seq: number | null;\n    next_before_seq: number | null;\n  }> {\n    await this.requireMember(roomId, actor);\n    const limit = Math.min(200, Math.max(1, query?.limit ?? 50));\n    const order = query?.after_seq === undefined ? \"DESC\" : \"ASC\";\n    const result = await this.database.query<MessageRow>(\n      `\n\t\t\tSELECT *\n\t\t\tFROM athena.chat_messages\n\t\t\tWHERE room_id = $1\n\t\t\t\tAND deleted_at IS NULL\n\t\t\t\tAND ($2::bigint IS NULL OR room_seq > $2)\n\t\t\t\tAND ($3::bigint IS NULL OR room_seq < $3)\n\t\t\tORDER BY room_seq ${order}\n\t\t\tLIMIT $4\n\t\t\t`,\n      [roomId, query?.after_seq ?? null, query?.before_seq ?? null, limit]\n    );\n    const rows =\n      query?.after_seq === undefined ? [...result.rows].reverse() : result.rows;\n    const messages = await this.#hydrateMessages(rows, actor.userId);\n    return {\n      items: messages,\n      next_after_seq:\n        query?.after_seq !== undefined && messages.length === limit\n          ? (messages.at(-1)?.room_seq ?? null)\n          : null,\n      next_before_seq:\n        query?.after_seq === undefined && messages.length === limit\n          ? (messages[0]?.room_seq ?? null)\n          : null,\n    };\n  }\n\n  async sendMessage(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    input: {\n      attachments?: AthenaChatAttachmentInput[];\n      body_json?: Record<string, unknown> | null;\n      body_text?: string | null;\n      client_message_id?: string | null;\n      metadata_json?: Record<string, unknown> | null;\n      reply_to_message_id?: string | null;\n    }\n  ): Promise<ChatMutationCommit<{ message: AthenaChatMessage }>> {\n    const access = await this.#lockRoom(roomId, actor);\n    if (access.archived_at) {\n      throw chatConflict(\"Cannot send to an archived room.\");\n    }\n    if (input.client_message_id) {\n      const existing = await this.database.query<MessageRow>(\n        `\n\t\t\t\tSELECT *\n\t\t\t\tFROM athena.chat_messages\n\t\t\t\tWHERE room_id = $1\n\t\t\t\t\tAND sender_id = $2\n\t\t\t\t\tAND client_message_id = $3\n\t\t\t\t`,\n        [roomId, actor.userId, input.client_message_id]\n      );\n      const row = existing.rows[0];\n      if (row) {\n        const message = await this.#hydrateMessage(row, actor.userId);\n        return { value: { message } };\n      }\n    }\n    const createdAt = nowIso();\n    const nextSeq = access.last_message_seq + 1;\n    const messageId = randomUUID();\n    const attachments = (input.attachments ?? []).map(attachmentView);\n    try {\n      await this.database.query(\n        `\n\t\t\t\tINSERT INTO athena.chat_messages\n\t\t\t\t\t(id, room_id, room_seq, sender_id, client_message_id, body_text, body_json,\n\t\t\t\t\t reply_to_message_id, metadata_json, created_at)\n\t\t\t\tVALUES\n\t\t\t\t\t($1, $2, $3, $4, $5, $6, $7, $8, $9, $10::timestamptz)\n\t\t\t\t`,\n        [\n          messageId,\n          roomId,\n          nextSeq,\n          actor.userId,\n          input.client_message_id ?? null,\n          input.body_text ?? null,\n          input.body_json ?? null,\n          input.reply_to_message_id ?? null,\n          input.metadata_json ?? null,\n          createdAt,\n        ]\n      );\n    } catch (error) {\n      if (isUniqueViolation(error) && input.client_message_id) {\n        const replayed = await this.database.query<MessageRow>(\n          `\n\t\t\t\t\tSELECT *\n\t\t\t\t\tFROM athena.chat_messages\n\t\t\t\t\tWHERE room_id = $1\n\t\t\t\t\t\tAND sender_id = $2\n\t\t\t\t\t\tAND client_message_id = $3\n\t\t\t\t\t`,\n          [roomId, actor.userId, input.client_message_id]\n        );\n        const replayedRow = replayed.rows[0];\n        if (replayedRow) {\n          const message = await this.#hydrateMessage(replayedRow, actor.userId);\n          return { value: { message } };\n        }\n      }\n      throw error;\n    }\n    await this.#insertAttachments(messageId, attachments);\n    await this.database.query(\n      `\n\t\t\tUPDATE athena.chat_rooms\n\t\t\tSET last_message_id = $2,\n\t\t\t\tlast_message_seq = $3,\n\t\t\t\tlast_message_at = $4::timestamptz,\n\t\t\t\tupdated_at = $4::timestamptz\n\t\t\tWHERE id = $1\n\t\t\t`,\n      [roomId, messageId, nextSeq, createdAt]\n    );\n    const message: AthenaChatMessage = {\n      attachments,\n      body_json: input.body_json ?? null,\n      body_text: input.body_text ?? null,\n      client_message_id: input.client_message_id ?? null,\n      created_at: createdAt,\n      id: messageId,\n      metadata_json: input.metadata_json ?? null,\n      reactions: [],\n      reply_to_message_id: input.reply_to_message_id ?? null,\n      room_id: roomId,\n      room_seq: nextSeq,\n      sender_id: actor.userId,\n    };\n    const event = createChatEvent({\n      payload: { message, type: \"chat.message.created\" },\n      roomId,\n      roomSeq: nextSeq,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_message\", messageId, event);\n    return { event, value: { message } };\n  }\n\n  async updateMessage(\n    roomId: string,\n    messageId: string,\n    actor: ChatPersistenceIdentity,\n    input: {\n      body_json?: Record<string, unknown> | null;\n      body_text?: string | null;\n      metadata_json?: Record<string, unknown> | null;\n    }\n  ): Promise<ChatMutationCommit<{ message: AthenaChatMessage }>> {\n    await this.requireMember(roomId, actor, true);\n    const existing = await this.database.query<MessageRow>(\n      `\n\t\t\tSELECT *\n\t\t\tFROM athena.chat_messages\n\t\t\tWHERE id = $1 AND room_id = $2 AND deleted_at IS NULL\n\t\t\t`,\n      [messageId, roomId]\n    );\n    const row = existing.rows[0];\n    if (!row) {\n      throw chatNotFound(\"Chat message not found.\");\n    }\n    if (asString(row.sender_id) !== actor.userId) {\n      throw chatRoleDenied(\"Only the sender can edit this message.\");\n    }\n    const currentBodyText = asNullableString(row.body_text);\n    const currentBodyJson = asJson(row.body_json);\n    const currentMetadataJson = asJson(row.metadata_json);\n    const bodyText =\n      input.body_text === undefined ? currentBodyText : input.body_text;\n    const bodyJson =\n      input.body_json === undefined ? currentBodyJson : input.body_json;\n    const metadataJson =\n      input.metadata_json === undefined\n        ? currentMetadataJson\n        : input.metadata_json;\n    const changed =\n      JSON.stringify(bodyJson) !== JSON.stringify(currentBodyJson) ||\n      bodyText !== currentBodyText ||\n      JSON.stringify(metadataJson) !== JSON.stringify(currentMetadataJson);\n    if (!changed) {\n      return {\n        value: { message: await this.#hydrateMessage(row, actor.userId) },\n      };\n    }\n    await this.database.query(\n      `\n\t\t\tUPDATE athena.chat_messages\n\t\t\tSET body_text = $2,\n\t\t\t\tbody_json = $3,\n\t\t\t\tmetadata_json = $4,\n\t\t\t\tedited_at = now()\n\t\t\tWHERE id = $1\n\t\t\t`,\n      [messageId, bodyText, bodyJson, metadataJson]\n    );\n    const updated = await this.database.query<MessageRow>(\n      \"SELECT * FROM athena.chat_messages WHERE id = $1\",\n      [messageId]\n    );\n    const updatedRow = updated.rows[0] ?? row;\n    const message = await this.#hydrateMessage(updatedRow, actor.userId);\n    const event = createChatEvent({\n      payload: { message, type: \"chat.message.updated\" },\n      roomId,\n      roomSeq: message.room_seq,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_message\", messageId, event);\n    return { event, value: { message } };\n  }\n\n  async deleteMessage(\n    roomId: string,\n    messageId: string,\n    actor: ChatPersistenceIdentity\n  ): Promise<ChatMutationCommit<void>> {\n    await this.requireMember(roomId, actor, true);\n    const existing = await this.database.query<MessageRow>(\n      \"SELECT sender_id, deleted_at FROM athena.chat_messages WHERE id = $1 AND room_id = $2\",\n      [messageId, roomId]\n    );\n    const row = existing.rows[0];\n    if (!row) {\n      throw chatNotFound(\"Chat message not found.\");\n    }\n    if (asString(row.sender_id) !== actor.userId) {\n      throw chatRoleDenied(\"Only the sender can delete this message.\");\n    }\n    if (asNullableString(row.deleted_at)) {\n      return { value: undefined };\n    }\n    await this.database.query(\n      \"UPDATE athena.chat_messages SET deleted_at = now() WHERE id = $1\",\n      [messageId]\n    );\n    const message = await this.database.query<{ room_seq: unknown }>(\n      \"SELECT room_seq FROM athena.chat_messages WHERE id = $1\",\n      [messageId]\n    );\n    const event = createChatEvent({\n      payload: { message_id: messageId, type: \"chat.message.deleted\" },\n      roomId,\n      roomSeq: asNumber(message.rows[0]?.room_seq),\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_message\", messageId, event);\n    return { event, value: undefined };\n  }\n\n  async addReaction(\n    messageId: string,\n    actor: ChatPersistenceIdentity,\n    emoji: string\n  ): Promise<ChatMutationCommit<AthenaChatReactionCount[]>> {\n    const message = await this.#requireMessageAccess(messageId, actor);\n    const inserted = await this.database.query<{ message_id: unknown }>(\n      `\n\t\t\tINSERT INTO athena.chat_message_reactions (message_id, user_id, emoji)\n\t\t\tVALUES ($1, $2, $3)\n\t\t\tON CONFLICT (message_id, user_id, emoji) DO NOTHING\n\t\t\tRETURNING message_id\n\t\t\t`,\n      [messageId, actor.userId, emoji]\n    );\n    const reactions = await this.#reactionsFor(message.id, actor.userId);\n    if (inserted.rows.length === 0) {\n      return { value: reactions };\n    }\n    const event = createChatEvent({\n      payload: {\n        summary: { message_id: messageId, reactions },\n        type: \"chat.reaction.updated\",\n      },\n      roomId: message.room_id,\n      roomSeq: message.room_seq,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_message\", messageId, event);\n    return { event, value: reactions };\n  }\n\n  async removeReaction(\n    messageId: string,\n    actor: ChatPersistenceIdentity,\n    emoji: string\n  ): Promise<ChatMutationCommit<AthenaChatReactionCount[]>> {\n    const message = await this.#requireMessageAccess(messageId, actor);\n    const deleted = await this.database.query<{ message_id: unknown }>(\n      `\n\t\t\tDELETE FROM athena.chat_message_reactions\n\t\t\tWHERE message_id = $1 AND user_id = $2 AND emoji = $3\n\t\t\tRETURNING message_id\n\t\t\t`,\n      [messageId, actor.userId, emoji]\n    );\n    const reactions = await this.#reactionsFor(message.id, actor.userId);\n    if (deleted.rows.length === 0) {\n      return { value: reactions };\n    }\n    const event = createChatEvent({\n      payload: {\n        summary: { message_id: messageId, reactions },\n        type: \"chat.reaction.updated\",\n      },\n      roomId: message.room_id,\n      roomSeq: message.room_seq,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"chat_message\", messageId, event);\n    return { event, value: reactions };\n  }\n\n  async search(\n    actor: ChatPersistenceIdentity,\n    input: {\n      cursor?: string | null;\n      query: string;\n      room_id?: string | null;\n      limit?: number | null;\n    }\n  ): Promise<{\n    items: { message: AthenaChatMessage; room_id: string }[];\n    next_cursor: string | null;\n  }> {\n    const query = input.query.trim();\n    if (!query) {\n      throw chatBadRequest(\"Search query is required.\");\n    }\n    const limit = Math.min(100, Math.max(1, input.limit ?? 20));\n    const cursor = decodeChatSearchCursor(input.cursor);\n    if (\n      input.cursor &&\n      !(\n        cursor &&\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.test(\n          cursor.id\n        )\n      )\n    ) {\n      throw chatBadRequest(\"Search cursor is invalid.\");\n    }\n    const result = await this.database.query<MessageRow>(\n      `\n\t\t\tSELECT m.*\n\t\t\tFROM athena.chat_messages AS m\n\t\t\tINNER JOIN athena.chat_rooms AS r ON r.id = m.room_id\n\t\t\tINNER JOIN athena.chat_room_members AS rm ON rm.room_id = r.id\n\t\t\tWHERE r.organization_id = $1\n\t\t\t\tAND rm.user_id = $2\n\t\t\t\tAND rm.hidden_at IS NULL\n\t\t\t\tAND m.deleted_at IS NULL\n\t\t\t\tAND ($3::timestamptz IS NULL OR (m.created_at, m.id) < ($3::timestamptz, $4::uuid))\n\t\t\t\tAND ($5::uuid IS NULL OR m.room_id = $5)\n\t\t\t\tAND COALESCE(m.body_text, '') ILIKE '%' || $6 || '%'\n\t\t\tORDER BY m.created_at DESC, m.id DESC\n\t\t\tLIMIT $7\n\t\t\t`,\n      [\n        actor.organizationId,\n        actor.userId,\n        cursor?.createdAt ?? null,\n        cursor?.id ?? null,\n        input.room_id ?? null,\n        query,\n        limit,\n      ]\n    );\n    const messages = await this.#hydrateMessages(result.rows, actor.userId);\n    const hits = messages.map((message) => ({\n      message,\n      room_id: message.room_id,\n    }));\n    const last = result.rows.at(-1);\n    return {\n      items: hits,\n      next_cursor:\n        hits.length === limit && last\n          ? encodeChatSearchCursor({\n              createdAt: asString(last.created_at),\n              id: asString(last.id),\n            })\n          : null,\n    };\n  }\n\n  async markRead(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    input?: { message_id?: string | null; seq?: number | null }\n  ): Promise<\n    ChatMutationCommit<{\n      last_read_message_id?: string | null;\n      last_read_seq: number;\n    }>\n  > {\n    const member = await this.requireMember(roomId, actor, true);\n    const access = await this.#lockRoom(roomId, actor);\n    const currentMessageId = member.last_read_message_id ?? null;\n    let requestedSeq = input?.seq ?? member.last_read_seq;\n    let requestedMessageId = input?.message_id ?? currentMessageId;\n    if (input?.message_id) {\n      const existing = await this.database.query<MessageRow>(\n        \"SELECT id, room_seq FROM athena.chat_messages WHERE id = $1 AND room_id = $2\",\n        [input.message_id, roomId]\n      );\n      const row = existing.rows[0];\n      if (!row) {\n        throw chatNotFound(\"Chat message not found.\");\n      }\n      requestedSeq = asNumber(row.room_seq);\n      requestedMessageId = asString(row.id);\n    }\n    const seq = Math.min(\n      access.last_message_seq,\n      Math.max(member.last_read_seq, requestedSeq)\n    );\n    const nextMessageId =\n      seq === requestedSeq ? requestedMessageId : currentMessageId;\n    const changed =\n      seq !== member.last_read_seq || nextMessageId !== currentMessageId;\n    if (changed) {\n      await this.database.query(\n        `\n\t\t\tUPDATE athena.chat_room_members\n\t\t\tSET last_read_seq = $3,\n\t\t\t\tlast_read_message_id = $4\n\t\t\tWHERE room_id = $1 AND user_id = $2\n\t\t\t`,\n        [roomId, actor.userId, seq, nextMessageId]\n      );\n    }\n    const value = {\n      last_read_message_id: nextMessageId,\n      last_read_seq: seq,\n    };\n    if (!changed) {\n      return { value };\n    }\n    const event = createChatEvent({\n      payload: {\n        read_seq: seq,\n        type: \"chat.read.updated\",\n        user_id: actor.userId,\n      },\n      roomId,\n      roomSeq: access.last_message_seq,\n      traceId: actor.traceId,\n    });\n    await this.#insertOutbox(\"read_cursor\", actor.userId, event);\n    return { event, value };\n  }\n\n  async #lockRoom(\n    roomId: string,\n    actor: ChatPersistenceIdentity\n  ): Promise<{ archived_at: string | null; last_message_seq: number }> {\n    const result = await this.database.query<RoomRow>(\n      `\n\t\t\tSELECT r.archived_at, r.last_message_seq, r.organization_id, m.user_id, m.hidden_at\n\t\t\tFROM athena.chat_rooms AS r\n\t\t\tLEFT JOIN athena.chat_room_members AS m\n\t\t\t\tON m.room_id = r.id AND m.user_id = $2\n\t\t\tWHERE r.id = $1\n\t\t\tFOR UPDATE OF r\n\t\t\t`,\n      [roomId, actor.userId]\n    );\n    const row = result.rows[0];\n    if (!row || asString(row.organization_id) !== actor.organizationId) {\n      throw chatNotFound(\"Chat room not found.\");\n    }\n    if (!row.user_id || row.hidden_at) {\n      throw chatMembershipDenied();\n    }\n    return {\n      archived_at: asNullableString(row.archived_at),\n      last_message_seq: asNumber(row.last_message_seq),\n    };\n  }\n\n  async #putMember(\n    roomId: string,\n    userId: string,\n    role: AthenaChatMemberRole\n  ): Promise<boolean> {\n    const result = await this.database.query<{ user_id: unknown }>(\n      `\n\t\t\tINSERT INTO athena.chat_room_members\n\t\t\t\t(room_id, user_id, role, last_read_seq, muted)\n\t\t\tVALUES\n\t\t\t\t($1, $2, $3, 0, false)\n\t\t\tON CONFLICT (room_id, user_id) DO UPDATE\n\t\t\tSET hidden_at = NULL,\n\t\t\t\trole = EXCLUDED.role\n\t\t\tWHERE hidden_at IS NOT NULL\n\t\t\t\tOR role IS DISTINCT FROM EXCLUDED.role\n\t\t\tRETURNING user_id\n\t\t\t`,\n      [roomId, userId, role]\n    );\n    return result.rows.length > 0;\n  }\n\n  async #insertAttachments(\n    messageId: string,\n    attachments: AthenaChatAttachmentInput[]\n  ): Promise<void> {\n    for (const attachment of attachments) {\n      await this.database.query(\n        `\n\t\t\t\tINSERT INTO athena.files (id)\n\t\t\t\tVALUES ($1)\n\t\t\t\tON CONFLICT (id) DO NOTHING\n\t\t\t\t`,\n        [attachment.file_id]\n      );\n      await this.database.query(\n        `\n\t\t\t\tINSERT INTO athena.chat_message_attachments (message_id, file_id, ordinal)\n\t\t\t\tVALUES ($1, $2, $3)\n\t\t\t\t`,\n        [messageId, attachment.file_id, attachment.ordinal]\n      );\n    }\n  }\n\n  async #insertOutbox(\n    aggregateType: \"chat_message\" | \"chat_room\" | \"read_cursor\",\n    aggregateId: string,\n    event: ChatEventEnvelope\n  ): Promise<void> {\n    const persisted = {\n      event_id: event.eventId,\n      occurred_at: event.occurredAt,\n      payload: event.payload,\n      room_id: event.roomId,\n      room_seq: event.roomSeq,\n      ...(event.traceId ? { trace_id: event.traceId } : {}),\n    };\n    await this.database.query(\n      `\n\t\t\tINSERT INTO athena.chat_outbox\n\t\t\t\t(id, aggregate_type, aggregate_id, room_id, room_seq, event_type, payload_json)\n\t\t\tVALUES\n\t\t\t\t($1, $2, $3, $4, $5, $6, $7)\n\t\t\t`,\n      [\n        randomUUID(),\n        aggregateType,\n        aggregateId,\n        event.roomId,\n        event.roomSeq,\n        event.payload.type,\n        persisted,\n      ]\n    );\n  }\n\n  async #requireMessageAccess(\n    messageId: string,\n    actor: ChatPersistenceIdentity\n  ): Promise<AthenaChatMessage> {\n    const result = await this.database.query<MessageRow>(\n      `\n\t\t\tSELECT m.*\n\t\t\tFROM athena.chat_messages AS m\n\t\t\tINNER JOIN athena.chat_rooms AS r ON r.id = m.room_id\n\t\t\tWHERE m.id = $1 AND m.deleted_at IS NULL AND r.organization_id = $2\n\t\t\t`,\n      [messageId, actor.organizationId]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw chatNotFound(\"Chat message not found.\");\n    }\n    await this.requireMember(asString(row.room_id), actor);\n    return this.#hydrateMessage(row, actor.userId);\n  }\n\n  async #hydrateMessage(\n    row: MessageRow,\n    actorId: string\n  ): Promise<AthenaChatMessage> {\n    const [message] = await this.#hydrateMessages([row], actorId);\n    if (!message) {\n      throw chatNotFound(\"Chat message not found.\");\n    }\n    return message;\n  }\n\n  async #hydrateMessages(\n    rows: MessageRow[],\n    actorId: string\n  ): Promise<AthenaChatMessage[]> {\n    if (rows.length === 0) {\n      return [];\n    }\n\n    const messageIds = rows.map((row) => asString(row.id));\n    const [attachmentsByMessage, reactionsByMessage] = await Promise.all([\n      this.#attachmentsForMany(messageIds),\n      this.#reactionsForMany(messageIds, actorId),\n    ]);\n    return rows.map((row) => {\n      const messageId = asString(row.id);\n      return mapMessage(\n        row,\n        attachmentsByMessage.get(messageId) ?? [],\n        reactionsByMessage.get(messageId) ?? []\n      );\n    });\n  }\n\n  async #attachmentsForMany(\n    messageIds: string[]\n  ): Promise<Map<string, AthenaChatAttachmentView[]>> {\n    const result = await this.database.query<RoomRow>(\n      `\n\t\t\tSELECT a.message_id, a.file_id, a.ordinal, f.file_name, f.original_name, f.content_type,\n\t\t\t\tf.mime_type, f.extension, f.size_bytes, f.status, f.visibility, f.url,\n\t\t\t\tf.bucket, f.storage_key\n\t\t\tFROM athena.chat_message_attachments AS a\n\t\t\tLEFT JOIN athena.files AS f ON f.id = a.file_id\n\t\t\tWHERE a.message_id = ANY($1::uuid[])\n\t\t\tORDER BY a.message_id, a.ordinal\n\t\t\t`,\n      [messageIds]\n    );\n    const attachmentsByMessage = new Map<string, AthenaChatAttachmentView[]>();\n    for (const row of result.rows) {\n      const messageId = asString(row.message_id);\n      const attachments = attachmentsByMessage.get(messageId) ?? [];\n      attachments.push(mapAttachment(row));\n      attachmentsByMessage.set(messageId, attachments);\n    }\n    return attachmentsByMessage;\n  }\n\n  async #reactionsFor(\n    messageId: string,\n    actorId: string\n  ): Promise<AthenaChatReactionCount[]> {\n    const result = await this.database.query<{\n      count: unknown;\n      emoji: string;\n      reacted: unknown;\n    }>(\n      `\n\t\t\tSELECT emoji,\n\t\t\t\tCOUNT(*)::int AS count,\n\t\t\t\tBOOL_OR(user_id = $2) AS reacted\n\t\t\tFROM athena.chat_message_reactions\n\t\t\tWHERE message_id = $1\n\t\t\tGROUP BY emoji\n\t\t\t`,\n      [messageId, actorId]\n    );\n    return result.rows.map(mapReaction);\n  }\n\n  async #reactionsForMany(\n    messageIds: string[],\n    actorId: string\n  ): Promise<Map<string, AthenaChatReactionCount[]>> {\n    const result = await this.database.query<RoomRow>(\n      `\n\t\t\tSELECT message_id, emoji,\n\t\t\t\tCOUNT(*)::int AS count,\n\t\t\t\tBOOL_OR(user_id = $2) AS reacted\n\t\t\tFROM athena.chat_message_reactions\n\t\t\tWHERE message_id = ANY($1::uuid[])\n\t\t\tGROUP BY message_id, emoji\n\t\t\tORDER BY message_id, emoji\n\t\t\t`,\n      [messageIds, actorId]\n    );\n    const reactionsByMessage = new Map<string, AthenaChatReactionCount[]>();\n    for (const row of result.rows) {\n      const messageId = asString(row.message_id);\n      const reactions = reactionsByMessage.get(messageId) ?? [];\n      reactions.push(mapReaction(row));\n      reactionsByMessage.set(messageId, reactions);\n    }\n    return reactionsByMessage;\n  }\n}\n\nexport function createPostgresChatStore(\n  database: AthenaChatDatabase\n): PostgresChatStore {\n  return new PostgresChatStore(database);\n}\n","import { randomUUID } from \"node:crypto\";\nimport type {\n  AthenaChatMessage,\n  AthenaChatReactionSummary,\n  AthenaChatRoom,\n  AthenaChatWsServerEvent,\n} from \"./types.ts\";\n\nexport type ChatEventPayload =\n  | {\n      room: AthenaChatRoom;\n      type: \"chat.room.created\";\n    }\n  | {\n      room: AthenaChatRoom;\n      type: \"chat.room.updated\";\n    }\n  | {\n      room: AthenaChatRoom;\n      type: \"chat.room.archived\";\n    }\n  | {\n      message: AthenaChatMessage;\n      type: \"chat.message.created\";\n    }\n  | {\n      message: AthenaChatMessage;\n      type: \"chat.message.updated\";\n    }\n  | {\n      message_id: string;\n      type: \"chat.message.deleted\";\n    }\n  | {\n      type: \"chat.members.updated\";\n      version: number;\n    }\n  | {\n      read_seq: number;\n      type: \"chat.read.updated\";\n      user_id: string;\n    }\n  | {\n      summary: AthenaChatReactionSummary;\n      type: \"chat.reaction.updated\";\n    };\n\nexport interface ChatEventEnvelope {\n  readonly eventId: string;\n  readonly occurredAt: string;\n  readonly payload: ChatEventPayload;\n  readonly roomId: string;\n  readonly roomSeq: number | null;\n  readonly traceId?: string;\n}\n\nexport interface ChatMutationCommit<T> {\n  event?: ChatEventEnvelope;\n  value: T;\n}\n\nexport function createChatEvent(input: {\n  payload: ChatEventPayload;\n  roomId: string;\n  roomSeq?: number | null;\n  traceId?: string;\n}): ChatEventEnvelope {\n  return Object.freeze({\n    eventId: randomUUID(),\n    occurredAt: new Date().toISOString(),\n    payload: Object.freeze(input.payload),\n    roomId: input.roomId,\n    roomSeq: input.roomSeq ?? null,\n    ...(input.traceId ? { traceId: input.traceId } : {}),\n  });\n}\n\nfunction eventMetadata(event: ChatEventEnvelope): {\n  event_id: string;\n  occurred_at: string;\n  trace_id?: string;\n} {\n  return {\n    event_id: event.eventId,\n    occurred_at: event.occurredAt,\n    ...(event.traceId ? { trace_id: event.traceId } : {}),\n  };\n}\n\nexport function chatEventToWsEvent(\n  event: ChatEventEnvelope\n): AthenaChatWsServerEvent {\n  const metadata = eventMetadata(event);\n  switch (event.payload.type) {\n    case \"chat.room.created\":\n    case \"chat.room.updated\":\n    case \"chat.room.archived\":\n      return {\n        ...metadata,\n        room: event.payload.room,\n        room_id: event.roomId,\n        type: event.payload.type,\n      };\n    case \"chat.message.created\":\n    case \"chat.message.updated\":\n      return {\n        ...metadata,\n        message: event.payload.message,\n        room_id: event.roomId,\n        seq: event.roomSeq ?? event.payload.message.room_seq,\n        type: event.payload.type,\n      };\n    case \"chat.message.deleted\":\n      return {\n        ...metadata,\n        message_id: event.payload.message_id,\n        room_id: event.roomId,\n        seq: event.roomSeq ?? 0,\n        type: event.payload.type,\n      };\n    case \"chat.members.updated\":\n      return {\n        ...metadata,\n        room_id: event.roomId,\n        seq: event.roomSeq,\n        type: event.payload.type,\n        version: event.payload.version,\n      };\n    case \"chat.read.updated\":\n      return {\n        ...metadata,\n        read_cursor: {\n          last_read_seq: event.payload.read_seq,\n          room_id: event.roomId,\n          user_id: event.payload.user_id,\n        },\n        read_seq: event.payload.read_seq,\n        room_id: event.roomId,\n        seq: event.roomSeq ?? event.payload.read_seq,\n        user_id: event.payload.user_id,\n        type: event.payload.type,\n      };\n    case \"chat.reaction.updated\":\n      return {\n        ...metadata,\n        room_id: event.roomId,\n        seq: event.roomSeq,\n        summary: event.payload.summary,\n        type: event.payload.type,\n      };\n  }\n}\n","export interface ChatSearchCursor {\n  createdAt: string;\n  id: string;\n}\n\nexport function encodeChatSearchCursor(cursor: ChatSearchCursor): string {\n  return `${cursor.createdAt}|${cursor.id}`;\n}\n\nexport function decodeChatSearchCursor(\n  value: string | null | undefined\n): ChatSearchCursor | undefined {\n  if (!value) {\n    return;\n  }\n  const separator = value.indexOf(\"|\");\n  if (separator <= 0 || separator === value.length - 1) {\n    return;\n  }\n  try {\n    const createdAt = value.slice(0, separator);\n    const id = value.slice(separator + 1);\n    if (!createdAt || !id || Number.isNaN(Date.parse(createdAt))) {\n      return;\n    }\n    return { createdAt, id };\n  } catch (error) {\n    if (error instanceof URIError) {\n      return;\n    }\n    throw error;\n  }\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n  type ChatEventEnvelope,\n  type ChatMutationCommit,\n  createChatEvent,\n} from \"../events.ts\";\nimport { decodeChatSearchCursor, encodeChatSearchCursor } from \"../search.ts\";\nimport type {\n  AthenaChatAttachmentInput,\n  AthenaChatListRoomsQuery,\n  AthenaChatMember,\n  AthenaChatMemberRole,\n  AthenaChatMessage,\n  AthenaChatReactionCount,\n  AthenaChatRoom,\n  AthenaChatRoomKind,\n} from \"../types.ts\";\nimport {\n  chatBadRequest,\n  chatConflict,\n  chatMembershipDenied,\n  chatNotFound,\n  chatRoleDenied,\n} from \"./errors.ts\";\nimport type { ChatExecutionContext } from \"./principal.ts\";\n\nexport type ChatPersistenceIdentity = Pick<\n  ChatExecutionContext,\n  \"organizationId\" | \"traceId\" | \"userId\"\n>;\n\ntype StoredMember = AthenaChatMember;\ntype StoredRoom = AthenaChatRoom;\ntype StoredMessage = AthenaChatMessage;\ninterface StoredReaction {\n  emoji: string;\n  messageId: string;\n  userId: string;\n}\n\nexport interface ChatSnapshot {\n  directs: Map<string, string>;\n  members: Map<string, StoredMember>;\n  messages: Map<string, StoredMessage>;\n  outbox: ChatEventEnvelope[];\n  reactions: StoredReaction[];\n  rooms: Map<string, StoredRoom>;\n}\n\nfunction cloneEvent(event: ChatEventEnvelope): ChatEventEnvelope {\n  return JSON.parse(JSON.stringify(event)) as ChatEventEnvelope;\n}\n\nfunction cloneSnapshot(state: ChatSnapshot): ChatSnapshot {\n  return {\n    directs: new Map(state.directs),\n    members: new Map(state.members),\n    messages: new Map(\n      [...state.messages.entries()].map(([id, message]) => [\n        id,\n        {\n          ...message,\n          attachments: [...message.attachments],\n          reactions: message.reactions.map((item) => ({ ...item })),\n        },\n      ])\n    ),\n    outbox: state.outbox.map(cloneEvent),\n    reactions: state.reactions.map((item) => ({ ...item })),\n    rooms: new Map(\n      [...state.rooms.entries()].map(([id, room]) => [id, { ...room }])\n    ),\n  };\n}\n\nfunction nowIso(): string {\n  return new Date().toISOString();\n}\n\nfunction memberKey(roomId: string, userId: string): string {\n  return `${roomId}:${userId}`;\n}\n\nfunction canonicalDirectKey(\n  organizationId: string,\n  left: string,\n  right: string\n): string {\n  const [a, b] = left < right ? [left, right] : [right, left];\n  return `${organizationId}:${a}:${b}`;\n}\n\nfunction likeMatch(haystack: string, query: string): boolean {\n  return haystack.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction reactionsFor(\n  state: ChatSnapshot,\n  messageId: string,\n  actorId: string\n): AthenaChatReactionCount[] {\n  const counts = new Map<string, { count: number; reacted: boolean }>();\n  for (const reaction of state.reactions) {\n    if (reaction.messageId !== messageId) {\n      continue;\n    }\n    const current = counts.get(reaction.emoji) ?? { count: 0, reacted: false };\n    current.count += 1;\n    if (reaction.userId === actorId) {\n      current.reacted = true;\n    }\n    counts.set(reaction.emoji, current);\n  }\n  return [...counts.entries()].map(([emoji, value]) => ({\n    count: value.count,\n    emoji,\n    reacted: value.reacted,\n  }));\n}\n\nfunction hydrateMessage(\n  state: ChatSnapshot,\n  message: StoredMessage,\n  actorId: string\n): AthenaChatMessage {\n  return {\n    ...message,\n    attachments: [...message.attachments],\n    reactions: reactionsFor(state, message.id, actorId),\n  };\n}\n\nexport interface NormalizedChatRoomListQuery {\n  includeArchived: boolean;\n  limit: number;\n  offset: number;\n}\n\nexport function normalizeChatRoomListQuery(\n  query?: AthenaChatListRoomsQuery\n): NormalizedChatRoomListQuery {\n  const requestedLimit = query?.limit;\n  const limit =\n    typeof requestedLimit === \"number\" && Number.isFinite(requestedLimit)\n      ? Math.min(200, Math.max(1, Math.trunc(requestedLimit)))\n      : 50;\n  const requestedOffset = query?.offset;\n  const offset =\n    typeof requestedOffset === \"number\" && Number.isFinite(requestedOffset)\n      ? Math.max(0, Math.trunc(requestedOffset))\n      : 0;\n  return {\n    includeArchived: query?.include_archived ?? false,\n    limit,\n    offset,\n  };\n}\n\nexport class MemoryChatStore {\n  #transactionTail: Promise<void> = Promise.resolve();\n  #state: ChatSnapshot = {\n    directs: new Map(),\n    members: new Map(),\n    messages: new Map(),\n    outbox: [],\n    reactions: [],\n    rooms: new Map(),\n  };\n\n  async transaction<T>(fn: (store: MemoryChatStore) => Promise<T>): Promise<T> {\n    let release: (() => void) | undefined;\n    const turn = new Promise<void>((resolve) => {\n      release = resolve;\n    });\n    const previousTurn = this.#transactionTail;\n    this.#transactionTail = previousTurn.then(() => turn);\n    await previousTurn;\n    const previous = cloneSnapshot(this.#state);\n    try {\n      return await fn(this);\n    } catch (error) {\n      this.#state = previous;\n      throw error;\n    } finally {\n      const releaseTurn = release;\n      if (releaseTurn) {\n        release = undefined;\n        releaseTurn();\n      }\n    }\n  }\n\n  listOutbox(): ChatEventEnvelope[] {\n    return this.#state.outbox.map(cloneEvent);\n  }\n\n  #appendEvent(event: ChatEventEnvelope): ChatEventEnvelope {\n    this.#state.outbox.push(event);\n    return event;\n  }\n\n  requireMember(roomId: string, actor: ChatPersistenceIdentity): StoredMember {\n    const room = this.#state.rooms.get(roomId);\n    if (!room || room.organization_id !== actor.organizationId) {\n      throw chatNotFound(\"Chat room not found.\");\n    }\n    const member = this.#state.members.get(memberKey(roomId, actor.userId));\n    if (!member || member.hidden_at) {\n      throw chatMembershipDenied();\n    }\n    return member;\n  }\n\n  listRooms(\n    actor: ChatPersistenceIdentity,\n    query?: AthenaChatListRoomsQuery\n  ): StoredRoom[] {\n    const normalizedQuery = normalizeChatRoomListQuery(query);\n    const rooms: StoredRoom[] = [];\n    for (const room of this.#state.rooms.values()) {\n      if (room.organization_id !== actor.organizationId) {\n        continue;\n      }\n      if (room.archived_at && !normalizedQuery.includeArchived) {\n        continue;\n      }\n      const member = this.#state.members.get(memberKey(room.id, actor.userId));\n      if (!member || member.hidden_at) {\n        continue;\n      }\n      rooms.push({ ...room });\n    }\n    rooms.sort((left, right) => {\n      const byActivity = (\n        right.last_message_at ?? right.created_at\n      ).localeCompare(left.last_message_at ?? left.created_at);\n      if (byActivity !== 0) {\n        return byActivity;\n      }\n      const byUpdate = right.updated_at.localeCompare(left.updated_at);\n      return byUpdate === 0 ? right.id.localeCompare(left.id) : byUpdate;\n    });\n    return rooms.slice(\n      normalizedQuery.offset,\n      normalizedQuery.offset + normalizedQuery.limit\n    );\n  }\n\n  getRoom(roomId: string, actor: ChatPersistenceIdentity): StoredRoom {\n    this.requireMember(roomId, actor);\n    const room = this.#state.rooms.get(roomId);\n    if (!room) {\n      throw chatNotFound(\"Chat room not found.\");\n    }\n    return { ...room };\n  }\n\n  createRoom(\n    actor: ChatPersistenceIdentity,\n    input: {\n      kind: AthenaChatRoomKind;\n      member_user_ids?: string[];\n      title?: string | null;\n    }\n  ): ChatMutationCommit<StoredRoom> {\n    if (input.kind === \"dm\") {\n      throw chatBadRequest(\"Use resolveDirect for dm rooms.\");\n    }\n    const createdAt = nowIso();\n    const room: StoredRoom = {\n      created_at: createdAt,\n      created_by: actor.userId,\n      id: randomUUID(),\n      kind: input.kind,\n      last_message_seq: 0,\n      organization_id: actor.organizationId,\n      title: input.title ?? null,\n      updated_at: createdAt,\n      version: 1,\n    };\n    this.#state.rooms.set(room.id, room);\n    this.#putMember(room.id, actor.userId, \"owner\", createdAt);\n    for (const userId of input.member_user_ids ?? []) {\n      if (userId !== actor.userId) {\n        this.#putMember(room.id, userId, \"member\", createdAt);\n      }\n    }\n    return {\n      event: this.#appendEvent(\n        createChatEvent({\n          payload: { room: { ...room }, type: \"chat.room.created\" },\n          roomId: room.id,\n          traceId: actor.traceId,\n        })\n      ),\n      value: { ...room },\n    };\n  }\n\n  resolveDirect(\n    actor: ChatPersistenceIdentity,\n    participantUserIds: [string, string]\n  ): ChatMutationCommit<StoredRoom> {\n    const [left, right] = participantUserIds;\n    if (!(left && right) || left === right) {\n      throw chatBadRequest(\"Direct rooms require two distinct participants.\");\n    }\n    if (actor.userId !== left && actor.userId !== right) {\n      throw chatMembershipDenied(\"Caller must be a direct-room participant.\");\n    }\n    const key = canonicalDirectKey(actor.organizationId, left, right);\n    const existingId = this.#state.directs.get(key);\n    if (existingId) {\n      return { value: this.getRoom(existingId, actor) };\n    }\n    const createdAt = nowIso();\n    const room: StoredRoom = {\n      created_at: createdAt,\n      created_by: actor.userId,\n      id: randomUUID(),\n      kind: \"dm\",\n      last_message_seq: 0,\n      organization_id: actor.organizationId,\n      title: null,\n      updated_at: createdAt,\n      version: 1,\n    };\n    this.#state.rooms.set(room.id, room);\n    this.#state.directs.set(key, room.id);\n    this.#putMember(room.id, left, \"member\", createdAt);\n    this.#putMember(room.id, right, \"member\", createdAt);\n    return {\n      event: this.#appendEvent(\n        createChatEvent({\n          payload: { room: { ...room }, type: \"chat.room.created\" },\n          roomId: room.id,\n          traceId: actor.traceId,\n        })\n      ),\n      value: { ...room },\n    };\n  }\n\n  updateRoom(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    title?: string | null\n  ): ChatMutationCommit<StoredRoom> {\n    const member = this.requireMember(roomId, actor);\n    if (member.role === \"member\") {\n      throw chatRoleDenied(\"Only owners and admins can update this room.\");\n    }\n    const room = this.#state.rooms.get(roomId);\n    if (!room) {\n      throw chatNotFound(\"Chat room not found.\");\n    }\n    const nextTitle = title === undefined ? room.title : title;\n    if (nextTitle === room.title) {\n      return { value: { ...room } };\n    }\n    room.title = nextTitle;\n    room.updated_at = nowIso();\n    room.version += 1;\n    return {\n      event: this.#appendEvent(\n        createChatEvent({\n          payload: { room: { ...room }, type: \"chat.room.updated\" },\n          roomId: room.id,\n          traceId: actor.traceId,\n        })\n      ),\n      value: { ...room },\n    };\n  }\n\n  archiveRoom(\n    roomId: string,\n    actor: ChatPersistenceIdentity\n  ): ChatMutationCommit<StoredRoom> {\n    const member = this.requireMember(roomId, actor);\n    if (member.role === \"member\") {\n      throw chatRoleDenied(\"Only owners and admins can archive this room.\");\n    }\n    const room = this.#state.rooms.get(roomId);\n    if (!room) {\n      throw chatNotFound(\"Chat room not found.\");\n    }\n    if (room.archived_at) {\n      return { value: { ...room } };\n    }\n    room.archived_at = nowIso();\n    room.updated_at = room.archived_at;\n    room.version += 1;\n    return {\n      event: this.#appendEvent(\n        createChatEvent({\n          payload: { room: { ...room }, type: \"chat.room.archived\" },\n          roomId: room.id,\n          traceId: actor.traceId,\n        })\n      ),\n      value: { ...room },\n    };\n  }\n\n  listMembers(roomId: string, actor: ChatPersistenceIdentity): StoredMember[] {\n    this.requireMember(roomId, actor);\n    return [...this.#state.members.values()]\n      .filter((member) => member.room_id === roomId && !member.hidden_at)\n      .map((member) => ({ ...member }));\n  }\n\n  addMembers(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    userIds: string[],\n    role: AthenaChatMemberRole = \"member\"\n  ): ChatMutationCommit<StoredMember[]> {\n    const member = this.requireMember(roomId, actor);\n    if (member.role === \"member\") {\n      throw chatRoleDenied(\"Only owners and admins can add members.\");\n    }\n    if (![\"owner\", \"admin\", \"member\"].includes(role)) {\n      throw chatBadRequest(\"Invalid chat member role.\");\n    }\n    if (role === \"owner\" && member.role !== \"owner\") {\n      throw chatRoleDenied(\"Only an owner can grant owner role.\");\n    }\n    const joinedAt = nowIso();\n    let changed = false;\n    for (const userId of userIds) {\n      changed = this.#putMember(roomId, userId, role, joinedAt) || changed;\n    }\n    const room = this.#state.rooms.get(roomId);\n    if (!room) {\n      throw chatNotFound(\"Chat room not found.\");\n    }\n    if (changed) {\n      room.version += 1;\n      room.updated_at = joinedAt;\n    }\n    const members = this.listMembers(roomId, actor);\n    return {\n      ...(changed\n        ? {\n            event: this.#appendEvent(\n              createChatEvent({\n                payload: {\n                  type: \"chat.members.updated\",\n                  version: room.version,\n                },\n                roomId,\n                traceId: actor.traceId,\n              })\n            ),\n          }\n        : {}),\n      value: members,\n    };\n  }\n\n  removeMember(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    userId: string\n  ): ChatMutationCommit<void> {\n    const member = this.requireMember(roomId, actor);\n    if (actor.userId !== userId && member.role === \"member\") {\n      throw chatRoleDenied(\"Only owners and admins can remove members.\");\n    }\n    const target = this.#state.members.get(memberKey(roomId, userId));\n    const room = this.#state.rooms.get(roomId);\n    if (!(target && room) || target.hidden_at) {\n      throw chatNotFound(\"Chat member not found.\");\n    }\n    if (target.role === \"owner\") {\n      if (target.user_id === room.created_by) {\n        throw chatRoleDenied(\"The founding owner cannot be removed.\");\n      }\n      if (actor.userId !== userId && member.role !== \"owner\") {\n        throw chatRoleDenied(\"Only an owner can remove another owner.\");\n      }\n      const ownerCount = [...this.#state.members.values()].filter(\n        (entry) =>\n          entry.room_id === roomId && entry.role === \"owner\" && !entry.hidden_at\n      ).length;\n      if (actor.userId === userId && ownerCount <= 1) {\n        throw chatRoleDenied(\"The last remaining owner cannot leave.\");\n      }\n    }\n    target.hidden_at = nowIso();\n    room.version += 1;\n    room.updated_at = target.hidden_at;\n    return {\n      event: this.#appendEvent(\n        createChatEvent({\n          payload: {\n            type: \"chat.members.updated\",\n            version: room.version,\n          },\n          roomId,\n          traceId: actor.traceId,\n        })\n      ),\n      value: undefined,\n    };\n  }\n\n  updateMemberRole(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    userId: string,\n    role: AthenaChatMemberRole\n  ): ChatMutationCommit<StoredMember[]> {\n    const actorMember = this.requireMember(roomId, actor);\n    if (actorMember.role !== \"owner\" && actorMember.role !== \"admin\") {\n      throw chatRoleDenied(\"Only owners and admins can update member roles.\");\n    }\n    const room = this.#state.rooms.get(roomId);\n    const target = this.#state.members.get(memberKey(roomId, userId));\n    if (!(room && target) || target.hidden_at) {\n      throw chatNotFound(\"Chat member not found.\");\n    }\n    if (target.user_id === room.created_by && role !== \"owner\") {\n      throw chatRoleDenied(\"The founding owner cannot be demoted.\");\n    }\n    if (target.role === \"owner\" && role !== \"owner\") {\n      const ownerCount = [...this.#state.members.values()].filter(\n        (entry) =>\n          entry.room_id === roomId && entry.role === \"owner\" && !entry.hidden_at\n      ).length;\n      if (ownerCount <= 1) {\n        throw chatRoleDenied(\"The last remaining owner cannot be demoted.\");\n      }\n      if (actorMember.role !== \"owner\") {\n        throw chatRoleDenied(\"Only an owner can demote another owner.\");\n      }\n    }\n    if (role === \"owner\" && actorMember.role !== \"owner\") {\n      throw chatRoleDenied(\"Only an owner can grant owner role.\");\n    }\n    if (target.role === role) {\n      return { value: this.listMembers(roomId, actor) };\n    }\n    target.role = role;\n    room.version += 1;\n    room.updated_at = nowIso();\n    const members = this.listMembers(roomId, actor);\n    return {\n      event: this.#appendEvent(\n        createChatEvent({\n          payload: {\n            type: \"chat.members.updated\",\n            version: room.version,\n          },\n          roomId,\n          traceId: actor.traceId,\n        })\n      ),\n      value: members,\n    };\n  }\n\n  listMessages(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    query?: { after_seq?: number; before_seq?: number; limit?: number }\n  ): {\n    items: AthenaChatMessage[];\n    next_after_seq: number | null;\n    next_before_seq: number | null;\n  } {\n    this.requireMember(roomId, actor);\n    const limit = Math.min(200, Math.max(1, query?.limit ?? 50));\n    let items = [...this.#state.messages.values()].filter(\n      (message) => message.room_id === roomId && !message.deleted_at\n    );\n    const afterSeq = query?.after_seq;\n    if (afterSeq !== undefined) {\n      items = items.filter((message) => message.room_seq > afterSeq);\n    }\n    const beforeSeq = query?.before_seq;\n    if (beforeSeq !== undefined) {\n      items = items.filter((message) => message.room_seq < beforeSeq);\n    }\n    items.sort((left, right) => left.room_seq - right.room_seq);\n    const isDelta = query?.after_seq !== undefined;\n    const page = isDelta ? items.slice(0, limit) : items.slice(-limit);\n    const first = page[0];\n    const hasOlder = first !== undefined && items[0]?.room_seq < first.room_seq;\n    return {\n      items: page.map((message) =>\n        hydrateMessage(this.#state, message, actor.userId)\n      ),\n      next_after_seq:\n        isDelta && page.length === limit\n          ? (page.at(-1)?.room_seq ?? null)\n          : null,\n      next_before_seq: hasOlder ? (first?.room_seq ?? null) : null,\n    };\n  }\n\n  sendMessage(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    input: {\n      attachments?: AthenaChatAttachmentInput[];\n      body_json?: Record<string, unknown> | null;\n      body_text?: string | null;\n      client_message_id?: string | null;\n      metadata_json?: Record<string, unknown> | null;\n      reply_to_message_id?: string | null;\n    }\n  ): ChatMutationCommit<{ message: AthenaChatMessage }> {\n    this.requireMember(roomId, actor);\n    const room = this.#state.rooms.get(roomId);\n    if (!room) {\n      throw chatNotFound(\"Chat room not found.\");\n    }\n    if (room.archived_at) {\n      throw chatConflict(\"Cannot send to an archived room.\");\n    }\n    if (input.client_message_id) {\n      for (const existing of this.#state.messages.values()) {\n        if (\n          existing.room_id === roomId &&\n          existing.client_message_id === input.client_message_id &&\n          existing.sender_id === actor.userId\n        ) {\n          const message = hydrateMessage(this.#state, existing, actor.userId);\n          return { value: { message } };\n        }\n      }\n    }\n    const createdAt = nowIso();\n    const nextSeq = room.last_message_seq + 1;\n    const message: StoredMessage = {\n      attachments: (input.attachments ?? []).map((attachment) => ({\n        ...attachment,\n        authorized_url_path: `/files/${attachment.file_id}`,\n        proxy_url_path: `/files/${attachment.file_id}`,\n        public_url_path: `/files/${attachment.file_id}`,\n      })),\n      body_json: input.body_json ?? null,\n      body_text: input.body_text ?? null,\n      client_message_id: input.client_message_id ?? null,\n      created_at: createdAt,\n      id: randomUUID(),\n      metadata_json: input.metadata_json ?? null,\n      reactions: [],\n      reply_to_message_id: input.reply_to_message_id ?? null,\n      room_id: roomId,\n      room_seq: nextSeq,\n      sender_id: actor.userId,\n    };\n    this.#state.messages.set(message.id, message);\n    room.last_message_at = createdAt;\n    room.last_message_id = message.id;\n    room.last_message_seq = nextSeq;\n    room.updated_at = createdAt;\n    room.version += 1;\n    const hydrated = hydrateMessage(this.#state, message, actor.userId);\n    const event = this.#appendEvent(\n      createChatEvent({\n        payload: { message: hydrated, type: \"chat.message.created\" },\n        roomId,\n        roomSeq: nextSeq,\n        traceId: actor.traceId,\n      })\n    );\n    return {\n      event,\n      value: { message: hydrated },\n    };\n  }\n\n  updateMessage(\n    roomId: string,\n    messageId: string,\n    actor: ChatPersistenceIdentity,\n    input: {\n      body_json?: Record<string, unknown> | null;\n      body_text?: string | null;\n      metadata_json?: Record<string, unknown> | null;\n    }\n  ): ChatMutationCommit<{ message: AthenaChatMessage }> {\n    this.requireMember(roomId, actor);\n    const message = this.#state.messages.get(messageId);\n    if (!message || message.room_id !== roomId || message.deleted_at) {\n      throw chatNotFound(\"Chat message not found.\");\n    }\n    if (message.sender_id !== actor.userId) {\n      throw chatRoleDenied(\"Only the sender can edit this message.\");\n    }\n    const changed =\n      (input.body_json !== undefined &&\n        JSON.stringify(input.body_json) !==\n          JSON.stringify(message.body_json)) ||\n      (input.body_text !== undefined &&\n        input.body_text !== message.body_text) ||\n      (input.metadata_json !== undefined &&\n        JSON.stringify(input.metadata_json) !==\n          JSON.stringify(message.metadata_json));\n    if (!changed) {\n      return {\n        value: { message: hydrateMessage(this.#state, message, actor.userId) },\n      };\n    }\n    message.body_json =\n      input.body_json === undefined ? message.body_json : input.body_json;\n    message.body_text =\n      input.body_text === undefined ? message.body_text : input.body_text;\n    message.metadata_json =\n      input.metadata_json === undefined\n        ? message.metadata_json\n        : input.metadata_json;\n    message.edited_at = nowIso();\n    const hydrated = hydrateMessage(this.#state, message, actor.userId);\n    const event = this.#appendEvent(\n      createChatEvent({\n        payload: { message: hydrated, type: \"chat.message.updated\" },\n        roomId,\n        roomSeq: message.room_seq,\n        traceId: actor.traceId,\n      })\n    );\n    return {\n      event,\n      value: { message: hydrated },\n    };\n  }\n\n  deleteMessage(\n    roomId: string,\n    messageId: string,\n    actor: ChatPersistenceIdentity\n  ): ChatMutationCommit<void> {\n    this.requireMember(roomId, actor);\n    const message = this.#state.messages.get(messageId);\n    if (!message || message.room_id !== roomId) {\n      throw chatNotFound(\"Chat message not found.\");\n    }\n    if (message.sender_id !== actor.userId) {\n      throw chatRoleDenied(\"Only the sender can delete this message.\");\n    }\n    if (message.deleted_at) {\n      return { value: undefined };\n    }\n    message.deleted_at = nowIso();\n    return {\n      event: this.#appendEvent(\n        createChatEvent({\n          payload: { message_id: messageId, type: \"chat.message.deleted\" },\n          roomId,\n          roomSeq: message.room_seq,\n          traceId: actor.traceId,\n        })\n      ),\n      value: undefined,\n    };\n  }\n\n  addReaction(\n    messageId: string,\n    actor: ChatPersistenceIdentity,\n    emoji: string\n  ): ChatMutationCommit<AthenaChatReactionCount[]> {\n    const message = this.#state.messages.get(messageId);\n    if (!message || message.deleted_at) {\n      throw chatNotFound(\"Chat message not found.\");\n    }\n    this.requireMember(message.room_id, actor);\n    const exists = this.#state.reactions.some(\n      (reaction) =>\n        reaction.messageId === messageId &&\n        reaction.userId === actor.userId &&\n        reaction.emoji === emoji\n    );\n    if (!exists) {\n      this.#state.reactions.push({ emoji, messageId, userId: actor.userId });\n    }\n    const reactions = reactionsFor(this.#state, messageId, actor.userId);\n    return {\n      ...(exists\n        ? {}\n        : {\n            event: this.#appendEvent(\n              createChatEvent({\n                payload: {\n                  summary: { message_id: messageId, reactions },\n                  type: \"chat.reaction.updated\",\n                },\n                roomId: message.room_id,\n                roomSeq: message.room_seq,\n                traceId: actor.traceId,\n              })\n            ),\n          }),\n      value: reactions,\n    };\n  }\n\n  removeReaction(\n    messageId: string,\n    actor: ChatPersistenceIdentity,\n    emoji: string\n  ): ChatMutationCommit<AthenaChatReactionCount[]> {\n    const message = this.#state.messages.get(messageId);\n    if (!message || message.deleted_at) {\n      throw chatNotFound(\"Chat message not found.\");\n    }\n    this.requireMember(message.room_id, actor);\n    const previousLength = this.#state.reactions.length;\n    this.#state.reactions = this.#state.reactions.filter(\n      (reaction) =>\n        !(\n          reaction.messageId === messageId &&\n          reaction.userId === actor.userId &&\n          reaction.emoji === emoji\n        )\n    );\n    const reactions = reactionsFor(this.#state, messageId, actor.userId);\n    return {\n      ...(previousLength === this.#state.reactions.length\n        ? {}\n        : {\n            event: this.#appendEvent(\n              createChatEvent({\n                payload: {\n                  summary: { message_id: messageId, reactions },\n                  type: \"chat.reaction.updated\",\n                },\n                roomId: message.room_id,\n                roomSeq: message.room_seq,\n                traceId: actor.traceId,\n              })\n            ),\n          }),\n      value: reactions,\n    };\n  }\n\n  search(\n    actor: ChatPersistenceIdentity,\n    input: {\n      cursor?: string | null;\n      query: string;\n      room_id?: string | null;\n      limit?: number | null;\n    }\n  ): {\n    items: { message: AthenaChatMessage; room_id: string }[];\n    next_cursor: string | null;\n  } {\n    const query = input.query.trim();\n    if (!query) {\n      throw chatBadRequest(\"Search query is required.\");\n    }\n    const limit = Math.min(100, Math.max(1, input.limit ?? 20));\n    const cursor = decodeChatSearchCursor(input.cursor);\n    if (input.cursor && !cursor) {\n      throw chatBadRequest(\"Search cursor is invalid.\");\n    }\n    const compareDescending = (\n      left: StoredMessage,\n      right: StoredMessage\n    ): number => {\n      const created = right.created_at.localeCompare(left.created_at);\n      return created || right.id.localeCompare(left.id);\n    };\n    const hits: { message: AthenaChatMessage; room_id: string }[] = [];\n    const candidates = [...this.#state.messages.values()]\n      .filter((message) => {\n        if (\n          message.deleted_at ||\n          (input.room_id && message.room_id !== input.room_id)\n        ) {\n          return false;\n        }\n        const room = this.#state.rooms.get(message.room_id);\n        const member = this.#state.members.get(\n          memberKey(message.room_id, actor.userId)\n        );\n        if (\n          !room ||\n          room.organization_id !== actor.organizationId ||\n          !member ||\n          member.hidden_at\n        ) {\n          return false;\n        }\n        if (!cursor) {\n          return true;\n        }\n        return (\n          message.created_at < cursor.createdAt ||\n          (message.created_at === cursor.createdAt && message.id < cursor.id)\n        );\n      })\n      .sort(compareDescending);\n    for (const message of candidates) {\n      const body = message.body_text ?? \"\";\n      if (!likeMatch(body, query)) {\n        continue;\n      }\n      hits.push({\n        message: hydrateMessage(this.#state, message, actor.userId),\n        room_id: message.room_id,\n      });\n      if (hits.length >= limit) {\n        break;\n      }\n    }\n    const last = candidates.find(\n      (message) => message.id === hits.at(-1)?.message.id\n    );\n    return {\n      items: hits,\n      next_cursor:\n        hits.length === limit && last\n          ? encodeChatSearchCursor({\n              createdAt: last.created_at,\n              id: last.id,\n            })\n          : null,\n    };\n  }\n\n  markRead(\n    roomId: string,\n    actor: ChatPersistenceIdentity,\n    input?: { message_id?: string | null; seq?: number | null }\n  ): ChatMutationCommit<{\n    last_read_message_id?: string | null;\n    last_read_seq: number;\n  }> {\n    const member = this.requireMember(roomId, actor);\n    const room = this.#state.rooms.get(roomId);\n    if (!room) {\n      throw chatNotFound(\"Chat room not found.\");\n    }\n    let requestedSeq = input?.seq ?? member.last_read_seq;\n    let requestedMessageId =\n      input?.message_id ?? member.last_read_message_id ?? null;\n    if (input?.message_id) {\n      const message = this.#state.messages.get(input.message_id);\n      if (!message || message.room_id !== roomId) {\n        throw chatNotFound(\"Chat message not found.\");\n      }\n      requestedSeq = message.room_seq;\n      requestedMessageId = message.id;\n    }\n    const seq = Math.min(\n      room.last_message_seq,\n      Math.max(member.last_read_seq, requestedSeq)\n    );\n    const messageId =\n      seq === requestedSeq ? requestedMessageId : member.last_read_message_id;\n    const changed =\n      seq !== member.last_read_seq || messageId !== member.last_read_message_id;\n    if (changed) {\n      member.last_read_seq = seq;\n      member.last_read_message_id = messageId;\n    }\n    const value = {\n      last_read_message_id: member.last_read_message_id,\n      last_read_seq: member.last_read_seq,\n    };\n    return {\n      ...(changed\n        ? {\n            event: this.#appendEvent(\n              createChatEvent({\n                payload: {\n                  read_seq: value.last_read_seq,\n                  type: \"chat.read.updated\",\n                  user_id: actor.userId,\n                },\n                roomId,\n                roomSeq: room.last_message_seq,\n                traceId: actor.traceId,\n              })\n            ),\n          }\n        : {}),\n      value,\n    };\n  }\n\n  #putMember(\n    roomId: string,\n    userId: string,\n    role: AthenaChatMemberRole,\n    joinedAt: string\n  ): boolean {\n    const key = memberKey(roomId, userId);\n    const existing = this.#state.members.get(key);\n    if (existing) {\n      const changed = Boolean(existing.hidden_at) || existing.role !== role;\n      existing.hidden_at = null;\n      existing.role = role;\n      return changed;\n    }\n    this.#state.members.set(key, {\n      joined_at: joinedAt,\n      last_read_seq: 0,\n      muted: false,\n      role,\n      room_id: roomId,\n      user_id: userId,\n    });\n    return true;\n  }\n}\n\nexport function createMemoryChatStore(): MemoryChatStore {\n  return new MemoryChatStore();\n}\n","import type {\n  AthenaChatConnectOptions,\n  AthenaChatRealtimeEvent,\n  AthenaChatRealtimeConnection,\n  AthenaChatResumeRoomCursor,\n  AthenaChatWebSocketLike,\n  AthenaChatWsClientCommand,\n} from \"../types.ts\";\nimport { chatCapabilityUnsupported } from \"./errors.ts\";\nimport { chatEventToWsEvent, type ChatEventEnvelope } from \"../events.ts\";\n\ninterface Subscriber {\n  fromSeq: number;\n  onEvent: (event: ChatEventEnvelope) => void;\n}\n\nexport class InProcessChatRealtimeBus {\n  readonly #rooms = new Map<string, Set<Subscriber>>();\n\n  publish(event: ChatEventEnvelope): void {\n    const subscribers = this.#rooms.get(event.roomId);\n    if (!subscribers) {\n      return;\n    }\n    for (const subscriber of subscribers) {\n      if (event.roomSeq === null || event.roomSeq >= subscriber.fromSeq) {\n        subscriber.onEvent(event);\n      }\n    }\n  }\n\n  subscribe(\n    roomId: string,\n    fromSeq: number,\n    onEvent: (event: ChatEventEnvelope) => void\n  ): () => void {\n    const subscriber: Subscriber = { fromSeq, onEvent };\n    const bucket = this.#rooms.get(roomId) ?? new Set<Subscriber>();\n    bucket.add(subscriber);\n    this.#rooms.set(roomId, bucket);\n    return () => {\n      bucket.delete(subscriber);\n    };\n  }\n}\n\nclass InProcessSocket implements AthenaChatWebSocketLike {\n  readyState = 1;\n  readonly #listeners = new Map<string, Set<(event: unknown) => void>>();\n\n  addEventListener(\n    type: \"open\" | \"message\" | \"error\" | \"close\",\n    listener: (event: unknown) => void\n  ): void {\n    const bucket =\n      this.#listeners.get(type) ?? new Set<(event: unknown) => void>();\n    bucket.add(listener);\n    this.#listeners.set(type, bucket);\n  }\n\n  removeEventListener?(\n    type: \"open\" | \"message\" | \"error\" | \"close\",\n    listener: (event: unknown) => void\n  ): void {\n    this.#listeners.get(type)?.delete(listener);\n  }\n\n  send(): void {\n    throw chatCapabilityUnsupported(\"websocket\");\n  }\n\n  close(code?: number, reason?: string): void {\n    this.readyState = 3;\n    for (const listener of this.#listeners.get(\"close\") ?? []) {\n      listener({ code, reason });\n    }\n  }\n\n  emit(event: unknown): void {\n    for (const listener of this.#listeners.get(\"message\") ?? []) {\n      listener({ data: JSON.stringify(event) });\n    }\n  }\n}\n\nexport function createInProcessRealtimeConnection(\n  bus: InProcessChatRealtimeBus,\n  options?: AthenaChatConnectOptions\n): AthenaChatRealtimeConnection {\n  const socket = new InProcessSocket();\n  const unsubscribers = new Map<string, () => void>();\n\n  const deliver = (event: ChatEventEnvelope): void => {\n    const payload: AthenaChatRealtimeEvent = chatEventToWsEvent(event);\n    options?.onMessage?.(payload);\n    socket.emit(payload);\n  };\n\n  const subscribe = (roomId: string, fromSeq?: number | null): void => {\n    unsubscribers.get(roomId)?.();\n    unsubscribers.set(roomId, bus.subscribe(roomId, fromSeq ?? 0, deliver));\n  };\n\n  const resume = (rooms: AthenaChatResumeRoomCursor[]): void => {\n    // Live cursor only: future in-process events with roomSeq > last_seq.\n    // Does not replay persisted outbox/history (replayPersisted: false).\n    for (const room of rooms) {\n      subscribe(room.room_id, room.last_seq ?? 0);\n    }\n  };\n\n  const send = (command: AthenaChatWsClientCommand): void => {\n    switch (command.type) {\n      case \"chat.subscribe\":\n        subscribe(command.room_id, command.from_seq);\n        return;\n      case \"chat.unsubscribe\":\n        unsubscribers.get(command.room_id)?.();\n        unsubscribers.delete(command.room_id);\n        return;\n      case \"chat.resume\":\n        resume(command.rooms);\n        return;\n      case \"auth.hello\":\n        throw chatCapabilityUnsupported(\"hello\");\n      case \"ping\":\n        throw chatCapabilityUnsupported(\"ping\");\n      case \"chat.typing.start\":\n      case \"chat.typing.stop\":\n        throw chatCapabilityUnsupported(\"typing\");\n      case \"chat.presence.heartbeat\":\n        throw chatCapabilityUnsupported(\"presence\");\n      case \"chat.read.up_to\":\n        throw chatCapabilityUnsupported(\"readUpTo\");\n      default:\n        throw chatCapabilityUnsupported(\"websocket\");\n    }\n  };\n\n  return {\n    close(code, reason) {\n      for (const stop of unsubscribers.values()) {\n        stop();\n      }\n      unsubscribers.clear();\n      socket.close(code, reason);\n    },\n    hello() {\n      throw chatCapabilityUnsupported(\"hello\");\n    },\n    ping() {\n      throw chatCapabilityUnsupported(\"ping\");\n    },\n    presenceHeartbeat() {\n      throw chatCapabilityUnsupported(\"presence\");\n    },\n    readUpTo() {\n      throw chatCapabilityUnsupported(\"readUpTo\");\n    },\n    resume,\n    send,\n    socket,\n    subscribe,\n    typingStart() {\n      throw chatCapabilityUnsupported(\"typing\");\n    },\n    typingStop() {\n      throw chatCapabilityUnsupported(\"typing\");\n    },\n    unsubscribe(roomId) {\n      unsubscribers.get(roomId)?.();\n      unsubscribers.delete(roomId);\n    },\n  };\n}\n","/**\n * Fail closed on conflicting local/remote runtime intent.\n */\n\nimport { AthenaBillingProviderError } from \"../../billing/errors.ts\";\nimport { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { AthenaRuntimePlan } from \"./types.ts\";\n\nexport function validateRuntimePlan<TPlan extends AthenaRuntimePlan>(\n  plan: TPlan,\n): TPlan {\n  if (!plan || typeof plan !== \"object\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      \"AthenaRuntimePlan is missing; construction cannot continue.\",\n    );\n  }\n  const next = plan;\n  if (next.billing == null || typeof next.billing.kind !== \"string\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      \"AthenaRuntimePlan.billing is missing; construction cannot continue.\",\n    );\n  }\n  if (next.billing?.kind === \"remote\" && next.billing.configuredProviders) {\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  const storage = next.storage;\n  if (\n    storage?.wantsLocal &&\n    (storage.hasUrl || storage.hasR2 || storage.wantsS3)\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      'storage.provider \"local\" cannot be combined with storage.url, storage.r2, or storage.provider \"s3\". Embedded ObjectStore and managed HTTP/R2/S3 are separate modes.',\n      \"storage\",\n    );\n  }\n  if (\n    storage?.wantsS3 &&\n    (storage.hasUrl || storage.hasR2 || storage.wantsLocal || storage.root)\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      'storage.provider \"s3\" cannot be combined with storage.url, storage.r2, or a local filesystem root. Direct S3 and other storage modes are exclusive.',\n      \"storage\",\n    );\n  }\n  const localDbAuthorityCount = [\n    next.db?.hasD1,\n    next.db?.hasSqlite,\n    Boolean(next.db?.pgUri),\n    next.db?.hasPool,\n  ].filter(Boolean).length;\n  if (localDbAuthorityCount > 1) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NO_SERVICE_CONFIGURED\",\n      next.db.hasSqlite\n        ? \"Athena cannot combine SQLite Local with D1 or PostgreSQL direct execution. Configure exactly one local database backend.\"\n        : \"Athena cannot use db.d1 and db.pgUri together. Configure exactly one local DB binding, or set mode/prefer to select a single execution backend.\",\n      \"db\",\n    );\n  }\n  return next;\n}\n","/**\n * Internal AthenaRuntimePlan. Not a public config surface.\n */\n\nimport type {\n  AthenaAuthRuntime,\n  AthenaDbTransport,\n  AthenaRuntimeEnvironment,\n  AthenaStorageTransport,\n  ResolvedAthenaRuntime,\n} from \"../resolve.ts\";\nimport type {\n  AthenaAuthConfig,\n  AthenaChatConfig,\n  AthenaRequestContext,\n  AthenaRequestContextProvider,\n} from \"../../client/contracts.ts\";\nimport type { AthenaClientCapabilities } from \"../../cloudflare/types.ts\";\nimport type { AthenaBillingConfig } from \"../../billing/create-client-config.ts\";\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\n\nexport interface AthenaRuntimePlanAuth {\n  runtime: AthenaAuthRuntime;\n  config?: false | AthenaAuthConfig | null;\n}\n\nexport interface AthenaRuntimePlanDb {\n  capabilities?: AthenaClientCapabilities;\n  engine?: \"postgres\" | \"sqlite\" | \"unknown\";\n  findManyAst?: boolean;\n  hasD1: boolean;\n  hasSqlite?: boolean;\n  hasPool: boolean;\n  hasRemoteAuth: boolean;\n  hasRemoteDbGateway: boolean;\n  hasRemoteServices: boolean;\n  hasRemoteStorage: boolean;\n  modeIsGateway: boolean;\n  models?: AthenaClientModelsInput;\n  pgUri?: string;\n  remoteRoot?: string;\n  requestedKey?: string;\n  ownership?: \"owned\" | \"borrowed\" | \"none\";\n  profile?: \"postgres\" | \"cloudflare-d1\" | \"sqlite-local\" | \"gateway\";\n  source: \"none\" | \"pool\" | \"uri\" | \"local-executor\";\n  transport: AthenaDbTransport;\n}\n\nexport interface AthenaRuntimePlanStorage {\n  bucket?: string;\n  hasR2: boolean;\n  hasUrl: boolean;\n  prefix?: string;\n  root?: string;\n  transport: AthenaStorageTransport;\n  wantsLocal: boolean;\n  wantsS3: boolean;\n}\n\nexport type AthenaRuntimePlanBilling = {\n  configuredProviders: boolean;\n  apiKey?: string;\n  applicationId?: string;\n  appUrl?: string;\n  catalog?: AthenaBillingConfig[\"catalog\"];\n  client?: string | null;\n  providers?: AthenaBillingConfig[\"providers\"];\n  customerImport?: AthenaBillingConfig[\"import\"];\n  headers?: Record<string, string>;\n  ingestion?: AthenaBillingConfig[\"ingestion\"];\n  mode?: AthenaBillingConfig[\"mode\"];\n  observability?: AthenaBillingConfig[\"observability\"];\n  selfEnrollment?: AthenaBillingConfig[\"selfEnrollment\"];\n  testMode?: boolean;\n} & (\n  | {\n      kind: \"local\";\n      modePreference: \"auto\" | \"local\";\n      source: \"configured-provider\";\n    }\n  | {\n      kind: \"remote\";\n      endpoint?: string;\n      source:\n        | \"db-url\"\n        | \"explicit-url\"\n        | \"same-origin\"\n        | \"unified-root\";\n    }\n  | {\n      kind: \"unavailable\";\n      reason:\n        | \"environment-unsupported\"\n        | \"not-configured\"\n        | \"transport-unavailable\";\n    }\n);\n\n/**\n * Construction intent + resolved transports + environment.\n * Provider SDK handles are produced by materializers, not stored as config.\n */\nexport interface AthenaRuntimePlan {\n  auth: AthenaRuntimePlanAuth;\n  billing: AthenaRuntimePlanBilling;\n  chat: {\n    auth?: false | AthenaAuthConfig | null;\n    callOptions?: AthenaChatConfig;\n    clusterUrl?: string;\n    context?: AthenaRequestContext | AthenaRequestContextProvider;\n    databaseUrl?: string;\n    transport: ResolvedAthenaRuntime[\"chat\"][\"transport\"];\n  };\n  db: AthenaRuntimePlanDb;\n  environment: AthenaRuntimeEnvironment;\n  storage: AthenaRuntimePlanStorage;\n  trustedNode: boolean;\n}\n\nexport function toResolvedAthenaRuntime(\n  plan: AthenaRuntimePlan\n): ResolvedAthenaRuntime {\n  return {\n    auth: { runtime: plan.auth.runtime },\n    chat: { transport: plan.chat.transport },\n    db: { transport: plan.db.transport },\n    runtime: { environment: plan.environment },\n    storage: { transport: plan.storage.transport },\n  };\n}\n"]}