{"version":3,"sources":["../src/auth/contract/operations.ts","../src/billing/errors.ts","../src/billing/runtime/environment.ts","../src/billing/safety/registry.ts","../src/config/errors.ts","../src/env/index.ts","../src/auth/app-identity.ts","../src/auth/bridge/code.ts","../src/auth/contract/index.ts","../src/auth/observability/config.ts","../src/auth/passkey/policy.ts","../src/auth/config.ts","../src/runtime/resolve.ts","../src/runtime/error/generated/billing.ts","../src/billing/runtime/credentials.ts","../src/billing/runtime/local/providers/inspect.ts","../src/billing/runtime/local/providers/token-authority.ts","../src/billing/runtime/local/providers/stripe/config.ts","../src/billing/runtime/local/providers/config.ts","../src/billing/import/automatic.ts","../src/billing/ingestion/urls.ts","../src/billing/ingestion/types.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/execution-context.ts","../src/billing/runtime/local/providers/registry.ts","../src/billing/runtime/local/providers/connection-binding.ts","../src/billing/observability/audit.ts","../src/billing/observability/traces.ts","../src/billing/reconciliation/context.ts","../src/billing/observability/events.ts","../src/billing/observability/validate.ts","../src/billing/reconciliation/semantic-audit.ts","../src/billing/reconciliation/lease.ts","../src/billing/reconciliation/types.ts","../src/billing/reconciliation/policy.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/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/database.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/subject/postgres.ts","../src/billing/import/postgres.ts","../src/billing/runtime/hal-link-href.ts","../src/billing/runtime/local/providers/mollie/projection/links.ts","../src/billing/runtime/local/providers/mollie/cursor.ts","../src/billing/runtime/local/providers/mollie/sdk/errors.ts","../src/billing/runtime/local/providers/mollie/sdk/invoke.ts","../src/billing/runtime/local/providers/mollie/sdk/call.ts","../src/billing/runtime/local/providers/mollie/sdk/page.ts","../src/billing/import/providers/mollie.ts","../src/billing/import/assemble.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/gateway/routes.ts","../src/result/mutation-meta.ts","../src/admin/query.ts","../src/auth/capabilities.ts","../src/auth/contract/operations.generated.ts","../src/auth/email/events.ts","../src/auth/email/builtins.ts","../src/auth/email/catalog.ts","../src/auth/email/contract.ts","../src/email/errors.ts","../src/auth/email/renderer.ts","../src/auth/email/emit.ts","../src/auth/email/errors.ts","../src/auth/hooks/define.ts","../src/auth/hooks/events.ts","../src/auth/limits.ts","../src/auth/react-email.ts","../src/cookies/base64.ts","../src/cookies/cookie-utils.ts","../src/cookies/crypto.ts","../src/cookies/session-store.ts","../src/cookies/index.ts","../src/auth/server.ts","../src/auth/session-errors.ts","../src/auth/session-store.ts","../src/auth/session-controller.ts","../src/auth/token-provider.ts","../src/gateway/errors.ts","../src/utils/parse-boolean-flag.ts","../src/auxiliaries.ts","../src/billing/index.ts","../src/billing/runtime/remote/project-capabilities.ts","../src/billing/runtime/remote/runtime.ts","../src/billing/safety/environment.ts","../src/billing/safety/prepare.ts","../src/billing/safety/idempotency.ts","../src/billing/safety/money.ts","../src/billing/safety/validators.ts","../src/billing/runtime/admin/unavailable.ts","../src/billing/runtime/dispatch.ts","../src/billing/runtime/self/unavailable.ts","../src/gateway/url.ts","../package.json","../src/sdk-version.ts","../src/utils/athena-request-headers.ts","../src/billing/runtime/remote/transport.ts","../src/billing/module.ts","../src/billing/runtime/self/return-query.ts","../src/http/parse-response-body.ts","../src/chat/capabilities.ts","../src/chat/remote/runtime.ts","../src/cloudflare/execution-mode.ts","../src/release/identity.ts","../src/compatibility/report.ts","../src/contracts/v1/errors.ts","../src/contracts/v1/pagination.ts","../src/db/transaction/cache.ts","../src/db/transaction/errors.ts","../src/db/transaction/begin-sql.ts","../src/db/transaction/types.ts","../src/db/transaction/compile.ts","../src/db/transaction/options.ts","../src/db/transaction/coordinator.ts","../src/email/capabilities.ts","../src/email/delivery-port.ts","../src/email/provider.ts","../src/email/normalize-config.ts","../src/email/runtime.ts","../src/email/module.ts","../src/email/providers/attachments.ts","../src/email/providers/console.ts","../src/email/providers/encoding.ts","../src/email/providers/http.ts","../src/email/providers/resend.ts","../src/query/engine/ast.ts","../src/query-ast.ts","../src/query/engine/capabilities.ts","../src/query/engine/errors.ts","../src/query/engine/normalize.ts","../src/query/engine/validate.ts","../src/gateway/serialize-ast.ts","../src/gateway/transaction.ts","../src/gateway/client.ts","../src/gateway/types.ts","../src/generator/artifact-merge.ts","../src/generator/config.ts","../src/migrations/constants.ts","../src/generator/schema-selection.ts","../src/generator/table-selection.ts","../src/node-crypto.ts","../src/migrations/checksum.ts","../src/auth/local/errors.ts","../src/auth/local/request-timing.ts","../src/auth/local/organization-invariants.ts","../src/rights/errors.ts","../src/rights/key.ts","../src/rights/matching.ts","../src/billing/runtime/rights.ts","../src/billing/runtime/invocation-authority.ts","../src/runtime/error/failure.ts","../src/runtime/error/data.ts","../src/runtime/error/generated/auth.ts","../src/runtime/error/registry.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/classifier.ts","../src/runtime/error/instance.ts","../src/storage/runtime/types.ts","../src/storage/runtime/errors.ts","../src/storage/runtime/rights.ts","../src/runtime/authorization/catalog.ts","../src/runtime/authorization/capabilities.ts","../src/runtime/authorization/clone-source.ts","../src/runtime/authorization/role-descriptor.ts","../src/runtime/authorization/role-invariants.ts","../src/runtime/authorization/snapshot-catalog.ts","../src/runtime/authorization/templates.ts","../src/runtime/authorization/postgres.ts","../src/auth/local/schema.ts","../src/auth/local/authorization-sql.ts","../src/postgres/driver.ts","../src/postgres/connection-string.ts","../src/postgres/owned-runtime.ts","../src/runtime/ownership.ts","../src/postgres/runtime.ts","../src/auth/local/database.ts","../src/auth/local/email/schema-sql.ts","../src/auth/local/ledger-health.ts","../src/auth/local/schema-inspect.ts","../src/auth/local/schema-manifest.ts","../src/migrations/ensure-directory.ts","../src/migrations/managed-auth.ts","../src/generator/database-authority.ts","../src/v3-client-core.ts","../src/auth/hooks/assert-local.ts","../src/auth/resolve-routing.ts","../src/node-env.ts","../src/utils/athena-auth-url.ts","../src/runtime/data/discovery-document.ts","../src/runtime/transport/http/url.ts","../src/runtime/transport/http/request-compiler.ts","../src/runtime/transport/http/response-parser.ts","../src/runtime/transport/http/client.ts","../src/runtime/transport/http.ts","../src/billing/runtime/browser-transport.ts","../src/billing/runtime/http-error.ts","../src/billing/subject/errors.ts","../src/billing/runtime/resolve-mode.ts","../src/http/upstream-html-error.ts","../src/auth/passkey/browser/diagnostic.ts","../src/auth/passkey/browser/options.ts","../src/auth/passkey/browser/serialize.ts","../src/auth/passkey/browser/ceremony.ts","../src/auth/passkey/metadata/catalog.ts","../src/auth/passkey/metadata/resolve.ts","../src/auth/passkey/normalize.ts","../src/auth/passkey/requests.ts","../src/auth/passkey/client-module.ts","../src/auth/client.ts","../src/client-request.ts","../src/client-result.ts","../src/gateway/structured-select.ts","../src/query/include-select.ts","../src/query-transport.ts","../src/sql-identifiers.ts","../src/client-sql.ts","../src/schema/resource.ts","../src/query/canonicalize.ts","../src/query/descriptor.ts","../src/query-debug-ast.ts","../src/query-tracing.ts","../src/client-fluent.ts","../src/db/transaction/interactive-gateway.ts","../src/schema/model-target.ts","../src/http/append-query.ts","../src/storage/errors.ts","../src/storage/backup.ts","../src/storage/xhr-put.ts","../src/storage/direct-upload.ts","../src/storage/file.ts","../src/storage/live-http-routes.json","../src/storage/module.ts","../src/client/context.ts","../src/cloudflare/capabilities.ts","../src/cloudflare/types.ts","../src/cloudflare/d1/runner.ts","../src/query/engine/relations.ts","../src/query/engine/plan.ts","../src/query/legacy-boolean.ts","../src/cloudflare/d1/sql.ts","../src/cloudflare/d1/compile-ast.ts","../src/cloudflare/d1/relation-catalog.ts","../src/cloudflare/d1/compile-fetch.ts","../src/cloudflare/d1/sql-rewrite.ts","../src/cloudflare/d1/transaction.ts","../src/cloudflare/d1/transport.ts","../src/cloudflare/r2/storage.ts","../src/context/merge.ts","../src/diagnostics.ts","../src/notifications/events-store.ts","../src/notifications/store.ts","../src/notifications/memory-store.ts","../src/notifications/types.ts","../src/notifications/catalog.ts","../src/notifications/errors.ts","../src/notifications/resolve.ts","../src/notifications/module.ts","../src/query/explain.ts","../src/query/entity-graph.ts","../src/query/model-identity.ts","../src/react/query-client/entity-store.ts","../src/query/query-index.ts","../src/react/query-client/graph-index.ts","../src/react/utils.ts","../src/react/query-client/query-store.ts","../src/react/query-client/mutation-store.ts","../src/react/query-client.ts","../src/runtime/client-internals.ts","../src/runtime/data/lifecycle/assert.ts","../src/storage/runtime/bind.ts","../src/storage/runtime/bytes-envelope.ts","../src/storage/runtime/browser-transport.ts","../src/policy/match-principal.ts","../src/policy/decide.ts","../src/storage/runtime/nucleus.ts","../src/storage/object-keys.ts","../src/storage/runtime/object-ops.ts","../src/storage/runtime/overlays.ts","../src/storage/runtime.ts","../src/generator/schema-discovery.ts","../src/generator/config-file.ts","../src/generator/env.ts","../src/schema/diff/types.ts","../src/schema/diff/normalize.ts","../src/schema/postgres-introspection-core.ts","../src/schema/postgres-provider.ts","../src/generator/providers.ts","../src/utils/slugify.ts","../src/generator/naming.ts","../src/generator/postgres-type-mapping.ts","../src/generator/generated-file-header.ts","../src/generator/placeholders.ts","../src/generator/render-shared.ts","../src/generator/table-builder-renderer.ts","../src/generator/renderer.ts","../src/generator/pipeline.ts","../src/mappers/errors.ts","../src/mappers/pagination.ts","../src/organization/ensure-active-organization.ts","../src/query/model-view.ts","../src/query/read-query.ts","../src/query/read-query-descriptor.ts","../src/runtime/parse.ts","../src/runtime/schemas.ts","../src/schema/definitions.ts","../src/schema/ir/identity.ts","../src/schema/ir/version.ts","../src/schema/ir/validate.ts","../src/schema/ir/canonicalize.ts","../src/schema/model-sql.ts","../src/schema/ir/compatibility.ts","../src/schema/diff/identity.ts","../src/schema/diff/summary.ts","../src/schema/diff/errors.ts","../src/schema/diff/validate.ts","../src/schema/diff/diff.ts","../src/schema/diff/from-introspection.ts","../src/schema/diff/from-models.ts","../src/schema/model-form.ts","../src/schema/table-columns.ts","../src/schema/table-schemas.ts","../src/schema/table-builder.ts","../src/schema/model-sql-write.ts","../src/tables/catalog.ts","../src/tables/schema-handlers.ts","../src/v3-client.ts","../src/auth/http/proxy.ts","../src/auth/local/request-middleware.ts","../src/auth/observability/traces.ts","../src/runtime/authorization/memory.ts","../src/auth/local/memory-stores.ts","../src/auth/local/runtime-helpers.ts","../src/auth/local/security.ts","../src/auth/local/router.ts","../src/auth/local/api-key.ts","../src/auth/local/models.ts","../src/auth/hooks/sanitize.ts","../src/auth/observability/snapshots.ts","../src/auth/local/admin-contract.ts","../src/auth/local/cookies.ts","../src/auth/local/password.ts","../src/auth/local/admin-routes.ts","../src/auth/local/admin-store.ts","../src/auth/local/bridge/revoke.ts","../src/auth/bridge/service.ts","../src/auth/local/bridge/routes.ts","../src/auth/local/email/user-routes.ts","../src/auth/local/credential-password-routes.ts","../src/email/blocked-ip.ts","../src/auth/email/attachments.ts","../src/auth/email/bindings.ts","../src/auth/local/email/routes.ts","../src/auth/local/totp.ts","../src/auth/local/extended-routes.ts","../src/auth/local/authorization-guard.ts","../src/auth/local/authorization-routes.ts","../src/auth/local/organization-invitation-routes.ts","../src/auth/utils/base64.ts","../src/auth/local/stores.ts","../src/auth/local/passkey/challenge-store.ts","../src/auth/local/passkey/repository.ts","../src/auth/passkey/transports.ts","../src/auth/passkey/metadata.ts","../src/auth/local/passkey/generate-authenticate-options.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/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/social/server/errors.ts","../src/auth/env/logger.ts","../src/auth/error/api-error.ts","../src/auth/error/athena-auth-error.ts","../src/auth/fetch/body.ts","../src/auth/fetch/athena-fetch.ts","../src/auth/oauth2/reject-redirects.ts","../src/auth/oauth2/client-id.ts","../src/auth/oauth2/pkce.ts","../src/auth/oauth2/token-utils.ts","../src/auth/oauth2/create-authorization-url.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/helpers/get-jwks-public-key.ts","../src/auth/social-providers/apple-keys.ts","../src/auth/social-providers/apple.ts","../src/auth/social-providers/helpers/trim-trailing-slash.ts","../src/auth/social-providers/athena.ts","../src/auth/social-providers/atlassian.ts","../src/auth/social-providers/cognito-keys.ts","../src/auth/social-providers/cognito.ts","../src/auth/social-providers/discord.ts","../src/auth/social-providers/dropbox.ts","../src/auth/social-providers/facebook-verify.ts","../src/auth/social-providers/facebook.ts","../src/auth/social-providers/figma.ts","../src/auth/social-providers/github.ts","../src/auth/social-providers/gitlab.ts","../src/auth/social-providers/google-keys.ts","../src/auth/social-providers/google-types.ts","../src/auth/social-providers/google-verify.ts","../src/auth/social-providers/helpers/merge-scopes.ts","../src/auth/social-providers/google.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-keys.ts","../src/auth/social-providers/microsoft-types.ts","../src/auth/social-providers/microsoft-entra-id.ts","../src/auth/social-providers/naver.ts","../src/auth/social-providers/notion.ts","../src/auth/social-providers/paybin.ts","../src/auth/social-providers/paypal-keys.ts","../src/auth/social-providers/paypal.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-providers/registry.ts","../src/auth/social/server/provider-registry.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/routes.ts","../src/auth/social/server/engine.ts","../src/auth/local/social/memory-store.ts","../src/auth/local/social/postgres-store.ts","../src/auth/local/social/runtime.ts","../src/auth/local/token-authority.ts","../src/auth/local/runtime-dependencies.ts","../src/auth/domain/catalog.ts","../src/auth/observability/validate.ts","../src/auth/hooks/runner.ts","../src/auth/hooks/execute.ts","../src/auth/observability/audit.ts","../src/auth/passkey/server/relying-party.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/mutation-transaction.ts","../src/auth/local/runtime.ts","../src/auth/social/node/social-config.ts","../src/billing/ingestion/application-id.ts","../src/notifications/postgres-store.ts","../src/billing/runtime/local/materialize.ts","../src/runtime/readiness/index.ts","../src/billing/ingestion/secrets/postgres.ts","../src/billing/ingestion/secrets/envelope.ts","../src/billing/ingestion/secrets/cache.ts","../src/billing/ingestion/secrets/master-key.ts","../src/billing/observability/retention.ts","../src/billing/runtime/diagnostics.ts","../src/billing/runtime/local/connections/materialize.ts","../src/billing/runtime/local/connections/identity.ts","../src/runtime/ingress/errors.ts","../src/runtime/ingress/postgres.ts","../src/runtime/ingress/runtime.ts","../src/runtime/ingress/sql.ts","../src/billing/runtime/local/ingress/attach.ts","../src/billing/ingestion/observability/delivery-health.ts","../src/billing/ingestion/observability/health.ts","../src/billing/runtime/local/execute/shared.ts","../src/billing/runtime/authority.ts","../src/billing/runtime/local/providers/operation-authority.ts","../src/billing/runtime/local/capability-decision.ts","../src/billing/runtime/local/providers/operation-scope.ts","../src/billing/runtime/local/providers/resolve-target.ts","../src/billing/runtime/local/execute/invoke.ts","../src/billing/runtime/local/execute/price-list.ts","../src/billing/runtime/self/checkout-intent.ts","../src/billing/runtime/self/delegated-principal.ts","../src/billing/runtime/self/enroll.ts","../src/billing/subject/ensure-provider-customer.ts","../src/billing/runtime/local/execute/customers.ts","../src/billing/subject/principal-user.ts","../src/billing/subject/sole-connection.ts","../src/billing/runtime/local/execute/payments.ts","../src/billing/runtime/local/execute/subscriptions.ts","../src/billing/runtime/self/enrollment-session.ts","../src/runtime/data/origin.ts","../src/billing/runtime/self/redirect-url.ts","../src/billing/runtime/self/return-token.ts","../src/billing/runtime/self/advance-enrollment.ts","../src/billing/runtime/local/providers/mollie/resolve-resource.ts","../src/runtime/ingress/identity.ts","../src/billing/canonical/document.ts","../src/runtime/events/causality.ts","../src/runtime/events/identity.ts","../src/billing/canonical/transition.ts","../src/billing/runtime/local/providers/mollie/verify-webhook.ts","../src/billing/runtime/local/providers/mollie/parse-webhook.ts","../src/billing/runtime/local/providers/mollie/projection/invoice.ts","../src/billing/runtime/local/providers/mollie/projection/subscription.ts","../src/billing/runtime/local/providers/mollie/projection.ts","../src/billing/runtime/local/providers/mollie/project-document.ts","../src/billing/runtime/local/providers/mollie/webhook-port.ts","../src/runtime/events/hooks.ts","../src/runtime/ingress/failure.ts","../src/billing/ingestion/observability/stages.ts","../src/runtime/events/outbox.ts","../src/billing/runtime/local/ingress/revision.ts","../src/billing/runtime/local/ingress/apply.ts","../src/billing/runtime/local/ingress/handler.ts","../src/runtime/events/sql.ts","../src/billing/runtime/local/ingress/sql.ts","../src/billing/runtime/local/catalog/normalize.ts","../src/billing/runtime/local/providers/create-registry.ts","../src/billing/runtime/local/catalog/page.ts","../src/billing/runtime/local/catalog/prices.ts","../src/billing/runtime/local/catalog/products.ts","../src/billing/runtime/local/providers/mollie/capabilities.ts","../src/billing/runtime/local/providers/mollie/runtime.ts","../src/billing/runtime/local/providers/mollie/customers.ts","../src/billing/runtime/local/providers/mollie/dialect/customers.ts","../src/billing/runtime/local/providers/mollie/projection/customer.ts","../src/billing/runtime/local/providers/mollie/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/dialect/webhooks.ts","../src/billing/runtime/local/providers/mollie/webhooks.ts","../src/billing/runtime/local/providers/mollie/sdk/json.ts","../src/billing/runtime/local/providers/stripe/capabilities.ts","../src/billing/runtime/local/providers/stripe/runtime.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/self/runtime.ts","../src/billing/runtime/self/checkout.ts","../src/billing/runtime/self/dispatch.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/runtime/self/subscriptions.ts","../src/billing/runtime/local/execute/invoices.ts","../src/billing/runtime/local/execute/payment-links.ts","../src/billing/runtime/local/execute/product-list.ts","../src/billing/runtime/local/execute/refunds.ts","../src/runtime/materializers/billing.ts","../src/postgres/constants.ts","../src/postgres/transport.ts","../src/postgres/sql.ts","../src/postgres/compile-ast.ts","../src/postgres/relation-catalog.ts","../src/postgres/compile-fetch.ts","../src/postgres/errors.ts","../src/postgres/identity.ts","../src/postgres/execute.ts","../src/postgres/transaction.ts","../src/runtime/materializers/database.ts","../src/runtime/materializers/auth.ts","../src/chat/config.ts","../src/chat/local/database.ts","../src/chat/local/principal.ts","../src/runtime/authority/headers.ts","../src/runtime/authority/resolve.ts","../src/runtime/data/athena-session.ts","../src/runtime/data/rights-resolution.ts","../src/runtime/authorization/types.ts","../src/runtime/authorization/shadow.ts","../src/runtime/data/rights-diagnostics.ts","../src/runtime/data/principal.ts","../src/chat/local/errors.ts","../src/chat/local/runtime.ts","../src/chat/local/postgres-store.ts","../src/chat/local/realtime.ts","../src/runtime/materializers/chat.ts","../src/storage/local.ts","../src/storage/runtime/providers/local-provider.ts","../src/storage/runtime/providers/r2-provider.ts","../src/storage/runtime/providers/s3-provider.ts","../src/runtime/materializers/storage.ts","../src/runtime/plan/validate.ts","../src/runtime/plan/materialize.ts","../src/runtime/plan/normalize.ts","../src/runtime/plan/resolve.ts","../src/runtime/plan/types.ts"],"names":["AthenaBillingError","AthenaConfigurationError","init_errors","asRecord","asString","asStringList","originFromConfiguredUrl","id","init_config","normalizeOptional","formatProviderLabel","nonEmpty","trimTrailingSlash","isAbsoluteHttpUrl","isRecord","createHash","init_registry","body","activeTraceStorage","sampleAllows","errorCodeOf","createActiveTrace","AsyncLocalStorage","storage","subject","isPresentSnapshot","DEFAULT_TTL_MS","row","init_types","init_policy","auditError","table","init_retry","jsonValue","init_audit","readString","asBinding","result","init_postgres","base64","mapRow","index","init_planner","init_coordinator","init_automatic","path","listeners","hooks","now","request","isDynamicBaseURLConfig","cached","parseBooleanFlag","message","constraint","kind","resolve","resolveBillingEnvironment","connectionQuery","SDK_NAME","SDK_HEADER_VALUE","report","log","line","column","isRelationSelectNode","IDENTIFIER","nonEmptyString","resolveRequestId","resolveErrorMessage","queryText","buildHeaders","block","existsSync","readFileSync","fileURLToPath","require","pathToFileURL","actorRights","POSTGRES_PROTOCOLS","isLoopbackHost","options","conflictCount","join","mkdir","writeFile","readdir","readFile","stripTrailingSlashes","requestOrigin","json","error","toBase64Url","capabilityDisabled","gateCapability","token","requireUserId","sessions","parsed","firstNonEmptyString","resolveStructuredErrorPayload","identifier","aliasIdentifier","baseIdentifier","columns","logger","stringifyFilterValue","filterMethods","filters","AthenaStorageError","appendQuery","toHex","sourceName","readProcessEnv","headerValue","withPathParam","resolveErrorHint","isBlobBody","encodeBase64","sum","j","rows","outputAlias","splitTopLevel","compilePredicate","RESPONSE_ALIAS_PATTERN","SQL_ALIAS_PATTERN","conditionToWhere","clause","parts","assignments","quoteIdent","isIdentChar","hasPaginationBounds","i","depth","inSingle","inDouble","inBacktick","inBracket","errorResponse","mapped","relative","nowIso","serialized","sleep","normalizeAthenaError","sourceData","selectedData","next","asExecutorTransport","decision","unwrap","OVERLAY_PRINCIPAL","readFirstEnvHttpUrl","appendPath","isD1Binding","loadPgPoolConstructor","absolutePath","dirname","readEnvStringValue","capitalize","posix","renderModelArtifact","normalizeTypeLabel","relationKey","stat","relationColumns","z","tableId","isObject","REFERENTIAL_ACTIONS","schemaName","tableName","tableKey","allow","tableIdentityKey","rename","item","createTableBuilder","escapeSqlLiteral","buildSchemaArrayLiteral","inlineSchemaLiteral","parsePostgresArrayLiteral","coerceStringArray","errorMessage","transport","role","normalizePath","outcome","asStringArray","requireAdmin","created","memberUserId","bytesToBase64","base64ToBytes","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","session","authorizationEndpoint","tokenEndpoint","sha256Hex","importJWK","decodeJwt","decodeProtectedHeader","jwtVerify","profile","userMap","createRemoteJWKSet","userinfoEndpoint","z3","user","account","TEXT_ENCODER","generateKeyPair","exportJWK","SignJWT","cloneRecord","hydrate","asIso","assertSocialConfigObject","normalizeSocialProviderBag","extractSocialProviderMap","TABLE","toOverride","randomBytes","createCipheriv","createDecipheriv","UUID_RE","uuidOrNull","configuredProviderNames","provider","isLoopbackHostname","createHmac","timingSafeEqual","optionalString","serializationRetry","projectMoney","projected","stage","encodeBase64Url","decodeBase64Url","audit","ir","entry","requireString","unavailable","isAthenaPostgresPool","runAutomaticBillingWebhookReconcileIfEnabled","runAutomaticBillingCustomerImportIfEnabled","Binder","assertEffectiveMutationBounds","limitOffsetClause","quoteSelectTokenStrict","selectClause","wantsReturning","buildWhere","orderClause","rejectStructuredRelations","resolveBoundedIdentityColumn","extractAthenaCount","parseOnConflictColumns","appendOnConflict","SAFE_QUALIFIED","qualifyTable","qualifyColumn","compileCondition","compileRelationPredicate","compileRelationScope","joinPredicate","compileSelectList","compileOrder","SAFE_IDENT","stripNullPropertiesFromRows","maybeStripNullRows","resolveStripNulls","successResponse","compileErrorResponse","compileOptionsForBoundedMutation","metadataRecord","hasAssignment","asJson","randomUUID","normalizePrefix","assertSafeObjectKey","isAbsolute","sep","toBytes","isBinarySource","isFileListLike","fileNameOf","sourceSizeOf","progressSnapshot","rel","putBytes","basename","uploaded","key","rm","file","toPhysicalKey","toLogicalKey","trimOptional","createClient"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Shared Athena Auth operation contract.\n *\n * Live HTTP support is generated (`operations.generated.ts` /\n * `contracts/auth/routes.generated.json`). This module owns the type and\n * derived views. Do not hand-maintain a second missing-route list.\n */\n\nimport type { AthenaAuthDomainEvent } from \"../hooks/events.ts\";\n\nexport type AthenaAuthRuntimeSupport = \"supported\" | \"unsupported\";\n\nexport type AthenaAuthOperationAuth =\n\t| \"public\"\n\t| \"optional-session\"\n\t| \"session\"\n\t| \"admin\";\n\nexport type AthenaAuthOperationCapability =\n\t| \"accounts\"\n\t| \"admin\"\n\t| \"apiKeys\"\n\t| \"email\"\n\t| \"health\"\n\t| \"invitations\"\n\t| \"jwt\"\n\t| \"oidc\"\n\t| \"organizations\"\n\t| \"passkeys\"\n\t| \"password\"\n\t| \"sessions\"\n\t| \"social\"\n\t| \"tokens\"\n\t| \"twoFactor\";\n\nexport interface AthenaAuthOperationDefinition {\n\tid: string;\n\tmethod: string;\n\tpath: string;\n\tcapability: AthenaAuthOperationCapability | string;\n\trust: AthenaAuthRuntimeSupport;\n\tembedded: AthenaAuthRuntimeSupport;\n\tauth: AthenaAuthOperationAuth;\n\tmutation: boolean;\n\tdomainEvent?: AthenaAuthDomainEvent;\n\tnonportable?: boolean;\n}\n\nexport function operationKey(\n\toperation: Pick<AthenaAuthOperationDefinition, \"method\" | \"path\">,\n): string {\n\treturn `${operation.method} ${operation.path}`;\n}\n\n/**\n * Product-portable gaps: Rust serves the route, embedded does not, and the\n * route is not a dedicated-service operator surface (`nonportable`).\n *\n * Wave 0 keeps `KNOWN_MISSING_IN_LOCAL` as a freeze snapshot of this list.\n * Later waves delete the Set once this function returns [].\n */\nexport function listMissingEmbeddedOperations(\n\toperations: readonly AthenaAuthOperationDefinition[],\n): string[] {\n\treturn operations\n\t\t.filter(\n\t\t\t(operation) =>\n\t\t\t\toperation.rust === \"supported\" &&\n\t\t\t\toperation.embedded === \"unsupported\" &&\n\t\t\t\toperation.nonportable !== true,\n\t\t)\n\t\t.map(operationKey)\n\t\t.sort();\n}\n\nexport function operationsForCapability(\n\toperations: readonly AthenaAuthOperationDefinition[],\n\tcapability: string,\n): AthenaAuthOperationDefinition[] {\n\treturn operations.filter((operation) => operation.capability === capability);\n}\n\n/**\n * Advertised `passkeys` / social providers must stay false until every\n * portable Rust-supported operation in that capability is embedded-supported.\n */\nexport function deriveEmbeddedCapabilityAdvertisement(\n\toperations: readonly AthenaAuthOperationDefinition[],\n): {\n\tpasskeys: boolean;\n\tsocialProvidersAdvertised: boolean;\n} {\n\tconst portable = (capability: string) =>\n\t\toperations.filter(\n\t\t\t(operation) =>\n\t\t\t\toperation.capability === capability &&\n\t\t\t\toperation.rust === \"supported\" &&\n\t\t\t\toperation.nonportable !== true,\n\t\t);\n\n\tconst passkeyOps = portable(\"passkeys\");\n\tconst socialOps = portable(\"social\");\n\n\treturn {\n\t\tpasskeys:\n\t\t\tpasskeyOps.length > 0 &&\n\t\t\tpasskeyOps.every((operation) => operation.embedded === \"supported\"),\n\t\tsocialProvidersAdvertised:\n\t\t\tsocialOps.length > 0 &&\n\t\t\tsocialOps.every((operation) => operation.embedded === \"supported\"),\n\t};\n}\n","export const ATHENA_BILLING_HTTP_ERROR = \"ATHENA_BILLING_HTTP_ERROR\" as const;\n\nexport class AthenaBillingError extends Error {\n\tbody: unknown;\n\tcode: string;\n\tendpoint: string;\n\tmethod: string;\n\tstatus: number;\n\n\tconstructor(input: {\n\t\tbody: unknown;\n\t\tcode?: string;\n\t\tendpoint: string;\n\t\tmessage: string;\n\t\tmethod: string;\n\t\tstatus: number;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingError\";\n\t\tthis.body = input.body;\n\t\tthis.code = input.code ?? ATHENA_BILLING_HTTP_ERROR;\n\t\tthis.endpoint = input.endpoint;\n\t\tthis.method = input.method;\n\t\tthis.status = input.status;\n\t}\n}\n\nexport const ATHENA_BILLING_OPERATION_UNAVAILABLE =\n\t\"ATHENA_BILLING_OPERATION_UNAVAILABLE\" as const;\n\nexport const ATHENA_BILLING_AUTHORIZATION_DENIED =\n\t\"ATHENA_BILLING_AUTHORIZATION_DENIED\" as const;\n\nexport const ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED =\n\t\"ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_NOT_CONFIGURED =\n\t\"ATHENA_BILLING_PROVIDER_NOT_CONFIGURED\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_NOT_REGISTERED =\n\t\"ATHENA_BILLING_PROVIDER_NOT_REGISTERED\" as const;\n\nexport const ATHENA_BILLING_TARGET_AMBIGUOUS =\n\t\"ATHENA_BILLING_TARGET_AMBIGUOUS\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_CONFIG_INVALID =\n\t\"ATHENA_BILLING_PROVIDER_CONFIG_INVALID\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_SERVER_REQUIRED =\n\t\"ATHENA_BILLING_PROVIDER_SERVER_REQUIRED\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_SDK_REQUIRED =\n\t\"ATHENA_BILLING_PROVIDER_SDK_REQUIRED\" as const;\n\nexport const ATHENA_BILLING_CONFIG_CONFLICT =\n\"ATHENA_BILLING_CONFIG_CONFLICT\" as const;\n\nexport const ATHENA_BILLING_CREDENTIAL_UNAVAILABLE =\n\t\"ATHENA_BILLING_CREDENTIAL_UNAVAILABLE\" as const;\n\nexport const ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH =\n\t\"ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH\" as const;\n\nexport const ATHENA_BILLING_CREDENTIAL_INVALID =\n\t\"ATHENA_BILLING_CREDENTIAL_INVALID\" as const;\n\nexport type AthenaBillingProviderErrorCode =\n\t| typeof ATHENA_BILLING_PROVIDER_NOT_CONFIGURED\n\t| typeof ATHENA_BILLING_PROVIDER_NOT_REGISTERED\n\t| typeof ATHENA_BILLING_TARGET_AMBIGUOUS\n\t| typeof ATHENA_BILLING_PROVIDER_CONFIG_INVALID\n\t| typeof ATHENA_BILLING_PROVIDER_SERVER_REQUIRED\n\t| typeof ATHENA_BILLING_PROVIDER_SDK_REQUIRED\n\t| typeof ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED\n\t| typeof ATHENA_BILLING_CONFIG_CONFLICT;\n\nexport type BillingProviderErrorKind =\n\t| \"authentication\"\n\t| \"authorization\"\n\t| \"invalid_request\"\n\t| \"not_found\"\n\t| \"conflict\"\n\t| \"idempotency_conflict\"\n\t| \"rate_limited\"\n\t| \"provider_unavailable\"\n\t| \"network\"\n\t| \"timeout\"\n\t| \"signature_invalid\"\n\t| \"unsupported_operation\"\n\t| \"unsupported_currency\"\n\t| \"unsupported_payment_method\"\n\t| \"customer_action_required\"\n\t| \"payment_declined\"\n\t| \"resource_state_conflict\"\n\t| \"serialization\"\n\t| \"unknown\";\n\nexport type BillingRetryDisposition =\n\t| \"never\"\n\t| \"safe\"\n\t| \"reconcile_first\"\n\t| \"customer_action_required\";\n\nexport type AthenaBillingCredentialErrorCode =\n\t| typeof ATHENA_BILLING_CREDENTIAL_UNAVAILABLE\n\t| typeof ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH\n\t| typeof ATHENA_BILLING_CREDENTIAL_INVALID;\n\nexport class AthenaBillingCredentialError extends Error {\n\treadonly provider: string;\n\treadonly environment: \"test\" | \"live\";\n\treadonly code: AthenaBillingCredentialErrorCode;\n\n\tconstructor(input: {\n\t\tcode: AthenaBillingCredentialErrorCode;\n\t\tmessage: string;\n\t\tprovider: string;\n\t\tenvironment: \"test\" | \"live\";\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingCredentialError\";\n\t\tthis.code = input.code;\n\t\tthis.provider = input.provider;\n\t\tthis.environment = input.environment;\n\t}\n}\n\nexport function isAthenaBillingCredentialError(\n\terror: unknown,\n): error is AthenaBillingCredentialError {\n\treturn error instanceof AthenaBillingCredentialError;\n}\n\nexport class AthenaBillingProviderError extends Error {\n\treadonly code: AthenaBillingProviderErrorCode;\n\n\tconstructor(input: {\n\t\tcode: AthenaBillingProviderErrorCode;\n\t\tmessage: string;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingProviderError\";\n\t\tthis.code = input.code;\n\t}\n}\n\nexport function isAthenaBillingProviderError(\n\terror: unknown,\n): error is AthenaBillingProviderError {\n\treturn error instanceof AthenaBillingProviderError;\n}\n\nexport type AthenaBillingCapabilityErrorCode =\n\ttypeof ATHENA_BILLING_OPERATION_UNAVAILABLE;\n\nexport class AthenaBillingAuthorizationError extends AthenaBillingError {\n\treadonly errorNumber: number;\n\treadonly missing: readonly string[];\n\treadonly operation: string;\n\n\tconstructor(input: {\n\t\tmissing: readonly string[];\n\t\toperation: string;\n\t}) {\n\t\tsuper({\n\t\t\tbody: { missing: input.missing, operation: input.operation },\n\t\t\tcode: ATHENA_BILLING_AUTHORIZATION_DENIED,\n\t\t\tendpoint: \"\",\n\t\t\tmessage:\n\t\t\t\tinput.missing.length === 0\n\t\t\t\t\t? `Billing operation ${input.operation} denied (no subject binding)`\n\t\t\t\t\t: `Billing operation ${input.operation} denied (missing ${input.missing.join(\", \")})`,\n\t\t\tmethod: \"POST\",\n\t\t\tstatus: 403,\n\t\t});\n\t\tthis.name = \"AthenaBillingAuthorizationError\";\n\t\tthis.errorNumber = 4014;\n\t\tthis.missing = input.missing;\n\t\tthis.operation = input.operation;\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\";\n}\n\nexport function isAthenaBillingAuthorizationError(\n\terror: unknown,\n): error is AthenaBillingAuthorizationError {\n\tif (error instanceof AthenaBillingAuthorizationError) {\n\t\treturn true;\n\t}\n\tif (!isRecord(error)) {\n\t\treturn false;\n\t}\n\treturn (\n\t\terror.code === ATHENA_BILLING_AUTHORIZATION_DENIED &&\n\t\terror.errorNumber === 4014 &&\n\t\ttypeof error.operation === \"string\" &&\n\t\tArray.isArray(error.missing)\n\t);\n}\n\nexport class AthenaBillingCapabilityError extends Error {\n\treadonly code: AthenaBillingCapabilityErrorCode;\n\treadonly operation: string;\n\treadonly reason: string;\n\n\tconstructor(input: {\n\t\tmessage?: string;\n\t\toperation: string;\n\t\treason: string;\n\t}) {\n\t\tsuper(\n\t\t\tinput.message ??\n\t\t\t\t`Billing operation ${input.operation} is unavailable (${input.reason})`,\n\t\t);\n\t\tthis.name = \"AthenaBillingCapabilityError\";\n\t\tthis.code = ATHENA_BILLING_OPERATION_UNAVAILABLE;\n\t\tthis.operation = input.operation;\n\t\tthis.reason = input.reason;\n\t}\n}\n\nexport function isAthenaBillingCapabilityError(\n\terror: unknown,\n): error is AthenaBillingCapabilityError {\n\tif (error instanceof AthenaBillingCapabilityError) {\n\t\treturn true;\n\t}\n\tif (!isRecord(error)) {\n\t\treturn false;\n\t}\n\treturn (\n\t\terror.code === ATHENA_BILLING_OPERATION_UNAVAILABLE &&\n\t\ttypeof error.operation === \"string\" &&\n\t\ttypeof error.reason === \"string\"\n\t);\n}\n\nexport class AthenaBillingProviderRequestError extends Error {\n\treadonly provider: string;\n\treadonly kind: BillingProviderErrorKind;\n\treadonly retry: BillingRetryDisposition;\n\treadonly operation?: string;\n\treadonly status?: number;\n\treadonly details?: unknown;\n\n\tconstructor(input: {\n\t\tmessage: string;\n\t\tprovider: string;\n\t\tkind: BillingProviderErrorKind;\n\t\tretry: BillingRetryDisposition;\n\t\toperation?: string;\n\t\tstatus?: number;\n\t\tdetails?: unknown;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingProviderRequestError\";\n\t\tthis.provider = input.provider;\n\t\tthis.kind = input.kind;\n\t\tthis.retry = input.retry;\n\t\tthis.operation = input.operation;\n\t\tthis.status = input.status;\n\t\tthis.details = input.details;\n\t}\n\n\ttoJSON(): Record<string, unknown> {\n\t\treturn {\n\t\t\tdetails: this.details,\n\t\t\tkind: this.kind,\n\t\t\tmessage: this.message,\n\t\t\tname: this.name,\n\t\t\toperation: this.operation,\n\t\t\tprovider: this.provider,\n\t\t\tretry: this.retry,\n\t\t\tstatus: this.status,\n\t\t};\n\t}\n}\n\nexport function isAthenaBillingProviderRequestError(\n\terror: unknown,\n): error is AthenaBillingProviderRequestError {\n\treturn error instanceof AthenaBillingProviderRequestError;\n}\n\nexport function billingProviderErrorKindFromHttp(input: {\n\tstatus?: number;\n\tkey?: string;\n\tdetail?: string;\n}): BillingProviderErrorKind {\n\tconst key = input.key?.trim().toLowerCase();\n\tif (key === \"authentication\" || key === \"unauthorized\") {\n\t\treturn \"authentication\";\n\t}\n\tif (key === \"forbidden\") {\n\t\treturn \"authorization\";\n\t}\n\tif (key === \"not_found\") {\n\t\treturn \"not_found\";\n\t}\n\tif (key === \"conflict\") {\n\t\treturn \"conflict\";\n\t}\n\tif (key === \"idempotency_conflict\") {\n\t\treturn \"idempotency_conflict\";\n\t}\n\tif (key === \"rate_limited\") {\n\t\treturn \"rate_limited\";\n\t}\n\tif (key === \"validation_error\" || key === \"unprocessable_entity\") {\n\t\treturn \"invalid_request\";\n\t}\n\tif (key === \"payment_declined\") {\n\t\treturn \"payment_declined\";\n\t}\n\tif (key === \"customer_action_required\") {\n\t\treturn \"customer_action_required\";\n\t}\n\tif (input.status === 401) {\n\t\treturn \"authentication\";\n\t}\n\tif (input.status === 403) {\n\t\treturn \"authorization\";\n\t}\n\tif (input.status === 404) {\n\t\treturn \"not_found\";\n\t}\n\tif (input.status === 409) {\n\t\treturn \"conflict\";\n\t}\n\tif (input.status === 422) {\n\t\treturn \"invalid_request\";\n\t}\n\tif (input.status === 429) {\n\t\treturn \"rate_limited\";\n\t}\n\tif (input.status != null && input.status >= 500 && input.status <= 599) {\n\t\treturn \"provider_unavailable\";\n\t}\n\tconst detail = (input.detail ?? \"\").toLowerCase();\n\tif (detail.includes(\"timeout\")) {\n\t\treturn \"timeout\";\n\t}\n\tif (detail.includes(\"declined\")) {\n\t\treturn \"payment_declined\";\n\t}\n\treturn \"unknown\";\n}\n","export type BillingEnvironmentName = \"test\" | \"live\";\n\nexport interface BillingEnvironment {\n\treadonly testMode: boolean;\n\treadonly name: BillingEnvironmentName;\n}\n\n/** Named live-selection invariant (see billing/safety/environment.ts). */\nexport type BillingLiveCredentialSelection = BillingEnvironment;\n\nexport function billingEnvironmentName(\n\ttestMode: boolean,\n): BillingEnvironmentName {\n\treturn testMode ? \"test\" : \"live\";\n}\n\n/**\n * Canonical Billing environment. Local provider execution defaults to test\n * so a live credential never becomes active merely by existing.\n */\nexport function resolveBillingEnvironment(input?: {\n\ttestMode?: boolean;\n}): BillingEnvironment {\n\tconst testMode = input?.testMode !== false;\n\treturn {\n\t\ttestMode,\n\t\tname: billingEnvironmentName(testMode),\n\t};\n}\n","import type { BillingOperation } from \"../runtime/capabilities.ts\";\nimport type { BillingOperationSafetyProfile } from \"./types.ts\";\n\nfunction row(\n\toperation: BillingOperation,\n\tmutationClass: BillingOperationSafetyProfile[\"mutationClass\"],\n\tidempotency: BillingOperationSafetyProfile[\"idempotency\"],\n\treplayGuarantee: BillingOperationSafetyProfile[\"replayGuarantee\"],\n\tmoney: BillingOperationSafetyProfile[\"money\"],\n\tauthorityMode: BillingOperationSafetyProfile[\"authorityMode\"],\n): BillingOperationSafetyProfile {\n\treturn {\n\t\tauthorityMode,\n\t\tidempotency,\n\t\tmoney,\n\t\tmutationClass,\n\t\toperation,\n\t\tpreflightIsConcurrencyGuarantee: false,\n\t\treplayGuarantee,\n\t};\n}\n\nconst readTrust = (\n\toperation: BillingOperation,\n): BillingOperationSafetyProfile =>\n\trow(operation, \"read\", \"not_applicable\", \"none\", \"not_applicable\", \"provider-trust\");\n\nconst financialCreate = (\n\toperation: BillingOperation,\n\tmoney: BillingOperationSafetyProfile[\"money\"],\n): BillingOperationSafetyProfile =>\n\trow(\n\t\toperation,\n\t\t\"financial_create\",\n\t\t\"required_caller_owned\",\n\t\t\"provider_same_key\",\n\t\tmoney,\n\t\t\"declared-required\",\n\t);\n\nconst financialCancel = (\n\toperation: BillingOperation,\n): BillingOperationSafetyProfile =>\n\trow(\n\t\toperation,\n\t\t\"financial_cancel\",\n\t\t\"not_applicable\",\n\t\t\"none\",\n\t\t\"not_applicable\",\n\t\t\"declared-required\",\n\t);\n\nconst nonFinancialWrite = (\n\toperation: BillingOperation,\n): BillingOperationSafetyProfile =>\n\trow(\n\t\toperation,\n\t\t\"non_financial_write\",\n\t\t\"not_applicable\",\n\t\t\"none\",\n\t\t\"not_applicable\",\n\t\t\"declared-required\",\n\t);\n\nexport const BILLING_OPERATION_SAFETY = {\n\t\"customers.create\": financialCreate(\"customers.create\", \"not_applicable\"),\n\t\"customers.delete\": nonFinancialWrite(\"customers.delete\"),\n\t\"customers.get\": readTrust(\"customers.get\"),\n\t\"customers.list\": readTrust(\"customers.list\"),\n\t\"customers.update\": nonFinancialWrite(\"customers.update\"),\n\t\"invoices.get\": readTrust(\"invoices.get\"),\n\t\"invoices.list\": readTrust(\"invoices.list\"),\n\t\"paymentLinks.create\": financialCreate(\"paymentLinks.create\", \"required\"),\n\t\"paymentLinks.delete\": nonFinancialWrite(\"paymentLinks.delete\"),\n\t\"paymentLinks.get\": readTrust(\"paymentLinks.get\"),\n\t\"paymentLinks.list\": readTrust(\"paymentLinks.list\"),\n\t\"paymentLinks.update\": nonFinancialWrite(\"paymentLinks.update\"),\n\t\"payments.cancel\": financialCancel(\"payments.cancel\"),\n\t\"payments.create\": financialCreate(\"payments.create\", \"required\"),\n\t\"payments.get\": readTrust(\"payments.get\"),\n\t\"payments.list\": readTrust(\"payments.list\"),\n\t\"refunds.cancel\": financialCancel(\"refunds.cancel\"),\n\t\"refunds.create\": financialCreate(\"refunds.create\", \"required\"),\n\t\"refunds.get\": readTrust(\"refunds.get\"),\n\t\"refunds.list\": readTrust(\"refunds.list\"),\n\t\"subscriptions.cancel\": financialCancel(\"subscriptions.cancel\"),\n\t\"subscriptions.create\": financialCreate(\"subscriptions.create\", \"required\"),\n\t\"subscriptions.get\": readTrust(\"subscriptions.get\"),\n\t\"subscriptions.list\": readTrust(\"subscriptions.list\"),\n\t\"subscriptions.update\": nonFinancialWrite(\"subscriptions.update\"),\n\t\"webhooks.create\": nonFinancialWrite(\"webhooks.create\"),\n\t\"webhooks.delete\": nonFinancialWrite(\"webhooks.delete\"),\n\t\"webhooks.get\": readTrust(\"webhooks.get\"),\n\t\"webhooks.list\": readTrust(\"webhooks.list\"),\n\t\"webhooks.test\": nonFinancialWrite(\"webhooks.test\"),\n\t\"webhooks.update\": nonFinancialWrite(\"webhooks.update\"),\n\t\"products.list\": readTrust(\"products.list\"),\n\t\"prices.list\": readTrust(\"prices.list\"),\n\t\"checkout.create\": financialCreate(\"checkout.create\", \"not_applicable\"),\n\t\"self.invoices.list\": readTrust(\"self.invoices.list\"),\n\t\"self.invoices.get\": readTrust(\"self.invoices.get\"),\n\t\"self.payments.list\": readTrust(\"self.payments.list\"),\n\t\"self.payments.get\": readTrust(\"self.payments.get\"),\n\t\"self.subscription.get\": readTrust(\"self.subscription.get\"),\n\t\"self.subscription.cancel\": financialCancel(\"self.subscription.cancel\"),\n\t\"self.subscription.enroll\": financialCreate(\n\t\t\"self.subscription.enroll\",\n\t\t\"not_applicable\",\n\t),\n\t\"self.checkout.create\": financialCreate(\n\t\t\"self.checkout.create\",\n\t\t\"not_applicable\",\n\t),\n\t\"self.checkout.resume\": nonFinancialWrite(\"self.checkout.resume\"),\n\t\"admin.connections.materialize\": nonFinancialWrite(\n\t\t\"admin.connections.materialize\",\n\t),\n\t\"admin.conflicts.resolve\": nonFinancialWrite(\"admin.conflicts.resolve\"),\n\t\"admin.ingestion.health\": readTrust(\"admin.ingestion.health\"),\n\t\"admin.reconciliation.retry\": nonFinancialWrite(\"admin.reconciliation.retry\"),\n\t\"admin.reconciliation.run\": nonFinancialWrite(\"admin.reconciliation.run\"),\n\t\"admin.webhooks.reconcile\": nonFinancialWrite(\"admin.webhooks.reconcile\"),\n\t\"admin.webhooks.status\": readTrust(\"admin.webhooks.status\"),\n\t\"admin.webhooks.verify\": readTrust(\"admin.webhooks.verify\"),\n} as const satisfies Record<BillingOperation, BillingOperationSafetyProfile>;\n","export type AthenaService = \"db\" | \"auth\" | \"chat\" | \"storage\" | \"billing\";\n\nexport type AthenaConfigurationErrorCode =\n  | \"ATHENA_NO_SERVICE_CONFIGURED\"\n  | \"ATHENA_SERVICE_NOT_CONFIGURED\"\n  | \"ATHENA_AUTH_NOT_AVAILABLE\"\n  | \"ATHENA_API_KEY_REQUIRED\"\n  | \"ATHENA_INVALID_URL\"\n  | \"ATHENA_NEXT_SERVER_RUNTIME_REQUIRED\"\n  | \"ATHENA_NODE_RUNTIME_REQUIRED\"\n  | \"ATHENA_POSTGRES_DIRECT_NODE_REQUIRED\"\n  | \"ATHENA_AUTH_ROUTING_CONFLICT\"\n  | \"ATHENA_AUTH_UPSTREAM_REQUIRED\"\n  | \"ATHENA_AUTH_DUPLICATE_PATH\"\n  | \"ATHENA_AUTH_INVALID_URL\"\n  | \"ATHENA_AUTH_CREDENTIALS_MISMATCH\"\n  | \"ATHENA_AUTH_REQUEST_ORIGIN_REQUIRED\"\n  | \"ATHENA_AUTH_PROXY_CONFIGURATION_INVALID\"\n  | \"ATHENA_AUTH_LOCAL_NODE_REQUIRED\"\n  | \"ATHENA_AUTH_LOCAL_DATABASE_REQUIRED\"\n  | \"ATHENA_CHAT_LOCAL_NODE_REQUIRED\"\n  | \"ATHENA_CHAT_LOCAL_DATABASE_REQUIRED\"\n  | \"ATHENA_CHAT_LOCAL_REMOTE_CONFLICT\"\n  | \"ATHENA_CHAT_REMOTE_URL_REQUIRED\"\n  | \"ATHENA_CHAT_CONFIG_INCOMPLETE\"\n  | \"ATHENA_CHAT_MODE_INVALID\"\n  | \"ATHENA_AUTH_FEATURE_UNSUPPORTED\"\n  | \"ATHENA_AUTH_HOOKS_REQUIRE_LOCAL_RUNTIME\"\n  | \"ATHENA_DATA_LIFECYCLE_REQUIRES_LOCAL_RUNTIME\"\n  | \"ATHENA_DATA_LIFECYCLE_AFTER_COMMIT_UNSUPPORTED\"\n  | \"ATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED\"\n  | \"ATHENA_AUTH_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME\"\n  | \"ATHENA_BILLING_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME\"\n  | \"ATHENA_BILLING_INGESTION_PUBLIC_URL_REQUIRED\"\n  | \"ATHENA_BILLING_INGESTION_NEXT_GEN_REQUIRED\"\n\t| \"ATHENA_BILLING_INGESTION_CONFIG_INVALID\"\n\t| \"ATHENA_BILLING_APPLICATION_ID_REQUIRED\"\n\t| \"ATHENA_AUTH_RUNTIME_CONFIG_CONFLICT\"\n  | \"ATHENA_STORAGE_LOCAL_NODE_REQUIRED\"\n  | \"ATHENA_STORAGE_S3_NODE_REQUIRED\"\n  | \"ATHENA_STORAGE_CAPABILITY_UNSUPPORTED\"\n  | \"ATHENA_DATABASE_URL_CONFLICT\"\n  | \"ATHENA_RUNTIME_CONFIG_INVALID\"\n  | \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\"\n  | \"ATHENA_PASSKEY_RP_AMBIGUOUS\"\n  | \"ATHENA_RUNTIME_DISPOSED\"\n  | \"ATHENA_HANDLER_ROOT_CLIENT_REQUIRED\"\n  | \"ATHENA_RUNTIME_OWNERSHIP_INVALID\"\n  | \"ATHENA_LOCAL_RUNTIME_REQUIRED\"\n  | \"ATHENA_POSTGRES_DRIVER_MISSING\"\n  | \"ATHENA_BROWSER_SERVER_IMPORT\"\n  | \"ATHENA_RUNTIME_CLOSED\"\n  | \"ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH\"\n  | \"ATHENA_CONFIG_IMPORT_FAILED\";\n\n/**\n * Structured configuration failure raised during client construction or\n * unavailable-service access. Distinct from transport/auth/gateway errors.\n */\nexport class AthenaConfigurationError extends Error {\n  readonly code: AthenaConfigurationErrorCode;\n  readonly service?: AthenaService;\n\n  constructor(\n    code: AthenaConfigurationErrorCode,\n    message: string,\n    service?: AthenaService,\n    options?: { cause?: unknown }\n  ) {\n    super(message, options);\n    this.name = \"AthenaConfigurationError\";\n    this.code = code;\n    this.service = service;\n  }\n}\n","/**\n * 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 { ATHENA_ENV_APP_URL_KEYS } from \"../env/index.ts\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\n\nexport interface AthenaAppIdentityInput {\n\tid?: string | null;\n\tname?: string | null;\n\turl?: string | null;\n}\n\nexport interface AthenaAppIdentity {\n\treadonly hostname: string;\n\treadonly name: string;\n\treadonly origin: string;\n}\n\nexport interface ResolveAthenaAppIdentityOptions {\n\tapp?: AthenaAppIdentityInput;\n\tenv?: Record<string, string | undefined>;\n\tenvironment?: \"development\" | \"production\";\n\t/** When true, production missing URL fails closed. */\n\trequired?: boolean;\n}\n\nconst FORBIDDEN_IDENTITY_ENV_KEYS = new Set([\n\t\"HOST\",\n\t\"HTTP_HOST\",\n\t\"X_FORWARDED_HOST\",\n\t\"x-forwarded-host\",\n]);\n\nfunction originFromConfiguredUrl(value: string): string | undefined {\n\ttry {\n\t\tconst url = new URL(value.trim());\n\t\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn url.origin;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction firstConfiguredOrigin(\n\tenv: Record<string, string | undefined>,\n): string | undefined {\n\tfor (const key of ATHENA_ENV_APP_URL_KEYS) {\n\t\tconst raw = env[key];\n\t\tif (typeof raw !== \"string\" || !raw.trim()) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst origin = originFromConfiguredUrl(raw);\n\t\tif (origin) {\n\t\t\treturn origin;\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/**\n * Resolve one immutable app identity at Auth / client init.\n */\nexport function resolveAthenaAppIdentity(\n\toptions: ResolveAthenaAppIdentityOptions = {},\n): AthenaAppIdentity | null {\n\tconst env = options.env ?? {};\n\tfor (const key of FORBIDDEN_IDENTITY_ENV_KEYS) {\n\t\tvoid env[key];\n\t}\n\n\tconst explicitUrl =\n\t\ttypeof options.app?.url === \"string\" ? options.app.url.trim() : \"\";\n\tlet origin: string | undefined;\n\tif (explicitUrl) {\n\t\torigin = originFromConfiguredUrl(explicitUrl);\n\t\tif (!origin) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t\t\"createClient({ app: { url } }) must be an absolute http(s) URL.\",\n\t\t\t\t\"auth\",\n\t\t\t);\n\t\t}\n\t} else {\n\t\torigin = firstConfiguredOrigin(env);\n\t}\n\n\tif (!origin) {\n\t\tif (options.required && options.environment === \"production\") {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\",\n\t\t\t\t\"Passkeys require a trusted application origin (createClient app.url or APP_URL). Production does not default to localhost and never reads Host.\",\n\t\t\t\t\"auth\",\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\n\tconst hostname = new URL(origin).hostname;\n\tconst name =\n\t\ttypeof options.app?.name === \"string\" && options.app.name.trim()\n\t\t\t? options.app.name.trim()\n\t\t\t: \"Athena\";\n\treturn Object.freeze({ hostname, name, origin });\n}\n","import type { ParsedAuthBridgeCode } from \"./types.ts\";\n\nexport const AUTH_BRIDGE_CODE_PREFIX = \"ath_brc_\";\nexport const AUTH_BRIDGE_CODE_ENTROPY_BYTES = 32;\nexport const AUTH_BRIDGE_CODE_HASH_PREFIX = \"athena:auth:bridge:v1:\";\n\nfunction toBase64Url(bytes: Uint8Array): string {\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/g, \"\");\n}\n\nfunction fromBase64Url(value: string): Uint8Array {\n\tconst padded = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n\tconst padLength = (4 - (padded.length % 4)) % 4;\n\tconst binary = atob(`${padded}${\"=\".repeat(padLength)}`);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let index = 0; index < binary.length; index += 1) {\n\t\tbytes[index] = binary.charCodeAt(index);\n\t}\n\treturn bytes;\n}\n\nfunction toHex(bytes: Uint8Array): string {\n\tlet hex = \"\";\n\tfor (const byte of bytes) {\n\t\thex += byte.toString(16).padStart(2, \"0\");\n\t}\n\treturn hex;\n}\n\nfunction isLoopbackHost(hostname: string): boolean {\n\tconst host = hostname.toLowerCase();\n\treturn host === \"localhost\" || host === \"127.0.0.1\" || host === \"::1\" || host === \"[::1]\";\n}\n\nexport function generateAuthBridgeCode(): string {\n\tconst bytes = new Uint8Array(AUTH_BRIDGE_CODE_ENTROPY_BYTES);\n\tcrypto.getRandomValues(bytes);\n\treturn `${AUTH_BRIDGE_CODE_PREFIX}${toBase64Url(bytes)}`;\n}\n\nexport function parseAuthBridgeCode(code: string): ParsedAuthBridgeCode {\n\tif (!code.startsWith(AUTH_BRIDGE_CODE_PREFIX)) {\n\t\tthrow new Error(\"Invalid auth bridge code\");\n\t}\n\tconst payload = code.slice(AUTH_BRIDGE_CODE_PREFIX.length);\n\tif (!/^[A-Za-z0-9_-]+$/.test(payload)) {\n\t\tthrow new Error(\"Invalid auth bridge code\");\n\t}\n\tconst bytes = fromBase64Url(payload);\n\tif (bytes.byteLength !== AUTH_BRIDGE_CODE_ENTROPY_BYTES) {\n\t\tthrow new Error(\"Invalid auth bridge code\");\n\t}\n\treturn {\n\t\tbytes,\n\t\tentropyBits: bytes.byteLength * 8,\n\t};\n}\n\nexport async function hashAuthBridgeCode(code: string): Promise<string> {\n\tconst encoded = new TextEncoder().encode(`${AUTH_BRIDGE_CODE_HASH_PREFIX}${code}`);\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", encoded);\n\treturn toHex(new Uint8Array(digest));\n}\n\nexport function normalizeAuthBridgeDestinationOrigin(input: string): string {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(input);\n\t} catch {\n\t\tthrow new Error(\"Invalid destination origin\");\n\t}\n\tif (url.username || url.password) {\n\t\tthrow new Error(\"Invalid destination origin\");\n\t}\n\tif (url.search !== \"\" || url.hash !== \"\") {\n\t\tthrow new Error(\"Invalid destination origin\");\n\t}\n\tif (url.pathname !== \"/\" && url.pathname !== \"\") {\n\t\tthrow new Error(\"Invalid destination origin\");\n\t}\n\tif (url.protocol === \"http:\") {\n\t\tif (!isLoopbackHost(url.hostname)) {\n\t\t\tthrow new Error(\"Invalid destination origin\");\n\t\t}\n\t} else if (url.protocol !== \"https:\") {\n\t\tthrow new Error(\"Invalid destination origin\");\n\t}\n\treturn url.origin;\n}\n\nexport function normalizeAuthBridgeRedirectPath(input: string): string {\n\tif (typeof input !== \"string\" || input.length === 0 || !input.startsWith(\"/\")) {\n\t\tthrow new Error(\"Invalid redirect path\");\n\t}\n\tif (input.startsWith(\"//\") || input.includes(\"\\\\\") || input.includes(\"://\")) {\n\t\tthrow new Error(\"Invalid redirect path\");\n\t}\n\tif (/%5c/i.test(input) || /javascript:/i.test(input)) {\n\t\tthrow new Error(\"Invalid redirect path\");\n\t}\n\treturn input;\n}\n","/**\n * Server-neutral Athena Auth contract.\n *\n * Externally observable protocol shared by the Rust runtime\n * (`services/athena-auth`) and the TypeScript local runtime.\n *\n * HTTP operation SSOT: `AthenaAuthOperationDefinition` plus generated\n * `ATHENA_AUTH_OPERATIONS` (`scripts/auth-route-parity.mjs`).\n */\n\nexport type {\n\tAthenaAuthOperationAuth,\n\tAthenaAuthOperationCapability,\n\tAthenaAuthOperationDefinition,\n\tAthenaAuthRuntimeSupport,\n} from \"./operations.ts\";\nexport {\n\tderiveEmbeddedCapabilityAdvertisement,\n\tlistMissingEmbeddedOperations,\n\toperationKey,\n\toperationsForCapability,\n} from \"./operations.ts\";\n\nexport const ATHENA_AUTH_PROTOCOL_VERSION = \"1\";\n\nexport const ATHENA_AUTH_DEFAULT_BASE_PATH = \"/api/auth\";\n\nexport const ATHENA_AUTH_TRACE_ID_HEADER = \"x-athena-trace-id\";\nexport const ATHENA_AUTH_REQUEST_ID_HEADER = \"x-request-id\";\n\n/** Rust default session cookie name (`AuthConfig.session.cookie_name`). */\nexport const ATHENA_AUTH_SESSION_COOKIE_NAME = \"athena-auth.session-token\";\n\n/** Additional cookie names accepted when reading a session. */\nexport const ATHENA_AUTH_SESSION_COOKIE_ALIASES = [\n\t\"athena-auth.session_token\",\n\t\"athena-auth-session_token\",\n\t\"better-auth.session_token\",\n\t\"better-auth-session_token\",\n] as const;\n\nexport const ATHENA_AUTH_PASSWORD_HASH_KEY = \"password_hash\";\n\n/** Credential account provider id used when a password row is also written. */\nexport const ATHENA_AUTH_CREDENTIAL_PROVIDER_ID = \"credential\";\n\n/**\n * Current Athena Auth schema generation (JS ledger max).\n * Rust incremental files 001–021 plus JS `021_runtime_key_and_ledger`,\n * `022_add_updated_at_to_passkeys`, `023_auth_observability`,\n * `024_email_event_default_templates`, `025_add_aaguid_to_passkeys`,\n * `026_passkey_resident_key_and_registration_transactions`,\n * `027_auth_bridge_codes`, `028_oauth_transactions`,\n * `029_notification_preferences`, `030_organization_created_by`,\n * `031_authorization_assignment`, and `032_authorization_assignment_constraints`.\n */\nexport const ATHENA_AUTH_SCHEMA_GENERATION = 32;\nexport const ATHENA_AUTH_MIN_SUPPORTED_SCHEMA_GENERATION = 1;\n\nexport const ATHENA_AUTH_SCHEMA_NAME = \"athena\";\n\nexport const ATHENA_AUTH_TABLES = {\n\tusers: \"athena.users\",\n\tsessions: \"athena.sessions\",\n\taccounts: \"athena.accounts\",\n\tverifications: \"athena.verifications\",\n\torganization: \"athena.organization\",\n\tmember: \"athena.member\",\n\tinvitation: \"athena.invitation\",\n\ttwoFactor: \"athena.two_factor\",\n\tapiKeys: \"athena.api_keys\",\n\tpasskeys: \"athena.passkeys\",\n\temails: \"athena.emails\",\n\temailSendFailures: \"athena.email_send_failures\",\n\temailEventTypes: \"athena.email_event_types\",\n\temailTemplates: \"athena.email_templates\",\n\truntimeKey: \"athena.runtime_key\",\n\tschemaMigrations: \"athena.auth_schema_migrations\",\n\tpasskeyRegistrationTransactions:\n\t\t\"athena.passkey_registration_transactions\",\n\tauthBridgeCodes: \"athena.auth_bridge_codes\",\n\toauthTransactions: \"athena.oauth_transactions\",\n\tnotificationPreferences: \"athena.notification_preferences\",\n\tauthorizationRights: \"athena.authorization_rights\",\n\tauthorizationRoles: \"athena.authorization_roles\",\n\tauthorizationRoleRights: \"athena.authorization_role_rights\",\n\tauthorizationUserRoles: \"athena.authorization_user_roles\",\n\tauthorizationMemberRoles: \"athena.authorization_member_roles\",\n\tauthorizationRevisions: \"athena.authorization_revisions\",\n\tauthorizationAuditLog: \"athena.authorization_audit_log\",\n} as const;\n\nexport const ATHENA_AUTH_CORE_ROUTES = {\n\tok: { method: \"GET\", path: \"/ok\" },\n\thealth: { method: \"GET\", path: \"/health\" },\n\tgetSession: { methods: [\"GET\", \"POST\"] as const, path: \"/get-session\" },\n\tsignUpEmail: { method: \"POST\", path: \"/sign-up/email\" },\n\tsignInEmail: { method: \"POST\", path: \"/sign-in/email\" },\n\tsignInUsername: { method: \"POST\", path: \"/sign-in/username\" },\n\tsignOut: { method: \"POST\", path: \"/sign-out\" },\n\tforgetPassword: { method: \"POST\", path: \"/forget-password\" },\n\tresetPassword: { method: \"POST\", path: \"/reset-password\" },\n\tchangePassword: { method: \"POST\", path: \"/change-password\" },\n\tupdateUser: { method: \"POST\", path: \"/update-user\" },\n\tdeleteUser: { method: \"POST\", path: \"/delete-user\" },\n\tlistSessions: { method: \"GET\", path: \"/list-sessions\" },\n\trevokeSession: { method: \"POST\", path: \"/revoke-session\" },\n\trevokeSessions: { method: \"POST\", path: \"/revoke-sessions\" },\n\trevokeOtherSessions: { method: \"POST\", path: \"/revoke-other-sessions\" },\n\tlistAccounts: { method: \"GET\", path: \"/list-accounts\" },\n\torganizationCreate: { method: \"POST\", path: \"/organization/create\" },\n\torganizationList: { method: \"GET\", path: \"/organization/list\" },\n\torganizationGet: {\n\t\tmethod: \"GET\",\n\t\tpath: \"/organization/get-full-organization\",\n\t},\n\torganizationUpdate: { method: \"POST\", path: \"/organization/update\" },\n\torganizationDelete: { method: \"POST\", path: \"/organization/delete\" },\n\torganizationSetActive: { method: \"POST\", path: \"/organization/set-active\" },\n\torganizationListMembers: {\n\t\tmethod: \"GET\",\n\t\tpath: \"/organization/list-members\",\n\t},\n\torganizationAddMember: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/add-member\",\n\t},\n\torganizationInviteReminder: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/invite-member-reminder\",\n\t},\n\torganizationRemoveMember: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/remove-member\",\n\t},\n\tsendSecurityAlert: { method: \"POST\", path: \"/send-security-alert\" },\n\tsendSignInEmail: { method: \"POST\", path: \"/send-sign-in-email\" },\n\torganizationUpdateMemberRole: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/update-member-role\",\n\t},\n\torganizationLeave: { method: \"POST\", path: \"/organization/leave\" },\n\torganizationInviteMember: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/invite-member\",\n\t},\n\torganizationAcceptInvitation: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/accept-invitation\",\n\t},\n\torganizationCancelInvitation: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/cancel-invitation\",\n\t},\n\torganizationListInvitations: {\n\t\tmethod: \"GET\",\n\t\tpath: \"/organization/list-invitations\",\n\t},\n} as const;\n\nexport type AthenaAuthHttpMethod =\n\t| \"GET\"\n\t| \"POST\"\n\t| \"PUT\"\n\t| \"PATCH\"\n\t| \"DELETE\"\n\t| \"HEAD\"\n\t| \"OPTIONS\";\n\nexport interface AthenaAuthErrorBody {\n\tcode?: string;\n\tmessage: string;\n\ttraceId: string;\n\tversion: string;\n}\n\nexport interface AthenaAuthContractUser {\n\tbanExpires?: string | null;\n\tbanned?: boolean;\n\tbanReason?: string | null;\n\tcreatedAt: string;\n\tdisplayUsername?: string | null;\n\temail?: string | null;\n\temailVerified: boolean;\n\tid: string;\n\timage?: string | null;\n\tlastSignInAt?: string | null;\n\tname?: string | null;\n\trole?: string | null;\n\ttwoFactorEnabled?: boolean;\n\tupdatedAt: string;\n\tusername?: string | null;\n}\n\nexport interface AthenaAuthContractSession {\n\tactiveOrganizationId?: string | null;\n\tcreatedAt: string;\n\texpiresAt: string;\n\tid: string;\n\timpersonatedBy?: string | null;\n\tipAddress?: string | null;\n\ttoken: string;\n\tupdatedAt: string;\n\tuserAgent?: string | null;\n\tuserId: string;\n}\n\nexport interface AthenaAuthArgon2Params {\n\tmemoryCost: number;\n\tparallelism: number;\n\ttimeCost: number;\n}\n\n/** Rust `Argon2Config::default()` — 1 MiB, 2 iterations, 1 lane, Argon2id v19. */\nexport const ATHENA_AUTH_DEFAULT_ARGON2: AthenaAuthArgon2Params = {\n\tmemoryCost: 1024,\n\tparallelism: 1,\n\ttimeCost: 2,\n};\n\nexport const ATHENA_AUTH_DEFAULT_PASSWORD_MIN_LENGTH = 8;\nexport const ATHENA_AUTH_DEFAULT_PASSWORD_MAX_LENGTH = 128;\nexport const ATHENA_AUTH_DEFAULT_SESSION_EXPIRES_SECONDS = 7 * 24 * 60 * 60;\nexport const ATHENA_AUTH_DEFAULT_SESSION_UPDATE_AGE_SECONDS = 24 * 60 * 60;\nexport const ATHENA_AUTH_DEFAULT_BODY_LIMIT_BYTES = 1_048_576;\nexport const ATHENA_AUTH_RUNTIME_KEY_PURPOSE = \"local-runtime\";\n/**\n * Session/transaction advisory lock for Embedded Auth DDL (keyring, migrate, repair).\n * Independent of application migrate locks (`ATHA`/`MIGS` in PostgresMigrationBackend).\n * The application lock does not serialize `AthenaAuthDatabase` connections.\n */\nexport const ATHENA_AUTH_INIT_ADVISORY_LOCK = 872_046_011;\n/** Alias: Embedded Auth migrator lock. Same bigint as `ATHENA_AUTH_INIT_ADVISORY_LOCK`. */\nexport const ATHENA_AUTH_MIGRATION_ADVISORY_LOCK = ATHENA_AUTH_INIT_ADVISORY_LOCK;\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type {\n\tAthenaAuthObservabilityConfig,\n\tNormalizedAthenaAuthObservability,\n} from \"./types.ts\";\n\nexport function normalizeAthenaAuthObservability(\n\tinput?: AthenaAuthObservabilityConfig,\n): NormalizedAthenaAuthObservability {\n\tconst tracesInput = input?.traces;\n\tconst tracesEnabled =\n\t\ttracesInput === undefined\n\t\t\t? true\n\t\t\t: typeof tracesInput === \"boolean\"\n\t\t\t\t? tracesInput\n\t\t\t\t: tracesInput.sampleRate !== 0;\n\tconst sampleRate =\n\t\ttypeof tracesInput === \"object\" &&\n\t\ttypeof tracesInput.sampleRate === \"number\" &&\n\t\tNumber.isFinite(tracesInput.sampleRate)\n\t\t\t? Math.min(1, Math.max(0, tracesInput.sampleRate))\n\t\t\t: 1;\n\tconst retentionDays =\n\t\ttypeof tracesInput === \"object\" &&\n\t\ttypeof tracesInput.retentionDays === \"number\" &&\n\t\tNumber.isFinite(tracesInput.retentionDays)\n\t\t\t? Math.max(1, Math.trunc(tracesInput.retentionDays))\n\t\t\t: undefined;\n\treturn {\n\t\tauditLog: input?.auditLog !== false,\n\t\ttraces: {\n\t\t\tenabled: tracesEnabled,\n\t\t\tretentionDays,\n\t\t\tsampleRate: tracesEnabled ? sampleRate : 0,\n\t\t},\n\t};\n}\n\nexport function assertLocalAuthObservability(auth: unknown): void {\n\tif (!auth || typeof auth !== \"object\") {\n\t\treturn;\n\t}\n\tconst raw = auth as Record<string, unknown>;\n\tif (!(\"observability\" in raw) || raw.observability === undefined) {\n\t\treturn;\n\t}\n\tconst mode = (auth as { mode?: unknown }).mode;\n\tif (mode !== \"local\") {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME\",\n\t\t\t'auth.observability is an embedded-auth capability. Set auth.mode to \"local\" or omit observability for remote Auth.',\n\t\t\t\"auth\",\n\t\t);\n\t}\n}\n","/**\n * Operator WebAuthn policy + supported extension allow-list.\n * Unspecified passwordless registration defaults to residentKey required\n * and credProps requested (SimpleWebAuthn passkeys). Operator overrides win.\n */\n\nexport type AthenaPasskeyUserVerification =\n\t| \"discouraged\"\n\t| \"preferred\"\n\t| \"required\";\n\nexport type AthenaPasskeyResidentKey = \"discouraged\" | \"preferred\" | \"required\";\n\nexport type AthenaPasskeyAuthenticatorAttachment = \"cross-platform\" | \"platform\";\n\nexport interface AthenaPasskeyRegistrationExtensions {\n\tcredProps?: boolean;\n}\n\n/** Intentionally empty until Athena defines an authentication-extension contract. */\nexport type AthenaPasskeyAuthenticationExtensions = Record<string, never>;\n\nexport interface AthenaPasskeyRegistrationPolicy {\n\tauthenticatorAttachment: AthenaPasskeyAuthenticatorAttachment | null;\n\textensions: AthenaPasskeyRegistrationExtensions;\n\tresidentKey: AthenaPasskeyResidentKey | null;\n\tuserVerification: AthenaPasskeyUserVerification | null;\n}\n\nexport interface AthenaPasskeyAuthenticationPolicy {\n\textensions: AthenaPasskeyAuthenticationExtensions;\n\tuserVerification: AthenaPasskeyUserVerification | null;\n}\n\nexport interface AthenaPasskeyAuthenticatorSelection {\n\tauthenticatorAttachment?: AthenaPasskeyAuthenticatorAttachment;\n\trequireResidentKey?: boolean;\n\tresidentKey?: AthenaPasskeyResidentKey;\n\tuserVerification?: AthenaPasskeyUserVerification;\n}\n\nconst USER_VERIFICATION = new Set<AthenaPasskeyUserVerification>([\n\t\"discouraged\",\n\t\"preferred\",\n\t\"required\",\n]);\nconst RESIDENT_KEY = new Set<AthenaPasskeyResidentKey>([\n\t\"discouraged\",\n\t\"preferred\",\n\t\"required\",\n]);\nconst ATTACHMENT = new Set<AthenaPasskeyAuthenticatorAttachment>([\n\t\"cross-platform\",\n\t\"platform\",\n]);\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction pickEnum<T extends string>(\n\tvalue: unknown,\n\tallowed: ReadonlySet<T>,\n): T | null {\n\treturn typeof value === \"string\" && allowed.has(value as T)\n\t\t? (value as T)\n\t\t: null;\n}\n\nexport function normalizePasskeyRegistrationPolicy(\n\traw: unknown,\n): AthenaPasskeyRegistrationPolicy {\n\tconst record = asRecord(raw);\n\tconst extensionsRaw = asRecord(record?.extensions);\n\treturn {\n\t\tauthenticatorAttachment: pickEnum(record?.authenticatorAttachment, ATTACHMENT),\n\t\textensions: {\n\t\t\t...(extensionsRaw?.credProps === true ? { credProps: true } : {}),\n\t\t\t...(extensionsRaw?.credProps === false ? { credProps: false } : {}),\n\t\t},\n\t\tresidentKey: pickEnum(record?.residentKey, RESIDENT_KEY),\n\t\tuserVerification: pickEnum(record?.userVerification, USER_VERIFICATION),\n\t};\n}\n\nexport function normalizePasskeyAuthenticationPolicy(\n\traw: unknown,\n): AthenaPasskeyAuthenticationPolicy {\n\tconst record = asRecord(raw);\n\treturn {\n\t\textensions: {},\n\t\tuserVerification: pickEnum(record?.userVerification, USER_VERIFICATION),\n\t};\n}\n\nexport function requireUserVerificationFromPolicy(\n\tuserVerification: AthenaPasskeyUserVerification | null,\n): boolean {\n\treturn userVerification === \"required\";\n}\n\nexport function registrationAuthenticatorSelection(input: {\n\tattachmentOverride?: AthenaPasskeyAuthenticatorAttachment | null;\n\tpolicy: AthenaPasskeyRegistrationPolicy;\n}): AthenaPasskeyAuthenticatorSelection | undefined {\n\tconst attachment =\n\t\tinput.attachmentOverride ?? input.policy.authenticatorAttachment;\n\tconst selection: AthenaPasskeyAuthenticatorSelection = {};\n\tif (attachment) {\n\t\tselection.authenticatorAttachment = attachment;\n\t}\n\tconst residentKey = input.policy.residentKey ?? \"required\";\n\tselection.residentKey = residentKey;\n\tselection.requireResidentKey = residentKey === \"required\";\n\tif (input.policy.userVerification) {\n\t\tselection.userVerification = input.policy.userVerification;\n\t}\n\treturn selection;\n}\n\nexport function supportedRegistrationExtensions(\n\tpolicy: AthenaPasskeyRegistrationPolicy,\n): AthenaPasskeyRegistrationExtensions | undefined {\n\tif (policy.extensions.credProps === false) {\n\t\treturn undefined;\n\t}\n\treturn { credProps: true };\n}\n\n/**\n * Persist only Athena-normalized extension meaning. Never store raw\n * `clientExtensionResults`.\n */\nexport function normalizeCredPropsResidentKey(\n\tclientExtensionResults: unknown,\n): boolean | null {\n\tconst record = asRecord(clientExtensionResults);\n\tconst credProps = asRecord(record?.credProps);\n\tif (typeof credProps?.rk === \"boolean\") {\n\t\treturn credProps.rk;\n\t}\n\treturn null;\n}\n","/**\n * Normalized Athena Auth execution + HTTP routing.\n *\n * Execution (`disabled` | `local` | `remote`) is distinct from HTTP routing\n * (`same-origin` | `direct` | `custom`). `auth: false` is disabled. Legacy\n * object configs without `mode` normalize to `remote`.\n */\n\nimport {\n  type AthenaAppIdentity,\n  type AthenaAppIdentityInput,\n  resolveAthenaAppIdentity,\n} from \"./app-identity.ts\";\nimport { normalizeAuthBridgeDestinationOrigin } from \"./bridge/code.ts\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { ATHENA_AUTH_DEFAULT_BASE_PATH } from \"./contract/index.ts\";\nimport type { AthenaAuthHooks } from \"./hooks/types.ts\";\nimport type {\n  AthenaAuthSocialOptions,\n  AthenaAuthSocialProviderOptions,\n  NormalizedSocialAuthConfig,\n} from \"./social/server/social-config.ts\";\nimport type { AthenaAuthObservabilityConfig } from \"./observability/types.ts\";\nimport { normalizeAthenaAuthObservability } from \"./observability/config.ts\";\nimport type { NormalizedAthenaAuthObservability } from \"./observability/types.ts\";\n\nexport type {\n  AthenaAppIdentity,\n  AthenaAppIdentityInput,\n} from \"./app-identity.ts\";\nexport { resolveAthenaAppIdentity } from \"./app-identity.ts\";\nimport {\n  type AthenaPasskeyAuthenticationPolicy,\n  type AthenaPasskeyRegistrationPolicy,\n  normalizePasskeyAuthenticationPolicy,\n  normalizePasskeyRegistrationPolicy,\n} from \"./passkey/policy.ts\";\nexport type {\n  AthenaAuthSocialOptions,\n  AthenaAuthSocialProviderOptions,\n  NormalizedSocialAuthConfig,\n} from \"./social/server/social-config.ts\";\nexport type {\n  AthenaPasskeyAuthenticatorAttachment,\n  AthenaPasskeyAuthenticationExtensions,\n  AthenaPasskeyAuthenticationPolicy,\n  AthenaPasskeyRegistrationExtensions,\n  AthenaPasskeyRegistrationPolicy,\n  AthenaPasskeyResidentKey,\n  AthenaPasskeyUserVerification,\n} from \"./passkey/policy.ts\";\n\nexport type AthenaPasskeyOnboardingResolution =\n  | { create: { email: string; name?: string } }\n  | { existingUserId: string };\n\n/** Ceremony fields forwarded by PasskeyButton / generate-register-options. */\nexport interface AthenaPasskeyCeremonyContext {\n  email?: string;\n  name?: string;\n}\n\nexport interface AthenaPasskeyOnboardingOptions {\n  createSession?: boolean;\n  enabled?: boolean;\n  resolveUser?: (\n    context: AthenaPasskeyCeremonyContext,\n  ) =>\n    | AthenaPasskeyOnboardingResolution\n    | Promise<AthenaPasskeyOnboardingResolution>;\n}\n\n/**\n * Default passkey-first onboarding map (T-ONB-01/02).\n * Apps omit `resolveUser` when `onboarding: true`.\n */\nexport function resolveAthenaPasskeyOnboardingUser(\n  context: AthenaPasskeyCeremonyContext | unknown,\n): AthenaPasskeyOnboardingResolution {\n  const record = asRecord(context);\n  const email = asString(record?.email);\n  if (!email) {\n    throw new Error(\"email is required to complete passkey onboarding\");\n  }\n  const name = asString(record?.name);\n  return name ? { create: { email, name } } : { create: { email } };\n}\n\nexport type AthenaAuthExecutionMode = \"disabled\" | \"local\" | \"remote\";\nexport type AthenaAuthHttpRouting = \"same-origin\" | \"direct\" | \"custom\";\n\nexport interface AthenaAuthEmailAndPasswordOptions {\n  autoSignIn?: boolean;\n  enabled?: boolean;\n  maxPasswordLength?: number;\n  minPasswordLength?: number;\n  requireEmailVerification?: boolean;\n}\n\nexport interface AthenaAuthSessionOptions {\n  cookieName?: string;\n  disableSessionRefresh?: boolean;\n  expiresInSeconds?: number;\n  updateAgeSeconds?: number;\n}\n\nexport interface AthenaAuthSecurityOptions {\n  bodyLimitBytes?: number;\n  cookieSecure?: boolean | \"auto\";\n  trustedOrigins?: string[];\n  trustedProxy?: boolean;\n}\n\nexport interface AthenaAuthBridgeOptions {\n  allowedOrigins?: string[];\n  codeTtlSeconds?: number;\n  enabled?: boolean;\n}\n\nexport interface NormalizedAthenaAuthBridgeConfig {\n  allowedOrigins: string[];\n  codeTtlSeconds: number;\n  enabled: boolean;\n}\n\nexport interface AthenaAuthPasskeyOptions {\n  authentication?: {\n    extensions?: Record<string, never>;\n    userVerification?: \"discouraged\" | \"preferred\" | \"required\";\n  };\n  challengeTtlSeconds?: number;\n  enabled?: boolean;\n  onboarding?: boolean | AthenaPasskeyOnboardingOptions;\n  origins?: readonly string[];\n  relatedOrigins?: readonly string[];\n  registration?: {\n    authenticatorAttachment?: \"cross-platform\" | \"platform\";\n    extensions?: { credProps?: boolean };\n    residentKey?: \"discouraged\" | \"preferred\" | \"required\";\n    userVerification?: \"discouraged\" | \"preferred\" | \"required\";\n  };\n  rpId?: string;\n  rpName?: string;\n}\n\nexport interface AthenaAuthLocalConfig {\n  /**\n   * Explicit opt-in only. `createClient()` never auto-migrates production\n   * Auth schema unless this is `true`.\n   */\n  autoMigrate?: boolean;\n  basePath?: string;\n  bridge?: AthenaAuthBridgeOptions;\n  emailAndPassword?: AthenaAuthEmailAndPasswordOptions;\n  mode: \"local\";\n  oauth?: Record<string, AthenaAuthSocialProviderOptions>;\n  organizations?: { enabled?: boolean };\n  passkey?: AthenaAuthPasskeyOptions;\n  secret?: string;\n  security?: AthenaAuthSecurityOptions;\n  session?: AthenaAuthSessionOptions;\n  social?: AthenaAuthSocialOptions;\n  socialProviders?: Record<string, AthenaAuthSocialProviderOptions>;\n  /**\n   * Embedded-only domain lifecycle hooks. Discarded by\n   * `normalizeAthenaAuthConfig`; pass through `athenaAuthConfig()` into\n   * `createAthenaAuthRuntime`.\n   */\n  hooks?: AthenaAuthHooks;\n  /**\n   * Embedded-only audit/trace tables. Discarded by\n   * `normalizeAthenaAuthConfig`; pass through `athenaAuthConfig()` into\n   * `createAthenaAuthRuntime`.\n   */\n  observability?: AthenaAuthObservabilityConfig;\n}\n\nexport interface AthenaAuthRemoteConfig {\n  credentials?: RequestCredentials;\n  mode?: \"remote\";\n  oauth?: Record<string, AthenaAuthSocialProviderOptions>;\n  routing?: AthenaAuthHttpRouting;\n  secret?: string;\n  social?: AthenaAuthSocialOptions;\n  socialProviders?: Record<string, AthenaAuthSocialProviderOptions>;\n  upstreamUrl?: string | null;\n  url?: string | null;\n}\n\nexport type AthenaAuthPublicConfig =\n  | AthenaAuthLocalConfig\n  | AthenaAuthRemoteConfig\n  | (Omit<AthenaAuthRemoteConfig, \"mode\"> & { mode?: undefined });\n\nexport type AthenaAuthInput =\n  | false\n  | AthenaAuthPublicConfig\n  | Record<string, unknown>\n  | null\n  | undefined;\n\nexport interface NormalizedAthenaAuthConfig {\n  appIdentity: AthenaAppIdentity | null;\n  autoMigrate: boolean;\n  basePath: string;\n  bridge: NormalizedAthenaAuthBridgeConfig;\n  emailAndPassword: Required<AthenaAuthEmailAndPasswordOptions>;\n  execution: AthenaAuthExecutionMode;\n  organizationsEnabled: boolean;\n  passkey: {\n    authentication: AthenaPasskeyAuthenticationPolicy;\n    challengeTtlSeconds: number;\n    enabled: boolean;\n    onboardingCreateSession: boolean;\n    onboardingEnabled: boolean;\n    origins: string[];\n    registration: AthenaPasskeyRegistrationPolicy;\n    relatedOrigins: string[];\n    rpId: string | null;\n    rpName: string | null;\n  };\n  /**\n   * True when the operator supplied a `passkey` key (including `{}`).\n   * Snapshot factory is the RP ID authority — this flag only gates production init.\n   */\n  passkeyConfigured: boolean;\n  routing?: AthenaAuthHttpRouting;\n  social: NormalizedSocialAuthConfig;\n  secret?: string;\n  security: {\n    bodyLimitBytes: number;\n    cookieSecure: boolean | \"auto\";\n    trustedOrigins: string[];\n    trustedProxy: boolean;\n  };\n  session: Required<AthenaAuthSessionOptions>;\n  upstreamUrl?: string;\n  url?: string;\n  observability: NormalizedAthenaAuthObservability;\n  warnings: string[];\n}\n\nconst DEFAULT_EMAIL_PASSWORD: Required<AthenaAuthEmailAndPasswordOptions> = {\n  autoSignIn: true,\n  enabled: true,\n  maxPasswordLength: 128,\n  minPasswordLength: 8,\n  requireEmailVerification: false,\n};\n\nconst DEFAULT_SESSION: Required<AthenaAuthSessionOptions> = {\n  cookieName: \"athena-auth.session-token\",\n  disableSessionRefresh: false,\n  expiresInSeconds: 7 * 24 * 60 * 60,\n  updateAgeSeconds: 24 * 60 * 60,\n};\n\nconst DEFAULT_BRIDGE: NormalizedAthenaAuthBridgeConfig = {\n  allowedOrigins: [],\n  codeTtlSeconds: 30,\n  enabled: false,\n};\n\nconst BRIDGE_TTL_MIN = 5;\nconst BRIDGE_TTL_MAX = 300;\n\nconst DEFAULT_PASSKEY: NormalizedAthenaAuthConfig[\"passkey\"] = {\n  authentication: normalizePasskeyAuthenticationPolicy(undefined),\n  challengeTtlSeconds: 60,\n  enabled: false,\n  onboardingCreateSession: true,\n  onboardingEnabled: false,\n  origins: [],\n  registration: normalizePasskeyRegistrationPolicy(undefined),\n  relatedOrigins: [],\n  rpId: null,\n  rpName: null,\n};\n\nconst PASSKEY_CHALLENGE_TTL_MIN = 1;\nconst PASSKEY_CHALLENGE_TTL_MAX = 600;\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return undefined;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction asString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction asStringList(value: unknown): string[] {\n  return Array.isArray(value)\n    ? value.filter((entry): entry is string => typeof entry === \"string\")\n    : [];\n}\n\nfunction originFromConfiguredUrl(value: string): string | undefined {\n  try {\n    const url = new URL(value.trim());\n    if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n      return undefined;\n    }\n    return url.origin;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction mergeTrustedOrigins(\n  explicit: readonly string[],\n  passkeyOrigins: readonly string[],\n  envOrigins: readonly string[],\n): string[] {\n  const unique = new Set<string>();\n  for (const entry of [...explicit, ...passkeyOrigins, ...envOrigins]) {\n    const trimmed = entry.trim().replace(/\\/+$/, \"\");\n    if (!trimmed) {\n      continue;\n    }\n    unique.add(originFromConfiguredUrl(trimmed) ?? trimmed);\n  }\n  return [...unique];\n}\n\nfunction clampBridgeCodeTtl(value: unknown): number {\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return DEFAULT_BRIDGE.codeTtlSeconds;\n  }\n  const truncated = Math.trunc(value);\n  if (truncated < BRIDGE_TTL_MIN) {\n    return BRIDGE_TTL_MIN;\n  }\n  if (truncated > BRIDGE_TTL_MAX) {\n    return BRIDGE_TTL_MAX;\n  }\n  return truncated;\n}\n\nfunction normalizeAllowedBridgeOrigins(value: unknown): string[] {\n  const unique = new Set<string>();\n  for (const entry of asStringList(value)) {\n    try {\n      unique.add(normalizeAuthBridgeDestinationOrigin(entry));\n    } catch {\n      // Fail closed: drop unparseable origins instead of enabling them.\n    }\n  }\n  return [...unique];\n}\n\nfunction normalizeBridgeConfig(\n  rawBridge: unknown\n): NormalizedAthenaAuthBridgeConfig {\n  const record = asRecord(rawBridge);\n  if (!record) {\n    return { ...DEFAULT_BRIDGE };\n  }\n  const allowedOrigins = normalizeAllowedBridgeOrigins(record.allowedOrigins);\n  const explicitEnabled = record.enabled;\n  const enabled =\n    explicitEnabled === false\n      ? false\n      : explicitEnabled === true || allowedOrigins.length > 0;\n  return {\n    allowedOrigins,\n    codeTtlSeconds: clampBridgeCodeTtl(record.codeTtlSeconds),\n    enabled,\n  };\n}\n\nfunction clampPasskeyChallengeTtl(value: unknown): number {\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return DEFAULT_PASSKEY.challengeTtlSeconds;\n  }\n  const truncated = Math.trunc(value);\n  if (truncated < PASSKEY_CHALLENGE_TTL_MIN) {\n    return PASSKEY_CHALLENGE_TTL_MIN;\n  }\n  if (truncated > PASSKEY_CHALLENGE_TTL_MAX) {\n    return PASSKEY_CHALLENGE_TTL_MAX;\n  }\n  return truncated;\n}\n\nfunction normalizeOnboardingFlag(raw: unknown): {\n  createSession: boolean;\n  enabled: boolean;\n} {\n  if (raw === true) {\n    return { createSession: true, enabled: true };\n  }\n  const onboarding = asRecord(raw);\n  return {\n    createSession: onboarding?.createSession !== false,\n    enabled: onboarding?.enabled === true,\n  };\n}\n\nfunction assertSocialConfigObject(key: string, value: unknown): void {\n  if (value === undefined || value === null) {\n    return;\n  }\n  if (typeof value !== \"object\" || Array.isArray(value)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `auth.${key} must be an object provider map`,\n      \"auth\",\n    );\n  }\n}\n\nfunction extractSocialProviderMap(value: unknown): unknown {\n  const record = asRecord(value);\n  if (!record) {\n    return undefined;\n  }\n  const nested = asRecord(record.providers);\n  return nested ?? record;\n}\n\nfunction normalizeSocialProviderBag(\n  value: unknown,\n): AthenaAuthSocialProviderOptions | undefined {\n  const record = asRecord(value);\n  if (!record) {\n    return undefined;\n  }\n  return {\n    ...record,\n    clientId: asString(record.clientId) ?? \"\",\n    clientSecret: asString(record[\"clientSecret\"]) ?? \"\",\n  };\n}\n\nfunction normalizeSocialFromRaw(\n  raw: Record<string, unknown>,\n): NormalizedSocialAuthConfig {\n  const source =\n    extractSocialProviderMap(raw.social) ?? raw.oauth ?? raw.socialProviders;\n  const record = asRecord(source);\n  if (!record) {\n    return { providers: {} };\n  }\n  const providers: Record<string, AthenaAuthSocialProviderOptions> = {};\n  for (const [id, bag] of Object.entries(record)) {\n    const normalized = normalizeSocialProviderBag(bag);\n    if (!normalized) {\n      continue;\n    }\n    providers[id] = normalized;\n  }\n  return { providers };\n}\n\nfunction normalizePasskeyConfig(\n  rawPasskey: unknown\n): NormalizedAthenaAuthConfig[\"passkey\"] {\n  if (rawPasskey === true) {\n    return {\n      ...DEFAULT_PASSKEY,\n      enabled: true,\n      origins: [],\n      relatedOrigins: [],\n    };\n  }\n  const record = asRecord(rawPasskey);\n  if (!record) {\n    return { ...DEFAULT_PASSKEY, origins: [], relatedOrigins: [] };\n  }\n  const onboarding = normalizeOnboardingFlag(record.onboarding);\n  const impliedEnabled = onboarding.enabled || record.enabled === true;\n  return {\n    authentication: normalizePasskeyAuthenticationPolicy(record.authentication),\n    challengeTtlSeconds: clampPasskeyChallengeTtl(record.challengeTtlSeconds),\n    enabled: impliedEnabled,\n    onboardingCreateSession: onboarding.createSession,\n    onboardingEnabled: onboarding.enabled,\n    origins: mergeTrustedOrigins(asStringList(record.origins), [], []),\n    registration: normalizePasskeyRegistrationPolicy(record.registration),\n    relatedOrigins: mergeTrustedOrigins(asStringList(record.relatedOrigins), [], []),\n    rpId: asString(record.rpId) ?? null,\n    rpName: asString(record.rpName) ?? null,\n  };\n}\n\n/** `createClient({ auth: false })` — Athena DB without Athena Auth. */\nexport function isAthenaAuthDisabled(input: unknown): input is false {\n  return input === false;\n}\n\n/**\n * Object auth config only. `false` / non-objects normalize to `undefined`.\n */\nexport function athenaAuthConfig<T extends object>(\n  input: false | T | null | undefined\n): T | undefined {\n  if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n    return undefined;\n  }\n  return input;\n}\n\nfunction disabledAuthConfig(): NormalizedAthenaAuthConfig {\n  return {\n    appIdentity: null,\n    autoMigrate: false,\n    basePath: ATHENA_AUTH_DEFAULT_BASE_PATH,\n    bridge: { ...DEFAULT_BRIDGE },\n    emailAndPassword: { ...DEFAULT_EMAIL_PASSWORD, enabled: false },\n    execution: \"disabled\",\n    organizationsEnabled: false,\n    passkey: { ...DEFAULT_PASSKEY, origins: [], relatedOrigins: [] },\n    passkeyConfigured: false,\n    social: { providers: {} },\n    security: {\n      bodyLimitBytes: 1_048_576,\n      cookieSecure: \"auto\",\n      trustedOrigins: [],\n      trustedProxy: false,\n    },\n    observability: normalizeAthenaAuthObservability(),\n    session: { ...DEFAULT_SESSION },\n    warnings: [],\n  };\n}\n\n/**\n * Collapse public / legacy auth config into one internal representation.\n * Call this once at the SDK boundary — do not re-branch on raw `auth.mode`.\n *\n * Precedence: `auth === false` → disabled. Explicit `mode` wins next.\n */\nexport interface NormalizeAthenaAuthConfigOptions {\n  app?: AthenaAppIdentityInput;\n  env?: Record<string, string | undefined>;\n  identity?: AthenaAppIdentity | null;\n}\n\nexport function normalizeAthenaAuthConfig(\n  input?: unknown,\n  options: NormalizeAthenaAuthConfigOptions = {},\n): NormalizedAthenaAuthConfig {\n  if (isAthenaAuthDisabled(input)) {\n    return disabledAuthConfig();\n  }\n  const raw = asRecord(input) ?? {};\n  const warnings: string[] = [];\n  const explicitMode = asString(raw.mode);\n  const execution: AthenaAuthExecutionMode =\n    explicitMode === \"local\" ? \"local\" : \"remote\";\n\n  if (\n    execution === \"remote\" &&\n    explicitMode === undefined &&\n    (raw.routing !== undefined || raw.url !== undefined || raw.upstreamUrl !== undefined)\n  ) {\n    warnings.push(\n      'Athena auth config without mode is treated as mode: \"remote\". ' +\n        'Set auth.mode explicitly (\"local\" | \"remote\") when you can.'\n    );\n  }\n\n  if (execution === \"local\" && (raw.url || raw.upstreamUrl || raw.routing)) {\n    warnings.push(\n      'auth.mode \"local\" ignores remote url / upstreamUrl / routing. ' +\n        \"Local requests terminate inside the application process.\"\n    );\n  }\n\n  const emailAndPassword = {\n    ...DEFAULT_EMAIL_PASSWORD,\n    ...(asRecord(raw.emailAndPassword) as AthenaAuthEmailAndPasswordOptions | undefined),\n  };\n  const session = {\n    ...DEFAULT_SESSION,\n    ...(asRecord(raw.session) as AthenaAuthSessionOptions | undefined),\n  };\n  const securityRaw = asRecord(raw.security) ?? {};\n  const organizations = asRecord(raw.organizations);\n  const passkeyConfigured = Object.hasOwn(raw, \"passkey\");\n  const passkey = normalizePasskeyConfig(raw.passkey);\n  assertSocialConfigObject(\"social\", raw.social);\n  assertSocialConfigObject(\"oauth\", raw.oauth);\n  assertSocialConfigObject(\"socialProviders\", raw.socialProviders);\n  const social = normalizeSocialFromRaw(raw);\n  const envForIdentity = options.env ?? process.env;\n  const appIdentity =\n    options.identity !== undefined\n      ? options.identity\n      : resolveAthenaAppIdentity({\n          app: options.app,\n          env: envForIdentity,\n          required: false,\n        });\n  const identityOrigins = appIdentity ? [appIdentity.origin] : [];\n  const explicitTrustedOrigins = Array.isArray(securityRaw.trustedOrigins)\n    ? securityRaw.trustedOrigins.filter(\n        (value): value is string => typeof value === \"string\",\n      )\n    : [];\n\n  return {\n    appIdentity,\n    autoMigrate: raw.autoMigrate === true,\n    basePath: asString(raw.basePath) ?? ATHENA_AUTH_DEFAULT_BASE_PATH,\n    bridge: normalizeBridgeConfig(raw.bridge),\n    emailAndPassword: {\n      autoSignIn: emailAndPassword.autoSignIn !== false,\n      enabled: emailAndPassword.enabled !== false,\n      maxPasswordLength: emailAndPassword.maxPasswordLength ?? 128,\n      minPasswordLength: emailAndPassword.minPasswordLength ?? 8,\n      requireEmailVerification:\n        emailAndPassword.requireEmailVerification === true,\n    },\n    execution,\n    organizationsEnabled: organizations?.enabled !== false,\n    passkey,\n    passkeyConfigured,\n    social,\n    routing:\n      execution === \"local\"\n        ? \"same-origin\"\n        : (asString(raw.routing) as AthenaAuthHttpRouting | undefined),\n    secret: asString(raw.secret),\n    security: {\n      bodyLimitBytes:\n        typeof securityRaw.bodyLimitBytes === \"number\"\n          ? securityRaw.bodyLimitBytes\n          : 1_048_576,\n      cookieSecure:\n        securityRaw.cookieSecure === false ||\n        securityRaw.cookieSecure === true ||\n        securityRaw.cookieSecure === \"auto\"\n          ? securityRaw.cookieSecure\n          : \"auto\",\n      trustedOrigins: mergeTrustedOrigins(\n        explicitTrustedOrigins,\n        passkey.origins,\n        identityOrigins,\n      ),\n      trustedProxy: securityRaw.trustedProxy === true,\n    },\n    session: {\n      cookieName: session.cookieName || DEFAULT_SESSION.cookieName,\n      disableSessionRefresh: session.disableSessionRefresh === true,\n      expiresInSeconds:\n        session.expiresInSeconds ?? DEFAULT_SESSION.expiresInSeconds,\n      updateAgeSeconds:\n        session.updateAgeSeconds ?? DEFAULT_SESSION.updateAgeSeconds,\n    },\n    observability: normalizeAthenaAuthObservability(\n      asRecord(raw.observability) as AthenaAuthObservabilityConfig | undefined,\n    ),\n    upstreamUrl: asString(raw.upstreamUrl),\n    url: asString(raw.url),\n    warnings,\n  };\n}\n\nexport function isLocalAthenaAuthConfig(input?: unknown): boolean {\n  return normalizeAthenaAuthConfig(input).execution === \"local\";\n}\n\nexport function isDisabledAthenaAuthConfig(input?: unknown): boolean {\n  return normalizeAthenaAuthConfig(input).execution === \"disabled\";\n}\n","/**\n * Internal Athena runtime plan.\n *\n * One pipeline owns environment + bindings + explicit intent + defaults.\n * `createClient` materializes from this plan; the snapshot is not a public\n * config surface.\n */\n\nimport { athenaAuthConfig } from \"../auth/config.ts\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\n\nfunction normalizeOptional(value: string | null | undefined): string | undefined {\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\ninterface ResolveAuthInput {\n  mode?: string;\n  url?: string | null;\n}\n\nexport interface ResolveConfigInput {\n  auth?: false | ResolveAuthInput | null;\n  databaseUrl?: string | null;\n  db?: { d1?: unknown; pgUri?: string | null; pool?: unknown };\n  env?: Record<string, string | undefined>;\n  mode?: string | null;\n  storage?: {\n    bucket?: string | null;\n    prefix?: string | null;\n    provider?: string | null;\n    r2?: unknown;\n    root?: string | null;\n    s3?: unknown;\n    url?: string | null;\n  };\n  url?: string | null;\n}\n\nexport type AthenaRuntimeEnvironment =\n  | \"node\"\n  | \"browser\"\n  | \"react-native\"\n  | \"cloudflare\";\n\nexport type AthenaDbTransport = \"postgres\" | \"gateway\" | \"d1\";\nexport type AthenaAuthRuntime = \"embedded\" | \"remote\" | \"disabled\";\nexport type AthenaStorageTransport = \"http\" | \"r2\" | \"local\" | \"s3\" | \"none\";\n\nexport interface ResolvedAthenaRuntime {\n  auth: { runtime: AthenaAuthRuntime };\n  db: { transport: AthenaDbTransport };\n  runtime: { environment: AthenaRuntimeEnvironment };\n  storage: { transport: AthenaStorageTransport };\n}\n\n/** Redacted public snapshot. Not a config surface. */\nexport interface AthenaRuntimeDiagnostics {\n  auth: AthenaAuthRuntime;\n  database: \"postgres-direct\" | \"gateway\" | \"d1\";\n  runtime: AthenaRuntimeEnvironment;\n  storage: AthenaStorageTransport;\n}\n\nexport function toAthenaRuntimeDiagnostics(\n  plan: ResolvedAthenaRuntime\n): AthenaRuntimeDiagnostics {\n  return {\n    auth: plan.auth.runtime,\n    database: plan.db.transport === \"postgres\" ? \"postgres-direct\" : plan.db.transport,\n    runtime: plan.runtime.environment,\n    storage: plan.storage.transport,\n  };\n}\n\nexport interface ResolveAthenaRuntimeOptions {\n  environment?: AthenaRuntimeEnvironment;\n  trustedNode?: boolean;\n}\n\nfunction hasBinding(value: unknown): boolean {\n  return value !== undefined && value !== null;\n}\n\n/** Same URI inputs as folding: nested pgUri, then databaseUrl, then DATABASE_URL. */\nexport function resolveDatabaseUri(\n  config: ResolveConfigInput\n): string | undefined {\n  return (\n    normalizeOptional(config.db?.pgUri) ??\n    normalizeOptional(config.databaseUrl) ??\n    normalizeOptional(config.env?.DATABASE_URL)\n  );\n}\n\nfunction isExplicitGatewayMode(\n  mode: unknown,\n  env?: Record<string, string | undefined>\n): boolean {\n  const raw =\n    (typeof mode === \"string\" ? mode : undefined) ?? env?.ATHENA_EXECUTION_MODE;\n  const key = raw?.trim().toLowerCase();\n  return (\n    key === \"gateway\" ||\n    key === \"http\" ||\n    key === \"remote\" ||\n    key === \"server\"\n  );\n}\n\nexport function detectAthenaRuntimeEnvironment(): AthenaRuntimeEnvironment {\n  const nav = (globalThis as { navigator?: { product?: string; userAgent?: string } })\n    .navigator;\n  if (nav?.product === \"ReactNative\") {\n    return \"react-native\";\n  }\n  if (typeof nav?.userAgent === \"string\" && /Cloudflare-Workers/i.test(nav.userAgent)) {\n    return \"cloudflare\";\n  }\n  if (typeof (globalThis as { window?: unknown }).window !== \"undefined\") {\n    return \"browser\";\n  }\n  return \"node\";\n}\n\n/**\n * Trusted Node/server only: omitted auth.mode + database URI (`db.pgUri`,\n * `databaseUrl`, or `env.DATABASE_URL`) + no auth.url means embedded Auth.\n * Explicit mode and auth.url always win. `auth: false` stays disabled.\n */\nexport function inferEmbeddedAuthMode<T extends ResolveConfigInput>(\n  config: T\n): T {\n  if (config.auth === false) {\n    return { ...config, auth: false };\n  }\n  const authObject = athenaAuthConfig(\n    config.auth as false | Record<string, unknown> | null | undefined\n  );\n  const explicit = authObject?.mode;\n  if (explicit === \"local\" || explicit === \"remote\") {\n    return config;\n  }\n  if (normalizeOptional(authObject?.url as string | null | undefined)) {\n    return config;\n  }\n  if (!resolveDatabaseUri(config)) {\n    return config;\n  }\n  return {\n    ...config,\n    auth: {\n      ...authObject,\n      mode: \"local\",\n    },\n  };\n}\n\nexport function resolveAthenaRuntime(\n  config: ResolveConfigInput,\n  options: ResolveAthenaRuntimeOptions = {}\n): ResolvedAthenaRuntime {\n  const environment =\n    options.environment ?? detectAthenaRuntimeEnvironment();\n  const trustedNode = options.trustedNode ?? environment === \"node\";\n  const pgUri = resolveDatabaseUri(config);\n  const hasD1 = hasBinding(config.db?.d1);\n  const hasR2 = hasBinding(config.storage?.r2);\n  const hasStorageUrl = Boolean(normalizeOptional(config.storage?.url));\n  const gatewayForced = isExplicitGatewayMode(config.mode, config.env);\n\n  let dbTransport: AthenaDbTransport = \"gateway\";\n  if (hasD1 && !gatewayForced) {\n    dbTransport = \"d1\";\n  } else if (pgUri && trustedNode && !gatewayForced) {\n    dbTransport = \"postgres\";\n  }\n\n  let authRuntime: AthenaAuthRuntime = \"remote\";\n  if (config.auth === false) {\n    authRuntime = \"disabled\";\n  } else {\n    const authObject = athenaAuthConfig(\n      config.auth as false | Record<string, unknown> | null | undefined\n    );\n    const explicit = authObject?.mode;\n    const authUrl =\n      typeof authObject?.url === \"string\" ? authObject.url : undefined;\n    if (explicit === \"local\") {\n      if (!trustedNode) {\n        throw new AthenaConfigurationError(\n          \"ATHENA_AUTH_LOCAL_NODE_REQUIRED\",\n          'auth.mode \"local\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module, or use auth.mode \"remote\".',\n          \"auth\"\n        );\n      }\n      authRuntime = \"embedded\";\n    } else if (explicit === \"remote\" || normalizeOptional(authUrl)) {\n      authRuntime = \"remote\";\n    } else if (pgUri && trustedNode) {\n      authRuntime = \"embedded\";\n    }\n  }\n\n  const wantsLocalStorage = config.storage?.provider === \"local\";\n  if (wantsLocalStorage && !trustedNode) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_STORAGE_LOCAL_NODE_REQUIRED\",\n      'storage.provider \"local\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module.',\n      \"storage\"\n    );\n  }\n  const wantsS3Storage = config.storage?.provider === \"s3\";\n  if (wantsS3Storage && !trustedNode) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_STORAGE_S3_NODE_REQUIRED\",\n      'storage.provider \"s3\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module.',\n      \"storage\"\n    );\n  }\n\n  let storageTransport: AthenaStorageTransport = \"none\";\n  if (wantsLocalStorage) {\n    storageTransport = \"local\";\n  } else if (hasR2) {\n    storageTransport = \"r2\";\n  } else if (wantsS3Storage) {\n    storageTransport = \"s3\";\n  } else if (hasStorageUrl) {\n    storageTransport = \"http\";\n  }\n\n  return {\n    auth: { runtime: authRuntime },\n    db: { transport: dbTransport },\n    runtime: { environment },\n    storage: { transport: storageTransport },\n  };\n}\n","/* 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 {\n\tATHENA_BILLING_CREDENTIAL_UNAVAILABLE,\n\tAthenaBillingCredentialError,\n} from \"../errors.ts\";\nimport type { BillingProviderName } from \"../types.ts\";\nimport type { BillingEnvironmentName } from \"./environment.ts\";\nimport { billingEnvironmentName } from \"./environment.ts\";\n\nexport type BillingCredentialEnvironment = BillingEnvironmentName;\n\nexport type BillingCredentialClass = \"api_key\" | \"access_token\";\n\nexport type BillingCredentialKind =\n\t| \"api_key\"\n\t| \"secret_key\"\n\t| \"restricted_key\"\n\t| \"advanced_access_token\"\n\t| \"organization_access_token\"\n\t| \"oauth_access_token\";\n\nconst REDACTED = \"[REDACTED]\";\n\nexport class BillingSecret {\n\treadonly #value: string;\n\n\tconstructor(value: string) {\n\t\tthis.#value = value;\n\t}\n\n\trevealForProviderRuntime(): string {\n\t\treturn this.#value;\n\t}\n\n\ttoJSON(): string {\n\t\treturn REDACTED;\n\t}\n\n\ttoString(): string {\n\t\treturn REDACTED;\n\t}\n\n\tvalueOf(): string {\n\t\treturn REDACTED;\n\t}\n\n\t[Symbol.for(\"nodejs.util.inspect.custom\")](): string {\n\t\treturn REDACTED;\n\t}\n}\n\nexport interface BillingStoredCredential {\n\treadonly kind: BillingCredentialKind;\n\treadonly secret: BillingSecret;\n}\n\nexport interface BillingEnvironmentCredentials<TCredential> {\n\treadonly test?: TCredential;\n\treadonly live?: TCredential;\n}\n\nexport interface BillingProviderBindingCredentials {\n\treadonly test?: BillingStoredCredential;\n\treadonly live?: BillingStoredCredential;\n}\n\nexport interface BillingCredentialBinding {\n\treadonly kind: \"configured\" | \"connection\";\n\treadonly provider: BillingProviderName;\n\treadonly credentials: BillingProviderBindingCredentials;\n}\n\nexport interface BillingResolvedCredential {\n\treadonly provider: BillingProviderName;\n\treadonly environment: BillingCredentialEnvironment;\n\treadonly kind: BillingCredentialKind;\n\trevealForProviderRuntime(): string;\n}\n\nexport interface BillingCredentialSelection {\n\treadonly provider: BillingProviderName;\n\treadonly environment: BillingCredentialEnvironment;\n\treadonly testMode: boolean;\n\treadonly credentialKind: BillingCredentialKind;\n\treadonly credential: BillingResolvedCredential;\n}\n\nexport type BillingCredentialEnvironmentInference = \"test\" | \"live\" | \"unknown\";\n\nexport function credentialClassForKind(\n\tkind: BillingCredentialKind,\n): BillingCredentialClass {\n\treturn kind === \"advanced_access_token\" ||\n\t\tkind === \"organization_access_token\" ||\n\t\tkind === \"oauth_access_token\"\n\t\t? \"access_token\"\n\t\t: \"api_key\";\n}\n\nexport function availableBillingCredentialEnvironments(\n\tcredentials: BillingProviderBindingCredentials,\n): BillingCredentialEnvironment[] {\n\tconst available: BillingCredentialEnvironment[] = [];\n\tif (credentials.test != null) {\n\t\tavailable.push(\"test\");\n\t}\n\tif (credentials.live != null) {\n\t\tavailable.push(\"live\");\n\t}\n\treturn available;\n}\n\nexport function resolveBillingCredential(input: {\n\tprovider: BillingProviderName;\n\ttestMode: boolean;\n\tbinding: BillingCredentialBinding;\n}): BillingCredentialSelection {\n\tconst environment = billingEnvironmentName(input.testMode);\n\tconst stored = input.binding.credentials[environment];\n\tif (stored == null) {\n\t\tconst available = availableBillingCredentialEnvironments(\n\t\t\tinput.binding.credentials,\n\t\t);\n\t\tthrow new AthenaBillingCredentialError({\n\t\t\tcode: ATHENA_BILLING_CREDENTIAL_UNAVAILABLE,\n\t\t\tprovider: input.provider,\n\t\t\tenvironment,\n\t\t\tmessage: `${formatProviderLabel(input.provider)} ${environment} billing credential is unavailable. Configured environments: ${available.length > 0 ? available.join(\", \") : \"none\"}.`,\n\t\t});\n\t}\n\tconst credential: BillingResolvedCredential = {\n\t\tprovider: input.provider,\n\t\tenvironment,\n\t\tkind: stored.kind,\n\t\trevealForProviderRuntime: () => stored.secret.revealForProviderRuntime(),\n\t};\n\treturn {\n\t\tprovider: input.provider,\n\t\tenvironment,\n\t\ttestMode: input.testMode,\n\t\tcredentialKind: stored.kind,\n\t\tcredential,\n\t};\n}\n\nfunction formatProviderLabel(provider: BillingProviderName): string {\n\tif (provider.length === 0) {\n\t\treturn \"Billing\";\n\t}\n\treturn provider.charAt(0).toUpperCase() + provider.slice(1);\n}\n","import {\n\tATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n\tAthenaBillingCredentialError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderName } from \"../../../types.ts\";\nimport type {\n\tBillingCredentialEnvironment,\n\tBillingCredentialEnvironmentInference,\n} from \"../../credentials.ts\";\n\nexport function assertCredentialSlotEnvironment(input: {\n\tprovider: BillingProviderName;\n\tenvironment: BillingCredentialEnvironment;\n\tinferred: BillingCredentialEnvironmentInference;\n}): void {\n\tif (input.inferred === \"unknown\" || input.inferred === input.environment) {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCredentialError({\n\t\tcode: ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n\t\tprovider: input.provider,\n\t\tenvironment: input.environment,\n\t\tmessage: `${formatProviderLabel(input.provider)} ${input.environment} billing credential does not match the ${input.inferred} environment encoded in the secret.`,\n\t});\n}\n\nexport type MollieCredentialPrefixClass = \"api_key\" | \"access_token\" | \"unknown\";\n\nexport function classifyMollieCredentialPrefix(\n\tsecret: string,\n): MollieCredentialPrefixClass {\n\tif (secret.startsWith(\"test_\") || secret.startsWith(\"live_\")) {\n\t\treturn \"api_key\";\n\t}\n\tif (secret.startsWith(\"access_\")) {\n\t\treturn \"access_token\";\n\t}\n\treturn \"unknown\";\n}\n\nexport function inferMollieCredentialEnvironment(\n\tsecret: string,\n): BillingCredentialEnvironmentInference {\n\tif (secret.startsWith(\"test_\")) {\n\t\treturn \"test\";\n\t}\n\tif (secret.startsWith(\"live_\")) {\n\t\treturn \"live\";\n\t}\n\treturn \"unknown\";\n}\n\nexport function inferStripeCredentialEnvironment(\n\tsecret: string,\n): BillingCredentialEnvironmentInference {\n\tif (\n\t\tsecret.includes(\"_test_\") ||\n\t\tsecret.startsWith(\"sk_test\") ||\n\t\tsecret.startsWith(\"rk_test\") ||\n\t\tsecret.startsWith(\"pk_test\")\n\t) {\n\t\treturn \"test\";\n\t}\n\tif (\n\t\tsecret.includes(\"_live_\") ||\n\t\tsecret.startsWith(\"sk_live\") ||\n\t\tsecret.startsWith(\"rk_live\") ||\n\t\tsecret.startsWith(\"pk_live\")\n\t) {\n\t\treturn \"live\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction formatProviderLabel(provider: BillingProviderName): string {\n\tif (provider.length === 0) {\n\t\treturn \"Billing\";\n\t}\n\treturn provider.charAt(0).toUpperCase() + provider.slice(1);\n}\n","import type { BillingCredentialAuthority } from \"../../authority.ts\";\nimport type { MollieBillingApiMode } from \"../../../providers/types.ts\";\n\nexport const STANDARD_MOLLIE_API_KEY_PERMISSIONS = {\n\t\"customers.read\": true,\n\t\"customers.write\": true,\n\t\"mandates.read\": true,\n\t\"mandates.write\": true,\n\t\"orders.read\": true,\n\t\"orders.write\": true,\n\t\"payment-links.read\": true,\n\t\"payment-links.write\": true,\n\t\"payments.read\": true,\n\t\"payments.write\": true,\n\t\"refunds.read\": true,\n\t\"refunds.write\": true,\n\t\"sales-invoices.read\": true,\n\t\"shipments.read\": true,\n\t\"shipments.write\": true,\n\t\"subscriptions.read\": true,\n\t\"subscriptions.write\": true,\n} as const;\n\nexport type MollieDeclaredPermissionInput = Record<\n\tstring,\n\tboolean | Record<string, boolean | undefined>\n>;\n\nexport function normalizeMollieDeclaredPermissions(\n\tinput: MollieDeclaredPermissionInput | undefined,\n): Record<string, boolean> {\n\tif (input == null) {\n\t\treturn {};\n\t}\n\tconst permissions: Record<string, boolean> = {};\n\tfor (const [key, value] of Object.entries(input)) {\n\t\tif (typeof value === \"boolean\") {\n\t\t\tpermissions[key] = value;\n\t\t\tcontinue;\n\t\t}\n\t\tif (value == null || typeof value !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const [action, allowed] of Object.entries(value)) {\n\t\t\tif (typeof allowed !== \"boolean\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpermissions[`${key}.${action}`] = allowed;\n\t\t}\n\t}\n\treturn permissions;\n}\n\nexport function resolveMollieApiKeyAuthority(input: {\n\tprofileId?: string | null;\n\tmodes: { test: boolean; live: boolean };\n}): BillingCredentialAuthority {\n\treturn {\n\t\tmodes: input.modes,\n\t\tpermissions: { ...STANDARD_MOLLIE_API_KEY_PERMISSIONS },\n\t\tscope: {\n\t\t\tkind: \"profile\",\n\t\t\t...(input.profileId != null && input.profileId.length > 0\n\t\t\t\t? { profileId: input.profileId }\n\t\t\t\t: {}),\n\t\t},\n\t\tsource: \"derived\",\n\t};\n}\n\nexport function resolveMollieAdvancedTokenAuthority(input: {\n\tapiMode: MollieBillingApiMode;\n\tdeclaredPermissions?: MollieDeclaredPermissionInput;\n\tscope:\n\t\t| { kind: \"organization\" }\n\t\t| { kind: \"profile\"; profileId?: string };\n}): BillingCredentialAuthority {\n\treturn {\n\t\tmodes: modesForApiMode(input.apiMode),\n\t\tpermissions: normalizeMollieDeclaredPermissions(input.declaredPermissions),\n\t\tscope: input.scope,\n\t\tsource: \"declared\",\n\t};\n}\n\nexport function resolveMollieCompatibleTokenAuthority(input: {\n\tmodes: { test: boolean; live: boolean };\n\tdeclaredPermissions?: MollieDeclaredPermissionInput;\n\tprofileId?: string | null;\n}): BillingCredentialAuthority {\n\tconst declared = normalizeMollieDeclaredPermissions(input.declaredPermissions);\n\treturn {\n\t\tmodes: input.modes,\n\t\tpermissions: declared,\n\t\tscope: {\n\t\t\tkind: \"profile\",\n\t\t\t...(input.profileId != null && input.profileId.length > 0\n\t\t\t\t? { profileId: input.profileId }\n\t\t\t\t: {}),\n\t\t},\n\t\tsource: \"declared\",\n\t};\n}\n\nexport function modesForApiMode(apiMode: MollieBillingApiMode): {\n\ttest: boolean;\n\tlive: boolean;\n} {\n\tif (apiMode === \"both\") {\n\t\treturn { live: true, test: true };\n\t}\n\tif (apiMode === \"live\") {\n\t\treturn { live: true, test: false };\n\t}\n\treturn { live: false, test: true };\n}\n","import {\n\tATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\tAthenaBillingProviderError,\n} from \"../../../../errors.ts\";\nimport type {\n\tNormalizedStripeBillingProviderConfig,\n\tStripeBillingCredentialKind,\n\tStripeBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport {\n\tBillingSecret,\n\ttype BillingProviderBindingCredentials,\n\ttype BillingStoredCredential,\n} from \"../../../credentials.ts\";\nimport {\n\tassertCredentialSlotEnvironment,\n\tinferStripeCredentialEnvironment,\n} from \"../inspect.ts\";\n\nconst DEFAULT_STRIPE_API_BASE_URL = \"https://api.stripe.com\";\n\nfunction nonEmpty(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction storeStripeCredential(\n\tsecret: string,\n\tenvironment: \"test\" | \"live\",\n\tkind: StripeBillingCredentialKind,\n): BillingStoredCredential {\n\tassertCredentialSlotEnvironment({\n\t\tprovider: \"stripe\",\n\t\tenvironment,\n\t\tinferred: inferStripeCredentialEnvironment(secret),\n\t});\n\treturn {\n\t\tkind,\n\t\tsecret: new BillingSecret(secret),\n\t};\n}\n\nexport function normalizeStripeBillingProviderConfig(\n\tconfig: StripeBillingProviderConfig,\n): NormalizedStripeBillingProviderConfig {\n\tconst credentialKind: StripeBillingCredentialKind =\n\t\tconfig.credentialKind ?? \"secret_key\";\n\tconst testSecret =\n\t\tcredentialKind === \"oauth_access_token\"\n\t\t\t? nonEmpty(\"testToken\" in config ? config.testToken : undefined)\n\t\t\t: nonEmpty(\"testKey\" in config ? config.testKey : undefined);\n\tconst liveSecret =\n\t\tcredentialKind === \"oauth_access_token\"\n\t\t\t? nonEmpty(\"liveToken\" in config ? config.liveToken : undefined)\n\t\t\t: nonEmpty(\"liveKey\" in config ? config.liveKey : undefined);\n\tconst credentials: BillingProviderBindingCredentials = {\n\t\t...(testSecret\n\t\t\t? { test: storeStripeCredential(testSecret, \"test\", credentialKind) }\n\t\t\t: {}),\n\t\t...(liveSecret\n\t\t\t? { live: storeStripeCredential(liveSecret, \"live\", credentialKind) }\n\t\t\t: {}),\n\t};\n\tif (credentials.test == null && credentials.live == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.stripe requires a test or live credential.\",\n\t\t});\n\t}\n\tconst accountId = nonEmpty(\n\t\t\"accountId\" in config ? config.accountId : undefined,\n\t);\n\treturn {\n\t\tprovider: \"stripe\",\n\t\tcredentials,\n\t\taccountId: accountId ?? null,\n\t\tapiBaseUrl: nonEmpty(config.apiBaseUrl) ?? DEFAULT_STRIPE_API_BASE_URL,\n\t\tcredentialKind,\n\t};\n}\n\nfunction isNormalizedStripeConfig(\n\tconfig: StripeBillingProviderConfig | NormalizedStripeBillingProviderConfig,\n): config is NormalizedStripeBillingProviderConfig {\n\treturn \"provider\" in config && config.provider === \"stripe\";\n}\n\nexport function normalizeStripeRuntimeConfig(\n\tconfig: StripeBillingProviderConfig | NormalizedStripeBillingProviderConfig,\n): NormalizedStripeBillingProviderConfig {\n\tif (isNormalizedStripeConfig(config)) {\n\t\treturn config;\n\t}\n\treturn normalizeStripeBillingProviderConfig(config);\n}\n","import {\n\tdetectAthenaRuntimeEnvironment,\n\ttype AthenaRuntimeEnvironment,\n} from \"../../../../runtime/resolve.ts\";\nimport {\n\tATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\tATHENA_BILLING_PROVIDER_SDK_REQUIRED,\n\tATHENA_BILLING_PROVIDER_SERVER_REQUIRED,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type {\n\tBillingProviderConfigMap,\n\tBillingProviderDiagnostics,\n\tMollieBillingApiMode,\n\tMollieBillingCredentialKind,\n\tMollieBillingProviderConfig,\n\tMollieSdkAdapterFactory,\n\tMollieSdkClientOptions,\n\tMollieSdkConstructor,\n\tNormalizedBillingProviderConfigs,\n\tNormalizedMollieBillingProviderConfig,\n} from \"../../../providers/types.ts\";\nimport type { BillingCredentialAuthority } from \"../../authority.ts\";\nimport {\n\tavailableBillingCredentialEnvironments,\n\tBillingSecret,\n\ttype BillingProviderBindingCredentials,\n\ttype BillingStoredCredential,\n} from \"../../credentials.ts\";\nimport {\n\tassertCredentialSlotEnvironment,\n\tclassifyMollieCredentialPrefix,\n\tinferMollieCredentialEnvironment,\n} from \"./inspect.ts\";\nimport {\n\tresolveMollieAdvancedTokenAuthority,\n\tresolveMollieApiKeyAuthority,\n\tresolveMollieCompatibleTokenAuthority,\n} from \"./token-authority.ts\";\nimport { normalizeStripeBillingProviderConfig } from \"./stripe/config.ts\";\n\nconst DEFAULT_MOLLIE_API_BASE_URL = \"https://api.mollie.com\";\n\nfunction configuredProviderNames(\n\tconfigured: BillingProviderConfigMap | undefined,\n): string[] {\n\tif (configured == null) {\n\t\treturn [];\n\t}\n\treturn Object.keys(configured).filter((name) => configured[name] != null);\n}\n\nexport function assertBillingProviderRuntimeEnvironment(\n\tconfigured?: BillingProviderConfigMap,\n\toptions?: { environment?: AthenaRuntimeEnvironment },\n): void {\n\tif (configuredProviderNames(configured).length === 0) {\n\t\treturn;\n\t}\n\tconst environment =\n\t\toptions?.environment ?? detectAthenaRuntimeEnvironment();\n\tif (environment === \"browser\" || environment === \"react-native\") {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_SERVER_REQUIRED,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers requires a trusted server runtime and cannot be configured in the browser or React Native.\",\n\t\t});\n\t}\n}\n\nfunction nonEmpty(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction defaultProfileIdFrom(config: {\n\tdefaultProfileId?: string | null;\n\tprofileId?: string | null;\n}): string | undefined {\n\treturn nonEmpty(config.defaultProfileId) ?? nonEmpty(config.profileId);\n}\n\nfunction storeMollieCredential(\n\tsecret: string,\n\tenvironment: \"test\" | \"live\",\n\tkind: MollieBillingCredentialKind,\n): BillingStoredCredential {\n\tassertCredentialSlotEnvironment({\n\t\tprovider: \"mollie\",\n\t\tenvironment,\n\t\tinferred: inferMollieCredentialEnvironment(secret),\n\t});\n\treturn {\n\t\tkind,\n\t\tsecret: new BillingSecret(secret),\n\t};\n}\n\nfunction assertMollieSecretKind(\n\tsecret: string,\n\tkind: MollieBillingCredentialKind,\n): void {\n\tconst prefix = classifyMollieCredentialPrefix(secret);\n\tif (kind === \"api_key\" && prefix === \"access_token\") {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie API keys cannot use an Advanced Access Token secret.\",\n\t\t});\n\t}\n\tif (kind === \"advanced_access_token\" && prefix !== \"access_token\") {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\tprefix === \"api_key\"\n\t\t\t\t\t? \"billing.providers.mollie advanced_access_token cannot use a test_ or live_ API key.\"\n\t\t\t\t\t: \"billing.providers.mollie advanced_access_token requires an access_ token prefix.\",\n\t\t});\n\t}\n}\n\nfunction pairCredentials(\n\ttestSecret: string | undefined,\n\tliveSecret: string | undefined,\n\tkind: MollieBillingCredentialKind,\n): BillingProviderBindingCredentials {\n\tif (testSecret) {\n\t\tassertMollieSecretKind(testSecret, kind);\n\t}\n\tif (liveSecret) {\n\t\tassertMollieSecretKind(liveSecret, kind);\n\t}\n\tconst credentials: BillingProviderBindingCredentials = {\n\t\t...(testSecret\n\t\t\t? { test: storeMollieCredential(testSecret, \"test\", kind) }\n\t\t\t: {}),\n\t\t...(liveSecret\n\t\t\t? { live: storeMollieCredential(liveSecret, \"live\", kind) }\n\t\t\t: {}),\n\t};\n\tif (credentials.test == null && credentials.live == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie requires a test or live credential.\",\n\t\t});\n\t}\n\treturn credentials;\n}\n\nfunction modesFromCredentials(\n\tcredentials: BillingProviderBindingCredentials,\n): { test: boolean; live: boolean } {\n\treturn {\n\t\tlive: credentials.live != null,\n\t\ttest: credentials.test != null,\n\t};\n}\n\nfunction adapterBackedSdk(\n\tadapter: MollieSdkAdapterFactory,\n): MollieSdkConstructor {\n\treturn class AdapterBackedMollieSdk {\n\t\tconstructor(options?: MollieSdkClientOptions) {\n\t\t\treturn adapter(options);\n\t\t}\n\t} as MollieSdkConstructor;\n}\n\nfunction requireMollieSdkBinding(config: MollieBillingProviderConfig): {\n\tadapter?: MollieSdkAdapterFactory;\n\tsdk: MollieSdkConstructor;\n} {\n\tif (config.adapter != null) {\n\t\treturn {\n\t\t\tadapter: config.adapter,\n\t\t\tsdk: config.sdk ?? adapterBackedSdk(config.adapter),\n\t\t};\n\t}\n\tif (config.sdk == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_SDK_REQUIRED,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie.sdk or adapter is required. Inject the official mollie-api-typescript Client constructor.\",\n\t\t});\n\t}\n\treturn { sdk: config.sdk };\n}\n\nfunction declaredPermissionsFrom(\n\tconfig: {\n\t\tauthority?: { permissions?: Record<string, unknown> };\n\t\tpermissions?: Record<string, unknown>;\n\t},\n): Record<string, boolean | Record<string, boolean | undefined>> | undefined {\n\treturn (\n\t\t(config.permissions as\n\t\t\t| Record<string, boolean | Record<string, boolean | undefined>>\n\t\t\t| undefined) ??\n\t\t(config.authority?.permissions as\n\t\t\t| Record<string, boolean | Record<string, boolean | undefined>>\n\t\t\t| undefined)\n\t);\n}\n\nfunction normalizeAdvancedMollieConfig(\n\tconfig: Extract<\n\t\tMollieBillingProviderConfig,\n\t\t{ accessToken: string }\n\t>,\n): NormalizedMollieBillingProviderConfig {\n\tconst accessToken = nonEmpty(config.accessToken);\n\tif (accessToken == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie.accessToken is required for advanced_access_token.\",\n\t\t});\n\t}\n\tassertMollieSecretKind(accessToken, \"advanced_access_token\");\n\tconst apiMode: MollieBillingApiMode = config.apiMode ?? \"test\";\n\tconst credentials = pairCredentials(\n\t\tapiMode === \"live\" ? undefined : accessToken,\n\t\tapiMode === \"test\" ? undefined : accessToken,\n\t\t\"advanced_access_token\",\n\t);\n\tconst inferredProfileId = nonEmpty(config.profileId);\n\tconst configuredScopeProfileId =\n\t\tconfig.scope?.kind === \"profile\"\n\t\t\t? nonEmpty(config.scope.profileId)\n\t\t\t: undefined;\n\tif (config.scope?.kind === \"profile\" && configuredScopeProfileId == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie.scope.profileId is required when scope.kind is profile.\",\n\t\t});\n\t}\n\tconst scope =\n\t\tconfig.scope == null\n\t\t\t? inferredProfileId != null\n\t\t\t\t? { kind: \"profile\" as const, profileId: inferredProfileId }\n\t\t\t\t: { kind: \"organization\" as const }\n\t\t\t: config.scope.kind === \"profile\" && configuredScopeProfileId != null\n\t\t\t\t? { kind: \"profile\" as const, profileId: configuredScopeProfileId }\n\t\t\t\t: config.scope;\n\tconst profileId =\n\t\tscope.kind === \"profile\"\n\t\t\t? scope.profileId\n\t\t\t: defaultProfileIdFrom(config);\n\tconst authority: BillingCredentialAuthority =\n\t\tresolveMollieAdvancedTokenAuthority({\n\t\t\tapiMode,\n\t\t\tdeclaredPermissions: declaredPermissionsFrom(config),\n\t\t\tscope,\n\t\t});\n\tconst defaultProfileId = defaultProfileIdFrom(config);\n\treturn {\n\t\tapiBaseUrl: nonEmpty(config.apiBaseUrl) ?? DEFAULT_MOLLIE_API_BASE_URL,\n\t\tauthority,\n\t\tcredentialKind: \"advanced_access_token\",\n\t\tcredentials,\n\t\tdefaultProfileId: defaultProfileId ?? null,\n\t\tprofileId: profileId ?? defaultProfileId ?? null,\n\t\tprovider: \"mollie\",\n\t\t...requireMollieSdkBinding(config),\n\t};\n}\n\nexport function normalizeMollieBillingProviderConfig(\n\tconfig: MollieBillingProviderConfig,\n): NormalizedMollieBillingProviderConfig {\n\tconst credentialKind: MollieBillingCredentialKind =\n\t\tconfig.credentialKind ??\n\t\t(\"accessToken\" in config && nonEmpty(config.accessToken) != null\n\t\t\t? \"advanced_access_token\"\n\t\t\t: \"api_key\");\n\tif (credentialKind === \"advanced_access_token\") {\n\t\tif (!(\"accessToken\" in config)) {\n\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\t\tmessage:\n\t\t\t\t\t\"billing.providers.mollie advanced_access_token configuration is invalid.\",\n\t\t\t});\n\t\t}\n\t\treturn normalizeAdvancedMollieConfig(config);\n\t}\n\tconst testSecret =\n\t\tcredentialKind === \"api_key\"\n\t\t\t? nonEmpty(\"testKey\" in config ? config.testKey : undefined)\n\t\t\t: nonEmpty(\"testToken\" in config ? config.testToken : undefined);\n\tconst liveSecret =\n\t\tcredentialKind === \"api_key\"\n\t\t\t? nonEmpty(\"liveKey\" in config ? config.liveKey : undefined)\n\t\t\t: nonEmpty(\"liveToken\" in config ? config.liveToken : undefined);\n\tconst credentials = pairCredentials(testSecret, liveSecret, credentialKind);\n\tconst profileId =\n\t\tcredentialKind === \"api_key\"\n\t\t\t? nonEmpty(\"profileId\" in config ? config.profileId : undefined)\n\t\t\t: defaultProfileIdFrom({\n\t\t\t\t\tdefaultProfileId:\n\t\t\t\t\t\t\"defaultProfileId\" in config ? config.defaultProfileId : undefined,\n\t\t\t\t\tprofileId: \"profileId\" in config ? config.profileId : undefined,\n\t\t\t\t});\n\tif (\n\t\t(credentialKind === \"organization_access_token\" ||\n\t\t\tcredentialKind === \"oauth_access_token\") &&\n\t\tprofileId == null\n\t) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie.defaultProfileId or profileId is required for organization_access_token and oauth_access_token.\",\n\t\t});\n\t}\n\tconst declaredPermissions =\n\t\t\"permissions\" in config || \"authority\" in config\n\t\t\t? declaredPermissionsFrom(config)\n\t\t\t: undefined;\n\tconst authority =\n\t\tcredentialKind === \"api_key\"\n\t\t\t? resolveMollieApiKeyAuthority({\n\t\t\t\t\tmodes: modesFromCredentials(credentials),\n\t\t\t\t\tprofileId,\n\t\t\t\t})\n\t\t\t: resolveMollieCompatibleTokenAuthority({\n\t\t\t\t\tdeclaredPermissions,\n\t\t\t\t\tmodes: modesFromCredentials(credentials),\n\t\t\t\t\tprofileId,\n\t\t\t\t});\n\treturn {\n\t\tapiBaseUrl: nonEmpty(config.apiBaseUrl) ?? DEFAULT_MOLLIE_API_BASE_URL,\n\t\tauthority,\n\t\tcredentialKind,\n\t\tcredentials,\n\t\tdefaultProfileId: profileId ?? null,\n\t\tprofileId: profileId ?? null,\n\t\tprovider: \"mollie\",\n\t\t...requireMollieSdkBinding(config),\n\t};\n}\n\nexport function normalizeBillingProviderConfig(\n\tconfigured?: BillingProviderConfigMap,\n): NormalizedBillingProviderConfigs {\n\tassertBillingProviderRuntimeEnvironment(configured);\n\tconst next: NormalizedBillingProviderConfigs = {};\n\tif (configured?.mollie != null) {\n\t\tnext.mollie = normalizeMollieBillingProviderConfig(configured.mollie);\n\t}\n\tif (configured?.stripe != null) {\n\t\tnext.stripe = normalizeStripeBillingProviderConfig(configured.stripe);\n\t}\n\treturn next;\n}\n\nexport function toBillingProviderDiagnostics(\n\tnormalized: NormalizedBillingProviderConfigs,\n): BillingProviderDiagnostics {\n\tif (normalized.mollie != null) {\n\t\treturn {\n\t\t\tprovider: \"mollie\",\n\t\t\tconfigured: true,\n\t\t\tprofileId: normalized.mollie.profileId ?? undefined,\n\t\t\tavailableEnvironments: availableBillingCredentialEnvironments(\n\t\t\t\tnormalized.mollie.credentials,\n\t\t\t),\n\t\t\tcredentialKind: normalized.mollie.credentialKind,\n\t\t};\n\t}\n\tif (normalized.stripe != null) {\n\t\treturn {\n\t\t\tprovider: \"stripe\",\n\t\t\tconfigured: true,\n\t\t\tavailableEnvironments: availableBillingCredentialEnvironments(\n\t\t\t\tnormalized.stripe.credentials,\n\t\t\t),\n\t\t\tcredentialKind: normalized.stripe.credentialKind,\n\t\t};\n\t}\n\treturn { configured: false };\n}\n","export function shouldAutomaticallyImportBillingCustomers(input?: {\n\tenabled?: boolean;\n\tmode?: \"automatic\" | \"manual\";\n}): boolean {\n\tif (input?.enabled !== true) {\n\t\treturn false;\n\t}\n\treturn input.mode !== \"manual\";\n}\n\nexport function scheduleDeferredBillingCustomerImport(input: {\n\tdelayMs?: number;\n\tenabled: boolean;\n\tmode?: \"automatic\" | \"manual\";\n\trun: () => Promise<void>;\n}): { cancel(): void } | null {\n\tif (!shouldAutomaticallyImportBillingCustomers(input)) {\n\t\treturn null;\n\t}\n\tconst delayMs = input.delayMs ?? 60_000;\n\tconst timer = setTimeout(() => {\n\t\tvoid input.run();\n\t}, delayMs);\n\ttimer.unref?.();\n\treturn {\n\t\tcancel() {\n\t\t\tclearTimeout(timer);\n\t\t},\n\t};\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { ResolvedBillingIngressEndpoints } from \"./types.ts\";\n\nexport const BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH =\n\t\"/api/athena/billing/webhook/mollie/classic\";\nexport const BILLING_MOLLIE_EVENTS_WEBHOOK_PATH =\n\t\"/api/athena/billing/webhook/mollie/events\";\nexport const BILLING_WEBHOOK_COMPAT_PATH = \"/api/athena/billing/webhook\";\n\nfunction isLoopbackHostname(hostname: string): boolean {\n\tconst host = hostname.replace(/^\\[(.*)\\]$/u, \"$1\").toLowerCase();\n\treturn (\n\t\thost === \"localhost\" ||\n\t\thost === \"127.0.0.1\" ||\n\t\thost === \"::1\" ||\n\t\thost === \"0.0.0.0\" ||\n\t\thost.endsWith(\".localhost\") ||\n\t\thost.endsWith(\".local\")\n\t);\n}\n\nexport function billingWebhookUrlIsLoopback(value: string): boolean {\n\ttry {\n\t\treturn isLoopbackHostname(new URL(value).hostname);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction trimTrailingSlash(value: string): string {\n\treturn value.replace(/\\/+$/u, \"\");\n}\n\nfunction isHttpsPublicUrl(value: string): boolean {\n\ttry {\n\t\tconst parsed = new URL(value);\n\t\treturn parsed.protocol === \"https:\" && parsed.hostname.length > 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function resolveBillingPublicBaseUrl(input: {\n\tappUrl?: string | null;\n\tpublicBaseUrl?: string | null;\n}): string | undefined {\n\tconst candidate = input.publicBaseUrl?.trim() || input.appUrl?.trim();\n\tif (!candidate) {\n\t\treturn undefined;\n\t}\n\treturn trimTrailingSlash(candidate);\n}\n\nexport function resolveBillingIngressEndpoints(input: {\n\tappUrl?: string | null;\n\tpublicBaseUrl?: string | null;\n\twebhookIngressToken?: string;\n}): ResolvedBillingIngressEndpoints | undefined {\n\tconst base = resolveBillingPublicBaseUrl(input);\n\tif (!base) {\n\t\treturn undefined;\n\t}\n\tconst token = input.webhookIngressToken?.trim();\n\tconst suffix =\n\t\ttoken != null && WEBHOOK_INGRESS_BINDING_TOKEN.test(token)\n\t\t\t? `/${token}`\n\t\t\t: \"\";\n\treturn {\n\t\tclassicUrl: `${base}${BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH}${suffix}`,\n\t\teventsUrl: `${base}${BILLING_MOLLIE_EVENTS_WEBHOOK_PATH}${suffix}`,\n\t};\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n\ttry {\n\t\tconst parsed = new URL(value);\n\t\treturn (\n\t\t\t(parsed.protocol === \"https:\" || parsed.protocol === \"http:\") &&\n\t\t\tparsed.hostname.length > 0\n\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function assertStableHttpsBillingPublicUrl(input: {\n\tappUrl?: string | null;\n\tlive?: boolean;\n\tmanagement: \"automatic\" | \"manual\";\n\tpublicBaseUrl?: string | null;\n\twebhooksEnabled: boolean;\n}): string | undefined {\n\tif (!input.webhooksEnabled || input.management !== \"automatic\") {\n\t\treturn resolveBillingPublicBaseUrl(input);\n\t}\n\tconst base = resolveBillingPublicBaseUrl(input);\n\tconst live = input.live === true;\n\tif (!base || !isAbsoluteHttpUrl(base) || (live && !isHttpsPublicUrl(base))) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_INGESTION_PUBLIC_URL_REQUIRED\",\n\t\t\t\"Automatic billing webhook management requires billing.ingestion.webhooks.publicBaseUrl or app.url as a stable public origin (HTTPS when live). Host and X-Forwarded-Host are never used.\",\n\t\t\t\"billing\",\n\t\t);\n\t}\n\treturn base;\n}\n\nconst WEBHOOK_INGRESS_BINDING_TOKEN = /^[A-Za-z0-9_-]{16,128}$/;\n\nfunction normalizeWebhookPathname(pathname: string): string {\n\treturn pathname.length > 1 ? pathname.replace(/\\/+$/u, \"\") : pathname;\n}\n\nexport function billingWebhookPathKind(\n\tpathname: string,\n): \"classic\" | \"events\" | \"compat\" {\n\tconst normalized = normalizeWebhookPathname(pathname);\n\tif (\n\t\tnormalized === BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH ||\n\t\tnormalized.startsWith(`${BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH}/`)\n\t) {\n\t\treturn \"classic\";\n\t}\n\tif (\n\t\tnormalized === BILLING_MOLLIE_EVENTS_WEBHOOK_PATH ||\n\t\tnormalized.startsWith(`${BILLING_MOLLIE_EVENTS_WEBHOOK_PATH}/`)\n\t) {\n\t\treturn \"events\";\n\t}\n\treturn \"compat\";\n}\n\n/** Opaque ingress binding from `/classic/<token>` or `/events/<token>`. */\nexport function billingWebhookIngressBindingToken(\n\tpathname: string,\n): string | undefined {\n\tconst normalized = normalizeWebhookPathname(pathname);\n\tconst kind = billingWebhookPathKind(normalized);\n\tconst prefix =\n\t\tkind === \"classic\"\n\t\t\t? BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH\n\t\t\t: kind === \"events\"\n\t\t\t\t? BILLING_MOLLIE_EVENTS_WEBHOOK_PATH\n\t\t\t\t: undefined;\n\tif (prefix == null || normalized === prefix) {\n\t\treturn undefined;\n\t}\n\tconst rest = normalized.slice(prefix.length + 1);\n\tif (rest.includes(\"/\") || !WEBHOOK_INGRESS_BINDING_TOKEN.test(rest)) {\n\t\treturn undefined;\n\t}\n\treturn rest;\n}\n","export type BillingWebhookManagementMode = \"automatic\" | \"manual\";\n\nexport type BillingManagedWebhookEnablement = false | \"auto\" | \"required\";\n\nexport type BillingWebhookKind = \"classic\" | \"next_gen\";\n\nexport type BillingWebhookRegistrationStatus =\n\t| \"pending\"\n\t| \"active\"\n\t| \"drifted\"\n\t| \"degraded\"\n\t| \"disabled\"\n\t| \"error\";\n\nexport type BillingWebhookReconciliationAction =\n\t| \"noop\"\n\t| \"create\"\n\t| \"update\"\n\t| \"replace\"\n\t| \"disable\"\n\t| \"conflict\";\n\nexport type BillingIngestionChannelHealth =\n\t| \"active\"\n\t| \"disabled\"\n\t| \"unsupported\"\n\t| \"error\";\n\nexport type BillingNextGenIngestionHealth =\n\t| BillingIngestionChannelHealth\n\t| \"degraded\";\n\nexport interface BillingConnectionIngestionHealth {\n\tclassic: BillingIngestionChannelHealth;\n\tdrifted: boolean;\n\tlastDeliveryAt?: Date;\n\tlastVerifiedAt?: Date;\n\tnextGen: BillingNextGenIngestionHealth;\n}\n\nexport interface ResolvedBillingIngressEndpoints {\n\tclassicUrl: string;\n\teventsUrl: string;\n}\n\nexport interface AthenaBillingWebhookClassicConfig {\n\tenabled?: boolean;\n}\n\nexport interface AthenaBillingWebhookNextGenConfig {\n\tenabled?: BillingManagedWebhookEnablement;\n\teventTypes?: readonly string[];\n\tpreviousSigningSecrets?: readonly string[];\n\tsigningSecret?: string;\n}\n\nexport interface AthenaBillingMollieWebhookProviderConfig {\n\tclassic?: AthenaBillingWebhookClassicConfig;\n\tnextGen?: AthenaBillingWebhookNextGenConfig;\n\tstrategy?: \"hybrid\" | \"classic\" | \"next_gen\";\n}\n\nexport interface AthenaBillingWebhooksObjectConfig {\n\tenabled?: boolean;\n\texecution?: \"embedded\" | \"external\";\n\tmanagement?: BillingWebhookManagementMode;\n\tproviders?: {\n\t\tmollie?: AthenaBillingMollieWebhookProviderConfig;\n\t};\n\tpublicBaseUrl?: string;\n\t/** Envelope key for provider signing secrets. Prefer env ATHENA_BILLING_WEBHOOK_MASTER_KEY. */\n\tsecretMasterKey?: string;\n}\n\nexport type AthenaBillingWebhooksConfig =\n\t| boolean\n\t| AthenaBillingWebhooksObjectConfig;\n\nexport interface AthenaBillingIngestionConfig {\n\twebhooks?: AthenaBillingWebhooksConfig;\n}\n\nexport const DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES = [\n\t\"payment.paid\",\n\t\"payment.failed\",\n\t\"payment.canceled\",\n\t\"payment.expired\",\n] as const;\n\nexport interface NormalizedMollieWebhookProviderConfig {\n\tclassic: { enabled: boolean };\n\tnextGen: {\n\t\tenabled: BillingManagedWebhookEnablement;\n\t\teventTypes: readonly string[];\n\t\tpreviousSigningSecrets: readonly string[];\n\t\tsigningSecret?: string;\n\t};\n\tstrategy: \"hybrid\" | \"classic\" | \"next_gen\";\n}\n\nexport interface NormalizedAthenaBillingWebhooksConfig {\n\tenabled: boolean;\n\texecution: \"embedded\" | \"external\";\n\tmanagement: BillingWebhookManagementMode;\n\tproviders: {\n\t\tmollie: NormalizedMollieWebhookProviderConfig;\n\t};\n\tpublicBaseUrl?: string;\n\tsecretMasterKey?: string;\n}\n\nexport interface NormalizedAthenaBillingIngestionConfig {\n\twebhooks: NormalizedAthenaBillingWebhooksConfig;\n}\n\nexport interface BillingSigningSecretSet {\n\tcurrent?: string;\n\tprevious: readonly string[];\n}\n\nexport interface BillingWebhookOwnershipMarker {\n\tapplicationId: string;\n\tconnectionId: string;\n\tvalue: string;\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { BillingCredentialKind } from \"../runtime/credentials.ts\";\nimport { assertStableHttpsBillingPublicUrl } from \"./urls.ts\";\nimport {\n\tDEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n\ttype AthenaBillingIngestionConfig,\n\ttype AthenaBillingWebhooksConfig,\n\ttype BillingManagedWebhookEnablement,\n\ttype BillingSigningSecretSet,\n\ttype NormalizedAthenaBillingIngestionConfig,\n\ttype NormalizedAthenaBillingWebhooksConfig,\n\ttype NormalizedMollieWebhookProviderConfig,\n} from \"./types.ts\";\n\nconst DEFAULT_MOLLIE: NormalizedMollieWebhookProviderConfig = {\n\tclassic: { enabled: true },\n\tnextGen: {\n\t\tenabled: \"auto\",\n\t\teventTypes: DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n\t\tpreviousSigningSecrets: [],\n\t},\n\tstrategy: \"hybrid\",\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeEnablement(\n\tvalue: unknown,\n): BillingManagedWebhookEnablement {\n\tif (value === false) {\n\t\treturn false;\n\t}\n\tif (value === \"required\") {\n\t\treturn \"required\";\n\t}\n\treturn \"auto\";\n}\n\nfunction stringList(value: unknown): readonly string[] {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\treturn value.filter(\n\t\t(entry): entry is string => typeof entry === \"string\" && entry.trim() !== \"\",\n\t);\n}\n\nfunction normalizeMollieProvider(\n\traw: unknown,\n): NormalizedMollieWebhookProviderConfig {\n\tif (!isRecord(raw)) {\n\t\treturn { ...DEFAULT_MOLLIE, nextGen: { ...DEFAULT_MOLLIE.nextGen } };\n\t}\n\tconst classic = isRecord(raw.classic) ? raw.classic : {};\n\tconst nextGen = isRecord(raw.nextGen) ? raw.nextGen : {};\n\tconst strategy =\n\t\traw.strategy === \"classic\" || raw.strategy === \"next_gen\"\n\t\t\t? raw.strategy\n\t\t\t: \"hybrid\";\n\tconst eventTypes = stringList(nextGen.eventTypes);\n\treturn {\n\t\tclassic: { enabled: classic.enabled !== false },\n\t\tnextGen: {\n\t\t\tenabled: normalizeEnablement(nextGen.enabled),\n\t\t\teventTypes:\n\t\t\t\teventTypes.length > 0 ? eventTypes : DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n\t\t\tpreviousSigningSecrets: stringList(nextGen.previousSigningSecrets),\n\t\t\t...(typeof nextGen.signingSecret === \"string\" &&\n\t\t\tnextGen.signingSecret.length > 0\n\t\t\t\t? { signingSecret: nextGen.signingSecret }\n\t\t\t\t: {}),\n\t\t},\n\t\tstrategy,\n\t};\n}\n\nexport function normalizeAthenaBillingWebhooks(\n\tinput?: AthenaBillingWebhooksConfig,\n): NormalizedAthenaBillingWebhooksConfig {\n\tif (input === true) {\n\t\treturn {\n\t\t\tenabled: true,\n\t\t\texecution: \"embedded\",\n\t\t\tmanagement: \"automatic\",\n\t\t\tproviders: { mollie: normalizeMollieProvider(undefined) },\n\t\t};\n\t}\n\tif (input === false || input === undefined) {\n\t\treturn {\n\t\t\tenabled: false,\n\t\t\texecution: \"embedded\",\n\t\t\tmanagement: \"manual\",\n\t\t\tproviders: { mollie: normalizeMollieProvider(undefined) },\n\t\t};\n\t}\n\tconst publicBaseUrl =\n\t\ttypeof input.publicBaseUrl === \"string\" && input.publicBaseUrl.trim()\n\t\t\t? input.publicBaseUrl.trim()\n\t\t\t: undefined;\n\tconst secretMasterKey =\n\t\ttypeof input.secretMasterKey === \"string\" && input.secretMasterKey.trim()\n\t\t\t? input.secretMasterKey.trim()\n\t\t\t: undefined;\n\treturn {\n\t\tenabled: input.enabled !== false,\n\t\texecution: input.execution === \"external\" ? \"external\" : \"embedded\",\n\t\tmanagement: input.management === \"manual\" ? \"manual\" : \"automatic\",\n\t\tproviders: {\n\t\t\tmollie: normalizeMollieProvider(input.providers?.mollie),\n\t\t},\n\t\t...(publicBaseUrl ? { publicBaseUrl } : {}),\n\t\t...(secretMasterKey ? { secretMasterKey } : {}),\n\t};\n}\n\nexport function normalizeAthenaBillingIngestion(\n\tinput?: AthenaBillingIngestionConfig,\n): NormalizedAthenaBillingIngestionConfig {\n\treturn {\n\t\twebhooks: normalizeAthenaBillingWebhooks(input?.webhooks),\n\t};\n}\n\nexport function signingSecretsFromWebhookConfig(\n\twebhooks: NormalizedAthenaBillingWebhooksConfig,\n): BillingSigningSecretSet {\n\tconst nextGen = webhooks.providers.mollie.nextGen;\n\treturn {\n\t\tcurrent:\n\t\t\ttypeof nextGen.signingSecret === \"string\"\n\t\t\t\t? nextGen.signingSecret.trim() || undefined\n\t\t\t\t: nextGen.signingSecret,\n\t\tprevious: nextGen.previousSigningSecrets.map((entry) => entry.trim()).filter(\n\t\t\t(entry) => entry.length > 0,\n\t\t),\n\t};\n}\n\nexport function flattenSigningSecrets(\n\tsecrets: BillingSigningSecretSet,\n): readonly string[] {\n\tconst values = [\n\t\t...(secrets.current ? [secrets.current] : []),\n\t\t...secrets.previous,\n\t];\n\treturn [...new Set(values)];\n}\n\nexport function mollieCredentialSupportsManagedNextGen(\n\tkind?: BillingCredentialKind,\n): boolean {\n\treturn (\n\t\tkind === \"advanced_access_token\" ||\n\t\tkind === \"organization_access_token\" ||\n\t\tkind === \"oauth_access_token\"\n\t);\n}\n\nexport function assertAthenaBillingIngestion(input: {\n\tappUrl?: string | null;\n\tcredentialKind?: BillingCredentialKind;\n\tingestion?: AthenaBillingIngestionConfig;\n\tlive?: boolean;\n}): NormalizedAthenaBillingIngestionConfig {\n\tconst normalized = normalizeAthenaBillingIngestion(input.ingestion);\n\tconst webhooks = normalized.webhooks;\n\tif (!webhooks.enabled) {\n\t\treturn normalized;\n\t}\n\tassertStableHttpsBillingPublicUrl({\n\t\tappUrl: input.appUrl,\n\t\tlive: input.live,\n\t\tmanagement: webhooks.management,\n\t\tpublicBaseUrl: webhooks.publicBaseUrl,\n\t\twebhooksEnabled: webhooks.enabled,\n\t});\n\tif (\n\t\twebhooks.providers.mollie.nextGen.enabled === \"required\" &&\n\t\t!mollieCredentialSupportsManagedNextGen(input.credentialKind)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_INGESTION_NEXT_GEN_REQUIRED\",\n\t\t\t'billing.ingestion.webhooks Mollie nextGen.enabled is \"required\" but the configured credential cannot register managed Next-gen webhooks (API keys are Classic-only).',\n\t\t\t\"billing\",\n\t\t);\n\t}\n\tif (\n\t\twebhooks.providers.mollie.strategy === \"next_gen\" &&\n\t\twebhooks.providers.mollie.nextGen.enabled === false\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_INGESTION_CONFIG_INVALID\",\n\t\t\t\"Mollie webhook strategy next_gen cannot disable nextGen.\",\n\t\t\t\"billing\",\n\t\t);\n\t}\n\treturn normalized;\n}\n","import { createHash } from \"node:crypto\";\n\nexport function fingerprintBillingSigningSecret(secret: string): string {\n\treturn createHash(\"sha256\").update(secret, \"utf8\").digest(\"hex\").slice(0, 16);\n}\n\n/**\n * Mollie `POST /v2/webhooks` rejects overlong `name` with 422\n * \"Name provided is too long\". The API does not publish maxLength;\n * 40 was too high (compact `athena:{digest}:billing` is 31 and still 422).\n */\nexport const MOLLIE_WEBHOOK_OWNERSHIP_NAME_MAX = 30;\n\nexport function billingWebhookOwnershipMarker(input: {\n\tapplicationId: string;\n\tconnectionId: string;\n}): string {\n\tconst full = `athena:${input.applicationId}:${input.connectionId}:billing`;\n\tif (full.length <= MOLLIE_WEBHOOK_OWNERSHIP_NAME_MAX) {\n\t\treturn full;\n\t}\n\tconst digest = createHash(\"sha256\")\n\t\t.update(`${input.applicationId}\\0${input.connectionId}`, \"utf8\")\n\t\t.digest(\"hex\")\n\t\t.slice(0, 16);\n\treturn `athena:${digest}`;\n}\n\nexport function isAthenaOwnedWebhookName(\n\tname: string | undefined,\n\tmarker: string,\n): boolean {\n\tif (name == null || name.length === 0) {\n\t\treturn false;\n\t}\n\treturn name === marker || name.startsWith(`${marker}:`);\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type {\n\tAthenaBillingObservabilityConfig,\n\tNormalizedAthenaBillingObservability,\n} from \"./types.ts\";\n\nexport function normalizeAthenaBillingObservability(\n\tinput?: AthenaBillingObservabilityConfig,\n): NormalizedAthenaBillingObservability {\n\tconst tracesInput = input?.traces;\n\tconst tracesEnabled =\n\t\ttracesInput === undefined\n\t\t\t? true\n\t\t\t: typeof tracesInput === \"boolean\"\n\t\t\t\t? tracesInput\n\t\t\t\t: tracesInput.sampleRate !== 0;\n\tconst sampleRate =\n\t\ttypeof tracesInput === \"object\" &&\n\t\ttypeof tracesInput.sampleRate === \"number\" &&\n\t\tNumber.isFinite(tracesInput.sampleRate)\n\t\t\t? Math.min(1, Math.max(0, tracesInput.sampleRate))\n\t\t\t: 1;\n\tconst retentionDays =\n\t\ttypeof tracesInput === \"object\" &&\n\t\ttypeof tracesInput.retentionDays === \"number\" &&\n\t\tNumber.isFinite(tracesInput.retentionDays)\n\t\t\t? Math.max(1, Math.trunc(tracesInput.retentionDays))\n\t\t\t: 30;\n\tconst auditRetentionDays =\n\t\ttypeof input?.auditRetentionDays === \"number\" &&\n\t\tNumber.isFinite(input.auditRetentionDays)\n\t\t\t? Math.max(1, Math.trunc(input.auditRetentionDays))\n\t\t\t: undefined;\n\tconst webhookIngressRetentionDays =\n\t\ttypeof input?.webhookIngressRetentionDays === \"number\" &&\n\t\tNumber.isFinite(input.webhookIngressRetentionDays)\n\t\t\t? Math.max(1, Math.trunc(input.webhookIngressRetentionDays))\n\t\t\t: 30;\n\treturn {\n\t\tauditLog: input?.auditLog !== false,\n\t\tauditRetentionDays,\n\t\ttraces: {\n\t\t\tenabled: tracesEnabled,\n\t\t\tretentionDays,\n\t\t\tsampleRate: tracesEnabled ? sampleRate : 0,\n\t\t},\n\t\twebhookIngressRetentionDays,\n\t};\n}\n\nexport function assertLocalBillingObservability(billing: unknown): void {\n\tif (!billing || typeof billing !== \"object\") {\n\t\treturn;\n\t}\n\tconst raw = billing as Record<string, unknown>;\n\tif (!(\"observability\" in raw) || raw.observability === undefined) {\n\t\treturn;\n\t}\n\tconst mode = (billing as { mode?: unknown }).mode;\n\tif (mode === \"remote\") {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME\",\n\t\t\t'billing.observability is an embedded billing capability. Set billing.mode to \"local\" or omit observability for remote Billing.',\n\t\t\t\"billing\",\n\t\t);\n\t}\n}\n","import {\n\tATHENA_BILLING_ERROR_DESCRIPTORS,\n} from \"../../runtime/error/generated/billing.ts\";\n\nexport const ATHENA_BILLING_IMPORT_CONFLICT =\n\t\"ATHENA_BILLING_IMPORT_CONFLICT\" as const;\nexport const ATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT =\n\t\"ATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT\" as const;\nexport const ATHENA_BILLING_IMPORT_PROVIDER_FAILED =\n\t\"ATHENA_BILLING_IMPORT_PROVIDER_FAILED\" as const;\nexport const ATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND =\n\t\"ATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND\" as const;\nexport const ATHENA_BILLING_IMPORT_BINDING_CONFLICT =\n\t\"ATHENA_BILLING_IMPORT_BINDING_CONFLICT\" as const;\nexport const ATHENA_BILLING_IMPORT_CURSOR_INVALID =\n\t\"ATHENA_BILLING_IMPORT_CURSOR_INVALID\" as const;\n\nexport type AthenaBillingImportErrorCode =\n\t| typeof ATHENA_BILLING_IMPORT_CONFLICT\n\t| typeof ATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT\n\t| typeof ATHENA_BILLING_IMPORT_PROVIDER_FAILED\n\t| typeof ATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND\n\t| typeof ATHENA_BILLING_IMPORT_BINDING_CONFLICT\n\t| typeof ATHENA_BILLING_IMPORT_CURSOR_INVALID;\n\nconst IR_BY_CONSTANT: Record<AthenaBillingImportErrorCode, string> = {\n\tATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT: \"billing_import_ambiguous_subject\",\n\tATHENA_BILLING_IMPORT_BINDING_CONFLICT: \"billing_import_binding_conflict\",\n\tATHENA_BILLING_IMPORT_CONFLICT: \"billing_import_conflict\",\n\tATHENA_BILLING_IMPORT_CURSOR_INVALID: \"billing_import_cursor_invalid\",\n\tATHENA_BILLING_IMPORT_PROVIDER_FAILED: \"billing_import_provider_failed\",\n\tATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND: \"billing_import_subject_not_found\",\n};\n\nexport class AthenaBillingImportError extends Error {\n\treadonly code: AthenaBillingImportErrorCode;\n\treadonly errorNumber: number;\n\treadonly status: number;\n\n\tconstructor(input: { code: AthenaBillingImportErrorCode; message: string }) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingImportError\";\n\t\tthis.code = input.code;\n\t\tconst ir = ATHENA_BILLING_ERROR_DESCRIPTORS.find(\n\t\t\t(entry) => entry.code === IR_BY_CONSTANT[input.code],\n\t\t);\n\t\tthis.errorNumber = ir?.errorNumber ?? 4015;\n\t\tthis.status = ir?.status ?? 409;\n\t}\n}\n","import {\n\tisAthenaBillingCredentialError,\n\tisAthenaBillingProviderRequestError,\n} from \"../errors.ts\";\nimport {\n\tATHENA_BILLING_IMPORT_CURSOR_INVALID,\n\tAthenaBillingImportError,\n} from \"../import/errors.ts\";\nimport type {\n\tBillingBackoffDecision,\n\tBillingReconciliationFailureKind,\n} from \"./types.ts\";\n\nexport class AthenaBillingReconciliationError extends Error {\n\treadonly kind: BillingReconciliationFailureKind;\n\treadonly retryAfterMs?: number;\n\n\tconstructor(input: {\n\t\tkind: BillingReconciliationFailureKind;\n\t\tmessage: string;\n\t\tretryAfterMs?: number;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingReconciliationError\";\n\t\tthis.kind = input.kind;\n\t\tthis.retryAfterMs = input.retryAfterMs;\n\t}\n}\n\nconst MAX_DELAY_MS = 60 * 60 * 1000;\nconst BASE_DELAY_MS = 60_000;\n\nexport function classifyBillingReconciliationFailure(\n\terror: unknown,\n): BillingReconciliationFailureKind {\n\tif (error instanceof AthenaBillingReconciliationError) {\n\t\treturn error.kind;\n\t}\n\tif (error instanceof AthenaBillingImportError) {\n\t\tif (error.code === ATHENA_BILLING_IMPORT_CURSOR_INVALID) {\n\t\t\treturn \"cursor_invalid\";\n\t\t}\n\t\treturn \"provider_unavailable\";\n\t}\n\tif (isAthenaBillingCredentialError(error)) {\n\t\treturn \"provider_auth_failed\";\n\t}\n\tif (isAthenaBillingProviderRequestError(error)) {\n\t\tif (error.status === 401 || error.status === 403) {\n\t\t\treturn \"provider_auth_failed\";\n\t\t}\n\t\tif (error.status === 429 || error.kind === \"rate_limited\") {\n\t\t\treturn \"provider_rate_limited\";\n\t\t}\n\t\tif (\n\t\t\terror.kind === \"network\" ||\n\t\t\terror.kind === \"timeout\" ||\n\t\t\terror.kind === \"provider_unavailable\" ||\n\t\t\t(typeof error.status === \"number\" && error.status >= 500)\n\t\t) {\n\t\t\treturn \"provider_unavailable\";\n\t\t}\n\t\tif (error.kind === \"authentication\" || error.kind === \"authorization\") {\n\t\t\treturn \"provider_auth_failed\";\n\t\t}\n\t}\n\tif (error instanceof Error && \"code\" in error) {\n\t\tconst code = (error as { code?: unknown }).code;\n\t\tif (\n\t\t\tcode === \"ECONNREFUSED\" ||\n\t\t\tcode === \"ECONNRESET\" ||\n\t\t\tcode === \"ENOTFOUND\" ||\n\t\t\tcode === \"ETIMEDOUT\" ||\n\t\t\tcode === \"EPIPE\"\n\t\t) {\n\t\t\treturn \"database_unavailable\";\n\t\t}\n\t}\n\treturn \"internal\";\n}\n\nexport function isTransientBillingReconciliationFailure(\n\tkind: BillingReconciliationFailureKind,\n): boolean {\n\treturn (\n\t\tkind === \"provider_rate_limited\" ||\n\t\tkind === \"provider_unavailable\" ||\n\t\tkind === \"database_unavailable\"\n\t);\n}\n\nexport function billingReconciliationBackoff(input: {\n\tattempt: number;\n\terror: unknown;\n\tkind?: BillingReconciliationFailureKind;\n}): BillingBackoffDecision {\n\tconst kind = input.kind ?? classifyBillingReconciliationFailure(input.error);\n\tconst retry = isTransientBillingReconciliationFailure(kind);\n\tif (!retry) {\n\t\treturn { delayMs: 0, kind, retry: false };\n\t}\n\tconst retryAfter =\n\t\tinput.error instanceof AthenaBillingReconciliationError\n\t\t\t? input.error.retryAfterMs\n\t\t\t: undefined;\n\tconst headerMs = readRetryAfterMs(input.error);\n\tconst exp = Math.min(\n\t\tMAX_DELAY_MS,\n\t\tBASE_DELAY_MS * 2 ** Math.max(0, input.attempt),\n\t);\n\tconst jitter = Math.floor(Math.random() * Math.max(1000, exp * 0.2));\n\treturn {\n\t\tdelayMs: retryAfter ?? headerMs ?? Math.min(MAX_DELAY_MS, exp + jitter),\n\t\tkind,\n\t\tretry: true,\n\t};\n}\n\nfunction readRetryAfterMs(error: unknown): number | undefined {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst details = (error as { details?: unknown }).details;\n\tif (!details || typeof details !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst retryAfter = (details as { retryAfter?: unknown }).retryAfter;\n\tif (typeof retryAfter === \"number\" && Number.isFinite(retryAfter)) {\n\t\treturn Math.max(0, retryAfter * 1000);\n\t}\n\tif (typeof retryAfter === \"string\") {\n\t\tconst parsed = Number.parseInt(retryAfter, 10);\n\t\tif (Number.isFinite(parsed)) {\n\t\t\treturn Math.max(0, parsed * 1000);\n\t\t}\n\t}\n\treturn undefined;\n}\n","import { 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\tintervalMs: number;\n\tjitterMs: number;\n}\n\nexport const DEFAULT_BILLING_RECONCILIATION_SCHEDULE: BillingReconciliationSchedule =\n{\n\tintervalMs: 600_000,\n\tjitterMs: 60_000,\n};\n\nexport const DEFAULT_BILLING_WEBHOOK_RECONCILIATION_SCHEDULE: BillingReconciliationSchedule =\n{\n\tintervalMs: 10_800_000,\n\tjitterMs: 300_000,\n};\n\nfunction jitterDelay(jitterMs: number): number {\n\tif (jitterMs <= 0) {\n\t\treturn 0;\n\t}\n\treturn Math.floor(Math.random() * jitterMs);\n}\n\nexport function logEmbeddedBillingSchedulerError(error: unknown): void {\n\tconst payload = {\n\t\terror: error instanceof Error ? error.message : String(error),\n\t};\n\tif (isAthenaBillingCredentialError(error)) {\n\t\tconsole.warn(\"[athena-billing] skipping scheduled reconciliation\", payload);\n\t\treturn;\n\t}\n\tif (\n\t\terror instanceof AthenaBillingReconciliationError &&\n\t\terror.kind === \"lease_lost\"\n\t) {\n\t\tconsole.warn(\"[athena-billing] skipping scheduled reconciliation\", payload);\n\t\treturn;\n\t}\n\tconsole.error(\"[athena-billing] scheduled reconciliation failed\", payload);\n}\n\nexport function registerEmbeddedBillingScheduler(input: {\n\tenabled: boolean;\n\texecution?: BillingImportExecutionMode;\n\tonError?: (error: unknown) => void;\n\trun: (trigger: \"bootstrap\" | \"scheduled\") => Promise<void>;\n\tschedule?: Partial<BillingReconciliationSchedule>;\n}): { cancel(): void } | null {\n\tif (!input.enabled) {\n\t\treturn null;\n\t}\n\tif ((input.execution ?? \"embedded\") !== \"embedded\") {\n\t\treturn null;\n\t}\n\tconst intervalMs =\n\t\tinput.schedule?.intervalMs ??\n\t\tDEFAULT_BILLING_RECONCILIATION_SCHEDULE.intervalMs;\n\tconst jitterMs =\n\t\tinput.schedule?.jitterMs ?? DEFAULT_BILLING_RECONCILIATION_SCHEDULE.jitterMs;\n\tconst onError = input.onError ?? logEmbeddedBillingSchedulerError;\n\tlet cancelled = false;\n\tlet interval: ReturnType<typeof setInterval> | undefined;\n\tconst runSafe = (trigger: \"bootstrap\" | \"scheduled\") => {\n\t\tvoid input.run(trigger).catch(onError);\n\t};\n\tconst bootstrap = setTimeout(() => {\n\t\tif (cancelled) {\n\t\t\treturn;\n\t\t}\n\t\trunSafe(\"bootstrap\");\n\t\tinterval = setInterval(() => {\n\t\t\tif (!cancelled) {\n\t\t\t\trunSafe(\"scheduled\");\n\t\t\t}\n\t\t}, intervalMs);\n\t\tinterval.unref?.();\n\t}, jitterDelay(jitterMs));\n\tbootstrap.unref?.();\n\treturn {\n\t\tcancel() {\n\t\t\tcancelled = true;\n\t\t\tclearTimeout(bootstrap);\n\t\t\tif (interval) {\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function registerBillingReconciliationScheduler(input: {\n\tenabled: boolean;\n\texecution?: BillingImportExecutionMode;\n\tmode?: \"automatic\" | \"manual\";\n\tonError?: (error: unknown) => void;\n\trun: () => Promise<void>;\n\tschedule?: Partial<BillingReconciliationSchedule>;\n}): { cancel(): void } | null {\n\tif (!shouldAutomaticallyImportBillingCustomers(input)) {\n\t\treturn null;\n\t}\n\treturn registerEmbeddedBillingScheduler({\n\t\tenabled: true,\n\t\texecution: input.execution,\n\t\tonError: input.onError,\n\t\trun: () => input.run(),\n\t\tschedule: input.schedule,\n\t});\n}\n","import {\n\tATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { BillingProviderName } from \"../../../types.ts\";\nimport { normalizeBillingProviderConfig } from \"./config.ts\";\nimport type { ConfiguredBillingProviderBinding } from \"./types.ts\";\n\nexport function createConfiguredProviderBinding(input: {\n\tprovider: BillingProviderName;\n\tconfiguredProviders?: BillingProviderConfigMap;\n}): ConfiguredBillingProviderBinding {\n\tconst normalized = normalizeBillingProviderConfig(input.configuredProviders);\n\tif (input.provider === \"mollie\" && normalized.mollie != null) {\n\t\treturn {\n\t\t\tkind: \"configured\",\n\t\t\tprovider: \"mollie\",\n\t\t\tcredentials: normalized.mollie.credentials,\n\t\t\tproviderConfig: {\n\t\t\t\tapiBaseUrl: normalized.mollie.apiBaseUrl,\n\t\t\t\tauthority: normalized.mollie.authority,\n\t\t\t\tcredentialKind: normalized.mollie.credentialKind,\n\t\t\t\tprofileId: normalized.mollie.profileId ?? null,\n\t\t\t},\n\t\t};\n\t}\n\tif (input.provider === \"stripe\" && normalized.stripe != null) {\n\t\treturn {\n\t\t\tkind: \"configured\",\n\t\t\tprovider: \"stripe\",\n\t\t\tcredentials: normalized.stripe.credentials,\n\t\t\tproviderConfig: {\n\t\t\t\taccountId: normalized.stripe.accountId ?? null,\n\t\t\t\tapiBaseUrl: normalized.stripe.apiBaseUrl,\n\t\t\t\tcredentialKind: normalized.stripe.credentialKind,\n\t\t\t},\n\t\t};\n\t}\n\tthrow new AthenaBillingProviderError({\n\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\tmessage: `Billing provider \"${input.provider}\" is not configured.`,\n\t});\n}\n","import {\n\tresolveBillingCredential,\n\ttype BillingResolvedCredential,\n} from \"../../credentials.ts\";\nimport { resolveBillingEnvironment } from \"../../environment.ts\";\nimport type {\n\tBillingProviderBinding,\n\tBillingProviderExecutionContext,\n} from \"./types.ts\";\n\nexport function createBillingProviderExecutionContext(input: {\n\tbinding: BillingProviderBinding;\n\tidempotencyKey?: string;\n\tingress?: { classicWebhookUrl?: string };\n\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n\tsignal?: AbortSignal;\n\ttarget?: { profileId?: string };\n\ttestMode?: boolean;\n}): BillingProviderExecutionContext {\n\tconst environment = resolveBillingEnvironment({\n\t\ttestMode: input.testMode,\n\t});\n\tconst resolved = resolveBillingCredential({\n\t\tprovider: input.binding.provider,\n\t\ttestMode: environment.testMode,\n\t\tbinding: input.binding,\n\t});\n\tconst credential: BillingResolvedCredential = resolved.credential;\n\treturn {\n\t\tprovider: input.binding.provider,\n\t\tenvironment,\n\t\tbinding: input.binding,\n\t\tcredential,\n\t\t...(input.operationScope != null\n\t\t\t? { operationScope: input.operationScope }\n\t\t\t: {}),\n\t\ttarget: {\n\t\t\tprofileId: input.target?.profileId,\n\t\t},\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tsignal: input.signal,\n\t\t...(input.ingress ? { ingress: input.ingress } : {}),\n\t};\n}\n","import {\n\tATHENA_BILLING_PROVIDER_NOT_REGISTERED,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderName } from \"../../../types.ts\";\nimport type { BillingProviderRuntime } from \"./types.ts\";\n\nexport function normalizeBillingProviderName(\n\tprovider: string,\n): BillingProviderName {\n\treturn provider.trim().toLowerCase() as BillingProviderName;\n}\n\nexport class BillingProviderRegistry {\n\tingress?: { classicWebhookUrl?: string };\n\tprivate readonly runtimes = new Map<string, BillingProviderRuntime>();\n\n\tconstructor(\n\t\truntimes: readonly BillingProviderRuntime[] = [],\n\t\toptions?: { ingress?: { classicWebhookUrl?: string } },\n\t) {\n\t\tthis.ingress = options?.ingress;\n\t\tfor (const runtime of runtimes) {\n\t\t\tthis.register(runtime);\n\t\t}\n\t}\n\n\tregister(runtime: BillingProviderRuntime): void {\n\t\tconst name = normalizeBillingProviderName(runtime.provider);\n\t\tif (this.runtimes.has(name)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Billing provider \"${name}\" is already registered.`,\n\t\t\t);\n\t\t}\n\t\tthis.runtimes.set(name, runtime);\n\t}\n\n\thas(provider: string): boolean {\n\t\treturn this.runtimes.has(normalizeBillingProviderName(provider));\n\t}\n\n\tget(provider: string): BillingProviderRuntime | undefined {\n\t\treturn this.runtimes.get(normalizeBillingProviderName(provider));\n\t}\n\n\trequire(provider: string): BillingProviderRuntime {\n\t\tconst runtime = this.get(provider);\n\t\tif (runtime == null) {\n\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_REGISTERED,\n\t\t\t\tmessage: `Billing provider \"${normalizeBillingProviderName(provider)}\" is not registered.`,\n\t\t\t});\n\t\t}\n\t\treturn runtime;\n\t}\n\n\tlist(): readonly BillingProviderRuntime[] {\n\t\treturn Object.freeze([...this.runtimes.values()]);\n\t}\n}\n","import {\n\tATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type {\n\tBillingProviderConfigMap,\n\tMollieBillingProviderConfig,\n} from \"../../../providers/types.ts\";\nimport type { ResolvedBillingProviderConnection } from \"../../../reconciliation/types.ts\";\nimport { createConfiguredProviderBinding } from \"./binding.ts\";\nimport { createBillingProviderExecutionContext } from \"./execution-context.ts\";\nimport { normalizeBillingProviderName } from \"./registry.ts\";\nimport type {\n\tBillingProviderExecutionContext,\n\tPersistedBillingProviderBinding,\n} from \"./types.ts\";\n\nexport function defaultBillingCredentialReference(\n\tprovider: string,\n\tenvironment?: \"test\" | \"live\",\n): string {\n\tconst name = normalizeBillingProviderName(provider);\n\tif (environment === \"live\") {\n\t\treturn `providers.${name}-live`;\n\t}\n\treturn `providers.${name}`;\n}\n\nfunction billingProviderFromCredentialPart(\n\tproviderPart: string,\n\ttrimmed: string,\n): \"mollie\" | \"stripe\" {\n\tconst base = providerPart.replace(/-(test|live)$/, \"\");\n\tif (base !== \"mollie\" && base !== \"stripe\") {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: `Billing credential_reference \"${trimmed}\" is not a mollie or stripe slot.`,\n\t\t});\n\t}\n\treturn base;\n}\n\nexport function parseBillingCredentialReference(raw: string): {\n\taccountId?: string;\n\tprovider: \"mollie\" | \"stripe\";\n} {\n\tconst trimmed = raw.trim();\n\tif (trimmed.length === 0) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: \"Billing connection credential_reference is empty.\",\n\t\t});\n\t}\n\tconst body = trimmed.startsWith(\"providers.\")\n\t\t? trimmed.slice(\"providers.\".length)\n\t\t: trimmed;\n\tconst colon = body.indexOf(\":\");\n\tconst providerPart = (\n\t\tcolon === -1 ? body : body.slice(0, colon)\n\t).toLowerCase();\n\tconst accountId =\n\t\tcolon === -1 ? undefined : body.slice(colon + 1).trim();\n\tconst provider = billingProviderFromCredentialPart(providerPart, trimmed);\n\tif (colon !== -1 && (accountId == null || accountId.length === 0)) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: `Billing credential_reference \"${trimmed}\" is missing an account slot.`,\n\t\t});\n\t}\n\treturn accountId != null\n\t\t? { accountId, provider }\n\t\t: { provider };\n}\n\nexport function mollieConfigForCredentialReference(\n\tconfigured: BillingProviderConfigMap | undefined,\n\treference: string,\n): MollieBillingProviderConfig | undefined {\n\tconst parsed = parseBillingCredentialReference(reference);\n\tif (parsed.provider !== \"mollie\") {\n\t\treturn undefined;\n\t}\n\tif (parsed.accountId == null) {\n\t\treturn configured?.mollie;\n\t}\n\treturn configured?.mollieAccounts?.[parsed.accountId];\n}\n\nexport function firstConfiguredMollieProvider(\n\tconfigured?: BillingProviderConfigMap,\n): MollieBillingProviderConfig | undefined {\n\tif (configured?.mollie != null) {\n\t\treturn configured.mollie;\n\t}\n\tconst accounts = configured?.mollieAccounts;\n\tif (accounts == null) {\n\t\treturn undefined;\n\t}\n\tfor (const slot of Object.values(accounts)) {\n\t\tif (slot != null) {\n\t\t\treturn slot;\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/**\n * Process `billing.testMode` defaults to test (`undefined` / `true`).\n * Leftover DB rows in the other environment must not be scheduled.\n */\nexport function billingConnectionMatchesProcessTestMode(\n\tconnectionTestMode: boolean,\n\tprocessTestMode: boolean | undefined,\n): boolean {\n\treturn connectionTestMode === (processTestMode !== false);\n}\n\n/** True when process config has a credential for this connection's environment. */\nexport function billingConnectionHasConfiguredCredential(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnection: Pick<\n\t\tResolvedBillingProviderConnection,\n\t\t\"credentialReference\" | \"provider\" | \"testMode\"\n\t>;\n}): boolean {\n\ttry {\n\t\tconst binding = createPersistedProviderBinding({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tconnectionId: input.connection.credentialReference,\n\t\t\tcredentialReference: input.connection.credentialReference,\n\t\t\tprovider: input.connection.provider,\n\t\t});\n\t\treturn input.connection.testMode\n\t\t\t? binding.credentials.test != null\n\t\t\t: binding.credentials.live != null;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/** Active rows that match this process environment and have a usable credential. */\nexport function eligibleBillingConnectionsForProcess<\n\tT extends Pick<\n\t\tResolvedBillingProviderConnection,\n\t\t\"credentialReference\" | \"provider\" | \"testMode\"\n\t>,\n>(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnections: readonly T[];\n\tprocessTestMode?: boolean;\n}): T[] {\n\treturn input.connections.filter(\n\t\t(connection) =>\n\t\t\tbillingConnectionMatchesProcessTestMode(\n\t\t\t\tconnection.testMode,\n\t\t\t\tinput.processTestMode,\n\t\t\t) &&\n\t\t\tbillingConnectionHasConfiguredCredential({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tconnection,\n\t\t\t}),\n\t);\n}\n\n/**\n * Classic Mollie webhooks have no connectionId. Prefer the unique default\n * `providers.mollie` slot when more than one eligible row remains.\n */\nexport function pickSoleEligibleBillingConnection<\n\tT extends Pick<ResolvedBillingProviderConnection, \"credentialReference\">,\n>(eligible: readonly T[]): T | undefined {\n\tif (eligible.length === 0) {\n\t\treturn undefined;\n\t}\n\tif (eligible.length === 1) {\n\t\treturn eligible[0];\n\t}\n\tconst defaults = eligible.filter(\n\t\t(connection) => connection.credentialReference === \"providers.mollie\",\n\t);\n\treturn defaults.length === 1 ? defaults[0] : undefined;\n}\n\nexport function createPersistedProviderBinding(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnectionId: string;\n\tcredentialReference: string;\n\tprovider: string;\n}): PersistedBillingProviderBinding {\n\tconst parsed = parseBillingCredentialReference(input.credentialReference);\n\tconst connectionProvider = normalizeBillingProviderName(input.provider);\n\tif (parsed.provider !== connectionProvider) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: `Connection provider \"${connectionProvider}\" does not match credential_reference \"${input.credentialReference}\".`,\n\t\t});\n\t}\n\tconst slotMap = slotConfigMap(\n\t\tparsed.provider,\n\t\tparsed.accountId,\n\t\tinput.configuredProviders,\n\t\tinput.credentialReference,\n\t);\n\tconst configured = createConfiguredProviderBinding({\n\t\tconfiguredProviders: slotMap,\n\t\tprovider: parsed.provider,\n\t});\n\treturn {\n\t\tconnectionId: input.connectionId,\n\t\tcredentialReference: input.credentialReference,\n\t\tcredentials: configured.credentials,\n\t\tkind: \"connection\",\n\t\tprovider: configured.provider,\n\t\tproviderConfig: configured.providerConfig,\n\t};\n}\n\nexport function createConnectionProviderExecutionContext(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnection: ResolvedBillingProviderConnection;\n\tingress?: { classicWebhookUrl?: string };\n\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n}): BillingProviderExecutionContext {\n\tconst binding = createPersistedProviderBinding({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tconnectionId: input.connection.id,\n\t\tcredentialReference: input.connection.credentialReference,\n\t\tprovider: input.connection.provider,\n\t});\n\treturn createBillingProviderExecutionContext({\n\t\tbinding,\n\t\t...(input.ingress ? { ingress: input.ingress } : {}),\n\t\t...(input.operationScope != null\n\t\t\t? { operationScope: input.operationScope }\n\t\t\t: {}),\n\t\ttestMode: input.connection.testMode,\n\t});\n}\n\nfunction slotConfigMap(\n\tprovider: \"mollie\" | \"stripe\",\n\taccountId: string | undefined,\n\tconfigured: BillingProviderConfigMap | undefined,\n\treference: string,\n): BillingProviderConfigMap {\n\tif (provider === \"mollie\") {\n\t\tconst mollie =\n\t\t\taccountId == null\n\t\t\t\t? configured?.mollie\n\t\t\t\t: configured?.mollieAccounts?.[accountId];\n\t\tif (mollie == null) {\n\t\t\tthrow missingSlot(reference);\n\t\t}\n\t\treturn { mollie };\n\t}\n\tconst stripe =\n\t\taccountId == null\n\t\t\t? configured?.stripe\n\t\t\t: configured?.stripeAccounts?.[accountId];\n\tif (stripe == null) {\n\t\tthrow missingSlot(reference);\n\t}\n\treturn { stripe };\n}\n\nfunction missingSlot(reference: string): AthenaBillingProviderError {\n\treturn new AthenaBillingProviderError({\n\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\tmessage: `No billing provider config is registered for credential_reference \"${reference}\".`,\n\t});\n}","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type { AthenaBillingAuditEntry } from \"./types.ts\";\n\nexport interface AthenaBillingAuditWriter {\n\twrite(entry: AthenaBillingAuditEntry): Promise<void>;\n}\n\nexport interface MemoryBillingAuditSink {\n\tentries: AthenaBillingAuditEntry[];\n}\n\nexport function createMemoryBillingAuditWriter(\n\tsink: MemoryBillingAuditSink,\n): AthenaBillingAuditWriter {\n\treturn {\n\t\tasync write(entry) {\n\t\t\tsink.entries.push({\n\t\t\t\t...entry,\n\t\t\t\tprevious: redactBillingAuditSnapshot(entry.previous),\n\t\t\t\tresult: redactBillingAuditSnapshot(entry.result),\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingAuditWriter(\n\tsql: BillingSqlExecutor,\n): AthenaBillingAuditWriter {\n\treturn {\n\t\tasync write(entry) {\n\t\t\tawait insertAuditLogBilling(sql, entry);\n\t\t},\n\t};\n}\n\nfunction redactBillingAuditSnapshot(value: unknown): unknown {\n\tif (value == null) {\n\t\treturn value;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => redactBillingAuditSnapshot(entry));\n\t}\n\tif (typeof value !== \"object\") {\n\t\treturn value;\n\t}\n\tconst record = value as Record<string, unknown>;\n\tconst out: Record<string, unknown> = {};\n\tconst drop = new Set([\n\t\t\"email\",\n\t\t\"emailSnapshot\",\n\t\t\"raw\",\n\t\t\"metadata\",\n\t\t\"amount\",\n\t\t\"amountRefunded\",\n\t\t\"description\",\n\t\t\"name\",\n\t\t\"customer\",\n\t\t\"billingAddress\",\n\t\t\"shippingAddress\",\n\t]);\n\tfor (const [key, entry] of Object.entries(record)) {\n\t\tif (drop.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tkey === \"subject\" ||\n\t\t\tkey === \"providerSubject\" ||\n\t\t\tkey === \"result\" ||\n\t\t\tkey === \"previous\"\n\t\t) {\n\t\t\tout[key] = redactBillingAuditSnapshot(entry);\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\ttypeof entry === \"string\" ||\n\t\t\ttypeof entry === \"number\" ||\n\t\t\ttypeof entry === \"boolean\" ||\n\t\t\tentry == null\n\t\t) {\n\t\t\tout[key] = entry;\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof entry === \"object\") {\n\t\t\tout[key] = redactBillingAuditSnapshot(entry);\n\t\t}\n\t}\n\treturn out;\n}\n\nexport async function insertAuditLogBilling(\n\tsql: BillingSqlExecutor,\n\tentry: AthenaBillingAuditEntry,\n): Promise<void> {\n\tawait sql.query(\n\t\t`\nINSERT INTO athena.audit_log_billing (\n\tid,\n\tevent_id,\n\ttrace_id,\n\tcorrelation_id,\n\tcausation_id,\n\tevent,\n\tactor_kind,\n\tactor_user_id,\n\tconnection_id,\n\tprovider,\n\tsubject_kind,\n\tsubject_id,\n\tprovider_subject_kind,\n\tprovider_subject_id,\n\tprevious,\n\tresult,\n\toutcome,\n\tcreated_at\n) VALUES (\n\t$1, $2, $3, $4, $5, $6, $7, $8, $9::uuid, $10, $11, $12, $13, $14,\n\t$15::jsonb, $16::jsonb, $17, now()\n)\n`,\n\t\t[\n\t\t\tentry.id,\n\t\t\tentry.eventId,\n\t\t\tentry.traceId,\n\t\t\tentry.correlationId ?? null,\n\t\t\tentry.causationId ?? null,\n\t\t\tentry.event,\n\t\t\tentry.actor.kind,\n\t\t\tentry.actor.userId ?? null,\n\t\t\tentry.connectionId,\n\t\t\tentry.provider,\n\t\t\tentry.subject?.kind ?? null,\n\t\t\tentry.subject?.id ?? null,\n\t\t\tentry.providerSubject?.kind ?? null,\n\t\t\tentry.providerSubject?.id ?? null,\n\t\t\tJSON.stringify(redactBillingAuditSnapshot(entry.previous ?? null)),\n\t\t\tJSON.stringify(redactBillingAuditSnapshot(entry.result ?? null)),\n\t\t\tentry.outcome,\n\t\t],\n\t);\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type {\n\tAthenaBillingTraceRecord,\n\tAthenaBillingTraceStart,\n\tBillingTracePhase,\n} from \"./types.ts\";\n\nexport interface AthenaBillingActiveTrace {\n\tfailure(error: unknown, phase?: BillingTracePhase): Promise<void>;\n\tphase(name: BillingTracePhase): { finish(): void };\n\tsetCounters(input: {\n\t\tcustomersScanned?: number;\n\t\tpagesProcessed?: number;\n\t}): void;\n\tsuccess(): Promise<void>;\n}\n\nexport interface AthenaBillingTraceRecorder {\n\tstart(input: AthenaBillingTraceStart): AthenaBillingActiveTrace;\n}\n\nconst activeTraceStorage = new AsyncLocalStorage<AthenaBillingActiveTrace>();\n\nexport function currentBillingTrace(): AthenaBillingActiveTrace | undefined {\n\treturn activeTraceStorage.getStore();\n}\n\nexport function runWithBillingTrace<T>(\n\ttrace: AthenaBillingActiveTrace,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\treturn activeTraceStorage.run(trace, fn);\n}\n\nexport interface MemoryBillingTraceSink {\n\trecords: AthenaBillingTraceRecord[];\n}\n\nfunction sampleAllows(sampleRate: number): boolean {\n\tif (sampleRate >= 1) {\n\t\treturn true;\n\t}\n\tif (sampleRate <= 0) {\n\t\treturn false;\n\t}\n\treturn Math.random() < sampleRate;\n}\n\nfunction errorCodeOf(error: unknown): string | undefined {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst code = (error as { code?: unknown }).code;\n\treturn typeof code === \"string\" && code.trim() ? code : undefined;\n}\n\nfunction redactMetadata(value: Record<string, unknown>): Record<string, unknown> {\n\tconst next: Record<string, unknown> = {};\n\tfor (const [key, entry] of Object.entries(value)) {\n\t\tconst normalized = key.toLowerCase();\n\t\tif (\n\t\t\tnormalized.includes(\"key\") ||\n\t\t\tnormalized.includes(\"secret\") ||\n\t\t\tnormalized.includes(\"token\") ||\n\t\t\tnormalized.includes(\"password\") ||\n\t\t\tnormalized.includes(\"authorization\")\n\t\t) {\n\t\t\tnext[key] = \"[REDACTED]\";\n\t\t\tcontinue;\n\t\t}\n\t\tnext[key] = entry;\n\t}\n\treturn next;\n}\n\nfunction createActiveTrace(\n\tinput: AthenaBillingTraceStart,\n\tpersist: (record: AthenaBillingTraceRecord) => Promise<void>,\n): AthenaBillingActiveTrace {\n\tconst startedAt = input.startedAt ?? new Date();\n\tconst startedMs = performance.now();\n\tconst timings: Partial<Record<BillingTracePhase, number>> = {};\n\tlet pagesProcessed = 0;\n\tlet customersScanned = 0;\n\tlet finished = false;\n\n\tconst persistSafe = async (record: AthenaBillingTraceRecord) => {\n\t\tif (finished) {\n\t\t\treturn;\n\t\t}\n\t\tfinished = true;\n\t\ttry {\n\t\t\tawait persist(record);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[athena-billing] trace persistence failed\", {\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\ttraceId: record.traceId,\n\t\t\t});\n\t\t}\n\t};\n\n\tconst complete = async (\n\t\toutcome: \"failure\" | \"success\",\n\t\terror?: unknown,\n\t\terrorPhase?: BillingTracePhase,\n\t) => {\n\t\tawait persistSafe({\n\t\t\tcausationId: input.causationId,\n\t\t\tcheckpointMs: timings.checkpoint,\n\t\t\tcompletedAt: new Date(),\n\t\t\tconnectionId: input.connectionId,\n\t\t\tcorrelationId: input.correlationId,\n\t\t\tcustomersScanned,\n\t\t\terrorCode: error ? errorCodeOf(error) : undefined,\n\t\t\terrorPhase,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tleaseMs: timings.lease,\n\t\t\tmetadata: redactMetadata({}),\n\t\t\toperation: input.operation,\n\t\t\toutcome,\n\t\t\tpagesProcessed,\n\t\t\tprojectionMs: timings.document_projection,\n\t\t\tprovider: input.provider,\n\t\t\tproviderMs: timings.provider_fetch,\n\t\t\tresolveMs: timings.candidate_resolution,\n\t\t\tstartedAt,\n\t\t\ttotalMs: performance.now() - startedMs,\n\t\t\ttraceId: input.traceId,\n\t\t\ttransactionMs: timings.apply,\n\t\t\ttrigger: input.trigger,\n\t\t});\n\t};\n\n\treturn {\n\t\tasync failure(error, phase) {\n\t\t\tawait complete(\"failure\", error, phase);\n\t\t},\n\t\tphase(name) {\n\t\t\tconst started = performance.now();\n\t\t\treturn {\n\t\t\t\tfinish() {\n\t\t\t\t\ttimings[name] = (timings[name] ?? 0) + (performance.now() - started);\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tsetCounters(counters) {\n\t\t\tif (typeof counters.customersScanned === \"number\") {\n\t\t\t\tcustomersScanned = counters.customersScanned;\n\t\t\t}\n\t\t\tif (typeof counters.pagesProcessed === \"number\") {\n\t\t\t\tpagesProcessed = counters.pagesProcessed;\n\t\t\t}\n\t\t},\n\t\tasync success() {\n\t\t\tawait complete(\"success\");\n\t\t},\n\t};\n}\n\nexport function createNoopBillingTrace(): AthenaBillingActiveTrace {\n\treturn {\n\t\tasync failure() {},\n\t\tphase() {\n\t\t\treturn { finish() {} };\n\t\t},\n\t\tsetCounters() {},\n\t\tasync success() {},\n\t};\n}\n\nexport function createMemoryBillingTraceRecorder(\n\tsink: MemoryBillingTraceSink,\n\tsampleRate = 1,\n): AthenaBillingTraceRecorder {\n\treturn {\n\t\tstart(input) {\n\t\t\tif (!sampleAllows(sampleRate)) {\n\t\t\t\treturn createNoopBillingTrace();\n\t\t\t}\n\t\t\treturn createActiveTrace(input, async (record) => {\n\t\t\t\tsink.records.push(record);\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createDisabledBillingTraceRecorder(): AthenaBillingTraceRecorder {\n\treturn {\n\t\tstart() {\n\t\t\treturn createNoopBillingTrace();\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingTraceRecorder(\n\tsql: BillingSqlExecutor,\n\tsampleRate = 1,\n): AthenaBillingTraceRecorder {\n\treturn {\n\t\tstart(input) {\n\t\t\tif (!sampleAllows(sampleRate)) {\n\t\t\t\treturn createNoopBillingTrace();\n\t\t\t}\n\t\t\treturn createActiveTrace(input, (record) =>\n\t\t\t\tinsertTraceBilling(sql, record),\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport async function insertTraceBilling(\n\tsql: BillingSqlExecutor,\n\trecord: AthenaBillingTraceRecord,\n): Promise<void> {\n\tawait sql.query(\n\t\t`\nINSERT INTO athena.traces_billing (\n\tid,\n\ttrace_id,\n\tcorrelation_id,\n\tcausation_id,\n\toperation,\n\ttrigger,\n\tconnection_id,\n\tprovider,\n\toutcome,\n\terror_code,\n\terror_phase,\n\tlease_ms,\n\tprovider_ms,\n\tresolve_ms,\n\ttransaction_ms,\n\tprojection_ms,\n\tcheckpoint_ms,\n\ttotal_ms,\n\tpages_processed,\n\tcustomers_scanned,\n\tmetadata,\n\tstarted_at,\n\tcompleted_at\n) VALUES (\n\t$1, $2, $3, $4, $5, $6, $7::uuid, $8, $9, $10, $11,\n\t$12, $13, $14, $15, $16, $17, $18, $19, $20, $21::jsonb, $22, $23\n)\n`,\n\t\t[\n\t\t\trecord.id,\n\t\t\trecord.traceId,\n\t\t\trecord.correlationId ?? null,\n\t\t\trecord.causationId ?? null,\n\t\t\trecord.operation,\n\t\t\trecord.trigger,\n\t\t\trecord.connectionId,\n\t\t\trecord.provider,\n\t\t\trecord.outcome,\n\t\t\trecord.errorCode ?? null,\n\t\t\trecord.errorPhase ?? null,\n\t\t\trecord.leaseMs ?? null,\n\t\t\trecord.providerMs ?? null,\n\t\t\trecord.resolveMs ?? null,\n\t\t\trecord.transactionMs ?? null,\n\t\t\trecord.projectionMs ?? null,\n\t\t\trecord.checkpointMs ?? null,\n\t\t\trecord.totalMs,\n\t\t\trecord.pagesProcessed ?? 0,\n\t\t\trecord.customersScanned ?? 0,\n\t\t\tJSON.stringify(record.metadata ?? {}),\n\t\t\trecord.startedAt,\n\t\t\trecord.completedAt,\n\t\t],\n\t);\n}\n\nexport function billingTraceToDevtoolsEvent(record: AthenaBillingTraceRecord): {\n\tconnectionId: string;\n\tcorrelationId?: string;\n\tdomain: \"billing\";\n\terrorPhase?: string;\n\tevent: string;\n\toperation: string;\n\toutcome: string;\n\tprovider: string;\n\ttimings: {\n\t\tbilling: {\n\t\t\tphaseTimings: {\n\t\t\t\tcheckpointMs?: number;\n\t\t\t\tprojectionMs?: number;\n\t\t\t\tproviderMs?: number;\n\t\t\t\tresolveMs?: number;\n\t\t\t\ttransactionMs?: number;\n\t\t\t};\n\t\t\tproviderResourceId?: string;\n\t\t\tresourceId?: string;\n\t\t\tresourceKind?: string;\n\t\t};\n\t\ttotalMs: number;\n\t};\n\ttraceId: string;\n} {\n\treturn {\n\t\tconnectionId: record.connectionId,\n\t\tcorrelationId: record.correlationId,\n\t\tdomain: \"billing\",\n\t\terrorPhase: record.errorPhase,\n\t\tevent: record.operation,\n\t\toperation: record.operation,\n\t\toutcome: record.outcome,\n\t\tprovider: record.provider,\n\t\ttimings: {\n\t\t\tbilling: {\n\t\t\t\tphaseTimings: {\n\t\t\t\t\tcheckpointMs: record.checkpointMs ?? undefined,\n\t\t\t\t\tprojectionMs: record.projectionMs ?? undefined,\n\t\t\t\t\tproviderMs: record.providerMs ?? undefined,\n\t\t\t\t\tresolveMs: record.resolveMs ?? undefined,\n\t\t\t\t\ttransactionMs: record.transactionMs ?? undefined,\n\t\t\t\t},\n\t\t\t\tproviderResourceId:\n\t\t\t\t\ttypeof record.metadata?.providerResourceId === \"string\"\n\t\t\t\t\t\t? record.metadata.providerResourceId\n\t\t\t\t\t\t: undefined,\n\t\t\t\tresourceId:\n\t\t\t\t\ttypeof record.metadata?.resourceId === \"string\"\n\t\t\t\t\t\t? record.metadata.resourceId\n\t\t\t\t\t\t: undefined,\n\t\t\t\tresourceKind:\n\t\t\t\t\ttypeof record.metadata?.resourceKind === \"string\"\n\t\t\t\t\t\t? record.metadata.resourceKind\n\t\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t\ttotalMs: record.totalMs,\n\t\t},\n\t\ttraceId: record.traceId,\n\t};\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { BillingReconciliationContext } from \"../observability/types.ts\";\n\nconst storage = new AsyncLocalStorage<BillingReconciliationContext>();\n\nexport function currentBillingReconciliationContext():\n\t| BillingReconciliationContext\n\t| undefined {\n\treturn storage.getStore();\n}\n\nexport function runWithBillingReconciliationContext<T>(\n\tcontext: BillingReconciliationContext,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\treturn storage.run(context, fn);\n}\n\nexport function mintManualBillingReconciliationContext(input: {\n\tconnectionId: string;\n\tprovider: string;\n\trunId?: string;\n\ttrigger?: \"bootstrap\" | \"manual\";\n}): BillingReconciliationContext {\n\tconst runId = input.runId ?? crypto.randomUUID();\n\treturn {\n\t\tconnectionId: input.connectionId,\n\t\tcorrelationId: runId,\n\t\tprovider: input.provider,\n\t\ttraceId: crypto.randomUUID(),\n\t\ttrigger: input.trigger ?? \"manual\",\n\t};\n}\n\nexport function mintScheduledBillingReconciliationContext(input: {\n\tconnectionId: string;\n\tprovider: string;\n\tschedulerExecutionId: string;\n\trunId?: string;\n}): BillingReconciliationContext {\n\treturn {\n\t\tcausationId: input.schedulerExecutionId,\n\t\tconnectionId: input.connectionId,\n\t\tcorrelationId: input.runId ?? crypto.randomUUID(),\n\t\tprovider: input.provider,\n\t\ttraceId: crypto.randomUUID(),\n\t\ttrigger: \"scheduled\",\n\t};\n}\n\nexport function inheritWebhookBillingReconciliationContext(input: {\n\tcausationId: string;\n\tconnectionId: string;\n\tcorrelationId: string;\n\tprovider: string;\n\ttraceId: string;\n}): BillingReconciliationContext {\n\treturn {\n\t\tcausationId: input.causationId,\n\t\tconnectionId: input.connectionId,\n\t\tcorrelationId: input.correlationId,\n\t\tprovider: input.provider,\n\t\ttraceId: input.traceId,\n\t\ttrigger: \"webhook\",\n\t};\n}\n","import type { AthenaBillingAuditEvent } from \"./types.ts\";\nimport type {\n\tAthenaBillingMutationKind,\n\tAthenaBillingPreviousPolicy,\n\tAthenaBillingResultPolicy,\n} from \"./contract.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\n\nexport interface AthenaBillingAuditResolveContext {\n\tconnectionId: string;\n\tprevious?: unknown;\n\tprovider: string;\n\tproviderCustomerId?: string;\n\tproviderWebhookId?: string;\n\tresult?: unknown;\n\tsubject?: BillingSubjectRef;\n}\n\nexport interface AthenaBillingEventSubject {\n\tid: string;\n\tkind: \"organization\" | \"user\";\n}\n\nexport interface AthenaBillingEventDefinition {\n\taudit: true;\n\tmutationKind: AthenaBillingMutationKind;\n\tprevious: AthenaBillingPreviousPolicy;\n\tresolveProviderSubject: (\n\t\tcontext: AthenaBillingAuditResolveContext,\n\t) => { id: string; kind: \"customer\" | \"webhook\" } | undefined;\n\tresolveSubject: (\n\t\tcontext: AthenaBillingAuditResolveContext,\n\t) => AthenaBillingEventSubject | undefined;\n\tresult: AthenaBillingResultPolicy;\n\tsubjectType: \"billing_subject\" | \"billing_webhook_registration\";\n}\n\nfunction subjectFrom(\n\tcontext: AthenaBillingAuditResolveContext,\n): AthenaBillingEventSubject | undefined {\n\tconst subject = context.subject;\n\tif (!subject || subject.id.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn { id: subject.id, kind: subject.kind };\n}\n\nfunction providerCustomerFrom(\n\tcontext: AthenaBillingAuditResolveContext,\n): { id: string; kind: \"customer\" } | undefined {\n\tconst id = context.providerCustomerId;\n\tif (typeof id !== \"string\" || id.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn { id, kind: \"customer\" };\n}\n\nfunction providerWebhookFrom(\n\tcontext: AthenaBillingAuditResolveContext,\n): { id: string; kind: \"webhook\" } | undefined {\n\tconst id = context.providerWebhookId;\n\tif (typeof id !== \"string\" || id.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn { id, kind: \"webhook\" };\n}\n\nconst webhookRegistrationIr = {\n\taudit: true as const,\n\tprevious: \"optional\" as const,\n\tresolveProviderSubject: providerWebhookFrom,\n\tresolveSubject: () => undefined,\n\tresult: \"resource\" as const,\n\tsubjectType: \"billing_webhook_registration\" as const,\n};\n\nexport const ATHENA_BILLING_EVENT_DEFINITIONS = {\n\t\"billing.document.ownership.conflict\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"resource\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.document.ownership.resolved\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"optional\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"resource\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.reconciliation.cursor.reset\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"optional\",\n\t\tresolveProviderSubject: () => undefined,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.reconciliation.failed\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"optional\",\n\t\tresolveProviderSubject: (context) =>\n\t\t\tproviderCustomerFrom(context) ?? providerWebhookFrom(context),\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.subject.binding.activated\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"resource\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.subject.binding.conflict\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"resource\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.subject.binding.created\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"resource\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.subject.binding.revoked\": {\n\t\taudit: true,\n\t\tmutationKind: \"delete\",\n\t\tprevious: \"required\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.webhook.registration.created\": {\n\t\t...webhookRegistrationIr,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t},\n\t\"billing.webhook.registration.disabled\": {\n\t\t...webhookRegistrationIr,\n\t\tmutationKind: \"update\",\n\t},\n\t\"billing.webhook.registration.drift_detected\": {\n\t\t...webhookRegistrationIr,\n\t\tmutationKind: \"action\",\n\t},\n\t\"billing.webhook.registration.secret_rotated\": {\n\t\t...webhookRegistrationIr,\n\t\tmutationKind: \"update\",\n\t},\n\t\"billing.webhook.registration.updated\": {\n\t\t...webhookRegistrationIr,\n\t\tmutationKind: \"update\",\n\t},\n} as const satisfies Record<AthenaBillingAuditEvent, AthenaBillingEventDefinition>;\n\nexport function billingEventDefinition(\n\tevent: AthenaBillingAuditEvent,\n): AthenaBillingEventDefinition {\n\treturn ATHENA_BILLING_EVENT_DEFINITIONS[event];\n}\n","import type { AthenaBillingEventDefinition } from \"./events.ts\";\nimport type { AthenaBillingAuditEntry } from \"./types.ts\";\n\nconst BILLING_AUDIT_UUID =\n\t/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport class AthenaBillingAuditError extends Error {\n\treadonly code: string;\n\n\tconstructor(code: string) {\n\t\tsuper(code);\n\t\tthis.name = \"AthenaBillingAuditError\";\n\t\tthis.code = code;\n\t}\n}\n\nexport function assertBillingAuditUuid(value: string, code: string): void {\n\tif (!BILLING_AUDIT_UUID.test(value)) {\n\t\tthrow new AthenaBillingAuditError(code);\n\t}\n}\n\nexport function mintBillingAuditIdentity(): {\n\teventId: string;\n\tid: string;\n} {\n\treturn {\n\t\teventId: crypto.randomUUID(),\n\t\tid: crypto.randomUUID(),\n\t};\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn null;\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction isPresentSnapshot(value: unknown): boolean {\n\tif (value === undefined || value === null) {\n\t\treturn false;\n\t}\n\tconst record = asRecord(value);\n\tif (record && Object.keys(record).length === 0) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isRunLevelAuditEvent(event: AthenaBillingAuditEntry[\"event\"]): boolean {\n\treturn (\n\t\tevent === \"billing.reconciliation.cursor.reset\" ||\n\t\tevent === \"billing.reconciliation.failed\"\n\t);\n}\n\nexport function validateBillingAuditEntry(\n\tentry: AthenaBillingAuditEntry,\n\tir: Pick<\n\t\tAthenaBillingEventDefinition,\n\t\t\"mutationKind\" | \"previous\" | \"result\" | \"subjectType\"\n\t>,\n): void {\n\tassertBillingAuditUuid(entry.id, \"ATHENA_BILLING_AUDIT_INVALID_ID\");\n\tassertBillingAuditUuid(entry.eventId, \"ATHENA_BILLING_AUDIT_INVALID_EVENT_ID\");\n\tassertBillingAuditUuid(\n\t\tentry.connectionId,\n\t\t\"ATHENA_BILLING_AUDIT_INVALID_CONNECTION_ID\",\n\t);\n\tif (entry.outcome !== \"success\" && entry.outcome !== \"failure\") {\n\t\tthrow new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_INVALID_OUTCOME\");\n\t}\n\tif (!isPresentSnapshot(entry.result)) {\n\t\tthrow new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_RESULT_REQUIRED\");\n\t}\n\tif (\n\t\tentry.outcome === \"success\" &&\n\t\tir.result === \"resource\" &&\n\t\tasRecord(entry.result) === null\n\t) {\n\t\tthrow new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_INVALID_RESULT\");\n\t}\n\tif (\n\t\tentry.outcome === \"success\" &&\n\t\tir.previous === \"required\" &&\n\t\t!isPresentSnapshot(entry.previous)\n\t) {\n\t\tthrow new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_PREVIOUS_REQUIRED\");\n\t}\n\tif (\n\t\t!isRunLevelAuditEvent(entry.event) &&\n\t\tir.subjectType !== \"billing_webhook_registration\"\n\t) {\n\t\tif (\n\t\t\ttypeof entry.subject?.id !== \"string\" ||\n\t\t\tentry.subject.id.length === 0 ||\n\t\t\t(entry.subject.kind !== \"user\" && entry.subject.kind !== \"organization\")\n\t\t) {\n\t\t\tthrow new AthenaBillingAuditError(\n\t\t\t\t\"ATHENA_BILLING_AUDIT_SUBJECT_REQUIRED\",\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\ttypeof entry.connectionId !== \"string\" ||\n\t\tentry.connectionId.length === 0 ||\n\t\ttypeof entry.provider !== \"string\" ||\n\t\tentry.provider.length === 0\n\t) {\n\t\tthrow new AthenaBillingAuditError(\n\t\t\t\"ATHENA_BILLING_AUDIT_CONNECTION_REQUIRED\",\n\t\t);\n\t}\n\tif (ir.subjectType === \"billing_webhook_registration\") {\n\t\tif (\n\t\t\ttypeof entry.providerSubject?.id !== \"string\" ||\n\t\t\tentry.providerSubject.id.length === 0 ||\n\t\t\tentry.providerSubject.kind !== \"webhook\"\n\t\t) {\n\t\t\tthrow new AthenaBillingAuditError(\n\t\t\t\t\"ATHENA_BILLING_AUDIT_PROVIDER_SUBJECT_REQUIRED\",\n\t\t\t);\n\t\t}\n\t} else if (\n\t\t!isRunLevelAuditEvent(entry.event) &&\n\t\t(typeof entry.providerSubject?.id !== \"string\" ||\n\t\t\tentry.providerSubject.id.length === 0 ||\n\t\t\tentry.providerSubject.kind !== \"customer\")\n\t) {\n\t\tthrow new AthenaBillingAuditError(\n\t\t\t\"ATHENA_BILLING_AUDIT_PROVIDER_SUBJECT_REQUIRED\",\n\t\t);\n\t}\n}\n","import type { BillingImportPlan } from \"../import/types.ts\";\nimport type { AthenaBillingAuditWriter } from \"../observability/audit.ts\";\nimport {\n\tATHENA_BILLING_EVENT_DEFINITIONS,\n\tbillingEventDefinition,\n} from \"../observability/events.ts\";\nimport type {\n\tAthenaBillingAuditEntry,\n\tAthenaBillingAuditEvent,\n\tBillingReconciliationContext,\n} from \"../observability/types.ts\";\nimport {\n\tmintBillingAuditIdentity,\n\tvalidateBillingAuditEntry,\n} from \"../observability/validate.ts\";\nimport type { BillingSubjectBindingRecord } from \"../subject/repository.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\n\nexport async function emitBillingImportSemanticAudit(input: {\n\tapplied: \"activated\" | \"conflict\" | \"created\" | \"noop\";\n\tcontext: BillingReconciliationContext;\n\tplan: BillingImportPlan;\n\tprevious: BillingSubjectBindingRecord | null;\n\tprojectionConflicts: number;\n\twriter: AthenaBillingAuditWriter;\n}): Promise<void> {\n\tconst events: AthenaBillingAuditEvent[] = [];\n\tif (input.applied === \"created\") {\n\t\tevents.push(\"billing.subject.binding.created\");\n\t} else if (input.applied === \"activated\") {\n\t\tevents.push(\"billing.subject.binding.activated\");\n\t} else if (input.applied === \"conflict\") {\n\t\tevents.push(\"billing.subject.binding.conflict\");\n\t}\n\tif (input.projectionConflicts > 0) {\n\t\tevents.push(\"billing.document.ownership.conflict\");\n\t} else if (\n\t\t(input.applied === \"created\" || input.applied === \"activated\") &&\n\t\tinput.plan.subject\n\t) {\n\t\tevents.push(\"billing.document.ownership.resolved\");\n\t}\n\tfor (const event of events) {\n\t\tconst ir = billingEventDefinition(event);\n\t\tconst resolveContext = {\n\t\t\tconnectionId: input.context.connectionId,\n\t\t\tprevious: input.previous,\n\t\t\tprovider: input.context.provider,\n\t\t\tproviderCustomerId: input.plan.providerCustomerId,\n\t\t\tresult: {\n\t\t\t\taction: input.applied,\n\t\t\t\tdecision: input.plan.decision,\n\t\t\t\tsubject: input.plan.subject,\n\t\t\t},\n\t\t\tsubject: input.plan.subject,\n\t\t};\n\t\tconst subject = ir.resolveSubject(resolveContext);\n\t\tconst providerSubject = ir.resolveProviderSubject(resolveContext);\n\t\tconst entry: AthenaBillingAuditEntry = {\n\t\t\tactor: { kind: \"system\" },\n\t\t\tcausationId: input.context.causationId,\n\t\t\tconnectionId: input.context.connectionId,\n\t\t\tcorrelationId: input.context.correlationId,\n\t\t\tevent,\n\t\t\t...mintBillingAuditIdentity(),\n\t\t\toutcome: \"success\",\n\t\t\tprevious: input.previous ?? undefined,\n\t\t\tprovider: input.context.provider,\n\t\t\tproviderSubject,\n\t\t\tresult: resolveContext.result,\n\t\t\tsubject,\n\t\t\ttraceId: input.context.traceId,\n\t\t};\n\t\tvalidateBillingAuditEntry(entry, ir);\n\t\tawait input.writer.write(entry);\n\t}\n}\n\nexport async function emitBillingAuditFailure(input: {\n\tcontext: BillingReconciliationContext;\n\terror: unknown;\n\tproviderCustomerId?: string;\n\tproviderWebhookId?: string;\n\tsubject?: BillingSubjectRef;\n\twriter: AthenaBillingAuditWriter;\n}): Promise<void> {\n\tconst ir = billingEventDefinition(\"billing.reconciliation.failed\");\n\tconst resolveContext = {\n\t\tconnectionId: input.context.connectionId,\n\t\tprovider: input.context.provider,\n\t\tproviderCustomerId: input.providerCustomerId,\n\t\tproviderWebhookId: input.providerWebhookId,\n\t\tresult: {\n\t\t\terror:\n\t\t\t\tinput.error instanceof Error\n\t\t\t\t\t? input.error.message\n\t\t\t\t\t: \"billing operation failed\",\n\t\t},\n\t\tsubject: input.subject,\n\t};\n\tconst entry: AthenaBillingAuditEntry = {\n\t\tactor: { kind: \"system\" },\n\t\tcausationId: input.context.causationId,\n\t\tconnectionId: input.context.connectionId,\n\t\tcorrelationId: input.context.correlationId,\n\t\tevent: \"billing.reconciliation.failed\",\n\t\t...mintBillingAuditIdentity(),\n\t\toutcome: \"failure\",\n\t\tprovider: input.context.provider,\n\t\tproviderSubject: ir.resolveProviderSubject(resolveContext),\n\t\tresult: resolveContext.result,\n\t\tsubject: ir.resolveSubject(resolveContext),\n\t\ttraceId: input.context.traceId,\n\t};\n\tvalidateBillingAuditEntry(entry, ir);\n\tawait input.writer.write(entry);\n}\n\nexport function billingAuditEventCatalogKeys(): readonly string[] {\n\treturn Object.keys(ATHENA_BILLING_EVENT_DEFINITIONS);\n}\n","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\n\nexport const BILLING_RECONCILIATION_RESOURCE_CUSTOMERS = \"customers\" as const;\nexport const BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS =\n\t\"webhook_registrations\" as const;\n\nexport interface BillingReconciliationLease {\n\tconnectionId: string;\n\tepoch: number;\n\texpiresAt: Date;\n\townerId: string;\n\tresourceKind: string;\n}\n\nexport interface BillingReconciliationLeaseStore {\n\tacquire(input: {\n\t\tconnectionId: string;\n\t\townerId: string;\n\t\tresourceKind?: string;\n\t\tttlMs?: number;\n\t}): Promise<BillingReconciliationLease | null>;\n\theartbeat(input: {\n\t\tconnectionId: string;\n\t\tepoch?: number;\n\t\townerId: string;\n\t\tresourceKind?: string;\n\t\tttlMs?: number;\n\t}): Promise<boolean>;\n\trelease(input: {\n\t\tconnectionId: string;\n\t\townerId: string;\n\t\tresourceKind?: string;\n\t}): Promise<void>;\n}\n\nconst DEFAULT_TTL_MS = 120_000;\nexport const BILLING_RECONCILIATION_LEASE_TTL_BUFFER_MS = 30_000;\n\nexport function billingReconciliationLeaseTtlMs(maxDurationMs: number): number {\n\treturn maxDurationMs + BILLING_RECONCILIATION_LEASE_TTL_BUFFER_MS;\n}\n\nexport function createMemoryBillingReconciliationLeaseStore(now?: () => Date): {\n\tleases: Map<string, BillingReconciliationLease>;\n\tstore: BillingReconciliationLeaseStore;\n} {\n\tconst clock = now ?? (() => new Date());\n\tconst leases = new Map<string, BillingReconciliationLease>();\n\tconst keyOf = (connectionId: string, resourceKind: string) =>\n\t\t`${connectionId}:${resourceKind}`;\n\treturn {\n\t\tleases,\n\t\tstore: {\n\t\t\tasync acquire(input) {\n\t\t\t\tconst resourceKind =\n\t\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\t\tconst key = keyOf(input.connectionId, resourceKind);\n\t\t\t\tconst existing = leases.get(key);\n\t\t\t\tconst instant = clock();\n\t\t\t\tif (existing && existing.expiresAt > instant) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n\t\t\t\tconst nextEpoch = existing ? existing.epoch + 1 : 1;\n\t\t\t\tconst lease: BillingReconciliationLease = {\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tepoch: nextEpoch,\n\t\t\t\t\texpiresAt: new Date(instant.getTime() + ttlMs),\n\t\t\t\t\townerId: input.ownerId,\n\t\t\t\t\tresourceKind,\n\t\t\t\t};\n\t\t\t\tleases.set(key, lease);\n\t\t\t\treturn lease;\n\t\t\t},\n\t\t\tasync heartbeat(input) {\n\t\t\t\tconst resourceKind =\n\t\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\t\tconst key = keyOf(input.connectionId, resourceKind);\n\t\t\t\tconst existing = leases.get(key);\n\t\t\t\tif (!existing || existing.ownerId !== input.ownerId) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (input.epoch != null && existing.epoch !== input.epoch) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst instant = clock();\n\t\t\t\tif (existing.expiresAt <= instant) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n\t\t\t\texisting.expiresAt = new Date(instant.getTime() + ttlMs);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tasync release(input) {\n\t\t\t\tconst resourceKind =\n\t\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\t\tconst key = keyOf(input.connectionId, resourceKind);\n\t\t\t\tconst existing = leases.get(key);\n\t\t\t\tif (existing && existing.ownerId === input.ownerId) {\n\t\t\t\t\tleases.delete(key);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingReconciliationLeaseStore(\n\tsql: BillingSqlExecutor,\n): BillingReconciliationLeaseStore {\n\treturn {\n\t\tasync acquire(input) {\n\t\t\tconst resourceKind =\n\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\tconst ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nINSERT INTO billing.billing_reconciliation_leases (\n\tconnection_id, resource_kind, owner_id, acquired_at, heartbeat_at, expires_at, epoch\n) VALUES (\n\t$1::uuid, $2, $3, now(), now(), now() + ($4::int * interval '1 millisecond'), 1\n)\nON CONFLICT (connection_id, resource_kind) DO UPDATE SET\n\towner_id = EXCLUDED.owner_id,\n\tacquired_at = now(),\n\theartbeat_at = now(),\n\texpires_at = EXCLUDED.expires_at,\n\tepoch = billing.billing_reconciliation_leases.epoch + 1\nWHERE billing.billing_reconciliation_leases.expires_at < now()\nRETURNING connection_id::text AS connection_id, owner_id, resource_kind, expires_at, epoch\n`,\n\t\t\t\t[input.connectionId, resourceKind, input.ownerId, ttlMs],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\tif (!row) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tconnectionId: String(row.connection_id),\n\t\t\t\tepoch: Number(row.epoch ?? 0),\n\t\t\t\texpiresAt:\n\t\t\t\t\trow.expires_at instanceof Date\n\t\t\t\t\t\t? row.expires_at\n\t\t\t\t\t\t: new Date(String(row.expires_at)),\n\t\t\t\townerId: String(row.owner_id),\n\t\t\t\tresourceKind: String(row.resource_kind),\n\t\t\t};\n\t\t},\n\t\tasync heartbeat(input) {\n\t\t\tconst resourceKind =\n\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\tconst ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nUPDATE billing.billing_reconciliation_leases SET\n\theartbeat_at = now(),\n\texpires_at = now() + ($4::int * interval '1 millisecond')\nWHERE connection_id = $1::uuid\n  AND resource_kind = $2\n  AND owner_id = $3\n  AND expires_at > now()\n  AND ($5::bigint IS NULL OR epoch = $5::bigint)\nRETURNING owner_id\n`,\n\t\t\t\t[input.connectionId, resourceKind, input.ownerId, ttlMs, input.epoch ?? null],\n\t\t\t);\n\t\t\treturn result.rows.length > 0;\n\t\t},\n\t\tasync release(input) {\n\t\t\tconst resourceKind =\n\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\tawait sql.query(\n\t\t\t\t`\nDELETE FROM billing.billing_reconciliation_leases\nWHERE connection_id = $1::uuid\n  AND resource_kind = $2\n  AND owner_id = $3\n`,\n\t\t\t\t[input.connectionId, resourceKind, input.ownerId],\n\t\t\t);\n\t\t},\n\t};\n}\n","export type BillingImportRunStatus =\n\t| \"cancelled\"\n\t| \"checkpointed\"\n\t| \"completed\"\n\t| \"completed_with_conflicts\"\n\t| \"failed\"\n\t| \"queued\"\n\t| \"running\";\n\nexport type BillingReconciliationFailureKind =\n\t| \"cursor_invalid\"\n\t| \"database_unavailable\"\n\t| \"internal\"\n\t| \"lease_lost\"\n\t| \"provider_auth_failed\"\n\t| \"provider_rate_limited\"\n\t| \"provider_unavailable\";\n\nexport interface BillingReconciliationLimits {\n\tmaxCustomers: number;\n\tmaxDurationMs: number;\n\tmaxPages: number;\n\tpageSize: number;\n}\n\nexport const DEFAULT_BILLING_RECONCILIATION_LIMITS: BillingReconciliationLimits =\n\t{\n\t\tmaxCustomers: 5000,\n\t\tmaxDurationMs: 120_000,\n\t\tmaxPages: 100,\n\t\tpageSize: 100,\n\t};\n\nexport interface ResolvedBillingProviderConnection {\n\taccountReference: string;\n\tcredentialReference: string;\n\tenvironment: \"live\" | \"test\";\n\tid: string;\n\tprovider: string;\n\tstatus: string;\n\ttestMode: boolean;\n\twebhookIngressToken?: string;\n}\n\nexport interface BillingImportPageResult {\n\tbindingsActivated: number;\n\tbindingsCreated: number;\n\tconflicts: number;\n\tcursorAfter: string | null;\n\tcursorBefore: string | null;\n\tcustomersScanned: number;\n\thasMore: boolean;\n\tplans: readonly import(\"../import/types.ts\").BillingImportPlan[];\n\tskipped: number;\n}\n\nexport interface BillingReconciliationRunResult {\n\tbindingsActivated: number;\n\tbindingsCreated: number;\n\tconflicts: number;\n\tconnectionId: string;\n\tcorrelationId: string;\n\tcursorAfter: string | null;\n\tcursorBefore: string | null;\n\tcustomersScanned: number;\n\tdryRun: boolean;\n\tenvironment: \"live\" | \"test\";\n\terrors: number;\n\thasMore: boolean;\n\tpagesProcessed: number;\n\tplans: readonly import(\"../import/types.ts\").BillingImportPlan[];\n\tprovider: string;\n\trunId?: string;\n\tskipped: number;\n\tstatus: BillingImportRunStatus | \"dry_run\";\n\ttraceId: string;\n}\n\nexport interface BillingBackoffDecision {\n\tdelayMs: number;\n\tkind: BillingReconciliationFailureKind;\n\tretry: boolean;\n}\n","import type { BillingReconciliationLimits } from \"./types.ts\";\nimport { DEFAULT_BILLING_RECONCILIATION_LIMITS } from \"./types.ts\";\n\nexport function resolveBillingReconciliationLimits(\n\tinput?: Partial<BillingReconciliationLimits>,\n): BillingReconciliationLimits {\n\treturn {\n\t\tmaxCustomers:\n\t\t\tinput?.maxCustomers ?? DEFAULT_BILLING_RECONCILIATION_LIMITS.maxCustomers,\n\t\tmaxDurationMs:\n\t\t\tinput?.maxDurationMs ??\n\t\t\tDEFAULT_BILLING_RECONCILIATION_LIMITS.maxDurationMs,\n\t\tmaxPages: input?.maxPages ?? DEFAULT_BILLING_RECONCILIATION_LIMITS.maxPages,\n\t\tpageSize: input?.pageSize ?? DEFAULT_BILLING_RECONCILIATION_LIMITS.pageSize,\n\t};\n}\n\nexport function reconciliationBudgetExhausted(input: {\n\tcustomersScanned: number;\n\telapsedMs: number;\n\tlimits: BillingReconciliationLimits;\n\tpagesProcessed: number;\n}): boolean {\n\treturn (\n\t\tinput.pagesProcessed >= input.limits.maxPages ||\n\t\tinput.customersScanned >= input.limits.maxCustomers ||\n\t\tinput.elapsedMs >= input.limits.maxDurationMs\n\t);\n}\n","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type { BillingImportAuditStore } from \"../import/audit.ts\";\nimport type { BillingImportCursorStore } from \"../import/apply.ts\";\nimport type { BillingImportPageResult } from \"./types.ts\";\nimport type { AthenaBillingAuditWriter } from \"../observability/audit.ts\";\nimport type {\n\tAthenaBillingTraceRecorder,\n} from \"../observability/traces.ts\";\nimport type { BillingReconciliationContext } from \"../observability/types.ts\";\nimport { runWithBillingTrace } from \"../observability/traces.ts\";\nimport { runWithBillingReconciliationContext } from \"./context.ts\";\nimport { emitBillingAuditFailure } from \"./semantic-audit.ts\";\nimport type { BillingReconciliationLeaseStore } from \"./lease.ts\";\nimport {\n\tBILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n\tbillingReconciliationLeaseTtlMs,\n} from \"./lease.ts\";\nimport {\n\treconciliationBudgetExhausted,\n\tresolveBillingReconciliationLimits,\n} from \"./policy.ts\";\nimport {\n\tAthenaBillingReconciliationError,\n\tclassifyBillingReconciliationFailure,\n} from \"./retry.ts\";\nimport type {\n\tBillingImportRunStatus,\n\tBillingReconciliationLimits,\n\tBillingReconciliationRunResult,\n\tResolvedBillingProviderConnection,\n} from \"./types.ts\";\n\nexport interface ReconcileBillingCustomersInput {\n\taudit?: BillingImportAuditStore;\n\tconnection: ResolvedBillingProviderConnection;\n\tcontext: BillingReconciliationContext;\n\tcursors?: BillingImportCursorStore;\n\tdryRun?: boolean;\n\tlease?: BillingReconciliationLeaseStore;\n\tlimits?: Partial<BillingReconciliationLimits>;\n\townerId?: string;\n\trootSql: BillingSqlExecutor;\n\trunPage: (input: {\n\t\tcursor: string | null;\n\t\tlimit: number;\n\t\tsql: BillingSqlExecutor;\n\t}) => Promise<BillingImportPageResult>;\n\tsemanticAudit?: AthenaBillingAuditWriter;\n\ttraces?: AthenaBillingTraceRecorder;\n\ttransaction?: <T>(fn: (tx: BillingSqlExecutor) => Promise<T>) => Promise<T>;\n}\n\nexport async function reconcileBillingCustomers(\n\tinput: ReconcileBillingCustomersInput,\n): Promise<BillingReconciliationRunResult> {\n\tconst limits = resolveBillingReconciliationLimits(input.limits);\n\tconst dryRun = input.dryRun === true;\n\tconst ownerId = input.ownerId ?? crypto.randomUUID();\n\tconst startedMs = performance.now();\n\tconst cursorBefore =\n\t\t(await input.cursors?.get(input.connection.id)) ?? null;\n\tconst trace = input.traces?.start({\n\t\tcausationId: input.context.causationId,\n\t\tconnectionId: input.connection.id,\n\t\tcorrelationId: input.context.correlationId,\n\t\toperation: \"customer.reconcile\",\n\t\tprovider: input.connection.provider,\n\t\ttraceId: input.context.traceId,\n\t\ttrigger: input.context.trigger,\n\t});\n\n\tconst run = async (): Promise<BillingReconciliationRunResult> => {\n\t\tlet leaseEpoch: number | undefined;\n\t\tif (!dryRun && input.lease) {\n\t\t\tconst leasePhase = trace?.phase(\"lease\");\n\t\t\tconst acquired = await input.lease.acquire({\n\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\townerId,\n\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n\t\t\t\tttlMs: billingReconciliationLeaseTtlMs(limits.maxDurationMs),\n\t\t\t});\n\t\t\tleasePhase?.finish();\n\t\t\tif (!acquired) {\n\t\t\t\tthrow new AthenaBillingReconciliationError({\n\t\t\t\t\tkind: \"lease_lost\",\n\t\t\t\t\tmessage: \"Another reconciler holds the customers lease.\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tleaseEpoch = acquired.epoch;\n\t\t}\n\n\t\tlet runId: string | undefined;\n\t\tif (!dryRun && input.audit) {\n\t\t\tconst started = await input.audit.startRun({\n\t\t\t\tcausationId: input.context.causationId,\n\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\tcorrelationId: input.context.correlationId,\n\t\t\t\tcursorBefore,\n\t\t\t\tprovider: input.connection.provider,\n\t\t\t\tstatus: \"running\",\n\t\t\t\ttraceId: input.context.traceId,\n\t\t\t\ttrigger: input.context.trigger,\n\t\t\t});\n\t\t\trunId = started.id;\n\t\t}\n\n\t\tlet pagesProcessed = 0;\n\t\tlet customersScanned = 0;\n\t\tlet bindingsCreated = 0;\n\t\tlet bindingsActivated = 0;\n\t\tlet conflicts = 0;\n\t\tlet skipped = 0;\n\t\tlet cursor = cursorBefore;\n\t\tlet cursorAfter = cursorBefore;\n\t\tlet hasMore = true;\n\t\tconst plans: BillingImportPageResult[\"plans\"][number][] = [];\n\t\tlet status: BillingImportRunStatus = \"running\";\n\n\t\ttry {\n\t\t\twhile (hasMore) {\n\t\t\t\tif (\n\t\t\t\t\tpagesProcessed > 0 &&\n\t\t\t\t\treconciliationBudgetExhausted({\n\t\t\t\t\t\tcustomersScanned,\n\t\t\t\t\t\telapsedMs: performance.now() - startedMs,\n\t\t\t\t\t\tlimits,\n\t\t\t\t\t\tpagesProcessed,\n\t\t\t\t\t})\n\t\t\t\t) {\n\t\t\t\t\tstatus = \"checkpointed\";\n\t\t\t\t\thasMore = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst runOnce = async (sql: BillingSqlExecutor) => {\n\t\t\t\t\tif (!dryRun && input.lease) {\n\t\t\t\t\t\tconst held = await input.lease.heartbeat({\n\t\t\t\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\t\t\t\t...(leaseEpoch != null ? { epoch: leaseEpoch } : {}),\n\t\t\t\t\t\t\townerId,\n\t\t\t\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n\t\t\t\t\t\t\tttlMs: billingReconciliationLeaseTtlMs(limits.maxDurationMs),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!held) {\n\t\t\t\t\t\t\tthrow new AthenaBillingReconciliationError({\n\t\t\t\t\t\t\t\tkind: \"lease_lost\",\n\t\t\t\t\t\t\t\tmessage: \"Reconciliation lease was lost.\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn input.runPage({\n\t\t\t\t\t\tcursor,\n\t\t\t\t\t\tlimit: limits.pageSize,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tconst page = input.transaction\n\t\t\t\t\t? await input.transaction(runOnce)\n\t\t\t\t\t: await runOnce(input.rootSql);\n\n\t\t\t\tpagesProcessed += 1;\n\t\t\t\tcustomersScanned += page.customersScanned;\n\t\t\t\tbindingsCreated += page.bindingsCreated;\n\t\t\t\tbindingsActivated += page.bindingsActivated;\n\t\t\t\tconflicts += page.conflicts;\n\t\t\t\tskipped += page.skipped;\n\t\t\t\tplans.push(...page.plans);\n\t\t\t\tcursor = page.cursorAfter;\n\t\t\t\tcursorAfter = page.cursorAfter;\n\t\t\t\thasMore = page.hasMore;\n\t\t\t\ttrace?.setCounters({ customersScanned, pagesProcessed });\n\n\t\t\t\tif (!hasMore) {\n\t\t\t\t\tstatus =\n\t\t\t\t\t\tconflicts > 0 ? \"completed_with_conflicts\" : \"completed\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\treconciliationBudgetExhausted({\n\t\t\t\t\t\tcustomersScanned,\n\t\t\t\t\t\telapsedMs: performance.now() - startedMs,\n\t\t\t\t\t\tlimits,\n\t\t\t\t\t\tpagesProcessed,\n\t\t\t\t\t})\n\t\t\t\t) {\n\t\t\t\t\tstatus = \"checkpointed\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst result: BillingReconciliationRunResult = {\n\t\t\t\tbindingsActivated,\n\t\t\t\tbindingsCreated,\n\t\t\t\tconflicts,\n\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\tcorrelationId: input.context.correlationId,\n\t\t\t\tcursorAfter,\n\t\t\t\tcursorBefore,\n\t\t\t\tcustomersScanned,\n\t\t\t\tdryRun,\n\t\t\t\tenvironment: input.connection.environment,\n\t\t\t\terrors: 0,\n\t\t\t\thasMore: status === \"checkpointed\" ? true : hasMore,\n\t\t\t\tpagesProcessed,\n\t\t\t\tplans,\n\t\t\t\tprovider: input.connection.provider,\n\t\t\t\trunId,\n\t\t\t\tskipped,\n\t\t\t\tstatus: dryRun ? \"dry_run\" : status,\n\t\t\t\ttraceId: input.context.traceId,\n\t\t\t};\n\t\t\tif (!dryRun && input.audit && runId) {\n\t\t\t\tawait input.audit.completeRun({\n\t\t\t\t\tid: runId,\n\t\t\t\t\treport: {\n\t\t\t\t\t\tbindingsActivated,\n\t\t\t\t\t\tbindingsCreated,\n\t\t\t\t\t\tconflicts,\n\t\t\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\t\t\tcorrelationId: input.context.correlationId,\n\t\t\t\t\t\tcursorAfter,\n\t\t\t\t\t\tcursorBefore,\n\t\t\t\t\t\tcustomersScanned,\n\t\t\t\t\t\tdryRun,\n\t\t\t\t\t\terrors: 0,\n\t\t\t\t\t\thasMore: result.hasMore,\n\t\t\t\t\t\tpagesProcessed,\n\t\t\t\t\t\tplans,\n\t\t\t\t\t\trunId,\n\t\t\t\t\t\tskipped,\n\t\t\t\t\t\tstatus: result.status,\n\t\t\t\t\t\ttraceId: input.context.traceId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait trace?.success();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"[athena-billing] trace persistence failed\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\ttraceId: input.context.traceId,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (!dryRun && input.audit && runId) {\n\t\t\t\tconst message =\n\t\t\t\t\terror instanceof Error ? error.message : \"reconciliation failed\";\n\t\t\t\tawait input.audit.failRun({ error: message, id: runId });\n\t\t\t}\n\t\t\tif (!dryRun && input.semanticAudit) {\n\t\t\t\ttry {\n\t\t\t\t\tawait emitBillingAuditFailure({\n\t\t\t\t\t\tcontext: input.context,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\twriter: input.semanticAudit,\n\t\t\t\t\t});\n\t\t\t\t} catch (auditError) {\n\t\t\t\t\tconsole.error(\"[athena-billing] failure audit persistence failed\", {\n\t\t\t\t\t\terror:\n\t\t\t\t\t\t\tauditError instanceof Error\n\t\t\t\t\t\t\t\t? auditError.message\n\t\t\t\t\t\t\t\t: String(auditError),\n\t\t\t\t\t\ttraceId: input.context.traceId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst kind = classifyBillingReconciliationFailure(error);\n\t\t\tawait trace?.failure(error, kind === \"lease_lost\" ? \"lease\" : \"apply\");\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tif (!dryRun && input.lease) {\n\t\t\t\tawait input.lease.release({\n\t\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\t\townerId,\n\t\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\treturn runWithBillingReconciliationContext(input.context, () =>\n\t\ttrace ? runWithBillingTrace(trace, run) : run(),\n\t);\n}\n\nexport async function reconcileBillingCustomer(input: {\n\tconnection: ResolvedBillingProviderConnection;\n\tcontext: BillingReconciliationContext;\n\tdryRun?: boolean;\n\tlease?: BillingReconciliationLeaseStore;\n\trunTargetedPage: (sql: BillingSqlExecutor) => Promise<BillingImportPageResult>;\n\trootSql: BillingSqlExecutor;\n\tsemanticAudit?: AthenaBillingAuditWriter;\n\ttraces?: AthenaBillingTraceRecorder;\n\ttransaction?: <T>(fn: (tx: BillingSqlExecutor) => Promise<T>) => Promise<T>;\n}): Promise<BillingReconciliationRunResult> {\n\treturn reconcileBillingCustomers({\n\t\tconnection: input.connection,\n\t\tcontext: input.context,\n\t\tdryRun: input.dryRun,\n\t\tlease: input.lease,\n\t\tlimits: { maxCustomers: 1, maxDurationMs: 30_000, maxPages: 1, pageSize: 1 },\n\t\trootSql: input.rootSql,\n\t\trunPage: async ({ sql }) => input.runTargetedPage(sql),\n\t\tsemanticAudit: input.semanticAudit,\n\t\ttraces: input.traces,\n\t\ttransaction: input.transaction,\n\t});\n}\n","import { inheritWebhookBillingReconciliationContext } from \"./context.ts\";\nimport type { BillingReconciliationContext } from \"../observability/types.ts\";\n\nexport function billingReconciliationContextFromIngress(input: {\n\tconnectionId: string;\n\tingressId: string;\n\tcorrelationId?: string;\n\tprovider: string;\n\ttraceId?: string;\n}): BillingReconciliationContext {\n\treturn inheritWebhookBillingReconciliationContext({\n\t\tcausationId: input.ingressId,\n\t\tconnectionId: input.connectionId,\n\t\tcorrelationId: input.correlationId ?? input.ingressId,\n\t\tprovider: input.provider,\n\t\ttraceId: input.traceId ?? input.ingressId,\n\t});\n}\n","export {\n\tcurrentBillingReconciliationContext,\n\tinheritWebhookBillingReconciliationContext,\n\tmintManualBillingReconciliationContext,\n\tmintScheduledBillingReconciliationContext,\n\trunWithBillingReconciliationContext,\n} from \"./context.ts\";\nexport {\n\treconcileBillingCustomer,\n\treconcileBillingCustomers,\n} from \"./coordinator.ts\";\nexport {\n\tBILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n\tBILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n\ttype BillingReconciliationLeaseStore,\n\tcreateMemoryBillingReconciliationLeaseStore,\n} from \"./lease.ts\";\nexport {\n\treconciliationBudgetExhausted,\n\tresolveBillingReconciliationLimits,\n} from \"./policy.ts\";\nexport {\n\tAthenaBillingReconciliationError,\n\tbillingReconciliationBackoff,\n\tclassifyBillingReconciliationFailure,\n} from \"./retry.ts\";\nexport {\n\ttype BillingImportExecutionMode,\n\tregisterBillingReconciliationScheduler,\n} from \"./scheduler.ts\";\nexport {\n\ttype BillingImportPageResult,\n\ttype BillingImportRunStatus,\n\ttype BillingReconciliationFailureKind,\n\ttype BillingReconciliationLimits,\n\ttype BillingReconciliationRunResult,\n\tDEFAULT_BILLING_RECONCILIATION_LIMITS,\n\ttype ResolvedBillingProviderConnection,\n} from \"./types.ts\";\nexport { billingReconciliationContextFromIngress } from \"./webhook.ts\";\n","import type {\n\tMollieBillingProviderConfig,\n\tNormalizedMollieBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport { normalizeMollieBillingProviderConfig } from \"../config.ts\";\n\nfunction isNormalizedMollieConfig(\n\tconfig: MollieBillingProviderConfig | NormalizedMollieBillingProviderConfig,\n): config is NormalizedMollieBillingProviderConfig {\n\treturn \"provider\" in config && config.provider === \"mollie\";\n}\n\nexport function normalizeMollieRuntimeConfig(\n\tconfig: MollieBillingProviderConfig | NormalizedMollieBillingProviderConfig,\n): NormalizedMollieBillingProviderConfig {\n\tif (isNormalizedMollieConfig(config)) {\n\t\treturn config;\n\t}\n\treturn normalizeMollieBillingProviderConfig(config);\n}\n","import { AthenaBillingCapabilityError } from \"../../../../errors.ts\";\nimport type { MollieBillingCredentialKind } from \"../../../../providers/types.ts\";\nimport type { BillingPayment } from \"../../../../types.ts\";\n\nexport function resolveMollieRequestProfileId(input: {\n\tconfiguredProfileId?: string | null;\n\tcredentialKind: MollieBillingCredentialKind;\n\trequestedProfileId?: string | null;\n}): string | undefined {\n\tif (input.credentialKind === \"api_key\") {\n\t\treturn undefined;\n\t}\n\tconst requested = input.requestedProfileId;\n\tif (requested != null && requested.length > 0) {\n\t\treturn requested;\n\t}\n\tconst configured = input.configuredProfileId;\n\tif (configured != null && configured.length > 0) {\n\t\treturn configured;\n\t}\n\treturn undefined;\n}\n\nexport function mollieCreateHasProfileSelector(input: {\n\tconfiguredProfileId?: string | null;\n\tcredentialKind?: string | null;\n\trequestedProfileId?: string | null;\n}): boolean {\n\tif (input.credentialKind == null || input.credentialKind === \"api_key\") {\n\t\treturn true;\n\t}\n\treturn (\n\t\tresolveMollieRequestProfileId({\n\t\t\tconfiguredProfileId: input.configuredProfileId,\n\t\t\tcredentialKind: \"advanced_access_token\",\n\t\t\trequestedProfileId: input.requestedProfileId,\n\t\t}) != null\n\t);\n}\n\nexport function requestedMollieProfileId(\n\trequestedProfileId?: string | null,\n): string | undefined {\n\tif (requestedProfileId != null && requestedProfileId.length > 0) {\n\t\treturn requestedProfileId;\n\t}\n\treturn undefined;\n}\n\nexport function rejectUnenforcedMollieProfileTarget(input: {\n\toperation: string;\n\trequestedProfileId?: string | null;\n}): void {\n\tif (requestedMollieProfileId(input.requestedProfileId) == null) {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation: input.operation,\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\nexport function assertMolliePaymentMatchesSelectedProfile(input: {\n\toperation: string;\n\tpayment: BillingPayment;\n\tselectedProfileId: string | undefined;\n}): void {\n\tif (input.selectedProfileId == null) {\n\t\treturn;\n\t}\n\tif (input.payment.providerProfileId !== input.selectedProfileId) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: \"missing_provider_scope\",\n\t\t});\n\t}\n}\n","import type { BillingProviderErrorKind } from \"../errors.ts\";\nimport type { BillingRetryDisposition } from \"../errors.ts\";\n\nimport { BILLING_OPERATION_SAFETY } from \"./registry.ts\";\nimport type {\n\tBillingExecutionCertainty,\n\tBillingOperationSafetyProfile,\n\tBillingRequestDispatchState,\n\tBillingRetryDispositionInput,\n} from \"./types.ts\";\n\nconst TRANSIENT_KINDS = new Set<string>([\n\t\"network\",\n\t\"timeout\",\n\t\"rate_limited\",\n\t\"provider_unavailable\",\n]);\n\nfunction profileFor(\n\toperation: string,\n): BillingOperationSafetyProfile | undefined {\n\tconst table: Record<string, BillingOperationSafetyProfile> =\n\t\tBILLING_OPERATION_SAFETY;\n\treturn table[operation];\n}\n\nexport function billingExecutionCertainty(input: {\n\tkind: string;\n\trequestDispatchState: BillingRequestDispatchState;\n}): BillingExecutionCertainty {\n\tif (input.requestDispatchState === \"not_dispatched\") {\n\t\treturn \"definitely_not_executed\";\n\t}\n\tswitch (input.kind) {\n\t\tcase \"authentication\":\n\t\tcase \"authorization\":\n\t\tcase \"invalid_request\":\n\t\tcase \"not_found\":\n\t\tcase \"unsupported_operation\":\n\t\tcase \"unsupported_currency\":\n\t\tcase \"unsupported_payment_method\":\n\t\t\treturn \"definitely_not_executed\";\n\t\tcase \"customer_action_required\":\n\t\tcase \"payment_declined\":\n\t\tcase \"idempotency_conflict\":\n\t\tcase \"resource_state_conflict\":\n\t\tcase \"conflict\":\n\t\t\treturn \"definitely_executed\";\n\t\tcase \"serialization\":\n\t\t\treturn input.requestDispatchState === \"dispatched\"\n\t\t\t\t? \"definitely_executed\"\n\t\t\t\t: \"definitely_not_executed\";\n\t\tcase \"rate_limited\":\n\t\t\treturn input.requestDispatchState === \"unknown\"\n\t\t\t\t? \"outcome_unknown\"\n\t\t\t\t: \"definitely_not_executed\";\n\t\tcase \"timeout\":\n\t\tcase \"network\":\n\t\tcase \"provider_unavailable\":\n\t\tcase \"unknown\":\n\t\t\treturn \"outcome_unknown\";\n\t\tdefault:\n\t\t\treturn input.requestDispatchState === \"dispatched\"\n\t\t\t\t? \"outcome_unknown\"\n\t\t\t\t: \"definitely_not_executed\";\n\t}\n}\n\nfunction isFinancialWrite(profile: BillingOperationSafetyProfile): boolean {\n\treturn (\n\t\tprofile.mutationClass === \"financial_create\" ||\n\t\tprofile.mutationClass === \"financial_cancel\"\n\t);\n}\n\n/**\n * Operation-aware retry policy. Kind-only helpers are forbidden.\n */\nexport function billingRetryDisposition(\n\tinput: BillingRetryDispositionInput,\n): BillingRetryDisposition {\n\tconst kind = input.kind as BillingProviderErrorKind;\n\tif (kind === \"customer_action_required\" || kind === \"payment_declined\") {\n\t\treturn \"customer_action_required\";\n\t}\n\tif (kind === \"idempotency_conflict\" || kind === \"resource_state_conflict\") {\n\t\treturn \"reconcile_first\";\n\t}\n\tconst certainty = billingExecutionCertainty({\n\t\tkind: input.kind,\n\t\trequestDispatchState: input.requestDispatchState,\n\t});\n\tconst profile = profileFor(input.operation);\n\tconst transient = TRANSIENT_KINDS.has(input.kind);\n\tif (profile?.mutationClass === \"read\" && transient) {\n\t\treturn \"safe\";\n\t}\n\tif (certainty === \"definitely_not_executed\" && transient) {\n\t\treturn \"safe\";\n\t}\n\tif (certainty === \"definitely_executed\") {\n\t\treturn \"never\";\n\t}\n\tif (certainty === \"outcome_unknown\") {\n\t\tconst replayOk =\n\t\t\tprofile?.replayGuarantee === \"provider_same_key\" &&\n\t\t\tinput.idempotencyKeyPresent === true;\n\t\tif (profile != null && isFinancialWrite(profile)) {\n\t\t\tif (profile.mutationClass === \"financial_create\" && replayOk) {\n\t\t\t\treturn \"safe\";\n\t\t\t}\n\t\t\treturn \"reconcile_first\";\n\t\t}\n\t\tif (replayOk) {\n\t\t\treturn \"safe\";\n\t\t}\n\t\treturn \"reconcile_first\";\n\t}\n\treturn \"never\";\n}\n","import {\n\tAthenaBillingProviderRequestError,\n\tbillingProviderErrorKindFromHttp,\n} from \"../../../../errors.ts\";\nimport type { BillingProviderErrorKind } from \"../../../../errors.ts\";\nimport type { BillingOperation } from \"../../../capabilities.ts\";\nimport { BILLING_OPERATION_SAFETY } from \"../../../../safety/registry.ts\";\nimport { billingRetryDisposition } from \"../../../../safety/retry.ts\";\nimport type { BillingRequestDispatchState } from \"../../../../safety/types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value\n\t\t: undefined;\n}\n\nfunction sanitizeDetails(value: unknown): unknown {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => sanitizeDetails(entry));\n\t}\n\tif (!isRecord(value)) {\n\t\treturn value;\n\t}\n\tconst next: Record<string, unknown> = {};\n\tfor (const [key, entry] of Object.entries(value)) {\n\t\tconst normalized = key.toLowerCase();\n\t\tif (\n\t\t\tnormalized.includes(\"authorization\") ||\n\t\t\tnormalized.includes(\"api_key\") ||\n\t\t\tnormalized.includes(\"apikey\") ||\n\t\t\tnormalized.includes(\"secret\") ||\n\t\t\tnormalized.includes(\"token\") ||\n\t\t\tnormalized.includes(\"password\")\n\t\t) {\n\t\t\tnext[key] = \"[REDACTED]\";\n\t\t\tcontinue;\n\t\t}\n\t\tnext[key] = sanitizeDetails(entry);\n\t}\n\treturn next;\n}\n\nfunction isBillingOperation(operation: string): operation is BillingOperation {\n\treturn Object.hasOwn(BILLING_OPERATION_SAFETY, operation);\n}\n\nfunction asBillingOperation(operation?: string): BillingOperation {\n\tif (operation != null && isBillingOperation(operation)) {\n\t\treturn operation;\n\t}\n\treturn \"payments.get\";\n}\n\nfunction inferDispatchState(\n\tkind: BillingProviderErrorKind,\n\texplicit?: BillingRequestDispatchState,\n): BillingRequestDispatchState {\n\tif (explicit != null) {\n\t\treturn explicit;\n\t}\n\tswitch (kind) {\n\t\tcase \"network\":\n\t\tcase \"timeout\":\n\t\tcase \"provider_unavailable\":\n\t\t\treturn \"unknown\";\n\t\tcase \"serialization\":\n\t\t\treturn \"dispatched\";\n\t\tdefault:\n\t\t\treturn \"not_dispatched\";\n\t}\n}\n\nexport function createMollieProviderRequestError(input: {\n\tstatus?: number;\n\tbody?: unknown;\n\toperation?: string;\n\tfallbackMessage: string;\n\tkind?: BillingProviderErrorKind;\n\tidempotencyKeyPresent?: boolean;\n\trequestDispatchState?: BillingRequestDispatchState;\n}): AthenaBillingProviderRequestError {\n\tconst body = isRecord(input.body) ? input.body : undefined;\n\tconst detail =\n\t\tasString(body?.detail) ??\n\t\tasString(body?.title) ??\n\t\tinput.fallbackMessage;\n\tconst kind =\n\t\tinput.kind ??\n\t\tbillingProviderErrorKindFromHttp({\n\t\t\tdetail,\n\t\t\tkey: asString(body?.type) ?? asString(body?.title),\n\t\t\tstatus: input.status,\n\t\t});\n\tconst operation = asBillingOperation(input.operation);\n\treturn new AthenaBillingProviderRequestError({\n\t\tdetails: sanitizeDetails(body ?? {}),\n\t\tkind,\n\t\tmessage: detail,\n\t\toperation: input.operation,\n\t\tprovider: \"mollie\",\n\t\tretry: billingRetryDisposition({\n\t\t\tidempotencyKeyPresent: input.idempotencyKeyPresent === true,\n\t\t\tkind,\n\t\t\toperation,\n\t\t\trequestDispatchState: inferDispatchState(\n\t\t\t\tkind,\n\t\t\t\tinput.requestDispatchState,\n\t\t\t),\n\t\t}),\n\t\tstatus: input.status,\n\t});\n}\n","import type {\n\tMollieSdkAdapterFactory,\n\tMollieSdkClient,\n\tMollieSdkClientOptions,\n\tMollieSdkConstructor,\n\tMollieSdkResourcePort,\n} from \"../../../../../providers/types.ts\";\n\nexport type {\n\tMollieSdkAdapterFactory,\n\tMollieSdkClient,\n\tMollieSdkClientOptions,\n\tMollieSdkConstructor,\n\tMollieSdkResourcePort,\n};\n\nexport const MOLLIE_SDK_REQUIRED_RESOURCES = [\n\t\"payments\",\n\t\"customers\",\n\t\"refunds\",\n\t\"paymentLinks\",\n\t\"subscriptions\",\n] as const;\n\nexport type MollieSdkRequiredResource =\n\t(typeof MOLLIE_SDK_REQUIRED_RESOURCES)[number];\n\n/** Methods Athena actually invokes on each required resource. */\nexport const MOLLIE_SDK_REQUIRED_METHODS = {\n\tcustomers: [\"create\", \"delete\", \"get\", \"list\", \"update\"],\n\tpaymentLinks: [\"create\", \"delete\", \"get\", \"list\", \"update\"],\n\tpayments: [\"cancel\", \"create\", \"get\", \"list\"],\n\trefunds: [\"cancel\", \"create\", \"get\", \"list\"],\n\tsubscriptions: [\"cancel\", \"create\", \"get\", \"list\", \"update\"],\n} as const satisfies Record<MollieSdkRequiredResource, readonly string[]>;\n\nexport const MOLLIE_SDK_INVOICE_REQUIRED_METHODS = [\"get\", \"list\"] as const;\n","import { createMollieProviderRequestError } from \"../errors.ts\";\nimport {\n\tMOLLIE_SDK_INVOICE_REQUIRED_METHODS,\n\tMOLLIE_SDK_REQUIRED_METHODS,\n\tMOLLIE_SDK_REQUIRED_RESOURCES,\n\ttype MollieSdkClient,\n} from \"./contracts.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction hasResourcePort(value: unknown): value is Record<string, unknown> {\n\treturn isRecord(value);\n}\n\nfunction hasFunctionMethod(resource: Record<string, unknown>, method: string): boolean {\n\treturn typeof resource[method] === \"function\";\n}\n\nfunction assertRequiredMethods(\n\tresource: Record<string, unknown>,\n\tlabel: string,\n\tmethods: readonly string[],\n\toperation: string,\n): void {\n\tfor (const method of methods) {\n\t\tif (!hasFunctionMethod(resource, method)) {\n\t\t\tthrow createMollieProviderRequestError({\n\t\t\t\tfallbackMessage: `Injected Mollie SDK is missing ${label}.${method} for ${operation}.`,\n\t\t\t\tkind: \"unsupported_operation\",\n\t\t\t\toperation,\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function assertMollieSdkClient(\n\tclient: unknown,\n\toperation: string,\n): MollieSdkClient {\n\tif (!isRecord(client)) {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Injected Mollie SDK is not an object for ${operation}.`,\n\t\t\tkind: \"unsupported_operation\",\n\t\t\toperation,\n\t\t});\n\t}\n\tfor (const name of MOLLIE_SDK_REQUIRED_RESOURCES) {\n\t\tconst resource = client[name];\n\t\tif (!hasResourcePort(resource)) {\n\t\t\tthrow createMollieProviderRequestError({\n\t\t\t\tfallbackMessage: `Injected Mollie SDK is missing ${name} for ${operation}.`,\n\t\t\t\tkind: \"unsupported_operation\",\n\t\t\t\toperation,\n\t\t\t});\n\t\t}\n\t\tassertRequiredMethods(\n\t\t\tresource,\n\t\t\tname,\n\t\t\tMOLLIE_SDK_REQUIRED_METHODS[name],\n\t\t\toperation,\n\t\t);\n\t}\n\tif (!hasResourcePort(client.salesInvoices)) {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Injected Mollie SDK is missing salesInvoices for ${operation}.`,\n\t\t\tkind: \"unsupported_operation\",\n\t\t\toperation,\n\t\t});\n\t}\n\tassertRequiredMethods(\n\t\tclient.salesInvoices,\n\t\t\"salesInvoices\",\n\t\tMOLLIE_SDK_INVOICE_REQUIRED_METHODS,\n\t\toperation,\n\t);\n\treturn client as unknown as MollieSdkClient;\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../../providers/types.ts\";\nimport type { BillingResolvedCredential } from \"../../../../credentials.ts\";\nimport { resolveMollieRequestProfileId } from \"../profile-target.ts\";\nimport { assertMollieSdkClient } from \"./assertions.ts\";\nimport type { MollieSdkClient, MollieSdkClientOptions } from \"./types.ts\";\n\nexport class MollieSdkClientPool {\n\tprivate readonly clients = new Map<string, MollieSdkClient>();\n\n\tconstructor(private readonly config: NormalizedMollieBillingProviderConfig) {}\n\n\tapiBaseUrl(): string {\n\t\treturn this.config.apiBaseUrl;\n\t}\n\n\tprivate construct(options: MollieSdkClientOptions): MollieSdkClient {\n\t\tconst created =\n\t\t\tthis.config.adapter != null\n\t\t\t\t? this.config.adapter(options)\n\t\t\t\t: new this.config.sdk(options);\n\t\treturn assertMollieSdkClient(created, \"mollie.sdk.construct\");\n\t}\n\n\tclientFor(input: {\n\t\tcredential: BillingResolvedCredential;\n\t\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n\t\trequestedProfileId?: string | null;\n\t}): MollieSdkClient {\n\t\tconst options = mollieSdkClientOptions({\n\t\t\tconfig: this.config,\n\t\t\tcredential: input.credential,\n\t\t\toperationScope: input.operationScope,\n\t\t\trequestedProfileId: input.requestedProfileId,\n\t\t});\n\t\tconst key = mollieSdkClientKey(options);\n\t\tconst existing = this.clients.get(key);\n\t\tif (existing != null) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst created = this.construct(options);\n\t\tthis.clients.set(key, created);\n\t\treturn created;\n\t}\n}\n\nexport function mollieSdkClientOptions(input: {\n\tconfig: NormalizedMollieBillingProviderConfig;\n\tcredential: BillingResolvedCredential;\n\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n\trequestedProfileId?: string | null;\n}): MollieSdkClientOptions {\n\tconst secret = input.credential.revealForProviderRuntime();\n\tconst kind = input.config.credentialKind;\n\tif (kind === \"api_key\") {\n\t\treturn {\n\t\t\tsecurity: { apiKey: secret },\n\t\t\tserverURL: input.config.apiBaseUrl,\n\t\t};\n\t}\n\tconst security =\n\t\tkind === \"advanced_access_token\"\n\t\t\t? { advancedAccessToken: secret }\n\t\t\t: { oAuth: secret };\n\tconst scope = input.operationScope ?? \"automatic\";\n\tconst profileId =\n\t\tscope === \"organization\"\n\t\t\t? undefined\n\t\t\t: resolveMollieRequestProfileId({\n\t\t\t\t\tconfiguredProfileId:\n\t\t\t\t\t\tinput.config.profileId ?? input.config.defaultProfileId,\n\t\t\t\t\tcredentialKind: kind,\n\t\t\t\t\trequestedProfileId: input.requestedProfileId,\n\t\t\t\t});\n\treturn {\n\t\t...(profileId != null ? { profileId } : {}),\n\t\tsecurity,\n\t\tserverURL: input.config.apiBaseUrl,\n\t\ttestmode: input.credential.environment === \"test\",\n\t};\n}\n\nexport function mollieSdkClientKey(options: MollieSdkClientOptions): string {\n\tconst security = options.security ?? {};\n\tconst scheme = security.apiKey\n\t\t? \"apiKey\"\n\t\t: security.advancedAccessToken\n\t\t\t? \"advancedAccessToken\"\n\t\t\t: \"oAuth\";\n\treturn [\n\t\tscheme,\n\t\toptions.testmode === true ? \"test\" : \"live\",\n\t\toptions.profileId ?? \"\",\n\t\toptions.serverURL ?? \"\",\n\t].join(\":\");\n}\n","import type { BillingImportPlan, BillingImportRunReport } from \"./types.ts\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\n\nexport interface BillingImportAuditStore {\n\tcompleteRun(input: {\n\t\tid: string;\n\t\treport: BillingImportRunReport;\n\t}): Promise<void>;\n\tfailRun(input: { id: string; error: string }): Promise<void>;\n\trecordCandidate(input: {\n\t\tbindingId?: string;\n\t\tcorrelationId?: string;\n\t\tplan: BillingImportPlan;\n\t\trunId: string;\n\t\ttraceId?: string;\n\t}): Promise<void>;\n\tstartRun(input: {\n\t\tcausationId?: string;\n\t\tconnectionId: string;\n\t\tcorrelationId?: string;\n\t\tcursorBefore?: string | null;\n\t\tprovider: string;\n\t\tstatus: \"running\" | \"dry_run\";\n\t\ttraceId?: string;\n\t\ttrigger?: string;\n\t}): Promise<{ id: string }>;\n}\n\nlet nextAuditId = 1;\n\nexport function createMemoryBillingImportAuditStore(): BillingImportAuditStore & {\n\tcandidates: BillingImportPlan[];\n\truns: Array<{\n\t\tcompleted?: BillingImportRunReport;\n\t\terror?: string;\n\t\tid: string;\n\t\tstatus: string;\n\t}>;\n} {\n\tconst runs: Array<{\n\t\tcompleted?: BillingImportRunReport;\n\t\terror?: string;\n\t\tid: string;\n\t\tstatus: string;\n\t}> = [];\n\tconst candidates: BillingImportPlan[] = [];\n\treturn {\n\t\tcandidates,\n\t\truns,\n\t\tasync startRun(input) {\n\t\t\tnextAuditId += 1;\n\t\t\tconst id = `run_${nextAuditId}`;\n\t\t\truns.push({ id, status: input.status });\n\t\t\treturn { id };\n\t\t},\n\t\tasync recordCandidate(input) {\n\t\t\tcandidates.push(input.plan);\n\t\t},\n\t\tasync completeRun(input) {\n\t\t\tconst row = runs.find((item) => item.id === input.id);\n\t\t\tif (!row) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trow.status =\n\t\t\t\tinput.report.status ??\n\t\t\t\t(input.report.dryRun ? \"dry_run\" : \"completed\");\n\t\t\trow.completed = input.report;\n\t\t},\n\t\tasync failRun(input) {\n\t\t\tconst row = runs.find((item) => item.id === input.id);\n\t\t\tif (!row) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trow.status = \"failed\";\n\t\t\trow.error = input.error;\n\t\t},\n\t};\n}\n\nfunction jsonValue(value: unknown): string {\n\treturn JSON.stringify(value ?? {});\n}\n\nexport function createPostgresBillingImportAuditStore(\n\tsql: BillingSqlExecutor,\n): BillingImportAuditStore {\n\treturn {\n\t\tasync startRun(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`INSERT INTO billing.billing_import_runs (\n\t\t\t\t\tconnection_id, provider, status, cursor_before, metadata,\n\t\t\t\t\ttrace_id, correlation_id, causation_id, trigger\n\t\t\t\t) VALUES ($1::uuid, $2, $3, $4, '{}'::jsonb, $5, $6, $7, $8)\n\t\t\t\tRETURNING id`,\n\t\t\t\t[\n\t\t\t\t\tinput.connectionId,\n\t\t\t\t\tinput.provider,\n\t\t\t\t\tinput.status,\n\t\t\t\t\tinput.cursorBefore ?? null,\n\t\t\t\t\tinput.traceId ?? null,\n\t\t\t\t\tinput.correlationId ?? null,\n\t\t\t\t\tinput.causationId ?? null,\n\t\t\t\t\tinput.trigger ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t\tconst id = result.rows[0]?.id;\n\t\t\tif (typeof id !== \"string\" || id.length === 0) {\n\t\t\t\tthrow new Error(\"Failed to start billing import run.\");\n\t\t\t}\n\t\t\tawait sql.query(\n\t\t\t\t`INSERT INTO billing.billing_import_state (\n\t\t\t\t\tconnection_id, resource_kind, last_started_at, last_error\n\t\t\t\t) VALUES ($1::uuid, 'customers', now(), NULL)\n\t\t\t\tON CONFLICT (connection_id, resource_kind) DO UPDATE SET\n\t\t\t\t\tlast_started_at = now(),\n\t\t\t\t\tlast_error = NULL`,\n\t\t\t\t[input.connectionId],\n\t\t\t);\n\t\t\treturn { id };\n\t\t},\n\t\tasync recordCandidate(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`INSERT INTO billing.billing_import_candidates (\n\t\t\t\t\timport_run_id,\n\t\t\t\t\tconnection_id,\n\t\t\t\t\tprovider_customer_id,\n\t\t\t\t\tsubject_kind,\n\t\t\t\t\tsubject_id,\n\t\t\t\t\tconfidence,\n\t\t\t\t\tdecision,\n\t\t\t\t\tevidence,\n\t\t\t\t\treason,\n\t\t\t\t\tresolved_at,\n\t\t\t\t\ttrace_id,\n\t\t\t\t\tcorrelation_id,\n\t\t\t\t\tbinding_id\n\t\t\t\t) VALUES (\n\t\t\t\t\t$1::uuid, $2::uuid, $3, $4, $5, $6, $7, $8::jsonb, $9,\n\t\t\t\t\tCASE WHEN $10 THEN now() ELSE NULL END,\n\t\t\t\t\t$11, $12, $13::uuid\n\t\t\t\t)`,\n\t\t\t\t[\n\t\t\t\t\tinput.runId,\n\t\t\t\t\tinput.plan.connectionId,\n\t\t\t\t\tinput.plan.providerCustomerId,\n\t\t\t\t\tinput.plan.subject?.kind ?? null,\n\t\t\t\t\tinput.plan.subject?.id ?? null,\n\t\t\t\t\tinput.plan.confidence,\n\t\t\t\t\tinput.plan.decision,\n\t\t\t\t\tjsonValue(input.plan.evidence),\n\t\t\t\t\tinput.plan.reason,\n\t\t\t\t\tinput.plan.decision === \"bind\",\n\t\t\t\t\tinput.traceId ?? null,\n\t\t\t\t\tinput.correlationId ?? null,\n\t\t\t\t\tinput.bindingId ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t\tasync completeRun(input) {\n\t\t\tconst { report } = input;\n\t\t\tawait sql.query(\n\t\t\t\t`UPDATE billing.billing_import_runs SET\n\t\t\t\t\tstatus = $2,\n\t\t\t\t\tcompleted_at = now(),\n\t\t\t\t\tcustomers_scanned = $3,\n\t\t\t\t\tbindings_created = $4,\n\t\t\t\t\tbindings_activated = $5,\n\t\t\t\t\tconflicts = $6,\n\t\t\t\t\tskipped = $7,\n\t\t\t\t\terrors = $8,\n\t\t\t\t\tcursor_after = $9,\n\t\t\t\t\tpages_processed = $10,\n\t\t\t\t\thas_more = $11\n\t\t\t\tWHERE id = $1::uuid`,\n\t\t\t\t[\n\t\t\t\t\tinput.id,\n\t\t\t\t\treport.dryRun\n\t\t\t\t\t\t? \"dry_run\"\n\t\t\t\t\t\t: (report.status ?? \"completed\"),\n\t\t\t\t\treport.customersScanned,\n\t\t\t\t\treport.bindingsCreated,\n\t\t\t\t\treport.bindingsActivated,\n\t\t\t\t\treport.conflicts,\n\t\t\t\t\treport.skipped,\n\t\t\t\t\treport.errors,\n\t\t\t\t\treport.cursorAfter ?? null,\n\t\t\t\t\treport.pagesProcessed ?? 1,\n\t\t\t\t\treport.hasMore ?? false,\n\t\t\t\t],\n\t\t\t);\n\t\t\tawait sql.query(\n\t\t\t\t`INSERT INTO billing.billing_import_state (\n\t\t\t\t\tconnection_id, resource_kind, cursor, last_completed_at, last_success_at, last_error\n\t\t\t\t) VALUES ($1::uuid, 'customers', $2, now(), now(), NULL)\n\t\t\t\tON CONFLICT (connection_id, resource_kind) DO UPDATE SET\n\t\t\t\t\tcursor = COALESCE(EXCLUDED.cursor, billing.billing_import_state.cursor),\n\t\t\t\t\tlast_completed_at = now(),\n\t\t\t\t\tlast_success_at = now(),\n\t\t\t\t\tlast_error = NULL`,\n\t\t\t\t[report.connectionId, report.cursorAfter ?? null],\n\t\t\t);\n\t\t},\n\t\tasync failRun(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`UPDATE billing.billing_import_runs SET\n\t\t\t\t\tstatus = 'failed',\n\t\t\t\t\tcompleted_at = now(),\n\t\t\t\t\terrors = GREATEST(errors, 1),\n\t\t\t\t\tmetadata = metadata || jsonb_build_object('last_error', $2::text)\n\t\t\t\tWHERE id = $1::uuid`,\n\t\t\t\t[input.id, input.error],\n\t\t\t);\n\t\t\tawait sql.query(\n\t\t\t\t`UPDATE billing.billing_import_state SET\n\t\t\t\t\tlast_completed_at = now(),\n\t\t\t\t\tlast_error = $2\n\t\t\t\tWHERE connection_id = (\n\t\t\t\t\tSELECT connection_id FROM billing.billing_import_runs WHERE id = $1::uuid\n\t\t\t\t)\n\t\t\t\tAND resource_kind = 'customers'`,\n\t\t\t\t[input.id, input.error],\n\t\t\t);\n\t\t},\n\t};\n}\n","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\n\nexport interface BillingImportDatabase extends BillingSqlExecutor {\n\ttransaction<T>(fn: (tx: BillingSqlExecutor) => Promise<T>): Promise<T>;\n}\n\nexport function createBillingSqlExecutor(input: {\n\tquery: (\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t) => Promise<{ rows: unknown[]; rowCount?: number | null }>;\n}): BillingSqlExecutor {\n\treturn {\n\t\tasync query(sql, params) {\n\t\t\tconst result = await input.query(sql, params ? [...params] : undefined);\n\t\t\treturn { rows: result.rows as Record<string, unknown>[] };\n\t\t},\n\t};\n}\n\nexport function createBillingImportDatabase(\n\tpool: AthenaPostgresPool,\n): BillingImportDatabase {\n\tconst root = createBillingSqlExecutor(pool);\n\treturn {\n\t\tquery: root.query.bind(root),\n\t\tasync transaction(fn) {\n\t\t\tconst client = await pool.connect();\n\t\t\ttry {\n\t\t\t\tawait client.query(\"BEGIN\");\n\t\t\t\tconst tx = createBillingSqlExecutor(client);\n\t\t\t\tconst value = await fn(tx);\n\t\t\t\tawait client.query(\"COMMIT\");\n\t\t\t\treturn value;\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore rollback failure; original error is authoritative\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function wrapBillingSqlExecutorAsDatabase(\n\tsql: BillingSqlExecutor,\n): BillingImportDatabase {\n\treturn {\n\t\tquery: sql.query.bind(sql),\n\t\tasync transaction(fn) {\n\t\t\treturn fn(sql);\n\t\t},\n\t};\n}\n","import type { BillingSubjectBindingRecord } from \"../subject/repository.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\n\nexport type BillingImportConfidence = \"exact\" | \"strong\" | \"ambiguous\" | \"none\";\n\nexport type BillingImportDecision =\n\t| \"bind\"\n\t| \"skip\"\n\t| \"conflict\"\n\t| \"manual_review\";\n\nexport type BillingImportEvidenceKind =\n\t| \"provider_metadata_subject_id\"\n\t| \"provider_metadata_external_id\"\n\t| \"email\"\n\t| \"historical_payment\"\n\t| \"historical_subscription\";\n\nexport interface BillingImportEvidence {\n\tkind: BillingImportEvidenceKind;\n\tvalue?: string;\n}\n\nexport interface BillingImportCandidate {\n\tconfidence: BillingImportConfidence;\n\tconnectionId: string;\n\tevidence: BillingImportEvidence[];\n\tproviderCustomerId: string;\n\tsubject?: BillingSubjectRef;\n}\n\nexport interface BillingImportCustomer {\n\temail?: string | null;\n\tmetadata: Record<string, unknown>;\n\tname?: string | null;\n\tproviderCustomerId: string;\n\traw: unknown;\n}\n\nexport interface BillingImportCustomerPage {\n\titems: readonly BillingImportCustomer[];\n\tnextCursor?: string | null;\n}\n\nexport interface BillingSubjectRecord {\n\temail?: string | null;\n\tsubject: BillingSubjectRef;\n}\n\nexport interface BillingSubjectDirectory {\n\tfindUsersByEmail(email: string): Promise<readonly BillingSubjectRecord[]>;\n\tgetById(subject: BillingSubjectRef): Promise<BillingSubjectRecord | null>;\n}\n\nexport interface BillingImportPolicy {\n\tallowSecondaryBindings: boolean;\n\tallowUniqueEmailAutoBind: boolean;\n}\n\nexport const DEFAULT_BILLING_IMPORT_POLICY: BillingImportPolicy = {\n\tallowSecondaryBindings: false,\n\tallowUniqueEmailAutoBind: false,\n};\n\nexport type BillingImportPlanAction =\n\t| \"create_active_binding\"\n\t| \"noop\"\n\t| \"resume_pending\"\n\t| \"mark_conflict\"\n\t| \"none\";\n\nexport interface BillingImportPlan {\n\taction: BillingImportPlanAction;\n\tcandidates: readonly BillingSubjectRef[];\n\tconfidence: BillingImportConfidence;\n\tconnectionId: string;\n\tdecision: BillingImportDecision;\n\tevidence: readonly BillingImportEvidence[];\n\tproviderCustomerId: string;\n\treason: string;\n\tsource: \"imported\" | \"reconciled\";\n\tsubject?: BillingSubjectRef;\n}\n\nexport interface BillingImportDocumentHint {\n\tconnectionId: string;\n\townershipStatus: \"resolved\" | \"unresolved\" | \"conflict\";\n\tproviderCustomerId: string;\n\tsubject?: BillingSubjectRef;\n}\n\nexport interface BillingImportContext {\n\tcustomer: BillingImportCustomer;\n\tconnectionId: string;\n\tdirectorySubject: BillingSubjectRecord | null;\n\tdocumentHints: readonly BillingImportDocumentHint[];\n\temailMatches: readonly BillingSubjectRecord[];\n\texistingLocator: BillingSubjectBindingRecord | null;\n\texistingPrimary: BillingSubjectBindingRecord | null;\n\tpolicy: BillingImportPolicy;\n}\n\nexport interface BillingImportRunReport {\n\tbindingsActivated: number;\n\tbindingsCreated: number;\n\tconflicts: number;\n\tconnectionId: string;\n\tcorrelationId?: string;\n\tcursorAfter?: string | null;\n\tcursorBefore?: string | null;\n\tcustomersScanned: number;\n\tdryRun: boolean;\n\tenvironment?: \"live\" | \"test\";\n\terrors: number;\n\thasMore?: boolean;\n\tpagesProcessed?: number;\n\tplans: readonly BillingImportPlan[];\n\tprovider?: string;\n\trunId?: string;\n\tskipped: number;\n\tstatus?: string;\n\ttraceId?: string;\n}\n\nexport const ATHENA_SUBJECT_KIND_METADATA_KEY = \"athenaSubjectKind\";\nexport const ATHENA_SUBJECT_ID_METADATA_KEY = \"athenaSubjectId\";\nexport const ATHENA_EXTERNAL_ID_METADATA_KEY = \"athenaExternalId\";\n","import type { BillingSubjectRef } from \"../types.ts\";\nimport {\n\tATHENA_EXTERNAL_ID_METADATA_KEY,\n\tATHENA_SUBJECT_ID_METADATA_KEY,\n\tATHENA_SUBJECT_KIND_METADATA_KEY,\n\ttype BillingImportCustomer,\n\ttype BillingImportEvidence,\n} from \"./types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function readAthenaSubjectFromMetadata(\n\tmetadata: Record<string, unknown>,\n): BillingSubjectRef | undefined {\n\tconst id = readString(metadata[ATHENA_SUBJECT_ID_METADATA_KEY]);\n\tconst kind = readString(metadata[ATHENA_SUBJECT_KIND_METADATA_KEY]);\n\tif (!id || (kind !== \"user\" && kind !== \"organization\")) {\n\t\treturn undefined;\n\t}\n\treturn { id, kind };\n}\n\nexport function collectProviderCustomerEvidence(\n\tcustomer: BillingImportCustomer,\n): BillingImportEvidence[] {\n\tconst evidence: BillingImportEvidence[] = [];\n\tconst metadata = isRecord(customer.metadata) ? customer.metadata : {};\n\tconst subject = readAthenaSubjectFromMetadata(metadata);\n\tif (subject) {\n\t\tevidence.push({\n\t\t\tkind: \"provider_metadata_subject_id\",\n\t\t\tvalue: `${subject.kind}:${subject.id}`,\n\t\t});\n\t}\n\tconst externalId = readString(metadata[ATHENA_EXTERNAL_ID_METADATA_KEY]);\n\tif (externalId) {\n\t\tevidence.push({\n\t\t\tkind: \"provider_metadata_external_id\",\n\t\t\tvalue: externalId,\n\t\t});\n\t}\n\tconst email = readString(customer.email ?? undefined);\n\tif (email) {\n\t\tevidence.push({ kind: \"email\", value: email.toLowerCase() });\n\t}\n\treturn evidence;\n}\n\nexport function subjectsEqual(\n\tleft: BillingSubjectRef,\n\tright: BillingSubjectRef,\n): boolean {\n\treturn left.kind === right.kind && left.id === right.id;\n}\n","import type { BillingSubjectBindingRecord } from \"../subject/repository.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\nimport { subjectsEqual } from \"./candidate-resolver.ts\";\nimport type { BillingImportDocumentHint, BillingImportPlan } from \"./types.ts\";\n\nexport interface BillingImportBindingStore {\n\tfindActivePrimary(input: {\n\t\tconnectionId: string;\n\t\tsubject: BillingSubjectRef;\n\t}): Promise<BillingSubjectBindingRecord | null>;\n\tfindByLocator(input: {\n\t\tconnectionId: string;\n\t\tproviderCustomerId: string;\n\t}): Promise<BillingSubjectBindingRecord | null>;\n\tinsertActive(input: {\n\t\tconnectionId: string;\n\t\temailSnapshot?: string | null;\n\t\tproviderCustomerId: string;\n\t\tsource: \"imported\" | \"reconciled\";\n\t\tsubject: BillingSubjectRef;\n\t}): Promise<BillingSubjectBindingRecord>;\n\tactivate(input: {\n\t\temailSnapshot?: string | null;\n\t\tid: string;\n\t\tsource: \"imported\" | \"reconciled\";\n\t}): Promise<void>;\n}\n\nexport interface BillingImportDocumentStore {\n\thintsForCustomer(input: {\n\t\tconnectionId: string;\n\t\tproviderCustomerId: string;\n\t}): Promise<readonly BillingImportDocumentHint[]>;\n\tprojectForBinding(input: {\n\t\tconnectionId: string;\n\t\tproviderCustomerId: string;\n\t\tsubject: BillingSubjectRef;\n\t}): Promise<{ conflicts: number; resolved: number }>;\n}\n\nexport interface BillingImportCursorStore {\n\tget(connectionId: string): Promise<string | null>;\n\tset(connectionId: string, cursor: string | null): Promise<void>;\n}\n\nexport function createMemoryBillingImportCursorStore(): BillingImportCursorStore & {\n\tcursors: Map<string, string | null>;\n} {\n\tconst cursors = new Map<string, string | null>();\n\treturn {\n\t\tcursors,\n\t\tasync get(connectionId) {\n\t\t\treturn cursors.get(connectionId) ?? null;\n\t\t},\n\t\tasync set(connectionId, cursor) {\n\t\t\tcursors.set(connectionId, cursor);\n\t\t},\n\t};\n}\n\nlet nextId = 1;\n\nfunction newId(): string {\n\tnextId += 1;\n\treturn `bind_${nextId}`;\n}\n\nexport function createMemoryBillingImportBindingStore(\n\tinitial: BillingSubjectBindingRecord[] = [],\n): BillingImportBindingStore & { records: BillingSubjectBindingRecord[] } {\n\tconst records = [...initial];\n\treturn {\n\t\trecords,\n\t\tasync findByLocator(input) {\n\t\t\treturn (\n\t\t\t\trecords.find(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\trow.connectionId === input.connectionId &&\n\t\t\t\t\t\trow.providerSubjectKind === \"customer\" &&\n\t\t\t\t\t\trow.providerSubjectId === input.providerCustomerId,\n\t\t\t\t) ?? null\n\t\t\t);\n\t\t},\n\t\tasync findActivePrimary(input) {\n\t\t\treturn (\n\t\t\t\trecords.find(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\trow.connectionId === input.connectionId &&\n\t\t\t\t\t\trow.subjectKind === input.subject.kind &&\n\t\t\t\t\t\trow.subjectId === input.subject.id &&\n\t\t\t\t\t\trow.providerSubjectKind === \"customer\" &&\n\t\t\t\t\t\trow.status === \"active\" &&\n\t\t\t\t\t\trow.isPrimary,\n\t\t\t\t) ?? null\n\t\t\t);\n\t\t},\n\t\tasync insertActive(input) {\n\t\t\tconst row: BillingSubjectBindingRecord = {\n\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\temailSnapshot: input.emailSnapshot ?? null,\n\t\t\t\tid: newId(),\n\t\t\t\tisPrimary: true,\n\t\t\t\tproviderSubjectId: input.providerCustomerId,\n\t\t\t\tproviderSubjectKind: \"customer\",\n\t\t\t\tsource: input.source,\n\t\t\t\tstatus: \"active\",\n\t\t\t\tsubjectId: input.subject.id,\n\t\t\t\tsubjectKind: input.subject.kind,\n\t\t\t};\n\t\t\trecords.push(row);\n\t\t\treturn row;\n\t\t},\n\t\tasync activate(input) {\n\t\t\tconst row = records.find((item) => item.id === input.id);\n\t\t\tif (!row) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trow.status = \"active\";\n\t\t\trow.isPrimary = true;\n\t\t\trow.source = input.source;\n\t\t\tif (input.emailSnapshot !== undefined) {\n\t\t\t\trow.emailSnapshot = input.emailSnapshot ?? null;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport async function applyBillingImportPlan(\n\tstore: BillingImportBindingStore,\n\tinput: {\n\t\temailSnapshot?: string | null;\n\t\tplan: BillingImportPlan;\n\t},\n): Promise<\"created\" | \"activated\" | \"noop\" | \"conflict\"> {\n\tconst { plan } = input;\n\tif (plan.action === \"none\" || plan.action === \"noop\") {\n\t\treturn \"noop\";\n\t}\n\tif (plan.action === \"mark_conflict\") {\n\t\treturn \"conflict\";\n\t}\n\tconst subject = plan.subject;\n\tif (!subject) {\n\t\treturn \"noop\";\n\t}\n\tconst existing = await store.findByLocator({\n\t\tconnectionId: plan.connectionId,\n\t\tproviderCustomerId: plan.providerCustomerId,\n\t});\n\tif (existing) {\n\t\tif (\n\t\t\texisting.status === \"active\" &&\n\t\t\tsubjectsEqual(subject, {\n\t\t\t\tid: existing.subjectId,\n\t\t\t\tkind: existing.subjectKind,\n\t\t\t})\n\t\t) {\n\t\t\treturn \"noop\";\n\t\t}\n\t\tif (\n\t\t\t!subjectsEqual(subject, {\n\t\t\t\tid: existing.subjectId,\n\t\t\t\tkind: existing.subjectKind,\n\t\t\t})\n\t\t) {\n\t\t\treturn \"conflict\";\n\t\t}\n\t\tif (existing.status === \"pending\" || plan.action === \"resume_pending\") {\n\t\t\tawait store.activate({\n\t\t\t\temailSnapshot: input.emailSnapshot,\n\t\t\t\tid: existing.id,\n\t\t\t\tsource: plan.source,\n\t\t\t});\n\t\t\treturn \"activated\";\n\t\t}\n\t\treturn \"noop\";\n\t}\n\tawait store.insertActive({\n\t\tconnectionId: plan.connectionId,\n\t\temailSnapshot: input.emailSnapshot,\n\t\tproviderCustomerId: plan.providerCustomerId,\n\t\tsource: plan.source,\n\t\tsubject,\n\t});\n\treturn \"created\";\n}\n","import type { BillingImportConfidence, BillingImportEvidence } from \"./types.ts\";\n\nexport function confidenceFromEvidence(\n\tevidence: readonly BillingImportEvidence[],\n\temailMatchCount: number,\n\tmetadataSubjectResolved: boolean,\n): BillingImportConfidence {\n\tif (\n\t\tevidence.some((item) => item.kind === \"provider_metadata_subject_id\") &&\n\t\tmetadataSubjectResolved\n\t) {\n\t\treturn \"exact\";\n\t}\n\tif (\n\t\tevidence.some(\n\t\t\t(item) =>\n\t\t\t\titem.kind === \"historical_payment\" ||\n\t\t\t\titem.kind === \"historical_subscription\",\n\t\t)\n\t) {\n\t\treturn \"strong\";\n\t}\n\tif (evidence.some((item) => item.kind === \"email\") && emailMatchCount === 1) {\n\t\treturn \"strong\";\n\t}\n\tif (emailMatchCount > 1) {\n\t\treturn \"ambiguous\";\n\t}\n\treturn \"none\";\n}\n","import { collectProviderCustomerEvidence, subjectsEqual } from \"./candidate-resolver.ts\";\nimport { confidenceFromEvidence } from \"./confidence.ts\";\nimport type {\n\tBillingImportContext,\n\tBillingImportPlan,\n\tBillingSubjectRecord,\n} from \"./types.ts\";\n\nfunction uniqueSubjects(\n\trecords: readonly BillingSubjectRecord[],\n): BillingSubjectRecord[] {\n\tconst seen = new Set<string>();\n\tconst out: BillingSubjectRecord[] = [];\n\tfor (const record of records) {\n\t\tconst key = `${record.subject.kind}:${record.subject.id}`;\n\t\tif (seen.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(key);\n\t\tout.push(record);\n\t}\n\treturn out;\n}\n\nexport function planBillingImport(context: BillingImportContext): BillingImportPlan {\n\tconst evidence = collectProviderCustomerEvidence(context.customer);\n\tconst connectionId = context.connectionId;\n\tconst providerCustomerId = context.customer.providerCustomerId;\n\tconst locator = context.existingLocator;\n\tconst metadataSubject = context.directorySubject?.subject;\n\tconst historicalSubjects = uniqueSubjects(\n\t\tcontext.documentHints.flatMap((hint) => {\n\t\t\tconst subject = hint.subject;\n\t\t\treturn subject == null ? [] : [{ subject }];\n\t\t}),\n\t);\n\tfor (const hint of context.documentHints) {\n\t\tif (hint.subject == null) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst kind =\n\t\t\thint.ownershipStatus === \"resolved\" && hint.subject\n\t\t\t\t? (\"historical_payment\" as const)\n\t\t\t\t: (\"historical_subscription\" as const);\n\t\tif (\n\t\t\t!evidence.some(\n\t\t\t\t(item) => item.kind === kind && item.value === hint.subject?.id,\n\t\t\t)\n\t\t) {\n\t\t\tevidence.push({ kind, value: hint.subject.id });\n\t\t}\n\t}\n\n\tif (locator) {\n\t\tif (locator.status === \"revoked\") {\n\t\t\t/* fall through to re-evaluate */\n\t\t} else if (\n\t\t\tmetadataSubject &&\n\t\t\t!subjectsEqual(metadataSubject, {\n\t\t\t\tid: locator.subjectId,\n\t\t\t\tkind: locator.subjectKind,\n\t\t\t})\n\t\t) {\n\t\t\treturn {\n\t\t\t\taction: \"mark_conflict\",\n\t\t\t\tcandidates: [\n\t\t\t\t\t{ id: locator.subjectId, kind: locator.subjectKind },\n\t\t\t\t\tmetadataSubject,\n\t\t\t\t],\n\t\t\t\tconfidence: \"none\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"conflict\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"provider customer already bound to another subject\",\n\t\t\t\tsource: \"imported\",\n\t\t\t};\n\t\t} else if (locator.status === \"active\") {\n\t\t\treturn {\n\t\t\t\taction: \"noop\",\n\t\t\t\tcandidates: [{ id: locator.subjectId, kind: locator.subjectKind }],\n\t\t\t\tconfidence: \"exact\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"skip\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"existing same binding\",\n\t\t\t\tsource: locator.source === \"reconciled\" ? \"reconciled\" : \"imported\",\n\t\t\t\tsubject: { id: locator.subjectId, kind: locator.subjectKind },\n\t\t\t};\n\t\t} else if (locator.status === \"pending\") {\n\t\t\treturn {\n\t\t\t\taction: \"resume_pending\",\n\t\t\t\tcandidates: [{ id: locator.subjectId, kind: locator.subjectKind }],\n\t\t\t\tconfidence: \"exact\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"bind\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"resume pending binding\",\n\t\t\t\tsource: \"reconciled\",\n\t\t\t\tsubject: { id: locator.subjectId, kind: locator.subjectKind },\n\t\t\t};\n\t\t} else if (locator.status === \"conflict\") {\n\t\t\treturn {\n\t\t\t\taction: \"mark_conflict\",\n\t\t\t\tcandidates: [{ id: locator.subjectId, kind: locator.subjectKind }],\n\t\t\t\tconfidence: \"none\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"conflict\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"existing locator conflict\",\n\t\t\t\tsource: \"imported\",\n\t\t\t\tsubject: { id: locator.subjectId, kind: locator.subjectKind },\n\t\t\t};\n\t\t}\n\t}\n\n\tif (\n\t\tcollectProviderCustomerEvidence(context.customer).some(\n\t\t\t(item) => item.kind === \"provider_metadata_subject_id\",\n\t\t) &&\n\t\tcontext.directorySubject == null\n\t) {\n\t\treturn {\n\t\t\taction: \"mark_conflict\",\n\t\t\tcandidates: [],\n\t\t\tconfidence: \"none\",\n\t\t\tconnectionId,\n\t\t\tdecision: \"conflict\",\n\t\t\tevidence,\n\t\t\tproviderCustomerId,\n\t\t\treason: \"provider metadata points to nonexistent subject\",\n\t\t\tsource: \"imported\",\n\t\t};\n\t}\n\n\tif (metadataSubject) {\n\t\tif (\n\t\t\tcontext.existingPrimary &&\n\t\t\t!context.policy.allowSecondaryBindings &&\n\t\t\t!subjectsEqual(metadataSubject, {\n\t\t\t\tid: context.existingPrimary.subjectId,\n\t\t\t\tkind: context.existingPrimary.subjectKind,\n\t\t\t}) &&\n\t\t\tcontext.existingPrimary.providerSubjectId !== providerCustomerId\n\t\t) {\n\t\t\treturn {\n\t\t\t\taction: \"mark_conflict\",\n\t\t\t\tcandidates: [metadataSubject],\n\t\t\t\tconfidence: \"exact\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"conflict\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"subject already has another primary customer for this connection\",\n\t\t\t\tsource: \"imported\",\n\t\t\t\tsubject: metadataSubject,\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tlocator &&\n\t\t\tlocator.status !== \"revoked\" &&\n\t\t\t!subjectsEqual(metadataSubject, {\n\t\t\t\tid: locator.subjectId,\n\t\t\t\tkind: locator.subjectKind,\n\t\t\t})\n\t\t) {\n\t\t\treturn {\n\t\t\t\taction: \"mark_conflict\",\n\t\t\t\tcandidates: [\n\t\t\t\t\t{ id: locator.subjectId, kind: locator.subjectKind },\n\t\t\t\t\tmetadataSubject,\n\t\t\t\t],\n\t\t\t\tconfidence: \"none\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"conflict\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"provider customer already bound to another subject\",\n\t\t\t\tsource: \"imported\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\taction: \"create_active_binding\",\n\t\t\tcandidates: [metadataSubject],\n\t\t\tconfidence: \"exact\",\n\t\t\tconnectionId,\n\t\t\tdecision: \"bind\",\n\t\t\tevidence,\n\t\t\tproviderCustomerId,\n\t\t\treason: \"provider metadata subject id\",\n\t\t\tsource: \"imported\",\n\t\t\tsubject: metadataSubject,\n\t\t};\n\t}\n\n\tif (historicalSubjects.length > 1) {\n\t\treturn {\n\t\t\taction: \"mark_conflict\",\n\t\t\tcandidates: historicalSubjects.map((item) => item.subject),\n\t\t\tconfidence: \"ambiguous\",\n\t\t\tconnectionId,\n\t\t\tdecision: \"conflict\",\n\t\t\tevidence,\n\t\t\tproviderCustomerId,\n\t\t\treason: \"canonical rows carry conflicting subject ownership\",\n\t\t\tsource: \"imported\",\n\t\t};\n\t}\n\tif (historicalSubjects.length === 1) {\n\t\tconst subject = historicalSubjects[0]?.subject;\n\t\tif (subject) {\n\t\t\treturn {\n\t\t\t\taction: \"create_active_binding\",\n\t\t\t\tcandidates: [subject],\n\t\t\t\tconfidence: \"strong\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"bind\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"historical canonical ownership\",\n\t\t\t\tsource: \"imported\",\n\t\t\t\tsubject,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst emailMatches = uniqueSubjects(context.emailMatches);\n\tif (emailMatches.length > 1) {\n\t\treturn {\n\t\t\taction: \"none\",\n\t\t\tcandidates: emailMatches.map((item) => item.subject),\n\t\t\tconfidence: \"ambiguous\",\n\t\t\tconnectionId,\n\t\t\tdecision: \"conflict\",\n\t\t\tevidence,\n\t\t\tproviderCustomerId,\n\t\t\treason: \"duplicate email\",\n\t\t\tsource: \"imported\",\n\t\t};\n\t}\n\tif (emailMatches.length === 1) {\n\t\tconst subject = emailMatches[0]?.subject;\n\t\tif (!subject) {\n\t\t\treturn {\n\t\t\t\taction: \"none\",\n\t\t\t\tcandidates: [],\n\t\t\t\tconfidence: \"none\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"skip\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"no candidate\",\n\t\t\t\tsource: \"imported\",\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tcontext.existingPrimary &&\n\t\t\t!context.policy.allowSecondaryBindings &&\n\t\t\tcontext.existingPrimary.providerSubjectId !== providerCustomerId\n\t\t) {\n\t\t\treturn {\n\t\t\t\taction: \"mark_conflict\",\n\t\t\t\tcandidates: [subject],\n\t\t\t\tconfidence: \"strong\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"conflict\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"subject already has another primary customer for this connection\",\n\t\t\t\tsource: \"imported\",\n\t\t\t\tsubject,\n\t\t\t};\n\t\t}\n\t\tif (!context.policy.allowUniqueEmailAutoBind) {\n\t\t\treturn {\n\t\t\t\taction: \"none\",\n\t\t\t\tcandidates: [subject],\n\t\t\t\tconfidence: \"strong\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"manual_review\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"unique email candidate only\",\n\t\t\t\tsource: \"imported\",\n\t\t\t\tsubject,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\taction: \"create_active_binding\",\n\t\t\tcandidates: [subject],\n\t\t\tconfidence: \"strong\",\n\t\t\tconnectionId,\n\t\t\tdecision: \"bind\",\n\t\t\tevidence,\n\t\t\tproviderCustomerId,\n\t\t\treason: \"unique email match\",\n\t\t\tsource: \"imported\",\n\t\t\tsubject,\n\t\t};\n\t}\n\n\treturn {\n\t\taction: \"none\",\n\t\tcandidates: [],\n\t\tconfidence: confidenceFromEvidence(evidence, 0, false),\n\t\tconnectionId,\n\t\tdecision: \"skip\",\n\t\tevidence,\n\t\tproviderCustomerId,\n\t\treason: \"no candidate\",\n\t\tsource: \"imported\",\n\t};\n}\n","import type { BillingSubjectRef } from \"../types.ts\";\nimport type { BillingImportDocumentStore } from \"./apply.ts\";\nimport type { BillingImportDocumentHint } from \"./types.ts\";\n\nexport interface MemoryBillingDocument {\n\tconnectionId: string;\n\tid: string;\n\tkind: \"payment\" | \"subscription\" | \"invoice\";\n\townershipStatus: \"resolved\" | \"unresolved\" | \"conflict\";\n\tproviderCustomerId: string;\n\tsubject?: BillingSubjectRef;\n}\n\nexport function createMemoryBillingImportDocumentStore(\n\tdocuments: MemoryBillingDocument[],\n): BillingImportDocumentStore & { documents: MemoryBillingDocument[] } {\n\treturn {\n\t\tdocuments,\n\t\tasync hintsForCustomer(input) {\n\t\t\tconst hints: BillingImportDocumentHint[] = [];\n\t\t\tfor (const row of documents) {\n\t\t\t\tif (\n\t\t\t\t\trow.providerCustomerId !== input.providerCustomerId ||\n\t\t\t\t\trow.connectionId !== input.connectionId\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\thints.push({\n\t\t\t\t\tconnectionId: row.connectionId,\n\t\t\t\t\townershipStatus: row.ownershipStatus,\n\t\t\t\t\tproviderCustomerId: row.providerCustomerId,\n\t\t\t\t\tsubject: row.subject,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn hints;\n\t\t},\n\t\tasync projectForBinding(input) {\n\t\t\tlet resolved = 0;\n\t\t\tlet conflicts = 0;\n\t\t\tfor (const row of documents) {\n\t\t\t\tif (row.providerCustomerId !== input.providerCustomerId) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\trow.connectionId !== input.connectionId &&\n\t\t\t\t\trow.connectionId !== \"\"\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\trow.ownershipStatus === \"resolved\" &&\n\t\t\t\t\trow.subject &&\n\t\t\t\t\t(row.subject.kind !== input.subject.kind ||\n\t\t\t\t\t\trow.subject.id !== input.subject.id)\n\t\t\t\t) {\n\t\t\t\t\trow.ownershipStatus = \"conflict\";\n\t\t\t\t\tconflicts += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\trow.ownershipStatus === \"unresolved\" ||\n\t\t\t\t\trow.subject == null ||\n\t\t\t\t\t(row.subject.kind === input.subject.kind &&\n\t\t\t\t\t\trow.subject.id === input.subject.id)\n\t\t\t\t) {\n\t\t\t\t\trow.connectionId = input.connectionId;\n\t\t\t\t\trow.subject = input.subject;\n\t\t\t\t\trow.ownershipStatus = \"resolved\";\n\t\t\t\t\tresolved += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { conflicts, resolved };\n\t\t},\n\t};\n}\n\nexport async function reconcileBillingDocumentsForBinding(\n\tstore: BillingImportDocumentStore,\n\tinput: {\n\t\tconnectionId: string;\n\t\tproviderCustomerId: string;\n\t\tsubject: BillingSubjectRef;\n\t},\n): Promise<{ conflicts: number; resolved: number }> {\n\treturn store.projectForBinding(input);\n}\n","import { applyBillingImportPlan, type BillingImportBindingStore, type BillingImportCursorStore, type BillingImportDocumentStore } from \"./apply.ts\";\nimport type { BillingImportAuditStore } from \"./audit.ts\";\nimport { readAthenaSubjectFromMetadata } from \"./candidate-resolver.ts\";\nimport {\n\tATHENA_BILLING_IMPORT_PROVIDER_FAILED,\n\tAthenaBillingImportError,\n} from \"./errors.ts\";\nimport { planBillingImport } from \"./planner.ts\";\nimport { reconcileBillingDocumentsForBinding } from \"./project.ts\";\nimport type { BillingCustomerImportPort } from \"./providers/types.ts\";\nimport type {\n\tBillingImportCustomer,\n\tBillingImportPlan,\n\tBillingImportPolicy,\n\tBillingImportRunReport,\n\tBillingSubjectDirectory,\n} from \"./types.ts\";\nimport { DEFAULT_BILLING_IMPORT_POLICY } from \"./types.ts\";\nimport type { AthenaBillingAuditWriter } from \"../observability/audit.ts\";\nimport type { BillingReconciliationContext } from \"../observability/types.ts\";\nimport {\n\temitBillingAuditFailure,\n\temitBillingImportSemanticAudit,\n} from \"../reconciliation/semantic-audit.ts\";\nimport type { BillingImportPageResult } from \"../reconciliation/types.ts\";\n\nexport interface RunBillingCustomerImportInput {\n\taudit?: BillingImportAuditStore;\n\tbindings: BillingImportBindingStore;\n\tconnectionId: string;\n\tcontext?: BillingReconciliationContext;\n\tcursor?: string;\n\tcustomerId?: string;\n\tdirectory: BillingSubjectDirectory;\n\tdocuments?: BillingImportDocumentStore;\n\tcursors?: BillingImportCursorStore;\n\tdiscovery: BillingCustomerImportPort;\n\tdryRun: boolean;\n\tincludeAmbiguous?: boolean;\n\tlimit?: number;\n\tpersistCursor?: boolean;\n\tpolicy?: BillingImportPolicy;\n\tpreloadedCustomers?: readonly BillingImportCustomer[];\n\tprovider?: string;\n\trunId?: string;\n\tsemanticAudit?: AthenaBillingAuditWriter;\n\tskipCursorAdvance?: boolean;\n\tsubjectId?: string;\n}\n\nasync function loadPage(\n\tdiscovery: BillingCustomerImportPort,\n\tinput: { cursor?: string; customerId?: string; limit?: number },\n): Promise<{ items: readonly BillingImportCustomer[]; nextCursor?: string | null }> {\n\ttry {\n\t\tif (input.customerId && discovery.getCustomer) {\n\t\t\tconst customer = await discovery.getCustomer({\n\t\t\t\tcustomerId: input.customerId,\n\t\t\t});\n\t\t\treturn { items: [customer], nextCursor: null };\n\t\t}\n\t\treturn await discovery.listCustomers(input);\n\t} catch (error) {\n\t\tif (error instanceof AthenaBillingImportError) {\n\t\t\tthrow error;\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : \"provider failed\";\n\t\tthrow new AthenaBillingImportError({\n\t\t\tcode: ATHENA_BILLING_IMPORT_PROVIDER_FAILED,\n\t\t\tmessage,\n\t\t});\n\t}\n}\n\nexport async function applyBillingImportCustomers(input: {\n\taudit?: BillingImportAuditStore;\n\tbindings: BillingImportBindingStore;\n\tconnectionId: string;\n\tcontext?: BillingReconciliationContext;\n\tcustomerId?: string;\n\tdirectory: BillingSubjectDirectory;\n\tdocuments?: BillingImportDocumentStore;\n\tdryRun: boolean;\n\tincludeAmbiguous?: boolean;\n\titems: readonly BillingImportCustomer[];\n\tpolicy: BillingImportPolicy;\n\tprovider: string;\n\trunId?: string;\n\tsemanticAudit?: AthenaBillingAuditWriter;\n\tsubjectId?: string;\n}): Promise<{\n\tbindingsActivated: number;\n\tbindingsCreated: number;\n\tconflicts: number;\n\tplans: BillingImportPlan[];\n\tscannedCustomers: BillingImportCustomer[];\n\tskipped: number;\n}> {\n\tconst plans: BillingImportPlan[] = [];\n\tlet bindingsCreated = 0;\n\tlet bindingsActivated = 0;\n\tlet conflicts = 0;\n\tlet skipped = 0;\n\tconst scannedCustomers: BillingImportCustomer[] = [];\n\tconst persistAudit = input.audit != null && !input.dryRun;\n\n\tfor (const customer of input.items) {\n\t\tif (input.customerId && customer.providerCustomerId !== input.customerId) {\n\t\t\tcontinue;\n\t\t}\n\t\tscannedCustomers.push(customer);\n\t\tconst metadataSubject = readAthenaSubjectFromMetadata(customer.metadata);\n\t\tconst directorySubject = metadataSubject\n\t\t\t? await input.directory.getById(metadataSubject)\n\t\t\t: null;\n\t\tconst email = customer.email?.trim();\n\t\tconst emailMatches = email\n\t\t\t? await input.directory.findUsersByEmail(email)\n\t\t\t: [];\n\t\tconst existingLocator = await input.bindings.findByLocator({\n\t\t\tconnectionId: input.connectionId,\n\t\t\tproviderCustomerId: customer.providerCustomerId,\n\t\t});\n\t\tconst proposed =\n\t\t\tdirectorySubject?.subject ??\n\t\t\t(emailMatches.length === 1 ? emailMatches[0]?.subject : undefined);\n\t\tconst existingPrimary = proposed\n\t\t\t? await input.bindings.findActivePrimary({\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tsubject: proposed,\n\t\t\t\t})\n\t\t\t: null;\n\t\tconst documentHints = input.documents\n\t\t\t? await input.documents.hintsForCustomer({\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tproviderCustomerId: customer.providerCustomerId,\n\t\t\t\t})\n\t\t\t: [];\n\t\tconst plan = planBillingImport({\n\t\t\tconnectionId: input.connectionId,\n\t\t\tcustomer,\n\t\t\tdirectorySubject,\n\t\t\tdocumentHints,\n\t\t\temailMatches,\n\t\t\texistingLocator,\n\t\t\texistingPrimary,\n\t\t\tpolicy: input.policy,\n\t\t});\n\t\tif (input.subjectId && plan.subject?.id !== input.subjectId) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tplan.confidence === \"ambiguous\" &&\n\t\t\tinput.includeAmbiguous !== true &&\n\t\t\tplan.decision !== \"conflict\"\n\t\t) {\n\t\t\tskipped += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tplans.push(plan);\n\t\tif (persistAudit && input.audit && input.runId) {\n\t\t\tawait input.audit.recordCandidate({\n\t\t\t\tcorrelationId: input.context?.correlationId,\n\t\t\t\tplan,\n\t\t\t\trunId: input.runId,\n\t\t\t\ttraceId: input.context?.traceId,\n\t\t\t});\n\t\t}\n\t\tif (input.dryRun) {\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst applied = await applyBillingImportPlan(input.bindings, {\n\t\t\t\temailSnapshot: customer.email,\n\t\t\t\tplan,\n\t\t\t});\n\t\t\tif (applied === \"created\") {\n\t\t\t\tbindingsCreated += 1;\n\t\t\t} else if (applied === \"activated\") {\n\t\t\t\tbindingsActivated += 1;\n\t\t\t} else if (applied === \"conflict\") {\n\t\t\t\tconflicts += 1;\n\t\t\t} else {\n\t\t\t\tskipped += 1;\n\t\t\t}\n\t\t\tlet projectionConflicts = 0;\n\t\t\tif (\n\t\t\t\tapplied === \"created\" ||\n\t\t\t\tapplied === \"activated\" ||\n\t\t\t\tplan.action === \"noop\"\n\t\t\t) {\n\t\t\t\tconst subject = plan.subject;\n\t\t\t\tif (subject && input.documents) {\n\t\t\t\t\tconst projection = await reconcileBillingDocumentsForBinding(\n\t\t\t\t\t\tinput.documents,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\t\t\tproviderCustomerId: customer.providerCustomerId,\n\t\t\t\t\t\t\tsubject,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tprojectionConflicts = projection.conflicts;\n\t\t\t\t\tconflicts += projection.conflicts;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (input.semanticAudit && input.context) {\n\t\t\t\tawait emitBillingImportSemanticAudit({\n\t\t\t\t\tapplied,\n\t\t\t\t\tcontext: input.context,\n\t\t\t\t\tplan,\n\t\t\t\t\tprevious: existingLocator,\n\t\t\t\t\tprojectionConflicts,\n\t\t\t\t\twriter: input.semanticAudit,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (input.semanticAudit && input.context) {\n\t\t\t\tawait emitBillingAuditFailure({\n\t\t\t\t\tcontext: input.context,\n\t\t\t\t\terror,\n\t\t\t\t\tproviderCustomerId: customer.providerCustomerId,\n\t\t\t\t\tsubject: plan.subject,\n\t\t\t\t\twriter: input.semanticAudit,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn {\n\t\tbindingsActivated,\n\t\tbindingsCreated,\n\t\tconflicts,\n\t\tplans,\n\t\tscannedCustomers,\n\t\tskipped,\n\t};\n}\n\nexport async function runBillingCustomerImportPage(\n\tinput: RunBillingCustomerImportInput,\n): Promise<BillingImportPageResult> {\n\tconst policy = input.policy ?? DEFAULT_BILLING_IMPORT_POLICY;\n\tconst cursorBefore =\n\t\tinput.cursor ?? (await input.cursors?.get(input.connectionId)) ?? null;\n\tconst page =\n\t\tinput.preloadedCustomers != null\n\t\t\t? {\n\t\t\t\t\titems: input.preloadedCustomers,\n\t\t\t\t\tnextCursor: null as string | null,\n\t\t\t\t}\n\t\t\t: await loadPage(input.discovery, {\n\t\t\t\t\tcursor: cursorBefore ?? undefined,\n\t\t\t\t\tcustomerId: input.customerId,\n\t\t\t\t\tlimit: input.limit,\n\t\t\t\t});\n\tconst applied = await applyBillingImportCustomers({\n\t\taudit: input.audit,\n\t\tbindings: input.bindings,\n\t\tconnectionId: input.connectionId,\n\t\tcontext: input.context,\n\t\tcustomerId: input.customerId,\n\t\tdirectory: input.directory,\n\t\tdocuments: input.documents,\n\t\tdryRun: input.dryRun,\n\t\tincludeAmbiguous: input.includeAmbiguous,\n\t\titems: page.items,\n\t\tpolicy,\n\t\tprovider: input.provider ?? \"mollie\",\n\t\trunId: input.runId,\n\t\tsemanticAudit: input.semanticAudit,\n\t\tsubjectId: input.subjectId,\n\t});\n\tconst nextCursor = page.nextCursor ?? null;\n\tconst persistCursor =\n\t\tinput.persistCursor !== false &&\n\t\t!input.dryRun &&\n\t\t!input.skipCursorAdvance &&\n\t\tinput.customerId == null &&\n\t\tinput.cursors != null;\n\tif (persistCursor && input.cursors) {\n\t\tawait input.cursors.set(input.connectionId, nextCursor);\n\t}\n\treturn {\n\t\tbindingsActivated: applied.bindingsActivated,\n\t\tbindingsCreated: applied.bindingsCreated,\n\t\tconflicts: applied.conflicts,\n\t\tcursorAfter: persistCursor ? nextCursor : cursorBefore,\n\t\tcursorBefore,\n\t\tcustomersScanned: applied.scannedCustomers.length,\n\t\thasMore: nextCursor != null && nextCursor.length > 0,\n\t\tplans: applied.plans,\n\t\tskipped: applied.skipped,\n\t};\n}\n\nexport async function runBillingCustomerImport(\n\tinput: RunBillingCustomerImportInput,\n): Promise<BillingImportRunReport> {\n\tconst persistAudit = input.audit != null && !input.dryRun;\n\tconst cursorBefore =\n\t\tinput.cursor ?? (await input.cursors?.get(input.connectionId)) ?? null;\n\tlet runId: string | undefined;\n\tif (persistAudit && input.audit) {\n\t\tconst started = await input.audit.startRun({\n\t\t\tcausationId: input.context?.causationId,\n\t\t\tconnectionId: input.connectionId,\n\t\t\tcorrelationId: input.context?.correlationId,\n\t\t\tcursorBefore,\n\t\t\tprovider: input.provider ?? \"mollie\",\n\t\t\tstatus: \"running\",\n\t\t\ttraceId: input.context?.traceId,\n\t\t\ttrigger: input.context?.trigger,\n\t\t});\n\t\trunId = started.id;\n\t}\n\ttry {\n\t\tconst page = await runBillingCustomerImportPage({\n\t\t\t...input,\n\t\t\trunId,\n\t\t});\n\t\tconst report: BillingImportRunReport = {\n\t\t\tbindingsActivated: page.bindingsActivated,\n\t\t\tbindingsCreated: page.bindingsCreated,\n\t\t\tconflicts: page.conflicts,\n\t\t\tconnectionId: input.connectionId,\n\t\t\tcorrelationId: input.context?.correlationId,\n\t\t\tcursorAfter: page.cursorAfter,\n\t\t\tcursorBefore: page.cursorBefore,\n\t\t\tcustomersScanned: page.customersScanned,\n\t\t\tdryRun: input.dryRun,\n\t\t\terrors: 0,\n\t\t\thasMore: page.hasMore,\n\t\t\tpagesProcessed: 1,\n\t\t\tplans: page.plans,\n\t\t\trunId,\n\t\t\tskipped: page.skipped,\n\t\t\tstatus:\n\t\t\t\tpage.conflicts > 0 ? \"completed_with_conflicts\" : \"completed\",\n\t\t\ttraceId: input.context?.traceId,\n\t\t};\n\t\tif (persistAudit && input.audit && runId) {\n\t\t\tawait input.audit.completeRun({ id: runId, report });\n\t\t}\n\t\treturn report;\n\t} catch (error) {\n\t\tif (persistAudit && input.audit && runId) {\n\t\t\tconst message = error instanceof Error ? error.message : \"import failed\";\n\t\t\tawait input.audit.failRun({ error: message, id: runId });\n\t\t}\n\t\tthrow error;\n\t}\n}\n","import type { BillingSubjectRef } from \"../types.ts\";\nimport type {\n\tBillingSqlExecutor,\n\tBillingSubjectBindingRecord,\n\tBillingSubjectRepository,\n} from \"./repository.ts\";\n\nexport function isBillingUniqueViolation(error: unknown): boolean {\n\tif (error == null || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\treturn (error as { code?: unknown }).code === \"23505\";\n}\n\nfunction asBinding(row: Record<string, unknown>): BillingSubjectBindingRecord {\n\treturn {\n\t\tconnectionId: String(row.connection_id),\n\t\temailSnapshot:\n\t\t\ttypeof row.email_snapshot === \"string\" ? row.email_snapshot : null,\n\t\tid: String(row.id),\n\t\tisPrimary: row.is_primary === true,\n\t\tproviderSubjectId: String(row.provider_subject_id),\n\t\tproviderSubjectKind:\n\t\t\trow.provider_subject_kind === \"recipient\" ? \"recipient\" : \"customer\",\n\t\tsource:\n\t\t\trow.source === \"imported\" || row.source === \"reconciled\"\n\t\t\t\t? row.source\n\t\t\t\t: \"created\",\n\t\tstatus:\n\t\t\trow.status === \"active\" ||\n\t\t\trow.status === \"conflict\" ||\n\t\t\trow.status === \"revoked\"\n\t\t\t\t? row.status\n\t\t\t\t: \"pending\",\n\t\tsubjectId: String(row.subject_id),\n\t\tsubjectKind: row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n\t};\n}\n\nexport function createPostgresBillingSubjectRepository(\n\tsql: BillingSqlExecutor,\n): BillingSubjectRepository {\n\treturn {\n\t\tasync activate(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`UPDATE billing.billing_subject_bindings\n\t\t\t\t SET provider_subject_id = $1,\n\t\t\t\t     status = 'active',\n\t\t\t\t     is_primary = true\n\t\t\t\t WHERE id = $2\n\t\t\t\t RETURNING *`,\n\t\t\t\t[input.providerSubjectId, input.id],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\tif (!row) {\n\t\t\t\tthrow new Error(\"Failed to activate billing subject binding.\");\n\t\t\t}\n\t\t\treturn asBinding(row);\n\t\t},\n\t\tasync getBinding(id) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT * FROM billing.billing_subject_bindings WHERE id = $1`,\n\t\t\t\t[id],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\treturn row ? asBinding(row) : undefined;\n\t\t},\n\t\tasync listActiveBindings(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT * FROM billing.billing_subject_bindings\n\t\t\t\t WHERE connection_id = $1\n\t\t\t\t   AND subject_kind = $2\n\t\t\t\t   AND subject_id = $3\n\t\t\t\t   AND status <> 'revoked'`,\n\t\t\t\t[input.connectionId, input.subject.kind, input.subject.id],\n\t\t\t);\n\t\t\treturn result.rows.map(asBinding);\n\t\t},\n\t\tasync reserve(input) {\n\t\t\ttry {\n\t\t\t\tconst result = await sql.query(\n\t\t\t\t\t`INSERT INTO billing.billing_subject_bindings (\n\t\t\t\t\t\tconnection_id,\n\t\t\t\t\t\tsubject_kind,\n\t\t\t\t\t\tsubject_id,\n\t\t\t\t\t\tprovider_subject_kind,\n\t\t\t\t\t\tprovider_subject_id,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tis_primary\n\t\t\t\t\t) VALUES ($1, $2, $3, $4, $5, 'pending', $6, false)\n\t\t\t\t\tON CONFLICT (connection_id, subject_kind, subject_id, provider_subject_kind)\n\t\t\t\t\t\tWHERE status IN ('pending', 'active')\n\t\t\t\t\tDO NOTHING\n\t\t\t\t\tRETURNING *`,\n\t\t\t\t\t[\n\t\t\t\t\t\tinput.connectionId,\n\t\t\t\t\t\tinput.subject.kind,\n\t\t\t\t\t\tinput.subject.id,\n\t\t\t\t\t\tinput.providerSubjectKind,\n\t\t\t\t\t\tinput.providerSubjectId ?? `reserve:${input.subject.id}`,\n\t\t\t\t\t\tinput.source,\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t\tconst inserted = result.rows[0];\n\t\t\t\tif (inserted) {\n\t\t\t\t\treturn { binding: asBinding(inserted), inserted: true };\n\t\t\t\t}\n\t\t} catch (error) {\n\t\t\t\tif (\n\t\t\t\t\t!isBillingUniqueViolation(error) &&\n\t\t\t\t\t(error as { code?: string }).code !== \"42P10\"\n\t\t\t\t) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif ((error as { code?: string }).code === \"42P10\") {\n\t\t\t\t\tconst fallback = await sql.query(\n\t\t\t\t\t\t`INSERT INTO billing.billing_subject_bindings (\n\t\t\t\t\t\t\tconnection_id,\n\t\t\t\t\t\t\tsubject_kind,\n\t\t\t\t\t\t\tsubject_id,\n\t\t\t\t\t\t\tprovider_subject_kind,\n\t\t\t\t\t\t\tprovider_subject_id,\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t\tis_primary\n\t\t\t\t\t\t) VALUES ($1, $2, $3, $4, $5, 'pending', $6, false)\n\t\t\t\t\t\tRETURNING *`,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tinput.connectionId,\n\t\t\t\t\t\t\tinput.subject.kind,\n\t\t\t\t\t\t\tinput.subject.id,\n\t\t\t\t\t\t\tinput.providerSubjectKind,\n\t\t\t\t\t\t\tinput.providerSubjectId ?? `reserve:${input.subject.id}`,\n\t\t\t\t\t\t\tinput.source,\n\t\t\t\t\t\t],\n\t\t\t\t\t);\n\t\t\t\t\tconst inserted = fallback.rows[0];\n\t\t\t\t\tif (inserted) {\n\t\t\t\t\t\treturn { binding: asBinding(inserted), inserted: true };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst existing = await sql.query(\n\t\t\t\t`SELECT * FROM billing.billing_subject_bindings\n\t\t\t\t WHERE connection_id = $1\n\t\t\t\t   AND subject_kind = $2\n\t\t\t\t   AND subject_id = $3\n\t\t\t\t   AND provider_subject_kind = $4\n\t\t\t\t   AND status IN ('pending', 'active')\n\t\t\t\t ORDER BY CASE status WHEN 'active' THEN 0 ELSE 1 END\n\t\t\t\t LIMIT 1`,\n\t\t\t\t[\n\t\t\t\t\tinput.connectionId,\n\t\t\t\t\tinput.subject.kind,\n\t\t\t\t\tinput.subject.id,\n\t\t\t\t\tinput.providerSubjectKind,\n\t\t\t\t],\n\t\t\t);\n\t\t\tconst row = existing.rows[0];\n\t\t\tif (!row) {\n\t\t\t\tthrow new Error(\"Failed to reserve billing subject binding.\");\n\t\t\t}\n\t\t\treturn { binding: asBinding(row), inserted: false };\n\t\t},\n\t};\n}\n\nexport function subjectFromPrincipalUser(userId: string): BillingSubjectRef {\n\treturn { id: userId, kind: \"user\" };\n}\n","import { ATHENA_AUTH_TABLES } from \"../../auth/contract/index.ts\";\nimport type { ResolvedBillingProviderConnection } from \"../reconciliation/types.ts\";\nimport { isBillingUniqueViolation } from \"../subject/postgres.ts\";\nimport type {\n\tBillingSqlExecutor,\n\tBillingSubjectBindingRecord,\n} from \"../subject/repository.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\nimport type {\n\tBillingImportBindingStore,\n\tBillingImportCursorStore,\n\tBillingImportDocumentStore,\n} from \"./apply.ts\";\nimport { wrapBillingSqlExecutorAsDatabase } from \"./database.ts\";\nimport {\n\tATHENA_BILLING_IMPORT_BINDING_CONFLICT,\n\tAthenaBillingImportError,\n} from \"./errors.ts\";\nimport type {\n\tBillingImportDocumentHint,\n\tBillingSubjectDirectory,\n\tBillingSubjectRecord,\n} from \"./types.ts\";\n\nexport { createBillingSqlExecutor } from \"./database.ts\";\n\nconst DOCUMENT_TABLES = [\n\t\"billing.billing_payments\",\n\t\"billing.billing_subscriptions\",\n\t\"billing.billing_invoices\",\n] as const;\n\nconst CONNECTION_LIST_COLUMNS = `id::text AS id, provider, status, account_reference, environment, credential_reference, metadata`;\n\nfunction connectionEnvironment(value: unknown): \"live\" | \"test\" {\n\treturn value === \"test\" ? \"test\" : \"live\";\n}\n\nfunction webhookIngressTokenFromMetadata(\n\tmetadata: unknown,\n): string | undefined {\n\tif (\n\t\tmetadata == null ||\n\t\ttypeof metadata !== \"object\" ||\n\t\tArray.isArray(metadata)\n\t) {\n\t\treturn undefined;\n\t}\n\tconst token = (metadata as { webhookIngressToken?: unknown })\n\t\t.webhookIngressToken;\n\treturn typeof token === \"string\" && token.length > 0 ? token : undefined;\n}\n\nfunction asResolvedConnection(\n\trow: Record<string, unknown>,\n): ResolvedBillingProviderConnection {\n\tconst environment = connectionEnvironment(row.environment);\n\tconst provider = String(row.provider ?? \"\");\n\tconst credentialReference =\n\t\ttypeof row.credential_reference === \"string\" &&\n\t\t\trow.credential_reference.trim() !== \"\"\n\t\t\t? row.credential_reference.trim()\n\t\t\t: `providers.${provider.toLowerCase() || \"mollie\"}`;\n\tconst webhookIngressToken = webhookIngressTokenFromMetadata(row.metadata);\n\treturn {\n\t\taccountReference: String(row.account_reference ?? \"\"),\n\t\tcredentialReference,\n\t\tenvironment,\n\t\tid: String(row.id),\n\t\tprovider,\n\t\tstatus: String(row.status ?? \"\"),\n\t\ttestMode: environment === \"test\",\n\t\t...(webhookIngressToken ? { webhookIngressToken } : {}),\n\t};\n}\n\nfunction asBinding(row: Record<string, unknown>): BillingSubjectBindingRecord {\n\treturn {\n\t\tconnectionId: String(row.connection_id),\n\t\temailSnapshot:\n\t\t\ttypeof row.email_snapshot === \"string\" ? row.email_snapshot : null,\n\t\tid: String(row.id),\n\t\tisPrimary: row.is_primary === true,\n\t\tproviderSubjectId: String(row.provider_subject_id),\n\t\tproviderSubjectKind:\n\t\t\trow.provider_subject_kind === \"recipient\" ? \"recipient\" : \"customer\",\n\t\tsource:\n\t\t\trow.source === \"imported\" || row.source === \"reconciled\"\n\t\t\t\t? row.source\n\t\t\t\t: \"created\",\n\t\tstatus:\n\t\t\trow.status === \"active\" ||\n\t\t\t\trow.status === \"conflict\" ||\n\t\t\t\trow.status === \"revoked\"\n\t\t\t\t? row.status\n\t\t\t\t: \"pending\",\n\t\tsubjectId: String(row.subject_id),\n\t\tsubjectKind: row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n\t};\n}\n\nfunction ownershipStatus(\n\tvalue: unknown,\n): BillingImportDocumentHint[\"ownershipStatus\"] {\n\tif (value === \"resolved\" || value === \"conflict\") {\n\t\treturn value;\n\t}\n\treturn \"unresolved\";\n}\n\nfunction hintFromRow(row: Record<string, unknown>): BillingImportDocumentHint {\n\tconst subjectId =\n\t\ttypeof row.subject_id === \"string\" && row.subject_id.length > 0\n\t\t\t? row.subject_id\n\t\t\t: undefined;\n\tconst subjectKind =\n\t\trow.subject_kind === \"organization\" || row.subject_kind === \"user\"\n\t\t\t? row.subject_kind\n\t\t\t: undefined;\n\treturn {\n\t\tconnectionId: String(row.connection_id ?? \"\"),\n\t\townershipStatus: ownershipStatus(row.ownership_status),\n\t\tproviderCustomerId: String(row.provider_customer_id ?? \"\"),\n\t\tsubject:\n\t\t\tsubjectId && subjectKind\n\t\t\t\t? { id: subjectId, kind: subjectKind }\n\t\t\t\t: undefined,\n\t};\n}\n\nexport type BillingImportConnectionRow = ResolvedBillingProviderConnection;\n\nexport async function listActiveBillingImportConnections(\n\tsql: BillingSqlExecutor,\n\tprovider?: string,\n): Promise<readonly BillingImportConnectionRow[]> {\n\tconst result =\n\t\tprovider != null && provider.trim() !== \"\"\n\t\t\t? await sql.query(\n\t\t\t\t`SELECT ${CONNECTION_LIST_COLUMNS}\n\t\t\t\t\t FROM billing.billing_provider_connections\n\t\t\t\t\t WHERE deleted_at IS NULL\n\t\t\t\t\t   AND status = 'active'\n\t\t\t\t\t   AND lower(provider) = lower($1)\n\t\t\t\t\t ORDER BY created_at ASC`,\n\t\t\t\t[provider],\n\t\t\t)\n\t\t\t: await sql.query(\n\t\t\t\t`SELECT ${CONNECTION_LIST_COLUMNS}\n\t\t\t\t\t FROM billing.billing_provider_connections\n\t\t\t\t\t WHERE deleted_at IS NULL\n\t\t\t\t\t   AND status = 'active'\n\t\t\t\t\t ORDER BY created_at ASC`,\n\t\t\t);\n\treturn result.rows.map((row) => asResolvedConnection(row));\n}\n\nexport async function resolveBillingConnectionIdByWebhookIngressToken(\n\tsql: BillingSqlExecutor,\n\ttoken: string,\n): Promise<string | undefined> {\n\tconst trimmed = token.trim();\n\tif (trimmed.length === 0) {\n\t\treturn undefined;\n\t}\n\tconst result = await sql.query(\n\t\t`SELECT id::text AS id\n\t\t FROM billing.billing_provider_connections\n\t\t WHERE deleted_at IS NULL\n\t\t   AND status = 'active'\n\t\t   AND metadata->>'webhookIngressToken' = $1\n\t\t LIMIT 2`,\n\t\t[trimmed],\n\t);\n\tif (result.rows.length !== 1) {\n\t\treturn undefined;\n\t}\n\tconst id = result.rows[0]?.id;\n\treturn typeof id === \"string\" && id.length > 0 ? id : undefined;\n}\n\nexport async function resolveBillingImportConnection(\n\tsql: BillingSqlExecutor,\n\tinput: { connectionId?: string; provider?: string },\n): Promise<BillingImportConnectionRow> {\n\tif (input.connectionId != null && input.connectionId.trim() !== \"\") {\n\t\tconst result = await sql.query(\n\t\t\t`SELECT ${CONNECTION_LIST_COLUMNS}\n\t\t\t FROM billing.billing_provider_connections\n\t\t\t WHERE deleted_at IS NULL\n\t\t\t   AND (id::text = $1 OR account_reference = $1)\n\t\t\t   AND ($2::text IS NULL OR lower(provider) = lower($2))\n\t\t\t LIMIT 2`,\n\t\t\t[input.connectionId, input.provider ?? null],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row || result.rows.length !== 1) {\n\t\t\tthrow new Error(\n\t\t\t\tresult.rows.length > 1\n\t\t\t\t\t? \"Multiple billing connections matched --connection. Pass the connection UUID.\"\n\t\t\t\t\t: \"No billing provider connection matched --connection.\",\n\t\t\t);\n\t\t}\n\t\treturn asResolvedConnection(row);\n\t}\n\tconst active = await listActiveBillingImportConnections(sql, input.provider);\n\tif (active.length === 1) {\n\t\tconst only = active[0];\n\t\tif (only) {\n\t\t\treturn only;\n\t\t}\n\t}\n\tif (active.length === 0) {\n\t\tthrow new Error(\n\t\t\t\"No active billing provider connections. Pass --connection <uuid>.\",\n\t\t);\n\t}\n\tthrow new Error(\n\t\t\"Multiple active billing connections. Pass --connection <uuid>.\",\n\t);\n}\n\nexport function createPostgresBillingSubjectDirectory(\n\tsql: BillingSqlExecutor,\n): BillingSubjectDirectory {\n\treturn {\n\t\tasync getById(subject: BillingSubjectRef) {\n\t\t\tif (subject.kind === \"organization\") {\n\t\t\t\tconst result = await sql.query(\n\t\t\t\t\t`SELECT id FROM ${ATHENA_AUTH_TABLES.organization} WHERE id = $1`,\n\t\t\t\t\t[subject.id],\n\t\t\t\t);\n\t\t\t\tconst row = result.rows[0];\n\t\t\t\tif (!row) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst record: BillingSubjectRecord = {\n\t\t\t\t\temail: null,\n\t\t\t\t\tsubject,\n\t\t\t\t};\n\t\t\t\treturn record;\n\t\t\t}\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT id, email FROM ${ATHENA_AUTH_TABLES.users} WHERE id = $1`,\n\t\t\t\t[subject.id],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\tif (!row) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\temail: typeof row.email === \"string\" ? row.email : null,\n\t\t\t\tsubject: { id: String(row.id), kind: \"user\" as const },\n\t\t\t};\n\t\t},\n\t\tasync findUsersByEmail(email: string) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT id, email FROM ${ATHENA_AUTH_TABLES.users}\n\t\t\t\t WHERE LOWER(btrim(email)) = LOWER(btrim($1))`,\n\t\t\t\t[email],\n\t\t\t);\n\t\t\treturn result.rows.map((row) => ({\n\t\t\t\temail: typeof row.email === \"string\" ? row.email : null,\n\t\t\t\tsubject: { id: String(row.id), kind: \"user\" as const },\n\t\t\t}));\n\t\t},\n\t};\n}\n\nasync function findBindingByLocator(\n\tsql: BillingSqlExecutor,\n\tinput: { connectionId: string; providerCustomerId: string },\n): Promise<BillingSubjectBindingRecord | null> {\n\tconst result = await sql.query(\n\t\t`SELECT * FROM billing.billing_subject_bindings\n\t\t WHERE connection_id = $1::uuid\n\t\t   AND provider_subject_kind = 'customer'\n\t\t   AND provider_subject_id = $2\n\t\t LIMIT 1`,\n\t\t[input.connectionId, input.providerCustomerId],\n\t);\n\tconst row = result.rows[0];\n\treturn row ? asBinding(row) : null;\n}\n\nexport function createPostgresBillingImportBindingStore(\n\tsql: BillingSqlExecutor,\n): BillingImportBindingStore {\n\treturn {\n\t\tasync findByLocator(input) {\n\t\t\treturn findBindingByLocator(sql, input);\n\t\t},\n\t\tasync findActivePrimary(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT * FROM billing.billing_subject_bindings\n\t\t\t\t WHERE connection_id = $1::uuid\n\t\t\t\t   AND subject_kind = $2\n\t\t\t\t   AND subject_id = $3\n\t\t\t\t   AND provider_subject_kind = 'customer'\n\t\t\t\t   AND status = 'active'\n\t\t\t\t   AND is_primary = true\n\t\t\t\t LIMIT 1`,\n\t\t\t\t[input.connectionId, input.subject.kind, input.subject.id],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\treturn row ? asBinding(row) : null;\n\t\t},\n\t\tasync insertActive(input) {\n\t\t\ttry {\n\t\t\t\tconst result = await sql.query(\n\t\t\t\t\t`INSERT INTO billing.billing_subject_bindings (\n\t\t\t\t\t\tconnection_id,\n\t\t\t\t\t\tsubject_kind,\n\t\t\t\t\t\tsubject_id,\n\t\t\t\t\t\tprovider_subject_kind,\n\t\t\t\t\t\tprovider_subject_id,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tis_primary,\n\t\t\t\t\t\temail_snapshot\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t$1::uuid, $2, $3, 'customer', $4, 'active', $5, true, $6\n\t\t\t\t\t)\n\t\t\t\t\tRETURNING *`,\n\t\t\t\t\t[\n\t\t\t\t\t\tinput.connectionId,\n\t\t\t\t\t\tinput.subject.kind,\n\t\t\t\t\t\tinput.subject.id,\n\t\t\t\t\t\tinput.providerCustomerId,\n\t\t\t\t\t\tinput.source,\n\t\t\t\t\t\tinput.emailSnapshot ?? null,\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t\tconst row = result.rows[0];\n\t\t\t\tif (!row) {\n\t\t\t\t\tthrow new Error(\"Failed to insert billing subject binding.\");\n\t\t\t\t}\n\t\t\t\treturn asBinding(row);\n\t\t\t} catch (error) {\n\t\t\t\tif (!isBillingUniqueViolation(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tconst existing = await findBindingByLocator(sql, {\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tproviderCustomerId: input.providerCustomerId,\n\t\t\t\t});\n\t\t\t\tif (\n\t\t\t\t\texisting &&\n\t\t\t\t\texisting.subjectId === input.subject.id &&\n\t\t\t\t\texisting.subjectKind === input.subject.kind\n\t\t\t\t) {\n\t\t\t\t\treturn existing;\n\t\t\t\t}\n\t\t\t\tthrow new AthenaBillingImportError({\n\t\t\t\t\tcode: ATHENA_BILLING_IMPORT_BINDING_CONFLICT,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Provider customer locator already bound to a different Athena subject.\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync activate(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`UPDATE billing.billing_subject_bindings SET\n\t\t\t\t\tstatus = 'active',\n\t\t\t\t\tis_primary = true,\n\t\t\t\t\tsource = $2,\n\t\t\t\t\temail_snapshot = COALESCE($3, email_snapshot),\n\t\t\t\t\tupdated_at = now()\n\t\t\t\t WHERE id = $1::uuid`,\n\t\t\t\t[input.id, input.source, input.emailSnapshot ?? null],\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingImportCursorStore(\n\tsql: BillingSqlExecutor,\n): BillingImportCursorStore {\n\treturn {\n\t\tasync get(connectionId) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT cursor FROM billing.billing_import_state\n\t\t\t\t WHERE connection_id = $1::uuid AND resource_kind = 'customers'`,\n\t\t\t\t[connectionId],\n\t\t\t);\n\t\t\tconst cursor = result.rows[0]?.cursor;\n\t\t\treturn typeof cursor === \"string\" && cursor.length > 0 ? cursor : null;\n\t\t},\n\t\tasync set(connectionId, cursor) {\n\t\t\tawait sql.query(\n\t\t\t\t`INSERT INTO billing.billing_import_state (\n\t\t\t\t\tconnection_id, resource_kind, cursor, last_completed_at\n\t\t\t\t) VALUES ($1::uuid, 'customers', $2, now())\n\t\t\t\tON CONFLICT (connection_id, resource_kind) DO UPDATE SET\n\t\t\t\t\tcursor = EXCLUDED.cursor,\n\t\t\t\t\tlast_completed_at = now()`,\n\t\t\t\t[connectionId, cursor],\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingImportDocumentStore(\n\tsql: BillingSqlExecutor,\n): BillingImportDocumentStore {\n\treturn {\n\t\tasync hintsForCustomer(input) {\n\t\t\tconst hints: BillingImportDocumentHint[] = [];\n\t\t\tfor (const table of DOCUMENT_TABLES) {\n\t\t\t\tconst result = await sql.query(\n\t\t\t\t\t`SELECT connection_id::text AS connection_id,\n\t\t\t\t\t        ownership_status,\n\t\t\t\t\t        provider_customer_id,\n\t\t\t\t\t        subject_kind,\n\t\t\t\t\t        subject_id\n\t\t\t\t\t FROM ${table}\n\t\t\t\t\t WHERE provider_customer_id = $2\n\t\t\t\t\t   AND (connection_id = $1::uuid OR connection_id IS NULL)`,\n\t\t\t\t\t[input.connectionId, input.providerCustomerId],\n\t\t\t\t);\n\t\t\t\tfor (const row of result.rows) {\n\t\t\t\t\thints.push(hintFromRow(row));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn hints;\n\t\t},\n\t\tasync projectForBinding(input) {\n\t\t\tconst params = [\n\t\t\t\tinput.providerCustomerId,\n\t\t\t\tinput.connectionId,\n\t\t\t\tinput.subject.kind,\n\t\t\t\tinput.subject.id,\n\t\t\t];\n\t\t\tconst db = wrapBillingSqlExecutorAsDatabase(sql);\n\t\t\treturn db.transaction(async (tx) => {\n\t\t\t\tlet conflicts = 0;\n\t\t\t\tlet resolved = 0;\n\t\t\t\tfor (const table of DOCUMENT_TABLES) {\n\t\t\t\t\tconst projected = await tx.query(\n\t\t\t\t\t\t`UPDATE ${table} SET\n\t\t\t\t\t\t\tconnection_id = CASE\n\t\t\t\t\t\t\t\tWHEN ownership_status = 'resolved'\n\t\t\t\t\t\t\t\t  AND subject_id IS NOT NULL\n\t\t\t\t\t\t\t\t  AND (subject_kind <> $3 OR subject_id <> $4)\n\t\t\t\t\t\t\t\tTHEN connection_id\n\t\t\t\t\t\t\t\tWHEN ownership_status <> 'conflict'\n\t\t\t\t\t\t\t\t  AND (\n\t\t\t\t\t\t\t\t\townership_status = 'unresolved'\n\t\t\t\t\t\t\t\t\tOR subject_id IS NULL\n\t\t\t\t\t\t\t\t\tOR (subject_kind = $3 AND subject_id = $4)\n\t\t\t\t\t\t\t\t  )\n\t\t\t\t\t\t\t\tTHEN $2::uuid\n\t\t\t\t\t\t\t\tELSE connection_id\n\t\t\t\t\t\t\tEND,\n\t\t\t\t\t\t\tsubject_kind = CASE\n\t\t\t\t\t\t\t\tWHEN ownership_status = 'resolved'\n\t\t\t\t\t\t\t\t  AND subject_id IS NOT NULL\n\t\t\t\t\t\t\t\t  AND (subject_kind <> $3 OR subject_id <> $4)\n\t\t\t\t\t\t\t\tTHEN subject_kind\n\t\t\t\t\t\t\t\tWHEN ownership_status <> 'conflict'\n\t\t\t\t\t\t\t\t  AND (\n\t\t\t\t\t\t\t\t\townership_status = 'unresolved'\n\t\t\t\t\t\t\t\t\tOR subject_id IS NULL\n\t\t\t\t\t\t\t\t\tOR (subject_kind = $3 AND subject_id = $4)\n\t\t\t\t\t\t\t\t  )\n\t\t\t\t\t\t\t\tTHEN $3\n\t\t\t\t\t\t\t\tELSE subject_kind\n\t\t\t\t\t\t\tEND,\n\t\t\t\t\t\t\tsubject_id = CASE\n\t\t\t\t\t\t\t\tWHEN ownership_status = 'resolved'\n\t\t\t\t\t\t\t\t  AND subject_id IS NOT NULL\n\t\t\t\t\t\t\t\t  AND (subject_kind <> $3 OR subject_id <> $4)\n\t\t\t\t\t\t\t\tTHEN subject_id\n\t\t\t\t\t\t\t\tWHEN ownership_status <> 'conflict'\n\t\t\t\t\t\t\t\t  AND (\n\t\t\t\t\t\t\t\t\townership_status = 'unresolved'\n\t\t\t\t\t\t\t\t\tOR subject_id IS NULL\n\t\t\t\t\t\t\t\t\tOR (subject_kind = $3 AND subject_id = $4)\n\t\t\t\t\t\t\t\t  )\n\t\t\t\t\t\t\t\tTHEN $4\n\t\t\t\t\t\t\t\tELSE subject_id\n\t\t\t\t\t\t\tEND,\n\t\t\t\t\t\t\townership_status = CASE\n\t\t\t\t\t\t\t\tWHEN ownership_status = 'resolved'\n\t\t\t\t\t\t\t\t  AND subject_id IS NOT NULL\n\t\t\t\t\t\t\t\t  AND (subject_kind <> $3 OR subject_id <> $4)\n\t\t\t\t\t\t\t\tTHEN 'conflict'\n\t\t\t\t\t\t\t\tWHEN ownership_status <> 'conflict'\n\t\t\t\t\t\t\t\t  AND (\n\t\t\t\t\t\t\t\t\townership_status = 'unresolved'\n\t\t\t\t\t\t\t\t\tOR subject_id IS NULL\n\t\t\t\t\t\t\t\t\tOR (subject_kind = $3 AND subject_id = $4)\n\t\t\t\t\t\t\t\t  )\n\t\t\t\t\t\t\t\tTHEN 'resolved'\n\t\t\t\t\t\t\t\tELSE ownership_status\n\t\t\t\t\t\t\tEND\n\t\t\t\t\t\t WHERE provider_customer_id = $1\n\t\t\t\t\t\t   AND (connection_id = $2::uuid OR connection_id IS NULL)\n\t\t\t\t\t\t   AND (\n\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t   ownership_status = 'resolved'\n\t\t\t\t\t\t\t   AND subject_id IS NOT NULL\n\t\t\t\t\t\t\t   AND (subject_kind <> $3 OR subject_id <> $4)\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t OR (\n\t\t\t\t\t\t\t   ownership_status <> 'conflict'\n\t\t\t\t\t\t\t   AND (\n\t\t\t\t\t\t\t\t ownership_status = 'unresolved'\n\t\t\t\t\t\t\t\t OR subject_id IS NULL\n\t\t\t\t\t\t\t\t OR (subject_kind = $3 AND subject_id = $4)\n\t\t\t\t\t\t\t   )\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t   )\n\t\t\t\t\t\t RETURNING ownership_status`,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t);\n\t\t\t\t\tfor (const row of projected.rows) {\n\t\t\t\t\t\tif (row.ownership_status === \"conflict\") {\n\t\t\t\t\t\t\tconflicts += 1;\n\t\t\t\t\t\t} else if (row.ownership_status === \"resolved\") {\n\t\t\t\t\t\t\tresolved += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { conflicts, resolved };\n\t\t\t});\n\t\t},\n\t};\n}\n","function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isHttpHref(href: string): boolean {\n\ttry {\n\t\tconst url = new URL(href);\n\t\treturn url.protocol === \"http:\" || url.protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Reads a HAL/SDK link href from either `_links` or `links`.\n * Empty strings and non-http(s) values are not checkout URLs.\n */\nexport function billingHalLinkHref(\n\traw: unknown,\n\trelation: string,\n): string | null {\n\tif (!isRecord(raw) || relation.trim() === \"\") {\n\t\treturn null;\n\t}\n\tfor (const groupKey of [\"_links\", \"links\"] as const) {\n\t\tconst group = raw[groupKey];\n\t\tif (!isRecord(group)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst link = group[relation];\n\t\tif (!isRecord(link)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst href = link.href;\n\t\tif (typeof href === \"string\" && href.trim() !== \"\" && isHttpHref(href)) {\n\t\t\treturn href;\n\t\t}\n\t}\n\treturn null;\n}\n","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\t| \"customers\"\n\t| \"invoices\"\n\t| \"payment-links\"\n\t| \"payments\"\n\t| \"refunds\"\n\t| \"subscriptions\"\n\t| \"webhooks\";\n\nexport interface MollieListCursor {\n\tfrom: string;\n\tprovider: \"mollie\";\n\tresource: MollieListResource;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction encodeBase64Url(value: string): string {\n\tconst bytes = new TextEncoder().encode(value);\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary)\n\t\t.replaceAll(\"+\", \"-\")\n\t\t.replaceAll(\"/\", \"_\")\n\t\t.replace(/=+$/u, \"\");\n}\n\nfunction decodeBase64Url(value: string): string {\n\tif (!/^[A-Za-z0-9_-]+$/u.test(value)) {\n\t\tthrow new TypeError(\"Invalid base64url value.\");\n\t}\n\tconst base64 = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n\tconst padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n\tconst binary = atob(padded);\n\tconst bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));\n\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n}\n\nexport function encodeMollieListCursor(cursor: MollieListCursor): string {\n\treturn encodeBase64Url(JSON.stringify(cursor));\n}\n\nexport function decodeMollieListCursor(\n\tcursor: string,\n\tresource: MollieListResource,\n): string {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(decodeBase64Url(cursor));\n\t} catch {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: \"Mollie list cursor is not valid.\",\n\t\t\tkind: \"serialization\",\n\t\t\toperation: `${resource}.list`,\n\t\t});\n\t}\n\tif (\n\t\t!isRecord(parsed) ||\n\t\tparsed.provider !== \"mollie\" ||\n\t\tparsed.resource !== resource ||\n\t\ttypeof parsed.from !== \"string\" ||\n\t\tparsed.from.length === 0\n\t) {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: \"Mollie list cursor is not valid.\",\n\t\t\tkind: \"serialization\",\n\t\t\toperation: `${resource}.list`,\n\t\t});\n\t}\n\treturn parsed.from;\n}\n\nexport function fromParamFromMollieHref(href: string): string | undefined {\n\ttry {\n\t\tconst url = new URL(href);\n\t\tconst from = url.searchParams.get(\"from\");\n\t\treturn from != null && from.length > 0 ? from : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction firstRecordField(\n\tpayload: Record<string, unknown>,\n\tkeys: string[],\n): Record<string, unknown> | undefined {\n\tfor (const key of keys) {\n\t\tconst value = payload[key];\n\t\tif (isRecord(value)) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function nextCursorFromMolliePayload(\n\tpayload: unknown,\n\tresource: MollieListResource,\n): string | null {\n\tif (!isRecord(payload)) {\n\t\treturn null;\n\t}\n\tconst href = mollieLinkHref(payload, \"next\");\n\tif (href == null) {\n\t\treturn null;\n\t}\n\tconst from = fromParamFromMollieHref(href);\n\tif (from == null) {\n\t\treturn null;\n\t}\n\treturn encodeMollieListCursor({\n\t\tfrom,\n\t\tprovider: \"mollie\",\n\t\tresource,\n\t});\n}\n\nexport function embeddedListItems(\n\tpayload: unknown,\n\tkey: string,\n): unknown[] {\n\tif (!isRecord(payload)) {\n\t\treturn [];\n\t}\n\tconst embedded = firstRecordField(payload, [\"_embedded\", \"embedded\"]);\n\tif (embedded == null) {\n\t\treturn [];\n\t}\n\tconst items = embedded[key];\n\treturn Array.isArray(items) ? items : [];\n}\n","import { createMollieProviderRequestError } from \"../errors.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction statusFrom(error: unknown): number | undefined {\n\tif (!isRecord(error)) {\n\t\treturn undefined;\n\t}\n\tif (typeof error.statusCode === \"number\") {\n\t\treturn error.statusCode;\n\t}\n\tif (typeof error.status === \"number\") {\n\t\treturn error.status;\n\t}\n\tconst httpMeta = error.httpMeta;\n\tif (isRecord(httpMeta) && isRecord(httpMeta.response)) {\n\t\tconst status = httpMeta.response.status;\n\t\tif (typeof status === \"number\") {\n\t\t\treturn status;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction bodyFrom(error: unknown): unknown {\n\tif (!isRecord(error)) {\n\t\treturn undefined;\n\t}\n\treturn error.body ?? error.data ?? error.rawBody;\n}\n\nexport function normalizeMollieSdkError(input: {\n\terror: unknown;\n\toperation: string;\n\tidempotencyKeyPresent?: boolean;\n}): never {\n\tconst { error, operation } = input;\n\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Mollie ${operation} was aborted.`,\n\t\t\tidempotencyKeyPresent: input.idempotencyKeyPresent,\n\t\t\tkind: \"timeout\",\n\t\t\toperation,\n\t\t\trequestDispatchState: \"unknown\",\n\t\t});\n\t}\n\tconst status = statusFrom(error);\n\tconst body = bodyFrom(error);\n\tconst message =\n\t\terror instanceof Error ? error.message : `Mollie ${operation} failed.`;\n\tconst kind =\n\t\tstatus == null &&\n\t\terror instanceof Error &&\n\t\t/network|fetch|ECONN|ENOTFOUND|ETIMEDOUT/i.test(error.message)\n\t\t\t? \"network\"\n\t\t\t: undefined;\n\tthrow createMollieProviderRequestError({\n\t\tbody,\n\t\tfallbackMessage: message,\n\t\tidempotencyKeyPresent: input.idempotencyKeyPresent,\n\t\tkind,\n\t\toperation,\n\t\trequestDispatchState:\n\t\t\tkind === \"network\" || status == null ? \"unknown\" : \"dispatched\",\n\t\tstatus,\n\t});\n}\n","import { createMollieProviderRequestError } from \"../errors.ts\";\nimport { normalizeMollieSdkError } from \"./errors.ts\";\nimport type { MollieSdkResourceClient } from \"./types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction assertMollieSdkPayload(value: unknown, operation: string): unknown {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value) && !Array.isArray(value)) {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Mollie ${operation} returned a non-object body.`,\n\t\t\tkind: \"serialization\",\n\t\t\toperation,\n\t\t});\n\t}\n\treturn value;\n}\n\nexport async function invokeMollieSdk<T>(input: {\n\tinvoke: () => Promise<T>;\n\toperation: string;\n\tidempotencyKeyPresent?: boolean;\n}): Promise<T> {\n\ttry {\n\t\tconst result = await input.invoke();\n\t\treturn assertMollieSdkPayload(result, input.operation) as T;\n\t} catch (error) {\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.name === \"AthenaBillingProviderRequestError\"\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tnormalizeMollieSdkError({\n\t\t\terror,\n\t\t\tidempotencyKeyPresent: input.idempotencyKeyPresent,\n\t\t\toperation: input.operation,\n\t\t});\n\t\tthrow new Error(\"ATHENA_BILLING_MOLLIE_SDK_ERROR_UNREACHABLE\");\n\t}\n}\n\nexport function requireMollieSdkResource(\n\tclient: MollieSdkResourceClient,\n\tname: keyof MollieSdkResourceClient,\n\toperation: string,\n): NonNullable<MollieSdkResourceClient[typeof name]> {\n\tconst resource = client[name];\n\tif (resource == null || typeof resource !== \"object\") {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Injected Mollie SDK is missing ${String(name)} for ${operation}.`,\n\t\t\tkind: \"unsupported_operation\",\n\t\t\toperation,\n\t\t});\n\t}\n\treturn resource;\n}\n\nexport function requireMollieSdkMethod(\n\tresource: Record<string, unknown>,\n\tmethod: string,\n\toperation: string,\n): (request: Record<string, unknown>) => Promise<unknown> {\n\tconst fn = resource[method];\n\tif (typeof fn !== \"function\") {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Injected Mollie SDK is missing ${method} for ${operation}.`,\n\t\t\tkind: \"unsupported_operation\",\n\t\t\toperation,\n\t\t});\n\t}\n\treturn fn.bind(resource) as (\n\t\trequest: Record<string, unknown>,\n\t) => Promise<unknown>;\n}\n\nexport function asMollieSdkClient(client: object): MollieSdkResourceClient {\n\treturn client as MollieSdkResourceClient;\n}\n\nexport function unwrapMollieSdkEntity(value: unknown): unknown {\n\tif (!isRecord(value)) {\n\t\treturn value;\n\t}\n\tif (isRecord(value.result)) {\n\t\treturn value.result;\n\t}\n\tif (isRecord(value.data)) {\n\t\treturn value.data;\n\t}\n\treturn value;\n}\n","import type { MollieSdkClientPool } from \"./client-factory.ts\";\nimport {\n\tasMollieSdkClient,\n\tinvokeMollieSdk,\n\trequireMollieSdkMethod,\n\trequireMollieSdkResource,\n\tunwrapMollieSdkEntity,\n} from \"./invoke.ts\";\nimport type { MollieSdkResourceClient } from \"./types.ts\";\n\nexport async function callMollieSdk(input: {\n\tclient: object;\n\tmethod: string;\n\toperation: string;\n\trequest: Record<string, unknown>;\n\tresource: keyof MollieSdkResourceClient;\n\tunwrap?: boolean;\n}): Promise<unknown> {\n\tconst client = asMollieSdkClient(input.client);\n\tconst resource = requireMollieSdkResource(\n\t\tclient,\n\t\tinput.resource,\n\t\tinput.operation,\n\t);\n\tconst method = requireMollieSdkMethod(\n\t\tresource as Record<string, unknown>,\n\t\tinput.method,\n\t\tinput.operation,\n\t);\n\tconst idempotencyKey = input.request.idempotencyKey;\n\tconst raw = await invokeMollieSdk({\n\t\tidempotencyKeyPresent:\n\t\t\ttypeof idempotencyKey === \"string\" && idempotencyKey.trim() !== \"\",\n\t\tinvoke: () => method(input.request),\n\t\toperation: input.operation,\n\t});\n\treturn input.unwrap === false ? raw : unwrapMollieSdkEntity(raw);\n}\n\nexport function clientFromPool(\n\tpool: MollieSdkClientPool,\n\tcontext: {\n\t\tcredential: Parameters<MollieSdkClientPool[\"clientFor\"]>[0][\"credential\"];\n\t\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n\t\ttarget: { profileId?: string | null };\n\t},\n): object {\n\treturn pool.clientFor({\n\t\tcredential: context.credential,\n\t\toperationScope: context.operationScope,\n\t\trequestedProfileId: context.target.profileId,\n\t});\n}\n","import {\n\tembeddedListItems,\n\ttype MollieListResource,\n\tnextCursorFromMolliePayload,\n} from \"../cursor.ts\";\nimport { unwrapMollieSdkEntity } from \"./invoke.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction firstEmbeddedKey(resource: MollieListResource): string[] {\n\tswitch (resource) {\n\t\tcase \"payment-links\":\n\t\t\treturn [\"payment_links\", \"paymentLinks\"];\n\t\tcase \"webhooks\":\n\t\t\treturn [\"webhooks\"];\n\t\tcase \"invoices\":\n\t\t\treturn [\"sales_invoices\", \"salesInvoices\"];\n\t\tdefault:\n\t\t\treturn [resource];\n\t}\n}\n\nexport async function readOneMollieSdkPage(\n\tresult: unknown,\n\tresource: MollieListResource,\n): Promise<{ items: unknown[]; nextCursor: string | null }> {\n\tlet page = result;\n\tif (\n\t\tpage != null &&\n\t\ttypeof page === \"object\" &&\n\t\tSymbol.asyncIterator in page &&\n\t\ttypeof (page as { [Symbol.asyncIterator]?: unknown })[Symbol.asyncIterator] ===\n\t\t\t\"function\"\n\t) {\n\t\tconst iterator = (page as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n\t\tconst first = await iterator.next();\n\t\tpage = first.done ? undefined : first.value;\n\t}\n\tconst entity = unwrapMollieSdkEntity(page);\n\tif (Array.isArray(entity)) {\n\t\treturn { items: entity, nextCursor: null };\n\t}\n\tif (isRecord(entity) && Array.isArray(entity.items)) {\n\t\treturn {\n\t\t\titems: entity.items,\n\t\t\tnextCursor: nextCursorFromMolliePayload(entity, resource),\n\t\t};\n\t}\n\tfor (const key of firstEmbeddedKey(resource)) {\n\t\tconst items = embeddedListItems(entity, key);\n\t\tif (items.length > 0) {\n\t\t\treturn {\n\t\t\t\titems,\n\t\t\t\tnextCursor: nextCursorFromMolliePayload(entity, resource),\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\titems: [],\n\t\tnextCursor: nextCursorFromMolliePayload(entity, resource),\n\t};\n}\n","import { decodeMollieListCursor } from \"../../runtime/local/providers/mollie/cursor.ts\";\nimport { callMollieSdk, clientFromPool } from \"../../runtime/local/providers/mollie/sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"../../runtime/local/providers/mollie/sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"../../runtime/local/providers/mollie/sdk/page.ts\";\nimport type { BillingProviderExecutionContext } from \"../../runtime/local/providers/types.ts\";\nimport type { BillingImportCustomer, BillingImportCustomerPage } from \"../types.ts\";\nimport type { BillingCustomerImportPort } from \"./types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction metadataRecord(value: unknown): Record<string, unknown> {\n\tif (!isRecord(value)) {\n\t\treturn {};\n\t}\n\treturn value;\n}\n\nexport function projectMollieImportCustomer(raw: unknown): BillingImportCustomer {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\" || raw.id.trim() === \"\") {\n\t\tthrow new Error(\"ATHENA_BILLING_IMPORT_PROVIDER_FAILED\");\n\t}\n\treturn {\n\t\temail: optionalString(raw.email),\n\t\tmetadata: metadataRecord(raw.metadata),\n\t\tname: optionalString(raw.name),\n\t\tproviderCustomerId: raw.id,\n\t\traw,\n\t};\n}\n\nexport function createMollieBillingCustomerImportPort(input: {\n\tconnection?: {\n\t\tenvironment: \"live\" | \"test\";\n\t\tid: string;\n\t\tprovider: string;\n\t};\n\tcontext: BillingProviderExecutionContext;\n\tpool: MollieSdkClientPool;\n}): BillingCustomerImportPort {\n\tconst connection = input.connection ?? {\n\t\tenvironment: input.context.environment.name,\n\t\tid: \"unbound\",\n\t\tprovider: \"mollie\",\n\t};\n\treturn {\n\t\tasync getCustomer(getInput) {\n\t\t\tconst bound = getInput.connection ?? connection;\n\t\t\tif (bound.provider !== \"mollie\") {\n\t\t\t\tthrow new Error(\"ATHENA_BILLING_IMPORT_PROVIDER_FAILED\");\n\t\t\t}\n\t\t\tconst raw = await callMollieSdk({\n\t\t\t\tclient: clientFromPool(input.pool, input.context),\n\t\t\t\tmethod: \"get\",\n\t\t\t\toperation: \"customers.get\",\n\t\t\t\tunwrap: true,\n\t\t\t\trequest: { id: getInput.customerId },\n\t\t\t\tresource: \"customers\",\n\t\t\t});\n\t\t\treturn projectMollieImportCustomer(raw);\n\t\t},\n\t\tasync listCustomers(page) {\n\t\t\tconst from =\n\t\t\t\tpage.cursor != null && page.cursor.length > 0\n\t\t\t\t\t? decodeMollieListCursor(page.cursor, \"customers\")\n\t\t\t\t\t: undefined;\n\t\t\tconst raw = await callMollieSdk({\n\t\t\t\tclient: clientFromPool(input.pool, input.context),\n\t\t\t\tmethod: \"list\",\n\t\t\t\toperation: \"customers.list\",\n\t\t\t\tunwrap: false,\n\t\t\t\trequest: { from, limit: page.limit },\n\t\t\t\tresource: \"customers\",\n\t\t\t});\n\t\t\tconst listed = await readOneMollieSdkPage(raw, \"customers\");\n\t\t\tconst items: BillingImportCustomer[] = [];\n\t\t\tfor (const item of listed.items) {\n\t\t\t\titems.push(projectMollieImportCustomer(item));\n\t\t\t}\n\t\t\tconst result: BillingImportCustomerPage = {\n\t\t\t\titems,\n\t\t\t\tnextCursor: listed.nextCursor,\n\t\t\t};\n\t\t\treturn result;\n\t\t},\n\t};\n}\n","import type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\nimport type { AthenaBillingConfig } from \"../create-client-config.ts\";\nimport {\n\tATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n\tAthenaBillingCredentialError,\n} from \"../errors.ts\";\nimport { createPostgresBillingAuditWriter } from \"../observability/audit.ts\";\nimport { normalizeAthenaBillingObservability } from \"../observability/config.ts\";\nimport {\n\tcreateDisabledBillingTraceRecorder,\n\tcreatePostgresBillingTraceRecorder,\n} from \"../observability/traces.ts\";\nimport type { NormalizedAthenaBillingObservability } from \"../observability/types.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport {\n\tmintManualBillingReconciliationContext,\n\tmintScheduledBillingReconciliationContext,\n\treconcileBillingCustomer,\n\treconcileBillingCustomers,\n} from \"../reconciliation/index.ts\";\nimport { createPostgresBillingReconciliationLeaseStore } from \"../reconciliation/lease.ts\";\nimport { resolveBillingReconciliationLimits } from \"../reconciliation/policy.ts\";\nimport type { BillingReconciliationLimits } from \"../reconciliation/types.ts\";\nimport { resolveBillingEnvironment } from \"../runtime/environment.ts\";\nimport {\n\tbillingConnectionHasConfiguredCredential,\n\tbillingConnectionMatchesProcessTestMode,\n\tcreateConnectionProviderExecutionContext,\n\tmollieConfigForCredentialReference,\n\tparseBillingCredentialReference,\n} from \"../runtime/local/providers/connection-binding.ts\";\nimport { normalizeMollieRuntimeConfig } from \"../runtime/local/providers/mollie/config.ts\";\nimport { MollieSdkClientPool } from \"../runtime/local/providers/mollie/sdk/client-factory.ts\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport { createPostgresBillingImportAuditStore } from \"./audit.ts\";\nimport { shouldAutomaticallyImportBillingCustomers } from \"./automatic.ts\";\nimport {\n\ttype BillingImportDatabase,\n\tcreateBillingImportDatabase,\n\twrapBillingSqlExecutorAsDatabase,\n} from \"./database.ts\";\nimport { runBillingCustomerImportPage } from \"./importer.ts\";\nimport {\n\tcreatePostgresBillingImportBindingStore,\n\tcreatePostgresBillingImportCursorStore,\n\tcreatePostgresBillingImportDocumentStore,\n\tcreatePostgresBillingSubjectDirectory,\n\tlistActiveBillingImportConnections,\n\tresolveBillingImportConnection,\n} from \"./postgres.ts\";\nimport { createMollieBillingCustomerImportPort } from \"./providers/mollie.ts\";\nimport {\n\ttype BillingImportPolicy,\n\ttype BillingImportRunReport,\n\tDEFAULT_BILLING_IMPORT_POLICY,\n} from \"./types.ts\";\n\nexport function importPolicyFromBillingConfig(\n\tbilling?: AthenaBillingConfig,\n): BillingImportPolicy {\n\treturn {\n\t\tallowSecondaryBindings:\n\t\t\tDEFAULT_BILLING_IMPORT_POLICY.allowSecondaryBindings,\n\t\tallowUniqueEmailAutoBind:\n\t\t\tbilling?.import?.customers?.allowUniqueEmailAutoBind === true,\n\t};\n}\n\nfunction isDefaultMollieCredentialReference(reference: string): boolean {\n\ttry {\n\t\tconst parsed = parseBillingCredentialReference(reference);\n\t\treturn parsed.provider === \"mollie\" && parsed.accountId == null;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction mollieConfigFromProviders(\n\tconfigured?: BillingProviderConfigMap,\n): NonNullable<BillingProviderConfigMap[\"mollie\"]> | undefined {\n\treturn configured?.mollie;\n}\n\nfunction databaseFromSql(\n\tsql: BillingSqlExecutor | BillingImportDatabase,\n\tpool?: AthenaPostgresPool,\n): BillingImportDatabase {\n\tif (pool) {\n\t\treturn createBillingImportDatabase(pool);\n\t}\n\tif (\"transaction\" in sql && typeof sql.transaction === \"function\") {\n\t\treturn sql;\n\t}\n\treturn wrapBillingSqlExecutorAsDatabase(sql);\n}\n\nfunction toImportReport(\n\tresult: Awaited<ReturnType<typeof reconcileBillingCustomers>>,\n): BillingImportRunReport {\n\treturn {\n\t\tbindingsActivated: result.bindingsActivated,\n\t\tbindingsCreated: result.bindingsCreated,\n\t\tconflicts: result.conflicts,\n\t\tconnectionId: result.connectionId,\n\t\tcorrelationId: result.correlationId,\n\t\tcursorAfter: result.cursorAfter,\n\t\tcursorBefore: result.cursorBefore,\n\t\tcustomersScanned: result.customersScanned,\n\t\tdryRun: result.dryRun,\n\t\tenvironment: result.environment,\n\t\terrors: result.errors,\n\t\thasMore: result.hasMore,\n\t\tpagesProcessed: result.pagesProcessed,\n\t\tplans: result.plans,\n\t\tprovider: result.provider,\n\t\trunId: result.runId,\n\t\tskipped: result.skipped,\n\t\tstatus: result.status,\n\t\ttraceId: result.traceId,\n\t};\n}\n\nexport async function runBillingCustomerImportWithPostgres(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnectionId?: string;\n\tcursor?: string;\n\tcustomerId?: string;\n\tdatabase?: BillingImportDatabase;\n\tdryRun: boolean;\n\tincludeAmbiguous?: boolean;\n\tlimit?: number;\n\tlimits?: Partial<BillingReconciliationLimits>;\n\tpolicy?: BillingImportPolicy;\n\tpool?: AthenaPostgresPool;\n\tprovider?: string;\n\tsql: BillingSqlExecutor;\n\tsubjectId?: string;\n\ttestMode?: boolean;\n\ttrigger?: \"bootstrap\" | \"manual\" | \"scheduled\" | \"webhook\";\n\tobservability?: NormalizedAthenaBillingObservability;\n\treconciliationContext?: import(\"../observability/types.ts\").BillingReconciliationContext;\n}): Promise<BillingImportRunReport> {\n\tconst connection = await resolveBillingImportConnection(input.sql, {\n\t\tconnectionId: input.connectionId,\n\t\tprovider: input.provider,\n\t});\n\tif (input.testMode !== undefined && input.testMode !== connection.testMode) {\n\t\tthrow new AthenaBillingCredentialError({\n\t\t\tcode: ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n\t\t\tenvironment: connection.environment,\n\t\t\tmessage:\n\t\t\t\t\"billing.testMode does not match billing_provider_connections.environment.\",\n\t\t\tprovider: connection.provider,\n\t\t});\n\t}\n\tconst providerName = (input.provider ?? connection.provider)\n\t\t.trim()\n\t\t.toLowerCase();\n\tif (providerName !== \"mollie\") {\n\t\tthrow new Error(\n\t\t\t`Billing customer import supports Mollie in this slice (got \"${providerName}\").`,\n\t\t);\n\t}\n\tconst mollie =\n\t\tmollieConfigForCredentialReference(\n\t\t\tinput.configuredProviders,\n\t\t\tconnection.credentialReference,\n\t\t) ??\n\t\t(isDefaultMollieCredentialReference(connection.credentialReference)\n\t\t\t? mollieConfigFromProviders(input.configuredProviders)\n\t\t\t: undefined);\n\tif (mollie == null) {\n\t\tthrow new Error(\n\t\t\t`Mollie is not configured for credential_reference \"${connection.credentialReference}\". Set billing.providers.mollie or billing.providers.mollieAccounts.`,\n\t\t);\n\t}\n\tconst normalized = normalizeMollieRuntimeConfig(mollie);\n\tconst pool = new MollieSdkClientPool(normalized);\n\tconst execution = createConnectionProviderExecutionContext({\n\t\tconfiguredProviders: {\n\t\t\t...input.configuredProviders,\n\t\t\tmollie,\n\t\t},\n\t\tconnection,\n\t\toperationScope: \"organization\",\n\t});\n\tconst discovery = createMollieBillingCustomerImportPort({\n\t\tconnection,\n\t\tcontext: execution,\n\t\tpool,\n\t});\n\tconst database = input.database ?? databaseFromSql(input.sql, input.pool);\n\tconst policy = input.policy ?? DEFAULT_BILLING_IMPORT_POLICY;\n\tconst observability =\n\t\tinput.observability ?? normalizeAthenaBillingObservability();\n\tconst traces = observability.traces.enabled\n\t\t? createPostgresBillingTraceRecorder(\n\t\t\tinput.sql,\n\t\t\tobservability.traces.sampleRate,\n\t\t)\n\t\t: createDisabledBillingTraceRecorder();\n\tconst semanticAudit =\n\t\tinput.dryRun || observability.auditLog === false\n\t\t\t? undefined\n\t\t\t: createPostgresBillingAuditWriter(input.sql);\n\tconst context =\n\t\tinput.reconciliationContext ??\n\t\t(input.trigger === \"scheduled\"\n\t\t\t? mintScheduledBillingReconciliationContext({\n\t\t\t\tconnectionId: connection.id,\n\t\t\t\tprovider: connection.provider,\n\t\t\t\tschedulerExecutionId: crypto.randomUUID(),\n\t\t\t})\n\t\t\t: mintManualBillingReconciliationContext({\n\t\t\t\tconnectionId: connection.id,\n\t\t\t\tprovider: connection.provider,\n\t\t\t\ttrigger: input.trigger === \"bootstrap\" ? \"bootstrap\" : \"manual\",\n\t\t\t}));\n\tconst limits = resolveBillingReconciliationLimits({\n\t\tpageSize: input.limit ?? input.limits?.pageSize,\n\t\tmaxCustomers: input.limits?.maxCustomers,\n\t\tmaxDurationMs: input.limits?.maxDurationMs,\n\t\tmaxPages: input.limits?.maxPages,\n\t});\n\tconst result =\n\t\tinput.customerId != null\n\t\t\t? await reconcileBillingCustomer({\n\t\t\t\tconnection,\n\t\t\t\tcontext,\n\t\t\t\tdryRun: input.dryRun,\n\t\t\t\tlease: input.dryRun\n\t\t\t\t\t? undefined\n\t\t\t\t\t: createPostgresBillingReconciliationLeaseStore(input.sql),\n\t\t\t\trootSql: input.sql,\n\t\t\t\trunTargetedPage: (sql) =>\n\t\t\t\t\trunBillingCustomerImportPage({\n\t\t\t\t\t\taudit: input.dryRun\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: createPostgresBillingImportAuditStore(sql),\n\t\t\t\t\t\tbindings: createPostgresBillingImportBindingStore(sql),\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tcursors: createPostgresBillingImportCursorStore(sql),\n\t\t\t\t\t\tcustomerId: input.customerId,\n\t\t\t\t\t\tdirectory: createPostgresBillingSubjectDirectory(sql),\n\t\t\t\t\t\tdiscovery,\n\t\t\t\t\t\tdocuments: createPostgresBillingImportDocumentStore(sql),\n\t\t\t\t\t\tdryRun: input.dryRun,\n\t\t\t\t\t\tincludeAmbiguous: input.includeAmbiguous,\n\t\t\t\t\t\tlimit: limits.pageSize,\n\t\t\t\t\t\tpolicy,\n\t\t\t\t\t\tprovider: connection.provider,\n\t\t\t\t\t\tsemanticAudit:\n\t\t\t\t\t\t\tsemanticAudit == null\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: createPostgresBillingAuditWriter(sql),\n\t\t\t\t\t\tskipCursorAdvance: true,\n\t\t\t\t\t\tsubjectId: input.subjectId,\n\t\t\t\t\t}),\n\t\t\t\tsemanticAudit,\n\t\t\t\ttraces,\n\t\t\t\ttransaction: (fn) => database.transaction(fn),\n\t\t\t})\n\t\t\t: await reconcileBillingCustomers({\n\t\t\t\taudit: input.dryRun\n\t\t\t\t\t? undefined\n\t\t\t\t\t: createPostgresBillingImportAuditStore(input.sql),\n\t\t\t\tconnection,\n\t\t\t\tcontext,\n\t\t\t\tcursors: createPostgresBillingImportCursorStore(input.sql),\n\t\t\t\tdryRun: input.dryRun,\n\t\t\t\tlease: input.dryRun\n\t\t\t\t\t? undefined\n\t\t\t\t\t: createPostgresBillingReconciliationLeaseStore(input.sql),\n\t\t\t\tlimits,\n\t\t\t\trootSql: input.sql,\n\t\t\t\trunPage: ({ cursor, limit, sql }) =>\n\t\t\t\t\trunBillingCustomerImportPage({\n\t\t\t\t\t\taudit: input.dryRun\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: createPostgresBillingImportAuditStore(sql),\n\t\t\t\t\t\tbindings: createPostgresBillingImportBindingStore(sql),\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tcursor: cursor ?? undefined,\n\t\t\t\t\t\tcursors: createPostgresBillingImportCursorStore(sql),\n\t\t\t\t\t\tdirectory: createPostgresBillingSubjectDirectory(sql),\n\t\t\t\t\t\tdiscovery,\n\t\t\t\t\t\tdocuments: createPostgresBillingImportDocumentStore(sql),\n\t\t\t\t\t\tdryRun: input.dryRun,\n\t\t\t\t\t\tincludeAmbiguous: input.includeAmbiguous,\n\t\t\t\t\t\tlimit,\n\t\t\t\t\t\tpolicy,\n\t\t\t\t\t\tprovider: connection.provider,\n\t\t\t\t\t\tsemanticAudit:\n\t\t\t\t\t\t\tsemanticAudit == null\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: createPostgresBillingAuditWriter(sql),\n\t\t\t\t\t\tsubjectId: input.subjectId,\n\t\t\t\t\t}),\n\t\t\t\tsemanticAudit,\n\t\t\t\ttraces,\n\t\t\t\ttransaction: (fn) => database.transaction(fn),\n\t\t\t});\n\treturn toImportReport(result);\n}\n\nconst warnedSkippedImportConnections = new Set<string>();\n\nexport async function runAutomaticBillingCustomerImportIfEnabled(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tcustomerImport?: AthenaBillingConfig[\"import\"];\n\tdatabase?: BillingImportDatabase;\n\tobservability?: NormalizedAthenaBillingObservability;\n\tpool?: AthenaPostgresPool;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n\ttrigger?: \"bootstrap\" | \"scheduled\";\n}): Promise<readonly BillingImportRunReport[]> {\n\tif (\n\t\t!shouldAutomaticallyImportBillingCustomers(input.customerImport?.customers)\n\t) {\n\t\treturn [];\n\t}\n\tconst connections = await listActiveBillingImportConnections(\n\t\tinput.sql,\n\t\t\"mollie\",\n\t);\n\tconst reports: BillingImportRunReport[] = [];\n\tconst policy = importPolicyFromBillingConfig({\n\t\timport: input.customerImport,\n\t});\n\tconst limits = input.customerImport?.customers?.limits;\n\tfor (const connection of connections) {\n\t\tif (\n\t\t\t!billingConnectionMatchesProcessTestMode(\n\t\t\t\tconnection.testMode,\n\t\t\t\tinput.testMode,\n\t\t\t)\n\t\t) {\n\t\t\tconst skipKey = `env:${connection.id}`;\n\t\t\tif (!warnedSkippedImportConnections.has(skipKey)) {\n\t\t\t\twarnedSkippedImportConnections.add(skipKey);\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[athena-billing] skipping customer import; connection environment does not match process billing.testMode\",\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tenvironment: connection.environment,\n\t\t\t\t\t\tprocessTestMode: resolveBillingEnvironment({\n\t\t\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t\t\t}).testMode,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\t!billingConnectionHasConfiguredCredential({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tconnection,\n\t\t\t})\n\t\t) {\n\t\t\tconst skipKey = `cred:${connection.id}`;\n\t\t\tif (!warnedSkippedImportConnections.has(skipKey)) {\n\t\t\t\twarnedSkippedImportConnections.add(skipKey);\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[athena-billing] skipping customer import; connection environment has no configured credential\",\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tenvironment: connection.environment,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\treports.push(\n\t\t\tawait runBillingCustomerImportWithPostgres({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tconnectionId: connection.id,\n\t\t\t\tdatabase: input.database,\n\t\t\t\tdryRun: false,\n\t\t\t\tlimits,\n\t\t\t\tpolicy,\n\t\t\t\tpool: input.pool,\n\t\t\t\tprovider: \"mollie\",\n\t\t\t\tsql: input.sql,\n\t\t\t\ttestMode: connection.testMode,\n\t\t\t\ttrigger: input.trigger ?? \"bootstrap\",\n\t\t\t\tobservability: input.observability,\n\t\t\t}),\n\t\t);\n\t}\n\treturn reports;\n}\n","import type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingWebhookRegistrationRecord } from \"./types.ts\";\n\nexport interface BillingWebhookRegistrationStore {\n\tget(input: {\n\t\tconnectionId: string;\n\t\tkind: BillingWebhookRegistrationRecord[\"kind\"];\n\t}): Promise<BillingWebhookRegistrationRecord | null>;\n\tlist(connectionId: string): Promise<readonly BillingWebhookRegistrationRecord[]>;\n\ttouchLastDelivery(input: {\n\t\tconnectionId: string;\n\t\tkind: BillingWebhookRegistrationRecord[\"kind\"];\n\t}): Promise<void>;\n\tupsert(record: BillingWebhookRegistrationRecord): Promise<void>;\n}\n\nexport function createMemoryBillingWebhookRegistrationStore(): {\n\trows: BillingWebhookRegistrationRecord[];\n\tstore: BillingWebhookRegistrationStore;\n} {\n\tconst rows: BillingWebhookRegistrationRecord[] = [];\n\treturn {\n\t\trows,\n\t\tstore: {\n\t\t\tasync get(input) {\n\t\t\t\treturn (\n\t\t\t\t\trows.find(\n\t\t\t\t\t\t(row) =>\n\t\t\t\t\t\t\trow.connectionId === input.connectionId &&\n\t\t\t\t\t\t\trow.kind === input.kind,\n\t\t\t\t\t) ?? null\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(connectionId) {\n\t\t\t\treturn rows.filter((row) => row.connectionId === connectionId);\n\t\t\t},\n\t\t\tasync touchLastDelivery(input) {\n\t\t\t\tconst row = rows.find(\n\t\t\t\t\t(entry) =>\n\t\t\t\t\t\tentry.connectionId === input.connectionId &&\n\t\t\t\t\t\tentry.kind === input.kind,\n\t\t\t\t);\n\t\t\t\tif (row) {\n\t\t\t\t\trow.lastDeliveryAt = new Date();\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync upsert(record) {\n\t\t\t\tconst index = rows.findIndex(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\trow.connectionId === record.connectionId &&\n\t\t\t\t\t\trow.kind === record.kind,\n\t\t\t\t);\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\trows[index] = record;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\trows.push(record);\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingWebhookRegistrationStore(\n\tsql: BillingSqlExecutor,\n): BillingWebhookRegistrationStore {\n\treturn {\n\t\tasync get(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT * FROM billing.billing_webhook_registrations\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t[input.connectionId, input.kind],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\treturn row ? mapRow(row) : null;\n\t\t},\n\t\tasync list(connectionId) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT * FROM billing.billing_webhook_registrations\nWHERE connection_id = $1::uuid\n`,\n\t\t\t\t[connectionId],\n\t\t\t);\n\t\t\treturn result.rows.map(mapRow);\n\t\t},\n\t\tasync touchLastDelivery(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`\nUPDATE billing.billing_webhook_registrations\nSET last_delivery_at = now(), updated_at = now()\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t[input.connectionId, input.kind],\n\t\t\t);\n\t\t},\n\t\tasync upsert(record) {\n\t\t\tawait sql.query(\n\t\t\t\t`\nINSERT INTO billing.billing_webhook_registrations (\n\tid, connection_id, provider, provider_webhook_id, kind, environment,\n\tname, url, event_types, status, config_hash, secret_version, secret_fingerprint,\n\tlast_reconciled_at, last_verified_at, last_delivery_at, last_error, metadata,\n\tcreated_at, updated_at\n) VALUES (\n\t$1::uuid, $2::uuid, $3, $4, $5, $6, $7, $8, $9::jsonb, $10, $11, $12, $13,\n\t$14, $15, $16, $17::jsonb, $18::jsonb, now(), now()\n)\n\tON CONFLICT (connection_id, kind) DO UPDATE SET\n\tprovider_webhook_id = EXCLUDED.provider_webhook_id,\n\tname = EXCLUDED.name,\n\turl = EXCLUDED.url,\n\tevent_types = EXCLUDED.event_types,\n\tstatus = EXCLUDED.status,\n\tconfig_hash = EXCLUDED.config_hash,\n\tsecret_version = EXCLUDED.secret_version,\n\tsecret_fingerprint = EXCLUDED.secret_fingerprint,\n\tlast_reconciled_at = EXCLUDED.last_reconciled_at,\n\tlast_verified_at = EXCLUDED.last_verified_at,\n\tlast_error = EXCLUDED.last_error,\n\tmetadata = EXCLUDED.metadata,\n\tupdated_at = now()\n`,\n\t\t\t\t[\n\t\t\t\t\trecord.id,\n\t\t\t\t\trecord.connectionId,\n\t\t\t\t\trecord.provider,\n\t\t\t\t\trecord.providerWebhookId ?? null,\n\t\t\t\t\trecord.kind,\n\t\t\t\t\trecord.environment,\n\t\t\t\t\trecord.name,\n\t\t\t\t\trecord.url,\n\t\t\t\t\tJSON.stringify(record.eventTypes),\n\t\t\t\t\trecord.status,\n\t\t\t\t\trecord.configHash,\n\t\t\t\t\trecord.secretVersion ?? null,\n\t\t\t\t\trecord.secretFingerprint ?? null,\n\t\t\t\t\trecord.lastReconciledAt ?? new Date(),\n\t\t\t\t\trecord.lastVerifiedAt ?? null,\n\t\t\t\t\trecord.lastDeliveryAt ?? null,\n\t\t\t\t\tJSON.stringify(record.lastError ?? null),\n\t\t\t\t\tJSON.stringify({}),\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t};\n}\n\nfunction mapRow(row: Record<string, unknown>): BillingWebhookRegistrationRecord {\n\tconst eventTypes = Array.isArray(row.event_types)\n\t\t? row.event_types.filter((entry): entry is string => typeof entry === \"string\")\n\t\t: [];\n\treturn {\n\t\tconfigHash: String(row.config_hash ?? \"\"),\n\t\tconnectionId: String(row.connection_id),\n\t\tenvironment: row.environment === \"live\" ? \"live\" : \"test\",\n\t\teventTypes,\n\t\tid: String(row.id),\n\t\tkind: row.kind === \"classic\" ? \"classic\" : \"next_gen\",\n\t\tname: String(row.name ?? \"\"),\n\t\tprovider: String(row.provider),\n\t\tstatus: (row.status as BillingWebhookRegistrationRecord[\"status\"]) ?? \"pending\",\n\t\turl: String(row.url ?? \"\"),\n\t\t...(typeof row.secret_fingerprint === \"string\"\n\t\t\t? { secretFingerprint: row.secret_fingerprint }\n\t\t\t: {}),\n\t\t...(typeof row.secret_version === \"number\"\n\t\t\t? { secretVersion: row.secret_version }\n\t\t\t: {}),\n\t\t...(row.last_verified_at instanceof Date\n\t\t\t? { lastVerifiedAt: row.last_verified_at }\n\t\t\t: typeof row.last_verified_at === \"string\"\n\t\t\t\t? { lastVerifiedAt: new Date(row.last_verified_at) }\n\t\t\t\t: {}),\n\t\t...(row.last_delivery_at instanceof Date\n\t\t\t? { lastDeliveryAt: row.last_delivery_at }\n\t\t\t: typeof row.last_delivery_at === \"string\"\n\t\t\t\t? { lastDeliveryAt: new Date(row.last_delivery_at) }\n\t\t\t\t: {}),\n\t\t...(row.last_reconciled_at instanceof Date\n\t\t\t? { lastReconciledAt: row.last_reconciled_at }\n\t\t\t: typeof row.last_reconciled_at === \"string\"\n\t\t\t\t? { lastReconciledAt: new Date(row.last_reconciled_at) }\n\t\t\t\t: {}),\n\t\t...(row.last_accepted_at instanceof Date\n\t\t\t? { lastAcceptedAt: row.last_accepted_at }\n\t\t\t: typeof row.last_accepted_at === \"string\"\n\t\t\t\t? { lastAcceptedAt: new Date(row.last_accepted_at) }\n\t\t\t\t: {}),\n\t\t...(row.last_rejected_at instanceof Date\n\t\t\t? { lastRejectedAt: row.last_rejected_at }\n\t\t\t: typeof row.last_rejected_at === \"string\"\n\t\t\t\t? { lastRejectedAt: new Date(row.last_rejected_at) }\n\t\t\t\t: {}),\n\t\t...(typeof row.last_rejection_code === \"string\"\n\t\t\t? { lastRejectionCode: row.last_rejection_code }\n\t\t\t: {}),\n\t\t...(row.last_reconciliation_outcome === \"completed\" ||\n\t\trow.last_reconciliation_outcome === \"failed\" ||\n\t\trow.last_reconciliation_outcome === \"skipped\"\n\t\t\t? { lastReconciliationOutcome: row.last_reconciliation_outcome }\n\t\t\t: {}),\n\t\t...(typeof row.last_ingress_stage === \"string\"\n\t\t\t? { lastIngressStage: row.last_ingress_stage }\n\t\t\t: {}),\n\t\t...(row.last_error != null ? { lastError: row.last_error } : {}),\n\t};\n}\n","import { mollieCredentialSupportsManagedNextGen } from \"../../../../ingestion/config.ts\";\nimport type { BillingProviderBinding } from \"../types.ts\";\nimport type { BillingWebhookManagementCapability } from \"../types.ts\";\n\nexport function resolveMollieWebhookManagementCapability(\n\tbinding: BillingProviderBinding,\n): BillingWebhookManagementCapability {\n\tconst live = binding.credentials.live;\n\tconst test = binding.credentials.test;\n\tconst kind = live?.kind ?? test?.kind;\n\tif (kind === \"api_key\" || kind === \"secret_key\" || kind === \"restricted_key\") {\n\t\treturn {\n\t\t\tclassic: true,\n\t\t\tnextGen: {\n\t\t\t\tavailable: false,\n\t\t\t\treason: \"api_key_classic_only\",\n\t\t\t},\n\t\t};\n\t}\n\tif (mollieCredentialSupportsManagedNextGen(kind)) {\n\t\treturn {\n\t\t\tclassic: true,\n\t\t\tnextGen: { available: true },\n\t\t};\n\t}\n\treturn {\n\t\tclassic: true,\n\t\tnextGen: {\n\t\t\tavailable: false,\n\t\t\treason: \"credential_missing_webhooks_write\",\n\t\t},\n\t};\n}\n","import { createHash } from \"node:crypto\";\nimport { billingWebhookOwnershipMarker } from \"../ownership.ts\";\nimport type { BillingWebhookDesiredState } from \"./types.ts\";\nimport type { BillingWebhookReconcileInput } from \"./types.ts\";\n\nexport function billingWebhookConfigHash(input: {\n\teventTypes: readonly string[];\n\tkind: string;\n\turl: string;\n}): string {\n\treturn createHash(\"sha256\")\n\t\t.update(\n\t\t\tJSON.stringify({\n\t\t\t\teventTypes: [...input.eventTypes].sort(),\n\t\t\t\tkind: input.kind,\n\t\t\t\turl: input.url,\n\t\t\t}),\n\t\t\t\"utf8\",\n\t\t)\n\t\t.digest(\"hex\")\n\t\t.slice(0, 32);\n}\n\nexport function buildDesiredBillingWebhookState(\n\tinput: BillingWebhookReconcileInput,\n): BillingWebhookDesiredState {\n\tconst marker = billingWebhookOwnershipMarker({\n\t\tapplicationId: input.applicationId,\n\t\tconnectionId: input.connectionId,\n\t});\n\tconst mollie = input.webhooks.providers.mollie;\n\tconst classicEnabled = mollie.classic.enabled && mollie.strategy !== \"next_gen\";\n\tconst nextGenWanted =\n\t\tmollie.nextGen.enabled !== false && mollie.strategy !== \"classic\";\n\tconst nextGenEnabled =\n\t\tnextGenWanted &&\n\t\t(mollie.nextGen.enabled === \"required\" || input.capability.nextGen.available);\n\treturn {\n\t\tmarker,\n\t\t...(classicEnabled\n\t\t\t? {\n\t\t\t\t\tclassic: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\turl: input.endpoints.classicUrl,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(nextGenWanted\n\t\t\t? {\n\t\t\t\t\tnextGen: {\n\t\t\t\t\t\tenabled: nextGenEnabled,\n\t\t\t\t\t\teventTypes: mollie.nextGen.eventTypes,\n\t\t\t\t\t\tname: marker,\n\t\t\t\t\t\trequired: mollie.nextGen.enabled === \"required\",\n\t\t\t\t\t\turl: input.endpoints.eventsUrl,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n}\n","import { isAthenaOwnedWebhookName } from \"../ownership.ts\";\nimport type { BillingProviderWebhook } from \"../../runtime/local/providers/types.ts\";\nimport { billingWebhookUrlIsLoopback } from \"../urls.ts\";\nimport type { BillingWebhookDesiredState } from \"./types.ts\";\nimport type { BillingWebhookReconciliationPlan } from \"./types.ts\";\n\nfunction sameEventTypes(\n\tleft: readonly string[],\n\tright: readonly string[],\n): boolean {\n\tif (left.length !== right.length) {\n\t\treturn false;\n\t}\n\tconst a = [...left].sort();\n\tconst b = [...right].sort();\n\treturn a.every((value, index) => value === b[index]);\n}\n\nexport function planBillingWebhookReconciliation(input: {\n\tactual: readonly BillingProviderWebhook[];\n\tdesired: BillingWebhookDesiredState;\n\tmanagement: \"automatic\" | \"manual\";\n}): {\n\tforeign: readonly BillingProviderWebhook[];\n\tplans: readonly BillingWebhookReconciliationPlan[];\n} {\n\tconst foreign = input.actual.filter(\n\t\t(webhook) => !isAthenaOwnedWebhookName(webhook.name, input.desired.marker),\n\t);\n\tconst owned = input.actual.filter((webhook) =>\n\t\tisAthenaOwnedWebhookName(webhook.name, input.desired.marker),\n\t);\n\tconst plans: BillingWebhookReconciliationPlan[] = [];\n\tconst nextGen = input.desired.nextGen;\n\tif (nextGen) {\n\t\tif (billingWebhookUrlIsLoopback(nextGen.url)) {\n\t\t\tplans.push({\n\t\t\t\taction: \"noop\",\n\t\t\t\tkind: \"next_gen\",\n\t\t\t\towned: true,\n\t\t\t\treason: \"loopback_webhook_url\",\n\t\t\t});\n\t\t} else if (!nextGen.enabled) {\n\t\t\tplans.push({\n\t\t\t\taction: \"noop\",\n\t\t\t\tkind: \"next_gen\",\n\t\t\t\towned: false,\n\t\t\t\treason: \"next_gen_unsupported\",\n\t\t\t});\n\t\t} else {\n\t\t\tconst match = owned.find((webhook) => webhook.url.length > 0);\n\t\t\tif (!match) {\n\t\t\t\tplans.push({\n\t\t\t\t\taction: input.management === \"manual\" ? \"conflict\" : \"create\",\n\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\towned: true,\n\t\t\t\t\treason: \"owned_webhook_missing\",\n\t\t\t\t});\n\t\t\t} else if (\n\t\t\t\tmatch.url !== nextGen.url ||\n\t\t\t\t!sameEventTypes(match.eventTypes, nextGen.eventTypes) ||\n\t\t\t\tmatch.status === \"disabled\"\n\t\t\t) {\n\t\t\t\tplans.push({\n\t\t\t\t\taction: input.management === \"manual\" ? \"conflict\" : \"update\",\n\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\towned: true,\n\t\t\t\t\tproviderWebhook: match,\n\t\t\t\t\treason:\n\t\t\t\t\t\tmatch.status === \"disabled\"\n\t\t\t\t\t\t\t? \"registration_disabled\"\n\t\t\t\t\t\t\t: \"owned_webhook_drift\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tplans.push({\n\t\t\t\t\taction: \"noop\",\n\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\towned: true,\n\t\t\t\t\tproviderWebhook: match,\n\t\t\t\t\treason: \"in_sync\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tif (input.desired.classic) {\n\t\tplans.push({\n\t\t\taction: \"noop\",\n\t\t\tkind: \"classic\",\n\t\t\towned: true,\n\t\t\treason: \"classic_url_injection\",\n\t\t});\n\t}\n\treturn { foreign, plans };\n}\n","import type { AthenaBillingAuditWriter } from \"../../observability/audit.ts\";\nimport { billingEventDefinition } from \"../../observability/events.ts\";\nimport type { AthenaBillingTraceRecorder } from \"../../observability/traces.ts\";\nimport { runWithBillingTrace } from \"../../observability/traces.ts\";\nimport type {\n\tAthenaBillingAuditEntry,\n\tBillingReconciliationContext,\n} from \"../../observability/types.ts\";\nimport {\n\tmintBillingAuditIdentity,\n\tvalidateBillingAuditEntry,\n} from \"../../observability/validate.ts\";\nimport {\n\tBILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n\ttype BillingReconciliationLeaseStore,\n\tbillingReconciliationLeaseTtlMs,\n} from \"../../reconciliation/lease.ts\";\nimport { emitBillingAuditFailure } from \"../../reconciliation/semantic-audit.ts\";\nimport type {\n\tBillingProviderExecutionContext,\n\tBillingWebhooksPort,\n} from \"../../runtime/local/providers/types.ts\";\nimport {\n\tbillingWebhookOwnershipMarker,\n\tfingerprintBillingSigningSecret,\n} from \"../ownership.ts\";\nimport {\n\tbillingWebhookConfigHash,\n\tbuildDesiredBillingWebhookState,\n} from \"./desired-state.ts\";\nimport { planBillingWebhookReconciliation } from \"./planner.ts\";\nimport type { BillingWebhookRegistrationStore } from \"./repository.ts\";\nimport type { BillingWebhookSecretStore } from \"../secrets/types.ts\";\nimport type {\n\tBillingWebhookReconcileInput,\n\tBillingWebhookReconciliationPlan,\n\tBillingWebhookRegistrationRecord,\n} from \"./types.ts\";\n\nexport interface ReconcileBillingWebhooksResult {\n\tforeignUntouched: number;\n\tplans: readonly BillingWebhookReconciliationPlan[];\n\ttraceId: string;\n}\n\nexport async function reconcileBillingWebhookRegistrations(input: {\n\taudit?: AthenaBillingAuditWriter;\n\tcontext: BillingReconciliationContext;\n\tdryRun?: boolean;\n\texecution: BillingProviderExecutionContext;\n\tlease?: BillingReconciliationLeaseStore;\n\tport?: BillingWebhooksPort;\n\treconcile: BillingWebhookReconcileInput;\n\tregistrations?: BillingWebhookRegistrationStore;\n\trememberSigningSecret?: (input: {\n\t\tconnectionId: string;\n\t\tsecret: string;\n\t}) => void;\n\tsecretStore?: BillingWebhookSecretStore;\n\ttraces?: AthenaBillingTraceRecorder;\n}): Promise<ReconcileBillingWebhooksResult> {\n\tconst desired = buildDesiredBillingWebhookState(input.reconcile);\n\tconst trace = input.traces?.start({\n\t\tcausationId: input.context.causationId,\n\t\tconnectionId: input.reconcile.connectionId,\n\t\tcorrelationId: input.context.correlationId,\n\t\toperation: \"billing.webhook.reconcile\",\n\t\tprovider: input.reconcile.provider,\n\t\ttraceId: input.context.traceId,\n\t\ttrigger: input.context.trigger,\n\t});\n\tconst ownerId = crypto.randomUUID();\n\tconst run = async (): Promise<ReconcileBillingWebhooksResult> => {\n\t\tlet leaseEpoch: number | undefined;\n\t\tif (!input.dryRun && input.lease) {\n\t\t\tconst leasePhase = trace?.phase(\"lease\");\n\t\t\tconst acquired = await input.lease.acquire({\n\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\townerId,\n\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n\t\t\t\tttlMs: billingReconciliationLeaseTtlMs(120_000),\n\t\t\t});\n\t\t\tleasePhase?.finish();\n\t\t\tif (!acquired) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Another reconciler holds the webhook_registrations lease.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tleaseEpoch = acquired.epoch;\n\t\t}\n\t\tconst fetchPhase = trace?.phase(\"provider_fetch\");\n\t\tconst listed = input.port\n\t\t\t? await input.port.list(input.execution)\n\t\t\t: { items: [] };\n\t\tfetchPhase?.finish();\n\t\tconst diffPhase = trace?.phase(\"diff\");\n\t\tconst planned = planBillingWebhookReconciliation({\n\t\t\tactual: listed.items,\n\t\t\tdesired,\n\t\t\tmanagement: input.reconcile.management,\n\t\t});\n\t\tdiffPhase?.finish();\n\t\tif (\n\t\t\t!input.dryRun &&\n\t\t\tinput.reconcile.management === \"automatic\" &&\n\t\t\tinput.port\n\t\t) {\n\t\t\tconst applyPhase = trace?.phase(\"apply\");\n\t\t\tif (input.lease && leaseEpoch != null) {\n\t\t\t\tconst held = await input.lease.heartbeat({\n\t\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\t\tepoch: leaseEpoch,\n\t\t\t\t\townerId,\n\t\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n\t\t\t\t\tttlMs: billingReconciliationLeaseTtlMs(120_000),\n\t\t\t\t});\n\t\t\t\tif (!held) {\n\t\t\t\t\tthrow new Error(\"Reconciliation lease was lost.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const plan of planned.plans) {\n\t\t\t\tif (plan.kind !== \"next_gen\" || !desired.nextGen?.enabled) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (plan.action === \"create\") {\n\t\t\t\t\tconst created = await input.port.create(input.execution, {\n\t\t\t\t\t\teventTypes: desired.nextGen.eventTypes,\n\t\t\t\t\t\tidempotencyKey: crypto.randomUUID(),\n\t\t\t\t\t\tname: desired.nextGen.name,\n\t\t\t\t\t\turl: desired.nextGen.url,\n\t\t\t\t\t});\n\t\t\t\t\tif (created.signingSecret) {\n\t\t\t\t\t\tinput.rememberSigningSecret?.({\n\t\t\t\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\t\t\t\tsecret: created.signingSecret,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait persistAndAudit(input, {\n\t\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\t\tproviderSigningSecret: created.signingSecret,\n\t\t\t\t\t\tproviderWebhookId: created.id,\n\t\t\t\t\t\tstatus: \"active\",\n\t\t\t\t\t\turl: created.url,\n\t\t\t\t\t\teventTypes: created.eventTypes,\n\t\t\t\t\t\tevent: \"billing.webhook.registration.created\",\n\t\t\t\t\t});\n\t\t\t\t} else if (\n\t\t\t\t\tplan.action === \"update\" &&\n\t\t\t\t\tplan.providerWebhook &&\n\t\t\t\t\tinput.port.update\n\t\t\t\t) {\n\t\t\t\t\tconst updated = await input.port.update(input.execution, {\n\t\t\t\t\t\teventTypes: desired.nextGen.eventTypes,\n\t\t\t\t\t\tid: plan.providerWebhook.id,\n\t\t\t\t\t\tname: desired.nextGen.name,\n\t\t\t\t\t\turl: desired.nextGen.url,\n\t\t\t\t\t});\n\t\t\t\t\tif (updated.signingSecret) {\n\t\t\t\t\t\tinput.rememberSigningSecret?.({\n\t\t\t\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\t\t\t\tsecret: updated.signingSecret,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait persistAndAudit(input, {\n\t\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\t\tprevious: {\n\t\t\t\t\t\t\turl: plan.providerWebhook.url,\n\t\t\t\t\t\t\teventTypes: plan.providerWebhook.eventTypes,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tproviderSigningSecret: updated.signingSecret,\n\t\t\t\t\t\tproviderWebhookId: updated.id,\n\t\t\t\t\t\tstatus: \"active\",\n\t\t\t\t\t\turl: updated.url,\n\t\t\t\t\t\teventTypes: updated.eventTypes,\n\t\t\t\t\t\tevent: \"billing.webhook.registration.updated\",\n\t\t\t\t\t});\n\t\t\t\t} else if (plan.action === \"conflict\") {\n\t\t\t\t\tawait persistAndAudit(input, {\n\t\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\t\tproviderWebhookId: plan.providerWebhook?.id ?? \"unregistered\",\n\t\t\t\t\t\tstatus: \"drifted\",\n\t\t\t\t\t\turl: desired.nextGen.url,\n\t\t\t\t\t\teventTypes: desired.nextGen.eventTypes,\n\t\t\t\t\t\tevent: \"billing.webhook.registration.drift_detected\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tapplyPhase?.finish();\n\t\t} else if (\n\t\t\t!input.dryRun &&\n\t\t\tinput.reconcile.management === \"manual\" &&\n\t\t\tplanned.plans.some((plan) => plan.action === \"conflict\")\n\t\t) {\n\t\t\tconst drifted = planned.plans.find((plan) => plan.action === \"conflict\");\n\t\t\tif (drifted && desired.nextGen) {\n\t\t\t\tawait persistAndAudit(input, {\n\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\tproviderWebhookId: drifted.providerWebhook?.id ?? \"unregistered\",\n\t\t\t\t\tstatus: \"drifted\",\n\t\t\t\t\turl: desired.nextGen.url,\n\t\t\t\t\teventTypes: desired.nextGen.eventTypes,\n\t\t\t\t\tevent: \"billing.webhook.registration.drift_detected\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (!input.dryRun && desired.classic && input.registrations) {\n\t\t\tawait input.registrations.upsert({\n\t\t\t\tconfigHash: billingWebhookConfigHash({\n\t\t\t\t\teventTypes: [],\n\t\t\t\t\tkind: \"classic\",\n\t\t\t\t\turl: desired.classic.url,\n\t\t\t\t}),\n\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\tenvironment: input.reconcile.environment,\n\t\t\t\teventTypes: [],\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tkind: \"classic\",\n\t\t\t\tname: desired.marker,\n\t\t\t\tprovider: input.reconcile.provider,\n\t\t\t\tstatus: \"active\",\n\t\t\t\turl: desired.classic.url,\n\t\t\t});\n\t\t}\n\t\tawait trace?.success();\n\t\treturn {\n\t\t\tforeignUntouched: planned.foreign.length,\n\t\t\tplans: planned.plans,\n\t\t\ttraceId: input.context.traceId,\n\t\t};\n\t};\n\ttry {\n\t\treturn await (trace ? runWithBillingTrace(trace, run) : run());\n\t} catch (error) {\n\t\tif (input.audit) {\n\t\t\ttry {\n\t\t\t\tawait emitBillingAuditFailure({\n\t\t\t\t\tcontext: input.context,\n\t\t\t\t\terror,\n\t\t\t\t\twriter: input.audit,\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t/* persistence of the failure row must not hide the original error */\n\t\t\t}\n\t\t}\n\t\tawait trace?.failure(error, \"apply\");\n\t\tthrow error;\n\t} finally {\n\t\tif (!input.dryRun && input.lease) {\n\t\t\tawait input.lease.release({\n\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\townerId,\n\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n\t\t\t});\n\t\t}\n\t}\n}\n\nasync function persistAndAudit(\n\tinput: {\n\t\taudit?: AthenaBillingAuditWriter;\n\t\tcontext: BillingReconciliationContext;\n\t\treconcile: BillingWebhookReconcileInput;\n\t\tregistrations?: BillingWebhookRegistrationStore;\n\t\tsecretStore?: BillingWebhookSecretStore;\n\t},\n\trecord: {\n\t\tevent: AthenaBillingAuditEntry[\"event\"];\n\t\teventTypes: readonly string[];\n\t\tkind: BillingWebhookRegistrationRecord[\"kind\"];\n\t\tprevious?: unknown;\n\t\tproviderSigningSecret?: string;\n\t\tproviderWebhookId: string;\n\t\tstatus: BillingWebhookRegistrationRecord[\"status\"];\n\t\turl: string;\n\t},\n): Promise<void> {\n\tlet secretFingerprint: string | undefined;\n\tif (record.providerSigningSecret && record.providerSigningSecret.length > 0) {\n\t\tsecretFingerprint = fingerprintBillingSigningSecret(\n\t\t\trecord.providerSigningSecret,\n\t\t);\n\t\tawait input.secretStore?.storeCurrent({\n\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\tfingerprint: secretFingerprint,\n\t\t\tsecret: record.providerSigningSecret,\n\t\t});\n\t} else if (input.secretStore) {\n\t\tconst existing = await input.secretStore.resolve(\n\t\t\tinput.reconcile.connectionId,\n\t\t);\n\t\tif (existing.current) {\n\t\t\tsecretFingerprint = fingerprintBillingSigningSecret(existing.current);\n\t\t}\n\t} else if (input.registrations) {\n\t\tconst existing = await input.registrations.get({\n\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\tkind: record.kind,\n\t\t});\n\t\tsecretFingerprint = existing?.secretFingerprint;\n\t}\n\tconst row: BillingWebhookRegistrationRecord = {\n\t\tconfigHash: billingWebhookConfigHash({\n\t\t\teventTypes: record.eventTypes,\n\t\t\tkind: record.kind,\n\t\t\turl: record.url,\n\t\t}),\n\t\tconnectionId: input.reconcile.connectionId,\n\t\tenvironment: input.reconcile.environment,\n\t\teventTypes: record.eventTypes,\n\t\tid: crypto.randomUUID(),\n\t\tkind: record.kind,\n\t\tname: billingWebhookConfigHash({\n\t\t\teventTypes: record.eventTypes,\n\t\t\tkind: record.kind,\n\t\t\turl: record.url,\n\t\t}),\n\t\tprovider: input.reconcile.provider,\n\t\tproviderWebhookId: record.providerWebhookId,\n\t\tstatus: record.status,\n\t\turl: record.url,\n\t\t...(secretFingerprint ? { secretFingerprint } : {}),\n\t};\n\tif (input.registrations) {\n\t\tawait input.registrations.upsert({\n\t\t\t...row,\n\t\t\tname: billingWebhookOwnershipMarker({\n\t\t\t\tapplicationId: input.reconcile.applicationId,\n\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t}),\n\t\t});\n\t}\n\tif (!input.audit) {\n\t\treturn;\n\t}\n\tconst ir = billingEventDefinition(record.event);\n\tconst entry: AthenaBillingAuditEntry = {\n\t\tactor: { kind: \"system\" },\n\t\tcausationId: input.context.causationId,\n\t\tconnectionId: input.reconcile.connectionId,\n\t\tcorrelationId: input.context.correlationId,\n\t\tevent: record.event,\n\t\t...mintBillingAuditIdentity(),\n\t\toutcome: \"success\",\n\t\tprevious: record.previous,\n\t\tprovider: input.reconcile.provider,\n\t\tproviderSubject: { id: record.providerWebhookId, kind: \"webhook\" },\n\t\tresult: {\n\t\t\teventTypes: record.eventTypes,\n\t\t\tstatus: record.status,\n\t\t\turl: record.url,\n\t\t},\n\t\ttraceId: input.context.traceId,\n\t};\n\tvalidateBillingAuditEntry(entry, ir);\n\tawait input.audit.write(entry);\n}\n","import { listActiveBillingImportConnections } from \"../import/postgres.ts\";\nimport { createPostgresBillingAuditWriter } from \"../observability/audit.ts\";\nimport { normalizeAthenaBillingObservability } from \"../observability/config.ts\";\nimport {\n\tcreateDisabledBillingTraceRecorder,\n\tcreatePostgresBillingTraceRecorder,\n} from \"../observability/traces.ts\";\nimport type { NormalizedAthenaBillingObservability } from \"../observability/types.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport {\n\tmintManualBillingReconciliationContext,\n\tmintScheduledBillingReconciliationContext,\n} from \"../reconciliation/context.ts\";\nimport { createPostgresBillingReconciliationLeaseStore } from \"../reconciliation/lease.ts\";\nimport { resolveBillingEnvironment } from \"../runtime/environment.ts\";\nimport {\n\tbillingConnectionHasConfiguredCredential,\n\tbillingConnectionMatchesProcessTestMode,\n\tcreateConnectionProviderExecutionContext,\n} from \"../runtime/local/providers/connection-binding.ts\";\nimport { resolveMollieWebhookManagementCapability } from \"../runtime/local/providers/mollie/webhook-capability.ts\";\nimport type { BillingProviderRegistry } from \"../runtime/local/providers/registry.ts\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport { reconcileBillingWebhookRegistrations } from \"./reconciliation/coordinator.ts\";\nimport { createPostgresBillingWebhookRegistrationStore } from \"./reconciliation/repository.ts\";\nimport type { BillingWebhookSecretStore } from \"./secrets/types.ts\";\nimport type { NormalizedAthenaBillingWebhooksConfig } from \"./types.ts\";\nimport {\n\tbillingWebhookUrlIsLoopback,\n\tresolveBillingIngressEndpoints,\n} from \"./urls.ts\";\n\nconst warnedLoopbackWebhookUrls = new Set<string>();\nconst warnedSkippedWebhookConnections = new Set<string>();\n\nexport async function runAutomaticBillingWebhookReconcileIfEnabled(input: {\n\tapplicationId: string;\n\tappUrl?: string | null;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tobservability?: NormalizedAthenaBillingObservability;\n\tregistry?: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n\ttrigger: \"bootstrap\" | \"scheduled\" | \"manual\";\n\twebhooks: NormalizedAthenaBillingWebhooksConfig;\n\trememberSigningSecret?: (input: {\n\t\tconnectionId: string;\n\t\tsecret: string;\n\t}) => void;\n\tsecretStore?: BillingWebhookSecretStore;\n}): Promise<void> {\n\tif (!input.webhooks.enabled) {\n\t\treturn;\n\t}\n\tconst connections = await listActiveBillingImportConnections(\n\t\tinput.sql,\n\t\t\"mollie\",\n\t);\n\tconst observability =\n\t\tinput.observability ?? normalizeAthenaBillingObservability();\n\tconst traces = observability.traces.enabled\n\t\t? createPostgresBillingTraceRecorder(\n\t\t\tinput.sql,\n\t\t\tobservability.traces.sampleRate,\n\t\t)\n\t\t: createDisabledBillingTraceRecorder();\n\tconst audit = observability.auditLog\n\t\t? createPostgresBillingAuditWriter(input.sql)\n\t\t: undefined;\n\tconst mollie = input.configuredProviders?.mollie;\n\tif (mollie == null && input.configuredProviders?.mollieAccounts == null) {\n\t\treturn;\n\t}\n\tconst runtime = input.registry?.get(\"mollie\");\n\tfor (const connection of connections) {\n\t\tif (\n\t\t\t!billingConnectionMatchesProcessTestMode(\n\t\t\t\tconnection.testMode,\n\t\t\t\tinput.testMode,\n\t\t\t)\n\t\t) {\n\t\t\tconst skipKey = `env:${connection.id}`;\n\t\t\tif (!warnedSkippedWebhookConnections.has(skipKey)) {\n\t\t\t\twarnedSkippedWebhookConnections.add(skipKey);\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[athena-billing] skipping webhook reconciliation; connection environment does not match process billing.testMode\",\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tenvironment: connection.environment,\n\t\t\t\t\t\tprocessTestMode: resolveBillingEnvironment({\n\t\t\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t\t\t}).testMode,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\t!billingConnectionHasConfiguredCredential({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tconnection,\n\t\t\t})\n\t\t) {\n\t\t\tconst skipKey = `cred:${connection.id}`;\n\t\t\tif (!warnedSkippedWebhookConnections.has(skipKey)) {\n\t\t\t\twarnedSkippedWebhookConnections.add(skipKey);\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[athena-billing] skipping webhook reconciliation; connection environment has no configured credential\",\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tenvironment: connection.environment,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst endpoints = resolveBillingIngressEndpoints({\n\t\t\tappUrl: input.appUrl,\n\t\t\tpublicBaseUrl: input.webhooks.publicBaseUrl,\n\t\t\twebhookIngressToken: connection.webhookIngressToken,\n\t\t});\n\t\tif (!endpoints) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst skipProviderWebhookApi = billingWebhookUrlIsLoopback(\n\t\t\tendpoints.eventsUrl,\n\t\t);\n\t\tif (\n\t\t\tskipProviderWebhookApi &&\n\t\t\t!warnedLoopbackWebhookUrls.has(endpoints.eventsUrl)\n\t\t) {\n\t\t\twarnedLoopbackWebhookUrls.add(endpoints.eventsUrl);\n\t\t\tconsole.warn(\n\t\t\t\t\"[athena-billing] skipping Mollie next-gen webhook registration; the public URL is loopback and Mollie cannot reach it\",\n\t\t\t\t{ url: endpoints.eventsUrl },\n\t\t\t);\n\t\t}\n\t\tconst context =\n\t\t\tinput.trigger === \"scheduled\"\n\t\t\t\t? mintScheduledBillingReconciliationContext({\n\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\tprovider: connection.provider,\n\t\t\t\t\tschedulerExecutionId: crypto.randomUUID(),\n\t\t\t\t})\n\t\t\t\t: mintManualBillingReconciliationContext({\n\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\tprovider: connection.provider,\n\t\t\t\t\ttrigger: input.trigger === \"bootstrap\" ? \"bootstrap\" : \"manual\",\n\t\t\t\t});\n\t\tconst execution = createConnectionProviderExecutionContext({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tconnection,\n\t\t\tingress: { classicWebhookUrl: endpoints.classicUrl },\n\t\t\toperationScope: \"organization\",\n\t\t});\n\t\tconst capability = resolveMollieWebhookManagementCapability(\n\t\t\texecution.binding,\n\t\t);\n\t\tawait reconcileBillingWebhookRegistrations({\n\t\t\taudit,\n\t\t\tcontext,\n\t\t\texecution,\n\t\t\tlease: createPostgresBillingReconciliationLeaseStore(input.sql),\n\t\t\tport: skipProviderWebhookApi ? undefined : runtime?.webhooks,\n\t\t\treconcile: {\n\t\t\t\tapplicationId: input.applicationId,\n\t\t\t\tcapability,\n\t\t\t\tconnectionId: connection.id,\n\t\t\t\tendpoints,\n\t\t\t\tenvironment: connection.environment,\n\t\t\t\tmanagement: input.webhooks.management,\n\t\t\t\tprovider: connection.provider,\n\t\t\t\twebhooks: input.webhooks,\n\t\t\t},\n\t\t\tregistrations: createPostgresBillingWebhookRegistrationStore(input.sql),\n\t\t\trememberSigningSecret: input.rememberSigningSecret,\n\t\t\tsecretStore: input.secretStore,\n\t\t\ttraces,\n\t\t});\n\t}\n}\n","/**\n * Canonical Athena gateway route descriptors for SDK route selection.\n *\n * Classifications mirror `docs/release/athena-5-route-manifest.json`.\n * Do not invent a second handwritten sunset policy — keep this table aligned\n * with the monorepo manifest when either changes.\n */\n\nexport type AthenaRouteClassification =\n  | \"Retain\"\n  | \"Migrate\"\n  | \"Deprecate\"\n  | \"Remove\"\n  | \"Internalize\"\n  | \"Replace\";\n\nexport type AthenaRouteStatus = \"retained\" | \"deprecated\" | \"removed\";\n\nexport interface AthenaRouteDescriptor {\n  classification: AthenaRouteClassification;\n  methods: readonly string[];\n  path: string;\n  protocol: number;\n  reason: string;\n  replacement: string | null;\n  status: AthenaRouteStatus;\n}\n\nfunction classificationToStatus(\n  classification: AthenaRouteClassification\n): AthenaRouteStatus {\n  if (classification === \"Deprecate\" || classification === \"Migrate\") {\n    return \"deprecated\";\n  }\n  if (classification === \"Remove\") {\n    return \"removed\";\n  }\n  return \"retained\";\n}\n\n/** Structured CRUD + raw query paths used by the JS SDK. */\nexport const ATHENA_GATEWAY_ROUTES = {\n  delete: \"/gateway/delete\",\n  health: \"/health\",\n  insert: \"/gateway/insert\",\n  rawQuery: \"/gateway/query\",\n  root: \"/\",\n  rpc: \"/gateway/rpc\",\n  select: \"/gateway/fetch\",\n  update: \"/gateway/update\",\n} as const;\n\nexport type AthenaGatewayRouteKey = keyof typeof ATHENA_GATEWAY_ROUTES;\n\n/**\n * Inventory sourced from docs/release/athena-5-route-manifest.json (gateway + health).\n * Keep in sync when the monorepo manifest changes.\n */\nexport const ATHENA_ROUTE_MANIFEST: readonly AthenaRouteDescriptor[] = [\n  {\n    classification: \"Retain\",\n    methods: [\"POST\", \"GET\"],\n    path: \"/gateway/fetch\",\n    protocol: 1,\n    reason: \"Canonical structured read API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/insert\",\n    protocol: 1,\n    reason: \"Canonical write API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/update\",\n    protocol: 1,\n    reason: \"Canonical update API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/delete\",\n    protocol: 1,\n    reason: \"Canonical delete API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Deprecate\",\n    methods: [\"POST\"],\n    path: \"/gateway/query\",\n    protocol: 1,\n    reason:\n      \"Raw SQL is harder to secure and bypasses structured metadata ownership\",\n    replacement:\n      \"Structured /gateway/fetch|insert|update|delete with compiled statements\",\n    status: classificationToStatus(\"Deprecate\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"GET\"],\n    path: \"/health\",\n    protocol: 1,\n    reason: \"Diagnostics surface; Athena 5 adds release identity\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n] as const;\n\nexport function getAthenaRouteDescriptor(\n  path: string\n): AthenaRouteDescriptor | undefined {\n  return ATHENA_ROUTE_MANIFEST.find((route) => route.path === path);\n}\n\nexport function isDeprecatedAthenaRoute(path: string): boolean {\n  return getAthenaRouteDescriptor(path)?.status === \"deprecated\";\n}\n","/**\n * Backend-neutral mutation row-count extraction.\n *\n * Public field: AthenaResult.affectedRows\n * Transports feed this helper; fluent builders stay backend-neutral.\n */\n\nconst MUTATION_ENDPOINTS = new Set([\n  \"/gateway/insert\",\n  \"/gateway/update\",\n  \"/gateway/delete\",\n]);\n\nconst PRIMARY_ALIAS_KEYS = [\n  \"affectedRows\",\n  \"affected_rows\",\n  \"row_count\",\n  \"rows_affected\",\n  \"rowCount\",\n  \"rows_written\",\n  \"changes\",\n] as const;\n\nconst FALLBACK_COUNT_KEYS = [\"count\"] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction asFiniteNumber(value: unknown): number | undefined {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readKeys(\n  raw: Record<string, unknown>,\n  keys: readonly string[]\n): number | undefined {\n  for (const key of keys) {\n    const direct = asFiniteNumber(raw[key]);\n    if (direct !== undefined) {\n      return direct;\n    }\n  }\n  return undefined;\n}\n\nfunction readAlias(\n  raw: unknown,\n  keys: readonly string[] = PRIMARY_ALIAS_KEYS\n): number | undefined {\n  if (!isRecord(raw)) {\n    return undefined;\n  }\n  const direct = readKeys(raw, keys);\n  if (direct !== undefined) {\n    return direct;\n  }\n  if (isRecord(raw.meta)) {\n    const changes = asFiniteNumber(raw.meta.changes);\n    if (changes !== undefined) {\n      return changes;\n    }\n  }\n  if (isRecord(raw.data)) {\n    const nested = readAlias(raw.data, keys);\n    if (nested !== undefined) {\n      return nested;\n    }\n  }\n  return undefined;\n}\n\nexport function isMutationGatewayEndpoint(\n  endpoint: string | undefined\n): boolean {\n  if (!endpoint) {\n    return false;\n  }\n  return MUTATION_ENDPOINTS.has(endpoint);\n}\n\n/**\n * Resolve affected-row metadata for a mutation transport response.\n *\n * - `undefined` — not a mutation (e.g. fetch / select). Callers must omit the field.\n * - `null` — mutation, but no honest count is available. Never fabricate 0.\n * - `number` — known affected-row count from the backend.\n */\nexport function resolveMutationAffectedRows(input: {\n  count?: number | null;\n  endpoint?: string;\n  operation?: string;\n  raw?: unknown;\n}): number | null | undefined {\n  const operation = input.operation?.toLowerCase();\n  const isMutationOperation =\n    operation === \"insert\" ||\n    operation === \"update\" ||\n    operation === \"delete\" ||\n    operation === \"upsert\";\n  const isMutation =\n    isMutationOperation || isMutationGatewayEndpoint(input.endpoint);\n\n  if (!isMutation) {\n    return undefined;\n  }\n\n  const fromPrimary = readAlias(input.raw, PRIMARY_ALIAS_KEYS);\n  if (fromPrimary !== undefined) {\n    return fromPrimary;\n  }\n\n  const fromCount = asFiniteNumber(input.count);\n  if (fromCount !== undefined) {\n    return fromCount;\n  }\n\n  const fromRawCount = readAlias(input.raw, FALLBACK_COUNT_KEYS);\n  if (fromRawCount !== undefined) {\n    return fromRawCount;\n  }\n\n  return null;\n}\n","/**\n * Explicit administrative raw SQL surface for Athena-JS 3.7 (Dragunov-compatible).\n *\n * Prefer this over root `athena.query()` which remains a deprecated compatibility alias.\n */\n\nimport type { AthenaResult, AthenaResultFormatter } from \"../client-result.ts\";\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport { ATHENA_GATEWAY_ROUTES } from \"../gateway/routes.ts\";\nimport type {\n\tAthenaGatewayCallOptions,\n\tAthenaQueryPayload,\n} from \"../gateway/types.ts\";\nimport { resolveMutationAffectedRows } from \"../result/mutation-meta.ts\";\n\nexport type AthenaRawQueryOperation =\n\t| \"select\"\n\t| \"insert\"\n\t| \"update\"\n\t| \"delete\"\n\t| \"ddl\"\n\t| \"transaction\"\n\t| \"unknown\";\n\nexport type AthenaExpectedQueryShape =\n\t| \"rows\"\n\t| \"single\"\n\t| \"maybe-single\"\n\t| \"affected-only\"\n\t| \"none\";\n\nexport interface AthenaAdminQueryInput<\n\tTParams extends readonly unknown[] = readonly unknown[],\n> {\n\texpectedShape: AthenaExpectedQueryShape;\n\theaders?: Record<string, string>;\n\toperation: AthenaRawQueryOperation;\n\tparams?: TParams;\n\tsignal?: AbortSignal;\n\tsql: string;\n}\n\nexport interface AthenaAdminQueryExecutionMetadata {\n\t/** null means unknown — never fabricate 0 when meta is absent. */\n\taffectedRows: number | null;\n\tbackend: \"postgres\" | \"d1\" | \"scylla\" | \"supabase\" | \"unknown\";\n\tdeprecated: boolean;\n\texpectedShape: AthenaExpectedQueryShape;\n\tlastInsertId: string | number | null;\n\toperation: AthenaRawQueryOperation;\n\troute: string;\n\ttransport: \"gateway\" | \"d1-binding\" | \"d1-http-proxy\" | \"direct\" | \"unknown\";\n}\n\nexport interface AthenaAdminQueryResult<T = unknown> extends AthenaResult<T> {\n\tmetadata: AthenaAdminQueryExecutionMetadata;\n}\n\nexport const ATHENA_RAW_SQL_COMPAT_DEPRECATED =\n\t\"ATHENA_RAW_SQL_COMPAT_DEPRECATED\" as const;\n\nexport const ATHENA_ADMIN_QUERY_EMPTY_SQL =\n\t\"ATHENA_ADMIN_QUERY_EMPTY_SQL\" as const;\n\nexport const ATHENA_ADMIN_QUERY_MULTI_STATEMENT =\n\t\"ATHENA_ADMIN_QUERY_MULTI_STATEMENT\" as const;\n\nexport const ATHENA_ADMIN_QUERY_INVALID_SHAPE =\n\t\"ATHENA_ADMIN_QUERY_INVALID_SHAPE\" as const;\n\nconst ROW_SHAPES: ReadonlySet<AthenaExpectedQueryShape> = new Set([\n\t\"rows\",\n\t\"single\",\n\t\"maybe-single\",\n]);\n\nconst AFFECTED_SHAPES: ReadonlySet<AthenaExpectedQueryShape> = new Set([\n\t\"affected-only\",\n\t\"none\",\n]);\n\n/** Reject empty SQL. */\nexport function assertNonEmptySql(sql: string): string {\n\tconst normalized = sql.trim();\n\tif (!normalized) {\n\t\tconst error = new Error(\"admin.query requires a non-empty sql string\");\n\t\t(error as Error & { code?: string }).code = ATHENA_ADMIN_QUERY_EMPTY_SQL;\n\t\tthrow error;\n\t}\n\treturn normalized;\n}\n\n/**\n * Conservative multi-statement detection (semicolon outside simple quotes).\n * Does not attempt a full SQL parser.\n */\nexport function sqlLooksLikeMultipleStatements(sql: string): boolean {\n\tlet inSingle = false;\n\tlet inDouble = false;\n\tlet inLineComment = false;\n\tlet inBlockComment = false;\n\tfor (let i = 0; i < sql.length; i += 1) {\n\t\tconst ch = sql[i];\n\t\tconst next = sql[i + 1];\n\t\tif (inLineComment) {\n\t\t\tif (ch === \"\\n\") {\n\t\t\t\tinLineComment = false;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (inBlockComment) {\n\t\t\tif (ch === \"*\" && next === \"/\") {\n\t\t\t\tinBlockComment = false;\n\t\t\t\ti += 1;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (!(inSingle || inDouble)) {\n\t\t\tif (ch === \"-\" && next === \"-\") {\n\t\t\t\tinLineComment = true;\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"/\" && next === \"*\") {\n\t\t\t\tinBlockComment = true;\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (ch === \"'\" && !inDouble) {\n\t\t\tif (inSingle && next === \"'\") {\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tinSingle = !inSingle;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"' && !inSingle) {\n\t\t\tinDouble = !inDouble;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!(inSingle || inDouble) && ch === \";\") {\n\t\t\tconst rest = sql.slice(i + 1).trim();\n\t\t\tif (rest.length > 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n/** Validate operation / expectedShape combinations fail-closed. */\nexport function assertValidAdminQueryShape(\n\toperation: AthenaRawQueryOperation,\n\texpectedShape: AthenaExpectedQueryShape,\n): void {\n\tif (operation === \"select\" && AFFECTED_SHAPES.has(expectedShape)) {\n\t\tconst error = new Error(\n\t\t\t`admin.query: operation \"select\" is incompatible with expectedShape \"${expectedShape}\"`,\n\t\t);\n\t\t(error as Error & { code?: string }).code =\n\t\t\tATHENA_ADMIN_QUERY_INVALID_SHAPE;\n\t\tthrow error;\n\t}\n\tif (\n\t\t(operation === \"insert\" ||\n\t\t\toperation === \"update\" ||\n\t\t\toperation === \"delete\") &&\n\t\texpectedShape === \"none\"\n\t) {\n\t\t// allowed (caller ignores rows)\n\t\treturn;\n\t}\n\tif (\n\t\t(operation === \"insert\" ||\n\t\t\toperation === \"update\" ||\n\t\t\toperation === \"delete\") &&\n\t\tROW_SHAPES.has(expectedShape) === false &&\n\t\texpectedShape !== \"affected-only\"\n\t) {\n\t\t// ddl/transaction/unknown may use any shape\n\t}\n}\n\n/**\n * Conservative SQL classification for legacy root query().\n * Prefer explicit operation on admin.query().\n */\nexport function classifyRawSqlOperation(sql: string): AthenaRawQueryOperation {\n\tconst head = sql.trim().replace(/^\\(+/, \"\").slice(0, 32).toLowerCase();\n\tif (head.startsWith(\"select\") || head.startsWith(\"with\")) {\n\t\treturn \"select\";\n\t}\n\tif (head.startsWith(\"insert\")) {\n\t\treturn \"insert\";\n\t}\n\tif (head.startsWith(\"update\")) {\n\t\treturn \"update\";\n\t}\n\tif (head.startsWith(\"delete\")) {\n\t\treturn \"delete\";\n\t}\n\tif (\n\t\thead.startsWith(\"create\") ||\n\t\thead.startsWith(\"alter\") ||\n\t\thead.startsWith(\"drop\") ||\n\t\thead.startsWith(\"truncate\")\n\t) {\n\t\treturn \"ddl\";\n\t}\n\tif (\n\t\thead.startsWith(\"begin\") ||\n\t\thead.startsWith(\"commit\") ||\n\t\thead.startsWith(\"rollback\")\n\t) {\n\t\treturn \"transaction\";\n\t}\n\treturn \"unknown\";\n}\n\nexport function defaultExpectedShapeForOperation(\n\toperation: AthenaRawQueryOperation,\n): AthenaExpectedQueryShape {\n\tif (operation === \"select\") {\n\t\treturn \"rows\";\n\t}\n\tif (\n\t\toperation === \"insert\" ||\n\t\toperation === \"update\" ||\n\t\toperation === \"delete\"\n\t) {\n\t\treturn \"affected-only\";\n\t}\n\treturn \"rows\";\n}\n\nfunction extractAffectedRows(\n\traw: unknown,\n\tcount: number | null | undefined,\n\toperation: AthenaRawQueryOperation,\n\texpectedShape: AthenaExpectedQueryShape,\n): number | null {\n\t// Honest mutation metadata: never treat SELECT (read) row-counts as affected rows.\n\tconst isMutation =\n\t\toperation === \"insert\" || operation === \"update\" || operation === \"delete\";\n\tif (!isMutation && expectedShape !== \"affected-only\") {\n\t\treturn null;\n\t}\n\tconst resolved = resolveMutationAffectedRows({\n\t\tcount,\n\t\toperation:\n\t\t\tisMutation || expectedShape === \"affected-only\" ? \"update\" : \"select\",\n\t\traw,\n\t});\n\treturn resolved === undefined ? null : resolved;\n}\n\nfunction extractLastInsertId(raw: unknown): string | number | null {\n\tif (!raw || typeof raw !== \"object\") {\n\t\treturn null;\n\t}\n\tconst record = raw as Record<string, unknown>;\n\tconst candidates = [\n\t\trecord.last_insert_id,\n\t\trecord.lastInsertId,\n\t\trecord.last_row_id,\n\t\trecord.lastRowId,\n\t];\n\tfor (const candidate of candidates) {\n\t\tif (\n\t\t\t(typeof candidate === \"string\" && candidate.length > 0) ||\n\t\t\t(typeof candidate === \"number\" && Number.isFinite(candidate))\n\t\t) {\n\t\t\treturn candidate as string | number;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction shapeResultData<T>(\n\tdata: T | null,\n\texpectedShape: AthenaExpectedQueryShape,\n): T | null {\n\tif (data === null) {\n\t\treturn data;\n\t}\n\tif (\n\t\texpectedShape === \"rows\" ||\n\t\texpectedShape === \"affected-only\" ||\n\t\texpectedShape === \"none\"\n\t) {\n\t\treturn data;\n\t}\n\tif (!Array.isArray(data)) {\n\t\treturn data;\n\t}\n\tif (expectedShape === \"single\") {\n\t\treturn (data[0] ?? null) as T;\n\t}\n\tif (expectedShape === \"maybe-single\") {\n\t\treturn (data[0] ?? null) as T;\n\t}\n\treturn data;\n}\n\nexport interface CreateAdminQueryOptions {\n\t/**\n\t * When true, multi-statement SQL is forwarded to the gateway instead of\n\t * throwing `ATHENA_ADMIN_QUERY_MULTI_STATEMENT`.\n\t *\n\t * Used only by the legacy root `query()` compatibility alias so migration /\n\t * seed scripts keep working. Explicit `admin.query()` keeps the default\n\t * reject (allowMultiStatement omitted / false).\n\t */\n\tallowMultiStatement?: boolean;\n\tbackend?: AthenaAdminQueryExecutionMetadata[\"backend\"];\n\tclient: Pick<AthenaGatewayClient, \"queryGateway\">;\n\tformatGatewayResult: AthenaResultFormatter;\n\t/** Transport hint for metadata honesty. */\n\ttransport?: AthenaAdminQueryExecutionMetadata[\"transport\"];\n}\n\nexport function createAdminQuery(\n\toptions: CreateAdminQueryOptions,\n): <T = unknown, TParams extends readonly unknown[] = readonly unknown[]>(\n\tinput: AthenaAdminQueryInput<TParams>,\n\tcallOptions?: AthenaGatewayCallOptions,\n) => Promise<AthenaAdminQueryResult<T>> {\n\tconst {\n\t\tclient,\n\t\tformatGatewayResult,\n\t\ttransport = \"gateway\",\n\t\tbackend = \"unknown\",\n\t\tallowMultiStatement = false,\n\t} = options;\n\n\treturn async function adminQuery<\n\t\tT = unknown,\n\t\tTParams extends readonly unknown[] = readonly unknown[],\n\t>(\n\t\tinput: AthenaAdminQueryInput<TParams>,\n\t\tcallOptions?: AthenaGatewayCallOptions,\n\t): Promise<AthenaAdminQueryResult<T>> {\n\t\tconst sql = assertNonEmptySql(input.sql);\n\t\tassertValidAdminQueryShape(input.operation, input.expectedShape);\n\n\t\tif (!allowMultiStatement && sqlLooksLikeMultipleStatements(sql)) {\n\t\t\tconst error = new Error(\n\t\t\t\t\"admin.query rejects multi-statement SQL by default\",\n\t\t\t);\n\t\t\t(error as Error & { code?: string }).code =\n\t\t\t\tATHENA_ADMIN_QUERY_MULTI_STATEMENT;\n\t\t\tthrow error;\n\t\t}\n\n\t\tconst params = input.params ?? callOptions?.params;\n\t\tconst payload: AthenaQueryPayload = {\n\t\t\tquery: sql,\n\t\t\t...(Array.isArray(params) ? { params: [...params] } : {}),\n\t\t\texpectedShape: input.expectedShape,\n\t\t\toperation: input.operation,\n\t\t};\n\n\t\tconst mergedOptions: AthenaGatewayCallOptions | undefined = {\n\t\t\t...callOptions,\n\t\t\t...(input.headers\n\t\t\t\t? {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t...(callOptions?.headers ?? {}),\n\t\t\t\t\t\t...input.headers,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(input.signal ? { signal: input.signal } : {}),\n\t\t};\n\n\t\tconst response = await client.queryGateway<T>(payload, mergedOptions);\n\t\tconst formatted = formatGatewayResult(response, {\n\t\t\toperation: input.operation,\n\t\t});\n\t\tconst shapedData = shapeResultData(formatted.data, input.expectedShape);\n\t\tconst affectedRows = extractAffectedRows(\n\t\t\tformatted.raw,\n\t\t\tformatted.count,\n\t\t\tinput.operation,\n\t\t\tinput.expectedShape,\n\t\t);\n\t\tconst lastInsertId = extractLastInsertId(formatted.raw);\n\n\t\treturn {\n\t\t\t...formatted,\n\t\t\tdata: shapedData,\n\t\t\tmetadata: {\n\t\t\t\taffectedRows,\n\t\t\t\tbackend,\n\t\t\t\tdeprecated: true,\n\t\t\t\texpectedShape: input.expectedShape,\n\t\t\t\tlastInsertId,\n\t\t\t\toperation: input.operation,\n\t\t\t\troute: ATHENA_GATEWAY_ROUTES.rawQuery,\n\t\t\t\ttransport,\n\t\t\t},\n\t\t};\n\t};\n}\n\n/** Per-client deprecation warning dedupe for root query(). */\nconst deprecationWarnedClients = new WeakSet<object>();\n\nexport type AthenaRawQueryDiagnosticsMode = boolean | \"auto\";\n\nexport function maybeWarnRawQueryDeprecated(\n\towner: object,\n\tdiagnostics: AthenaRawQueryDiagnosticsMode | undefined,\n): void {\n\tif (diagnostics === false) {\n\t\treturn;\n\t}\n\tconst nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } })\n\t\t.process?.env?.NODE_ENV;\n\tconst isDev = nodeEnv !== \"production\";\n\tconst shouldWarn =\n\t\tdiagnostics === true ||\n\t\t(diagnostics === \"auto\" && isDev) ||\n\t\t(diagnostics === undefined && isDev);\n\tif (!shouldWarn) {\n\t\treturn;\n\t}\n\tif (deprecationWarnedClients.has(owner)) {\n\t\treturn;\n\t}\n\tdeprecationWarnedClients.add(owner);\n\tconsole.warn(\n\t\t`[athena] ${ATHENA_RAW_SQL_COMPAT_DEPRECATED}: athena.query() is a compatibility alias. Prefer athena.admin.query({ sql, operation, expectedShape }).`,\n\t);\n}\n","/**\n * Status-aware auth capabilities (INV-P).\n *\n * Lookup failure must never be treated as \"all features disabled\".\n * UI may hide/disable only when `status === \"known\"` and the field is false,\n * or when the app sets an explicit features override.\n */\n\nimport { deriveEmbeddedCapabilityAdvertisement } from \"./contract/operations.ts\";\nimport { ATHENA_AUTH_OPERATIONS } from \"./contract/operations.generated.ts\";\n\nexport type AthenaAuthCapabilitiesStatus = \"known\" | \"partial\" | \"unknown\";\n\nexport type AthenaAuthCapabilitiesSource =\n  | \"bootstrap\"\n  | \"http\"\n  | \"client-config\"\n  | \"fallback\";\n\nexport interface AthenaAuthPasskeyCapabilityDetail {\n  authentication?: boolean | null;\n  conditionalUi?: boolean | null;\n  enabled?: boolean | null;\n  management?: boolean | null;\n  onboarding?: boolean | null;\n  registration?: boolean | null;\n}\n\nexport interface AthenaAuthCapabilitiesFeatures {\n  password?: boolean | null;\n  organizations?: boolean | null;\n  /**\n   * Broad passkey capability. Unknown is not disabled.\n   * Detail flags live on `passkey` and must not replace this boolean.\n   */\n  passkeys?: boolean | null;\n  passkey?: AthenaAuthPasskeyCapabilityDetail | null;\n  sessions?: boolean | null;\n  social?: {\n    providers?: string[] | null;\n  } | null;\n  emailAndPassword?: boolean | null;\n}\n\nexport interface AthenaAuthCapabilitiesResult extends AthenaAuthCapabilitiesFeatures {\n  status: AthenaAuthCapabilitiesStatus;\n  fetchedAt?: number;\n  source: AthenaAuthCapabilitiesSource;\n}\n\nexport interface AthenaAuthCapabilitiesStore {\n  get(): AthenaAuthCapabilitiesResult;\n  /** Alias of `get()` — one snapshot owner (INV-P / R11). */\n  getSnapshot(): AthenaAuthCapabilitiesResult;\n  set(next: AthenaAuthCapabilitiesResult): void;\n  /** Merge fields; elevates/downgrades status conservatively. */\n  merge(\n    patch: Partial<AthenaAuthCapabilitiesFeatures>,\n    meta?: {\n      status?: AthenaAuthCapabilitiesStatus;\n      source?: AthenaAuthCapabilitiesSource;\n    }\n  ): AthenaAuthCapabilitiesResult;\n  /** Mark transport failure without disabling features (INV-P). */\n  markUnknown(source?: AthenaAuthCapabilitiesSource): AthenaAuthCapabilitiesResult;\n  /**\n   * First-paint seed. No-op unless the store is still `unknown`.\n   * Returns whether the snapshot was applied.\n   */\n  hydrate(next: AthenaAuthCapabilitiesResult): boolean;\n  subscribe(listener: (value: AthenaAuthCapabilitiesResult) => void): () => void;\n}\n\nconst EMPTY_UNKNOWN: AthenaAuthCapabilitiesResult = {\n  status: \"unknown\",\n  source: \"fallback\",\n};\n\nexport interface CreateEmbeddedCapabilitySnapshotOptions {\n  /**\n   * Operator intent (`auth.passkey.enabled`). Implementation support is\n   * derived from the operation catalog; this flag is runtime enablement.\n   */\n  passkeyEnabled?: boolean;\n  /** Passkey-first onboarding. Never inferred from `passkeys === true`. */\n  passkeyOnboarding?: boolean;\n  /**\n   * Configured served social provider ids. Advertised only after the\n   * social HTTP operations are catalog `embedded: \"supported\"`.\n   */\n  socialProviders?: readonly string[];\n}\n\n/**\n * Embedded Auth advertisement.\n *\n * `deriveEmbeddedCapabilityAdvertisement` is implementation support (HTTP\n * routes exist). Advertised `passkeys` is support AND this runtime's\n * `auth.passkey.enabled`. Default config is disabled, so the frozen snapshot\n * is `passkeys: false`.\n */\nexport function createEmbeddedCapabilitySnapshot(\n  options: CreateEmbeddedCapabilitySnapshotOptions = {},\n): AthenaAuthCapabilitiesResult {\n  const implementation = deriveEmbeddedCapabilityAdvertisement(\n    ATHENA_AUTH_OPERATIONS,\n  );\n  const enabled = implementation.passkeys && options.passkeyEnabled === true;\n  return {\n    emailAndPassword: true,\n    organizations: true,\n    passkey: {\n      authentication: enabled,\n      conditionalUi: enabled,\n      enabled,\n      management: enabled,\n      onboarding: enabled && options.passkeyOnboarding === true,\n      registration: enabled,\n    },\n    passkeys: enabled,\n    password: true,\n    sessions: true,\n    social: {\n      providers: implementation.socialProvidersAdvertised\n        ? [...(options.socialProviders ?? [])]\n        : [],\n    },\n    source: \"bootstrap\",\n    status: \"known\",\n  };\n}\n\n/** Default advertisement: implementation support, operator passkeys off. */\nexport const ATHENA_AUTH_EMBEDDED_CAPABILITY_SNAPSHOT: AthenaAuthCapabilitiesResult =\n  createEmbeddedCapabilitySnapshot();\n\nfunction pickStatus(\n  current: AthenaAuthCapabilitiesStatus,\n  next?: AthenaAuthCapabilitiesStatus\n): AthenaAuthCapabilitiesStatus {\n  if (!next) return current;\n  if (current === \"unknown\" || next === \"unknown\") {\n    if (current === \"known\" && next === \"unknown\") return \"partial\";\n    if (current === \"unknown\" && next === \"known\") return \"partial\";\n    return next === \"unknown\" ? \"unknown\" : current === \"unknown\" ? next : \"partial\";\n  }\n  if (current === \"partial\" || next === \"partial\") return \"partial\";\n  return \"known\";\n}\n\nexport function createAthenaAuthCapabilitiesStore(\n  initial?: Partial<AthenaAuthCapabilitiesResult>\n): AthenaAuthCapabilitiesStore {\n  let value: AthenaAuthCapabilitiesResult = {\n    ...EMPTY_UNKNOWN,\n    ...initial,\n    status: initial?.status ?? \"unknown\",\n    source: initial?.source ?? \"fallback\",\n  };\n  const listeners = new Set<(v: AthenaAuthCapabilitiesResult) => void>();\n\n  const emit = () => {\n    for (const listener of [...listeners]) {\n      listener(value);\n    }\n  };\n\n  const get = (): AthenaAuthCapabilitiesResult => value;\n\n  return {\n    get,\n    getSnapshot: get,\n\n    set(next) {\n      value = { ...next, fetchedAt: next.fetchedAt ?? Date.now() };\n      emit();\n    },\n\n    merge(patch, meta) {\n      value = {\n        ...value,\n        ...patch,\n        passkey:\n          patch.passkey === undefined\n            ? value.passkey\n            : { ...(value.passkey ?? {}), ...(patch.passkey ?? {}) },\n        social:\n          patch.social === undefined\n            ? value.social\n            : { ...(value.social ?? {}), ...(patch.social ?? {}) },\n        status: pickStatus(value.status, meta?.status),\n        source: meta?.source ?? value.source,\n        fetchedAt: Date.now(),\n      };\n      emit();\n      return value;\n    },\n\n    markUnknown(source = \"http\") {\n      // Keep last known feature hints; only status becomes unknown/partial.\n      value = {\n        ...value,\n        status: value.status === \"known\" ? \"partial\" : \"unknown\",\n        source,\n        fetchedAt: Date.now(),\n      };\n      emit();\n      return value;\n    },\n\n    hydrate(next) {\n      if (value.status !== \"unknown\") {\n        return false;\n      }\n      value = { ...next, fetchedAt: next.fetchedAt ?? Date.now() };\n      emit();\n      return true;\n    },\n\n    subscribe(listener) {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n  };\n}\n\n/** True only when capability is definitively enabled. */\nexport function isCapabilityEnabled(\n  caps: AthenaAuthCapabilitiesResult,\n  key: keyof AthenaAuthCapabilitiesFeatures\n): boolean {\n  if (caps.status === \"unknown\") return false;\n  const v = caps[key];\n  if (v == null) return false;\n  if (typeof v === \"boolean\") return v === true && caps.status === \"known\";\n  return false;\n}\n\n/**\n * Passkey-first onboarding. Never inferred from `passkeys === true`.\n * Unknown is not enabled.\n */\nexport function isPasskeyOnboardingEnabled(\n  caps: AthenaAuthCapabilitiesResult,\n): boolean {\n  if (!isCapabilityEnabled(caps, \"passkeys\")) {\n    return false;\n  }\n  return caps.passkey?.onboarding === true;\n}\n\n/**\n * Social providers to show: only when known (or partial with explicit list).\n * Never invent an empty \"disabled\" list from unknown.\n */\nexport function resolveSocialProvidersForUi(\n  caps: AthenaAuthCapabilitiesResult\n): { providers: string[] | null; hide: boolean } {\n  if (caps.status === \"unknown\") {\n    return { providers: null, hide: false };\n  }\n  const list = caps.social?.providers;\n  if (list == null) {\n    return { providers: null, hide: caps.status === \"known\" };\n  }\n  return { providers: list, hide: false };\n}\n\n/** True only when status is known and at least one social provider is listed. */\nexport function isSocialCapabilityEnabled(\n  caps: AthenaAuthCapabilitiesResult\n): boolean {\n  if (caps.status !== \"known\") {\n    return false;\n  }\n  return (caps.social?.providers?.length ?? 0) > 0;\n}\n","/**\n * Generated by scripts/auth-route-parity.mjs. Do not edit.\n * Wave 0 Auth Finality operation catalog (live rust + embedded scan).\n */\nimport type { AthenaAuthOperationDefinition } from \"./operations.ts\";\n\nexport const ATHENA_AUTH_OPERATIONS: AthenaAuthOperationDefinition[] = [\n  {\n    \"id\": \"authorization.roles.by\",\n    \"method\": \"DELETE\",\n    \"path\": \"/authorization/roles/{id}\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"jwt.jwks\",\n    \"method\": \"GET\",\n    \"path\": \"/.well-known/jwks.json\",\n    \"capability\": \"jwt\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"oidc.discovery\",\n    \"method\": \"GET\",\n    \"path\": \"/.well-known/openid-configuration\",\n    \"capability\": \"oidc\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"passkey.relatedOrigins\",\n    \"method\": \"GET\",\n    \"path\": \"/.well-known/webauthn\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.emailEventType.list\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email-event-type/list\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.emailFailure.get\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email-failure/get\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.emailFailure.list\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email-failure/list\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.emailTemplate.get\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email-template/get\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.emailTemplate.list\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email-template/list\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.email.get\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email/get\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.email.list\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email/list\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"apiKey.get\",\n    \"method\": \"GET\",\n    \"path\": \"/api-key/get\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"apiKey.list\",\n    \"method\": \"GET\",\n    \"path\": \"/api-key/list\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.audit\",\n    \"method\": \"GET\",\n    \"path\": \"/authorization/audit\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.rights\",\n    \"method\": \"GET\",\n    \"path\": \"/authorization/rights\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.roles\",\n    \"method\": \"GET\",\n    \"path\": \"/authorization/roles\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.roles.by\",\n    \"method\": \"GET\",\n    \"path\": \"/authorization/roles/{id}\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.snapshot\",\n    \"method\": \"GET\",\n    \"path\": \"/authorization/snapshot\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"social.callback\",\n    \"method\": \"GET\",\n    \"path\": \"/callback/{provider}\",\n    \"capability\": \"social\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"user.email.verify.change\",\n    \"method\": \"GET\",\n    \"path\": \"/change-email/verify\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"user.delete.verify\",\n    \"method\": \"GET\",\n    \"path\": \"/delete-user/verify\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"email.list\",\n    \"method\": \"GET\",\n    \"path\": \"/email/list\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"session.get\",\n    \"method\": \"GET\",\n    \"path\": \"/get-session\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"health.health\",\n    \"method\": \"GET\",\n    \"path\": \"/health\",\n    \"capability\": \"health\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"account.list\",\n    \"method\": \"GET\",\n    \"path\": \"/list-accounts\",\n    \"capability\": \"accounts\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"session.list\",\n    \"method\": \"GET\",\n    \"path\": \"/list-sessions\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"health.ok\",\n    \"method\": \"GET\",\n    \"path\": \"/ok\",\n    \"capability\": \"health\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"member.active\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/get-active-member\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"organization.get\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/get-full-organization\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"invitation.get\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/get-invitation\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"organization.list\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/list\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"invitation.list\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/list-invitations\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"member.list\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/list-members\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"invitation.listUser\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/list-user-invitations\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"passkey.register.options\",\n    \"method\": \"GET\",\n    \"path\": \"/passkey/generate-register-options\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"passkey.list\",\n    \"method\": \"GET\",\n    \"path\": \"/passkey/list-user-passkeys\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"user.password.reset.token\",\n    \"method\": \"GET\",\n    \"path\": \"/reset-password/{token}\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"user.email.verify\",\n    \"method\": \"GET\",\n    \"path\": \"/verify-email\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false,\n    \"domainEvent\": \"user.email.verify\"\n  },\n  {\n    \"id\": \"health.ok.head\",\n    \"method\": \"HEAD\",\n    \"path\": \"/ok\",\n    \"capability\": \"health\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.roles.by\",\n    \"method\": \"PATCH\",\n    \"path\": \"/authorization/roles/{id}\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailFailure.create\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-failure/create\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailFailure.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-failure/delete\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailFailure.update\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-failure/update\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailTemplate.create\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-template/create\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailTemplate.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-template/delete\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailTemplate.send\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-template/send\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailTemplate.update\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-template/update\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.email.create\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email/create\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.email.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email/delete\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.email.update\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email/update\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"apiKey.create\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/create\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"apiKey.create\"\n  },\n  {\n    \"id\": \"apiKey.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/delete\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"apiKey.delete\"\n  },\n  {\n    \"id\": \"apiKey.deleteExpired\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/delete-all-expired-api-keys\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"apiKey.get.post\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/get\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"apiKey.update\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/update\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"apiKey.update\"\n  },\n  {\n    \"id\": \"apiKey.verify\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/verify\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.roles\",\n    \"method\": \"POST\",\n    \"path\": \"/authorization/roles\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"authorization.roles.clone\",\n    \"method\": \"POST\",\n    \"path\": \"/authorization/roles/clone\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"callback.by\",\n    \"method\": \"POST\",\n    \"path\": \"/callback/{provider}\",\n    \"capability\": \"social\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"user.email.update\",\n    \"method\": \"POST\",\n    \"path\": \"/change-email\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.email.update\"\n  },\n  {\n    \"id\": \"user.email.verify.change.post\",\n    \"method\": \"POST\",\n    \"path\": \"/change-email/verify\",\n    \"capability\": \"password\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"user.password.change\",\n    \"method\": \"POST\",\n    \"path\": \"/change-password\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.password.change\"\n  },\n  {\n    \"id\": \"user.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/delete-user\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.delete\"\n  },\n  {\n    \"id\": \"user.password.forget\",\n    \"method\": \"POST\",\n    \"path\": \"/forget-password\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"jwt.accessToken\",\n    \"method\": \"POST\",\n    \"path\": \"/get-access-token\",\n    \"capability\": \"jwt\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"session.get.post\",\n    \"method\": \"POST\",\n    \"path\": \"/get-session\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"account.link\",\n    \"method\": \"POST\",\n    \"path\": \"/link-social\",\n    \"capability\": \"social\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"account.link\"\n  },\n  {\n    \"id\": \"invitation.accept\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/accept-invitation\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.invitation.accept\"\n  },\n  {\n    \"id\": \"member.add\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/add-member\",\n    \"capability\": \"organizations\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.member.add\"\n  },\n  {\n    \"id\": \"invitation.cancel\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/cancel-invitation\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.invitation.cancel\"\n  },\n  {\n    \"id\": \"organization.checkSlug\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/check-slug\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"organization.create\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/create\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.create\"\n  },\n  {\n    \"id\": \"organization.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/delete\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.delete\"\n  },\n  {\n    \"id\": \"organization.hasPermission\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/has-permission\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"invitation.create\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/invite-member\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.invitation.create\"\n  },\n  {\n    \"id\": \"invitation.reminder\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/invite-member-reminder\",\n    \"capability\": \"invitations\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.member.invite.reminder\"\n  },\n  {\n    \"id\": \"organization.leave\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/leave\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.member.remove\"\n  },\n  {\n    \"id\": \"invitation.reject\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/reject-invitation\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.invitation.reject\"\n  },\n  {\n    \"id\": \"member.remove\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/remove-member\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.member.remove\"\n  },\n  {\n    \"id\": \"organization.setActive\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/set-active\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.activeOrganization.update\"\n  },\n  {\n    \"id\": \"organization.update\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/update\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.update\"\n  },\n  {\n    \"id\": \"member.role.update\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/update-member-role\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.member.role.update\"\n  },\n  {\n    \"id\": \"passkey.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/passkey/delete-passkey\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"passkey.delete\"\n  },\n  {\n    \"id\": \"passkey.authenticate.options\",\n    \"method\": \"POST\",\n    \"path\": \"/passkey/generate-authenticate-options\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"optional-session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"passkey.update\",\n    \"method\": \"POST\",\n    \"path\": \"/passkey/update-passkey\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"passkey.update\"\n  },\n  {\n    \"id\": \"passkey.authenticate.verify\",\n    \"method\": \"POST\",\n    \"path\": \"/passkey/verify-authentication\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"id\": \"passkey.register.verify\",\n    \"method\": \"POST\",\n    \"path\": \"/passkey/verify-registration\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"passkey.register\"\n  },\n  {\n    \"id\": \"jwt.refresh\",\n    \"method\": \"POST\",\n    \"path\": \"/refresh-token\",\n    \"capability\": \"jwt\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"user.password.reset\",\n    \"method\": \"POST\",\n    \"path\": \"/reset-password\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.password.reset\"\n  },\n  {\n    \"id\": \"session.revoke.others\",\n    \"method\": \"POST\",\n    \"path\": \"/revoke-other-sessions\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"id\": \"session.revoke\",\n    \"method\": \"POST\",\n    \"path\": \"/revoke-session\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"id\": \"session.revoke.all\",\n    \"method\": \"POST\",\n    \"path\": \"/revoke-sessions\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"id\": \"email.securityAlert\",\n    \"method\": \"POST\",\n    \"path\": \"/send-security-alert\",\n    \"capability\": \"email\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.security.alert\"\n  },\n  {\n    \"id\": \"email.signIn\",\n    \"method\": \"POST\",\n    \"path\": \"/send-sign-in-email\",\n    \"capability\": \"email\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.sign-in.email\"\n  },\n  {\n    \"id\": \"user.email.verify.send\",\n    \"method\": \"POST\",\n    \"path\": \"/send-verification-email\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"session.bridge.exchange\",\n    \"method\": \"POST\",\n    \"path\": \"/session/bridge/exchange\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"session.bridge.issue\",\n    \"method\": \"POST\",\n    \"path\": \"/session/bridge/issue\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"user.password.set\",\n    \"method\": \"POST\",\n    \"path\": \"/set-password\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"session.issue.email\",\n    \"method\": \"POST\",\n    \"path\": \"/sign-in/email\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"id\": \"session.issue.social\",\n    \"method\": \"POST\",\n    \"path\": \"/sign-in/social\",\n    \"capability\": \"social\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"id\": \"session.issue.username\",\n    \"method\": \"POST\",\n    \"path\": \"/sign-in/username\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"id\": \"session.revoke.current\",\n    \"method\": \"POST\",\n    \"path\": \"/sign-out\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"id\": \"user.create\",\n    \"method\": \"POST\",\n    \"path\": \"/sign-up/email\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.create\"\n  },\n  {\n    \"id\": \"jwt.token\",\n    \"method\": \"POST\",\n    \"path\": \"/token\",\n    \"capability\": \"jwt\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"twoFactor.disable\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/disable\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"twoFactor.disable\"\n  },\n  {\n    \"id\": \"twoFactor.enable\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/enable\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"twoFactor.enable\"\n  },\n  {\n    \"id\": \"twoFactor.backupCodes.generate\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/generate-backup-codes\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"twoFactor.getUri\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/get-totp-uri\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"twoFactor.emailOtp.send\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/send-otp\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"twoFactor.backupCodes.consume\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/verify-backup-code\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"twoFactor.emailOtp.verify\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/verify-otp\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"twoFactor.verifyEnable\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/verify-totp\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"twoFactor.enable\"\n  },\n  {\n    \"id\": \"account.unlink\",\n    \"method\": \"POST\",\n    \"path\": \"/unlink-account\",\n    \"capability\": \"social\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"account.unlink\"\n  },\n  {\n    \"id\": \"user.update\",\n    \"method\": \"POST\",\n    \"path\": \"/update-user\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.update\"\n  },\n  {\n    \"id\": \"authorization.roles.by.rights\",\n    \"method\": \"PUT\",\n    \"path\": \"/authorization/roles/{id}/rights\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  }\n];\n","export const authEmailEvents = {\n\torganization: {\n\t\tcreated: \"organization.create\",\n\t\tmember: {\n\t\t\tadded: \"organization.member.added\",\n\t\t\tinvite: \"organization.member.invite\",\n\t\t\tinviteReminder: \"organization.member.invite.reminder\",\n\t\t\tinviteRevoked: \"organization.member.invite.revoked\",\n\t\t\tremoved: \"organization.member.removed\",\n\t\t\troleUpdated: \"organization.member.role.updated\",\n\t\t},\n\t},\n\tuser: {\n\t\taccount: {\n\t\t\tdeletionConfirmation: \"user.account.delete.confirmation\",\n\t\t},\n\t\temail: {\n\t\t\tchangeConfirmation: \"user.email.change.confirmation\",\n\t\t\tverify: \"user.email.verify\",\n\t\t},\n\t\tpassword: {\n\t\t\tchanged: \"user.password.changed\",\n\t\t\treset: \"user.password.reset\",\n\t\t},\n\t\tsecurity: {\n\t\t\talert: \"user.security.alert\",\n\t\t},\n\t\tsignIn: {\n\t\t\temail: \"user.sign-in.email\",\n\t\t\totp: \"user.sign-in.otp\",\n\t\t},\n\t\tsignUp: {\n\t\t\twelcome: \"user.sign-up.welcome\",\n\t\t},\n\t},\n} as const;\n\nexport type AuthEmailEventNested = typeof authEmailEvents;\n\nexport interface AthenaAuthEmailEventDefinition {\n\tcategory: string;\n\tdefault_template_key: string;\n\tdescription: string;\n\tevent_type: string;\n\tis_active: boolean;\n\tis_system: boolean;\n\toptional_variables: readonly string[];\n\trequired_variables: readonly string[];\n}\n\nexport const AUTH_EMAIL_EVENT_CATALOG: readonly AthenaAuthEmailEventDefinition[] =\n\t[\n\t\t{\n\t\t\tcategory: \"user_lifecycle\",\n\t\t\tdefault_template_key: \"verification_email\",\n\t\t\tdescription:\n\t\t\t\t\"Verify a user email address after signup or manual verification resend.\",\n\t\t\tevent_type: authEmailEvents.user.email.verify,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"verification_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"password_reset_email\",\n\t\t\tdescription: \"Send a password reset link.\",\n\t\t\tevent_type: authEmailEvents.user.password.reset,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"reset_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"change_email_confirmation_email\",\n\t\t\tdescription: \"Confirm a pending user email address change.\",\n\t\t\tevent_type: authEmailEvents.user.email.changeConfirmation,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"verification_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"account_deletion_confirmation_email\",\n\t\t\tdescription: \"Confirm account deletion before destructive delete.\",\n\t\t\tevent_type: authEmailEvents.user.account.deletionConfirmation,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"verification_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"two_factor_otp_email\",\n\t\t\tdescription: \"Deliver one-time passcode for two-factor authentication.\",\n\t\t\tevent_type: authEmailEvents.user.signIn.otp,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"otp_code\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_invitation_email\",\n\t\t\tdescription: \"Invite a member to join an organization.\",\n\t\t\tevent_type: authEmailEvents.organization.member.invite,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\n\t\t\t\t\"organization_name\",\n\t\t\t\t\"role\",\n\t\t\t\t\"inviter_identity\",\n\t\t\t\t\"invitation_url\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"magic_link_email\",\n\t\t\tdescription:\n\t\t\t\t\"Email-based sign-in link or magic-link authentication flow.\",\n\t\t\tevent_type: authEmailEvents.user.signIn.email,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"sign_in_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_lifecycle\",\n\t\t\tdefault_template_key: \"welcome_email\",\n\t\t\tdescription: \"Welcome message after account creation.\",\n\t\t\tevent_type: authEmailEvents.user.signUp.welcome,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"dashboard_url\"],\n\t\t\trequired_variables: [\"user_name\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"password_changed_email\",\n\t\t\tdescription: \"Security notification after password change completes.\",\n\t\t\tevent_type: authEmailEvents.user.password.changed,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"support_url\"],\n\t\t\trequired_variables: [],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"security_alert_email\",\n\t\t\tdescription:\n\t\t\t\t\"General security alert notification (suspicious sign-in, new device, policy event).\",\n\t\t\tevent_type: authEmailEvents.user.security.alert,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"support_url\"],\n\t\t\trequired_variables: [\"alert_title\", \"alert_details\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_created_email\",\n\t\t\tdescription: \"Organization creation confirmation and onboarding.\",\n\t\t\tevent_type: authEmailEvents.organization.created,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"organization_url\"],\n\t\t\trequired_variables: [\"organization_name\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_member_added_email\",\n\t\t\tdescription: \"Notify when a member is added without invite flow.\",\n\t\t\tevent_type: authEmailEvents.organization.member.added,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"actor_identity\"],\n\t\t\trequired_variables: [\"organization_name\", \"member_identity\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_member_removed_email\",\n\t\t\tdescription: \"Notify when a member is removed from an organization.\",\n\t\t\tevent_type: authEmailEvents.organization.member.removed,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"actor_identity\"],\n\t\t\trequired_variables: [\"organization_name\", \"member_identity\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_member_role_updated_email\",\n\t\t\tdescription: \"Notify when organization member role is changed.\",\n\t\t\tevent_type: authEmailEvents.organization.member.roleUpdated,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"previous_role\", \"actor_identity\"],\n\t\t\trequired_variables: [\"organization_name\", \"member_identity\", \"new_role\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_invitation_reminder_email\",\n\t\t\tdescription: \"Reminder message for pending organization invitations.\",\n\t\t\tevent_type: authEmailEvents.organization.member.inviteReminder,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"role\", \"inviter_identity\"],\n\t\t\trequired_variables: [\"organization_name\", \"invitation_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_invitation_revoked_email\",\n\t\t\tdescription: \"Notification that an invitation has been revoked.\",\n\t\t\tevent_type: authEmailEvents.organization.member.inviteRevoked,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"inviter_identity\"],\n\t\t\trequired_variables: [\"organization_name\", \"invited_email\"],\n\t\t},\n\t];\n\nexport function flattenAuthEmailEvents(\n\ttree: unknown,\n\tacc: string[] = [],\n): string[] {\n\tif (typeof tree === \"string\") {\n\t\tacc.push(tree);\n\t\treturn acc;\n\t}\n\tif (tree && typeof tree === \"object\") {\n\t\tfor (const value of Object.values(tree)) {\n\t\t\tflattenAuthEmailEvents(value, acc);\n\t\t}\n\t}\n\treturn acc;\n}\n\nexport function getAuthEmailEventDefinition(\n\teventType: string | null | undefined,\n): AthenaAuthEmailEventDefinition | undefined {\n\tif (!eventType) {\n\t\treturn undefined;\n\t}\n\treturn AUTH_EMAIL_EVENT_CATALOG.find(\n\t\t(entry) => entry.event_type === eventType,\n\t);\n}\n","import type { AthenaAuthEmailTemplateRow } from \"./contract.ts\";\nimport { AUTH_EMAIL_EVENT_CATALOG } from \"./events.ts\";\n\nexport interface BuiltinAuthEmailBody {\n\thtml_template: string;\n\tsubject_template: string;\n\ttext_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\taccount_deletion_confirmation_email: {\n\t\thtml_template:\n\t\t\t'<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\t\tsubject_template: \"Confirm account deletion\",\n\t\ttext_template: \"Confirm account deletion: {{verification_url}}\",\n\t},\n\tchange_email_confirmation_email: {\n\t\thtml_template:\n\t\t\t'<p>Click the link below to confirm your new email address:</p><p><a href=\"{{verification_url}}\">Confirm Email Change</a></p>',\n\t\tsubject_template: \"Confirm your email change\",\n\t\ttext_template: \"Confirm your email change: {{verification_url}}\",\n\t},\n\tmagic_link_email: {\n\t\thtml_template:\n\t\t\t'<p>Click the link below to sign in:</p><p><a href=\"{{sign_in_url}}\">Sign in</a></p>',\n\t\tsubject_template: \"Sign in to {{app_name}}\",\n\t\ttext_template: \"Sign in: {{sign_in_url}}\",\n\t},\n\torganization_created_email: {\n\t\thtml_template:\n\t\t\t\"<p>Your organization <strong>{{organization_name}}</strong> is ready.</p>\",\n\t\tsubject_template: \"{{organization_name}} is ready\",\n\t\ttext_template: \"Your organization {{organization_name}} is ready.\",\n\t},\n\torganization_invitation_email: {\n\t\thtml_template:\n\t\t\t'<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\t\tsubject_template: \"Invitation to join {{organization_name}}\",\n\t\ttext_template:\n\t\t\t\"You were invited to join {{organization_name}}.\\nRole: {{role}}\\nInvited by: {{inviter_identity}}\\nInvitation link: {{invitation_url}}\",\n\t},\n\torganization_invitation_reminder_email: {\n\t\thtml_template:\n\t\t\t'<p>This is a reminder to join <strong>{{organization_name}}</strong>.</p><p><a href=\"{{invitation_url}}\">Open invitation</a></p>',\n\t\tsubject_template: \"Reminder: join {{organization_name}}\",\n\t\ttext_template:\n\t\t\t\"Reminder to join {{organization_name}}: {{invitation_url}}\",\n\t},\n\torganization_invitation_revoked_email: {\n\t\thtml_template:\n\t\t\t\"<p>The invitation for <strong>{{invited_email}}</strong> to join <strong>{{organization_name}}</strong> was revoked.</p>\",\n\t\tsubject_template: \"Invitation to {{organization_name}} was revoked\",\n\t\ttext_template:\n\t\t\t\"The invitation for {{invited_email}} to join {{organization_name}} was revoked.\",\n\t},\n\torganization_member_added_email: {\n\t\thtml_template:\n\t\t\t\"<p><strong>{{member_identity}}</strong> was added to <strong>{{organization_name}}</strong>.</p>\",\n\t\tsubject_template: \"Added to {{organization_name}}\",\n\t\ttext_template: \"{{member_identity}} was added to {{organization_name}}.\",\n\t},\n\torganization_member_removed_email: {\n\t\thtml_template:\n\t\t\t\"<p><strong>{{member_identity}}</strong> was removed from <strong>{{organization_name}}</strong>.</p>\",\n\t\tsubject_template: \"Removed from {{organization_name}}\",\n\t\ttext_template:\n\t\t\t\"{{member_identity}} was removed from {{organization_name}}.\",\n\t},\n\torganization_member_role_updated_email: {\n\t\thtml_template:\n\t\t\t\"<p><strong>{{member_identity}}</strong> is now <strong>{{new_role}}</strong> in <strong>{{organization_name}}</strong>.</p>\",\n\t\tsubject_template: \"Role updated in {{organization_name}}\",\n\t\ttext_template:\n\t\t\t\"{{member_identity}} is now {{new_role}} in {{organization_name}}.\",\n\t},\n\tpassword_changed_email: {\n\t\thtml_template:\n\t\t\t\"<p>Your password was changed. If you did not do this, secure your account immediately.</p>\",\n\t\tsubject_template: \"Your password was changed\",\n\t\ttext_template:\n\t\t\t\"Your password was changed. If you did not do this, secure your account immediately.\",\n\t},\n\tsecurity_alert_email: {\n\t\thtml_template:\n\t\t\t\"<p><strong>{{alert_title}}</strong></p><p>{{alert_details}}</p>\",\n\t\tsubject_template: \"Security alert: {{alert_title}}\",\n\t\ttext_template: \"{{alert_title}}\\n{{alert_details}}\",\n\t},\n\twelcome_email: {\n\t\thtml_template:\n\t\t\t\"<p>Hi {{user_name}},</p><p>Your account is ready.</p>\",\n\t\tsubject_template: \"Welcome to {{app_name}}\",\n\t\ttext_template: \"Hi {{user_name}}, your account is ready.\",\n\t},\n\tpassword_reset_email: {\n\t\thtml_template:\n\t\t\t'<p>Click the link below to reset your password:</p><p><a href=\"{{reset_url}}\">Reset Password</a></p>',\n\t\tsubject_template: \"Reset your password\",\n\t\ttext_template: \"Reset your password: {{reset_url}}\",\n\t},\n\ttwo_factor_otp_email: {\n\t\thtml_template:\n\t\t\t\"<p>Your 2FA verification code is: <strong>{{otp_code}}</strong></p>\",\n\t\tsubject_template: \"Your verification code\",\n\t\ttext_template: \"Your 2FA verification code is: {{otp_code}}\",\n\t},\n\tverification_email: {\n\t\thtml_template:\n\t\t\t'<p>Click the link below to verify your email address:</p><p><a href=\"{{verification_url}}\">Verify Email</a></p>',\n\t\tsubject_template: \"Verify your email address\",\n\t\ttext_template: \"Verify your email address: {{verification_url}}\",\n\t},\n};\n\nexport function builtinAuthEmailBody(\n\ttemplateKey: string | null | undefined,\n): BuiltinAuthEmailBody | undefined {\n\tif (!templateKey) {\n\t\treturn undefined;\n\t}\n\treturn BODIES[templateKey];\n}\n\nexport function builtinTemplateRow(\n\teventType: string,\n\tlocale: string,\n): AthenaAuthEmailTemplateRow | undefined {\n\tconst definition = AUTH_EMAIL_EVENT_CATALOG.find(\n\t\t(entry) => entry.event_type === eventType,\n\t);\n\tconst key = definition?.default_template_key;\n\tconst body = builtinAuthEmailBody(key);\n\tif (!definition || !key || !body) {\n\t\treturn undefined;\n\t}\n\tconst stamp = new Date(0).toISOString();\n\treturn {\n\t\tattachment_failure_mode: \"fail\",\n\t\tattachments: [],\n\t\tcreated_at: stamp,\n\t\tevent_type: eventType,\n\t\thtml_template: body.html_template,\n\t\tid: `builtin:${key}:${locale}`,\n\t\tis_active: true,\n\t\tlocale,\n\t\tmetadata: { builtin: true },\n\t\tsubject_template: body.subject_template,\n\t\ttemplate_key: key,\n\t\ttext_template: body.text_template,\n\t\tupdated_at: stamp,\n\t\tvariable_bindings: [],\n\t\tvariables: [...definition.required_variables],\n\t};\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\temail?: string;\n\tid?: string;\n\tname?: string;\n}\n\nexport interface AuthEmailApplicationView {\n\tname?: string;\n\turl?: string;\n}\n\n/** View for `user.password.reset` / `password_reset_email`. Wire: `reset_url`. */\nexport interface PasswordResetTemplateData {\n\tapplication?: AuthEmailApplicationView;\n\texpiresAt?: string;\n\tresetUrl: string;\n\tuser?: AuthEmailUserView;\n}\n\n/** View for `user.email.verify` / `verification_email`. Wire: `verification_url`. */\nexport interface VerifyEmailTemplateData {\n\tapplication?: AuthEmailApplicationView;\n\texpiresAt?: string;\n\tuser?: AuthEmailUserView;\n\tverificationUrl: string;\n}\n\n/** View for `user.email.change.confirmation`. Wire: `verification_url`. */\nexport interface ChangeEmailTemplateData {\n\tapplication?: AuthEmailApplicationView;\n\texpiresAt?: string;\n\tuser?: AuthEmailUserView;\n\tverificationUrl: string;\n}\n\n/** View for `user.account.delete.confirmation`. Wire: `verification_url`. */\nexport interface DeleteUserConfirmationTemplateData {\n\tapplication?: AuthEmailApplicationView;\n\texpiresAt?: string;\n\tuser?: AuthEmailUserView;\n\tverificationUrl: string;\n}\n\n/** View for `organization.member.invite`. */\nexport interface OrganizationInvitationTemplateData {\n\tapplication?: AuthEmailApplicationView;\n\tinvitationUrl: string;\n\tinviterIdentity: string;\n\torganizationName: string;\n\trole: string;\n\tuser?: AuthEmailUserView;\n}\n\n/** View for `user.sign-in.otp` / `two_factor_otp_email`. Wire: `otp_code`. */\nexport interface OtpTemplateData {\n\tapplication?: AuthEmailApplicationView;\n\totpCode: string;\n\tuser?: AuthEmailUserView;\n}\n\nexport type AuthEmailTemplateView =\n\t| ChangeEmailTemplateData\n\t| DeleteUserConfirmationTemplateData\n\t| OrganizationInvitationTemplateData\n\t| OtpTemplateData\n\t| PasswordResetTemplateData\n\t| Record<string, unknown>\n\t| VerifyEmailTemplateData;\n\nfunction asString(value: unknown): string | undefined {\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tif (typeof value === \"number\" || typeof value === \"boolean\") {\n\t\treturn String(value);\n\t}\n\treturn undefined;\n}\n\nfunction toSnakeCase(key: string): string {\n\treturn key\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n\t\t.replace(/-/g, \"_\")\n\t\t.toLowerCase();\n}\n\nfunction assignIfPresent(\n\tout: Record<string, string>,\n\tkey: string,\n\tvalue: unknown,\n): void {\n\tconst text = asString(value);\n\tif (text !== undefined) {\n\t\tout[key] = text;\n\t}\n}\n\nfunction flattenRecord(view: Record<string, unknown>): Record<string, string> {\n\tconst out: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(view)) {\n\t\tif (key === \"user\" || key === \"application\") {\n\t\t\tcontinue;\n\t\t}\n\t\tif (value && typeof value === \"object\" && !Array.isArray(value)) {\n\t\t\tcontinue;\n\t\t}\n\t\tassignIfPresent(out, toSnakeCase(key), value);\n\t}\n\n\tconst user = view.user;\n\tif (user && typeof user === \"object\" && !Array.isArray(user)) {\n\t\tconst fields = user as Record<string, unknown>;\n\t\tassignIfPresent(out, \"user_id\", fields.id);\n\t\tassignIfPresent(out, \"user_email\", fields.email);\n\t\tassignIfPresent(out, \"user_name\", fields.name);\n\t}\n\n\tconst application = view.application;\n\tif (\n\t\tapplication &&\n\t\ttypeof application === \"object\" &&\n\t\t!Array.isArray(application)\n\t) {\n\t\tconst fields = application as Record<string, unknown>;\n\t\tassignIfPresent(out, \"app_name\", fields.name);\n\t\tassignIfPresent(out, \"application_url\", fields.url);\n\t}\n\n\tassignIfPresent(out, \"reset_url\", view.resetUrl);\n\tassignIfPresent(out, \"verification_url\", view.verificationUrl);\n\tassignIfPresent(out, \"otp_code\", view.otpCode);\n\tassignIfPresent(out, \"invitation_url\", view.invitationUrl);\n\tassignIfPresent(out, \"inviter_identity\", view.inviterIdentity);\n\tassignIfPresent(out, \"organization_name\", view.organizationName);\n\tassignIfPresent(out, \"expires_at\", view.expiresAt);\n\tassignIfPresent(out, \"sign_in_url\", view.signInUrl);\n\tassignIfPresent(out, \"dashboard_url\", view.dashboardUrl);\n\tassignIfPresent(out, \"support_url\", view.supportUrl);\n\tassignIfPresent(out, \"alert_title\", view.alertTitle);\n\tassignIfPresent(out, \"alert_details\", view.alertDetails);\n\tassignIfPresent(out, \"organization_url\", view.organizationUrl);\n\tassignIfPresent(out, \"member_identity\", view.memberIdentity);\n\tassignIfPresent(out, \"actor_identity\", view.actorIdentity);\n\tassignIfPresent(out, \"new_role\", view.newRole);\n\tassignIfPresent(out, \"previous_role\", view.previousRole);\n\tassignIfPresent(out, \"invited_email\", view.invitedEmail);\n\treturn out;\n}\n\nexport function flattenAuthEmailTemplateData(\n\t_eventType: string,\n\tview: AuthEmailTemplateView,\n): Record<string, string> {\n\treturn flattenRecord(view as Record<string, unknown>);\n}\n\nexport function assertAuthEmailRequiredVariables(\n\teventType: string,\n\tdata: Record<string, string>,\n): void {\n\tconst definition = getAuthEmailEventDefinition(eventType);\n\tif (!definition) {\n\t\treturn;\n\t}\n\tconst missing = definition.required_variables.filter((key) => {\n\t\tconst value = data[key];\n\t\treturn typeof value !== \"string\" || value.trim().length === 0;\n\t});\n\tif (missing.length > 0) {\n\t\tthrow new Error(\n\t\t\t`missing required template variables: ${missing.join(\", \")}`,\n\t\t);\n\t}\n}\n\nfunction localesEqual(left: string, right: string): boolean {\n\treturn left.trim().toLowerCase() === right.trim().toLowerCase();\n}\n\nfunction pickStoredLocale(\n\trows: AthenaAuthEmailTemplateRow[],\n\tlocale: string,\n): AthenaAuthEmailTemplateRow | undefined {\n\treturn 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\tstore: AthenaAuthEmailStore,\n\tinput: { eventType: string; locale?: string },\n): Promise<AthenaAuthEmailTemplateRow | undefined> {\n\tconst locale = input.locale?.trim() || \"en\";\n\tconst definition = getAuthEmailEventDefinition(input.eventType);\n\tconst templateKey = definition?.default_template_key ?? undefined;\n\tif (!templateKey) {\n\t\treturn undefined;\n\t}\n\n\tconst rows = await store.listTemplates({\n\t\tevent_type: input.eventType,\n\t\tis_active: true,\n\t\ttemplate_key: templateKey,\n\t});\n\n\tconst exact = pickStoredLocale(rows, locale);\n\tif (exact) {\n\t\treturn exact;\n\t}\n\n\tif (locale.includes(\"-\")) {\n\t\tconst prefix = locale.slice(0, locale.indexOf(\"-\"));\n\t\tconst byPrefix = pickStoredLocale(rows, prefix);\n\t\tif (byPrefix) {\n\t\t\treturn byPrefix;\n\t\t}\n\t}\n\n\tif (!localesEqual(locale, \"en\")) {\n\t\tconst fallbackEn = pickStoredLocale(rows, \"en\");\n\t\tif (fallbackEn) {\n\t\t\treturn fallbackEn;\n\t\t}\n\t}\n\n\treturn builtinTemplateRow(input.eventType, locale);\n}\n","import type { AthenaAuthEmailTemplateAttachment } from \"../types.ts\";\n\nexport type AthenaAuthEmailAttachmentFailureMode = \"fail\" | \"skip\";\n\nexport interface AthenaAuthEmailTemplateRow {\n\tattachment_failure_mode: AthenaAuthEmailAttachmentFailureMode;\n\tattachments: AthenaAuthEmailTemplateAttachment[];\n\tcreated_at: string;\n\tevent_type: string | null;\n\thtml_template: string | null;\n\tid: string;\n\tis_active: boolean;\n\tlocale: string;\n\tmetadata: Record<string, unknown>;\n\tsubject_template: string;\n\ttemplate_key: string;\n\ttext_template: string | null;\n\tupdated_at: string;\n\tvariable_bindings: Array<{\n\t\tname: string;\n\t\trequired?: boolean;\n\t\tsource: string;\n\t}>;\n\tvariables: string[];\n}\n\nexport interface AthenaAuthEmailFailureRow {\n\tcreated_at: string;\n\terror_code?: string;\n\terror_message: string;\n\tflow: string;\n\tid: string;\n\tmetadata: Record<string, unknown>;\n\tprovider?: string | null;\n\trecipient_email: string;\n\tresolved: boolean;\n\tresolution_note?: string | null;\n\ttemplate_id?: string | null;\n\ttemplate_key?: string | null;\n\tupdated_at: string;\n}\n\nexport interface AthenaAuthEmailRecordRow {\n\tcreated_at: string;\n\tflow: string | null;\n\tfrom_address: string;\n\tfrom_name: string | null;\n\thtml_body: string | null;\n\tid: string;\n\tmetadata: Record<string, unknown>;\n\tprovider: string;\n\trecipient_email: string;\n\tsubject: string;\n\ttext_body: string | null;\n\tupdated_at: string;\n}\n\nexport const ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED =\n\t\"ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED\";\n","export const ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED =\n  \"ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED\" as const;\nexport const ATHENA_EMAIL_MESSAGE_INVALID = \"ATHENA_EMAIL_MESSAGE_INVALID\" as const;\nexport const ATHENA_EMAIL_DELIVERY_FAILED = \"ATHENA_EMAIL_DELIVERY_FAILED\" as const;\nexport const ATHENA_EMAIL_PROVIDER_UNSUPPORTED_RUNTIME =\n  \"ATHENA_EMAIL_PROVIDER_UNSUPPORTED_RUNTIME\" as const;\nexport const ATHENA_EMAIL_PROVIDER_INVALID = \"ATHENA_EMAIL_PROVIDER_INVALID\" as const;\n\nexport type AthenaEmailErrorCode =\n  | typeof ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED\n  | typeof ATHENA_EMAIL_MESSAGE_INVALID\n  | typeof ATHENA_EMAIL_DELIVERY_FAILED\n  | typeof ATHENA_EMAIL_PROVIDER_UNSUPPORTED_RUNTIME\n  | typeof ATHENA_EMAIL_PROVIDER_INVALID;\n\nexport class AthenaEmailError extends Error {\n  readonly code: AthenaEmailErrorCode;\n\n  constructor(\n    code: AthenaEmailErrorCode,\n    message: string,\n    options?: { cause?: unknown }\n  ) {\n    super(message, options);\n    this.name = \"AthenaEmailError\";\n    this.code = code;\n  }\n}\n\nexport function isAthenaEmailError(value: unknown): value is AthenaEmailError {\n  return value instanceof AthenaEmailError;\n}\n","export function renderAuthEmailFragment(\n\tfragment: string,\n\tvariables: Record<string, string>,\n): string {\n\tlet rendered = fragment;\n\tfor (const [key, value] of Object.entries(variables)) {\n\t\trendered = rendered.split(`{{${key}}}`).join(value);\n\t\trendered = rendered.split(`{{ ${key} }}`).join(value);\n\t}\n\treturn rendered;\n}\n","import {\n\tATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n\tAthenaEmailError,\n} from \"../../email/errors.ts\";\nimport type {\n\tAthenaEmailDeliveryPort,\n\tAthenaEmailMessage,\n} from \"../../email/types.ts\";\nimport type { AthenaAuthEmailStore } from \"../local/email/store.ts\";\nimport {\n\tassertAuthEmailRequiredVariables,\n\tflattenAuthEmailTemplateData,\n\tresolveAuthEmailTemplate,\n} from \"./catalog.ts\";\nimport { ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED } from \"./contract.ts\";\nimport { renderAuthEmailFragment } from \"./renderer.ts\";\n\nexport interface EmitAuthEmailInput {\n\tdata: Record<string, string>;\n\teventType: string;\n\tflow?: string;\n\tlocale?: string;\n\trecipient: string;\n}\n\nexport type LegacyAuthEmailSend = (message: {\n\tsubject: string;\n\tto: string;\n\ttype: string;\n\turl?: string;\n}) => Promise<void> | void;\n\nexport interface EmitAuthEmailContext {\n\tdelivery?: AthenaEmailDeliveryPort;\n\tlegacySend?: LegacyAuthEmailSend;\n\tstore: AthenaAuthEmailStore;\n}\n\nconst LEGACY_TYPE: Record<string, string> = {\n\t\"organization.member.invite\": \"organization-invite\",\n\t\"user.account.delete.confirmation\": \"delete-account\",\n\t\"user.email.change.confirmation\": \"change-email\",\n\t\"user.email.verify\": \"verify-email\",\n\t\"user.password.reset\": \"reset-password\",\n\t\"user.sign-in.email\": \"magic-link\",\n\t\"user.sign-in.otp\": \"two-factor-otp\",\n};\n\nfunction nowIso(): string {\n\treturn new Date().toISOString();\n}\n\nfunction secretsFromData(data: Record<string, string>): string[] {\n\tconst secrets: string[] = [];\n\tif (data.otp_code) {\n\t\tsecrets.push(data.otp_code);\n\t}\n\tfor (const value of Object.values(data)) {\n\t\tconst token = /[?&]token=([^&]+)/.exec(value)?.[1];\n\t\tif (token) {\n\t\t\ttry {\n\t\t\t\tsecrets.push(decodeURIComponent(token));\n\t\t\t} catch {\n\t\t\t\tsecrets.push(token);\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\t/^(verify_|change_|delete_|reset_)/.test(value) ||\n\t\t\t/^[0-9a-f-]{36}$/i.test(value)\n\t\t) {\n\t\t\tsecrets.push(value);\n\t\t}\n\t}\n\treturn [...new Set(secrets.filter((entry) => entry.length >= 6))];\n}\n\nfunction redact(\n\tvalue: string | null | undefined,\n\tsecrets: string[],\n): string | null {\n\tif (!value) {\n\t\treturn value ?? null;\n\t}\n\tlet next = value;\n\tfor (const secret of secrets) {\n\t\tnext = next.split(secret).join(\"[redacted]\");\n\t}\n\treturn next;\n}\n\nfunction hookUrl(data: Record<string, string>): string | undefined {\n\treturn (\n\t\tdata.legacy_hook_url ??\n\t\tdata.verification_url ??\n\t\tdata.reset_url ??\n\t\tdata.invitation_url ??\n\t\tdata.sign_in_url ??\n\t\tdata.otp_code\n\t);\n}\n\nexport function authEmailFailureFromDeliveryError(error: unknown): {\n\terrorCode: string;\n\terrorMessage: string;\n} {\n\tif (error instanceof AthenaEmailError) {\n\t\tif (error.code === ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED) {\n\t\t\treturn {\n\t\t\t\terrorCode: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n\t\t\t\terrorMessage: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\terrorCode: error.code,\n\t\t\terrorMessage: error.message,\n\t\t};\n\t}\n\treturn {\n\t\terrorCode: \"ATHENA_EMAIL_DELIVERY_FAILED\",\n\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t};\n}\n\nexport async function emitAuthEmail(\n\tinput: EmitAuthEmailInput,\n\tctx: EmitAuthEmailContext,\n): Promise<{ success: boolean }> {\n\tconst locale = input.locale?.trim() || \"en\";\n\tconst flow = input.flow ?? input.eventType;\n\tconst template = await resolveAuthEmailTemplate(ctx.store, {\n\t\teventType: input.eventType,\n\t\tlocale,\n\t});\n\tif (!template) {\n\t\treturn { success: false };\n\t}\n\n\tconst data = {\n\t\tapp_name: \"Athena\",\n\t\t...flattenAuthEmailTemplateData(input.eventType, input.data),\n\t};\n\tconst stamp = nowIso();\n\tconst templateId = template.id.startsWith(\"builtin:\") ? null : template.id;\n\ttry {\n\t\tassertAuthEmailRequiredVariables(input.eventType, data);\n\t} catch (error) {\n\t\tawait ctx.store.createFailure({\n\t\t\tcreated_at: stamp,\n\t\t\terror_message: error instanceof Error ? error.message : String(error),\n\t\t\tflow,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tmetadata: { event_type: input.eventType },\n\t\t\trecipient_email: input.recipient,\n\t\t\tresolved: false,\n\t\t\ttemplate_id: templateId,\n\t\t\ttemplate_key: template.template_key,\n\t\t\tupdated_at: stamp,\n\t\t});\n\t\treturn { success: false };\n\t}\n\n\tconst subject = renderAuthEmailFragment(template.subject_template, data);\n\tconst html = template.html_template\n\t\t? renderAuthEmailFragment(template.html_template, data)\n\t\t: undefined;\n\tconst text = template.text_template\n\t\t? renderAuthEmailFragment(template.text_template, data)\n\t\t: undefined;\n\tconst secrets = secretsFromData(data);\n\n\tconst invokeLegacy = async () => {\n\t\tif (!ctx.legacySend) {\n\t\t\treturn;\n\t\t}\n\t\tawait ctx.legacySend({\n\t\t\tsubject,\n\t\t\tto: input.recipient,\n\t\t\ttype: LEGACY_TYPE[input.eventType] ?? input.eventType,\n\t\t\turl: hookUrl(data),\n\t\t});\n\t};\n\n\tconst delivery = ctx.delivery;\n\tif (!delivery) {\n\t\tawait ctx.store.createFailure({\n\t\t\tcreated_at: stamp,\n\t\t\terror_code: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n\t\t\terror_message: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n\t\t\tflow,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tmetadata: { event_type: input.eventType },\n\t\t\trecipient_email: input.recipient,\n\t\t\tresolved: false,\n\t\t\ttemplate_id: templateId,\n\t\t\ttemplate_key: template.template_key,\n\t\t\tupdated_at: stamp,\n\t\t});\n\t\tawait invokeLegacy();\n\t\treturn { success: false };\n\t}\n\n\tconst message: AthenaEmailMessage = {\n\t\thtml,\n\t\tmetadata: {\n\t\t\tevent_type: input.eventType,\n\t\t\tflow,\n\t\t\ttemplate_id: templateId,\n\t\t\ttemplate_key: template.template_key,\n\t\t},\n\t\tsubject,\n\t\ttext,\n\t\tto: input.recipient,\n\t};\n\tconst emailId = crypto.randomUUID();\n\tawait ctx.store.createEmail({\n\t\tcreated_at: stamp,\n\t\tflow,\n\t\tfrom_address: message.from ?? \"athena@localhost\",\n\t\tfrom_name: null,\n\t\thtml_body: redact(html, secrets),\n\t\tid: emailId,\n\t\tmetadata: {\n\t\t\tevent_type: input.eventType,\n\t\t\ttemplate_key: template.template_key,\n\t\t},\n\t\tprovider: \"pending\",\n\t\trecipient_email: input.recipient,\n\t\tsubject: redact(subject, secrets) ?? subject,\n\t\ttext_body: redact(text, secrets),\n\t\tupdated_at: stamp,\n\t});\n\n\tlet result: Awaited<ReturnType<typeof delivery.send>>;\n\ttry {\n\t\tresult = await delivery.send(message);\n\t} catch (error) {\n\t\tawait ctx.store.deleteEmail(emailId);\n\t\tconst mapped = authEmailFailureFromDeliveryError(error);\n\t\tawait ctx.store.createFailure({\n\t\t\tcreated_at: nowIso(),\n\t\t\terror_code: mapped.errorCode,\n\t\t\terror_message: mapped.errorMessage,\n\t\t\tflow,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tmetadata: { event_type: input.eventType },\n\t\t\trecipient_email: input.recipient,\n\t\t\tresolved: false,\n\t\t\ttemplate_id: templateId,\n\t\t\ttemplate_key: template.template_key,\n\t\t\tupdated_at: nowIso(),\n\t\t});\n\t\treturn { success: false };\n\t}\n\tif (!result.success) {\n\t\tawait ctx.store.deleteEmail(emailId);\n\t\tawait ctx.store.createFailure({\n\t\t\tcreated_at: nowIso(),\n\t\t\terror_code: \"ATHENA_EMAIL_DELIVERY_FAILED\",\n\t\t\terror_message: \"Email delivery failed\",\n\t\t\tflow,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tmetadata: { event_type: input.eventType },\n\t\t\tprovider: result.provider,\n\t\t\trecipient_email: input.recipient,\n\t\t\tresolved: false,\n\t\t\ttemplate_id: templateId,\n\t\t\ttemplate_key: template.template_key,\n\t\t\tupdated_at: nowIso(),\n\t\t});\n\t\treturn { success: false };\n\t}\n\ttry {\n\t\tawait ctx.store.updateEmail(emailId, {\n\t\t\tfrom_address: result.from ?? message.from ?? \"athena@localhost\",\n\t\t\tfrom_name: result.fromName ?? message.fromName ?? null,\n\t\t\tprovider: result.provider,\n\t\t\tupdated_at: nowIso(),\n\t\t});\n\t\tawait invokeLegacy();\n\t} catch {\n\t\t// Delivery already succeeded; audit/callback errors must not rewrite it.\n\t}\n\treturn { success: true };\n}\n\nexport function createTransactionalMailer(ctx: EmitAuthEmailContext) {\n\treturn {\n\t\temit(input: EmitAuthEmailInput) {\n\t\t\treturn emitAuthEmail(input, ctx);\n\t\t},\n\t};\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","import type { AthenaAuthImplementedDomainEvent } from \"./events.ts\";\nimport type {\n\tAthenaAuthAfterHookPayload,\n\tAthenaAuthBeforeHookPayload,\n\tAthenaAuthHookErrorInput,\n} from \"./types.ts\";\n\ntype AthenaAuthHooksInput = {\n\tafter?: {\n\t\t[K in AthenaAuthImplementedDomainEvent]?: (\n\t\t\tpayload: AthenaAuthAfterHookPayload<K>,\n\t\t) => void;\n\t};\n\tbefore?: {\n\t\t[K in AthenaAuthImplementedDomainEvent]?: (\n\t\t\tpayload: AthenaAuthBeforeHookPayload<K>,\n\t\t) => void;\n\t};\n\tonError?: (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\thooks: T,\n): T {\n\treturn hooks;\n}\n","export const ATHENA_AUTH_DOMAIN_EVENT_STATUS = {\n\timplemented: \"implemented\",\n\treserved: \"reserved\",\n} as const;\n\nexport type AthenaAuthDomainEventStatus =\n\t(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\t\"account.link\": { status: \"implemented\" },\n\t\"account.unlink\": { status: \"implemented\" },\n\t\"apiKey.create\": { status: \"implemented\" },\n\t\"apiKey.delete\": { status: \"implemented\" },\n\t\"apiKey.update\": { status: \"implemented\" },\n\t\"organization.create\": { status: \"implemented\" },\n\t\"organization.delete\": { status: \"implemented\" },\n\t\"organization.invitation.accept\": { status: \"implemented\" },\n\t\"organization.invitation.cancel\": { status: \"implemented\" },\n\t\"organization.invitation.create\": { status: \"implemented\" },\n\t\"organization.invitation.reject\": { status: \"implemented\" },\n\t\"organization.member.add\": { status: \"implemented\" },\n\t\"organization.member.invite.reminder\": { status: \"implemented\" },\n\t\"organization.member.remove\": { status: \"implemented\" },\n\t\"organization.member.role.update\": { status: \"implemented\" },\n\t\"organization.update\": { status: \"implemented\" },\n\t\"passkey.delete\": { status: \"implemented\" },\n\t\"passkey.register\": { status: \"implemented\" },\n\t\"passkey.update\": { status: \"implemented\" },\n\t\"session.activeOrganization.update\": { status: \"implemented\" },\n\t\"user.security.alert\": { status: \"implemented\" },\n\t\"user.sign-in.email\": { status: \"implemented\" },\n\t\"user.sign-in.social\": { status: \"implemented\" },\n\t\"session.impersonation.end\": { status: \"implemented\" },\n\t\"session.impersonation.start\": { status: \"implemented\" },\n\t\"session.issue\": { status: \"implemented\" },\n\t\"session.revoke\": { status: \"implemented\" },\n\t\"twoFactor.disable\": { status: \"implemented\" },\n\t\"twoFactor.enable\": { status: \"implemented\" },\n\t\"user.ban\": { status: \"implemented\" },\n\t\"user.create\": { status: \"implemented\" },\n\t\"user.delete\": { status: \"implemented\" },\n\t\"user.email.update\": { status: \"implemented\" },\n\t\"user.email.verify\": { status: \"implemented\" },\n\t\"user.password.change\": { status: \"implemented\" },\n\t\"user.password.reset\": { status: \"implemented\" },\n\t\"user.role.update\": { status: \"implemented\" },\n\t\"user.unban\": { status: \"implemented\" },\n\t\"user.update\": { status: \"implemented\" },\n} as const satisfies Record<\n\tstring,\n\t{ readonly status: AthenaAuthDomainEventStatus }\n>;\n\nexport type AthenaAuthDomainEvent = keyof typeof ATHENA_AUTH_DOMAIN_EVENTS;\n\nexport type AthenaAuthImplementedDomainEvent = {\n\t[K in AthenaAuthDomainEvent]: (typeof ATHENA_AUTH_DOMAIN_EVENTS)[K][\"status\"] extends \"implemented\"\n\t\t? K\n\t\t: never;\n}[AthenaAuthDomainEvent];\n\nexport type AthenaAuthReservedDomainEvent = {\n\t[K in AthenaAuthDomainEvent]: (typeof ATHENA_AUTH_DOMAIN_EVENTS)[K][\"status\"] extends \"reserved\"\n\t\t? K\n\t\t: never;\n}[AthenaAuthDomainEvent];\n\nfunction isImplementedEvent(\n\tevent: AthenaAuthDomainEvent,\n): event is AthenaAuthImplementedDomainEvent {\n\treturn (\n\t\t(ATHENA_AUTH_DOMAIN_EVENTS[event].status as string) === \"implemented\"\n\t);\n}\n\nexport const ATHENA_AUTH_IMPLEMENTED_DOMAIN_EVENTS = (\n\tObject.keys(ATHENA_AUTH_DOMAIN_EVENTS) as AthenaAuthDomainEvent[]\n).filter(isImplementedEvent);\n\nexport const ATHENA_AUTH_RESERVED_DOMAIN_EVENTS = (\n\tObject.keys(ATHENA_AUTH_DOMAIN_EVENTS) as AthenaAuthDomainEvent[]\n).filter(\n\t(event): event is AthenaAuthReservedDomainEvent =>\n\t\t(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","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","import { decodeBase64UrlToString, encodeStringToBase64Url } from \"./base64.ts\";\nimport {\n  HOST_COOKIE_PREFIX,\n  parseCookies,\n  parseSetCookieHeader,\n  SECURE_COOKIE_PREFIX,\n  setCookieToHeader,\n  setRequestCookie,\n  splitSetCookieHeader,\n  stripSecureCookiePrefix,\n  toCookieOptions,\n} from \"./cookie-utils.ts\";\nimport { signHmacBase64Url, signJwtHS256, verifyJwtHS256 } from \"./crypto.ts\";\nimport {\n  createAccountStore,\n  createSessionStore,\n  getAccountCookie,\n  getChunkedCookie,\n} from \"./session-store.ts\";\nimport type {\n  AthenaAuthCookie,\n  AthenaAuthCookies,\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n  AthenaCookiesOptions,\n  AthenaCookieVersionResolver,\n  AthenaGetCookieCacheConfig,\n  AthenaSessionPair,\n} from \"./types.ts\";\n\nconst DEFAULT_COOKIE_PREFIX = \"athena-auth\";\nconst LEGACY_COOKIE_PREFIX = \"better-auth\";\nconst DEFAULT_SESSION_MAX_AGE = 7 * 24 * 60 * 60;\nconst DEFAULT_CACHE_MAX_AGE = 60 * 5;\n\nfunction isProductionRuntime(): boolean {\n  return (\n    (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n      ?.NODE_ENV === \"production\"\n  );\n}\n\nfunction getEnvironmentSecret(): string | undefined {\n  const env = (\n    globalThis as {\n      process?: {\n        env?: {\n          ATHENA_AUTH_SECRET?: string;\n          BETTER_AUTH_SECRET?: string;\n          AUTH_SECRET?: string;\n        };\n      };\n    }\n  ).process?.env;\n  if (!env) {\n    return;\n  }\n  return env.ATHENA_AUTH_SECRET || env.BETTER_AUTH_SECRET || env.AUTH_SECRET;\n}\n\nfunction isDynamicBaseURLConfig(\n  baseURL: AthenaCookiesOptions[\"baseURL\"]\n): boolean {\n  return (\n    typeof baseURL === \"object\" &&\n    baseURL !== null &&\n    \"allowedHosts\" in baseURL &&\n    Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\n  );\n}\n\nfunction resolveCookiePrefixes(primaryPrefix: string): string[] {\n  const prefixes = [primaryPrefix];\n  if (!prefixes.includes(DEFAULT_COOKIE_PREFIX)) {\n    prefixes.push(DEFAULT_COOKIE_PREFIX);\n  }\n  if (!prefixes.includes(LEGACY_COOKIE_PREFIX)) {\n    prefixes.push(LEGACY_COOKIE_PREFIX);\n  }\n  return prefixes;\n}\n\nfunction createError(message: string): Error {\n  return new Error(`@xylex-group/athena/cookies: ${message}`);\n}\n\nfunction getSecretOrThrow(secret?: string): string {\n  const resolved = secret || getEnvironmentSecret();\n  if (!resolved) {\n    throw createError(\n      \"getCookieCache requires a secret. Pass `secret` or set ATHENA_AUTH_SECRET/BETTER_AUTH_SECRET/AUTH_SECRET.\"\n    );\n  }\n  return resolved;\n}\n\nfunction asObject(value: unknown): Record<string, unknown> | null {\n  if (!value || typeof value !== \"object\") {\n    return null;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction getSessionTokenFromPair(session: AthenaSessionPair): string {\n  const token = session.session?.token;\n  if (typeof token !== \"string\" || token.length === 0) {\n    throw createError(\n      \"setSessionCookie requires `session.session.token` to be a non-empty string.\"\n    );\n  }\n  return token;\n}\n\nasync function resolveCookieVersion(\n  versionConfig: AthenaCookieVersionResolver | undefined,\n  session: Record<string, unknown>,\n  user: Record<string, unknown>\n): Promise<string> {\n  if (!versionConfig) {\n    return \"1\";\n  }\n  if (typeof versionConfig === \"string\") {\n    return versionConfig;\n  }\n  return versionConfig(session, user);\n}\n\nfunction getSessionCookieCacheName(\n  cookiePrefix: string,\n  cookieName: string,\n  isSecure: boolean\n): string {\n  return isSecure\n    ? `${SECURE_COOKIE_PREFIX}${cookiePrefix}.${cookieName}`\n    : `${cookiePrefix}.${cookieName}`;\n}\n\nasync function setCookieValue(\n  ctx: AthenaCookieContextRuntime,\n  name: string,\n  value: string,\n  attributes: AthenaCookieOptions\n): Promise<void> {\n  const secret = ctx.context.secret;\n  if (secret && typeof ctx.setSignedCookie === \"function\") {\n    await ctx.setSignedCookie(name, value, secret, attributes);\n    return;\n  }\n  ctx.setCookie(name, value, attributes);\n}\n\nfunction parseJsonSafely<T>(value: string): T | null {\n  try {\n    return JSON.parse(value) as T;\n  } catch {\n    return null;\n  }\n}\n\nfunction getIsSecureCookie(\n  config: { isSecure?: boolean } | undefined\n): boolean {\n  if (config?.isSecure !== undefined) {\n    return config.isSecure;\n  }\n  return isProductionRuntime();\n}\n\nexport function createCookieGetter(options: AthenaCookiesOptions) {\n  const baseURLString =\n    typeof options.baseURL === \"string\" ? options.baseURL : undefined;\n  const dynamicProtocol =\n    typeof options.baseURL === \"object\" && options.baseURL !== null\n      ? options.baseURL.protocol\n      : undefined;\n\n  const secure =\n    options.advanced?.useSecureCookies === undefined\n      ? dynamicProtocol === \"https\"\n        ? true\n        : dynamicProtocol === \"http\"\n          ? false\n          : baseURLString\n            ? baseURLString.startsWith(\"https://\")\n            : isProductionRuntime()\n      : options.advanced.useSecureCookies;\n\n  const secureCookiePrefix = secure ? SECURE_COOKIE_PREFIX : \"\";\n  const crossSubdomainEnabled =\n    !!options.advanced?.crossSubDomainCookies?.enabled;\n  const domain = crossSubdomainEnabled\n    ? options.advanced?.crossSubDomainCookies?.domain ||\n      (baseURLString ? new URL(baseURLString).hostname : undefined)\n    : undefined;\n\n  if (\n    crossSubdomainEnabled &&\n    !domain &&\n    !isDynamicBaseURLConfig(options.baseURL)\n  ) {\n    throw createError(\n      \"baseURL is required when `crossSubDomainCookies.enabled` is true.\"\n    );\n  }\n\n  function createCookie(\n    cookieName: string,\n    overrideAttributes: Partial<AthenaCookieOptions> = {}\n  ): AthenaAuthCookie {\n    const prefix = options.advanced?.cookiePrefix || DEFAULT_COOKIE_PREFIX;\n    const name =\n      options.advanced?.cookies?.[cookieName]?.name ||\n      `${prefix}.${cookieName}`;\n    const attributes =\n      options.advanced?.cookies?.[cookieName]?.attributes || {};\n\n    return {\n      attributes: {\n        httpOnly: true,\n        path: \"/\",\n        sameSite: \"lax\",\n        secure: !!secureCookiePrefix,\n        ...(crossSubdomainEnabled ? { domain } : {}),\n        ...options.advanced?.defaultCookieAttributes,\n        ...overrideAttributes,\n        ...attributes,\n      },\n      name: `${secureCookiePrefix}${name}`,\n    };\n  }\n\n  return createCookie;\n}\n\nexport function getCookies(options: AthenaCookiesOptions): AthenaAuthCookies {\n  const createCookie = createCookieGetter(options);\n  const sessionToken = createCookie(\"session_token\", {\n    maxAge: options.session?.expiresIn || DEFAULT_SESSION_MAX_AGE,\n  });\n  const sessionData = createCookie(\"session_data\", {\n    maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE,\n  });\n  const accountData = createCookie(\"account_data\", {\n    maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE,\n  });\n  const dontRememberToken = createCookie(\"dont_remember\");\n\n  return {\n    accountData: {\n      attributes: accountData.attributes,\n      name: accountData.name,\n    },\n    dontRememberToken: {\n      attributes: dontRememberToken.attributes,\n      name: dontRememberToken.name,\n    },\n    sessionData: {\n      attributes: sessionData.attributes,\n      name: sessionData.name,\n    },\n    sessionToken: {\n      attributes: sessionToken.attributes,\n      name: sessionToken.name,\n    },\n  };\n}\n\nexport async function setCookieCache(\n  ctx: AthenaCookieContextRuntime,\n  session: AthenaSessionPair,\n  dontRememberMe: boolean\n): Promise<void> {\n  const cookieCacheConfig = ctx.context.options?.session?.cookieCache;\n  if (!cookieCacheConfig?.enabled) {\n    return;\n  }\n\n  const version = await resolveCookieVersion(\n    cookieCacheConfig.version,\n    session.session as Record<string, unknown>,\n    session.user as Record<string, unknown>\n  );\n\n  const sessionData = {\n    session: session.session,\n    updatedAt: Date.now(),\n    user: session.user,\n    version,\n  };\n\n  const baseAttributes = ctx.context.authCookies.sessionData.attributes;\n  const maxAge = dontRememberMe ? undefined : baseAttributes.maxAge;\n  const options: AthenaCookieOptions = {\n    ...baseAttributes,\n    maxAge,\n  };\n  const expiresAt = Date.now() + (options.maxAge || 60) * 1000;\n  const strategy = cookieCacheConfig.strategy || \"compact\";\n  const secret = getSecretOrThrow(ctx.context.secret);\n\n  let encoded: string;\n  if (strategy === \"jwt\") {\n    encoded = await signJwtHS256(\n      sessionData,\n      secret,\n      options.maxAge || DEFAULT_CACHE_MAX_AGE\n    );\n  } else if (strategy === \"jwe\") {\n    throw createError(\n      \"`jwe` strategy is not supported by the SDK cookie helper.\"\n    );\n  } else {\n    const signature = await signHmacBase64Url(\n      secret,\n      JSON.stringify({\n        ...sessionData,\n        expiresAt,\n      })\n    );\n    encoded = encodeStringToBase64Url(\n      JSON.stringify({\n        expiresAt,\n        session: sessionData,\n        signature,\n      })\n    );\n  }\n\n  if (encoded.length > 4093) {\n    const store = createSessionStore(\n      ctx.context.authCookies.sessionData.name,\n      options,\n      ctx\n    );\n    const cookies = store.chunk(encoded, options);\n    store.setCookies(cookies);\n  } else {\n    const store = createSessionStore(\n      ctx.context.authCookies.sessionData.name,\n      options,\n      ctx\n    );\n    if (store.hasChunks()) {\n      store.setCookies(store.clean());\n    }\n    ctx.setCookie(ctx.context.authCookies.sessionData.name, encoded, options);\n  }\n}\n\nexport async function setSessionCookie(\n  ctx: AthenaCookieContextRuntime,\n  session: AthenaSessionPair,\n  dontRememberMe?: boolean,\n  overrides?: Partial<AthenaCookieOptions>\n): Promise<void> {\n  let resolvedDontRememberMe = dontRememberMe ?? false;\n  if (\n    dontRememberMe === undefined &&\n    typeof ctx.getSignedCookie === \"function\" &&\n    ctx.context.secret\n  ) {\n    const existingFlag = await ctx.getSignedCookie(\n      ctx.context.authCookies.dontRememberToken.name,\n      ctx.context.secret\n    );\n    resolvedDontRememberMe = Boolean(existingFlag);\n  }\n  const token = getSessionTokenFromPair(session);\n  const options = ctx.context.authCookies.sessionToken.attributes;\n  const maxAge = resolvedDontRememberMe\n    ? undefined\n    : ctx.context.sessionConfig?.expiresIn;\n  await setCookieValue(ctx, ctx.context.authCookies.sessionToken.name, token, {\n    ...options,\n    maxAge,\n    ...overrides,\n  });\n\n  if (resolvedDontRememberMe) {\n    await setCookieValue(\n      ctx,\n      ctx.context.authCookies.dontRememberToken.name,\n      \"true\",\n      ctx.context.authCookies.dontRememberToken.attributes\n    );\n  }\n\n  await setCookieCache(ctx, session, resolvedDontRememberMe);\n  ctx.context.setNewSession?.(session);\n}\n\n/**\n * Expires a cookie by setting `maxAge: 0` while preserving attributes.\n */\nexport function expireCookie(\n  ctx: AthenaCookieContextRuntime,\n  cookie: AthenaAuthCookie\n): void {\n  ctx.setCookie(cookie.name, \"\", {\n    ...cookie.attributes,\n    maxAge: 0,\n  });\n}\n\nexport function deleteSessionCookie(\n  ctx: AthenaCookieContextRuntime,\n  skipDontRememberMe?: boolean\n): void {\n  expireCookie(ctx, ctx.context.authCookies.sessionToken);\n  expireCookie(ctx, ctx.context.authCookies.sessionData);\n\n  if (ctx.context.options?.account?.storeAccountCookie) {\n    expireCookie(ctx, ctx.context.authCookies.accountData);\n    const accountStore = createAccountStore(\n      ctx.context.authCookies.accountData.name,\n      ctx.context.authCookies.accountData.attributes,\n      ctx\n    );\n    accountStore.setCookies(accountStore.clean());\n  }\n\n  const sessionStore = createSessionStore(\n    ctx.context.authCookies.sessionData.name,\n    ctx.context.authCookies.sessionData.attributes,\n    ctx\n  );\n  sessionStore.setCookies(sessionStore.clean());\n\n  if (!skipDontRememberMe) {\n    expireCookie(ctx, ctx.context.authCookies.dontRememberToken);\n  }\n}\n\nexport const getSessionCookie = (\n  request: Request | Headers,\n  config?:\n    | {\n        cookiePrefix?: string;\n        cookieName?: string;\n        path?: string;\n      }\n    | undefined\n): string | null => {\n  const cookies = (\n    request instanceof Headers || !(\"headers\" in request)\n      ? request\n      : request.headers\n  ).get(\"cookie\");\n  if (!cookies) {\n    return null;\n  }\n\n  const { cookieName = \"session_token\", cookiePrefix = \"athena-auth\" } =\n    config || {};\n  const parsedCookie = parseCookies(cookies);\n  const getCookie = (name: string): string | undefined =>\n    parsedCookie.get(name) ||\n    parsedCookie.get(`${SECURE_COOKIE_PREFIX}${name}`);\n  const candidateCookieNames = Array.from(\n    new Set([\n      cookieName,\n      cookieName.replace(/_/g, \"-\"),\n      cookieName.replace(/-/g, \"_\"),\n    ])\n  ).filter(Boolean);\n  for (const candidateName of candidateCookieNames) {\n    const sessionToken =\n      getCookie(`${cookiePrefix}.${candidateName}`) ||\n      getCookie(`${cookiePrefix}-${candidateName}`);\n    if (sessionToken) {\n      return sessionToken;\n    }\n  }\n  return null;\n};\n\nexport const getCookieCache = async <\n  SessionShape extends Record<string, unknown> = Record<string, unknown>,\n  UserShape extends Record<string, unknown> = Record<string, unknown>,\n>(\n  request: Request | Headers,\n  config?: AthenaGetCookieCacheConfig<SessionShape, UserShape>\n): Promise<{\n  session: SessionShape;\n  user: UserShape;\n  updatedAt: number;\n  version?: string;\n} | null> => {\n  const headers =\n    request instanceof Headers || !(\"headers\" in request)\n      ? request\n      : request.headers;\n  const cookieHeader = headers.get(\"cookie\");\n  if (!cookieHeader) {\n    return null;\n  }\n\n  const parsedCookie = parseCookies(cookieHeader);\n  const cookieName = config?.cookieName || \"session_data\";\n  const requestedPrefix = config?.cookiePrefix || DEFAULT_COOKIE_PREFIX;\n  const strategy = config?.strategy || \"compact\";\n  const cookiePrefixes = resolveCookiePrefixes(requestedPrefix);\n  const isSecure = getIsSecureCookie(config);\n  const secret = getSecretOrThrow(config?.secret);\n\n  let sessionData: string | undefined;\n\n  for (const prefix of cookiePrefixes) {\n    const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure);\n    const cookieValue = parsedCookie.get(candidate);\n    if (cookieValue) {\n      sessionData = cookieValue;\n      break;\n    }\n  }\n\n  if (!sessionData) {\n    const reconstructedChunks: Array<{ index: number; value: string }> = [];\n    for (const prefix of cookiePrefixes) {\n      const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure);\n      for (const [name, value] of parsedCookie.entries()) {\n        if (!name.startsWith(`${candidate}.`)) {\n          continue;\n        }\n        const parts = name.split(\".\");\n        const indexStr = parts.at(-1);\n        const index = Number.parseInt(indexStr || \"0\", 10);\n        if (!Number.isNaN(index)) {\n          reconstructedChunks.push({ index, value });\n        }\n      }\n      if (reconstructedChunks.length > 0) {\n        break;\n      }\n    }\n\n    if (reconstructedChunks.length > 0) {\n      reconstructedChunks.sort((left, right) => left.index - right.index);\n      sessionData = reconstructedChunks.map((chunk) => chunk.value).join(\"\");\n    }\n  }\n\n  if (!sessionData) {\n    return null;\n  }\n\n  if (strategy === \"jwe\") {\n    throw createError(\n      \"`jwe` strategy is not supported by the SDK cookie helper. Use compact/jwt or pass cookie data through the auth server.\"\n    );\n  }\n\n  if (strategy === \"jwt\") {\n    const payload = await verifyJwtHS256<Record<string, unknown>>(\n      sessionData,\n      secret\n    );\n    if (!payload) {\n      return null;\n    }\n    const sessionRecord = asObject(payload.session);\n    const userRecord = asObject(payload.user);\n    const updatedAt = payload.updatedAt;\n    if (!(sessionRecord && userRecord) || typeof updatedAt !== \"number\") {\n      return null;\n    }\n\n    if (config?.version) {\n      const cookieVersion =\n        typeof payload.version === \"string\" ? payload.version : \"1\";\n      const expectedVersion =\n        typeof config.version === \"string\"\n          ? config.version\n          : await config.version(\n              sessionRecord as SessionShape,\n              userRecord as UserShape\n            );\n      if (cookieVersion !== expectedVersion) {\n        return null;\n      }\n    }\n\n    return {\n      session: sessionRecord as SessionShape,\n      updatedAt,\n      user: userRecord as UserShape,\n      version:\n        typeof payload.version === \"string\" ? payload.version : undefined,\n    };\n  }\n\n  const compactPayload = parseJsonSafely<{\n    session: {\n      session: SessionShape;\n      user: UserShape;\n      updatedAt: number;\n      version?: string;\n    };\n    expiresAt: number;\n    signature: string;\n  }>(decodeBase64UrlToString(sessionData));\n\n  if (!compactPayload) {\n    return null;\n  }\n\n  const expectedSignature = await signHmacBase64Url(\n    secret,\n    JSON.stringify({\n      ...compactPayload.session,\n      expiresAt: compactPayload.expiresAt,\n    })\n  );\n\n  if (expectedSignature !== compactPayload.signature) {\n    return null;\n  }\n\n  if (compactPayload.expiresAt <= Date.now()) {\n    return null;\n  }\n\n  const resolvedSession = compactPayload.session;\n  if (config?.version) {\n    const cookieVersion = resolvedSession.version || \"1\";\n    const expectedVersion =\n      typeof config.version === \"string\"\n        ? config.version\n        : await config.version(resolvedSession.session, resolvedSession.user);\n    if (cookieVersion !== expectedVersion) {\n      return null;\n    }\n  }\n\n  const sessionObject = asObject(resolvedSession.session);\n  const userObject = asObject(resolvedSession.user);\n  if (!(sessionObject && userObject)) {\n    return null;\n  }\n\n  return {\n    session: sessionObject as SessionShape,\n    updatedAt: resolvedSession.updatedAt,\n    user: userObject as UserShape,\n    version: resolvedSession.version,\n  };\n};\n\nexport {\n  hasAuthSessionCookie,\n  SESSION_COOKIE_PATTERNS,\n} from \"./session-cookie-detection.ts\";\nexport type {\n  AthenaAuthCookie,\n  AthenaAuthCookies,\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n  AthenaCookiesOptions,\n  AthenaGetCookieCacheConfig,\n};\nexport {\n  createSessionStore,\n  getAccountCookie,\n  getChunkedCookie,\n  HOST_COOKIE_PREFIX,\n  parseCookies,\n  parseSetCookieHeader,\n  SECURE_COOKIE_PREFIX,\n  setCookieToHeader,\n  setRequestCookie,\n  splitSetCookieHeader,\n  stripSecureCookiePrefix,\n  toCookieOptions,\n};\n","import {\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 undefined;\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 undefined;\n  }\n\n  try {\n    return new URL(baseURL).origin;\n  } catch {\n    // Invalid baseURL is treated as no origin.\n  }\n  return undefined;\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 type { AthenaAuthErrorDetails } from \"./types.ts\";\n\nexport type AthenaSessionErrorCode =\n\t| \"ATHENA_SESSION_UNAUTHENTICATED\"\n\t| \"ATHENA_SESSION_UPSTREAM\"\n\t| \"ATHENA_SESSION_CONFIGURATION\"\n\t| \"ATHENA_SESSION_PROTOCOL\"\n\t| \"ATHENA_SESSION_NO_ACCESSIBLE_ORGANIZATION\";\n\nexport interface AthenaSessionErrorContext {\n\tcause?: unknown;\n\tcode?: AthenaSessionErrorCode;\n\tdetails?: AthenaAuthErrorDetails | null;\n\tmessage?: string;\n\trequestId?: string;\n\tretryable?: boolean;\n\tstatus?: number;\n}\n\n/**\n * Base error for Next/server session helpers (`require*`, `OrNull` throws).\n */\nexport abstract class AthenaSessionError extends Error {\n\treadonly code: AthenaSessionErrorCode | string;\n\treadonly details?: AthenaAuthErrorDetails | null;\n\treadonly requestId?: string;\n\treadonly retryable: boolean;\n\treadonly status?: number;\n\n\tconstructor(message: string, context: AthenaSessionErrorContext = {}) {\n\t\tsuper(\n\t\t\tmessage,\n\t\t\tcontext.cause !== undefined ? { cause: context.cause } : undefined,\n\t\t);\n\t\tthis.name = new.target.name;\n\t\tthis.code = context.code ?? \"ATHENA_SESSION_UPSTREAM\";\n\t\tthis.status = context.status ?? context.details?.status;\n\t\tthis.requestId = context.requestId ?? context.details?.requestId;\n\t\tthis.details = context.details ?? null;\n\t\tthis.retryable = context.retryable ?? false;\n\t}\n}\n\nexport class AthenaUnauthenticatedError extends AthenaSessionError {\n\tconstructor(\n\t\tmessage = \"Not authenticated\",\n\t\tcontext: AthenaSessionErrorContext = {},\n\t) {\n\t\tsuper(message, {\n\t\t\t...context,\n\t\t\tcode: \"ATHENA_SESSION_UNAUTHENTICATED\",\n\t\t\tretryable: false,\n\t\t\tstatus: context.status ?? 401,\n\t\t});\n\t\tthis.name = \"AthenaUnauthenticatedError\";\n\t}\n}\n\nexport class AthenaAuthUpstreamError extends AthenaSessionError {\n\tconstructor(\n\t\tmessage = \"Auth upstream failure\",\n\t\tcontext: AthenaSessionErrorContext = {},\n\t) {\n\t\tconst status = context.status ?? context.details?.status;\n\t\tconst retryable =\n\t\t\tcontext.retryable ??\n\t\t\t(status === undefined || status === 0 || status >= 500 || status === 429);\n\t\tsuper(message, {\n\t\t\t...context,\n\t\t\tcode: context.code ?? \"ATHENA_SESSION_UPSTREAM\",\n\t\t\tretryable,\n\t\t\tstatus,\n\t\t});\n\t\tthis.name = \"AthenaAuthUpstreamError\";\n\t}\n}\n\nexport class AthenaAuthConfigurationError extends AthenaSessionError {\n\tconstructor(\n\t\tmessage = \"Session configuration error\",\n\t\tcontext: AthenaSessionErrorContext = {},\n\t) {\n\t\tsuper(message, {\n\t\t\t...context,\n\t\t\tcode: \"ATHENA_SESSION_CONFIGURATION\",\n\t\t\tretryable: false,\n\t\t});\n\t\tthis.name = \"AthenaAuthConfigurationError\";\n\t}\n}\n\nexport class AthenaAuthProtocolError extends AthenaSessionError {\n\tconstructor(\n\t\tmessage = \"Malformed session payload\",\n\t\tcontext: AthenaSessionErrorContext = {},\n\t) {\n\t\tsuper(message, {\n\t\t\t...context,\n\t\t\tcode: \"ATHENA_SESSION_PROTOCOL\",\n\t\t\tretryable: false,\n\t\t\tstatus: context.status ?? context.details?.status ?? 502,\n\t\t});\n\t\tthis.name = \"AthenaAuthProtocolError\";\n\t}\n}\n\nexport class AthenaSessionOrganizationError extends AthenaSessionError {\n\tconstructor(\n\t\tmessage = \"No accessible organization\",\n\t\tcontext: AthenaSessionErrorContext = {},\n\t) {\n\t\tsuper(message, {\n\t\t\t...context,\n\t\t\tcode: \"ATHENA_SESSION_NO_ACCESSIBLE_ORGANIZATION\",\n\t\t\tretryable: false,\n\t\t});\n\t\tthis.name = \"AthenaSessionOrganizationError\";\n\t}\n}\n\nexport type ToAthenaSessionErrorKind =\n\t| \"unauthenticated\"\n\t| \"upstream\"\n\t| \"configuration\"\n\t| \"protocol\"\n\t| \"no_organization\";\n\n/**\n * Single conversion path from auth error details / context into thrown session errors.\n */\nexport function toAthenaSessionError(\n\tkind: ToAthenaSessionErrorKind,\n\tcontext: AthenaSessionErrorContext = {},\n): AthenaSessionError {\n\tconst message =\n\t\tcontext.message ??\n\t\tcontext.details?.message ??\n\t\t(kind === \"unauthenticated\"\n\t\t\t? \"Not authenticated\"\n\t\t\t: kind === \"configuration\"\n\t\t\t\t? \"Session configuration error\"\n\t\t\t\t: kind === \"protocol\"\n\t\t\t\t\t? \"Malformed session payload\"\n\t\t\t\t\t: kind === \"no_organization\"\n\t\t\t\t\t\t? \"No accessible organization\"\n\t\t\t\t\t\t: \"Auth upstream failure\");\n\n\tswitch (kind) {\n\t\tcase \"unauthenticated\":\n\t\t\treturn new AthenaUnauthenticatedError(message, context);\n\t\tcase \"configuration\":\n\t\t\treturn new AthenaAuthConfigurationError(message, context);\n\t\tcase \"protocol\":\n\t\t\treturn new AthenaAuthProtocolError(message, context);\n\t\tcase \"no_organization\":\n\t\t\treturn new AthenaSessionOrganizationError(message, context);\n\t\tdefault:\n\t\t\treturn new AthenaAuthUpstreamError(message, context);\n\t}\n}\n\nconst ABORT_MESSAGE = /signal is aborted|the operation was aborted/i;\n\n/** True when the value is a browser/Node abort signal rejection. */\nexport function isAbortError(error: unknown): boolean {\n\tif (error == null) {\n\t\treturn false;\n\t}\n\tif (typeof error === \"string\") {\n\t\treturn ABORT_MESSAGE.test(error);\n\t}\n\tif (typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst name = (error as { name?: string }).name;\n\tif (name === \"AbortError\" || name === \"TimeoutError\") {\n\t\treturn true;\n\t}\n\tconst message = (error as { message?: string }).message ?? \"\";\n\treturn ABORT_MESSAGE.test(message);\n}\n","/**\n * Framework-independent auth session snapshot store.\n *\n * Owned by {@link createAthenaAuthSessionController}. Do not treat this store\n * as a second application API.\n *\n * Invariants:\n * - SESSION-INV-01 single-flight refresh\n * - SESSION-INV-02/03/04 last-authoritative wins (monotonic epoch)\n * - SESSION-INV-05 transport error does not clear a valid session\n * - SESSION-INV-06 definitive 401/invalid clears when completeRefresh clearSession\n * - SESSION-INV-07 ordered subscriber notifications\n */\n\nimport { isAbortError } from \"./session-errors.ts\";\n\nexport type AthenaAuthSessionStatus =\n  | \"unknown\"\n  | \"loading\"\n  | \"authenticated\"\n  | \"unauthenticated\"\n  | \"error\";\n\nexport interface AthenaAuthSessionSnapshot<TSession = unknown> {\n  epoch: number;\n  error: unknown | null;\n  session: TSession | null;\n  status: AthenaAuthSessionStatus;\n}\n\nexport type AthenaAuthSessionListener<TSession = unknown> = (\n  snapshot: AthenaAuthSessionSnapshot<TSession>\n) => void;\n\nexport type AthenaInitialAuthState<TSession = unknown> =\n  | { status: \"authenticated\"; session: TSession }\n  | { status: \"unauthenticated\"; session: null };\n\nexport interface AthenaAuthSessionStore<TSession = unknown> {\n  getSnapshot(): AthenaAuthSessionSnapshot<TSession>;\n  /**\n   * Cold-start seed only. No-ops unless status is `unknown`.\n   * Does not start a refresh or merge into a newer mutation.\n   */\n  hydrate(state: AthenaInitialAuthState<TSession>): boolean;\n  invalidate(reason?: \"signOut\" | \"revoke\" | \"manual\"): void;\n  setSession(\n    session: TSession | null,\n    status?: Exclude<AthenaAuthSessionStatus, \"loading\" | \"unknown\">\n  ): void;\n  setError(error: unknown): void;\n  beginRefresh(): { epoch: number; skipped: boolean };\n  completeRefresh(\n    epoch: number,\n    result:\n      | { ok: true; session: TSession | null }\n      | { ok: false; error: unknown; clearSession?: boolean }\n  ): void;\n  subscribe(listener: AthenaAuthSessionListener<TSession>): () => void;\n}\n\nexport function createAthenaAuthSessionStore<\n  TSession = unknown,\n>(): AthenaAuthSessionStore<TSession> {\n  let epoch = 0;\n  let inFlightEpoch: number | null = null;\n  let snapshot: AthenaAuthSessionSnapshot<TSession> = {\n    epoch: 0,\n    error: null,\n    session: null,\n    status: \"unknown\",\n  };\n  const listeners = new Set<AthenaAuthSessionListener<TSession>>();\n\n  const emit = () => {\n    for (const listener of [...listeners]) {\n      listener(snapshot);\n    }\n  };\n\n  const commit = (next: AthenaAuthSessionSnapshot<TSession>) => {\n    snapshot = next;\n    emit();\n  };\n\n  return {\n    getSnapshot() {\n      return snapshot;\n    },\n\n    hydrate(state) {\n      if (snapshot.status !== \"unknown\") {\n        return false;\n      }\n      if (state.status === \"authenticated\") {\n        if (state.session == null) {\n          return false;\n        }\n        epoch += 1;\n        commit({\n          epoch,\n          error: null,\n          session: state.session,\n          status: \"authenticated\",\n        });\n        return true;\n      }\n      epoch += 1;\n      commit({\n        epoch,\n        error: null,\n        session: null,\n        status: \"unauthenticated\",\n      });\n      return true;\n    },\n\n    invalidate(reason = \"manual\") {\n      epoch += 1;\n      inFlightEpoch = null;\n      commit({\n        epoch,\n        error: null,\n        session: null,\n        status: reason === \"signOut\" || reason === \"revoke\"\n          ? \"unauthenticated\"\n          : \"unauthenticated\",\n      });\n    },\n\n    setSession(session, status) {\n          // Authoritative mutation cancels in-flight refresh (INV-Q: setActive wins).\n          epoch += 1;\n          inFlightEpoch = null;\n          const nextStatus =\n            status ?? (session == null ? \"unauthenticated\" : \"authenticated\");\n          commit({\n            epoch,\n            error: null,\n            session,\n            status: nextStatus,\n          });\n        },\n\n        setError(error) {\n          if (isAbortError(error)) {\n            if (inFlightEpoch != null) {\n              inFlightEpoch = null;\n              epoch += 1;\n              commit({\n                epoch,\n                error: null,\n                session: snapshot.session,\n                status:\n                  snapshot.session == null ? \"unauthenticated\" : \"authenticated\",\n              });\n            }\n            return;\n          }\n          epoch += 1;\n          // Transport/infrastructure errors must not clear a still-valid session\n          // and must not cancel an in-flight refresh.\n          commit({\n            epoch,\n            error,\n            session: snapshot.session,\n            status: snapshot.session == null ? \"error\" : snapshot.status,\n          });\n        },\n\n        beginRefresh() {\n          if (inFlightEpoch != null) {\n            return { epoch: inFlightEpoch, skipped: true };\n          }\n          epoch += 1;\n          inFlightEpoch = epoch;\n          commit({\n            epoch,\n            error: null,\n            session: snapshot.session,\n            status: \"loading\",\n          });\n          return { epoch, skipped: false };\n        },\n\n        completeRefresh(requestEpoch, result) {\n          // Stale, superseded by mutation, or cancelled refresh — ignore.\n          if (inFlightEpoch !== requestEpoch) {\n            return;\n          }\n          inFlightEpoch = null;\n          epoch += 1;\n          if (result.ok) {\n            commit({\n              epoch,\n              error: null,\n              session: result.session,\n              status: result.session == null ? \"unauthenticated\" : \"authenticated\",\n            });\n            return;\n          }\n          if (isAbortError(result.error)) {\n            commit({\n              epoch,\n              error: null,\n              session: snapshot.session,\n              status:\n                snapshot.session == null ? \"unauthenticated\" : \"authenticated\",\n            });\n            return;\n          }\n          const clear = result.clearSession === true;\n          commit({\n            epoch,\n            error: result.error,\n            session: clear ? null : snapshot.session,\n            status: clear\n              ? \"unauthenticated\"\n              : snapshot.session == null\n                ? \"error\"\n                : snapshot.status,\n          });\n        },\n\n    subscribe(listener) {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n  };\n}\n","/**\n * Canonical Auth session owner.\n *\n * AthenaAuthClient → AthenaAuthSessionController → SessionStore\n *\n * Mutations (accept / invalidate / refresh completion) go through this\n * controller. React and Auth UI project snapshots only.\n */\n\nimport {\n  type AthenaAuthSessionSnapshot,\n  type AthenaAuthSessionStatus,\n  type AthenaAuthSessionStore,\n  type AthenaInitialAuthState,\n  createAthenaAuthSessionStore,\n} from \"./session-store.ts\";\n\nexport type { AthenaInitialAuthState } from \"./session-store.ts\";\n\nexport type AthenaAuthSessionInvalidateReason = \"signOut\" | \"revoke\" | \"manual\";\n\nexport interface AthenaAuthSessionController<TSession = unknown> {\n  accept(\n    session: TSession | null,\n    status?: Exclude<AthenaAuthSessionStatus, \"loading\" | \"unknown\">\n  ): void;\n  beginRefresh(): { epoch: number; skipped: boolean };\n  completeRefresh(\n    epoch: number,\n    result:\n      | { ok: true; session: TSession | null }\n      | { ok: false; error: unknown; clearSession?: boolean }\n  ): void;\n  get(): TSession | null;\n  getSnapshot(): AthenaAuthSessionSnapshot<TSession>;\n  hydrate(state: AthenaInitialAuthState<TSession>): boolean;\n  invalidate(reason?: AthenaAuthSessionInvalidateReason): void;\n  setError(error: unknown): void;\n  /**\n   * Advanced local write. Prefer {@link accept} after transport mutations.\n   * Kept so existing adapters that call `auth.session.setSession` keep working.\n   */\n  setSession(\n    session: TSession | null,\n    status?: Exclude<AthenaAuthSessionStatus, \"loading\" | \"unknown\">\n  ): void;\n  shouldInvalidateForRevokedTokens(tokens: readonly string[]): boolean;\n  subscribe(\n    listener: (snapshot: AthenaAuthSessionSnapshot<TSession>) => void\n  ): () => void;\n  /** Underlying store — tests / advanced adapters only. */\n  readonly store: AthenaAuthSessionStore<TSession>;\n}\n\nfunction readSessionToken(session: unknown): string | null {\n  if (!session || typeof session !== \"object\") {\n    return null;\n  }\n  const inner = (session as { session?: { id?: unknown; token?: unknown } })\n    .session;\n  if (!inner || typeof inner !== \"object\") {\n    return null;\n  }\n  if (typeof inner.token === \"string\" && inner.token.trim().length > 0) {\n    return inner.token;\n  }\n  if (typeof inner.id === \"string\" && inner.id.trim().length > 0) {\n    return inner.id;\n  }\n  return null;\n}\n\nexport function createAthenaAuthSessionController<\n  TSession = unknown,\n>(): AthenaAuthSessionController<TSession> {\n  const store = createAthenaAuthSessionStore<TSession>();\n\n  return {\n    store,\n    getSnapshot: () => store.getSnapshot(),\n    get: () => store.getSnapshot().session,\n    subscribe: (listener) => store.subscribe(listener),\n    accept(session, status) {\n      store.setSession(session, status);\n    },\n    hydrate(state) {\n      return store.hydrate(state);\n    },\n    setSession(session, status) {\n      store.setSession(session, status);\n    },\n    invalidate(reason) {\n      store.invalidate(reason);\n    },\n    setError(error) {\n      store.setError(error);\n    },\n    beginRefresh() {\n      return store.beginRefresh();\n    },\n    completeRefresh(epoch, result) {\n      store.completeRefresh(epoch, result);\n    },\n    shouldInvalidateForRevokedTokens(tokens) {\n      const current = readSessionToken(store.getSnapshot().session);\n      if (!current) {\n        return false;\n      }\n      return tokens.some((token) => token === current);\n    },\n  };\n}\n","import type {\n  AthenaAuthCallOptions,\n  AthenaAuthGetTokenRequest,\n  AthenaAuthResult,\n  AthenaAuthToken,\n} from \"./types.ts\";\n\nexport type { AthenaAuthGetTokenRequest, AthenaAuthToken };\n\nexport type AthenaAuthGetTokenInput = AthenaAuthGetTokenRequest;\n\nexport interface AthenaAuthTokenProviderOptions {\n  audience?: string | string[];\n  /** Refresh this many seconds before `exp`. Default 60. */\n  refreshSkewSeconds?: number;\n}\n\nexport interface AthenaAuthTokenProvider {\n  getToken: (\n    options?: AthenaAuthCallOptions\n  ) => Promise<AthenaAuthResult<AthenaAuthToken>>;\n  invalidate: () => void;\n}\n\nconst DEFAULT_REFRESH_SKEW_SECONDS = 60;\n\nexport function normalizeTokenAudiences(\n  audience: string | string[] | undefined\n): string[] {\n  if (audience == null) {\n    return [];\n  }\n  return (Array.isArray(audience) ? audience : [audience])\n    .map((value) => value.trim())\n    .filter((value) => value.length > 0);\n}\n\nexport function tokenNeedsRefresh(\n  token: AthenaAuthToken,\n  nowMs = Date.now(),\n  refreshSkewSeconds = DEFAULT_REFRESH_SKEW_SECONDS\n): boolean {\n  const expiresAt = Date.parse(token.expiresAt);\n  if (!Number.isFinite(expiresAt)) {\n    const exp = decodeJwtExpSeconds(token.token);\n    if (exp == null) {\n      return true;\n    }\n    return exp * 1000 <= nowMs + refreshSkewSeconds * 1000;\n  }\n  return expiresAt <= nowMs + refreshSkewSeconds * 1000;\n}\n\nexport function decodeJwtExpSeconds(token: string): number | null {\n  const parts = token.split(\".\");\n  if (parts.length < 2) {\n    return null;\n  }\n  try {\n    const payload = JSON.parse(\n      decodeJwtSegment(parts[1] ?? \"\")\n    ) as { exp?: unknown };\n    return typeof payload.exp === \"number\" ? payload.exp : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction decodeJwtSegment(segment: string): string {\n  const padded = segment.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const pad = padded.length % 4 === 0 ? \"\" : \"=\".repeat(4 - (padded.length % 4));\n  if (typeof atob === \"function\") {\n    return atob(`${padded}${pad}`);\n  }\n  return Buffer.from(`${padded}${pad}`, \"base64\").toString(\"utf8\");\n}\n\nexport function createAthenaAuthTokenProvider(\n  issue: (\n    input: AthenaAuthGetTokenInput,\n    options?: AthenaAuthCallOptions\n  ) => Promise<AthenaAuthResult<AthenaAuthToken>>,\n  providerOptions: AthenaAuthTokenProviderOptions = {}\n): AthenaAuthTokenProvider {\n  let cached: AthenaAuthToken | null = null;\n  let inflight: Promise<AthenaAuthResult<AthenaAuthToken>> | null = null;\n  const refreshSkewSeconds =\n    providerOptions.refreshSkewSeconds ?? DEFAULT_REFRESH_SKEW_SECONDS;\n\n  const getToken = async (\n    options?: AthenaAuthCallOptions\n  ): Promise<AthenaAuthResult<AthenaAuthToken>> => {\n    if (cached && !tokenNeedsRefresh(cached, Date.now(), refreshSkewSeconds)) {\n      return {\n        data: cached,\n        error: null,\n        ok: true,\n        raw: cached,\n        status: 200,\n      };\n    }\n    if (inflight) {\n      return inflight;\n    }\n    inflight = issue(\n      { audience: providerOptions.audience },\n      options\n    )\n      .then((result) => {\n        cached = result.ok ? result.data : null;\n        return result;\n      })\n      .finally(() => {\n        inflight = null;\n      });\n    return inflight;\n  };\n\n  return {\n    getToken,\n    invalidate() {\n      cached = null;\n      inflight = null;\n    },\n  };\n}","import type {\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorCode,\n  AthenaGatewayErrorDetails,\n  AthenaGatewayMethod,\n  AthenaGatewayResponse,\n} from \"./types.js\";\n\nexport interface AthenaGatewayErrorInput {\n  cause?: string;\n  code: AthenaGatewayErrorCode;\n  endpoint?: AthenaGatewayEndpointPath;\n  /** Original thrown value for Error.cause (distinct from string `cause` detail). */\n  errorCause?: unknown;\n  hint?: string;\n  message: string;\n  method?: AthenaGatewayMethod;\n  requestId?: string;\n  status?: number;\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n  readonly code: AthenaGatewayErrorCode;\n  readonly status: number;\n  readonly endpoint?: AthenaGatewayEndpointPath;\n  readonly method?: AthenaGatewayMethod;\n  readonly requestId?: string;\n  readonly hint?: string;\n  readonly causeDetail?: string;\n\n  constructor(input: AthenaGatewayErrorInput) {\n    super(\n      input.message,\n      input.errorCause === undefined ? undefined : { cause: input.errorCause }\n    );\n    this.name = \"AthenaGatewayError\";\n    this.code = input.code;\n    this.status = input.status ?? 0;\n    this.endpoint = input.endpoint;\n    this.method = input.method;\n    this.requestId = input.requestId;\n    this.hint = input.hint;\n    this.causeDetail = input.cause;\n  }\n\n  toDetails(): AthenaGatewayErrorDetails {\n    return {\n      cause: this.causeDetail,\n      code: this.code,\n      endpoint: this.endpoint,\n      hint: this.hint,\n      message: this.message,\n      method: this.method,\n      requestId: this.requestId,\n      status: this.status,\n    };\n  }\n\n  static fromResponse<T>(\n    response: AthenaGatewayResponse<T>,\n    fallback: Omit<AthenaGatewayErrorInput, \"code\" | \"message\" | \"status\">\n  ) {\n    const details = response.errorDetails;\n    if (details) {\n      return new AthenaGatewayError({\n        cause: details.cause,\n        code: details.code,\n        endpoint: details.endpoint ?? fallback.endpoint,\n        hint: details.hint,\n        message: details.message,\n        method: details.method ?? fallback.method,\n        requestId: details.requestId ?? fallback.requestId,\n        status: details.status,\n      });\n    }\n\n    return new AthenaGatewayError({\n      code: \"HTTP_ERROR\",\n      endpoint: fallback.endpoint,\n      message: response.error ?? \"Gateway request failed\",\n      method: fallback.method,\n      requestId: fallback.requestId,\n      status: response.status,\n    });\n  }\n}\n\nexport function isAthenaGatewayError(\n  error: unknown\n): error is AthenaGatewayError {\n  return error instanceof AthenaGatewayError;\n}\n","export function parseBooleanFlag(\n  rawValue: string | undefined,\n  fallback: boolean\n): boolean {\n  if (!rawValue) {\n    return fallback;\n  }\n\n  const normalized = rawValue.trim().toLowerCase();\n\n  if (\n    normalized === \"1\" ||\n    normalized === \"true\" ||\n    normalized === \"yes\" ||\n    normalized === \"on\"\n  ) {\n    return true;\n  }\n\n  if (\n    normalized === \"0\" ||\n    normalized === \"false\" ||\n    normalized === \"no\" ||\n    normalized === \"off\"\n  ) {\n    return false;\n  }\n\n  return fallback;\n}\n","import type { AthenaResult } from \"./client-result.ts\";\nimport { AthenaGatewayError, isAthenaGatewayError } from \"./gateway/errors.ts\";\nimport type {\n\tAthenaGatewayErrorCode,\n\tAthenaGatewayErrorDetails,\n} from \"./gateway/types.ts\";\nimport { parseBooleanFlag as parseBooleanFlagUtil } from \"./utils/parse-boolean-flag.ts\";\n\nexport type AthenaErrorKind =\n\t| \"unique_violation\"\n\t| \"not_found\"\n\t| \"validation\"\n\t| \"auth\"\n\t| \"rate_limit\"\n\t| \"transient\"\n\t| \"unknown\";\n\nexport const AthenaErrorKind = {\n\tAuth: \"auth\",\n\tNotFound: \"not_found\",\n\tRateLimit: \"rate_limit\",\n\tTransient: \"transient\",\n\tUniqueViolation: \"unique_violation\",\n\tUnknown: \"unknown\",\n\tValidation: \"validation\",\n} as const;\n\nexport type AthenaErrorCode =\n\t| \"UNIQUE_VIOLATION\"\n\t| \"NOT_FOUND\"\n\t| \"VALIDATION_FAILED\"\n\t| \"AUTH_UNAUTHORIZED\"\n\t| \"AUTH_FORBIDDEN\"\n\t| \"RATE_LIMITED\"\n\t| \"NETWORK_UNAVAILABLE\"\n\t| \"TRANSIENT_FAILURE\"\n\t| \"HTTP_FAILURE\"\n\t| \"UNKNOWN\";\n\nexport const AthenaErrorCode = {\n\tAuthForbidden: \"AUTH_FORBIDDEN\",\n\tAuthUnauthorized: \"AUTH_UNAUTHORIZED\",\n\tHttpFailure: \"HTTP_FAILURE\",\n\tNetworkUnavailable: \"NETWORK_UNAVAILABLE\",\n\tNotFound: \"NOT_FOUND\",\n\tRateLimited: \"RATE_LIMITED\",\n\tTransientFailure: \"TRANSIENT_FAILURE\",\n\tUniqueViolation: \"UNIQUE_VIOLATION\",\n\tUnknown: \"UNKNOWN\",\n\tValidationFailed: \"VALIDATION_FAILED\",\n} as const satisfies Record<string, AthenaErrorCode>;\n\nexport type AthenaErrorCategory =\n\t| \"transport\"\n\t| \"client\"\n\t| \"server\"\n\t| \"database\"\n\t| \"unknown\";\n\nexport const AthenaErrorCategory = {\n\tClient: \"client\",\n\tDatabase: \"database\",\n\tServer: \"server\",\n\tTransport: \"transport\",\n\tUnknown: \"unknown\",\n} as const satisfies Record<string, AthenaErrorCategory>;\n\nexport interface AthenaOperationContext {\n\tidentity?: string | Record<string, unknown>;\n\toperation?: string;\n\ttable?: string;\n}\n\nexport interface NormalizedAthenaError {\n\tcategory: AthenaErrorCategory;\n\tcode: AthenaErrorCode;\n\tconstraint?: string;\n\tkind: AthenaErrorKind;\n\tmessage: string;\n\toperation?: string;\n\traw: unknown;\n\tretryable: boolean;\n\tstatus?: number;\n\ttable?: string;\n}\n\nexport interface AthenaErrorInput {\n\tcategory: AthenaErrorCategory;\n\tcode: AthenaErrorCode;\n\tcontext?: AthenaOperationContext;\n\tkind: AthenaErrorKind;\n\tmessage: string;\n\traw?: unknown;\n\trequestId?: string;\n\tretryable?: boolean;\n\tstatus?: number;\n}\n\nexport interface UnwrapOptions {\n\tallowNull?: boolean;\n\tcontext?: AthenaOperationContext;\n}\n\nexport interface UnwrapOneOptions extends UnwrapOptions {\n\trequireExactlyOne?: boolean;\n}\n\nexport interface IntCoercionOptions {\n\tmax?: number;\n\tmin?: number;\n\tstrictBigInt?: boolean;\n}\n\nexport type RetryBackoffStrategy =\n\t| \"linear\"\n\t| \"exponential\"\n\t| ((attempt: number, error: unknown) => number);\n\nexport interface RetryConfig {\n\tbackoff?: RetryBackoffStrategy;\n\tbaseDelayMs?: number;\n\tjitter?: boolean | number;\n\tmaxDelayMs?: number;\n\tretries: number;\n\tshouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>;\n}\n\nexport interface RequireAffectedOptions {\n\tmin?: number;\n}\n\n/**\n * Parses a string-based boolean flag with a deterministic fallback.\n *\n * Accepts common truthy/falsey token variants used by env vars and CLI flags.\n */\nexport function parseBooleanFlag(\n\trawValue: string | undefined,\n\tfallback: boolean,\n): boolean {\n\treturn parseBooleanFlagUtil(rawValue, fallback);\n}\n\nexport class AthenaError extends Error {\n\treadonly code: AthenaErrorCode;\n\treadonly kind: AthenaErrorKind;\n\treadonly category: AthenaErrorCategory;\n\treadonly status?: number;\n\treadonly retryable: boolean;\n\treadonly requestId?: string;\n\treadonly context?: AthenaOperationContext;\n\treadonly raw?: unknown;\n\n\tconstructor(input: AthenaErrorInput) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaError\";\n\t\tthis.code = input.code;\n\t\tthis.kind = input.kind;\n\t\tthis.category = input.category;\n\t\tthis.status = input.status;\n\t\tthis.retryable = input.retryable ?? false;\n\t\tthis.requestId = input.requestId;\n\t\tthis.context = input.context;\n\t\tthis.raw = input.raw;\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n\tfor (const value of values) {\n\t\tif (typeof value === \"string\" && value.trim().length > 0) {\n\t\t\treturn value.trim();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction messageFromUnknownError(error: unknown): string | undefined {\n\tif (typeof error === \"string\" && error.trim().length > 0) {\n\t\treturn error.trim();\n\t}\n\tif (error instanceof Error && error.message.trim().length > 0) {\n\t\treturn error.message.trim();\n\t}\n\tif (!isRecord(error)) {\n\t\treturn undefined;\n\t}\n\treturn firstNonEmptyString(error.message, error.error, error.details);\n}\n\nfunction gatewayCodeFromUnknownError(\n\terror: unknown,\n): AthenaGatewayErrorCode | undefined {\n\tif (!isRecord(error) || typeof error.gatewayCode !== \"string\") {\n\t\treturn undefined;\n\t}\n\treturn error.gatewayCode as AthenaGatewayErrorCode;\n}\n\nfunction isAthenaResultErrorLike(value: unknown): value is {\n\tmessage: string;\n\tathenaCode?: AthenaErrorCode;\n\tkind?: AthenaErrorKind;\n\tcategory?: AthenaErrorCategory;\n\tretryable?: boolean;\n\tstatus?: number;\n\tconstraint?: string;\n\ttable?: string;\n\toperation?: string;\n\traw?: unknown;\n} {\n\treturn (\n\t\tisRecord(value) &&\n\t\ttypeof value.message === \"string\" &&\n\t\t(value.athenaCode === undefined || isAthenaErrorCode(value.athenaCode)) &&\n\t\t(value.kind === undefined || isAthenaErrorKind(value.kind)) &&\n\t\t(value.category === undefined || isAthenaErrorCategory(value.category)) &&\n\t\t(value.retryable === undefined || typeof value.retryable === \"boolean\") &&\n\t\t(value.status === undefined || typeof value.status === \"number\")\n\t);\n}\n\nfunction isAthenaErrorKind(value: unknown): value is AthenaErrorKind {\n\treturn (\n\t\tvalue === \"unique_violation\" ||\n\t\tvalue === \"not_found\" ||\n\t\tvalue === \"validation\" ||\n\t\tvalue === \"auth\" ||\n\t\tvalue === \"rate_limit\" ||\n\t\tvalue === \"transient\" ||\n\t\tvalue === \"unknown\"\n\t);\n}\n\nfunction isAthenaErrorCode(value: unknown): value is AthenaErrorCode {\n\treturn (\n\t\tvalue === \"UNIQUE_VIOLATION\" ||\n\t\tvalue === \"NOT_FOUND\" ||\n\t\tvalue === \"VALIDATION_FAILED\" ||\n\t\tvalue === \"AUTH_UNAUTHORIZED\" ||\n\t\tvalue === \"AUTH_FORBIDDEN\" ||\n\t\tvalue === \"RATE_LIMITED\" ||\n\t\tvalue === \"NETWORK_UNAVAILABLE\" ||\n\t\tvalue === \"TRANSIENT_FAILURE\" ||\n\t\tvalue === \"HTTP_FAILURE\" ||\n\t\tvalue === \"UNKNOWN\"\n\t);\n}\n\nfunction isAthenaErrorCategory(value: unknown): value is AthenaErrorCategory {\n\treturn (\n\t\tvalue === \"transport\" ||\n\t\tvalue === \"client\" ||\n\t\tvalue === \"server\" ||\n\t\tvalue === \"database\" ||\n\t\tvalue === \"unknown\"\n\t);\n}\n\nfunction isNormalizedAthenaError(\n\tvalue: unknown,\n): value is NormalizedAthenaError {\n\treturn (\n\t\tisRecord(value) &&\n\t\tisAthenaErrorKind(value.kind) &&\n\t\tisAthenaErrorCode(value.code) &&\n\t\tisAthenaErrorCategory(value.category) &&\n\t\ttypeof value.retryable === \"boolean\" &&\n\t\ttypeof value.message === \"string\" &&\n\t\t\"raw\" in value\n\t);\n}\n\nfunction withContextOverrides(\n\tnormalized: NormalizedAthenaError,\n\tcontext?: AthenaOperationContext,\n): NormalizedAthenaError {\n\tif (!(context?.table || context?.operation)) {\n\t\treturn normalized;\n\t}\n\n\treturn {\n\t\t...normalized,\n\t\toperation: context.operation ?? normalized.operation,\n\t\ttable: context.table ?? normalized.table,\n\t};\n}\n\nfunction resolveAttachedNormalizedError(\n\tresultOrError: unknown,\n): NormalizedAthenaError | undefined {\n\tif (!isRecord(resultOrError)) {\n\t\treturn undefined;\n\t}\n\tif (!(\"__athenaNormalizedError\" in resultOrError)) {\n\t\treturn undefined;\n\t}\n\tconst candidate = resultOrError.__athenaNormalizedError;\n\treturn isNormalizedAthenaError(candidate) ? candidate : undefined;\n}\n\nfunction safeStringify(value: unknown): string {\n\ttry {\n\t\tconst serialized = JSON.stringify(value);\n\t\treturn serialized ?? String(value);\n\t} catch {\n\t\treturn \"[unserializable]\";\n\t}\n}\n\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\n\tif (!context?.identity) {\n\t\treturn undefined;\n\t}\n\tconst identity =\n\t\ttypeof context.identity === \"string\"\n\t\t\t? context.identity\n\t\t\t: safeStringify(context.identity);\n\treturn `Identity: ${identity}`;\n}\n\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\n\treturn (\n\t\tisRecord(value) &&\n\t\t\"status\" in value &&\n\t\t\"error\" in value &&\n\t\t\"data\" in value &&\n\t\ttypeof value.status === \"number\"\n\t);\n}\n\nfunction operationFromDetails(\n\tdetails?: AthenaGatewayErrorDetails | null,\n): string | undefined {\n\tif (!details?.endpoint) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\tdetails.endpoint === \"/gateway/fetch\" ||\n\t\tdetails.endpoint === \"/gateway/query\"\n\t) {\n\t\treturn \"select\";\n\t}\n\tif (details.endpoint === \"/gateway/insert\") {\n\t\treturn \"insert\";\n\t}\n\tif (details.endpoint === \"/gateway/update\") {\n\t\treturn \"update\";\n\t}\n\tif (details.endpoint === \"/gateway/delete\") {\n\t\treturn \"delete\";\n\t}\n\tif (\n\t\tdetails.endpoint === \"/gateway/rpc\" ||\n\t\tdetails.endpoint.startsWith(\"/rpc/\")\n\t) {\n\t\treturn \"rpc\";\n\t}\n\treturn undefined;\n}\n\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\n\tfor (const pattern of patterns) {\n\t\tconst match = pattern.exec(input);\n\t\tif (match?.[1]) {\n\t\t\treturn match[1];\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction extractConstraint(message: string): string | undefined {\n\treturn matchRegex(message, [\n\t\t/unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n\t\t/constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n\t]);\n}\n\nfunction extractTable(message: string): string | undefined {\n\treturn matchRegex(message, [\n\t\t/(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n\t\t/on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\n\t]);\n}\n\nfunction classifyKind(\n\tstatus: number | undefined,\n\tcode: AthenaGatewayErrorCode | undefined,\n\tmessage: string,\n): AthenaErrorKind {\n\tconst lower = message.toLowerCase();\n\tconst hasUniquePattern =\n\t\tlower.includes(\"unique constraint\") ||\n\t\tlower.includes(\"duplicate key\") ||\n\t\tlower.includes(\"already exists\") ||\n\t\tlower.includes(\"duplicate\");\n\tconst hasNotFoundPattern =\n\t\tlower.includes(\"not found\") || lower.includes(\"no rows\");\n\tconst hasValidationPattern =\n\t\tlower.includes(\"validation\") ||\n\t\tlower.includes(\"invalid\") ||\n\t\tlower.includes(\"malformed\");\n\tconst hasAuthPattern =\n\t\tlower.includes(\"unauthorized\") ||\n\t\tlower.includes(\"forbidden\") ||\n\t\tlower.includes(\"auth\");\n\tconst hasRateLimitPattern =\n\t\tlower.includes(\"rate limit\") || lower.includes(\"too many requests\");\n\tconst hasTransientPattern =\n\t\tlower.includes(\"timeout\") ||\n\t\tlower.includes(\"temporar\") ||\n\t\tlower.includes(\"connection reset\") ||\n\t\tlower.includes(\"socket\") ||\n\t\tlower.includes(\"deadlock\");\n\n\tif (status === 409 || hasUniquePattern) {\n\t\treturn \"unique_violation\";\n\t}\n\tif (status === 404 || hasNotFoundPattern) {\n\t\treturn \"not_found\";\n\t}\n\tif (status === 401 || status === 403 || hasAuthPattern) {\n\t\treturn \"auth\";\n\t}\n\tif (status === 429 || hasRateLimitPattern) {\n\t\treturn \"rate_limit\";\n\t}\n\tif (code === \"INVALID_URL\") {\n\t\treturn \"validation\";\n\t}\n\tif (status === 400 || status === 422 || hasValidationPattern) {\n\t\treturn \"validation\";\n\t}\n\tif (\n\t\tcode === \"NETWORK_ERROR\" ||\n\t\tstatus === 0 ||\n\t\t(status !== undefined && status >= 500) ||\n\t\thasTransientPattern\n\t) {\n\t\treturn \"transient\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction toAthenaErrorCode(\n\tkind: AthenaErrorKind,\n\tstatus: number | undefined,\n\tgatewayCode?: AthenaGatewayErrorCode,\n): AthenaErrorCode {\n\tif (gatewayCode === \"INVALID_URL\") {\n\t\treturn AthenaErrorCode.ValidationFailed;\n\t}\n\n\tif (\n\t\tgatewayCode === \"NETWORK_ERROR\" ||\n\t\t(kind === \"transient\" && status === 0)\n\t) {\n\t\treturn AthenaErrorCode.NetworkUnavailable;\n\t}\n\n\tswitch (kind) {\n\t\tcase \"unique_violation\":\n\t\t\treturn AthenaErrorCode.UniqueViolation;\n\t\tcase \"not_found\":\n\t\t\treturn AthenaErrorCode.NotFound;\n\t\tcase \"validation\":\n\t\t\treturn AthenaErrorCode.ValidationFailed;\n\t\tcase \"rate_limit\":\n\t\t\treturn AthenaErrorCode.RateLimited;\n\t\tcase \"auth\":\n\t\t\tif (status === 403) {\n\t\t\t\treturn AthenaErrorCode.AuthForbidden;\n\t\t\t}\n\t\t\treturn AthenaErrorCode.AuthUnauthorized;\n\t\tcase \"transient\":\n\t\t\treturn status !== undefined && status >= 500\n\t\t\t\t? AthenaErrorCode.HttpFailure\n\t\t\t\t: AthenaErrorCode.TransientFailure;\n\t\tdefault:\n\t\t\treturn status !== undefined && status >= 400\n\t\t\t\t? AthenaErrorCode.HttpFailure\n\t\t\t\t: AthenaErrorCode.Unknown;\n\t}\n}\n\nfunction toAthenaErrorCategory(\n\tkind: AthenaErrorKind,\n\tstatus: number | undefined,\n): AthenaErrorCategory {\n\tif (kind === \"transient\" && (status === 0 || status === undefined)) {\n\t\treturn AthenaErrorCategory.Transport;\n\t}\n\tif (kind === \"unique_violation\") {\n\t\treturn AthenaErrorCategory.Database;\n\t}\n\tif (kind === \"validation\" || kind === \"auth\" || kind === \"not_found\") {\n\t\treturn AthenaErrorCategory.Client;\n\t}\n\tif (kind === \"rate_limit\" || kind === \"transient\") {\n\t\treturn AthenaErrorCategory.Server;\n\t}\n\treturn AthenaErrorCategory.Unknown;\n}\n\nfunction isRetryable(\n\tkind: AthenaErrorKind,\n\tstatus: number | undefined,\n): boolean {\n\tif (kind === \"rate_limit\" || kind === \"transient\") {\n\t\treturn true;\n\t}\n\treturn status !== undefined && status >= 500;\n}\n\nfunction toGatewayCode(\n\tkind: AthenaErrorKind,\n\tstatus?: number,\n): AthenaGatewayErrorCode {\n\tif (kind === \"transient\" && (status === 0 || status === undefined)) {\n\t\treturn \"NETWORK_ERROR\";\n\t}\n\tif (kind === \"validation\") {\n\t\treturn \"INVALID_JSON\";\n\t}\n\tif (status !== undefined && status >= 400) {\n\t\treturn \"HTTP_ERROR\";\n\t}\n\treturn \"UNKNOWN_ERROR\";\n}\n\nfunction toAthenaGatewayError(\n\tsource: unknown,\n\tfallbackMessage: string,\n\tcontext?: AthenaOperationContext,\n): AthenaGatewayError {\n\tif (isAthenaGatewayError(source)) {\n\t\treturn source;\n\t}\n\n\tif (isAthenaResultLike(source) && source.errorDetails) {\n\t\tconst message =\n\t\t\tmessageFromUnknownError(source.error) ??\n\t\t\tsource.errorDetails.message ??\n\t\t\tfallbackMessage;\n\t\treturn new AthenaGatewayError({\n\t\t\tcause:\n\t\t\t\t(isRecord(source.error)\n\t\t\t\t\t? firstNonEmptyString(source.error.cause)\n\t\t\t\t\t: undefined) ?? source.errorDetails.cause,\n\t\t\tcode: source.errorDetails.code,\n\t\t\tendpoint: source.errorDetails.endpoint,\n\t\t\thint:\n\t\t\t\t(isRecord(source.error)\n\t\t\t\t\t? firstNonEmptyString(source.error.hint)\n\t\t\t\t\t: undefined) ?? source.errorDetails.hint,\n\t\t\tmessage,\n\t\t\tmethod: source.errorDetails.method,\n\t\t\trequestId: source.errorDetails.requestId,\n\t\t\tstatus: source.status,\n\t\t});\n\t}\n\n\tconst normalized = normalizeAthenaError(source, context);\n\tconst message =\n\t\tisAthenaResultLike(source) &&\n\t\tsource.error === null &&\n\t\tsource.errorDetails === null\n\t\t\t? fallbackMessage\n\t\t\t: normalized.message || fallbackMessage;\n\n\treturn new AthenaGatewayError({\n\t\tcause:\n\t\t\ttypeof normalized.raw === \"string\"\n\t\t\t\t? normalized.raw\n\t\t\t\t: safeStringify(normalized.raw),\n\t\tcode: toGatewayCode(normalized.kind, normalized.status),\n\t\thint:\n\t\t\tnormalized.constraint === null\n\t\t\t\t? contextHint(context)\n\t\t\t\t: `Constraint: ${normalized.constraint}`,\n\t\tmessage,\n\t\tstatus: normalized.status ?? 0,\n\t});\n}\n\n/**\n * Returns `true` when a result is successful (`2xx` status and no `error`).\n */\nexport function isOk<T>(result: AthenaResult<T>): boolean {\n\treturn result.error === null && result.status >= 200 && result.status < 300;\n}\n\n/**\n * @deprecated Prefer `result.error` on failed `AthenaResult` values and the\n * structured fields already attached to thrown SDK errors. This helper is\n * retained for compatibility with mixed unknown inputs.\n *\n * Normalizes any Athena failure shape into a stable, typed error envelope.\n *\n * Accepts `AthenaResult`, `AthenaGatewayError`, native `Error`, or unknown values.\n * Optional `context` can override inferred table/operation metadata for clearer diagnostics.\n */\nexport function normalizeAthenaError(\n\tresultOrError: unknown,\n\tcontext?: AthenaOperationContext,\n): NormalizedAthenaError {\n\tconst attached = resolveAttachedNormalizedError(resultOrError);\n\tif (attached) {\n\t\treturn withContextOverrides(attached, context);\n\t}\n\n\tif (isAthenaResultLike(resultOrError)) {\n\t\tif (isAthenaResultErrorLike(resultOrError.error)) {\n\t\t\treturn {\n\t\t\t\tcategory:\n\t\t\t\t\tresultOrError.error.category ??\n\t\t\t\t\ttoAthenaErrorCategory(\n\t\t\t\t\t\tresultOrError.error.kind ??\n\t\t\t\t\t\t\tclassifyKind(\n\t\t\t\t\t\t\t\tresultOrError.status,\n\t\t\t\t\t\t\t\tgatewayCodeFromUnknownError(resultOrError.error),\n\t\t\t\t\t\t\t\tresultOrError.error.message,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tresultOrError.error.status ?? resultOrError.status,\n\t\t\t\t\t),\n\t\t\t\tcode:\n\t\t\t\t\tresultOrError.error.athenaCode ??\n\t\t\t\t\ttoAthenaErrorCode(\n\t\t\t\t\t\tresultOrError.error.kind ??\n\t\t\t\t\t\t\tclassifyKind(\n\t\t\t\t\t\t\t\tresultOrError.status,\n\t\t\t\t\t\t\t\tgatewayCodeFromUnknownError(resultOrError.error),\n\t\t\t\t\t\t\t\tresultOrError.error.message,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tresultOrError.error.status ?? resultOrError.status,\n\t\t\t\t\t\tgatewayCodeFromUnknownError(resultOrError.error),\n\t\t\t\t\t),\n\t\t\t\tconstraint: resultOrError.error.constraint,\n\t\t\t\tkind:\n\t\t\t\t\tresultOrError.error.kind ??\n\t\t\t\t\tclassifyKind(\n\t\t\t\t\t\tresultOrError.status,\n\t\t\t\t\t\tgatewayCodeFromUnknownError(resultOrError.error),\n\t\t\t\t\t\tresultOrError.error.message,\n\t\t\t\t\t),\n\t\t\t\tmessage: resultOrError.error.message,\n\t\t\t\toperation: context?.operation ?? resultOrError.error.operation,\n\t\t\t\traw: resultOrError.error.raw ?? resultOrError.raw,\n\t\t\t\tretryable:\n\t\t\t\t\tresultOrError.error.retryable ??\n\t\t\t\t\tisRetryable(\n\t\t\t\t\t\tresultOrError.error.kind ??\n\t\t\t\t\t\t\tclassifyKind(\n\t\t\t\t\t\t\t\tresultOrError.status,\n\t\t\t\t\t\t\t\tgatewayCodeFromUnknownError(resultOrError.error),\n\t\t\t\t\t\t\t\tresultOrError.error.message,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tresultOrError.error.status ?? resultOrError.status,\n\t\t\t\t\t),\n\t\t\t\tstatus: resultOrError.error.status ?? resultOrError.status,\n\t\t\t\ttable: context?.table ?? resultOrError.error.table,\n\t\t\t};\n\t\t}\n\n\t\tconst details = resultOrError.errorDetails;\n\t\tconst message =\n\t\t\tmessageFromUnknownError(resultOrError.error) ??\n\t\t\tdetails?.message ??\n\t\t\t`Athena ${context?.operation ?? operationFromDetails(details) ?? \"request\"} failed`;\n\t\tconst operation = context?.operation ?? operationFromDetails(details);\n\t\tconst table = context?.table ?? extractTable(message);\n\t\tconst constraint = extractConstraint(message);\n\t\tconst gatewayCode =\n\t\t\tdetails?.code ?? gatewayCodeFromUnknownError(resultOrError.error);\n\t\tconst kind = classifyKind(resultOrError.status, gatewayCode, message);\n\t\tconst code = toAthenaErrorCode(kind, resultOrError.status, gatewayCode);\n\t\tconst category = toAthenaErrorCategory(kind, resultOrError.status);\n\t\treturn {\n\t\t\tcategory,\n\t\t\tcode,\n\t\t\tconstraint,\n\t\t\tkind,\n\t\t\tmessage,\n\t\t\toperation,\n\t\t\traw: resultOrError.raw,\n\t\t\tretryable: isRetryable(kind, resultOrError.status),\n\t\t\tstatus: resultOrError.status,\n\t\t\ttable,\n\t\t};\n\t}\n\n\tif (isAthenaGatewayError(resultOrError)) {\n\t\tconst details = resultOrError.toDetails();\n\t\tconst operation = context?.operation ?? operationFromDetails(details);\n\t\tconst table = context?.table ?? extractTable(resultOrError.message);\n\t\tconst constraint = extractConstraint(resultOrError.message);\n\t\tconst kind = classifyKind(\n\t\t\tresultOrError.status,\n\t\t\tresultOrError.code,\n\t\t\tresultOrError.message,\n\t\t);\n\t\tconst code = toAthenaErrorCode(\n\t\t\tkind,\n\t\t\tresultOrError.status,\n\t\t\tresultOrError.code,\n\t\t);\n\t\tconst category = toAthenaErrorCategory(kind, resultOrError.status);\n\t\treturn {\n\t\t\tcategory,\n\t\t\tcode,\n\t\t\tconstraint,\n\t\t\tkind,\n\t\t\tmessage: resultOrError.message,\n\t\t\toperation,\n\t\t\traw: resultOrError,\n\t\t\tretryable: isRetryable(kind, resultOrError.status),\n\t\t\tstatus: resultOrError.status,\n\t\t\ttable,\n\t\t};\n\t}\n\n\tif (resultOrError instanceof Error) {\n\t\tconst maybeStatus =\n\t\t\tisRecord(resultOrError) && typeof resultOrError.status === \"number\"\n\t\t\t\t? resultOrError.status\n\t\t\t\t: undefined;\n\t\tconst kind = classifyKind(maybeStatus, undefined, resultOrError.message);\n\t\treturn {\n\t\t\tcategory: toAthenaErrorCategory(kind, maybeStatus),\n\t\t\tcode: toAthenaErrorCode(kind, maybeStatus),\n\t\t\tconstraint: extractConstraint(resultOrError.message),\n\t\t\tkind,\n\t\t\tmessage: resultOrError.message,\n\t\t\toperation: context?.operation,\n\t\t\traw: resultOrError,\n\t\t\tretryable: isRetryable(kind, maybeStatus),\n\t\t\tstatus: maybeStatus,\n\t\t\ttable: context?.table ?? extractTable(resultOrError.message),\n\t\t};\n\t}\n\n\tconst message =\n\t\ttypeof resultOrError === \"string\" ? resultOrError : \"Unknown Athena error\";\n\tconst kind = classifyKind(undefined, undefined, message);\n\treturn {\n\t\tcategory: toAthenaErrorCategory(kind, undefined),\n\t\tcode: toAthenaErrorCode(kind, undefined),\n\t\tconstraint: extractConstraint(message),\n\t\tkind,\n\t\tmessage,\n\t\toperation: context?.operation,\n\t\traw: resultOrError,\n\t\tretryable: isRetryable(kind, undefined),\n\t\tstatus: undefined,\n\t\ttable: context?.table ?? extractTable(message),\n\t};\n}\n\n/**\n * Unwraps a successful result into a row array.\n *\n * - Throws on failed results.\n * - Converts `null` data to an empty array.\n * - Wraps scalar data in a single-element array.\n */\nexport function unwrapRows<T>(\n\tresult: AthenaResult<T[] | T | null>,\n\toptions?: UnwrapOptions,\n): T[] {\n\tif (!isOk(result)) {\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t\"Athena request failed\",\n\t\t\toptions?.context,\n\t\t);\n\t}\n\tif (result.data === null) {\n\t\treturn [];\n\t}\n\treturn Array.isArray(result.data) ? result.data : [result.data];\n}\n\n/**\n * Unwraps successful result data from `AthenaResult<T | null>`.\n *\n * By default, `null` data throws. Pass `{ allowNull: true }` to permit nullable payloads.\n */\nexport function unwrap<T>(\n\tresult: AthenaResult<T | null>,\n\toptions: UnwrapOptions & { allowNull: true },\n): T | null;\nexport function unwrap<T>(\n\tresult: AthenaResult<T | null>,\n\toptions?: UnwrapOptions,\n): T;\nexport function unwrap<T>(\n\tresult: AthenaResult<T | null>,\n\toptions?: UnwrapOptions,\n): T | null {\n\tif (!isOk(result)) {\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t\"Athena request failed\",\n\t\t\toptions?.context,\n\t\t);\n\t}\n\tif (result.data === null && !options?.allowNull) {\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t\"Expected data but received null\",\n\t\t\toptions?.context,\n\t\t);\n\t}\n\treturn result.data;\n}\n\n/**\n * Unwraps the first row from a successful result that may contain arrays/scalars/null.\n *\n * - Throws on failed results.\n * - Throws when no row exists unless `allowNull: true` is provided.\n * - Optionally enforces exact cardinality via `requireExactlyOne`.\n */\nexport function unwrapOne<T>(\n\tresult: AthenaResult<T[] | T | null>,\n\toptions: UnwrapOneOptions & { allowNull: true },\n): T | null;\nexport function unwrapOne<T>(\n\tresult: AthenaResult<T[] | T | null>,\n\toptions?: UnwrapOneOptions,\n): T;\nexport function unwrapOne<T>(\n\tresult: AthenaResult<T[] | T | null>,\n\toptions?: UnwrapOneOptions,\n): T | null {\n\tconst rows = unwrapRows(result, options);\n\tif (!rows.length) {\n\t\tif (options?.allowNull) {\n\t\t\treturn null;\n\t\t}\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t\"Expected one row but received none\",\n\t\t\toptions?.context,\n\t\t);\n\t}\n\tif (options?.requireExactlyOne && rows.length !== 1) {\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t`Expected exactly one row but received ${rows.length}`,\n\t\t\toptions.context,\n\t\t);\n\t}\n\treturn rows[0];\n}\n\n/**\n * Asserts that an Athena result is successful.\n *\n * Returns the original result for fluent composition and throws `AthenaGatewayError` on failure.\n */\nexport function requireSuccess<T>(\n\tresult: AthenaResult<T>,\n\tcontext?: AthenaOperationContext,\n): AthenaResult<T> {\n\tif (!isOk(result)) {\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t`Athena ${context?.operation ?? \"request\"} failed`,\n\t\t\tcontext,\n\t\t);\n\t}\n\treturn result;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\n/**\n * Enforces mutation postconditions from the canonical row-count:\n * numeric `result.count`, else numeric `result.affectedRows`.\n *\n * - Validates success first.\n * - Does not require `{ count: \"exact\" }` on PG/D1 (driver meta already\n *   populates `count` / `affectedRows`).\n * - When `options.min` is set, validates resolved count `>= min`.\n *   A CAS miss (`0`) is a successful read of the count, not a missing field.\n */\nexport function requireAffected<T>(\n\tresult: AthenaResult<T>,\n\toptions?: RequireAffectedOptions,\n\tcontext?: AthenaOperationContext,\n): number {\n\trequireSuccess(result, context);\n\n\tconst count = isFiniteNumber(result.count)\n\t\t? result.count\n\t\t: isFiniteNumber(result.affectedRows)\n\t\t\t? result.affectedRows\n\t\t\t: null;\n\tif (count === null) {\n\t\tthrow new AthenaGatewayError({\n\t\t\tcause: safeStringify(result.raw),\n\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\thint: \"Fluent mutations expose count or affectedRows from adapter meta (PostgreSQL rowCount, D1 changes, Gateway envelope). Never fabricated.\",\n\t\t\tmessage:\n\t\t\t\t\"Expected affected row count but response.count/affectedRows is missing\",\n\t\t\tstatus: result.status,\n\t\t});\n\t}\n\n\tconst minimum = options?.min;\n\tif (minimum !== undefined && count < minimum) {\n\t\tthrow new AthenaGatewayError({\n\t\t\tcause: safeStringify(result.raw),\n\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\thint: contextHint(context),\n\t\t\tmessage: `Expected at least ${minimum} affected rows but received ${count}`,\n\t\t\tstatus: result.status,\n\t\t});\n\t}\n\n\treturn count;\n}\n\nfunction applyBounds(\n\tvalue: number,\n\toptions?: IntCoercionOptions,\n): number | null {\n\tif (options?.min !== undefined && value < options.min) {\n\t\treturn null;\n\t}\n\tif (options?.max !== undefined && value > options.max) {\n\t\treturn null;\n\t}\n\treturn value;\n}\n\nfunction parseIntegerString(value: string): number | null {\n\tconst normalized = value.trim();\n\tif (!/^[-+]?\\d+$/.test(normalized)) {\n\t\treturn null;\n\t}\n\tconst parsed = Number(normalized);\n\tif (!(Number.isFinite(parsed) && Number.isInteger(parsed))) {\n\t\treturn null;\n\t}\n\treturn parsed;\n}\n\n/**\n * Safely coerces `unknown` values into finite integers.\n *\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\n */\nexport function coerceInt(\n\tvalue: unknown,\n\toptions?: IntCoercionOptions,\n): number | null {\n\tif (value === null) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === \"number\") {\n\t\tif (!(Number.isFinite(value) && Number.isInteger(value))) {\n\t\t\treturn null;\n\t\t}\n\t\treturn applyBounds(value, options);\n\t}\n\n\tif (typeof value === \"string\") {\n\t\tconst parsed = parseIntegerString(value);\n\t\tif (parsed === null) {\n\t\t\treturn null;\n\t\t}\n\t\treturn applyBounds(parsed, options);\n\t}\n\n\tif (typeof value === \"bigint\") {\n\t\tif (\n\t\t\toptions?.strictBigInt &&\n\t\t\t(value > BigInt(Number.MAX_SAFE_INTEGER) ||\n\t\t\t\tvalue < BigInt(Number.MIN_SAFE_INTEGER))\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tconst parsed = Number(value);\n\t\tif (!(Number.isFinite(parsed) && Number.isInteger(parsed))) {\n\t\t\treturn null;\n\t\t}\n\t\treturn applyBounds(parsed, options);\n\t}\n\n\treturn null;\n}\n\n/**\n * Strict integer assertion wrapper around `coerceInt`.\n *\n * Throws a `TypeError` with the provided label when coercion fails.\n */\nexport function assertInt(\n\tvalue: unknown,\n\tlabel = \"value\",\n\toptions?: IntCoercionOptions,\n): number {\n\tconst parsed = coerceInt(value, options);\n\tif (parsed === null) {\n\t\tthrow new TypeError(`${label} must be a finite integer`);\n\t}\n\treturn parsed;\n}\n\nfunction defaultShouldRetry(error: unknown): boolean {\n\tconst normalized = normalizeAthenaError(error);\n\treturn normalized.kind === \"transient\" || normalized.kind === \"rate_limit\";\n}\n\nfunction computeDelayMs(\n\tattempt: number,\n\terror: unknown,\n\tconfig: Required<\n\t\tPick<RetryConfig, \"baseDelayMs\" | \"backoff\" | \"maxDelayMs\" | \"jitter\">\n\t>,\n): number {\n\tconst baseDelay = config.baseDelayMs;\n\tconst rawDelay =\n\t\ttypeof config.backoff === \"function\"\n\t\t\t? config.backoff(attempt, error)\n\t\t\t: config.backoff === \"linear\"\n\t\t\t\t? baseDelay * attempt\n\t\t\t\t: baseDelay * 2 ** (attempt - 1);\n\n\tconst safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0;\n\tconst clamped = Math.min(config.maxDelayMs, safeDelay);\n\tconst jitterFactor =\n\t\ttypeof config.jitter === \"number\"\n\t\t\t? Math.max(0, Math.min(1, config.jitter))\n\t\t\t: config.jitter\n\t\t\t\t? 0.2\n\t\t\t\t: 0;\n\n\tif (!jitterFactor) {\n\t\treturn clamped;\n\t}\n\tconst deviation = clamped * jitterFactor;\n\tconst offset = (Math.random() * 2 - 1) * deviation;\n\treturn Math.max(0, clamped + offset);\n}\n\nfunction sleep(ms: number): Promise<void> {\n\tif (ms <= 0) {\n\t\treturn Promise.resolve();\n\t}\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(resolve, ms);\n\t});\n}\n\n/**\n * @deprecated Prefer `retryReads` for standard SDK-managed read\n * retries, or a call-site retry policy when you need custom write/replay\n * behavior. This helper is retained for compatibility.\n *\n * Retries an async operation with configurable backoff and retry policy.\n *\n * `retries` represents additional attempts after the first failure.\n * By default, transient and rate-limit errors are retried.\n */\nexport async function withRetry<T>(\n\tconfig: RetryConfig,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\tconst retries = Math.max(0, Math.trunc(config.retries));\n\tconst shouldRetry = config.shouldRetry ?? defaultShouldRetry;\n\tconst resolvedConfig = {\n\t\tbackoff: config.backoff ?? \"exponential\",\n\t\tbaseDelayMs: config.baseDelayMs ?? 100,\n\t\tjitter: config.jitter ?? false,\n\t\tmaxDelayMs: config.maxDelayMs ?? 10_000,\n\t} satisfies Required<\n\t\tPick<RetryConfig, \"baseDelayMs\" | \"backoff\" | \"maxDelayMs\" | \"jitter\">\n\t>;\n\n\tfor (let attempts = 0; attempts <= retries; attempts += 1) {\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} catch (error) {\n\t\t\tif (attempts >= retries) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst currentAttempt = attempts + 1;\n\t\t\tconst retry = await shouldRetry(error, currentAttempt);\n\t\t\tif (!retry) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst delay = computeDelayMs(currentAttempt, error, resolvedConfig);\n\t\t\tawait sleep(delay);\n\t\t}\n\t}\n\n\tthrow new Error(\"withRetry reached an unexpected state\");\n}\n","export {\n\tATHENA_BILLING_AUTHORIZATION_DENIED,\n\tATHENA_BILLING_CONFIG_CONFLICT,\n\tATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n\tATHENA_BILLING_OPERATION_UNAVAILABLE,\n\tATHENA_BILLING_PROVIDER_SDK_REQUIRED,\n\tAthenaBillingAuthorizationError,\n\tAthenaBillingCapabilityError,\n\tAthenaBillingError,\n\tAthenaBillingProviderRequestError,\n\tisAthenaBillingAuthorizationError,\n\tisAthenaBillingCapabilityError,\n\tisAthenaBillingProviderRequestError,\n} from \"./errors.ts\";\nexport {\n\ttype BillingLiveHttpRoute,\n\ttype BillingLiveHttpRoutes,\n\tbillingLiveHttpRoutes,\n} from \"./live-http-routes.ts\";\nexport type {\n\tAthenaBillingCallOptions,\n\tAthenaBillingClientConfig,\n\tAthenaBillingEnvelope,\n\tAthenaBillingHttpMethod,\n\tAthenaBillingJson,\n\tAthenaBillingModule,\n\tBillingConnectionRefInput,\n\tBillingCreateConnectionInput,\n\tBillingEnsureCustomerInput,\n\tBillingListQuery,\n\tBillingProvisionSinksInput,\n\tBillingReconcileInput,\n\tBillingUpdateConnectionInput,\n\tBillingUpdateCustomerInput,\n} from \"./module.ts\";\nexport { billingSdkManifest, createBillingModule } from \"./module.ts\";\nexport type {\n\tMollieSdkAdapterFactory,\n\tMollieSdkClient,\n\tMollieSdkClientOptions,\n\tMollieSdkConstructor,\n\tMollieSdkResourcePort,\n} from \"./providers/types.ts\";\nexport type {\n\tBillingCapabilities,\n\tBillingOperation,\n\tBillingOperationCapability,\n\tBillingOperationCapabilityReason,\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\tAthenaBillingRuntime,\n\tBillingAdminConflictResolveResult,\n\tBillingAdminConnectionMaterializeResult,\n\tBillingAdminIngestionHealth,\n\tBillingAdminPort,\n\tBillingAdminWebhookStatus,\n\tBillingCatalogPort,\n\tBillingCheckoutPort,\n\tBillingInvoicePort,\n\tBillingPage,\n\tBillingPaymentPort,\n\tBillingPricePort,\n\tBillingProductPort,\n\tBillingSelfCheckoutCreateInput,\n\tBillingSelfCheckoutResumeInput,\n\tBillingSelfCheckoutResumeResult,\n\tBillingSelfPaymentView,\n\tBillingSelfPort,\n\tBillingSelfSubscriptionEnrollInput,\n\tBillingSelfSubscriptionEnrollResult,\n\tBillingSubscriptionPort,\n\tBillingWebhookPort,\n} from \"./runtime/types.ts\";\nexport type {\n\tAthenaBillingCatalogConfig,\n\tAthenaBillingCatalogPriceInput,\n\tAthenaBillingCatalogProductInput,\n\tBillingCancelSubscriptionInput,\n\tBillingCheckout,\n\tBillingCreateCheckoutInput,\n\tBillingCustomer,\n\tBillingInvoice,\n\tBillingMoney,\n\tBillingOwnershipStatus,\n\tBillingPayment,\n\tBillingPaymentLink,\n\tBillingPaymentStatus,\n\tBillingPrice,\n\tBillingProduct,\n\tBillingProviderName,\n\tBillingProviderSubjectKind,\n\tBillingRefund,\n\tBillingRuntimeMode,\n\tBillingSubjectBinding,\n\tBillingSubjectBindingSource,\n\tBillingSubjectBindingStatus,\n\tBillingSubjectRef,\n\tBillingSubscription,\n\tBillingWebhook,\n} from \"./types.ts\";\n","import type {\n\tBillingCapabilities,\n\tBillingOperation,\n\tBillingOperationCapability,\n\tBillingOperationCapabilityReason,\n\tBillingPortName,\n} from \"../capabilities.ts\";\n\nconst PORTS: readonly BillingPortName[] = [\n\t\"payments\",\n\t\"customers\",\n\t\"refunds\",\n\t\"paymentLinks\",\n\t\"subscriptions\",\n\t\"invoices\",\n\t\"webhooks\",\n\t\"products\",\n\t\"prices\",\n\t\"checkout\",\n\t\"self\",\n];\n\nconst SNAKE_TO_OPERATION: Record<string, BillingOperation> = {\n\tcancel_payment: \"payments.cancel\",\n\tcancel_refund: \"refunds.cancel\",\n\tcancel_subscription: \"subscriptions.cancel\",\n\tcreate_customer: \"customers.create\",\n\tcreate_payment: \"payments.create\",\n\tcreate_payment_link: \"paymentLinks.create\",\n\tcreate_refund: \"refunds.create\",\n\tcreate_subscription: \"subscriptions.create\",\n\tcreate_webhook: \"webhooks.create\",\n\tdelete_customer: \"customers.delete\",\n\tdelete_payment_link: \"paymentLinks.delete\",\n\tdelete_webhook: \"webhooks.delete\",\n\tget_customer: \"customers.get\",\n\tget_invoice: \"invoices.get\",\n\tget_payment: \"payments.get\",\n\tget_payment_link: \"paymentLinks.get\",\n\tget_refund: \"refunds.get\",\n\tget_subscription: \"subscriptions.get\",\n\tget_webhook: \"webhooks.get\",\n\tlist_customers: \"customers.list\",\n\tlist_invoices: \"invoices.list\",\n\tlist_payment_links: \"paymentLinks.list\",\n\tlist_payments: \"payments.list\",\n\tlist_refunds: \"refunds.list\",\n\tlist_subscriptions: \"subscriptions.list\",\n\tlist_webhooks: \"webhooks.list\",\n\tlist_products: \"products.list\",\n\tlist_prices: \"prices.list\",\n\tcreate_checkout: \"checkout.create\",\n\ttest_webhook: \"webhooks.test\",\n\tupdate_customer: \"customers.update\",\n\tupdate_payment_link: \"paymentLinks.update\",\n\tupdate_subscription: \"subscriptions.update\",\n\tupdate_webhook: \"webhooks.update\",\n};\n\nconst KEY_TO_OPERATION: Record<string, BillingOperation> = {\n\t\"billing.customers.create\": \"customers.create\",\n\t\"billing.customers.delete\": \"customers.delete\",\n\t\"billing.customers.get\": \"customers.get\",\n\t\"billing.customers.list\": \"customers.list\",\n\t\"billing.customers.update\": \"customers.update\",\n\t\"billing.invoices.get\": \"invoices.get\",\n\t\"billing.invoices.list\": \"invoices.list\",\n\t\"billing.payment_links.create\": \"paymentLinks.create\",\n\t\"billing.payment_links.delete\": \"paymentLinks.delete\",\n\t\"billing.payment_links.get\": \"paymentLinks.get\",\n\t\"billing.payment_links.list\": \"paymentLinks.list\",\n\t\"billing.payment_links.update\": \"paymentLinks.update\",\n\t\"billing.payments.cancel\": \"payments.cancel\",\n\t\"billing.payments.create\": \"payments.create\",\n\t\"billing.payments.get\": \"payments.get\",\n\t\"billing.payments.list\": \"payments.list\",\n\t\"billing.refunds.cancel\": \"refunds.cancel\",\n\t\"billing.refunds.create\": \"refunds.create\",\n\t\"billing.refunds.get\": \"refunds.get\",\n\t\"billing.refunds.list\": \"refunds.list\",\n\t\"billing.subscriptions.cancel\": \"subscriptions.cancel\",\n\t\"billing.subscriptions.create\": \"subscriptions.create\",\n\t\"billing.subscriptions.get\": \"subscriptions.get\",\n\t\"billing.subscriptions.list\": \"subscriptions.list\",\n\t\"billing.subscriptions.update\": \"subscriptions.update\",\n\t\"billing.webhooks.create\": \"webhooks.create\",\n\t\"billing.webhooks.delete\": \"webhooks.delete\",\n\t\"billing.webhooks.get\": \"webhooks.get\",\n\t\"billing.webhooks.list\": \"webhooks.list\",\n\t\"billing.webhooks.test\": \"webhooks.test\",\n\t\"billing.webhooks.update\": \"webhooks.update\",\n\t\"billing.products.list\": \"products.list\",\n\t\"billing.prices.list\": \"prices.list\",\n\t\"billing.checkout.create\": \"checkout.create\",\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n\tif (value && typeof value === \"object\") {\n\t\treturn value as Record<string, unknown>;\n\t}\n\treturn {};\n}\n\nfunction asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction asStringList(value: unknown): string[] {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\treturn value.filter((entry): entry is string => typeof entry === \"string\");\n}\n\nfunction resolveOperation(entry: Record<string, unknown>): BillingOperation | undefined {\n\tconst operation = asString(entry.operation);\n\tif (operation && operation in SNAKE_TO_OPERATION) {\n\t\treturn SNAKE_TO_OPERATION[operation];\n\t}\n\tif (operation && operation in KEY_TO_OPERATION) {\n\t\treturn KEY_TO_OPERATION[operation];\n\t}\n\tif (\n\t\toperation &&\n\t\t(operation.startsWith(\"payments.\") ||\n\t\t\toperation.startsWith(\"customers.\") ||\n\t\t\toperation.startsWith(\"refunds.\") ||\n\t\t\toperation.startsWith(\"paymentLinks.\") ||\n\t\t\toperation.startsWith(\"subscriptions.\") ||\n\t\t\toperation.startsWith(\"invoices.\") ||\n\t\t\toperation.startsWith(\"webhooks.\") ||\n\t\t\toperation.startsWith(\"products.\") ||\n\t\t\toperation.startsWith(\"prices.\") ||\n\t\t\toperation.startsWith(\"checkout.\") ||\n\t\t\toperation.startsWith(\"self.\"))\n\t) {\n\t\treturn operation as BillingOperation;\n\t}\n\tconst key = asString(entry.key);\n\tif (key && key in KEY_TO_OPERATION) {\n\t\treturn KEY_TO_OPERATION[key];\n\t}\n\treturn undefined;\n}\n\nfunction denialReason(entry: Record<string, unknown>): BillingOperationCapabilityReason {\n\tif (asStringList(entry.missingAthenaRights).length > 0) {\n\t\treturn \"missing_permission\";\n\t}\n\tif (asStringList(entry.missingProviderRequirements).length > 0) {\n\t\treturn \"missing_provider_scope\";\n\t}\n\tif (entry.portAvailable === false) {\n\t\treturn \"unsupported_operation\";\n\t}\n\treturn \"unsupported_operation\";\n}\n\nfunction projectPorts(raw: unknown): BillingCapabilities[\"ports\"] {\n\tconst record = asRecord(raw);\n\tconst ports = {} as BillingCapabilities[\"ports\"];\n\tfor (const name of PORTS) {\n\t\tports[name] = record[name] === true;\n\t}\n\treturn ports;\n}\n\n/**\n * Project GET /billing/v1/capabilities onto BillingCapabilities.\n * Never synthesize all-available; missing operations stay fail-closed.\n */\nexport function projectRemoteBillingCapabilities(\n\tdata: unknown,\n\tconnectionId: string,\n): BillingCapabilities {\n\tconst envelope = asRecord(data);\n\tconst nested = asRecord(envelope.capabilities);\n\tconst status = asString(nested.status);\n\tconst connected =\n\t\tnested.connected === true || status === \"active\";\n\tconst operations: Partial<\n\t\tRecord<BillingOperation, BillingOperationCapability>\n\t> = {};\n\tconst actions = Array.isArray(envelope.actionCapabilities)\n\t\t? envelope.actionCapabilities\n\t\t: [];\n\tfor (const raw of actions) {\n\t\tconst entry = asRecord(raw);\n\t\tconst operation = resolveOperation(entry);\n\t\tif (!operation) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.available === true) {\n\t\t\toperations[operation] = { available: true };\n\t\t\tcontinue;\n\t\t}\n\t\toperations[operation] = {\n\t\t\tavailable: false,\n\t\t\treason: denialReason(entry),\n\t\t};\n\t}\n\tconst provider =\n\t\tasString(nested.provider) ?? asString(envelope.provider) ?? \"remote\";\n\treturn {\n\t\tconnected,\n\t\tconnectionId,\n\t\toperations,\n\t\tports: projectPorts(envelope.ports),\n\t\tprovider,\n\t\truntime: \"remote\",\n\t\ttarget: {\n\t\t\tconnectionId,\n\t\t\tkind: \"connection\",\n\t\t\tprovider,\n\t\t},\n\t};\n}\n","import { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\"; // src/billing/safety\nimport type {\n\tBillingCancelPaymentInput,\n\tBillingCancelRefundInput,\n\tBillingCancelSubscriptionInput,\n\tBillingCheckout,\n\tBillingCreateCheckoutInput,\n\tBillingCreateCustomerInput,\n\tBillingCreatePaymentInput,\n\tBillingCreatePaymentLinkInput,\n\tBillingCreateRefundInput,\n\tBillingCreateSubscriptionInput,\n\tBillingCreateWebhookInput,\n\tBillingCustomer,\n\tBillingDeleteCustomerInput,\n\tBillingDeletePaymentLinkInput,\n\tBillingDeleteWebhookInput,\n\tBillingExecutionTarget,\n\tBillingGetCustomerInput,\n\tBillingGetInvoiceInput,\n\tBillingGetPaymentInput,\n\tBillingGetPaymentLinkInput,\n\tBillingGetRefundInput,\n\tBillingGetSubscriptionInput,\n\tBillingGetWebhookInput,\n\tBillingInvoice,\n\tBillingListCustomersInput,\n\tBillingListInvoicesInput,\n\tBillingListPaymentLinksInput,\n\tBillingListPaymentsInput,\n\tBillingListPricesInput,\n\tBillingListProductsInput,\n\tBillingListRefundsInput,\n\tBillingListSubscriptionsInput,\n\tBillingListWebhooksInput,\n\tBillingPayment,\n\tBillingPaymentLink,\n\tBillingPrice,\n\tBillingProduct,\n\tBillingRefund,\n\tBillingSubscription,\n\tBillingTestWebhookInput,\n\tBillingUpdateCustomerInput,\n\tBillingUpdatePaymentLinkInput,\n\tBillingUpdateSubscriptionInput,\n\tBillingUpdateWebhookInput,\n\tBillingWebhook,\n} from \"../../types.ts\";\nimport { createUnavailableBillingAdminPort } from \"../admin/unavailable.ts\";\nimport type { BillingCapabilities } from \"../capabilities.ts\";\nimport type { AthenaBillingRuntimeDispatch } from \"../dispatch.ts\";\nimport { invokeBillingRuntimePort } from \"../dispatch.ts\";\nimport { createUnavailableBillingSelfPort } from \"../self/unavailable.ts\";\nimport type { BillingPage } from \"../types.ts\";\nimport { projectRemoteBillingCapabilities } from \"./project-capabilities.ts\";\nimport {\n\ttype AthenaBillingClientConfig,\n\tappendQuery,\n\tcreateBillingHttpTransport,\n\twithPathParam,\n} from \"./transport.ts\";\n\n/**\n * GET /billing/v1/payments honors cursor (provider) or a hardcoded\n * persistence page (limit 50, offset 0). Remote callers must not\n * pretend limit/offset were applied.\n */\nexport function rejectUnsupportedRemotePaymentListPaging(input: {\n\tlimit?: number;\n\toffset?: number;\n}): void {\n\tif (input.offset == null && input.limit == null) {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation: \"payments.list\",\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\n/**\n * Remote /billing/v1 ConnectionQuery has no profileId. Adapters use the\n * connection's stored provider_profile_id, so a requested profile must\n * fail closed instead of silently targeting another profile.\n */\nexport function rejectUnenforcedRemoteProfileTarget(\n\tinput: { profileId?: string | null },\n\toperation: string,\n): void {\n\tif (input.profileId == null || input.profileId === \"\") {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation,\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\n/**\n * Remote /billing/v1 ConnectionQuery requires connection_id. Local\n * getCapabilities may target a configured provider without one.\n */\nexport function rejectMissingRemoteConnectionId(\n\tinput: { connectionId?: string | null },\n\toperation: string,\n): void {\n\tif (input.connectionId != null && input.connectionId !== \"\") {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation,\n\t\treason: \"missing_connection\",\n\t});\n}\n\nfunction connectionQuery(\n\tinput: BillingExecutionTarget & {\n\t\tcursor?: string;\n\t\tcustomerId?: string;\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tpaymentId?: string;\n\t\tproductId?: string;\n\t\tsource?: string;\n\t},\n): Record<string, string> {\n\tconst query: Record<string, string> = {};\n\tif (input.connectionId) {\n\t\tquery.connectionId = input.connectionId;\n\t}\n\tif (input.clientName) {\n\t\tquery.clientName = input.clientName;\n\t}\n\tif (input.cursor) {\n\t\tquery.cursor = input.cursor;\n\t}\n\tif (input.customerId) {\n\t\tquery.customerId = input.customerId;\n\t}\n\tif (input.paymentId) {\n\t\tquery.paymentId = input.paymentId;\n\t}\n\tif (input.productId) {\n\t\tquery.productId = input.productId;\n\t}\n\tif (input.source) {\n\t\tquery.source = input.source;\n\t}\n\tif (input.limit !== undefined) {\n\t\tquery.limit = String(input.limit);\n\t}\n\tif (input.offset !== undefined) {\n\t\tquery.offset = String(input.offset);\n\t}\n\treturn query;\n}\n\nfunction asPage<T>(data: unknown): BillingPage<T> {\n\tif (Array.isArray(data)) {\n\t\treturn { items: data as T[] };\n\t}\n\tif (data && typeof data === \"object\") {\n\t\tconst record = data as Record<string, unknown>;\n\t\tif (Array.isArray(record.items)) {\n\t\t\treturn {\n\t\t\t\titems: record.items as T[],\n\t\t\t\tnextCursor: (record.nextCursor as string | null | undefined) ?? null,\n\t\t\t\tpreviousCursor:\n\t\t\t\t\t(record.previousCursor as string | null | undefined) ?? null,\n\t\t\t};\n\t\t}\n\t}\n\treturn { items: [] };\n}\n\n/**\n * HTTP implementation of AthenaBillingRuntime. Does not change the public\n * createBillingModule method bag; that façade still maps 1:1 to /billing/v1.\n */\nexport function createRemoteBillingRuntime(\n\tconfig: AthenaBillingClientConfig,\n): AthenaBillingRuntimeDispatch {\n\tconst { call } = createBillingHttpTransport(config);\n\n\treturn {\n\t\tmode: \"remote\",\n\t\tadmin: createUnavailableBillingAdminPort(),\n\t\texecute(operation, payload, _principal) {\n\t\t\treturn invokeBillingRuntimePort(this, operation, payload);\n\t\t},\n\t\tself: createUnavailableBillingSelfPort(),\n\t\tcustomers: {\n\t\t\tcreate(input: BillingCreateCustomerInput): Promise<BillingCustomer> {\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"customers.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/customers\", prepared.payload);\n\t\t\t},\n\t\t\tdelete(input: BillingDeleteCustomerInput): Promise<void> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"DELETE\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tget(input: BillingGetCustomerInput): Promise<BillingCustomer> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListCustomersInput,\n\t\t\t): Promise<BillingPage<BillingCustomer>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/customers\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tupdate(input: BillingUpdateCustomerInput): Promise<BillingCustomer> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"PATCH\",\n\t\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", input.id),\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tinvoices: {\n\t\t\tget(input: BillingGetInvoiceInput): Promise<BillingInvoice> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/invoices/{id}\", \"id\", input.invoiceId),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListInvoicesInput,\n\t\t\t): Promise<BillingPage<BillingInvoice>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/invoices\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tpaymentLinks: {\n\t\t\tcreate(\n\t\t\t\tinput: BillingCreatePaymentLinkInput,\n\t\t\t): Promise<BillingPaymentLink> {\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"paymentLinks.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/payment-links\", prepared.payload);\n\t\t\t},\n\t\t\tdelete(input: BillingDeletePaymentLinkInput): Promise<void> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"DELETE\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tget(input: BillingGetPaymentLinkInput): Promise<BillingPaymentLink> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListPaymentLinksInput,\n\t\t\t): Promise<BillingPage<BillingPaymentLink>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/payment-links\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tupdate(\n\t\t\t\tinput: BillingUpdatePaymentLinkInput,\n\t\t\t): Promise<BillingPaymentLink> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"PATCH\",\n\t\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", input.id),\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tpayments: {\n\t\t\tcancel(input: BillingCancelPaymentInput): Promise<BillingPayment> {\n\t\t\t\trejectUnenforcedRemoteProfileTarget(input, \"payments.cancel\");\n\t\t\t\treturn call(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/payments/{id}/cancel\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t},\n\t\t\tcreate(input: BillingCreatePaymentInput): Promise<BillingPayment> {\n\t\t\t\trejectUnenforcedRemoteProfileTarget(input, \"payments.create\");\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"payments.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/payments\", prepared.payload);\n\t\t\t},\n\t\t\tget(input: BillingGetPaymentInput): Promise<BillingPayment> {\n\t\t\t\trejectUnenforcedRemoteProfileTarget(input, \"payments.get\");\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/payments/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListPaymentsInput,\n\t\t\t): Promise<BillingPage<BillingPayment>> {\n\t\t\t\trejectUnsupportedRemotePaymentListPaging(input);\n\t\t\t\trejectUnenforcedRemoteProfileTarget(input, \"payments.list\");\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/payments\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\trefunds: {\n\t\t\tcancel(input: BillingCancelRefundInput): Promise<BillingRefund> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\t\"/billing/v1/refunds/{id}/cancel\",\n\t\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\tinput.refundId,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t},\n\t\t\tcreate(input: BillingCreateRefundInput): Promise<BillingRefund> {\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"refunds.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/refunds\", prepared.payload);\n\t\t\t},\n\t\t\tget(input: BillingGetRefundInput): Promise<BillingRefund> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/refunds/{id}\", \"id\", input.refundId),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListRefundsInput,\n\t\t\t): Promise<BillingPage<BillingRefund>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/refunds\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tsubscriptions: {\n\t\t\tcancel(\n\t\t\t\tinput: BillingCancelSubscriptionInput,\n\t\t\t): Promise<BillingSubscription> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\t\"/billing/v1/subscriptions/{id}/cancel\",\n\t\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\tinput.subscriptionId,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t},\n\t\t\tcreate(\n\t\t\t\tinput: BillingCreateSubscriptionInput,\n\t\t\t): Promise<BillingSubscription> {\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"subscriptions.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/subscriptions\", prepared.payload);\n\t\t\t},\n\t\t\tget(input: BillingGetSubscriptionInput): Promise<BillingSubscription> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\t\"/billing/v1/subscriptions/{id}\",\n\t\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\tinput.subscriptionId,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListSubscriptionsInput,\n\t\t\t): Promise<BillingPage<BillingSubscription>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/subscriptions\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tupdate(\n\t\t\t\tinput: BillingUpdateSubscriptionInput,\n\t\t\t): Promise<BillingSubscription> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"PATCH\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\t\"/billing/v1/subscriptions/{id}\",\n\t\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\tinput.subscriptionId,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\twebhooks: {\n\t\t\tcreate(input: BillingCreateWebhookInput): Promise<BillingWebhook> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tappendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t\tdelete(input: BillingDeleteWebhookInput): Promise<void> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"DELETE\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tget(input: BillingGetWebhookInput): Promise<BillingWebhook> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListWebhooksInput,\n\t\t\t): Promise<BillingPage<BillingWebhook>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\ttest(input: BillingTestWebhookInput): Promise<BillingWebhook> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}/test\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t},\n\t\t\tupdate(input: BillingUpdateWebhookInput): Promise<BillingWebhook> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"PATCH\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tproducts: {\n\t\t\tasync list(\n\t\t\t\tinput: BillingListProductsInput,\n\t\t\t): Promise<BillingPage<BillingProduct>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/products\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tprices: {\n\t\t\tasync list(\n\t\t\t\tinput: BillingListPricesInput,\n\t\t\t): Promise<BillingPage<BillingPrice>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/prices\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tcheckout: {\n\t\t\tcreate(input: BillingCreateCheckoutInput): Promise<BillingCheckout> {\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"checkout.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/checkouts\", prepared.payload);\n\t\t\t},\n\t\t},\n\t\tasync getCapabilities(\n\t\t\tinput: BillingExecutionTarget,\n\t\t): Promise<BillingCapabilities> {\n\t\t\trejectMissingRemoteConnectionId(input, \"getCapabilities\");\n\t\t\tconst query = connectionQuery(input);\n\t\t\tif (input.profileId) {\n\t\t\t\tquery.profileId = input.profileId;\n\t\t\t}\n\t\t\tconst data = await call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/capabilities\", query),\n\t\t\t);\n\t\t\treturn projectRemoteBillingCapabilities(data, input.connectionId ?? \"\");\n\t\t},\n\t};\n}\n","import {\n\tresolveBillingEnvironment as resolveRuntimeBillingEnvironment,\n\ttype BillingEnvironment,\n} from \"../runtime/environment.ts\";\n\n/**\n * Named live/test invariant: live credentials are never selected because\n * they merely exist. Omitted `testMode` stays test.\n */\nexport type BillingLiveCredentialSelection = BillingEnvironment;\n\nexport type BillingLiveSelectionInvariant = BillingLiveCredentialSelection;\n\nexport function resolveBillingEnvironment(input?: {\n\tcredentials?: { live?: unknown; test?: unknown };\n\ttestMode?: boolean;\n}): BillingLiveCredentialSelection {\n\treturn resolveRuntimeBillingEnvironment({\n\t\ttestMode: input?.testMode,\n\t});\n}\n\nexport function assertBillingLiveCredentialSelection(input?: {\n\tcredentials?: { live?: unknown; test?: unknown };\n\ttestMode?: boolean;\n}): BillingLiveCredentialSelection {\n\treturn resolveBillingEnvironment(input);\n}\n","import type { BillingOperation } from \"../runtime/capabilities.ts\";\nimport { resolveBillingEnvironment } from \"./environment.ts\";\nimport { BILLING_OPERATION_SAFETY } from \"./registry.ts\";\nimport type { BillingOperationSafetyProfile } from \"./types.ts\";\nimport { validateBillingOperationPayload } from \"./validators.ts\";\n\nexport interface PrepareBillingCommandInput {\n\toperation: BillingOperation;\n\tpayload: unknown;\n\ttestMode?: boolean;\n\t/** Defer caller-owned idempotency until after capability gating. */\n\tidempotency?: \"enforce\" | \"defer\";\n}\n\nexport interface BillingPreparedCommand {\n\treadonly environment: {\n\t\treadonly name: \"test\" | \"live\";\n\t\treadonly testMode: boolean;\n\t};\n\treadonly operation: BillingOperation;\n\treadonly payload: Readonly<Record<string, unknown>>;\n\treadonly profile: BillingOperationSafetyProfile;\n}\n\nexport function prepareBillingCommand(\n\tinput: PrepareBillingCommandInput,\n): BillingPreparedCommand {\n\tconst profile = BILLING_OPERATION_SAFETY[input.operation];\n\tif (profile == null) {\n\t\tthrow new Error(`ATHENA_BILLING_OPERATION_UNKNOWN:${input.operation}`);\n\t}\n\tconst environment = resolveBillingEnvironment({\n\t\ttestMode: input.testMode,\n\t});\n\tconst payload = validateBillingOperationPayload({\n\t\tdeferIdempotency: input.idempotency === \"defer\",\n\t\toperation: input.operation,\n\t\tpayload: input.payload,\n\t\tprofile,\n\t});\n\treturn Object.freeze({\n\t\tenvironment: Object.freeze({\n\t\t\tname: environment.name,\n\t\t\ttestMode: environment.testMode,\n\t\t}),\n\t\toperation: input.operation,\n\t\tpayload: Object.freeze(payload),\n\t\tprofile,\n\t});\n}\n\n/** Enforce deferred idempotency after capability and authority have been resolved. */\nexport function finalizeBillingCommand(\n\tinput: Omit<PrepareBillingCommandInput, \"idempotency\">,\n): BillingPreparedCommand {\n\treturn prepareBillingCommand({\n\t\t...input,\n\t\tidempotency: \"enforce\",\n\t});\n}\n","const MAX_IDEMPOTENCY_KEY_LENGTH = 64;\nconst FORBIDDEN_IDEMPOTENCY_CHARS = /[\\u0000-\\u001F\\u007F\\s]/;\n\nexport function assertBillingIdempotencyKey(\n\tkey: unknown,\n): asserts key is string {\n\tif (typeof key !== \"string\" || key.trim() === \"\") {\n\t\tthrow new Error(\"ATHENA_BILLING_IDEMPOTENCY_KEY_REQUIRED\");\n\t}\n\tconst normalized = key.trim();\n\tif (\n\t\tnormalized.length > MAX_IDEMPOTENCY_KEY_LENGTH ||\n\t\tFORBIDDEN_IDEMPOTENCY_CHARS.test(normalized)\n\t) {\n\t\tthrow new Error(\"ATHENA_BILLING_IDEMPOTENCY_KEY_INVALID\");\n\t}\n}\n","import type { BillingMoney } from \"../types.ts\";\n\nconst MONEY_PATTERN = /^-?[0-9]+(\\.[0-9]+)?$/;\nconst CURRENCY_PATTERN = /^[A-Z]{3}$/;\n/** Integer digits after leading-zero strip; Mollie string amounts stay bounded. */\nconst MAX_MONEY_INTEGER_DIGITS = 12;\n\n/** ISO-4217 minor units for codes whose exponent is not 2. */\nconst ISO_4217_MINOR_UNITS: Record<string, number> = {\n\tBHD: 3,\n\tBIF: 0,\n\tCLF: 4,\n\tCLP: 0,\n\tDJF: 0,\n\tGNF: 0,\n\tIQD: 3,\n\tISK: 0,\n\tJOD: 3,\n\tJPY: 0,\n\tKMF: 0,\n\tKRW: 0,\n\tKWD: 3,\n\tLYD: 3,\n\tOMR: 3,\n\tPYG: 0,\n\tRWF: 0,\n\tTND: 3,\n\tUGX: 0,\n\tUYI: 0,\n\tUYW: 4,\n\tVND: 0,\n\tVUV: 0,\n\tXAF: 0,\n\tXOF: 0,\n\tXPF: 0,\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction exponentForCurrency(currency: string): number {\n\treturn ISO_4217_MINOR_UNITS[currency] ?? 2;\n}\n\nfunction digitsAreZero(digits: string): boolean {\n\tfor (const ch of digits) {\n\t\tif (ch !== \"0\") {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nexport function parseBillingMoney(value: unknown): BillingMoney {\n\tif (!isRecord(value)) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_INVALID\");\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_INVALID\");\n\t}\n\tconst currency = value.currency.trim().toUpperCase();\n\tif (!CURRENCY_PATTERN.test(currency)) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_CURRENCY_INVALID\");\n\t}\n\tconst raw = value.value.trim();\n\tif (!MONEY_PATTERN.test(raw)) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_VALUE_INVALID\");\n\t}\n\treturn { currency, value: raw };\n}\n\nfunction stripLeadingZeros(digits: string): string {\n\tlet index = 0;\n\twhile (index < digits.length - 1 && digits[index] === \"0\") {\n\t\tindex += 1;\n\t}\n\treturn digits.slice(index);\n}\n\nfunction scaledValue(raw: string, exponent: number): string {\n\tconst negative = raw.startsWith(\"-\");\n\tconst unsigned = negative ? raw.slice(1) : raw;\n\tconst dot = unsigned.indexOf(\".\");\n\tconst intDigits = stripLeadingZeros(dot < 0 ? unsigned : unsigned.slice(0, dot));\n\tconst fracDigits = dot < 0 ? \"\" : unsigned.slice(dot + 1);\n\tif (intDigits.length > MAX_MONEY_INTEGER_DIGITS) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_VALUE_INVALID\");\n\t}\n\tif (fracDigits.length > exponent) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_SCALE_INVALID\");\n\t}\n\tconst paddedFrac = fracDigits.padEnd(exponent, \"0\");\n\tconst body =\n\t\texponent === 0 ? intDigits : `${intDigits}.${paddedFrac}`;\n\treturn negative ? `-${body}` : body;\n}\n\nexport function normalizeBillingMoney(value: unknown): BillingMoney {\n\tconst parsed = parseBillingMoney(value);\n\tconst exponent = exponentForCurrency(parsed.currency);\n\treturn {\n\t\tcurrency: parsed.currency,\n\t\tvalue: scaledValue(parsed.value, exponent),\n\t};\n}\n\nexport function assertBillingMoney(value: unknown): BillingMoney {\n\tconst normalized = normalizeBillingMoney(value);\n\tconst unsigned = normalized.value.startsWith(\"-\")\n\t\t? normalized.value.slice(1)\n\t\t: normalized.value;\n\tconst dot = unsigned.indexOf(\".\");\n\tconst intDigits = dot < 0 ? unsigned : unsigned.slice(0, dot);\n\tconst fracDigits = dot < 0 ? \"\" : unsigned.slice(dot + 1);\n\tif (normalized.value.startsWith(\"-\") || digitsAreZero(intDigits + fracDigits)) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_NON_POSITIVE\");\n\t}\n\treturn normalized;\n}\n","import { assertBillingIdempotencyKey } from \"./idempotency.ts\";\nimport { assertBillingMoney, normalizeBillingMoney } from \"./money.ts\";\nimport type { BillingOperationSafetyProfile } from \"./types.ts\";\nimport type { BillingOperation } from \"../runtime/capabilities.ts\";\nimport type { BillingMoney } from \"../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction requiredNonEmptyString(value: unknown, field: string): string {\n\tif (typeof value !== \"string\" || value.trim() === \"\") {\n\t\tthrow new Error(`ATHENA_BILLING_FIELD_REQUIRED:${field}`);\n\t}\n\treturn value;\n}\n\nfunction requiredMoney(value: unknown): BillingMoney {\n\treturn assertBillingMoney(value);\n}\n\nexport function validateBillingOperationPayload(input: {\n\tdeferIdempotency?: boolean;\n\toperation: BillingOperation;\n\tpayload: unknown;\n\tprofile: BillingOperationSafetyProfile;\n}): Record<string, unknown> {\n\tif (!isRecord(input.payload)) {\n\t\tthrow new Error(\"ATHENA_BILLING_PAYLOAD_INVALID\");\n\t}\n\tconst next: Record<string, unknown> = { ...input.payload };\n\tif (input.profile.money === \"required\") {\n\t\tnext.amount = requiredMoney(next.amount);\n\t} else if (next.amount != null) {\n\t\tnext.amount = normalizeBillingMoney(next.amount);\n\t}\n\tswitch (input.operation) {\n\t\tcase \"refunds.create\":\n\t\t\trequiredNonEmptyString(next.paymentId, \"paymentId\");\n\t\t\tbreak;\n\t\tcase \"paymentLinks.create\":\n\t\t\trequiredNonEmptyString(next.description, \"description\");\n\t\t\tbreak;\n\t\tcase \"subscriptions.create\":\n\t\t\trequiredNonEmptyString(next.customerId, \"customerId\");\n\t\t\trequiredNonEmptyString(next.interval, \"interval\");\n\t\t\trequiredNonEmptyString(next.description, \"description\");\n\t\t\tbreak;\n\t\tcase \"checkout.create\":\n\t\t\trequiredNonEmptyString(next.successUrl, \"successUrl\");\n\t\t\tbreak;\n\t\tcase \"self.checkout.create\":\n\t\t\trequiredNonEmptyString(next.priceId, \"priceId\");\n\t\t\trequiredNonEmptyString(next.successUrl, \"successUrl\");\n\t\t\tbreak;\n\t\tcase \"self.checkout.resume\":\n\t\t\trequiredNonEmptyString(next.returnToken, \"returnToken\");\n\t\t\tbreak;\n\t\tcase \"self.subscription.enroll\":\n\t\t\trequiredNonEmptyString(next.priceId, \"priceId\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (\n\t\tinput.profile.idempotency === \"required_caller_owned\" &&\n\t\tinput.deferIdempotency !== true\n\t) {\n\t\tassertBillingIdempotencyKey(next.idempotencyKey);\n\t}\n\treturn next;\n}\n","import { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport type { BillingAdminPort } from \"./types.ts\";\n\nexport function createUnavailableBillingAdminPort(): BillingAdminPort {\n\tconst fail = (operation: string) => (): Promise<never> => {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t};\n\treturn {\n\t\tconflicts: { resolve: fail(\"admin.conflicts.resolve\") },\n\t\tconnections: { materialize: fail(\"admin.connections.materialize\") },\n\t\tingestion: { health: fail(\"admin.ingestion.health\") },\n\t\treconciliation: {\n\t\t\tretry: fail(\"admin.reconciliation.retry\"),\n\t\t\trun: fail(\"admin.reconciliation.run\"),\n\t\t},\n\t\twebhooks: {\n\t\t\treconcile: fail(\"admin.webhooks.reconcile\"),\n\t\t\tstatus: fail(\"admin.webhooks.status\"),\n\t\t\tverify: fail(\"admin.webhooks.verify\"),\n\t\t},\n\t};\n}\n","import type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError } from \"../errors.ts\";\nimport type { BillingExecutionTarget } from \"../types.ts\";\nimport type { BillingAdminPort } from \"./admin/types.ts\";\nimport type {\n\tAthenaBillingRuntime,\n\tBillingRuntimeDispatchOperation,\n} from \"./types.ts\";\n\nexport type { BillingRuntimeDispatchOperation };\n\nexport interface AthenaBillingRuntimeDispatch extends AthenaBillingRuntime {\n\treadonly admin: BillingAdminPort;\n\texecute(\n\t\toperation: BillingRuntimeDispatchOperation,\n\t\tpayload: unknown,\n\t\tprincipal: AthenaPrincipal,\n\t): Promise<unknown>;\n}\n\ntype BillingRuntimeDispatchHandler = (\n\truntime: AthenaBillingRuntime,\n\tpayload: unknown,\n) => Promise<unknown>;\n\nfunction body(payload: unknown): never {\n\treturn (\n\t\tpayload != null && typeof payload === \"object\" ? payload : {}\n\t) as never;\n}\n\nconst BILLING_RUNTIME_DISPATCH = {\n\tgetCapabilities: (runtime, payload) =>\n\t\truntime.getCapabilities(body(payload) as BillingExecutionTarget),\n\t\"payments.list\": (runtime, payload) => runtime.payments.list(body(payload)),\n\t\"payments.create\": (runtime, payload) => runtime.payments.create(body(payload)),\n\t\"payments.get\": (runtime, payload) => runtime.payments.get(body(payload)),\n\t\"payments.cancel\": (runtime, payload) => runtime.payments.cancel(body(payload)),\n\t\"customers.list\": (runtime, payload) => runtime.customers.list(body(payload)),\n\t\"customers.create\": (runtime, payload) =>\n\t\truntime.customers.create(body(payload)),\n\t\"customers.get\": (runtime, payload) => runtime.customers.get(body(payload)),\n\t\"customers.update\": (runtime, payload) =>\n\t\truntime.customers.update(body(payload)),\n\t\"customers.delete\": (runtime, payload) =>\n\t\truntime.customers.delete(body(payload)),\n\t\"refunds.list\": (runtime, payload) => runtime.refunds.list(body(payload)),\n\t\"refunds.create\": (runtime, payload) => runtime.refunds.create(body(payload)),\n\t\"refunds.get\": (runtime, payload) => runtime.refunds.get(body(payload)),\n\t\"refunds.cancel\": (runtime, payload) => runtime.refunds.cancel(body(payload)),\n\t\"paymentLinks.list\": (runtime, payload) =>\n\t\truntime.paymentLinks.list(body(payload)),\n\t\"paymentLinks.create\": (runtime, payload) =>\n\t\truntime.paymentLinks.create(body(payload)),\n\t\"paymentLinks.get\": (runtime, payload) =>\n\t\truntime.paymentLinks.get(body(payload)),\n\t\"paymentLinks.update\": (runtime, payload) =>\n\t\truntime.paymentLinks.update(body(payload)),\n\t\"paymentLinks.delete\": (runtime, payload) =>\n\t\truntime.paymentLinks.delete(body(payload)),\n\t\"subscriptions.list\": (runtime, payload) =>\n\t\truntime.subscriptions.list(body(payload)),\n\t\"subscriptions.create\": (runtime, payload) =>\n\t\truntime.subscriptions.create(body(payload)),\n\t\"subscriptions.get\": (runtime, payload) =>\n\t\truntime.subscriptions.get(body(payload)),\n\t\"subscriptions.update\": (runtime, payload) =>\n\t\truntime.subscriptions.update(body(payload)),\n\t\"subscriptions.cancel\": (runtime, payload) =>\n\t\truntime.subscriptions.cancel(body(payload)),\n\t\"invoices.list\": (runtime, payload) => runtime.invoices.list(body(payload)),\n\t\"invoices.get\": (runtime, payload) => runtime.invoices.get(body(payload)),\n\t\"webhooks.list\": (runtime, payload) => runtime.webhooks.list(body(payload)),\n\t\"webhooks.create\": (runtime, payload) => runtime.webhooks.create(body(payload)),\n\t\"webhooks.get\": (runtime, payload) => runtime.webhooks.get(body(payload)),\n\t\"webhooks.update\": (runtime, payload) => runtime.webhooks.update(body(payload)),\n\t\"webhooks.delete\": (runtime, payload) => runtime.webhooks.delete(body(payload)),\n\t\"webhooks.test\": (runtime, payload) => runtime.webhooks.test(body(payload)),\n\t\"products.list\": (runtime, payload) => runtime.products.list(body(payload)),\n\t\"prices.list\": (runtime, payload) => runtime.prices.list(body(payload)),\n\t\"checkout.create\": (runtime, payload) => runtime.checkout.create(body(payload)),\n\t\"self.invoices.list\": (runtime, payload) =>\n\t\truntime.self.invoices.list(body(payload)),\n\t\"self.invoices.get\": (runtime, payload) =>\n\t\truntime.self.invoices.get(body(payload)),\n\t\"self.payments.list\": (runtime, payload) =>\n\t\truntime.self.payments.list(body(payload)),\n\t\"self.payments.get\": (runtime, payload) =>\n\t\truntime.self.payments.get(body(payload)),\n\t\"self.subscription.get\": (runtime, payload) =>\n\t\truntime.self.subscription.get(body(payload)),\n\t\"self.subscription.cancel\": (runtime, payload) =>\n\t\truntime.self.subscription.cancel(body(payload)),\n\t\"self.subscription.enroll\": (runtime, payload) =>\n\t\truntime.self.subscription.enroll(body(payload)),\n\t\"self.checkout.create\": (runtime, payload) =>\n\t\truntime.self.checkout.create(body(payload)),\n\t\"self.checkout.resume\": (runtime, payload) =>\n\t\truntime.self.checkout.resume(body(payload)),\n\t\"admin.connections.materialize\": (runtime, payload) =>\n\t\truntime.admin.connections.materialize(body(payload)),\n\t\"admin.reconciliation.run\": (runtime, payload) =>\n\t\truntime.admin.reconciliation.run(body(payload)),\n\t\"admin.reconciliation.retry\": (runtime, payload) =>\n\t\truntime.admin.reconciliation.retry(body(payload)),\n\t\"admin.webhooks.reconcile\": (runtime, payload) =>\n\t\truntime.admin.webhooks.reconcile(body(payload)),\n\t\"admin.webhooks.verify\": (runtime, payload) =>\n\t\truntime.admin.webhooks.verify(body(payload)),\n\t\"admin.webhooks.status\": (runtime, payload) =>\n\t\truntime.admin.webhooks.status(body(payload)),\n\t\"admin.ingestion.health\": (runtime, payload) =>\n\t\truntime.admin.ingestion.health(body(payload)),\n\t\"admin.conflicts.resolve\": (runtime, payload) =>\n\t\truntime.admin.conflicts.resolve(body(payload)),\n} as const satisfies Record<\n\tBillingRuntimeDispatchOperation,\n\tBillingRuntimeDispatchHandler\n>;\n\nexport async function invokeBillingRuntimePort(\n\truntime: AthenaBillingRuntime,\n\toperation: BillingRuntimeDispatchOperation,\n\tpayload: unknown,\n): Promise<unknown> {\n\tconst handler: BillingRuntimeDispatchHandler | undefined =\n\t\tBILLING_RUNTIME_DISPATCH[operation];\n\tif (handler == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\treturn handler(runtime, payload);\n}\n","import { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport type { BillingSelfPort } from \"../types.ts\";\n\nexport function createUnavailableBillingSelfPort(): BillingSelfPort {\n\tconst fail = (operation: string) => (): Promise<never> => {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t};\n\treturn {\n\t\tcheckout: {\n\t\t\tcreate: fail(\"self.checkout.create\"),\n\t\t\tresume: fail(\"self.checkout.resume\"),\n\t\t},\n\t\tinvoices: {\n\t\t\tget: fail(\"self.invoices.get\"),\n\t\t\tlist: fail(\"self.invoices.list\"),\n\t\t},\n\t\tpayments: {\n\t\t\tget: fail(\"self.payments.get\"),\n\t\t\tlist: fail(\"self.payments.list\"),\n\t\t},\n\t\tsubscription: {\n\t\t\tcancel: fail(\"self.subscription.cancel\"),\n\t\t\tenroll: fail(\"self.subscription.enroll\"),\n\t\t\tget: fail(\"self.subscription.get\"),\n\t\t},\n\t};\n}\n","import { AthenaGatewayError } from \"./errors.ts\";\n\nexport const ATHENA_DEFAULT_BASE_URL = \"https://mirror2.athena-cluster.com\";\n\nfunction describeReceivedValue(value: unknown): string {\n  if (value === undefined) {\n    return \"undefined\";\n  }\n  if (value === null) {\n    return \"null\";\n  }\n  if (typeof value === \"string\") {\n    return value.trim().length > 0 ? JSON.stringify(value) : \"an empty string\";\n  }\n  return `${typeof value} ${JSON.stringify(value)}`;\n}\n\nfunction invalidBaseUrlError(\n  message: string,\n  hint: string,\n  cause?: unknown\n): AthenaGatewayError {\n  return new AthenaGatewayError({\n    cause:\n      cause instanceof Error\n        ? cause.message\n        : cause === undefined || cause === null\n          ? undefined\n          : String(cause),\n    code: \"INVALID_URL\",\n    errorCause: cause,\n    hint,\n    message,\n    status: 0,\n  });\n}\n\nexport interface NormalizeAthenaGatewayBaseUrlOptions {\n  defaultBaseUrl?: string;\n  label?: string;\n}\n\nexport function normalizeAthenaGatewayBaseUrl(\n  input: string | null | undefined,\n  options: NormalizeAthenaGatewayBaseUrlOptions = {}\n): string {\n  const label = options.label ?? \"Athena gateway base URL\";\n  const candidate = input ?? options.defaultBaseUrl;\n\n  if (candidate === undefined || candidate === null) {\n    throw invalidBaseUrlError(\n      `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(input)}.`,\n      'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".'\n    );\n  }\n\n  const trimmed = candidate.trim();\n  if (!trimmed) {\n    throw invalidBaseUrlError(\n      `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n      'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".'\n    );\n  }\n\n  let parsed: URL;\n  try {\n    parsed = new URL(trimmed);\n  } catch (error) {\n    throw invalidBaseUrlError(\n      `${label} must be a valid absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n      'Use a full URL including the protocol, for example \"https://mirror2.athena-cluster.com\".',\n      error\n    );\n  }\n\n  if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n    throw invalidBaseUrlError(\n      `${label} must use http or https. Received ${JSON.stringify(trimmed)}.`,\n      'Use an Athena gateway URL such as \"https://mirror2.athena-cluster.com\".'\n    );\n  }\n\n  if (parsed.search || parsed.hash) {\n    throw invalidBaseUrlError(\n      `${label} must not include query parameters or hash fragments. Received ${JSON.stringify(trimmed)}.`,\n      'Pass only the base URL. Endpoint paths such as \"/gateway/fetch\" are appended by the SDK.'\n    );\n  }\n\n  return parsed.toString().replace(/\\/+$/, \"\");\n}\n\nexport function buildAthenaGatewayUrl(baseUrl: string, path: string): string {\n  if (!path.startsWith(\"/\")) {\n    throw invalidBaseUrlError(\n      `Athena gateway path must start with \"/\". Received ${JSON.stringify(path)}.`,\n      'Use a leading slash such as \"/gateway/fetch\" or \"/\".'\n    );\n  }\n\n  return `${baseUrl}${path}`;\n}\n","{\n  \"author\": \"floris@xylex.group\",\n  \"bin\": {\n    \"athena-js\": \"bin/athena-js.js\"\n  },\n  \"dependencies\": {\n    \"@clack/prompts\": \"^0.11.0\",\n    \"@noble/hashes\": \"^1.8.0\",\n    \"@simplewebauthn/server\": \"^13.3.2\",\n    \"blessed\": \"^0.1.81\",\n    \"chalk\": \"^4.1.2\",\n    \"cron-parser\": \"^4.9.0\",\n    \"jose\": \"^6.2.3\",\n    \"pg\": \"^8.20.0\",\n    \"pgsql-parser\": \"^18.2.6\",\n    \"server-only\": \"^0.0.1\",\n    \"tsx\": \"^4.21.0\",\n    \"use-sync-external-store\": \"^1.6.0\",\n    \"zod\": \"^4.4.3\"\n  },\n  \"description\": \"Athena JS SDK\",\n  \"devDependencies\": {\n    \"@biomejs/biome\": \"^2.5.5\",\n    \"@react-email/components\": \"^1.0.12\",\n    \"@react-email/render\": \"^2.0.8\",\n    \"@types/blessed\": \"^0.1.27\",\n    \"@types/express\": \"^4.17.25\",\n    \"@types/node\": \"^20.19.43\",\n    \"@types/pg\": \"^8.20.0\",\n    \"@types/react\": \"^18.3.28\",\n    \"@types/react-test-renderer\": \"^18.3.1\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n    \"@typescript-eslint/parser\": \"^8.57.0\",\n    \"dotenv\": \"^16.6.1\",\n    \"esbuild\": \"^0.28.1\",\n    \"eslint\": \"^8.57.1\",\n    \"express\": \"^4.22.2\",\n    \"mollie-api-typescript\": \"1.12.25\",\n    \"next\": \"16.3.1\",\n    \"publint\": \"^0.3.23\",\n    \"react\": \"^18.3.1\",\n    \"react-dom\": \"^18.3.1\",\n    \"react-test-renderer\": \"^18.3.1\",\n    \"tsup\": \"^8.5.1\",\n    \"typescript\": \"^5.9.3\",\n    \"ultracite\": \"^7.9.4\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"exports\": {\n    \".\": {\n      \"browser\": {\n        \"types\": \"./dist/browser.d.ts\",\n        \"import\": \"./dist/browser.js\",\n        \"require\": \"./dist/browser.cjs\",\n        \"default\": \"./dist/browser.js\"\n      },\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.js\",\n      \"require\": \"./dist/index.cjs\",\n      \"default\": \"./dist/index.js\"\n    },\n    \"./auth/server\": {\n      \"types\": \"./dist/auth/server.d.ts\",\n      \"import\": \"./dist/auth/server.js\",\n      \"require\": \"./dist/auth/server.cjs\",\n      \"default\": \"./dist/auth/server.js\"\n    },\n    \"./admin\": {\n      \"types\": \"./dist/admin.d.ts\",\n      \"import\": \"./dist/admin.js\",\n      \"require\": \"./dist/admin.cjs\",\n      \"default\": \"./dist/admin.js\"\n    },\n    \"./billing\": {\n      \"types\": \"./dist/billing.d.ts\",\n      \"import\": \"./dist/billing.js\",\n      \"require\": \"./dist/billing.cjs\",\n      \"default\": \"./dist/billing.js\"\n    },\n    \"./browser\": {\n      \"types\": \"./dist/browser.d.ts\",\n      \"import\": \"./dist/browser.js\",\n      \"require\": \"./dist/browser.cjs\",\n      \"default\": \"./dist/browser.js\"\n    },\n    \"./cloudflare\": {\n      \"types\": \"./dist/cloudflare.d.ts\",\n      \"import\": \"./dist/cloudflare.js\",\n      \"require\": \"./dist/cloudflare.cjs\",\n      \"default\": \"./dist/cloudflare.js\"\n    },\n    \"./contracts\": {\n      \"types\": \"./dist/contracts.d.ts\",\n      \"import\": \"./dist/contracts.js\",\n      \"require\": \"./dist/contracts.cjs\",\n      \"default\": \"./dist/contracts.js\"\n    },\n    \"./contracts/v1\": {\n      \"types\": \"./dist/contracts/v1.d.ts\",\n      \"import\": \"./dist/contracts/v1.js\",\n      \"require\": \"./dist/contracts/v1.cjs\",\n      \"default\": \"./dist/contracts/v1.js\"\n    },\n    \"./cookies\": {\n      \"types\": \"./dist/cookies.d.ts\",\n      \"import\": \"./dist/cookies.js\",\n      \"require\": \"./dist/cookies.cjs\",\n      \"default\": \"./dist/cookies.js\"\n    },\n    \"./env\": {\n      \"types\": \"./dist/env.d.ts\",\n      \"import\": \"./dist/env.js\",\n      \"require\": \"./dist/env.cjs\",\n      \"default\": \"./dist/env.js\"\n    },\n    \"./email\": {\n      \"types\": \"./dist/email.d.ts\",\n      \"import\": \"./dist/email.js\",\n      \"require\": \"./dist/email.cjs\",\n      \"default\": \"./dist/email.js\"\n    },\n    \"./email/node\": {\n      \"types\": \"./dist/email/node.d.ts\",\n      \"import\": \"./dist/email/node.js\",\n      \"require\": \"./dist/email/node.cjs\",\n      \"default\": \"./dist/email/node.js\"\n    },\n    \"./next/client\": {\n      \"types\": \"./dist/next/client.d.ts\",\n      \"import\": \"./dist/next/client.js\",\n      \"require\": \"./dist/next/client.cjs\",\n      \"default\": \"./dist/next/client.js\"\n    },\n    \"./next/server\": {\n      \"types\": \"./dist/next/server.d.ts\",\n      \"import\": \"./dist/next/server.js\",\n      \"require\": \"./dist/next/server.cjs\",\n      \"default\": \"./dist/next/server.js\"\n    },\n    \"./next/session\": {\n      \"types\": \"./dist/next/session.d.ts\",\n      \"import\": \"./dist/next/session.js\",\n      \"require\": \"./dist/next/session.cjs\",\n      \"default\": \"./dist/next/session.js\"\n    },\n    \"./organization\": {\n      \"types\": \"./dist/organization.d.ts\",\n      \"import\": \"./dist/organization.js\",\n      \"require\": \"./dist/organization.cjs\",\n      \"default\": \"./dist/organization.js\"\n    },\n    \"./policy\": {\n      \"types\": \"./dist/policy.d.ts\",\n      \"import\": \"./dist/policy.js\",\n      \"require\": \"./dist/policy.cjs\",\n      \"default\": \"./dist/policy.js\"\n    },\n    \"./rights\": {\n      \"types\": \"./dist/rights.d.ts\",\n      \"import\": \"./dist/rights.js\",\n      \"require\": \"./dist/rights.cjs\",\n      \"default\": \"./dist/rights.js\"\n    },\n    \"./schema\": {\n      \"types\": \"./dist/schema.d.ts\",\n      \"import\": \"./dist/schema.js\",\n      \"require\": \"./dist/schema.cjs\",\n      \"default\": \"./dist/schema.js\"\n    },\n    \"./devtools\": {\n      \"types\": \"./dist/devtools.d.ts\",\n      \"import\": \"./dist/devtools.js\",\n      \"require\": \"./dist/devtools.cjs\",\n      \"default\": \"./dist/devtools.js\"\n    },\n    \"./package.json\": \"./package.json\",\n    \"./server\": {\n      \"types\": \"./dist/server.d.ts\",\n      \"import\": \"./dist/server.js\",\n      \"require\": \"./dist/server.cjs\",\n      \"default\": \"./dist/server.js\"\n    },\n    \"./runtime\": {\n      \"types\": \"./dist/runtime.d.ts\",\n      \"import\": \"./dist/runtime.js\",\n      \"require\": \"./dist/runtime.cjs\",\n      \"default\": \"./dist/runtime.js\"\n    },\n    \"./react\": {\n      \"types\": \"./dist/react.d.ts\",\n      \"import\": \"./dist/react.js\",\n      \"require\": \"./dist/react.cjs\",\n      \"default\": \"./dist/react.js\"\n    },\n    \"./react-native\": {\n      \"types\": \"./dist/react-native.d.ts\",\n      \"import\": \"./dist/react-native.js\",\n      \"require\": \"./dist/react-native.cjs\",\n      \"default\": \"./dist/react-native.js\"\n    },\n    \"./social-providers\": {\n      \"types\": \"./dist/social-providers.d.ts\",\n      \"import\": \"./dist/social-providers.js\",\n      \"require\": \"./dist/social-providers.cjs\",\n      \"default\": \"./dist/social-providers.js\"\n    },\n    \"./utils\": {\n      \"types\": \"./dist/utils.d.ts\",\n      \"import\": \"./dist/utils.js\",\n      \"require\": \"./dist/utils.cjs\",\n      \"default\": \"./dist/utils.js\"\n    },\n    \"./migrations\": {\n      \"types\": \"./dist/migrations.d.ts\",\n      \"import\": \"./dist/migrations.js\",\n      \"require\": \"./dist/migrations.cjs\",\n      \"default\": \"./dist/migrations.js\"\n    }\n  },\n  \"files\": [\n    \"dist\",\n    \"bin\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"keywords\": [\n    \"database\",\n    \"driver\",\n    \"api-gateway\",\n    \"sdk\",\n    \"react\",\n    \"hooks\",\n    \"http\",\n    \"postgres\",\n    \"query-builder\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.js\",\n  \"name\": \"@xylex-group/athena\",\n  \"peerDependencies\": {\n    \"@react-email/components\": \">=1.0.0\",\n    \"@react-email/render\": \">=2.0.0\",\n    \"mollie-api-typescript\": \">=1.12.25\",\n    \"next\": \">=15.0.0 <17\",\n    \"pg\": \">=8.0.0\",\n    \"react\": \">=17.0.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"@react-email/components\": {\n      \"optional\": true\n    },\n    \"@react-email/render\": {\n      \"optional\": true\n    },\n    \"mollie-api-typescript\": {\n      \"optional\": true\n    },\n    \"next\": {\n      \"optional\": true\n    },\n    \"pg\": {\n      \"optional\": true\n    },\n    \"react\": {\n      \"optional\": true\n    }\n  },\n  \"publisher\": \"XYLEX Group\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/xylex-group/athena.git\",\n    \"directory\": \"packages/athena-js\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/xylex-group/athena/issues\"\n  },\n  \"homepage\": \"https://github.com/xylex-group/athena/tree/main/packages/athena-js#readme\",\n  \"scripts\": {\n    \"prepack\": \"node scripts/strip-self-dependency-for-pack.mjs strip\",\n    \"postpack\": \"node scripts/strip-self-dependency-for-pack.mjs restore\",\n    \"build\": \"node scripts/tsup-build.mjs\",\n    \"check\": \"ultracite check && node scripts/check-structural-complexity.mjs\",\n    \"check:all\": \"pnpm lint && pnpm typecheck && pnpm build && pnpm test && pnpm test:browser-bundle && pnpm audit:rn && node scripts/check-structural-complexity.mjs\",\n    \"check:exports\": \"node scripts/inspect-package.mjs\",\n    \"check:publint\": \"publint\",\n    \"check:tarball\": \"node scripts/check-release-tarball.mjs\",\n    \"cli:dev\": \"node --import tsx src/cli/bin.ts\",\n    \"docs:check\": \"node scripts/check-docs-consistency.mjs\",\n    \"audit:runtime-boundaries\": \"node scripts/audit-runtime-boundaries.mjs\",\n    \"test:node-import\": \"node scripts/test-package-node-import.mjs\",\n    \"check:release\": \"pnpm lint && pnpm typecheck:all && pnpm test && pnpm build && pnpm test:browser-bundle && node scripts/audit-runtime-boundaries.mjs && node scripts/test-package-node-import.mjs && pnpm audit:rn && pnpm check:exports && pnpm check:publint && pnpm check:tarball && pnpm docs:check && node scripts/check-structural-complexity.mjs\",\n    \"dev\": \"node scripts/assert-published-dts.mjs && ATHENA_TSUP_WATCH=1 tsup --watch\",\n    \"docs:methods\": \"node scripts/generate-sdk-method-reference.mjs\",\n    \"generate:error-ir\": \"node scripts/generate-error-ir.mjs\",\n    \"docs:site:check\": \"pnpm --dir ../../apps/docs docs:sync-athena-js:check\",\n    \"docs:site:sync\": \"pnpm --dir ../../apps/docs docs:sync-athena-js\",\n    \"example:admin\": \"tsx examples/node/admin-permission.ts\",\n    \"example:auth-session\": \"tsx examples/node/auth-session.ts\",\n    \"example:billing\": \"tsx examples/node/billing.ts\",\n    \"example:cloudflare\": \"pnpm typecheck:examples\",\n    \"example:env\": \"tsx examples/node/env.ts\",\n    \"example:node\": \"tsx examples/node/create-client.ts\",\n    \"example:session\": \"tsc -p examples/session/tsconfig.json\",\n    \"example:storage\": \"tsx examples/node/storage.ts\",\n    \"fix\": \"ultracite fix\",\n    \"format\": \"ultracite fix\",\n    \"lint\": \"eslint \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n    \"lint:fix\": \"pnpm lint -- --fix\",\n    \"prepublishOnly\": \"pnpm release:verify\",\n    \"publish:token\": \"node scripts/publish.js\",\n    \"release:verify\": \"node scripts/verify-auth-schema-release.mjs && pnpm test:finality && pnpm test:tarball && pnpm test:examples\",\n    \"test\": \"node scripts/run-unit-tests.mjs\",\n    \"test:examples\": \"pnpm typecheck:examples && node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/examples-session.test.ts\",\n    \"test:finality\": \"node scripts/run-finality.mjs\",\n    \"test:tarball\": \"node scripts/check-release-tarball.mjs\",\n    \"test:react-native\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/react-native-adapter.test.ts\",\n    \"test:expo-fixture\": \"pnpm --dir test/fixtures/expo check\",\n    \"audit:consumer\": \"node scripts/audit-consumer-athena-usage.mjs\",\n    \"audit:rn\": \"node scripts/audit-rn-bundle-safety.mjs\",\n    \"test:browser-bundle\": \"node scripts/audit-browser-bundle-safety.mjs\",\n    \"test:integration:postgres\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/postgres-introspection.integration.test.ts test/postgres-direct-live.test.ts test/postgres-direct-live-ast.test.ts test/sdd/athena-local-runtime.live.test.ts test/sdd/athena-local-runtime.r6.test.ts test/sdd/athena-local-runtime.r7.test.ts test/sdd/athena-local-runtime.r7.live.test.ts test/sdd/speedrun-pg-finality.live.test.ts\",\n    \"test:policy-conformance\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/sdd/athena-local-runtime.r7.test.ts test/sdd/athena-local-runtime.r3.test.ts\",\n    \"auth:route-parity\": \"node scripts/auth-route-parity.mjs --print\",\n    \"test:parity\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/finality-parity-suite.test.ts test/finality-password-portability.test.ts test/finality-portability.test.ts test/admin-auth-parity.test.ts test/admin-auth-portability.test.ts test/auth-route-inventory.test.ts test/auth-embedded-tier-a.test.ts test/email-parity.test.ts\",\n    \"test:email-parity\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/email-parity.test.ts test/email-architecture.test.ts test/email-auth-injection.test.ts\",\n    \"test:parity:live\": \"node scripts/run-parity-live.mjs\",\n    \"test:embedded-next\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/finality-handlers-from-root.test.ts test/sdd/athena-local-runtime.r5.security.test.ts test/conformance/act-5-1-embedded.test.ts\",\n    \"test:query-ast\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/query-engine-*.test.ts test/postgres-compile-ast*.test.ts test/d1-compile-ast*.test.ts test/gateway-serialize-ast.test.ts test/query-ast.test.ts test/query-ast-act.test.ts test/query-ast-parity.test.ts\",\n    \"test:query-parity\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/query-ast-parity.test.ts test/query-ast-act.test.ts\",\n    \"test:conformance\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/conformance/**/*.test.ts\",\n    \"test:sdd\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/sdd/**/*.test.ts\",\n    \"test:watch\": \"node --import ./test/register-server-only.mjs --import tsx --test --watch test/*.test.ts test/sdd/**/*.test.ts\",\n    \"typecheck\": \"tsc -p tsconfig.typecheck.json\",\n    \"typecheck:examples\": \"tsc -p examples/cloudflare/tsconfig.json && tsc -p examples/node/tsconfig.json && tsc -p examples/session/tsconfig.json\",\n    \"typecheck:tests\": \"tsc -p tsconfig.full.json --noEmit\",\n    \"typecheck:all\": \"pnpm typecheck && pnpm typecheck:examples && pnpm typecheck:tests\",\n    \"test:migrations\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/migrations*.test.ts test/cli-migrate.test.ts\"\n  },\n  \"sideEffects\": false,\n  \"type\": \"module\",\n  \"types\": \"./dist/index.d.ts\",\n  \"typesVersions\": {\n    \"*\": {\n      \"*\": [\n        \"dist/index.d.ts\"\n      ],\n      \"admin\": [\n        \"dist/admin.d.ts\"\n      ],\n      \"auth/server\": [\n        \"dist/auth/server.d.ts\"\n      ],\n      \"billing\": [\n        \"dist/billing.d.ts\"\n      ],\n      \"browser\": [\n        \"dist/browser.d.ts\"\n      ],\n      \"cloudflare\": [\n        \"dist/cloudflare.d.ts\"\n      ],\n      \"contracts\": [\n        \"dist/contracts.d.ts\"\n      ],\n      \"contracts/v1\": [\n        \"dist/contracts/v1.d.ts\"\n      ],\n      \"cookies\": [\n        \"dist/cookies.d.ts\"\n      ],\n      \"env\": [\n        \"dist/env.d.ts\"\n      ],\n      \"email\": [\n        \"dist/email.d.ts\"\n      ],\n      \"email/node\": [\n        \"dist/email/node.d.ts\"\n      ],\n      \"next/client\": [\n        \"dist/next/client.d.ts\"\n      ],\n      \"next/server\": [\n        \"dist/next/server.d.ts\"\n      ],\n      \"next/session\": [\n        \"dist/next/session.d.ts\"\n      ],\n      \"organization\": [\n        \"dist/organization.d.ts\"\n      ],\n      \"policy\": [\n        \"dist/policy.d.ts\"\n      ],\n      \"server\": [\n        \"dist/server.d.ts\"\n      ],\n      \"runtime\": [\n        \"dist/runtime.d.ts\"\n      ],\n      \"rights\": [\n        \"dist/rights.d.ts\"\n      ],\n      \"devtools\": [\n        \"dist/devtools.d.ts\"\n      ],\n      \"react\": [\n        \"dist/react.d.ts\"\n      ],\n      \"react-native\": [\n        \"dist/react-native.d.ts\"\n      ],\n      \"social-providers\": [\n        \"dist/social-providers.d.ts\"\n      ],\n      \"utils\": [\n        \"dist/utils.d.ts\"\n      ],\n      \"migrations\": [\n        \"dist/migrations.d.ts\"\n      ]\n    }\n  },\n  \"version\": \"5.4.1\",\n  \"overrides\": {\n    \"brace-expansion@<1.1.18\": \"1.1.18\",\n    \"brace-expansion@>=5 <5.0.9\": \"5.0.9\",\n    \"flatted\": \">=3.4.4\",\n    \"minimatch@3\": \"3.1.3\",\n    \"picomatch\": \"4.0.4\",\n    \"rollup\": \">=4.59.0\"\n  },\n  \"packageManager\": \"pnpm@11.23.0\",\n  \"pnpm\": {\n    \"overrides\": {\n      \"brace-expansion@1\": \"1.1.18\",\n      \"brace-expansion@5\": \"5.0.9\",\n      \"flatted\": \">=3.4.4\",\n      \"minimatch@3\": \"3.1.3\",\n      \"picomatch@4\": \"4.0.4\",\n      \"rollup\": \">=4.59.0\",\n      \"ajv@6\": \"6.14.0\",\n      \"esbuild@0.27\": \"0.28.1\",\n      \"esbuild@0.28.0\": \"0.28.1\"\n    }\n  }\n}\n","import packageJson from \"../package.json\" with { type: \"json\" };\n\nexport const PACKAGE_VERSION = packageJson.version;\n\nexport function buildSdkHeaderValue(sdkName: string): string {\n  return `${sdkName} ${PACKAGE_VERSION}`;\n}\n","import { getSessionCookie } from \"../cookies/index.ts\";\nimport type { BackendOption } from \"../gateway/types.ts\";\n\nexport type AthenaRequestHeaderProfile =\n  | \"gateway\"\n  | \"auth\"\n  | \"chat\"\n  | \"storage\"\n  | \"minimal\";\n\nconst NO_CACHE_HEADER_VALUE = \"no-cache\";\n\nconst API_KEY_HEADER_CANDIDATES = [\n  \"X-Athena-Key\",\n  \"x-athena-key\",\n  \"X-Api-Key\",\n  \"x-api-key\",\n  \"apikey\",\n] as const;\nconst ATHENA_KEY_HEADER_CANDIDATES = [\"X-Athena-Key\", \"x-athena-key\"] as const;\nconst SESSION_TOKEN_HEADER_CANDIDATES = [\n  \"X-Athena-Auth-Session-Token\",\n] as const;\nconst BEARER_MIRROR_HEADER_CANDIDATES = [\"X-Athena-Auth-Bearer-Token\"] as const;\nconst CLIENT_HEADER_CANDIDATES = [\n  \"X-Athena-Client\",\n  \"x-athena-client\",\n] as const;\nconst PG_URI_HEADER_CANDIDATES = [\"x-pg-uri\"] as const;\nconst JDBC_URI_HEADER_CANDIDATES = [\"x-athena-jdbc-url\", \"x-jdbc-url\"] as const;\n\ninterface AthenaRequestHeaderProfileRules {\n  accept?: boolean;\n  apiKeys: boolean;\n  authBearer: boolean;\n  authMirror: boolean;\n  contentType?: boolean;\n  routing: boolean;\n  stripNullsDefault?: boolean;\n}\n\nconst PROFILE_RULES: Record<\n  AthenaRequestHeaderProfile,\n  AthenaRequestHeaderProfileRules\n> = {\n  auth: {\n    apiKeys: true,\n    authBearer: true,\n    authMirror: false,\n    contentType: true,\n    routing: true,\n  },\n  chat: {\n    accept: true,\n    apiKeys: true,\n    authBearer: true,\n    authMirror: true,\n    routing: true,\n  },\n  gateway: {\n    apiKeys: true,\n    authBearer: false,\n    authMirror: true,\n    contentType: true,\n    routing: true,\n    stripNullsDefault: true,\n  },\n  minimal: {\n    apiKeys: false,\n    authBearer: false,\n    authMirror: false,\n    routing: false,\n  },\n  storage: {\n    apiKeys: true,\n    authBearer: false,\n    authMirror: true,\n    contentType: true,\n    routing: true,\n  },\n};\n\nexport interface BuildAthenaRequestHeadersInput {\n  accept?: string | null;\n  apiKey?: string | null;\n  backend?: BackendOption;\n  bearerToken?: string | null;\n  callHeaders?: Record<string, string>;\n  client?: string | null;\n  configHeaders?: Record<string, string>;\n  contentType?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  jdbcUrl?: string | null;\n  organizationId?: string | null;\n  pgUri?: string | null;\n  profile: AthenaRequestHeaderProfile;\n  publishEvent?: string | null;\n  sdkHeaderValue: string;\n  sessionToken?: string | null;\n  stripNulls?: boolean;\n  userId?: string | null;\n}\n\n/** Shared config/call fields consumed by gateway, chat, auth, and `client.request(...)`. */\nexport interface AthenaRequestHeaderOverrideFields {\n  apiKey?: string | null;\n  backend?: BackendOption;\n  bearerToken?: string | null;\n  client?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  jdbcUrl?: string | null;\n  organizationId?: string | null;\n  pgUri?: string | null;\n  publishEvent?: string | null;\n  sessionToken?: string | null;\n  stripNulls?: boolean;\n  userId?: string | null;\n}\n\nexport type ResolvedRequestHeaderOverrides = Omit<\n  BuildAthenaRequestHeadersInput,\n  \"profile\" | \"sdkHeaderValue\" | \"contentType\" | \"accept\"\n>;\n\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\n  return value ? value : undefined;\n}\n\nfunction mergeExtraHeaders(\n  configHeaders?: Record<string, string>,\n  callHeaders?: Record<string, string>\n): Record<string, string> {\n  return { ...(configHeaders ?? {}), ...(callHeaders ?? {}) };\n}\n\nexport function hasHeaderIgnoreCase(\n  headers: Record<string, string>,\n  targetKey: string\n): boolean {\n  const normalizedTargetKey = targetKey.toLowerCase();\n  return Object.keys(headers).some(\n    (key) => key.toLowerCase() === normalizedTargetKey\n  );\n}\n\nexport function resolveHeaderValue(\n  headers: Record<string, string>,\n  candidates: readonly string[]\n): string | undefined {\n  for (const candidate of candidates) {\n    const direct = normalizeHeaderValue(headers[candidate]);\n    if (direct) {\n      return direct;\n    }\n  }\n\n  const loweredCandidates = new Set(\n    candidates.map((candidate) => candidate.toLowerCase())\n  );\n  for (const [key, value] of Object.entries(headers)) {\n    if (!loweredCandidates.has(key.toLowerCase())) {\n      continue;\n    }\n    const normalized = normalizeHeaderValue(value);\n    if (normalized) {\n      return normalized;\n    }\n  }\n  return undefined;\n}\n\nfunction isCacheControlHeaderName(name: string): boolean {\n  return name.toLowerCase() === \"cache-control\";\n}\n\nfunction normalizeBearerToken(value: string): string {\n  const trimmed = value.trim();\n  const match = trimmed.match(/^Bearer\\s+(.+)$/i);\n  return match?.[1]?.trim() ?? trimmed;\n}\n\nfunction resolveBearerTokenFromAuthorizationHeader(\n  headers: Record<string, string>\n): string | undefined {\n  const authorization = resolveHeaderValue(headers, [\"Authorization\"]);\n  if (!authorization) {\n    return undefined;\n  }\n\n  const token = normalizeBearerToken(authorization);\n  return token ? token : undefined;\n}\n\nfunction resolveSessionTokenFromCookieHeader(\n  headers: Record<string, string>\n): string | undefined {\n  const cookie = resolveHeaderValue(headers, [\"Cookie\"]);\n  if (!cookie) {\n    return undefined;\n  }\n\n  return getSessionCookie(new Headers({ cookie })) ?? undefined;\n}\n\nfunction resolveBackendType(backend?: BackendOption): string | undefined {\n  if (!backend) {\n    return undefined;\n  }\n  return typeof backend === \"string\" ? backend : backend.type;\n}\n\nexport function resolveRequestHeaderOverrides(\n  config: AthenaRequestHeaderOverrideFields,\n  options?: AthenaRequestHeaderOverrideFields,\n  defaults?: Pick<AthenaRequestHeaderOverrideFields, \"client\" | \"stripNulls\">\n): ResolvedRequestHeaderOverrides {\n  return {\n    apiKey: options?.apiKey ?? config.apiKey,\n    backend: options?.backend ?? config.backend,\n    bearerToken: options?.bearerToken ?? config.bearerToken,\n    callHeaders: options?.headers,\n    client: options?.client ?? config.client ?? defaults?.client,\n    configHeaders: config.headers,\n    cookie: options?.cookie ?? config.cookie,\n    forceNoCache: Boolean(config.forceNoCache || options?.forceNoCache),\n    jdbcUrl: options?.jdbcUrl ?? config.jdbcUrl,\n    organizationId: options?.organizationId ?? config.organizationId,\n    pgUri: options?.pgUri ?? config.pgUri,\n    publishEvent: options?.publishEvent ?? config.publishEvent,\n    sessionToken: options?.sessionToken ?? config.sessionToken,\n    stripNulls:\n      options?.stripNulls ?? config.stripNulls ?? defaults?.stripNulls,\n    userId: options?.userId ?? config.userId,\n  };\n}\n\nexport function buildServiceRequestHeaders(\n  profile: Exclude<AthenaRequestHeaderProfile, \"minimal\">,\n  sdkHeaderValue: string,\n  config: AthenaRequestHeaderOverrideFields,\n  options?: AthenaRequestHeaderOverrideFields,\n  extras?: Pick<BuildAthenaRequestHeadersInput, \"contentType\" | \"accept\"> & {\n    client?: string | null;\n    stripNulls?: boolean;\n  }\n): Record<string, string> {\n  const rules = PROFILE_RULES[profile];\n  return buildAthenaRequestHeaders({\n    profile,\n    sdkHeaderValue,\n    ...resolveRequestHeaderOverrides(config, options, {\n      client: extras?.client ?? undefined,\n      stripNulls:\n        extras?.stripNulls ?? (rules.stripNullsDefault ? true : undefined),\n    }),\n    accept: extras?.accept ?? (rules.accept ? \"application/json\" : undefined),\n    contentType:\n      extras?.contentType ??\n      (rules.contentType ? \"application/json\" : undefined),\n  });\n}\n\nexport function applyAthenaApiKeyHeaders(\n  headers: Record<string, string>,\n  apiKey?: string | null\n): void {\n  const resolvedApiKey = normalizeHeaderValue(apiKey);\n  if (resolvedApiKey && !hasHeaderIgnoreCase(headers, \"X-Athena-Key\")) {\n    headers[\"X-Athena-Key\"] = resolvedApiKey;\n  }\n}\n\nexport function applyAthenaAuthContextHeaders(\n  headers: Record<string, string>,\n  input: Pick<\n    BuildAthenaRequestHeadersInput,\n    | \"bearerToken\"\n    | \"cookie\"\n    | \"sessionToken\"\n    | \"profile\"\n    | \"configHeaders\"\n    | \"callHeaders\"\n  >\n): void {\n  const mergedExtraHeaders = mergeExtraHeaders(\n    input.configHeaders,\n    input.callHeaders\n  );\n  const rules = PROFILE_RULES[input.profile];\n  const explicitCookie = normalizeHeaderValue(input.cookie);\n  if (explicitCookie) {\n    mergedExtraHeaders.Cookie = explicitCookie;\n  }\n\n  const explicitSessionToken =\n    normalizeHeaderValue(input.sessionToken) ??\n    resolveHeaderValue(mergedExtraHeaders, SESSION_TOKEN_HEADER_CANDIDATES);\n  const derivedSessionToken =\n    explicitSessionToken ??\n    resolveSessionTokenFromCookieHeader(mergedExtraHeaders);\n  const cookieFromHeaders = resolveHeaderValue(mergedExtraHeaders, [\"Cookie\"]);\n\n  if (explicitCookie && !hasHeaderIgnoreCase(headers, \"Cookie\")) {\n    headers.Cookie = explicitCookie;\n  } else if (cookieFromHeaders && !hasHeaderIgnoreCase(headers, \"Cookie\")) {\n    headers.Cookie = cookieFromHeaders;\n  }\n\n  const explicitBearerToken = (() => {\n    const configured = normalizeHeaderValue(input.bearerToken);\n    if (configured) {\n      return normalizeBearerToken(configured);\n    }\n    const mirrored = resolveHeaderValue(\n      mergedExtraHeaders,\n      BEARER_MIRROR_HEADER_CANDIDATES\n    );\n    return mirrored ? normalizeBearerToken(mirrored) : undefined;\n  })();\n  const derivedBearerToken =\n    explicitBearerToken ??\n    resolveBearerTokenFromAuthorizationHeader(mergedExtraHeaders);\n\n  if (\n    rules.authBearer &&\n    derivedBearerToken &&\n    !hasHeaderIgnoreCase(headers, \"Authorization\")\n  ) {\n    headers.Authorization = `Bearer ${derivedBearerToken}`;\n  }\n\n  if (rules.authMirror) {\n    if (\n      derivedSessionToken &&\n      !hasHeaderIgnoreCase(headers, \"X-Athena-Auth-Session-Token\")\n    ) {\n      headers[\"X-Athena-Auth-Session-Token\"] = derivedSessionToken;\n    }\n    if (\n      derivedBearerToken &&\n      !hasHeaderIgnoreCase(headers, \"X-Athena-Auth-Bearer-Token\")\n    ) {\n      headers[\"X-Athena-Auth-Bearer-Token\"] = derivedBearerToken;\n    }\n  } else if (\n    derivedSessionToken &&\n    !hasHeaderIgnoreCase(headers, \"X-Athena-Auth-Session-Token\")\n  ) {\n    headers[\"X-Athena-Auth-Session-Token\"] = derivedSessionToken;\n  }\n}\n\nexport function applyAthenaPgUriHeaders(\n  headers: Record<string, string>,\n  input: Pick<\n    BuildAthenaRequestHeadersInput,\n    \"pgUri\" | \"jdbcUrl\" | \"configHeaders\" | \"callHeaders\"\n  >\n): void {\n  const mergedExtraHeaders = mergeExtraHeaders(\n    input.configHeaders,\n    input.callHeaders\n  );\n\n  const pgUri =\n    normalizeHeaderValue(input.pgUri) ??\n    resolveHeaderValue(mergedExtraHeaders, PG_URI_HEADER_CANDIDATES);\n  if (pgUri && !hasHeaderIgnoreCase(headers, \"x-pg-uri\")) {\n    headers[\"x-pg-uri\"] = pgUri;\n  }\n\n  const jdbcUrl =\n    normalizeHeaderValue(input.jdbcUrl) ??\n    resolveHeaderValue(mergedExtraHeaders, JDBC_URI_HEADER_CANDIDATES);\n  if (jdbcUrl) {\n    if (!hasHeaderIgnoreCase(headers, \"x-athena-jdbc-url\")) {\n      headers[\"x-athena-jdbc-url\"] = jdbcUrl;\n    }\n    if (!hasHeaderIgnoreCase(headers, \"x-jdbc-url\")) {\n      headers[\"x-jdbc-url\"] = jdbcUrl;\n    }\n  }\n}\n\n/**\n * Minimal gateway/data request headers used by many apps before they adopt\n * the full {@link buildAthenaRequestHeaders} profile model.\n *\n * Additive convenience — does not replace client-built headers. Prefer\n * `createClient({ client, key })` so the SDK sets these on every call.\n */\nexport function buildAthenaGatewayHeaders(input: {\n  clientName?: string | null;\n  gatewayKey?: string | null;\n  headers?: Record<string, string | null | undefined>;\n}): Record<string, string> {\n  const trimmedClientName = input.clientName?.trim();\n  const trimmedGatewayKey = input.gatewayKey?.trim();\n  const merged: Record<string, string | null | undefined> = {\n    ...(trimmedClientName\n      ? {\n          \"X-Athena-Client\": trimmedClientName,\n        }\n      : {}),\n    ...(trimmedGatewayKey\n      ? {\n          \"X-Api-Key\": trimmedGatewayKey,\n          \"X-Athena-Key\": trimmedGatewayKey,\n        }\n      : {}),\n    ...input.headers,\n  };\n\n  return Object.fromEntries(\n    Object.entries(merged).flatMap(([key, value]) =>\n      typeof value === \"string\" && value.trim()\n        ? ([[key, value.trim()]] as const)\n        : []\n    )\n  );\n}\n\nexport function buildAthenaRequestHeaders(\n  input: BuildAthenaRequestHeadersInput\n): Record<string, string> {\n  const forceNoCache = Boolean(input.forceNoCache);\n  const mergedExtraHeaders = mergeExtraHeaders(\n    input.configHeaders,\n    input.callHeaders\n  );\n  const rules = PROFILE_RULES[input.profile];\n\n  const headerClient = resolveHeaderValue(\n    mergedExtraHeaders,\n    CLIENT_HEADER_CANDIDATES\n  );\n  const finalClient = normalizeHeaderValue(input.client) ?? headerClient;\n  const finalApiKey =\n    normalizeHeaderValue(input.apiKey) ??\n    resolveHeaderValue(mergedExtraHeaders, API_KEY_HEADER_CANDIDATES);\n  const finalAthenaKey =\n    resolveHeaderValue(mergedExtraHeaders, ATHENA_KEY_HEADER_CANDIDATES) ??\n    finalApiKey;\n\n  const headers: Record<string, string> = {\n    \"X-Athena-Sdk\": input.sdkHeaderValue,\n  };\n\n  if (rules.contentType) {\n    headers[\"Content-Type\"] = input.contentType ?? \"application/json\";\n  }\n\n  if (input.accept ?? rules.accept) {\n    headers.Accept = input.accept ?? \"application/json\";\n  }\n\n  if (rules.routing) {\n    if (normalizeHeaderValue(input.userId)) {\n      headers[\"X-User-Id\"] = input.userId ?? \"\";\n    }\n    if (normalizeHeaderValue(input.organizationId)) {\n      headers[\"X-Organization-Id\"] = input.organizationId ?? \"\";\n    }\n    if (finalClient) {\n      headers[\"X-Athena-Client\"] = finalClient;\n    }\n\n    const backendType = resolveBackendType(input.backend);\n    if (backendType) {\n      headers[\"X-Backend-Type\"] = backendType;\n    }\n\n    if (typeof input.stripNulls === \"boolean\") {\n      headers[\"X-Strip-Nulls\"] = input.stripNulls ? \"true\" : \"false\";\n    } else if (rules.stripNullsDefault) {\n      headers[\"X-Strip-Nulls\"] = \"true\";\n    }\n\n    if (normalizeHeaderValue(input.publishEvent)) {\n      headers[\"X-Publish-Event\"] = input.publishEvent ?? \"\";\n    }\n  }\n\n  if (rules.apiKeys && (finalApiKey || finalAthenaKey)) {\n    applyAthenaApiKeyHeaders(headers, finalAthenaKey);\n  }\n\n  applyAthenaAuthContextHeaders(headers, input);\n  applyAthenaPgUriHeaders(headers, input);\n\n  const reservedClientHeaderKeys = new Set(\n    CLIENT_HEADER_CANDIDATES.map((key) => key.toLowerCase())\n  );\n  for (const [key, value] of Object.entries(mergedExtraHeaders)) {\n    if (reservedClientHeaderKeys.has(key.toLowerCase())) {\n      continue;\n    }\n    if (forceNoCache && isCacheControlHeaderName(key)) {\n      continue;\n    }\n    const normalized = normalizeHeaderValue(value);\n    if (normalized) {\n      headers[key] = normalized;\n    }\n  }\n\n  if (forceNoCache) {\n    headers[\"Cache-Control\"] = NO_CACHE_HEADER_VALUE;\n  }\n\n  return headers;\n}\n","import { normalizeAthenaGatewayBaseUrl } from \"../../../gateway/url.ts\";\nimport { buildSdkHeaderValue } from \"../../../sdk-version.ts\";\nimport {\n\tbuildAthenaRequestHeaders,\n\thasHeaderIgnoreCase,\n} from \"../../../utils/athena-request-headers.ts\";\nimport { AthenaBillingError } from \"../../errors.ts\";\n\nconst SDK_NAME = \"xylex-group/athena-billing\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\n\nexport type AthenaBillingHttpMethod = \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n\nexport type AthenaBillingJson =\n\t| null\n\t| boolean\n\t| number\n\t| string\n\t| AthenaBillingJson[]\n\t| { [key: string]: AthenaBillingJson };\n\nexport interface AthenaBillingCallOptions {\n\tapiKey?: string | null;\n\theaders?: Record<string, string>;\n\tsignal?: AbortSignal;\n}\n\nexport interface AthenaBillingClientConfig {\n\tapiKey: string;\n\tbaseUrl: string;\n\tclient?: string | null;\n\tfetchImpl?: typeof fetch;\n\theaders?: Record<string, string>;\n}\n\nexport interface AthenaBillingEnvelope<T = unknown> {\n\tdata: T;\n\tmessage?: string;\n\tstatus?: string;\n}\n\nexport function withPathParam(\n\tpath: string,\n\tname: string,\n\tvalue: string,\n): string {\n\treturn path.replace(`{${name}}`, encodeURIComponent(value));\n}\n\nexport function appendQuery(\n\tpath: string,\n\tquery?: Record<string, string | number | boolean | null | undefined>,\n): string {\n\tif (!query) {\n\t\treturn path;\n\t}\n\tconst params = new URLSearchParams();\n\tfor (const [key, value] of Object.entries(query)) {\n\t\tif (value === undefined || value === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tparams.set(key, String(value));\n\t}\n\tconst serialized = params.toString();\n\treturn serialized ? `${path}?${serialized}` : path;\n}\n\nexport function parseEnvelopeData<T>(body: unknown): T {\n\tif (body && typeof body === \"object\" && \"data\" in body) {\n\t\treturn (body as AthenaBillingEnvelope<T>).data;\n\t}\n\treturn undefined as T;\n}\n\nexport interface BillingHttpTransport {\n\tcall<T>(\n\t\tmethod: AthenaBillingHttpMethod,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t\toptions?: AthenaBillingCallOptions,\n\t\tresponseType?: \"json\" | \"text\",\n\t): Promise<T>;\n}\n\nexport function createBillingHttpTransport(\n\tconfig: AthenaBillingClientConfig,\n): BillingHttpTransport {\n\tconst baseUrl = normalizeAthenaGatewayBaseUrl(config.baseUrl, {\n\t\tlabel: \"Athena billing base URL\",\n\t});\n\tconst fetchImpl =\n\t\tconfig.fetchImpl ??\n\t\t((input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]) =>\n\t\t\tglobalThis.fetch(input, init));\n\n\tasync function call<T>(\n\t\tmethod: AthenaBillingHttpMethod,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t\toptions?: AthenaBillingCallOptions,\n\t\tresponseType: \"json\" | \"text\" = \"json\",\n\t): Promise<T> {\n\t\tconst headers = buildAthenaRequestHeaders({\n\t\t\tapiKey: options?.apiKey ?? config.apiKey,\n\t\t\tcallHeaders: options?.headers,\n\t\t\tclient: config.client,\n\t\t\tconfigHeaders: {\n\t\t\t\t...(config.headers ?? {}),\n\t\t\t},\n\t\t\tcontentType: \"application/json\",\n\t\t\tprofile: \"gateway\",\n\t\t\tsdkHeaderValue: SDK_HEADER_VALUE,\n\t\t});\n\n\t\tlet requestBody: BodyInit | undefined;\n\t\tif (body !== undefined && body !== null) {\n\t\t\tif (\n\t\t\t\ttypeof body === \"string\" ||\n\t\t\t\tbody instanceof Blob ||\n\t\t\t\tbody instanceof ArrayBuffer ||\n\t\t\t\tArrayBuffer.isView(body) ||\n\t\t\t\tbody instanceof FormData ||\n\t\t\t\tbody instanceof URLSearchParams\n\t\t\t) {\n\t\t\t\trequestBody = body as BodyInit;\n\t\t\t} else {\n\t\t\t\trequestBody = JSON.stringify(body);\n\t\t\t\tif (!hasHeaderIgnoreCase(headers, \"Content-Type\")) {\n\t\t\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst targetUrl = `${baseUrl}${path.startsWith(\"/\") ? path : `/${path}`}`;\n\t\tconst response = await fetchImpl(targetUrl, {\n\t\t\tbody: requestBody,\n\t\t\theaders,\n\t\t\tmethod,\n\t\t\tsignal: options?.signal,\n\t\t});\n\n\t\tif (responseType === \"text\") {\n\t\t\tconst text = await response.text();\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new AthenaBillingError({\n\t\t\t\t\tbody: text,\n\t\t\t\t\tendpoint: path,\n\t\t\t\t\tmessage: `Billing request failed (${response.status})`,\n\t\t\t\t\tmethod,\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn text as T;\n\t\t}\n\n\t\tconst rawText = await response.text();\n\t\tlet parsed: unknown = rawText;\n\t\tif (rawText) {\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(rawText);\n\t\t\t} catch {\n\t\t\t\tparsed = rawText;\n\t\t\t}\n\t\t} else {\n\t\t\tparsed = null;\n\t\t}\n\n\t\tif (!response.ok) {\n\t\t\tconst message =\n\t\t\t\tparsed &&\n\t\t\t\ttypeof parsed === \"object\" &&\n\t\t\t\t\"message\" in parsed &&\n\t\t\t\ttypeof (parsed as { message: unknown }).message === \"string\"\n\t\t\t\t\t? (parsed as { message: string }).message\n\t\t\t\t\t: `Billing request failed (${response.status})`;\n\t\t\tthrow new AthenaBillingError({\n\t\t\t\tbody: parsed,\n\t\t\t\tendpoint: path,\n\t\t\t\tmessage,\n\t\t\t\tmethod,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t}\n\n\t\treturn parseEnvelopeData<T>(parsed);\n\t}\n\n\treturn { call };\n}\n","/**\n * Athena billing HTTP client for live `/billing/v1/*`, `/admin/billing/*`,\n * provider webhook, and `/debug/billing` routes.\n *\n * Methods map 1:1 onto the registered Actix handlers. Auth uses the static\n * Athena admin key (`X-Athena-Key` / configured API key) matching the server\n * `authorize_static_admin_key` gate.\n *\n * Contract spine: `billingSdkManifest` METHOD+path entries must match the\n * permanent Rust inventory `athena_billing::LIVE_HTTP_ROUTES`\n * (exported as `./live-http-routes.json`). Export with\n * `cargo run -p athena-billing --bin billing-contract-spine -- --write`.\n */\n\nimport type { BillingCapabilities } from \"./runtime/capabilities.ts\";\nimport { projectRemoteBillingCapabilities } from \"./runtime/remote/project-capabilities.ts\";\nimport {\n\tcreateRemoteBillingRuntime,\n\trejectMissingRemoteConnectionId,\n\trejectUnenforcedRemoteProfileTarget,\n\trejectUnsupportedRemotePaymentListPaging,\n} from \"./runtime/remote/runtime.ts\";\nimport {\n\ttype AthenaBillingCallOptions,\n\ttype AthenaBillingClientConfig,\n\ttype AthenaBillingJson,\n\tappendQuery,\n\tcreateBillingHttpTransport,\n\twithPathParam,\n} from \"./runtime/remote/transport.ts\";\nimport type {\n\tBillingAdminPort,\n\tBillingCatalogPort,\n\tBillingCheckoutPort,\n\tBillingCustomerPort,\n\tBillingInvoicePort,\n\tBillingPaymentLinkPort,\n\tBillingPaymentPort,\n\tBillingRefundPort,\n\tBillingSelfPort,\n\tBillingSubscriptionPort,\n\tBillingWebhookPort,\n} from \"./runtime/types.ts\";\nimport type { BillingExecutionTarget } from \"./types.ts\";\n\nexport { AthenaBillingError } from \"./errors.ts\";\nexport type {\n\tAthenaBillingCallOptions,\n\tAthenaBillingClientConfig,\n\tAthenaBillingEnvelope,\n\tAthenaBillingHttpMethod,\n\tAthenaBillingJson,\n} from \"./runtime/remote/transport.ts\";\n\nexport interface BillingConnectionRefInput {\n\tclientName?: string;\n\tconnectionId: string;\n}\n\nexport interface BillingListQuery extends BillingConnectionRefInput {\n\tcursor?: string;\n\tlimit?: number;\n\toffset?: number;\n\tsource?: \"provider\" | \"persistence\" | string;\n}\n\nexport interface BillingEnsureCustomerInput extends BillingConnectionRefInput {\n\temail?: string | null;\n\tidempotencyKey: string;\n\tmetadata?: Record<string, AthenaBillingJson>;\n\tname?: string | null;\n}\n\nexport interface BillingUpdateCustomerInput extends BillingConnectionRefInput {\n\temail?: string | null;\n\tname?: string | null;\n}\n\nexport interface BillingCreateConnectionInput {\n\tconfig?: Record<string, AthenaBillingJson>;\n\tcredentialKind?: string;\n\tmetadata?: Record<string, AthenaBillingJson>;\n\tmode?: string;\n\townerId: string;\n\townerKind: string;\n\tprovider: string;\n\tproviderAccountId: string;\n\tproviderProfileId?: string | null;\n\tscopes?: string[];\n\tstatus?: string;\n}\n\nexport interface BillingUpdateConnectionInput {\n\tconfig?: Record<string, AthenaBillingJson>;\n\tcredentialKind?: string;\n\tmetadata?: Record<string, AthenaBillingJson>;\n\tmode?: string;\n\tproviderAccountId?: string;\n\tproviderProfileId?: string | null;\n\tscopes?: string[];\n\tstatus?: string;\n}\n\nexport interface BillingReconcileInput {\n\tcustomerId?: string | null;\n\tresourceId: string;\n\tresourceKind: string;\n}\n\nexport interface BillingProvisionSinksInput {\n\tinstance?: string;\n\ttargetSchema?: string;\n}\n\nexport const billingSdkManifest = {\n\tenvelopeKind: \"athena\",\n\tmethods: [\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"getCapabilities\",\n\t\t\tpath: \"/billing/v1/capabilities\",\n\t\t},\n\t\t{ method: \"POST\", name: \"createCheckout\", path: \"/billing/v1/checkouts\" },\n\t\t{ method: \"GET\", name: \"listProducts\", path: \"/billing/v1/products\" },\n\t\t{ method: \"GET\", name: \"listPrices\", path: \"/billing/v1/prices\" },\n\t\t{ method: \"GET\", name: \"listCustomers\", path: \"/billing/v1/customers\" },\n\t\t{ method: \"POST\", name: \"createCustomer\", path: \"/billing/v1/customers\" },\n\t\t{ method: \"GET\", name: \"getCustomer\", path: \"/billing/v1/customers/{id}\" },\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updateCustomer\",\n\t\t\tpath: \"/billing/v1/customers/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"deleteCustomer\",\n\t\t\tpath: \"/billing/v1/customers/{id}\",\n\t\t},\n\t\t{ method: \"GET\", name: \"listPayments\", path: \"/billing/v1/payments\" },\n\t\t{ method: \"POST\", name: \"createPayment\", path: \"/billing/v1/payments\" },\n\t\t{ method: \"GET\", name: \"getPayment\", path: \"/billing/v1/payments/{id}\" },\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"cancelPayment\",\n\t\t\tpath: \"/billing/v1/payments/{id}/cancel\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listPaymentLinks\",\n\t\t\tpath: \"/billing/v1/payment-links\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"createPaymentLink\",\n\t\t\tpath: \"/billing/v1/payment-links\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"getPaymentLink\",\n\t\t\tpath: \"/billing/v1/payment-links/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updatePaymentLink\",\n\t\t\tpath: \"/billing/v1/payment-links/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"deletePaymentLink\",\n\t\t\tpath: \"/billing/v1/payment-links/{id}\",\n\t\t},\n\t\t{ method: \"GET\", name: \"listRefunds\", path: \"/billing/v1/refunds\" },\n\t\t{ method: \"POST\", name: \"createRefund\", path: \"/billing/v1/refunds\" },\n\t\t{ method: \"GET\", name: \"getRefund\", path: \"/billing/v1/refunds/{id}\" },\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"cancelRefund\",\n\t\t\tpath: \"/billing/v1/refunds/{id}/cancel\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listSubscriptions\",\n\t\t\tpath: \"/billing/v1/subscriptions\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"createSubscription\",\n\t\t\tpath: \"/billing/v1/subscriptions\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"getSubscription\",\n\t\t\tpath: \"/billing/v1/subscriptions/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updateSubscription\",\n\t\t\tpath: \"/billing/v1/subscriptions/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"cancelSubscription\",\n\t\t\tpath: \"/billing/v1/subscriptions/{id}/cancel\",\n\t\t},\n\t\t{ method: \"GET\", name: \"listInvoices\", path: \"/billing/v1/invoices\" },\n\t\t{ method: \"GET\", name: \"getInvoice\", path: \"/billing/v1/invoices/{id}\" },\n\t\t{ method: \"GET\", name: \"listWebhooks\", path: \"/billing/v1/webhooks\" },\n\t\t{ method: \"POST\", name: \"createWebhook\", path: \"/billing/v1/webhooks\" },\n\t\t{ method: \"GET\", name: \"getWebhook\", path: \"/billing/v1/webhooks/{id}\" },\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updateWebhook\",\n\t\t\tpath: \"/billing/v1/webhooks/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"deleteWebhook\",\n\t\t\tpath: \"/billing/v1/webhooks/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"testWebhook\",\n\t\t\tpath: \"/billing/v1/webhooks/{id}/test\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listConnections\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"createConnection\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"getConnection\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updateConnection\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"deleteConnection\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"reconcileDocument\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listWebhookEvents\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/webhook-events\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"provisionWebhookSinks\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/webhook-sinks/provision\",\n\t\t},\n\t\t{ method: \"GET\", name: \"listGrants\", path: \"/admin/billing/grants\" },\n\t\t{ method: \"GET\", name: \"listProviders\", path: \"/admin/billing/providers\" },\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listSinkHelpers\",\n\t\t\tpath: \"/admin/webhook-sinks/helpers/billing\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"ingestProviderWebhook\",\n\t\t\tpath: \"/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook\",\n\t\t},\n\t\t{ method: \"GET\", name: \"getDebugBilling\", path: \"/debug/billing\" },\n\t],\n\tnamespace: \"billing\",\n} as const;\n\nfunction connectionQuery(\n\tinput: BillingListQuery | BillingConnectionRefInput,\n): Record<string, string> {\n\tconst query: Record<string, string> = {\n\t\tconnectionId: input.connectionId,\n\t};\n\tif (input.clientName) {\n\t\tquery.clientName = input.clientName;\n\t}\n\tif (\"cursor\" in input && input.cursor) {\n\t\tquery.cursor = input.cursor;\n\t}\n\tif (\"source\" in input && input.source) {\n\t\tquery.source = input.source;\n\t}\n\tif (\"limit\" in input && input.limit !== undefined) {\n\t\tquery.limit = String(input.limit);\n\t}\n\tif (\"offset\" in input && input.offset !== undefined) {\n\t\tquery.offset = String(input.offset);\n\t}\n\treturn query;\n}\n\nexport interface AthenaBillingModule {\n\tcancelPayment: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcancelRefund: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcancelSubscription: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateCheckout: (\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateConnection: (\n\t\tclientName: string,\n\t\tinput: BillingCreateConnectionInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateCustomer: (\n\t\tinput: BillingEnsureCustomerInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreatePayment: (\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tpayments: BillingPaymentPort;\n\tcustomers: BillingCustomerPort;\n\trefunds: BillingRefundPort;\n\tpaymentLinks: BillingPaymentLinkPort;\n\tsubscriptions: BillingSubscriptionPort;\n\tinvoices: BillingInvoicePort;\n\twebhooks: BillingWebhookPort;\n\tcatalog: BillingCatalogPort;\n\tcheckout: BillingCheckoutPort;\n\tself: BillingSelfPort;\n\tadmin: BillingAdminPort;\n\tcreatePaymentLink: (\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateRefund: (\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateSubscription: (\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateWebhook: (\n\t\tinput: BillingConnectionRefInput,\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tdeleteConnection: (\n\t\tclientName: string,\n\t\tconnectionId: string,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tdeleteCustomer: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tdeletePaymentLink: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tdeleteWebhook: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetCapabilities: (\n\t\tinput: BillingExecutionTarget,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<BillingCapabilities>;\n\tgetConnection: (\n\t\tclientName: string,\n\t\tconnectionId: string,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetCustomer: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetDebugBilling: (\n\t\tjwtSecret: string,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<string>;\n\tgetInvoice: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetPayment: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetPaymentLink: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetRefund: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetSubscription: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetWebhook: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tingestProviderWebhook: (\n\t\tinput: {\n\t\t\tprovider: string;\n\t\t\tclientName: string;\n\t\t\tconnectionId: string;\n\t\t\tbody: BodyInit | Record<string, unknown> | string;\n\t\t\tsignatureHeaders?: Record<string, string>;\n\t\t},\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistConnections: (\n\t\tclientName: string,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistCustomers: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistGrants: (options?: AthenaBillingCallOptions) => Promise<unknown>;\n\tlistInvoices: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistPaymentLinks: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistPayments: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistPrices: (\n\t\tinput: BillingConnectionRefInput & { productId?: string },\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistProducts: (\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistProviders: (options?: AthenaBillingCallOptions) => Promise<unknown>;\n\tlistRefunds: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistSinkHelpers: (\n\t\tquery?: { targetSchema?: string; instance?: string },\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistSubscriptions: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistWebhookEvents: (\n\t\tclientName: string,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistWebhooks: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tprovisionWebhookSinks: (\n\t\tclientName: string,\n\t\tinput?: BillingProvisionSinksInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\treconcileDocument: (\n\t\tclientName: string,\n\t\tconnectionId: string,\n\t\tinput: BillingReconcileInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\ttestWebhook: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tupdateConnection: (\n\t\tclientName: string,\n\t\tconnectionId: string,\n\t\tinput: BillingUpdateConnectionInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tupdateCustomer: (\n\t\tid: string,\n\t\tinput: BillingUpdateCustomerInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tupdatePaymentLink: (\n\t\tid: string,\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tupdateSubscription: (\n\t\tid: string,\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tupdateWebhook: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n}\n\n/**\n * @deprecated Prefer `createClient().billing` (root Athena client).\n * This factory remains for internal composition and Node/gateway call sites.\n * It sends the static Athena API key (`X-Athena-Key`). Do not import it from\n * `@xylex-group/athena/browser` or instantiate it in a browser bundle.\n */\nexport function createBillingModule(\n\tconfig: AthenaBillingClientConfig,\n): AthenaBillingModule {\n\tconst { call } = createBillingHttpTransport(config);\n\tconst remoteRuntime = createRemoteBillingRuntime(config);\n\n\treturn {\n\t\tcancelPayment(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/payments/{id}/cancel\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\t{},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tcancelRefund(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/refunds/{id}/cancel\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\t{},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tcancelSubscription(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/subscriptions/{id}/cancel\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\t{},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tcreateCheckout(body, options) {\n\t\t\treturn call(\"POST\", \"/billing/v1/checkouts\", body, options);\n\t\t},\n\t\tcreateConnection(clientName, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\twithPathParam(\n\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections\",\n\t\t\t\t\t\"client_name\",\n\t\t\t\t\tclientName,\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tconfig: input.config,\n\t\t\t\t\tcredentialKind: input.credentialKind,\n\t\t\t\t\tmetadata: input.metadata,\n\t\t\t\t\tmode: input.mode,\n\t\t\t\t\townerId: input.ownerId,\n\t\t\t\t\townerKind: input.ownerKind,\n\t\t\t\t\tprovider: input.provider,\n\t\t\t\t\tproviderAccountId: input.providerAccountId,\n\t\t\t\t\tproviderProfileId: input.providerProfileId,\n\t\t\t\t\tscopes: input.scopes,\n\t\t\t\t\tstatus: input.status,\n\t\t\t\t},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tcreateCustomer(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\t\"/billing/v1/customers\",\n\t\t\t\t{\n\t\t\t\t\tclientName: input.clientName,\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\temail: input.email,\n\t\t\t\t\tidempotencyKey: input.idempotencyKey,\n\t\t\t\t\tmetadata: input.metadata ?? {},\n\t\t\t\t\tname: input.name,\n\t\t\t\t},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tcreatePayment(body, options) {\n\t\t\treturn call(\"POST\", \"/billing/v1/payments\", body, options);\n\t\t},\n\t\tpayments: remoteRuntime.payments,\n\t\tcustomers: remoteRuntime.customers,\n\t\trefunds: remoteRuntime.refunds,\n\t\tpaymentLinks: remoteRuntime.paymentLinks,\n\t\tsubscriptions: remoteRuntime.subscriptions,\n\t\tinvoices: remoteRuntime.invoices,\n\t\twebhooks: remoteRuntime.webhooks,\n\t\tcatalog: {\n\t\t\tprices: remoteRuntime.prices,\n\t\t\tproducts: remoteRuntime.products,\n\t\t},\n\t\tcheckout: remoteRuntime.checkout,\n\t\tself: remoteRuntime.self,\n\t\tadmin: remoteRuntime.admin,\n\t\tcreatePaymentLink(body, options) {\n\t\t\treturn call(\"POST\", \"/billing/v1/payment-links\", body, options);\n\t\t},\n\t\tcreateRefund(body, options) {\n\t\t\treturn call(\"POST\", \"/billing/v1/refunds\", body, options);\n\t\t},\n\t\tcreateSubscription(body, options) {\n\t\t\treturn call(\"POST\", \"/billing/v1/subscriptions\", body, options);\n\t\t},\n\t\tcreateWebhook(input, body, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n\t\t\t\tbody,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tdeleteConnection(clientName, connectionId, options) {\n\t\t\treturn call(\n\t\t\t\t\"DELETE\",\n\t\t\t\twithPathParam(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t\t\t\t\t\"client_name\",\n\t\t\t\t\t\tclientName,\n\t\t\t\t\t),\n\t\t\t\t\t\"connection_id\",\n\t\t\t\t\tconnectionId,\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tdeleteCustomer(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"DELETE\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tdeletePaymentLink(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"DELETE\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tdeleteWebhook(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"DELETE\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tasync getCapabilities(input, options) {\n\t\t\trejectUnenforcedRemoteProfileTarget(input, \"getCapabilities\");\n\t\t\trejectMissingRemoteConnectionId(input, \"getCapabilities\");\n\t\t\tconst query: Record<string, string> = {};\n\t\t\tif (input.connectionId != null) {\n\t\t\t\tquery.connectionId = input.connectionId;\n\t\t\t}\n\t\t\tif (input.clientName != null) {\n\t\t\t\tquery.clientName = input.clientName;\n\t\t\t}\n\t\t\tif (input.provider != null) {\n\t\t\t\tquery.provider = String(input.provider);\n\t\t\t}\n\t\t\tconst data = await call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/capabilities\", query),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\treturn projectRemoteBillingCapabilities(data, input.connectionId ?? \"\");\n\t\t},\n\t\tgetConnection(clientName, connectionId, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\twithPathParam(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t\t\t\t\t\"client_name\",\n\t\t\t\t\t\tclientName,\n\t\t\t\t\t),\n\t\t\t\t\t\"connection_id\",\n\t\t\t\t\tconnectionId,\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetCustomer(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetDebugBilling(jwtSecret, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/debug/billing\", { jwt_secret: jwtSecret }),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t\t\"text\",\n\t\t\t);\n\t\t},\n\t\tgetInvoice(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/invoices/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetPayment(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/payments/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetPaymentLink(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetRefund(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/refunds/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetSubscription(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/subscriptions/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetWebhook(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tingestProviderWebhook(input, options) {\n\t\t\tconst path = withPathParam(\n\t\t\t\twithPathParam(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook\",\n\t\t\t\t\t\t\"provider\",\n\t\t\t\t\t\tinput.provider,\n\t\t\t\t\t),\n\t\t\t\t\t\"client_name\",\n\t\t\t\t\tinput.clientName,\n\t\t\t\t),\n\t\t\t\t\"connection_id\",\n\t\t\t\tinput.connectionId,\n\t\t\t);\n\t\t\treturn call(\"POST\", path, input.body, {\n\t\t\t\t...options,\n\t\t\t\theaders: {\n\t\t\t\t\t...(options?.headers ?? {}),\n\t\t\t\t\t...(input.signatureHeaders ?? {}),\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tlistConnections(clientName, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\twithPathParam(\n\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections\",\n\t\t\t\t\t\"client_name\",\n\t\t\t\t\tclientName,\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistCustomers(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/customers\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistGrants(options) {\n\t\t\treturn call(\"GET\", \"/admin/billing/grants\", undefined, options);\n\t\t},\n\t\tlistInvoices(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/invoices\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistPaymentLinks(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/payment-links\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tasync listPayments(input, options) {\n\t\t\trejectUnsupportedRemotePaymentListPaging(input);\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/payments\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistPrices(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/prices\", {\n\t\t\t\t\t...connectionQuery(input),\n\t\t\t\t\t...(input.productId ? { productId: input.productId } : {}),\n\t\t\t\t}),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistProducts(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/products\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistProviders(options) {\n\t\t\treturn call(\"GET\", \"/admin/billing/providers\", undefined, options);\n\t\t},\n\t\tlistRefunds(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/refunds\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistSinkHelpers(query, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/admin/webhook-sinks/helpers/billing\", {\n\t\t\t\t\tinstance: query?.instance,\n\t\t\t\t\ttargetSchema: query?.targetSchema,\n\t\t\t\t}),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistSubscriptions(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/subscriptions\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistWebhookEvents(clientName, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\twithPathParam(\n\t\t\t\t\t\"/admin/billing/clients/{client_name}/webhook-events\",\n\t\t\t\t\t\"client_name\",\n\t\t\t\t\tclientName,\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistWebhooks(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tprovisionWebhookSinks(clientName, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/admin/billing/clients/{client_name}/webhook-sinks/provision\",\n\t\t\t\t\t\t\"client_name\",\n\t\t\t\t\t\tclientName,\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tinstance: input?.instance,\n\t\t\t\t\t\ttargetSchema: input?.targetSchema,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t{},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\treconcileDocument(clientName, connectionId, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\twithPathParam(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile\",\n\t\t\t\t\t\t\"client_name\",\n\t\t\t\t\t\tclientName,\n\t\t\t\t\t),\n\t\t\t\t\t\"connection_id\",\n\t\t\t\t\tconnectionId,\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tcustomerId: input.customerId,\n\t\t\t\t\tresourceId: input.resourceId,\n\t\t\t\t\tresourceKind: input.resourceKind,\n\t\t\t\t},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\ttestWebhook(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}/test\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\t{},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdateConnection(clientName, connectionId, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"PATCH\",\n\t\t\t\twithPathParam(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t\t\t\t\t\"client_name\",\n\t\t\t\t\t\tclientName,\n\t\t\t\t\t),\n\t\t\t\t\t\"connection_id\",\n\t\t\t\t\tconnectionId,\n\t\t\t\t),\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdateCustomer(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"PATCH\",\n\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n\t\t\t\t{\n\t\t\t\t\tclientName: input.clientName,\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\temail: input.email,\n\t\t\t\t\tname: input.name,\n\t\t\t\t},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdatePaymentLink(id, body, options) {\n\t\t\treturn call(\n\t\t\t\t\"PATCH\",\n\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n\t\t\t\tbody,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdateSubscription(id, body, options) {\n\t\t\treturn call(\n\t\t\t\t\"PATCH\",\n\t\t\t\twithPathParam(\"/billing/v1/subscriptions/{id}\", \"id\", id),\n\t\t\t\tbody,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdateWebhook(id, input, body, options) {\n\t\t\treturn call(\n\t\t\t\t\"PATCH\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tbody,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t};\n}\n","export const ATHENA_BILLING_RETURN_QUERY = \"athena_billing_return\";\n\nexport function appendBillingReturnToken(url: string, token: string): string {\n\tconst parsed = new URL(url);\n\tparsed.searchParams.set(ATHENA_BILLING_RETURN_QUERY, token);\n\treturn parsed.href;\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/** P0 local Chat: in-process created/updated only. Not interchangeable with remote WSS. */\nexport const LOCAL_CHAT_CAPABILITIES: AthenaChatCapabilities = Object.freeze({\n\trealtime: Object.freeze({\n\t\tcrossProcess: false,\n\t\tmessageDeletes: false,\n\t\tmessageUpdates: true,\n\t\tmessages: true,\n\t\tpresence: false,\n\t\treactions: false,\n\t\treplayPersisted: false,\n\t\tresumable: true,\n\t\ttyping: false,\n\t\twebsocket: false,\n\t}),\n\ttransport: \"local\",\n});\n\nexport const REMOTE_CHAT_CAPABILITIES: AthenaChatCapabilities = Object.freeze({\n\trealtime: Object.freeze({\n\t\tcrossProcess: true,\n\t\tmessageDeletes: true,\n\t\tmessageUpdates: true,\n\t\tmessages: true,\n\t\tpresence: true,\n\t\treactions: true,\n\t\treplayPersisted: true,\n\t\tresumable: true,\n\t\ttyping: true,\n\t\twebsocket: true,\n\t}),\n\ttransport: \"remote\",\n});\n","import { parseHttpResponseBody as parseResponseBody } from \"../../http/parse-response-body.ts\";\nimport { buildSdkHeaderValue } from \"../../sdk-version.ts\";\nimport { buildServiceRequestHeaders } from \"../../utils/athena-request-headers.ts\";\nimport { REMOTE_CHAT_CAPABILITIES } from \"../capabilities.ts\";\nimport type {\n\tAthenaChatAddMembersRequest,\n\tAthenaChatAddReactionRequest,\n\tAthenaChatCallOptions,\n\tAthenaChatConnectOptions,\n\tAthenaChatCreateRoomRequest,\n\tAthenaChatDeleteResult,\n\tAthenaChatEditMessageRequest,\n\tAthenaChatListMessagesQuery,\n\tAthenaChatListRoomsQuery,\n\tAthenaChatMarkReadUpToRequest,\n\tAthenaChatMember,\n\tAthenaChatMessage,\n\tAthenaChatMessageCreatedResponse,\n\tAthenaChatMessagePage,\n\tAthenaChatModule,\n\tAthenaChatReactionSummary,\n\tAthenaChatReadCursor,\n\tAthenaChatRealtimeConnection,\n\tAthenaChatRealtimeInfoResponse,\n\tAthenaChatRealtimeModule,\n\tAthenaChatRemoveResult,\n\tAthenaChatResolveDirectRoomRequest,\n\tAthenaChatResumeRoomCursor,\n\tAthenaChatRoom,\n\tAthenaChatRoomCreatedResponse,\n\tAthenaChatRoomPage,\n\tAthenaChatSearchMessagesRequest,\n\tAthenaChatSearchPage,\n\tAthenaChatSendMessageRequest,\n\tAthenaChatUpdateRoomRequest,\n\tAthenaChatWebSocketFactory,\n\tAthenaChatWebSocketLike,\n\tAthenaChatWsClientCommand,\n\tAthenaChatWsServerEvent,\n} from \"../types.ts\";\n\nconst SDK_NAME = \"xylex-group/athena-chat\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\nexport class AthenaChatError extends Error {\n\tstatus: number;\n\tendpoint: string;\n\tmethod: string;\n\trequestId?: string;\n\tbody: unknown;\n\n\tconstructor(input: {\n\t\tmessage: string;\n\t\tstatus: number;\n\t\tendpoint: string;\n\t\tmethod: string;\n\t\trequestId?: string;\n\t\tbody: unknown;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaChatError\";\n\t\tthis.status = input.status;\n\t\tthis.endpoint = input.endpoint;\n\t\tthis.method = input.method;\n\t\tthis.requestId = input.requestId;\n\t\tthis.body = input.body;\n\t}\n}\n\nexport interface AthenaChatClientConfig {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tbearerToken?: string;\n\tclient?: string;\n\tcookie?: string;\n\tforceNoCache?: boolean;\n\theaders?: Record<string, string>;\n\trealtimeInfoUrl?: string;\n\tsessionToken?: string;\n\twebSocketFactory?: AthenaChatWebSocketFactory;\n\twsUrl?: string;\n}\n\nexport interface InternalChatModuleRuntimeOptions {\n\tresolveCallOptions?: () =>\n\t\t| AthenaChatCallOptions\n\t\t| undefined\n\t\t| Promise<AthenaChatCallOptions | undefined>;\n}\n\nfunction deriveRealtimeInfoUrl(wsUrl?: string): string | undefined {\n\tif (!wsUrl) {\n\t\treturn;\n\t}\n\n\tconst parsed = new URL(normalizeWsUrl(wsUrl, \"Athena chat WebSocket URL\"));\n\tparsed.protocol = parsed.protocol === \"wss:\" ? \"https:\" : \"http:\";\n\tparsed.pathname = parsed.pathname.replace(/\\/wss\\/gateway$/, \"/wss/info\");\n\treturn parsed.toString();\n}\n\nfunction normalizeWsUrl(value: string, label: string): string {\n\tconst normalized = value.trim();\n\tif (!normalized) {\n\t\tthrow new Error(`${label} is required.`);\n\t}\n\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(normalized);\n\t} catch (error) {\n\t\tthrow new Error(`${label} must be a valid absolute ws(s) URL.`, {\n\t\t\tcause: error,\n\t\t});\n\t}\n\n\tif (parsed.protocol !== \"ws:\" && parsed.protocol !== \"wss:\") {\n\t\tthrow new Error(`${label} must use ws or wss.`);\n\t}\n\n\tparsed.pathname = parsed.pathname.replace(/\\/+$/, \"\");\n\treturn parsed.toString().replace(/\\/$/, \"\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n\treturn (\n\t\theaders.get(\"x-request-id\") ??\n\t\theaders.get(\"x-correlation-id\") ??\n\t\theaders.get(\"x-athena-request-id\") ??\n\t\tundefined\n\t);\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n\tif (isRecord(payload)) {\n\t\tfor (const candidate of [payload.error, payload.message, payload.details]) {\n\t\t\tif (typeof candidate === \"string\" && candidate.trim().length > 0) {\n\t\t\t\treturn candidate.trim();\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof payload === \"string\" && payload.trim().length > 0) {\n\t\treturn payload.trim();\n\t}\n\n\treturn fallback;\n}\n\nfunction encodePathSegment(value: string, label: string): string {\n\tconst normalized = value.trim();\n\tif (!normalized) {\n\t\tthrow new Error(`${label} is required.`);\n\t}\n\treturn encodeURIComponent(normalized);\n}\n\nfunction encodeQuery(query?: Record<string, unknown>): string {\n\tif (!query) {\n\t\treturn \"\";\n\t}\n\n\tconst params = new URLSearchParams();\n\tfor (const [key, value] of Object.entries(query)) {\n\t\tif (value === undefined || value === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const item of value) {\n\t\t\t\tif (item !== undefined && item !== null) {\n\t\t\t\t\tparams.append(key, String(item));\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tparams.set(key, String(value));\n\t}\n\n\tconst encoded = params.toString();\n\treturn encoded ? `?${encoded}` : \"\";\n}\n\nfunction createSocket(\n\tfactory: AthenaChatWebSocketFactory,\n\turl: string,\n\tprotocols?: string | string[],\n): AthenaChatWebSocketLike {\n\ttry {\n\t\treturn new (\n\t\t\tfactory as new (\n\t\t\t\tsocketUrl: string,\n\t\t\t\tsocketProtocols?: string | string[],\n\t\t\t) => AthenaChatWebSocketLike\n\t\t)(url, protocols);\n\t} catch (error) {\n\t\tif (error instanceof TypeError) {\n\t\t\treturn (\n\t\t\t\tfactory as (\n\t\t\t\t\tsocketUrl: string,\n\t\t\t\t\tsocketProtocols?: string | string[],\n\t\t\t\t) => AthenaChatWebSocketLike\n\t\t\t)(url, protocols);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction buildHeaders(\n\tconfig: AthenaChatClientConfig,\n\toptions?: AthenaChatCallOptions,\n): Record<string, string> {\n\treturn buildServiceRequestHeaders(\"chat\", SDK_HEADER_VALUE, config, options);\n}\n\nfunction withJsonBody(init: RequestInit, body: unknown): RequestInit {\n\treturn {\n\t\t...init,\n\t\tbody: body === undefined ? undefined : JSON.stringify(body),\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t...(init.headers as Record<string, string>),\n\t\t},\n\t};\n}\n\n/** Coalesce concurrent identical GET chat reads (method+url+auth scope). */\nconst inflightGetRequests = new Map<string, Promise<unknown>>();\n\nfunction headerIgnoreCase(\n\theaders: Record<string, string>,\n\tname: string,\n): string {\n\tconst target = name.toLowerCase();\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tif (key.toLowerCase() === target && value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction chatGetInflightKey(\n\tmethod: string,\n\turl: string,\n\theaders: Record<string, string>,\n): string {\n\t// Include every response-scoping credential so concurrent session-token\n\t// callers on a shared SDK never share one in-flight GET promise.\n\tconst auth =\n\t\theaderIgnoreCase(headers, \"Authorization\") ||\n\t\theaderIgnoreCase(headers, \"Cookie\") ||\n\t\t\"\";\n\tconst sessionToken =\n\t\theaderIgnoreCase(headers, \"X-Athena-Auth-Session-Token\") || \"\";\n\tconst bearerMirror =\n\t\theaderIgnoreCase(headers, \"X-Athena-Auth-Bearer-Token\") || \"\";\n\tconst apiKey =\n\t\theaderIgnoreCase(headers, \"x-api-key\") ||\n\t\theaderIgnoreCase(headers, \"X-Api-Key\") ||\n\t\theaderIgnoreCase(headers, \"x-athena-api-key\") ||\n\t\theaderIgnoreCase(headers, \"X-Athena-Key\") ||\n\t\t\"\";\n\tconst client =\n\t\theaderIgnoreCase(headers, \"x-athena-client\") ||\n\t\theaderIgnoreCase(headers, \"X-Athena-Client\") ||\n\t\theaderIgnoreCase(headers, \"x-client\") ||\n\t\t\"\";\n\treturn `${method}\\n${url}\\n${auth}\\n${sessionToken}\\n${bearerMirror}\\n${apiKey}\\n${client}`;\n}\n\nasync function request<T>(\n\tconfig: AthenaChatClientConfig,\n\truntimeOptions: InternalChatModuleRuntimeOptions,\n\tmethod: string,\n\tendpoint: string,\n\toptions?: AthenaChatCallOptions,\n\tbody?: unknown,\n): Promise<T> {\n\tif (!config.baseUrl) {\n\t\tthrow new Error(\n\t\t\t\"Athena chat base URL is not configured. Pass createClient({ url }) for unified routing or set chat.url explicitly.\",\n\t\t);\n\t}\n\t// Deterministic single URL — never progressive path probing.\n\tconst url = `${config.baseUrl}${endpoint}`;\n\tconst contextOptions = await runtimeOptions.resolveCallOptions?.();\n\tconst resolvedOptions = {\n\t\t...contextOptions,\n\t\t...options,\n\t\theaders:\n\t\t\tcontextOptions?.headers || options?.headers\n\t\t\t\t? { ...(contextOptions?.headers ?? {}), ...(options?.headers ?? {}) }\n\t\t\t\t: undefined,\n\t};\n\tconst headers = buildHeaders(config, resolvedOptions);\n\tconst init: RequestInit = {\n\t\theaders,\n\t\tmethod,\n\t\tsignal: resolvedOptions.signal,\n\t};\n\tconst finalInit =\n\t\tbody === undefined || method === \"GET\" ? init : withJsonBody(init, body);\n\n\tconst execute = async (): Promise<T> => {\n\t\tconst response = await fetch(url, finalInit);\n\t\tconst rawText = await response.text();\n\t\tconst { parsed } = parseResponseBody(\n\t\t\trawText,\n\t\t\tresponse.headers.get(\"content-type\"),\n\t\t);\n\n\t\tif (!response.ok) {\n\t\t\tthrow new AthenaChatError({\n\t\t\t\tbody: parsed,\n\t\t\t\tendpoint,\n\t\t\t\tmessage: resolveErrorMessage(\n\t\t\t\t\tparsed,\n\t\t\t\t\t`Athena chat ${method} ${endpoint} failed with ${response.status}`,\n\t\t\t\t),\n\t\t\t\tmethod,\n\t\t\t\trequestId: resolveRequestId(response.headers),\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t}\n\n\t\treturn parsed as T;\n\t};\n\n\tif (method === \"GET\" && body === undefined) {\n\t\t// Per-call AbortSignal must keep independent cancellation semantics —\n\t\t// do not coalesce signaled requests onto another caller's promise.\n\t\tif (resolvedOptions.signal) {\n\t\t\treturn execute();\n\t\t}\n\t\tconst key = chatGetInflightKey(method, url, headers);\n\t\tconst existing = inflightGetRequests.get(key);\n\t\tif (existing) {\n\t\t\treturn existing as Promise<T>;\n\t\t}\n\t\tconst pending = execute().finally(() => {\n\t\t\tif (inflightGetRequests.get(key) === pending) {\n\t\t\t\tinflightGetRequests.delete(key);\n\t\t\t}\n\t\t});\n\t\tinflightGetRequests.set(key, pending);\n\t\treturn pending;\n\t}\n\n\treturn execute();\n}\n\nfunction unwrapEnvelopeData<T extends { data: unknown }>(\n\tpayload: T,\n): T[\"data\"] {\n\treturn payload.data;\n}\n\nfunction createRealtimeConnection(\n\tconfig: AthenaChatClientConfig,\n\toptions?: AthenaChatConnectOptions,\n): AthenaChatRealtimeConnection {\n\tif (!config.wsUrl) {\n\t\tthrow new Error(\n\t\t\t\"Athena chat WebSocket URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.\",\n\t\t);\n\t}\n\n\tconst wsFactory =\n\t\tconfig.webSocketFactory ??\n\t\t(globalThis as unknown as { WebSocket?: AthenaChatWebSocketFactory })\n\t\t\t.WebSocket;\n\n\tif (!wsFactory) {\n\t\tthrow new Error(\n\t\t\t\"No WebSocket implementation is available. Provide chat.webSocketFactory in createClient() or run in a runtime with global WebSocket support.\",\n\t\t);\n\t}\n\n\tconst socket = createSocket(wsFactory, config.wsUrl, options?.protocols);\n\n\tconst send = (command: AthenaChatWsClientCommand) => {\n\t\tsocket.send(JSON.stringify(command));\n\t};\n\n\tif (options?.onMessage) {\n\t\tconst listener = (event: unknown) => {\n\t\t\tconst messageEvent = event as { data?: unknown };\n\t\t\tconst raw = messageEvent?.data;\n\t\t\tif (typeof raw !== \"string\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\toptions.onMessage?.(\n\t\t\t\t\tJSON.parse(raw) as AthenaChatWsServerEvent | Record<string, unknown>,\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\toptions.onMessage?.({\n\t\t\t\t\terror: \"Invalid JSON message from Athena chat realtime gateway.\",\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tif (typeof socket.addEventListener === \"function\") {\n\t\t\tsocket.addEventListener(\"message\", listener);\n\t\t} else {\n\t\t\tsocket.onmessage = listener as AthenaChatWebSocketLike[\"onmessage\"];\n\t\t}\n\t}\n\n\tconst hello = (command?: {\n\t\ttoken?: string | null;\n\t\troom_subscriptions?: string[] | null;\n\t}) => {\n\t\tsend({\n\t\t\troom_subscriptions: command?.room_subscriptions,\n\t\t\ttoken: command?.token,\n\t\t\ttype: \"auth.hello\",\n\t\t});\n\t};\n\n\tif (options?.hello) {\n\t\tconst onOpen = () =>\n\t\t\thello({\n\t\t\t\troom_subscriptions: options.hello?.room_subscriptions ?? undefined,\n\t\t\t\ttoken: options.hello?.token ?? undefined,\n\t\t\t});\n\t\tif (typeof socket.addEventListener === \"function\") {\n\t\t\tsocket.addEventListener(\"open\", onOpen);\n\t\t} else {\n\t\t\tsocket.onopen = onOpen;\n\t\t}\n\t}\n\n\treturn {\n\t\tclose(code, reason) {\n\t\t\tsocket.close(code, reason);\n\t\t},\n\t\thello,\n\t\tping(at = new Date().toISOString()) {\n\t\t\tsend({\n\t\t\t\tat,\n\t\t\t\ttype: \"ping\",\n\t\t\t});\n\t\t},\n\t\tpresenceHeartbeat(activeRoomId) {\n\t\t\tsend({\n\t\t\t\tactive_room_id: activeRoomId ?? undefined,\n\t\t\t\ttype: \"chat.presence.heartbeat\",\n\t\t\t});\n\t\t},\n\t\treadUpTo(roomId, input) {\n\t\t\tsend({\n\t\t\t\tmessage_id: input?.message_id ?? undefined,\n\t\t\t\troom_id: roomId,\n\t\t\t\tseq: input?.seq ?? undefined,\n\t\t\t\ttype: \"chat.read.up_to\",\n\t\t\t});\n\t\t},\n\t\tresume(rooms: AthenaChatResumeRoomCursor[]) {\n\t\t\tsend({\n\t\t\t\trooms,\n\t\t\t\ttype: \"chat.resume\",\n\t\t\t});\n\t\t},\n\t\tsend,\n\t\tsocket,\n\t\tsubscribe(roomId, fromSeq) {\n\t\t\tsend({\n\t\t\t\tfrom_seq: fromSeq ?? undefined,\n\t\t\t\troom_id: roomId,\n\t\t\t\ttype: \"chat.subscribe\",\n\t\t\t});\n\t\t},\n\t\ttypingStart(roomId) {\n\t\t\tsend({\n\t\t\t\troom_id: roomId,\n\t\t\t\ttype: \"chat.typing.start\",\n\t\t\t});\n\t\t},\n\t\ttypingStop(roomId) {\n\t\t\tsend({\n\t\t\t\troom_id: roomId,\n\t\t\t\ttype: \"chat.typing.stop\",\n\t\t\t});\n\t\t},\n\t\tunsubscribe(roomId) {\n\t\t\tsend({\n\t\t\t\troom_id: roomId,\n\t\t\t\ttype: \"chat.unsubscribe\",\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createRemoteChatRuntime(\n\tconfig: AthenaChatClientConfig,\n\truntimeOptions: InternalChatModuleRuntimeOptions = {},\n): AthenaChatModule {\n\tconst call = <T>(\n\t\tmethod: string,\n\t\tendpoint: string,\n\t\toptions?: AthenaChatCallOptions,\n\t\tbody?: unknown,\n\t): Promise<T> =>\n\t\trequest<T>(config, runtimeOptions, method, endpoint, options, body);\n\n\tconst realtime: AthenaChatRealtimeModule = {\n\t\tconnect(options) {\n\t\t\treturn createRealtimeConnection(config, options);\n\t\t},\n\t\tinfo(options) {\n\t\t\tconst realtimeInfoUrl =\n\t\t\t\tconfig.realtimeInfoUrl ?? deriveRealtimeInfoUrl(config.wsUrl);\n\t\t\tif (!realtimeInfoUrl) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Athena chat realtime info URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn request<AthenaChatRealtimeInfoResponse>(\n\t\t\t\t{\n\t\t\t\t\t...config,\n\t\t\t\t\tbaseUrl: realtimeInfoUrl,\n\t\t\t\t},\n\t\t\t\truntimeOptions,\n\t\t\t\t\"GET\",\n\t\t\t\t\"\",\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t};\n\n\treturn {\n\t\tcapabilities: REMOTE_CHAT_CAPABILITIES,\n\t\tmessage: {\n\t\t\treaction: {\n\t\t\t\tadd(\n\t\t\t\t\tmessageId: string,\n\t\t\t\t\tinput: AthenaChatAddReactionRequest,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatReactionSummary>(\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t\t`/messages/${encodePathSegment(messageId, \"chat message ID\")}/reactions`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tremove(\n\t\t\t\t\tmessageId: string,\n\t\t\t\t\temoji: string,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatReactionSummary>(\n\t\t\t\t\t\t\"DELETE\",\n\t\t\t\t\t\t`/messages/${encodePathSegment(messageId, \"chat message ID\")}/reactions/${encodePathSegment(emoji, \"reaction emoji\")}`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\tsearch(\n\t\t\t\tinput: AthenaChatSearchMessagesRequest,\n\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t) {\n\t\t\t\treturn call<AthenaChatSearchPage>(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t\"/messages/search\",\n\t\t\t\t\toptions,\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\trealtime,\n\t\troom: {\n\t\t\tarchive(roomId: string, options?: AthenaChatCallOptions) {\n\t\t\t\treturn call<AthenaChatRoom>(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/archive`,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t\tcreate(\n\t\t\t\tinput: AthenaChatCreateRoomRequest,\n\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t) {\n\t\t\t\treturn call<AthenaChatRoomCreatedResponse>(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t\"/rooms\",\n\t\t\t\t\toptions,\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t\tresolveDirect(\n\t\t\t\tinput: AthenaChatResolveDirectRoomRequest,\n\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t) {\n\t\t\t\treturn call<AthenaChatRoom>(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t\"/rooms/direct/resolve\",\n\t\t\t\t\toptions,\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t\tget(roomId: string, options?: AthenaChatCallOptions) {\n\t\t\t\treturn call<AthenaChatRoom>(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}`,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t\tlist(query?: AthenaChatListRoomsQuery, options?: AthenaChatCallOptions) {\n\t\t\t\treturn call<AthenaChatRoomPage>(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\t`/rooms${encodeQuery(query as Record<string, unknown> | undefined)}`,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t\tmember: {\n\t\t\t\tadd(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tinput: AthenaChatAddMembersRequest,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatMember[]>(\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tlist(roomId: string, options?: AthenaChatCallOptions) {\n\t\t\t\t\treturn call<AthenaChatMember[]>(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tremove(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tuserId: string,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatRemoveResult>(\n\t\t\t\t\t\t\"DELETE\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members/${encodePathSegment(userId, \"chat user ID\")}`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\tmessage: {\n\t\t\t\tdelete(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tmessageId: string,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatDeleteResult>(\n\t\t\t\t\t\t\"DELETE\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages/${encodePathSegment(messageId, \"chat message ID\")}`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tlist(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tquery?: AthenaChatListMessagesQuery,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatMessagePage>(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages${encodeQuery(query as Record<string, unknown> | undefined)}`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsend(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tinput: AthenaChatSendMessageRequest,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatMessageCreatedResponse>(\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tupdate(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tmessageId: string,\n\t\t\t\t\tinput: AthenaChatEditMessageRequest,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatMessage>(\n\t\t\t\t\t\t\"PATCH\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages/${encodePathSegment(messageId, \"chat message ID\")}`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\treadCursor: {\n\t\t\t\tupTo(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tinput?: AthenaChatMarkReadUpToRequest,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatReadCursor>(\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/read-cursor`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tinput ?? {},\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\tupdate(\n\t\t\t\troomId: string,\n\t\t\t\tinput: AthenaChatUpdateRoomRequest,\n\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t) {\n\t\t\t\treturn call<AthenaChatRoom>(\n\t\t\t\t\t\"PATCH\",\n\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}`,\n\t\t\t\t\toptions,\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport const createChatModule = createRemoteChatRuntime;\n\nexport const chatSdkManifest = {\n\tbasePath: \"/chat\",\n\tmethods: [\n\t\t{ method: \"GET\", name: \"listRooms\", path: \"/chat/rooms\" },\n\t\t{ method: \"POST\", name: \"createRoom\", path: \"/chat/rooms\" },\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"resolveDirectRoom\",\n\t\t\tpath: \"/chat/rooms/direct/resolve\",\n\t\t},\n\t\t{ method: \"GET\", name: \"getRoom\", path: \"/chat/rooms/{room_id}\" },\n\t\t{ method: \"PATCH\", name: \"updateRoom\", path: \"/chat/rooms/{room_id}\" },\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"archiveRoom\",\n\t\t\tpath: \"/chat/rooms/{room_id}/archive\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listRoomMessages\",\n\t\t\tpath: \"/chat/rooms/{room_id}/messages\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"sendRoomMessage\",\n\t\t\tpath: \"/chat/rooms/{room_id}/messages\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updateRoomMessage\",\n\t\t\tpath: \"/chat/rooms/{room_id}/messages/{message_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"deleteRoomMessage\",\n\t\t\tpath: \"/chat/rooms/{room_id}/messages/{message_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"advanceReadCursor\",\n\t\t\tpath: \"/chat/rooms/{room_id}/read-cursor\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listRoomMembers\",\n\t\t\tpath: \"/chat/rooms/{room_id}/members\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"addRoomMembers\",\n\t\t\tpath: \"/chat/rooms/{room_id}/members\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"removeRoomMember\",\n\t\t\tpath: \"/chat/rooms/{room_id}/members/{user_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"addReaction\",\n\t\t\tpath: \"/chat/messages/{message_id}/reactions\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"removeReaction\",\n\t\t\tpath: \"/chat/messages/{message_id}/reactions/{emoji}\",\n\t\t},\n\t\t{ method: \"POST\", name: \"searchMessages\", path: \"/chat/messages/search\" },\n\t\t{ method: \"GET\", name: \"getRealtimeInfo\", path: \"/wss/info\" },\n\t\t{ method: \"GET\", name: \"connectRealtime\", path: \"/wss/gateway\" },\n\t],\n\tnamespace: \"chat\",\n} as const;\n\nexport function unwrapChatRoom(\n\tpayload: AthenaChatRoomCreatedResponse,\n): AthenaChatRoom {\n\treturn unwrapEnvelopeData(payload) as AthenaChatRoom;\n}\n\nexport function unwrapChatMessage(\n\tpayload: AthenaChatMessageCreatedResponse,\n): AthenaChatMessage {\n\treturn unwrapEnvelopeData(payload) as AthenaChatMessage;\n}\n","/**\n * Pure edge vs gateway execution resolution (no client construction).\n * Used by {@link createClient} and re-exported from the cloudflare façade.\n */\n\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { ATHENA_ENV_GATEWAY_URL_KEYS } from \"../env/index.ts\";\nimport type { D1DatabaseLike } from \"./types.ts\";\n\n/** How DB/storage execution is routed. */\nexport type AthenaExecutionMode = \"gateway\" | \"edge\" | \"auto\";\n\n/** Resolved mode after applying config + env (never `auto`). */\nexport type AthenaResolvedExecutionMode = \"gateway\" | \"edge\";\n\n/** Env key used when `mode` is omitted or `'auto'`. */\nexport const ATHENA_EXECUTION_MODE_ENV_KEY = \"ATHENA_EXECUTION_MODE\";\n\n/**\n * When both D1 and a gateway URL are available in `auto` mode, which backend wins.\n * Default: `edge` (prefer local bindings when present).\n */\nexport type AthenaExecutionPrefer = \"edge\" | \"gateway\";\n\nexport const ATHENA_EXECUTION_PREFER_ENV_KEY = \"ATHENA_EXECUTION_PREFER\";\n\n/**\n * Canonical modes plus documented aliases. Do not widen with `| string` —\n * that collapses the union and lets `createClient({ mode: \"\" })` type-check.\n */\nexport const ATHENA_EXECUTION_MODE_ALIASES = {\n  auto: \"auto\",\n  cloudflare: \"edge\",\n  \"cloudflare-edge\": \"edge\",\n  d1: \"edge\",\n  edge: \"edge\",\n  gateway: \"gateway\",\n  http: \"gateway\",\n  local: \"edge\",\n  remote: \"gateway\",\n  server: \"gateway\",\n} as const satisfies Record<string, AthenaExecutionMode>;\n\nexport type AthenaExecutionModeInput = keyof typeof ATHENA_EXECUTION_MODE_ALIASES;\n\nexport const ATHENA_EXECUTION_PREFER_ALIASES = {\n  cloudflare: \"edge\",\n  d1: \"edge\",\n  edge: \"edge\",\n  gateway: \"gateway\",\n  http: \"gateway\",\n  local: \"edge\",\n  remote: \"gateway\",\n  server: \"gateway\",\n} as const satisfies Record<string, AthenaExecutionPrefer>;\n\nexport type AthenaExecutionPreferInput =\n  keyof typeof ATHENA_EXECUTION_PREFER_ALIASES;\n\nexport interface ResolveAthenaExecutionModeInput {\n  /** D1 binding when present enables edge in auto mode. */\n  d1?: D1DatabaseLike | null;\n  /** Optional env map; also used when reading `ATHENA_EXECUTION_MODE`. */\n  env?: Record<string, string | undefined>;\n  /** Explicit mode. Default: `'auto'` (or env `ATHENA_EXECUTION_MODE`). */\n  mode?: AthenaExecutionModeInput | null;\n  /**\n   * When `mode` is `auto` and **both** D1 and a gateway URL exist, pick a winner.\n   * Default `edge`. Override with `prefer: 'gateway'` or env `ATHENA_EXECUTION_PREFER`.\n   */\n  prefer?: AthenaExecutionPreferInput | null;\n  /** Gateway base URL (or unified root) for server mode. */\n  url?: string | null;\n}\n\nfunction normalizeOptional(\n  value: string | null | undefined\n): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed || undefined;\n}\n\nfunction normalizeModeString(\n  value: string | null | undefined\n): AthenaExecutionMode | undefined {\n  if (value === undefined || value === null) {\n    return undefined;\n  }\n  const key = value.trim().toLowerCase();\n  if (!key) {\n    return undefined;\n  }\n  const mapped =\n    ATHENA_EXECUTION_MODE_ALIASES[\n      key as AthenaExecutionModeInput\n    ];\n  if (!mapped) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NO_SERVICE_CONFIGURED\",\n      `Unknown Athena execution mode \"${value}\". Use gateway | edge | auto (aliases: server, remote, cloudflare, d1).`,\n      \"db\"\n    );\n  }\n  return mapped;\n}\n\nfunction isD1Binding(value: unknown): value is D1DatabaseLike {\n  return Boolean(\n    value &&\n      typeof value === \"object\" &&\n      typeof (value as D1DatabaseLike).prepare === \"function\"\n  );\n}\n\nfunction resolveGatewayUrl(\n  url: string | null | undefined,\n  env: Record<string, string | undefined>\n): string | undefined {\n  if (normalizeOptional(url)) {\n    return normalizeOptional(url);\n  }\n  // SSOT: ATHENA_ENV_GATEWAY_URL_KEYS (url + db catalogs) from env module\n  for (const key of ATHENA_ENV_GATEWAY_URL_KEYS) {\n    const value = normalizeOptional(env[key]);\n    if (value) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\nfunction resolvePrefer(\n  prefer: AthenaExecutionPreferInput | string | null | undefined,\n  env: Record<string, string | undefined>\n): AthenaResolvedExecutionMode {\n  const raw =\n    normalizeOptional(\n      typeof prefer === \"string\" ? prefer : (prefer ?? undefined)\n    ) ??\n    normalizeOptional(env[ATHENA_EXECUTION_PREFER_ENV_KEY]) ??\n    \"edge\";\n  const mapped =\n    ATHENA_EXECUTION_PREFER_ALIASES[\n      raw.toLowerCase() as AthenaExecutionPreferInput\n    ];\n  if (!mapped) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NO_SERVICE_CONFIGURED\",\n      `Unknown Athena execution prefer \"${raw}\". Use edge | gateway.`,\n      \"db\"\n    );\n  }\n  return mapped;\n}\n\n/**\n * Resolve whether to use gateway HTTP or edge D1/R2 bindings.\n *\n * Auto rules (after env override):\n * 1. Only D1 → `edge`\n * 2. Only gateway URL → `gateway`\n * 3. Both → `prefer` (default `edge`, or env `ATHENA_EXECUTION_PREFER`)\n * 4. Neither → throw {@link AthenaConfigurationError}\n */\nexport function resolveAthenaExecutionMode(\n  input: ResolveAthenaExecutionModeInput = {}\n): AthenaResolvedExecutionMode {\n  const env = input.env ?? {};\n  const fromEnv = normalizeModeString(env[ATHENA_EXECUTION_MODE_ENV_KEY]);\n  const requested = normalizeModeString(input.mode) ?? fromEnv ?? \"auto\";\n  const url = resolveGatewayUrl(input.url, env);\n  const hasD1 = isD1Binding(input.d1);\n  const hasGateway = Boolean(url);\n\n  if (requested === \"gateway\") {\n    if (!hasGateway) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_NO_SERVICE_CONFIGURED\",\n        'Athena execution mode is \"gateway\" but no url / ATHENA_URL / ATHENA_DB_URL / ATHENA_GATEWAY_URL was provided.',\n        \"db\"\n      );\n    }\n    return \"gateway\";\n  }\n  if (requested === \"edge\") {\n    if (!hasD1) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_NO_SERVICE_CONFIGURED\",\n        'Athena execution mode is \"edge\" but no D1 binding was provided (db.d1 / config.d1 / env.DB).',\n        \"db\"\n      );\n    }\n    return \"edge\";\n  }\n\n  // auto\n  if (hasD1 && hasGateway) {\n    return resolvePrefer(input.prefer, env);\n  }\n  if (hasD1) {\n    return \"edge\";\n  }\n  if (hasGateway) {\n    return \"gateway\";\n  }\n\n  throw new AthenaConfigurationError(\n    \"ATHENA_NO_SERVICE_CONFIGURED\",\n    'Cannot resolve Athena execution mode: provide mode \"gateway\" with url/key, mode \"edge\" with d1, or mode \"auto\" with either a D1 binding or a gateway URL (ATHENA_URL / ATHENA_DB_URL / ATHENA_GATEWAY_URL).',\n    \"db\"\n  );\n}\n\nexport function isD1DatabaseBinding(value: unknown): value is D1DatabaseLike {\n  return isD1Binding(value);\n}\n","/**\n * Athena product release identity (server-facing metadata).\n *\n * Codenames are human-facing only. Never branch feature logic on codename —\n * use protocol/capability negotiation instead.\n */\n\nexport type AthenaReleaseChannel =\n  | \"development\"\n  | \"nightly\"\n  | \"alpha\"\n  | \"beta\"\n  | \"rc\"\n  | \"stable\"\n  | (string & {});\n\nexport interface AthenaReleaseIdentity {\n  channel: AthenaReleaseChannel;\n  codename: string | null;\n  displayName: string;\n  product: string;\n  version: string;\n}\n\nexport interface AthenaHealthReleaseWire {\n  channel?: unknown;\n  codename?: unknown;\n  display_name?: unknown;\n  displayName?: unknown;\n  product?: unknown;\n  version?: unknown;\n}\n\nexport interface AthenaNormalizedHealth {\n  message: string | null;\n  /** Raw health body (or null if parse failed). */\n  raw: unknown;\n  /** Normalized release identity (never fails solely because Athena 4 omits release). */\n  release: AthenaReleaseIdentity;\n  status: string | null;\n  /** Product package version from body.version when present. */\n  version: string | null;\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim().length > 0\n    ? value.trim()\n    : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * Normalize a server health `release` object (Athena 5) or synthesize\n * conservative Athena 4 identity from a top-level `version` field.\n */\nexport function normalizeAthenaReleaseIdentity(\n  wire: unknown,\n  fallbackVersion?: string | null\n): AthenaReleaseIdentity {\n  const record = isRecord(wire) ? (wire as AthenaHealthReleaseWire) : null;\n  const product = nonEmptyString(record?.product) ?? \"Athena\";\n  const version =\n    nonEmptyString(record?.version) ??\n    nonEmptyString(fallbackVersion) ??\n    \"unknown\";\n  const codename = nonEmptyString(record?.codename) ?? null;\n  const channel = (nonEmptyString(record?.channel) ??\n    \"stable\") as AthenaReleaseChannel;\n  const displayName =\n    nonEmptyString(record?.display_name) ??\n    nonEmptyString(record?.displayName) ??\n    (codename\n      ? `${product} ${version} — ${codename}`\n      : `${product} ${version}`);\n\n  return {\n    channel,\n    codename,\n    displayName,\n    product,\n    version,\n  };\n}\n\n/**\n * Normalize GET / or GET /health response bodies for Athena 4 and Athena 5.\n * Missing `release` is not an error.\n */\nexport function normalizeAthenaHealthPayload(\n  body: unknown\n): AthenaNormalizedHealth {\n  const record = isRecord(body) ? body : null;\n  const version = nonEmptyString(record?.version) ?? null;\n  const release = normalizeAthenaReleaseIdentity(record?.release, version);\n  return {\n    message: nonEmptyString(record?.message) ?? null,\n    raw: body,\n    release,\n    status: nonEmptyString(record?.status) ?? null,\n    version,\n  };\n}\n","/**\n * Athena-JS ↔ Athena server compatibility reporting (3.7 Dragunov program).\n *\n * Discovery is lazy and cached per client. Normal query paths must not hard-fail\n * solely because health is unavailable unless a required protocol is unsafe.\n */\n\nimport { ATHENA_GATEWAY_ROUTES } from \"../gateway/routes.ts\";\nimport type { AthenaReleaseIdentity } from \"../release/identity.ts\";\nimport {\n  type AthenaNormalizedHealth,\n  normalizeAthenaHealthPayload,\n} from \"../release/identity.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\n\nexport interface AthenaCompatibilityWarning {\n  code: string;\n  message: string;\n  severity: \"info\" | \"warning\" | \"error\";\n}\n\nexport interface AthenaCompatibilityReport {\n  compatible: boolean;\n  discovered: boolean;\n  protocols: {\n    structuredQuery: number;\n    errors: number;\n    health: number;\n  };\n  release: AthenaReleaseIdentity;\n  sdk: {\n    package: \"@xylex-group/athena\";\n    version: string;\n  };\n  server: {\n    product: string;\n    version: string;\n    codename: string | null;\n    channel: string | null;\n  };\n  warnings: AthenaCompatibilityWarning[];\n}\n\nexport interface AthenaCompatibilityCache {\n  health: AthenaNormalizedHealth | null;\n  inflight: Promise<AthenaCompatibilityReport> | null;\n  report: AthenaCompatibilityReport | null;\n}\n\nexport function createCompatibilityCache(): AthenaCompatibilityCache {\n  return {\n    health: null,\n    inflight: null,\n    report: null,\n  };\n}\n\nfunction parseMajor(version: string | null | undefined): number | null {\n  if (!version) {\n    return null;\n  }\n  const match = version.trim().match(/^(\\d+)/);\n  if (!match) {\n    return null;\n  }\n  return Number(match[1]);\n}\n\n/**\n * Build a report from a health payload without network I/O.\n */\nexport function buildCompatibilityReportFromHealth(\n  healthBody: unknown,\n  options?: { discovered?: boolean }\n): AthenaCompatibilityReport {\n  const health = normalizeAthenaHealthPayload(healthBody);\n  const major = parseMajor(health.release.version);\n  const warnings: AthenaCompatibilityWarning[] = [];\n\n  if (major !== null && major < 4) {\n    warnings.push({\n      code: \"ATHENA_SERVER_MAJOR_UNSUPPORTED\",\n      message: `Athena server major ${major} is below the supported 4.1.x / 5.0.x range`,\n      severity: \"error\",\n    });\n  }\n  if (major !== null && major > 5) {\n    warnings.push({\n      code: \"ATHENA_SERVER_MAJOR_NEWER\",\n      message: `Athena server major ${major} is newer than this SDK's validated range (4.1.x–5.0.x); treat as best-effort`,\n      severity: \"warning\",\n    });\n  }\n  if (health.release.codename === null && major === 5) {\n    warnings.push({\n      code: \"ATHENA_RELEASE_CODENAME_MISSING\",\n      message:\n        \"Athena 5 health response is missing release.codename; continuing with SemVer only\",\n      severity: \"info\",\n    });\n  }\n\n  const compatible = !warnings.some((w) => w.severity === \"error\");\n\n  return {\n    compatible,\n    discovered: options?.discovered ?? true,\n    protocols: {\n      errors: 1,\n      health: health.release.codename !== null || major === 5 ? 2 : 1,\n      structuredQuery: 1,\n    },\n    release: health.release,\n    sdk: {\n      package: \"@xylex-group/athena\",\n      version: PACKAGE_VERSION,\n    },\n    server: {\n      channel: health.release.channel,\n      codename: health.release.codename,\n      product: health.release.product,\n      version: health.release.version,\n    },\n    warnings,\n  };\n}\n\n/**\n * Conservative offline report when health discovery fails or is skipped.\n */\nexport function buildUndiscoveredCompatibilityReport(): AthenaCompatibilityReport {\n  const release = {\n    channel: \"stable\" as const,\n    codename: null,\n    displayName: \"Athena unknown\",\n    product: \"Athena\",\n    version: \"unknown\",\n  };\n  return {\n    compatible: true,\n    discovered: false,\n    protocols: {\n      errors: 1,\n      health: 1,\n      structuredQuery: 1,\n    },\n    release,\n    sdk: {\n      package: \"@xylex-group/athena\",\n      version: PACKAGE_VERSION,\n    },\n    server: {\n      channel: null,\n      codename: null,\n      product: release.product,\n      version: release.version,\n    },\n    warnings: [\n      {\n        code: \"ATHENA_COMPAT_UNDISCOVERED\",\n        message:\n          \"Server compatibility not discovered yet; using conservative protocol defaults\",\n        severity: \"info\",\n      },\n    ],\n  };\n}\n\nexport interface DiscoverCompatibilityOptions {\n  apiKey?: string;\n  baseUrl: string;\n  cache: AthenaCompatibilityCache;\n  fetchImpl?: typeof fetch;\n  headers?: Record<string, string>;\n}\n\n/**\n * Lazy cached GET /health (falls back to GET /). Does not throw on network failure —\n * returns an undiscovered-compatible report so CRUD can continue on Athena 4/5.\n */\nexport async function discoverCompatibility(\n  options: DiscoverCompatibilityOptions\n): Promise<AthenaCompatibilityReport> {\n  if (options.cache.report?.discovered) {\n    return options.cache.report;\n  }\n  if (options.cache.inflight) {\n    return options.cache.inflight;\n  }\n\n  const run = async (): Promise<AthenaCompatibilityReport> => {\n    const fetchFn = options.fetchImpl ?? globalThis.fetch;\n    if (typeof fetchFn !== \"function\") {\n      const report = buildUndiscoveredCompatibilityReport();\n      options.cache.report = report;\n      return report;\n    }\n\n    const base = options.baseUrl.replace(/\\/+$/, \"\");\n    const headers: Record<string, string> = {\n      Accept: \"application/json\",\n      ...(options.headers ?? {}),\n    };\n    if (options.apiKey) {\n      headers[\"X-API-Key\"] = options.apiKey;\n    }\n\n    const tryPath = async (path: string): Promise<unknown | null> => {\n      try {\n        const response = await fetchFn(`${base}${path}`, {\n          headers,\n          method: \"GET\",\n        });\n        if (!response.ok) {\n          return null;\n        }\n        return await response.json();\n      } catch {\n        return null;\n      }\n    };\n\n    const body =\n      (await tryPath(ATHENA_GATEWAY_ROUTES.health)) ??\n      (await tryPath(ATHENA_GATEWAY_ROUTES.root));\n\n    if (body === null) {\n      const report = buildUndiscoveredCompatibilityReport();\n      options.cache.report = report;\n      return report;\n    }\n\n    const health = normalizeAthenaHealthPayload(body);\n    options.cache.health = health;\n    const report = buildCompatibilityReportFromHealth(body, {\n      discovered: true,\n    });\n    options.cache.report = report;\n    return report;\n  };\n\n  options.cache.inflight = run().finally(() => {\n    options.cache.inflight = null;\n  });\n  return options.cache.inflight;\n}\n","/**\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","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","export type AthenaTransactionErrorCode =\n  | \"ATHENA_TRANSACTION_ATOMIC_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_INTERACTIVE_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_ISOLATION_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_NESTING_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_SAVEPOINT_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_EMPTY\"\n  | \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_CONTEXT_OVERRIDE\"\n  | \"ATHENA_TRANSACTION_DOOMED\"\n  | \"ATHENA_TRANSACTION_TIMEOUT\"\n  | \"ATHENA_TRANSACTION_ABORTED\"\n  | \"ATHENA_TRANSACTION_FAILED\";\n\nexport class AthenaTransactionError extends Error {\n  readonly backend?: string;\n  readonly code: AthenaTransactionErrorCode;\n  readonly details: Record<string, unknown>;\n  readonly operationId?: string;\n  readonly operationIndex?: number;\n  readonly requestId?: string;\n  readonly transactionId?: string;\n\n  constructor(\n    code: AthenaTransactionErrorCode,\n    message: string,\n    details: Record<string, unknown> = {}\n  ) {\n    super(message);\n    this.name = \"AthenaTransactionError\";\n    this.code = code;\n    this.details = details;\n    this.backend =\n      typeof details.backend === \"string\" ? details.backend : undefined;\n    this.operationId =\n      typeof details.operationId === \"string\" ? details.operationId : undefined;\n    this.operationIndex =\n      typeof details.operationIndex === \"number\"\n        ? details.operationIndex\n        : undefined;\n    this.requestId =\n      typeof details.requestId === \"string\" ? details.requestId : undefined;\n    this.transactionId =\n      typeof details.transactionId === \"string\"\n        ? details.transactionId\n        : undefined;\n  }\n}\n\nexport function isAthenaTransactionError(\n  value: unknown\n): value is AthenaTransactionError {\n  return value instanceof AthenaTransactionError;\n}\n","import { AthenaTransactionError } from \"./errors.ts\";\nimport type {\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionIsolationLevel,\n} from \"./types.ts\";\n\nconst ISOLATION_SQL: Record<AthenaTransactionIsolationLevel, string> = {\n  read_committed: \"READ COMMITTED\",\n  repeatable_read: \"REPEATABLE READ\",\n  serializable: \"SERIALIZABLE\",\n};\n\n/**\n * Compile PostgreSQL BEGIN from resolved options.\n * Isolation tokens are mapped exhaustively — never interpolated from caller text.\n */\nexport function buildPostgresBeginStatement(\n  options?: Partial<\n    Pick<\n      AthenaResolvedTransactionOptions,\n      \"deferrable\" | \"isolationLevel\" | \"readOnly\"\n    >\n  >\n): string {\n  const parts = [\"BEGIN\"];\n  if (options?.isolationLevel) {\n    const mapped = ISOLATION_SQL[options.isolationLevel];\n    if (!mapped) {\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_ISOLATION_UNSUPPORTED\",\n        `Unsupported PostgreSQL isolation level: ${String(options.isolationLevel)}`,\n        { isolationLevel: options.isolationLevel }\n      );\n    }\n    parts.push(\"ISOLATION LEVEL\", mapped);\n  }\n  if (options?.readOnly) {\n    parts.push(\"READ ONLY\");\n  }\n  if (options?.deferrable) {\n    if (!options.readOnly || options.isolationLevel !== \"serializable\") {\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n        \"DEFERRABLE requires READ ONLY SERIALIZABLE\",\n        {\n          deferrable: true,\n          isolationLevel: options.isolationLevel ?? null,\n          readOnly: Boolean(options.readOnly),\n        }\n      );\n    }\n    parts.push(\"DEFERRABLE\");\n  }\n  return parts.join(\" \");\n}\n\nexport function nextInternalSavepointName(index: number): string {\n  if (!Number.isInteger(index) || index < 1) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n      \"Savepoint index must be a positive integer\"\n    );\n  }\n  return `athena_sp_${index}`;\n}\n","import type { AthenaResult } from \"../../client-result.ts\";\nimport type { AthenaExecutable, AthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\n\nexport type AthenaTransactionIsolationLevel =\n  | \"read_committed\"\n  | \"repeatable_read\"\n  | \"serializable\";\n\nexport type AthenaTransactionBackend =\n  | \"postgres-direct\"\n  | \"gateway-postgres\"\n  | \"d1-batch\"\n  | \"gateway-d1\"\n  | \"unsupported\";\n\nexport interface AthenaTransactionCapabilities {\n  atomic: boolean;\n  backend: AthenaTransactionBackend;\n  deferrable: boolean;\n  interactive: boolean;\n  isolationLevels: readonly AthenaTransactionIsolationLevel[];\n  readOnly: boolean;\n  savepoints: boolean;\n}\n\nexport interface AthenaTransactionOptions {\n  deferrable?: boolean;\n  idempotencyKey?: string;\n  isolationLevel?: AthenaTransactionIsolationLevel;\n  readOnly?: boolean;\n  signal?: AbortSignal;\n  timeoutMs?: number;\n}\n\nexport interface AthenaResolvedTransactionOptions {\n  callOptions?: AthenaGatewayCallOptions;\n  deferrable: boolean;\n  idempotencyKey?: string;\n  isolationLevel?: AthenaTransactionIsolationLevel;\n  readOnly: boolean;\n  signal?: AbortSignal;\n  timeoutMs?: number;\n}\n\nexport type AthenaTransactionOperationKind = \"fetch\" | \"insert\" | \"update\" | \"delete\";\n\nexport interface AthenaTransactionOperationBase {\n  descriptor: AthenaQueryDescriptor;\n  id: string;\n  index: number;\n}\n\nexport type AthenaTransactionOperation =\n  | (AthenaTransactionOperationBase & {\n      kind: \"fetch\";\n      payload: AthenaFetchPayload;\n    })\n  | (AthenaTransactionOperationBase & {\n      kind: \"insert\";\n      payload: AthenaInsertPayload;\n    })\n  | (AthenaTransactionOperationBase & {\n      kind: \"update\";\n      payload: AthenaUpdatePayload;\n    })\n  | (AthenaTransactionOperationBase & {\n      kind: \"delete\";\n      payload: AthenaDeletePayload;\n    });\n\nexport interface AthenaTransactionTransportResult {\n  committed: boolean;\n  results: AthenaGatewayResponse<unknown>[];\n  transactionId?: string;\n}\n\nexport interface AthenaInteractiveTransactionTransport {\n  commit(): Promise<void>;\n  createSavepoint?(name: string): Promise<void>;\n  execute(\n    operation: AthenaTransactionOperation\n  ): Promise<AthenaGatewayResponse<unknown>>;\n  releaseSavepoint?(name: string): Promise<void>;\n  rollback(): Promise<void>;\n  rollbackToSavepoint?(name: string): Promise<void>;\n}\n\nexport interface AthenaTransactionTransport {\n  beginInteractive?(\n    options?: AthenaResolvedTransactionOptions\n  ): Promise<AthenaInteractiveTransactionTransport>;\n  readonly capabilities: AthenaTransactionCapabilities;\n  executeAtomic(\n    operations: readonly AthenaTransactionOperation[],\n    options?: AthenaResolvedTransactionOptions\n  ): Promise<AthenaTransactionTransportResult>;\n}\n\nexport type AthenaExecutableOutput<T> = T extends AthenaExecutable<infer R>\n  ? R\n  : T extends PromiseLike<infer R>\n    ? R\n    : never;\n\nexport type AthenaTransactionResults<\n  T extends readonly AthenaExecutable<unknown>[],\n> = {\n  [K in keyof T]: AthenaExecutableOutput<T[K]>;\n};\n\nexport type AthenaTransactionOperationCompiler = () => AthenaTransactionOperation;\n\nexport interface AthenaTransactionCacheObserver {\n  reconcileCommitted(\n    operations: readonly AthenaTransactionOperation[],\n    results: readonly AthenaResult<unknown>[]\n  ): void;\n}\n\nexport const ATHENA_TRANSACTION_COMPILE = Symbol.for(\n  \"athena.transaction.compile\"\n);\n\nexport const UNSUPPORTED_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: false,\n    backend: \"unsupported\",\n    deferrable: false,\n    interactive: false,\n    isolationLevels: [],\n    readOnly: false,\n    savepoints: false,\n  };\n\nexport const POSTGRES_DIRECT_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: true,\n    backend: \"postgres-direct\",\n    deferrable: true,\n    interactive: true,\n    isolationLevels: [\"read_committed\", \"repeatable_read\", \"serializable\"],\n    readOnly: true,\n    savepoints: true,\n  };\n\nexport const GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: true,\n    backend: \"gateway-postgres\",\n    deferrable: true,\n    interactive: false,\n    isolationLevels: [\"read_committed\", \"repeatable_read\", \"serializable\"],\n    readOnly: true,\n    savepoints: false,\n  };\n\nexport const D1_BATCH_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: true,\n    backend: \"d1-batch\",\n    deferrable: false,\n    interactive: false,\n    isolationLevels: [],\n    readOnly: false,\n    savepoints: false,\n  };\n\nexport const GATEWAY_D1_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: false,\n    backend: \"gateway-d1\",\n    deferrable: false,\n    interactive: false,\n    isolationLevels: [],\n    readOnly: false,\n    savepoints: false,\n  };\n","import type { AthenaExecutable } from \"../../query/descriptor.ts\";\nimport { AthenaTransactionError } from \"./errors.ts\";\nimport {\n  ATHENA_TRANSACTION_COMPILE,\n  type AthenaTransactionOperation,\n  type AthenaTransactionOperationCompiler,\n} from \"./types.ts\";\n\nlet transactionOperationSeq = 0;\n\nexport function nextTransactionOperationId(): string {\n  transactionOperationSeq += 1;\n  return `txop_${transactionOperationSeq}`;\n}\n\nexport function attachTransactionCompiler(\n  executable: object,\n  compile: AthenaTransactionOperationCompiler\n): void {\n  Object.defineProperty(executable, ATHENA_TRANSACTION_COMPILE, {\n    configurable: true,\n    enumerable: false,\n    value: compile,\n  });\n}\n\nexport function compileTransactionOperation(\n  executable: AthenaExecutable<unknown>,\n  index: number\n): AthenaTransactionOperation {\n  const holder = executable as AthenaExecutable<unknown> & {\n    [ATHENA_TRANSACTION_COMPILE]?: AthenaTransactionOperationCompiler;\n  };\n  const compile = holder[ATHENA_TRANSACTION_COMPILE];\n  if (typeof compile !== \"function\") {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n      \"Executable cannot be compiled into a transaction operation. Pass an unexecuted athena.from(Model) chain (select/insert/update/delete).\",\n      { index }\n    );\n  }\n  const compiled = compile();\n  return {\n    ...compiled,\n    descriptor: compiled.descriptor,\n    id: compiled.id || nextTransactionOperationId(),\n    index,\n  };\n}\n\nexport function compileTransactionOperations(\n  executables: readonly AthenaExecutable<unknown>[]\n): AthenaTransactionOperation[] {\n  if (executables.length === 0) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_EMPTY\",\n      \"db.transaction() requires at least one operation\"\n    );\n  }\n  return executables.map((executable, index) =>\n    compileTransactionOperation(executable, index)\n  );\n}\n","import { AthenaTransactionError } from \"./errors.ts\";\nimport type {\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionCapabilities,\n  AthenaTransactionOptions,\n} from \"./types.ts\";\n\nexport function resolveTransactionOptions(\n  capabilities: AthenaTransactionCapabilities,\n  options?: AthenaTransactionOptions,\n  callOptions?: AthenaResolvedTransactionOptions[\"callOptions\"]\n): AthenaResolvedTransactionOptions {\n  if (options?.isolationLevel) {\n    if (!capabilities.isolationLevels.includes(options.isolationLevel)) {\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_ISOLATION_UNSUPPORTED\",\n        `Isolation level \"${options.isolationLevel}\" is not supported by backend \"${capabilities.backend}\"`,\n        {\n          backend: capabilities.backend,\n          isolationLevel: options.isolationLevel,\n          supported: [...capabilities.isolationLevels],\n        }\n      );\n    }\n  }\n  if (options?.readOnly && !capabilities.readOnly) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n      `readOnly transactions are not supported by backend \"${capabilities.backend}\"`,\n      { backend: capabilities.backend, option: \"readOnly\" }\n    );\n  }\n  if (options?.deferrable && !capabilities.deferrable) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n      `deferrable transactions are not supported by backend \"${capabilities.backend}\"`,\n      { backend: capabilities.backend, option: \"deferrable\" }\n    );\n  }\n  return {\n    callOptions,\n    deferrable: Boolean(options?.deferrable),\n    idempotencyKey: options?.idempotencyKey,\n    isolationLevel: options?.isolationLevel,\n    readOnly: Boolean(options?.readOnly),\n    signal: options?.signal,\n    timeoutMs: options?.timeoutMs,\n  };\n}\n","import type { AthenaResult, AthenaResultFormatter } from \"../../client-result.ts\";\nimport type { AthenaExecutable } from \"../../query/descriptor.ts\";\nimport type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport type { AthenaGatewayResponse } from \"../../gateway/types.ts\";\nimport { getTransactionCacheObserver } from \"./cache.ts\";\nimport { compileTransactionOperations } from \"./compile.ts\";\nimport { AthenaTransactionError } from \"./errors.ts\";\nimport { resolveTransactionOptions } from \"./options.ts\";\nimport type {\n  AthenaInteractiveTransactionTransport,\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionCacheObserver,\n  AthenaTransactionCapabilities,\n  AthenaTransactionOperation,\n  AthenaTransactionOptions,\n  AthenaTransactionResults,\n} from \"./types.ts\";\nimport { UNSUPPORTED_TRANSACTION_CAPABILITIES } from \"./types.ts\";\n\nexport function getTransactionTransport(\n  gateway: AthenaGatewayClient\n): {\n  capabilities: AthenaTransactionCapabilities;\n  transport: NonNullable<AthenaGatewayClient[\"transactions\"]> | undefined;\n} {\n  const transport = gateway.transactions;\n  return {\n    capabilities: transport?.capabilities ?? UNSUPPORTED_TRANSACTION_CAPABILITIES,\n    transport,\n  };\n}\n\nexport async function pinTransactionCallOptions(\n  gateway: AthenaGatewayClient,\n  signal?: AbortSignal\n) {\n  const resolved = await gateway.resolveCallOptions(\n    signal ? { signal } : undefined\n  );\n  return resolved;\n}\n\n/**\n * The pinned snapshot may include organization/credentials.\n * Per-operation builders must not smuggle a different principal.\n */\nfunction rejectOperationContextOverride(\n  pinned: AthenaResolvedTransactionOptions[\"callOptions\"] | undefined,\n  operationOptions: AthenaResolvedTransactionOptions[\"callOptions\"] | undefined\n): void {\n  if (!operationOptions) {\n    return;\n  }\n  const fields = [\n    \"apiKey\",\n    \"bearerToken\",\n    \"organizationId\",\n    \"sessionToken\",\n    \"userId\",\n    \"client\",\n  ] as const;\n  for (const field of fields) {\n    const next = operationOptions[field];\n    if (next === undefined || next === null) {\n      continue;\n    }\n    const pinnedValue = pinned?.[field];\n    if (pinnedValue !== next) {\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_CONTEXT_OVERRIDE\",\n        \"Transaction operations cannot override client, organization, credentials, or principal\",\n        { field, next, pinned: pinnedValue ?? null }\n      );\n    }\n  }\n}\n\nfunction mapTransportResult(\n  response: AthenaGatewayResponse<unknown>,\n  formatGatewayResult: AthenaResultFormatter,\n  operation: AthenaTransactionOperation\n): AthenaResult<unknown> {\n  return formatGatewayResult(response, {\n    operation: operation.kind,\n    table: operation.descriptor.target.table,\n  });\n}\n\nfunction firstFailedResult(\n  results: readonly AthenaResult<unknown>[]\n): AthenaResult<unknown> | undefined {\n  return results.find((result) => result.error);\n}\n\nexport async function executeAtomicTransaction<\n  T extends readonly AthenaExecutable<unknown>[],\n>(input: {\n  cache?: AthenaTransactionCacheObserver;\n  formatGatewayResult: AthenaResultFormatter;\n  gateway: AthenaGatewayClient;\n  operations: T;\n  options?: AthenaTransactionOptions;\n}): Promise<AthenaTransactionResults<T>> {\n  const { capabilities, transport } = getTransactionTransport(input.gateway);\n  if (!(transport && capabilities.atomic)) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_ATOMIC_UNSUPPORTED\",\n      `Atomic transactions are not supported by backend \"${capabilities.backend}\"`,\n      {\n        backend: capabilities.backend,\n        requested: \"atomic\",\n        suggestion: \"Use a backend that advertises capabilities.db.transactions.atomic\",\n      }\n    );\n  }\n  const compiled = compileTransactionOperations(input.operations);\n  const pinned = await pinTransactionCallOptions(\n    input.gateway,\n    input.options?.signal\n  );\n  const resolved = resolveTransactionOptions(\n    capabilities,\n    input.options,\n    pinned\n  );\n  const executed = await transport.executeAtomic(compiled, resolved);\n  const results = executed.results.map((response, index) =>\n    mapTransportResult(\n      response,\n      input.formatGatewayResult,\n      compiled[index] ?? compiled[0]!\n    )\n  );\n  const failed = firstFailedResult(results);\n  if (failed?.error || !executed.committed) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_FAILED\",\n      failed?.error?.message ?? \"Atomic transaction failed\",\n      {\n        backend: capabilities.backend,\n        committed: executed.committed,\n        transactionId: executed.transactionId ?? null,\n      }\n    );\n  }\n  const cache =\n    input.cache ?? getTransactionCacheObserver(input.gateway);\n  cache?.reconcileCommitted(compiled, results);\n  return results as AthenaTransactionResults<T>;\n}\n\nexport interface InteractiveTransactionSession {\n  abort(): void;\n  capabilities: AthenaTransactionCapabilities;\n  doomed: boolean;\n  execute(\n    operation: AthenaTransactionOperation\n  ): Promise<AthenaGatewayResponse<unknown>>;\n  failure: AthenaTransactionError | undefined;\n  markFailed(error: AthenaTransactionError): void;\n  savepointIndex: number;\n  transport: AthenaInteractiveTransactionTransport;\n}\n\nexport async function beginInteractiveSession(input: {\n  gateway: AthenaGatewayClient;\n  options?: AthenaTransactionOptions;\n}): Promise<InteractiveTransactionSession> {\n  const { capabilities, transport } = getTransactionTransport(input.gateway);\n  if (!(transport?.beginInteractive && capabilities.interactive)) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_INTERACTIVE_UNSUPPORTED\",\n      `Interactive transactions are not supported by backend \"${capabilities.backend}\"`,\n      {\n        backend: capabilities.backend,\n        requested: \"interactive\",\n        suggestion: \"use db.transaction([...])\",\n        supported: capabilities.atomic ? \"atomic\" : \"none\",\n      }\n    );\n  }\n  const pinned = await pinTransactionCallOptions(\n    input.gateway,\n    input.options?.signal\n  );\n  rejectOperationContextOverride(pinned, pinned);\n  const resolved = resolveTransactionOptions(\n    capabilities,\n    input.options,\n    pinned\n  );\n  const interactive = await transport.beginInteractive(resolved);\n  const session: InteractiveTransactionSession = {\n    abort() {\n      session.markFailed(\n        new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_ABORTED\",\n          \"Transaction aborted\",\n          { backend: capabilities.backend }\n        )\n      );\n    },\n    capabilities,\n    doomed: false,\n    async execute(operation) {\n      if (session.doomed) {\n        throw (\n          session.failure ??\n          new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_DOOMED\",\n            \"Transaction is doomed and will roll back\",\n            { backend: capabilities.backend }\n          )\n        );\n      }\n      const response = await interactive.execute(operation);\n      if (!response.ok) {\n        session.markFailed(\n          new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_FAILED\",\n            response.error ?? \"Transaction operation failed\",\n            {\n              backend: capabilities.backend,\n              operationId: operation.id,\n              operationIndex: operation.index,\n            }\n          )\n        );\n      }\n      return response;\n    },\n    failure: undefined,\n    markFailed(error) {\n      session.doomed = true;\n      session.failure ??= error;\n    },\n    savepointIndex: 0,\n    transport: interactive,\n  };\n  return session;\n}\n\nexport async function finishInteractiveSession(input: {\n  cache?: AthenaTransactionCacheObserver;\n  committedOperations: AthenaTransactionOperation[];\n  committedResults: AthenaResult<unknown>[];\n  session: InteractiveTransactionSession;\n}): Promise<void> {\n  const { session } = input;\n  if (session.doomed) {\n    await session.transport.rollback();\n    throw (\n      session.failure ??\n      new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_DOOMED\",\n        \"Transaction rolled back\",\n        { backend: session.capabilities.backend }\n      )\n    );\n  }\n  await session.transport.commit();\n  input.cache?.reconcileCommitted(\n    input.committedOperations,\n    input.committedResults\n  );\n}\n","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 {\n  AthenaEmailDeliveryPort,\n  AthenaEmailModule,\n} 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 type { AthenaEmailProvider } from \"./types.ts\";\n\n/**\n * Type guard for root email adapters. SMTP and other transports implement\n * {@link AthenaEmailProvider} and enter the client only through `createClient({ email })`.\n */\nexport function isAthenaEmailProvider(value: unknown): value is AthenaEmailProvider {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const candidate = value as Partial<AthenaEmailProvider>;\n  return (\n    typeof candidate.send === \"function\" &&\n    typeof candidate.id === \"string\" &&\n    candidate.id.trim().length > 0\n  );\n}\n\n/**\n * Extension seam for provider adapters. Returns a public-neutral provider:\n * `id` is trimmed and `send` is the only callable surface.\n *\n * Node-only transports (SMTP) must live in a separate adapter module that is\n * never imported from the browser `createClient()` path.\n */\nexport function defineAthenaEmailProvider(\n  provider: AthenaEmailProvider\n): AthenaEmailProvider {\n  if (!isAthenaEmailProvider(provider)) {\n    throw new TypeError(\n      \"Athena email provider adapters must expose a non-empty id and send().\"\n    );\n  }\n  const id = provider.id.trim();\n  return {\n    ...(provider.capabilities ? { capabilities: provider.capabilities } : {}),\n    id,\n    send: (message) => provider.send(message),\n  };\n}\n","import { isAthenaEmailProvider } from \"./provider.ts\";\nimport type {\n  AthenaEmailAttachmentFailureMode,\n  AthenaEmailConfig,\n  AthenaEmailDefaults,\n  AthenaEmailDiagnostics,\n  AthenaEmailProvider,\n} from \"./types.ts\";\n\nexport interface NormalizedAthenaEmailConfig {\n  attachmentFailureMode: AthenaEmailAttachmentFailureMode;\n  defaults: AthenaEmailDefaults;\n  provider: AthenaEmailProvider | null;\n}\n\nconst EMPTY_DEFAULTS: AthenaEmailDefaults = {};\n\nfunction trimOptional(value: unknown): string | undefined {\n  if (typeof value !== \"string\") {\n    return;\n  }\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeDefaults(input: unknown): AthenaEmailDefaults {\n  if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n    return { ...EMPTY_DEFAULTS };\n  }\n  const raw = input as AthenaEmailDefaults;\n  const from = trimOptional(raw.from);\n  const fromName = trimOptional(raw.fromName);\n  const replyTo = trimOptional(raw.replyTo);\n  const locale = trimOptional(raw.locale);\n  return {\n    ...(from ? { from } : {}),\n    ...(fromName ? { fromName } : {}),\n    ...(replyTo ? { replyTo } : {}),\n    ...(locale ? { locale } : {}),\n  };\n}\n\nfunction normalizeFailureMode(value: unknown): AthenaEmailAttachmentFailureMode {\n  return value === \"skip\" ? \"skip\" : \"fail\";\n}\n\nfunction normalizeProvider(value: unknown): AthenaEmailProvider | null {\n  if (value == null) {\n    return null;\n  }\n  if (isAthenaEmailProvider(value)) {\n    return {\n      ...(value.capabilities ? { capabilities: value.capabilities } : {}),\n      id: value.id.trim(),\n      send: (message) => value.send(message),\n    };\n  }\n  if (\n    typeof value === \"object\" &&\n    typeof (value as { send?: unknown }).send === \"function\"\n  ) {\n    const loose = value as AthenaEmailProvider;\n    return {\n      ...(loose.capabilities ? { capabilities: loose.capabilities } : {}),\n      id: \"custom\",\n      send: (message) => loose.send(message),\n    };\n  }\n  return null;\n}\n\n/**\n * Normalize `createClient({ email })`. Missing or empty config is valid and\n * yields an unconfigured module — construction still succeeds.\n */\nexport function normalizeAthenaEmailConfig(\n  input?: AthenaEmailConfig | null\n): NormalizedAthenaEmailConfig {\n  if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n    return {\n      attachmentFailureMode: \"fail\",\n      defaults: { ...EMPTY_DEFAULTS },\n      provider: null,\n    };\n  }\n  return {\n    attachmentFailureMode: normalizeFailureMode(input.attachments?.failureMode),\n    defaults: normalizeDefaults(input.defaults),\n    provider: normalizeProvider(input.provider),\n  };\n}\n\nexport function toAthenaEmailDiagnostics(\n  normalized: NormalizedAthenaEmailConfig\n): AthenaEmailDiagnostics {\n  return {\n    attachmentFailureMode: normalized.attachmentFailureMode,\n    configured: normalized.provider !== null,\n    defaults: { ...normalized.defaults },\n    providerDelivery: normalized.provider?.capabilities?.delivery ?? null,\n    providerId: normalized.provider?.id ?? null,\n    providerRuntimes: normalized.provider?.capabilities?.runtimes ?? null,\n  };\n}\n","import {\n  ATHENA_EMAIL_DELIVERY_FAILED,\n  ATHENA_EMAIL_MESSAGE_INVALID,\n  ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n  AthenaEmailError,\n} from \"./errors.ts\";\nimport { assertAthenaEmailProviderRuntime } from \"./capabilities.ts\";\nimport type { NormalizedAthenaEmailConfig } from \"./normalize-config.ts\";\nimport type {\n  AthenaEmailAttachment,\n  AthenaEmailDeliveryResult,\n  AthenaEmailMessage,\n  AthenaResolvedEmailMessage,\n} from \"./types.ts\";\n\nfunction asAddressList(value: string | string[] | undefined): string[] {\n  if (value == null) {\n    return [];\n  }\n  const items = Array.isArray(value) ? value : [value];\n  return items\n    .map((entry) => (typeof entry === \"string\" ? entry.trim() : \"\"))\n    .filter((entry) => entry.length > 0);\n}\n\nfunction cloneAttachments(\n  attachments: AthenaEmailAttachment[] | undefined\n): AthenaEmailAttachment[] {\n  if (!attachments?.length) {\n    return [];\n  }\n  return attachments.map((attachment) => ({\n    ...(attachment.content === undefined ? {} : { content: attachment.content }),\n    ...(attachment.contentType\n      ? { contentType: attachment.contentType }\n      : {}),\n    ...(attachment.filename ? { filename: attachment.filename } : {}),\n    ...(attachment.fileUrl ? { fileUrl: attachment.fileUrl } : {}),\n  }));\n}\n\nfunction cloneHeaders(\n  headers: Record<string, string> | undefined\n): Record<string, string> {\n  if (!headers) {\n    return {};\n  }\n  const next: Record<string, string> = {};\n  for (const [key, value] of Object.entries(headers)) {\n    if (typeof value === \"string\") {\n      next[key] = value;\n    }\n  }\n  return next;\n}\n\nfunction cloneMetadata(\n  metadata: Record<string, unknown> | undefined\n): Record<string, unknown> {\n  if (!metadata) {\n    return {};\n  }\n  return { ...metadata };\n}\n\nexport function resolveAthenaEmailMessage(\n  message: AthenaEmailMessage,\n  normalized: NormalizedAthenaEmailConfig\n): AthenaResolvedEmailMessage {\n  const to = asAddressList(message.to);\n  const subject =\n    typeof message.subject === \"string\" ? message.subject.trim() : \"\";\n  const from =\n    (typeof message.from === \"string\" ? message.from.trim() : \"\") ||\n    normalized.defaults.from ||\n    \"\";\n  if (to.length === 0) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_MESSAGE_INVALID,\n      \"Athena email messages require at least one recipient.\"\n    );\n  }\n  if (!subject) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_MESSAGE_INVALID,\n      \"Athena email messages require a subject.\"\n    );\n  }\n  if (!from) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_MESSAGE_INVALID,\n      \"Athena email messages require from, either on the message or email.defaults.from.\"\n    );\n  }\n\n  const fromName =\n    (typeof message.fromName === \"string\" ? message.fromName.trim() : \"\") ||\n    normalized.defaults.fromName;\n  const replyTo =\n    (typeof message.replyTo === \"string\" ? message.replyTo.trim() : \"\") ||\n    normalized.defaults.replyTo;\n  const locale =\n    (typeof message.locale === \"string\" ? message.locale.trim() : \"\") ||\n    normalized.defaults.locale;\n\n  return {\n    attachmentFailureMode:\n      message.attachmentFailureMode === \"skip\" ||\n      message.attachmentFailureMode === \"fail\"\n        ? message.attachmentFailureMode\n        : normalized.attachmentFailureMode,\n    attachments: cloneAttachments(message.attachments),\n    bcc: asAddressList(message.bcc),\n    cc: asAddressList(message.cc),\n    from,\n    ...(fromName ? { fromName } : {}),\n    headers: cloneHeaders(message.headers),\n    ...(typeof message.html === \"string\" ? { html: message.html } : {}),\n    ...(locale ? { locale } : {}),\n    metadata: cloneMetadata(message.metadata),\n    ...(replyTo ? { replyTo } : {}),\n    subject,\n    ...(typeof message.text === \"string\" ? { text: message.text } : {}),\n    to,\n  };\n}\n\nfunction asStringArray(value: unknown): string[] {\n  if (!Array.isArray(value)) {\n    return [];\n  }\n  return value.filter((entry): entry is string => typeof entry === \"string\");\n}\n\n/**\n * Strip unknown provider fields so public APIs never expose native SDK types.\n */\nexport function envelopeAcceptedRecipients(\n  message: Pick<AthenaResolvedEmailMessage, \"to\" | \"cc\" | \"bcc\">\n): string[] {\n  return [...message.to, ...message.cc, ...message.bcc];\n}\n\nexport function toPublicEmailDeliveryResult(\n  value: unknown,\n  providerId: string\n): AthenaEmailDeliveryResult {\n  const raw =\n    value && typeof value === \"object\"\n      ? (value as Partial<AthenaEmailDeliveryResult>)\n      : {};\n  const accepted = asStringArray(raw.accepted);\n  const rejected = asStringArray(raw.rejected);\n  const messageId =\n    typeof raw.messageId === \"string\" && raw.messageId.trim()\n      ? raw.messageId.trim()\n      : undefined;\n  return {\n    accepted,\n    ...(messageId ? { messageId } : {}),\n    provider:\n      typeof raw.provider === \"string\" && raw.provider.trim()\n        ? raw.provider.trim()\n        : providerId,\n    rejected,\n    success: raw.success === true,\n  };\n}\n\nexport async function deliverAthenaEmail(\n  message: AthenaEmailMessage,\n  normalized: NormalizedAthenaEmailConfig\n): Promise<AthenaEmailDeliveryResult> {\n  const provider = normalized.provider;\n  if (!provider) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n      \"Athena email has no provider configured. Pass createClient({ email: { provider } }).\"\n    );\n  }\n  const resolved = resolveAthenaEmailMessage(message, normalized);\n  assertAthenaEmailProviderRuntime(provider);\n  try {\n    const result = await provider.send(resolved);\n    return {\n      ...toPublicEmailDeliveryResult(result, provider.id),\n      from: resolved.from,\n      ...(resolved.fromName ? { fromName: resolved.fromName } : {}),\n    };\n  } catch (cause) {\n    if (cause instanceof AthenaEmailError) {\n      throw cause;\n    }\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_DELIVERY_FAILED,\n      \"Athena email delivery failed.\",\n      { cause }\n    );\n  }\n}\n","import {\n  ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n  AthenaEmailError,\n} from \"./errors.ts\";\nimport {\n  type NormalizedAthenaEmailConfig,\n  normalizeAthenaEmailConfig,\n  toAthenaEmailDiagnostics,\n} from \"./normalize-config.ts\";\nimport { deliverAthenaEmail } from \"./runtime.ts\";\nimport type {\n  AthenaEmailConfig,\n  AthenaEmailDeliveryResult,\n  AthenaEmailMessage,\n  AthenaEmailModule,\n} from \"./types.ts\";\n\nexport function createEmailModule(\n  config?: AthenaEmailConfig | null\n): AthenaEmailModule {\n  const normalized: NormalizedAthenaEmailConfig =\n    normalizeAthenaEmailConfig(config);\n  const diagnostics = toAthenaEmailDiagnostics(normalized);\n  const configured = diagnostics.configured;\n\n  const module: AthenaEmailModule = {\n    get configured() {\n      return configured;\n    },\n    get diagnostics() {\n      return {\n        attachmentFailureMode: diagnostics.attachmentFailureMode,\n        configured: diagnostics.configured,\n        defaults: { ...diagnostics.defaults },\n        providerDelivery: diagnostics.providerDelivery,\n        providerId: diagnostics.providerId,\n        providerRuntimes: diagnostics.providerRuntimes,\n      };\n    },\n    async send(message: AthenaEmailMessage): Promise<AthenaEmailDeliveryResult> {\n      if (!normalized.provider) {\n        throw new AthenaEmailError(\n          ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n          \"Athena email has no provider configured. Pass createClient({ email: { provider } }).\"\n        );\n      }\n      return deliverAthenaEmail(message, normalized);\n    },\n  };\n\n  return Object.freeze(module);\n}\n","import {\n  ATHENA_EMAIL_MESSAGE_INVALID,\n  AthenaEmailError,\n} 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      !(attachment.content instanceof Uint8Array && attachment.content.byteLength === 0);\n    const hasUrl =\n      typeof attachment.fileUrl === \"string\" && 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 { 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","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 = 0x8000;\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 {\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 ? undefined : 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 ? options.mapBody(message) : 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","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(options: ResendEmailProviderOptions): 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 ? message.headers : 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","/**\n * Transport-independent Athena query semantics.\n * Must not contain SQL placeholders, JOIN text, HTTP paths, or Rust DTOs.\n */\n\nexport type AthenaQueryCardinality = \"many\" | \"first\" | \"unique\";\n\nexport type AthenaCompareOperator =\n\t| \"eq\"\n\t| \"neq\"\n\t| \"gt\"\n\t| \"gte\"\n\t| \"lt\"\n\t| \"lte\"\n\t| \"like\"\n\t| \"ilike\";\n\nexport interface AthenaSourceAst {\n\tkind: \"table\";\n\talias?: string;\n\tmodelId?: string;\n\tschema?: string;\n\ttable: string;\n}\n\nexport interface AthenaFieldRefAst {\n\tfield: string;\n\tsource?: string;\n}\n\nexport type AthenaRelationPredicate =\n\t| \"some\"\n\t| \"none\"\n\t| \"every\"\n\t| \"exists\"\n\t| \"is\"\n\t| \"isNot\";\n\nexport interface AthenaRelationConditionAst {\n\tfilter?: AthenaConditionAst;\n\tkind: \"relation\";\n\tpredicate: AthenaRelationPredicate;\n\trelation: string;\n\tvia?: string;\n}\n\nexport interface AthenaResolvedRelationConditionAst {\n\tdescriptor: {\n\t\tcardinality: \"one-to-one\" | \"one-to-many\" | \"many-to-one\" | \"many-to-many\";\n\t\tfrom: { columns: string[]; schema?: string; table: string };\n\t\tid: string;\n\t\tjunction?: {\n\t\t\tfromColumns: string[];\n\t\t\tschema?: string;\n\t\t\ttable: string;\n\t\t\ttoColumns: string[];\n\t\t};\n\t\tname: string;\n\t\tto: { columns: string[]; schema?: string; table: string };\n\t};\n\tfilter?: AthenaConditionAst;\n\tjunctionAlias?: string;\n\tkind: \"resolved-relation\";\n\tpredicate: AthenaRelationPredicate;\n\trelation: string;\n\ttarget: {\n\t\talias: string;\n\t\tmodelId?: string;\n\t\tschema?: string;\n\t\ttable: string;\n\t};\n}\n\nexport interface AthenaColumnSelectionAst {\n\tkind: \"column\";\n\talias?: string;\n\tcolumn: string;\n}\n\nexport interface AthenaRelationSelectionAst {\n\tkind: \"relation\";\n\talias?: string;\n\tquery: AthenaSelectQueryAst;\n\trelation: string;\n\tvia?: string;\n}\n\nexport type AthenaSelectedFieldAst =\n\t| AthenaColumnSelectionAst\n\t| AthenaRelationSelectionAst;\n\nexport interface AthenaSelectionAst {\n\tfields: AthenaSelectedFieldAst[];\n}\n\nexport interface AthenaCompareConditionAst {\n\tfield: AthenaFieldRefAst;\n\tkind: \"compare\";\n\toperator: AthenaCompareOperator;\n\tvalue: unknown;\n}\n\nexport interface AthenaInConditionAst {\n\tfield: AthenaFieldRefAst;\n\tkind: \"in\";\n\tvalues: unknown[];\n}\n\nexport interface AthenaIsNullConditionAst {\n\tfield: AthenaFieldRefAst;\n\tkind: \"is-null\";\n\tnegated?: boolean;\n}\n\nexport interface AthenaBooleanConditionAst {\n\tfield: AthenaFieldRefAst;\n\tkind: \"is-true\" | \"is-false\";\n}\n\nexport interface AthenaContainmentConditionAst {\n\tfield: AthenaFieldRefAst;\n\tkind: \"contains\" | \"contained-by\";\n\tvalue: unknown;\n}\n\nexport interface AthenaLogicalConditionAst {\n\tconditions: AthenaConditionAst[];\n\tkind: \"and\" | \"or\";\n}\n\nexport interface AthenaNotConditionAst {\n\tcondition: AthenaConditionAst;\n\tkind: \"not\";\n}\n\nexport type AthenaConditionAst =\n\t| AthenaCompareConditionAst\n\t| AthenaInConditionAst\n\t| AthenaIsNullConditionAst\n\t| AthenaBooleanConditionAst\n\t| AthenaContainmentConditionAst\n\t| AthenaLogicalConditionAst\n\t| AthenaNotConditionAst\n\t| AthenaRelationConditionAst\n\t| AthenaResolvedRelationConditionAst;\n\nexport interface AthenaOrderAst {\n\tdirection: \"asc\" | \"desc\";\n\tfield: AthenaFieldRefAst;\n\tnulls?: \"first\" | \"last\";\n}\n\nexport interface AthenaPaginationAst {\n\tlimit?: number;\n\toffset?: number;\n\tpage?: number;\n\tpageSize?: number;\n}\n\nexport interface AthenaDistinctAst {\n\ton?: AthenaFieldRefAst[];\n}\n\nexport interface AthenaSelectQueryAst {\n\tcardinality: AthenaQueryCardinality;\n\tdistinct?: AthenaDistinctAst;\n\tfilter?: AthenaConditionAst;\n\tkind: \"select\";\n\torderBy?: AthenaOrderAst[];\n\tpagination?: AthenaPaginationAst;\n\tselection: AthenaSelectionAst;\n\tsource: AthenaSourceAst;\n}\n\nexport type AthenaQueryAst = AthenaSelectQueryAst;\n\nexport function isAthenaSelectQueryAst(\n\tvalue: unknown,\n): value is AthenaSelectQueryAst {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\tconst record = value as Record<string, unknown>;\n\treturn (\n\t\trecord.kind === \"select\" &&\n\t\tBoolean(record.source) &&\n\t\ttypeof record.source === \"object\" &&\n\t\tBoolean(record.selection) &&\n\t\ttypeof record.selection === \"object\"\n\t);\n}\n\nfunction collectConditionTables(\n\tcondition?: AthenaConditionAst,\n): AthenaSourceAst[] {\n\tif (!condition) {\n\t\treturn [];\n\t}\n\tif (condition.kind === \"and\" || condition.kind === \"or\") {\n\t\treturn condition.conditions.flatMap((child) =>\n\t\t\tcollectConditionTables(child),\n\t\t);\n\t}\n\tif (condition.kind === \"not\") {\n\t\treturn collectConditionTables(condition.condition);\n\t}\n\tif (condition.kind === \"relation\") {\n\t\treturn collectConditionTables(condition.filter);\n\t}\n\tif (condition.kind === \"resolved-relation\") {\n\t\treturn [\n\t\t\t{\n\t\t\t\talias: condition.target.alias,\n\t\t\t\tkind: \"table\",\n\t\t\t\tmodelId: condition.target.modelId,\n\t\t\t\tschema: condition.target.schema,\n\t\t\t\ttable: condition.target.table,\n\t\t\t},\n\t\t\t...collectConditionTables(condition.filter),\n\t\t];\n\t}\n\treturn [];\n}\n\nexport function collectAstTables(ast: AthenaSelectQueryAst): AthenaSourceAst[] {\n\tconst tables: AthenaSourceAst[] = [ast.source];\n\tfor (const field of ast.selection.fields) {\n\t\tif (field.kind === \"relation\") {\n\t\t\ttables.push(...collectAstTables(field.query));\n\t\t}\n\t}\n\ttables.push(...collectConditionTables(ast.filter));\n\treturn tables;\n}\n\nexport function selectionHasRelations(ast: AthenaSelectQueryAst): boolean {\n\treturn ast.selection.fields.some((field) => field.kind === \"relation\");\n}\n","import type {\n  AthenaConditionArrayValue,\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaGatewayCondition,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from \"./gateway/types.ts\";\nimport type {\n  AnyModelDef,\n  DatabaseDef,\n  ModelDef,\n  ModelRelationMetadata,\n  RegistryDef,\n  RowOf,\n  SchemaDef,\n} from \"./schema/types.ts\";\nimport type {\n  AthenaColumnKey,\n  HasKnownSelectColumns,\n} from \"./select-column-types.ts\";\n\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>;\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>;\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never]\n  ? string\n  : FilterColumnKey<Row>;\ntype KnownSelectColumnKey<Row> = AthenaColumnKey<Row>;\n\nconst UUID_PATTERN =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** findMany AST where operators. Fluent `.match` / `.or` / `.not` are not in this list. */\nexport const ATHENA_FILTER_OPERATORS = [\n  \"eq\",\n  \"neq\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"like\",\n  \"ilike\",\n  \"is\",\n  \"in\",\n  \"contains\",\n  \"containedBy\",\n] as const;\n\ntype AthenaFilterOperator = (typeof ATHENA_FILTER_OPERATORS)[number];\n\nconst ATHENA_ARRAY_FILTER_OPERATORS = [\n  \"in\",\n  \"contains\",\n  \"containedBy\",\n] as const satisfies readonly AthenaFilterOperator[];\n\ntype AthenaArrayFilterOperator = (typeof ATHENA_ARRAY_FILTER_OPERATORS)[number];\n\ntype AthenaWherePrimitive = AthenaConditionValue;\n\nexport type AthenaWhereOperatorInput = {\n  [K in AthenaFilterOperator]?: K extends AthenaArrayFilterOperator\n    ? AthenaConditionArrayValue\n    : AthenaConditionValue;\n};\n\nexport type AthenaRelationWhereInput<Row = AthenaRowShape> = {\n  every?: AthenaWhere<Row>;\n  exists?: true | Record<string, never>;\n  is?: AthenaWhere<Row> | null;\n  isNot?: AthenaWhere<Row> | null;\n  none?: AthenaWhere<Row>;\n  some?: AthenaWhere<Row>;\n};\n\ntype AthenaWhereColumnInput<Row = AthenaRowShape> = Partial<\n  Record<\n    ResolvedFilterColumnKey<Row>,\n    AthenaWherePrimitive | AthenaWhereOperatorInput | AthenaRelationWhereInput\n  >\n>;\n\ntype AthenaBooleanSafeOperator = Exclude<\n  AthenaFilterOperator,\n  AthenaArrayFilterOperator\n>;\n\ntype AthenaWhereBooleanSafeOperatorInput = Partial<\n  Record<AthenaBooleanSafeOperator, AthenaConditionValue>\n>;\n\ntype AthenaWhereBooleanNotOperatorInput = {\n  [K in AthenaBooleanSafeOperator]: {\n    [P in K]: AthenaConditionValue;\n  } & Partial<Record<Exclude<AthenaBooleanSafeOperator, K>, never>>;\n}[AthenaBooleanSafeOperator];\n\ntype AthenaStrictBooleanOperand<Keys extends string, Value> = {\n  [K in Keys]: {\n    [P in K]: Value;\n  } & Partial<Record<Exclude<Keys, K>, never>>;\n}[Keys];\n\ntype AthenaNonEmptyArray<T> = [T, ...T[]];\n\nexport type AthenaWhereBooleanOperand<Row = AthenaRowShape> =\n  string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>\n    : AthenaStrictBooleanOperand<\n        ResolvedFilterColumnKey<Row>,\n        AthenaWherePrimitive | AthenaWhereBooleanSafeOperatorInput\n      >;\n\ntype AthenaWhereNotOperand<Row = AthenaRowShape> =\n  string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>\n    : AthenaStrictBooleanOperand<\n        ResolvedFilterColumnKey<Row>,\n        AthenaWherePrimitive | AthenaWhereBooleanNotOperatorInput\n      >;\n\nexport type AthenaWhere<Row = AthenaRowShape> = AthenaWhereColumnInput<Row> & {\n  or?: string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>[]\n    : AthenaNonEmptyArray<AthenaWhereBooleanOperand<Row>>;\n  not?: AthenaWhereNotOperand<Row>;\n};\n\nexport interface AthenaRelationSelectNode<\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n  as?: string;\n  limit?: number;\n  offset?: number;\n  orderBy?: AthenaOrderBy;\n  schema?: string;\n  select: TSelect;\n  via?: string;\n  where?: AthenaWhere;\n}\n\nexport type AthenaSelectShape = Record<\n  string,\n  true | AthenaRelationSelectNode<AthenaSelectShape>\n>;\n\ntype AthenaAllowedRelationSelectNodeKey =\n  | \"select\"\n  | \"as\"\n  | \"via\"\n  | \"schema\"\n  | \"where\"\n  | \"orderBy\"\n  | \"limit\"\n  | \"offset\";\n\n/**\n * Structural validation only (relation node shape). Nested relation target rows\n * are not model-checked here unless a richer context path is wired later.\n */\ntype AthenaStructuralValidatedSelectShape<TSelect> = {\n  [K in keyof TSelect]: TSelect[K] extends true\n    ? true\n    : AthenaValidatedRelationSelectNode<TSelect[K]>;\n};\n\ntype AthenaValidatedRelationSelectNode<TNode> = TNode extends {\n  select: infer TChild;\n}\n  ? Exclude<keyof TNode, AthenaAllowedRelationSelectNodeKey> extends never\n    ? TNode extends { schema: string; via: string }\n      ? never\n      : TChild extends Record<string, unknown>\n        ? {\n            [K in keyof TNode]: K extends \"select\"\n              ? AthenaStructuralValidatedSelectShape<TChild>\n              : K extends AthenaAllowedRelationSelectNodeKey\n                ? TNode[K]\n                : never;\n          }\n        : never\n    : never\n  : never;\n\n/**\n * Compile-time validation for `findMany({ select })`.\n *\n * - When `Row` has known model keys: scalar `true` entries must use those keys.\n * - Relation nodes (`{ select: ... }`) keep structural validation and may use\n *   non-row keys (relation names are not row columns).\n * - When `Row` is untyped: free-form keys (same as pre-model behavior).\n */\nexport type AthenaValidatedSelectShape<Row, TSelect> =\n  HasKnownSelectColumns<Row> extends true\n    ? {\n        [K in keyof TSelect]: TSelect[K] extends true\n          ? K extends KnownSelectColumnKey<Row>\n            ? true\n            : never\n          : AthenaValidatedRelationSelectNode<TSelect[K]>;\n      }\n    : AthenaStructuralValidatedSelectShape<TSelect>;\n\ntype GenericRegistryDef = RegistryDef<\n  Record<\n    string,\n    DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>\n  >\n>;\n\ntype AthenaOrderByDirectionInput =\n  | \"asc\"\n  | \"desc\"\n  | \"ascending\"\n  | \"descending\"\n  | boolean\n  | {\n      ascending?: boolean;\n    };\n\nexport type AthenaOrderBy<Row = AthenaRowShape> =\n  | {\n      column: ResolvedFilterColumnKey<Row>;\n      ascending?: boolean;\n    }\n  | Partial<Record<ResolvedFilterColumnKey<Row>, AthenaOrderByDirectionInput>>;\n\nexport interface AthenaFindManyOptions<\n  Row = AthenaRowShape,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n  limit?: number;\n  orderBy?: AthenaOrderBy<Row>;\n  /**\n   * Object select tree. Callers should pass through `findMany(...)`, which\n   * intersects this with `AthenaValidatedSelectShape<Row, TSelect>` so model\n   * column keys are checked after `TSelect` is inferred from the literal.\n   */\n  select: TSelect;\n  where?: AthenaWhere<Row>;\n}\n\ninterface AthenaModelContext<\n  TRegistry extends GenericRegistryDef = GenericRegistryDef,\n  TDatabase extends string = string,\n  TSchema extends string = string,\n  TModel extends AnyModelDef = AnyModelDef,\n> {\n  database: TDatabase;\n  model: TModel;\n  registry: TRegistry;\n  schema: TSchema;\n}\n\ntype Simplify<T> = {\n  [K in keyof T]: T[K];\n} & {};\n\ntype ContextRegistry<TContext> =\n  TContext extends AthenaModelContext<\n    infer TRegistry,\n    string,\n    string,\n    AnyModelDef\n  >\n    ? TRegistry\n    : never;\n\ntype ContextDatabase<TContext> =\n  TContext extends AthenaModelContext<\n    GenericRegistryDef,\n    infer TDatabase,\n    string,\n    AnyModelDef\n  >\n    ? TDatabase\n    : never;\n\ntype ContextModel<TContext> =\n  TContext extends AthenaModelContext<\n    GenericRegistryDef,\n    string,\n    string,\n    infer TModel\n  >\n    ? TModel\n    : never;\n\ntype ModelMetaOf<TContext> =\n  ContextModel<TContext> extends ModelDef<\n    unknown,\n    unknown,\n    unknown,\n    infer TMeta\n  >\n    ? TMeta\n    : never;\n\ntype ModelRelationsOf<TContext> = NonNullable<\n  ModelMetaOf<TContext>[\"relations\"]\n>;\n\ntype SelectedResultKey<TKey extends string, TValue> = TValue extends {\n  as: infer TAlias extends string;\n}\n  ? TAlias\n  : TKey;\n\ntype ScalarSelectionResult<Row, TSelect extends AthenaSelectShape> = {\n  [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends true\n    ? TKey\n    : never]-?: TKey extends keyof NonNullable<Row>\n    ? NonNullable<Row>[TKey]\n    : unknown;\n};\n\ntype RelationByKey<\n  TContext,\n  TKey extends string,\n> = TKey extends keyof ModelRelationsOf<TContext>\n  ? ModelRelationsOf<TContext>[TKey]\n  : never;\n\ntype RelationByVia<TContext, TVia extends string> = {\n  [TKey in keyof ModelRelationsOf<TContext>]: ModelRelationsOf<TContext>[TKey] extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? TVia extends TRelation[\"sourceColumns\"][number]\n        ? TRelation\n        : never\n      : never\n    : never;\n}[keyof ModelRelationsOf<TContext>];\n\ntype ResolvedRelation<TContext, TKey extends string, TValue> =\n  RelationByKey<TContext, TKey> extends never\n    ? TValue extends { via: infer TVia extends string }\n      ? RelationByVia<TContext, TVia>\n      : never\n    : RelationByKey<TContext, TKey>;\n\ntype TargetDatabaseName<\n  TContext,\n  TRelation extends ModelRelationMetadata,\n> = TRelation[\"targetDatabase\"] extends string\n  ? TRelation[\"targetDatabase\"]\n  : ContextDatabase<TContext>;\n\ntype ResolveTargetModel<TContext, TRelation extends ModelRelationMetadata> =\n  ContextRegistry<TContext> extends infer TRegistry\n    ? TRegistry extends GenericRegistryDef\n      ? TargetDatabaseName<TContext, TRelation> extends keyof TRegistry & string\n        ? TRelation[\"targetSchema\"] extends keyof TRegistry[TargetDatabaseName<\n            TContext,\n            TRelation\n          >][\"schemas\"] &\n            string\n          ? TRelation[\"targetModel\"] extends keyof TRegistry[TargetDatabaseName<\n              TContext,\n              TRelation\n            >][\"schemas\"][TRelation[\"targetSchema\"]][\"models\"] &\n              string\n            ? TRegistry[TargetDatabaseName<\n                TContext,\n                TRelation\n              >][\"schemas\"][TRelation[\"targetSchema\"]][\"models\"][TRelation[\"targetModel\"]]\n            : never\n          : never\n        : never\n      : never\n    : never;\n\ntype RelationResultValue<\n  TRelation extends ModelRelationMetadata,\n  TValue,\n  TContext,\n> =\n  TValue extends AthenaRelationSelectNode<infer TChildSelect>\n    ? ResolveTargetModel<TContext, TRelation> extends infer TTargetModel\n      ? TTargetModel extends AnyModelDef\n        ? TRelation[\"kind\"] extends \"one-to-many\" | \"many-to-many\"\n          ? AthenaFindManyResult<\n              RowOf<TTargetModel>,\n              TChildSelect,\n              AthenaModelContext<\n                ContextRegistry<TContext>,\n                TargetDatabaseName<TContext, TRelation>,\n                TRelation[\"targetSchema\"],\n                TTargetModel\n              >\n            >[]\n          : AthenaFindManyResult<\n              RowOf<TTargetModel>,\n              TChildSelect,\n              AthenaModelContext<\n                ContextRegistry<TContext>,\n                TargetDatabaseName<TContext, TRelation>,\n                TRelation[\"targetSchema\"],\n                TTargetModel\n              >\n            > | null\n        : unknown\n      : unknown\n    : never;\n\ntype RelationSelectionResult<TContext, TSelect extends AthenaSelectShape> = {\n  [TKey in Extract<\n    keyof TSelect,\n    string\n  > as TSelect[TKey] extends AthenaRelationSelectNode<AthenaSelectShape>\n    ? SelectedResultKey<TKey, TSelect[TKey]>\n    : never]-?: ResolvedRelation<\n    TContext,\n    TKey,\n    TSelect[TKey]\n  > extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? RelationResultValue<TRelation, TSelect[TKey], TContext>\n      : unknown\n    : unknown;\n};\n\nexport type AthenaFindManyResult<\n  Row,\n  TSelect extends AthenaSelectShape,\n  TContext = unknown,\n> = Simplify<\n  ScalarSelectionResult<Row, TSelect> &\n    RelationSelectionResult<TContext, TSelect>\n>;\n\nconst FILTER_OPERATORS = new Set<AthenaFilterOperator>(ATHENA_FILTER_OPERATORS);\n\nconst ARRAY_FILTER_OPERATORS = new Set<AthenaArrayFilterOperator>(\n  ATHENA_ARRAY_FILTER_OPERATORS\n);\n\nconst BOOLEAN_SAFE_OPERATORS = new Set<AthenaBooleanSafeOperator>(\n  ATHENA_FILTER_OPERATORS.filter(\n    (op): op is AthenaBooleanSafeOperator =>\n      !ATHENA_ARRAY_FILTER_OPERATORS.includes(op as AthenaArrayFilterOperator)\n  )\n);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isUuidString(value: string): boolean {\n  return UUID_PATTERN.test(value.trim());\n}\n\nfunction isUuidIdentifierColumn(column: string): boolean {\n  return (\n    column === \"id\" ||\n    /(?:^|_)uuid(?:_|$)/i.test(column) ||\n    /_id$/i.test(column)\n  );\n}\n\nexport function shouldUseUuidTextComparison(\n  column: string,\n  value: AthenaConditionValue\n): boolean {\n  return (\n    typeof value === \"string\" &&\n    isUuidString(value) &&\n    isUuidIdentifierColumn(column)\n  );\n}\n\nfunction isRelationSelectNode(\n  value: unknown\n): value is AthenaRelationSelectNode {\n  return isRecord(value) && isRecord(value.select);\n}\n\nfunction normalizeIdentifier(value: string, label: string): string {\n  const normalized = value.trim();\n  if (!normalized) {\n    throw new Error(`${label} must be a non-empty string`);\n  }\n  return normalized;\n}\n\nfunction stringifyFilterValue(\n  value: AthenaConditionValue | AthenaConditionArrayValue | string\n): string {\n  if (Array.isArray(value)) {\n    return value.join(\",\");\n  }\n  return String(value);\n}\n\nfunction buildGatewayCondition(\n  operator: AthenaConditionOperator,\n  column?: string,\n  value?: AthenaConditionValue | AthenaConditionArrayValue | string\n): AthenaGatewayCondition {\n  const condition: AthenaGatewayCondition = { operator };\n  if (column) {\n    condition.column = column;\n    if (operator === \"eq\") {\n      condition.eq_column = column;\n    }\n  }\n  if (value !== undefined) {\n    condition.value = value;\n    if (operator === \"eq\") {\n      condition.eq_value = value;\n    }\n  }\n  if (\n    operator === \"eq\" &&\n    column &&\n    value !== undefined &&\n    shouldUseUuidTextComparison(column, value as AthenaConditionValue)\n  ) {\n    condition.column_cast = \"text\";\n    condition.eq_column_cast = \"text\";\n  }\n  return condition;\n}\n\nfunction compileRelationToken(\n  key: string,\n  node: AthenaRelationSelectNode\n): string {\n  const nested = compileSelectShape(node.select);\n  const propertyKey = normalizeIdentifier(key, \"select relation key\");\n  if (node.schema && node.via) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" cannot combine schema and via yet; use schema with the relation key, or use via without schema`\n    );\n  }\n\n  const relationTokenBase = normalizeIdentifier(\n    node.via ?? propertyKey,\n    \"select relation token\"\n  );\n  if (node.schema && relationTokenBase.includes(\".\")) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" already resolves to a qualified relation token; do not also set schema`\n    );\n  }\n\n  const relationSchema = node.schema?.trim();\n  const relationToken = relationSchema\n    ? `${normalizeIdentifier(relationSchema, \"select relation schema\")}.${relationTokenBase}`\n    : relationTokenBase;\n  const alias =\n    node.as?.trim() || (relationToken === propertyKey ? \"\" : propertyKey);\n  const prefix = alias ? `${alias}:` : \"\";\n  return `${prefix}${relationToken}(${nested})`;\n}\n\nexport function compileSelectShape(select: AthenaSelectShape): string {\n  if (!isRecord(select)) {\n    throw new Error(\"findMany select must be an object\");\n  }\n\n  // Emit scalar columns before relation tokens so gateway select lists stay\n  // stable regardless of object key insertion order (relations often declared first).\n  const columns: string[] = [];\n  const relations: string[] = [];\n  for (const [rawKey, rawValue] of Object.entries(select)) {\n    if (rawValue === undefined) {\n      continue;\n    }\n\n    if (rawValue === true) {\n      columns.push(normalizeIdentifier(rawKey, \"select column\"));\n      continue;\n    }\n\n    if (isRelationSelectNode(rawValue)) {\n      relations.push(compileRelationToken(rawKey, rawValue));\n      continue;\n    }\n\n    throw new Error(`Unsupported select node for \"${rawKey}\"`);\n  }\n\n  const tokens = [...columns, ...relations];\n  if (tokens.length === 0) {\n    throw new Error(\"findMany select requires at least one field\");\n  }\n\n  return tokens.join(\",\");\n}\n\nexport function selectShapeUsesRelationSchema(\n  select: AthenaSelectShape\n): boolean {\n  if (!isRecord(select)) {\n    return false;\n  }\n\n  for (const rawValue of Object.values(select)) {\n    if (!isRelationSelectNode(rawValue)) {\n      continue;\n    }\n    if (\n      typeof rawValue.schema === \"string\" &&\n      rawValue.schema.trim().length > 0\n    ) {\n      return true;\n    }\n    if (selectShapeUsesRelationSchema(rawValue.select)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexport function selectShapeHasNestedQueryModifiers(\n  select: AthenaSelectShape\n): boolean {\n  if (!isRecord(select)) {\n    return false;\n  }\n\n  for (const rawValue of Object.values(select)) {\n    if (!isRelationSelectNode(rawValue)) {\n      continue;\n    }\n    if (\n      rawValue.where !== undefined ||\n      rawValue.orderBy !== undefined ||\n      rawValue.limit !== undefined ||\n      rawValue.offset !== undefined\n    ) {\n      return true;\n    }\n    if (selectShapeHasNestedQueryModifiers(rawValue.select)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction compileColumnWhere(\n  column: string,\n  input: AthenaWherePrimitive | AthenaWhereOperatorInput\n): AthenaGatewayCondition[] {\n  const normalizedColumn = normalizeIdentifier(column, \"where column\");\n  if (!isRecord(input)) {\n    return [\n      buildGatewayCondition(\n        \"eq\",\n        normalizedColumn,\n        input as AthenaConditionValue | AthenaConditionArrayValue | undefined\n      ),\n    ];\n  }\n\n  const conditions: AthenaGatewayCondition[] = [];\n  for (const [rawOperator, rawValue] of Object.entries(input)) {\n    if (rawValue === undefined) {\n      continue;\n    }\n    if (!FILTER_OPERATORS.has(rawOperator as AthenaFilterOperator)) {\n      throw new Error(\n        `Unsupported where operator \"${rawOperator}\" on \"${normalizedColumn}\"`\n      );\n    }\n    if (\n      ARRAY_FILTER_OPERATORS.has(rawOperator as AthenaArrayFilterOperator) &&\n      !Array.isArray(rawValue)\n    ) {\n      throw new Error(\n        `where.${normalizedColumn}.${rawOperator} requires an array value`\n      );\n    }\n    conditions.push(\n      buildGatewayCondition(\n        rawOperator as AthenaFilterOperator,\n        normalizedColumn,\n        rawValue as AthenaConditionValue | AthenaConditionArrayValue\n      )\n    );\n  }\n\n  if (conditions.length === 0) {\n    throw new Error(`where.${normalizedColumn} requires at least one operator`);\n  }\n\n  return conditions;\n}\n\nfunction compileBooleanExpressionTerms(\n  clause: AthenaWhereBooleanOperand,\n  label: \"or\" | \"not\"\n): string[] {\n  if (!isRecord(clause)) {\n    throw new Error(`findMany where.${label} clauses must be objects`);\n  }\n\n  const entries = Object.entries(clause).filter(\n    ([, value]) => value !== undefined\n  );\n  if (entries.length !== 1) {\n    throw new Error(\n      `findMany where.${label} clauses must target exactly one column`\n    );\n  }\n\n  const [rawColumn, rawValue] = entries[0];\n  const column = normalizeIdentifier(rawColumn, `where.${label} column`);\n\n  if (!isRecord(rawValue)) {\n    return [\n      `${column}.eq.${stringifyFilterValue(rawValue as AthenaConditionValue)}`,\n    ];\n  }\n\n  const operatorEntries = Object.entries(rawValue).filter(\n    ([, value]) => value !== undefined\n  );\n  if (operatorEntries.length === 0) {\n    throw new Error(\n      `findMany where.${label}.${column} requires at least one operator`\n    );\n  }\n\n  if (label === \"not\" && operatorEntries.length > 1) {\n    throw new Error(\n      \"findMany where.not only supports a single lossless operator expression\"\n    );\n  }\n\n  return operatorEntries.map(([rawOperator, rawOperand]) => {\n    if (!BOOLEAN_SAFE_OPERATORS.has(rawOperator as AthenaBooleanSafeOperator)) {\n      throw new Error(\n        `findMany where.${label} only supports lossless scalar operators`\n      );\n    }\n    if (Array.isArray(rawOperand)) {\n      throw new Error(\n        `findMany where.${label} does not support array-valued operators`\n      );\n    }\n    return `${column}.${rawOperator}.${stringifyFilterValue(rawOperand as AthenaConditionValue)}`;\n  });\n}\n\nexport function compileWhere(\n  where?: AthenaWhere\n): AthenaGatewayCondition[] | undefined {\n  if (where === undefined) {\n    return;\n  }\n  if (!isRecord(where)) {\n    throw new Error(\"findMany where must be an object\");\n  }\n\n  const conditions: AthenaGatewayCondition[] = [];\n  for (const [rawKey, rawValue] of Object.entries(where)) {\n    if (rawValue === undefined) {\n      continue;\n    }\n\n    if (rawKey === \"or\") {\n      if (!Array.isArray(rawValue) || rawValue.length === 0) {\n        throw new Error(\"findMany where.or must be a non-empty array\");\n      }\n      const expressions = rawValue.flatMap((value) =>\n        compileBooleanExpressionTerms(value as AthenaWhereBooleanOperand, \"or\")\n      );\n      conditions.push(\n        buildGatewayCondition(\"or\", undefined, expressions.join(\",\"))\n      );\n      continue;\n    }\n\n    if (rawKey === \"not\") {\n      const expressions = compileBooleanExpressionTerms(\n        rawValue as AthenaWhereBooleanOperand,\n        \"not\"\n      );\n      if (expressions.length !== 1) {\n        throw new Error(\n          \"findMany where.not must compile to exactly one lossless expression\"\n        );\n      }\n      conditions.push(buildGatewayCondition(\"not\", undefined, expressions[0]));\n      continue;\n    }\n\n    conditions.push(\n      ...compileColumnWhere(\n        rawKey,\n        rawValue as AthenaWherePrimitive | AthenaWhereOperatorInput\n      )\n    );\n  }\n\n  return conditions.length > 0 ? conditions : undefined;\n}\n\nfunction resolveOrderDirection(\n  input: AthenaOrderByDirectionInput\n): AthenaSortBy[\"direction\"] {\n  if (typeof input === \"boolean\") {\n    return input === false ? \"descending\" : \"ascending\";\n  }\n  if (typeof input === \"string\") {\n    const normalized = input.trim().toLowerCase();\n    if (normalized === \"asc\" || normalized === \"ascending\") {\n      return \"ascending\";\n    }\n    if (normalized === \"desc\" || normalized === \"descending\") {\n      return \"descending\";\n    }\n    throw new Error(`Unsupported orderBy direction \"${input}\"`);\n  }\n  return input.ascending === false ? \"descending\" : \"ascending\";\n}\n\nexport function compileOrderBy<Row = AthenaRowShape>(\n  orderBy?: AthenaOrderBy<Row>\n): AthenaSortBy | undefined {\n  if (orderBy === undefined) {\n    return;\n  }\n  if (!isRecord(orderBy)) {\n    throw new Error(\"findMany orderBy must be an object\");\n  }\n\n  if (\"column\" in orderBy) {\n    return {\n      direction: orderBy.ascending === false ? \"descending\" : \"ascending\",\n      field: normalizeIdentifier(String(orderBy.column), \"orderBy column\"),\n    };\n  }\n\n  const entries = Object.entries(orderBy).filter(\n    ([, value]) => value !== undefined\n  );\n  if (entries.length === 0) {\n    return;\n  }\n  if (entries.length > 1) {\n    throw new Error(\"findMany orderBy only supports a single column in v1\");\n  }\n\n  const [column, input] = entries[0];\n  return {\n    direction: resolveOrderDirection(input as AthenaOrderByDirectionInput),\n    field: normalizeIdentifier(column, \"orderBy column\"),\n  };\n}\n","export type AthenaQueryBackend = \"gateway\" | \"postgresql\" | \"d1\";\n\nexport interface AthenaQueryCapabilityMatrix {\n\tbackend: AthenaQueryBackend;\n\tilike: boolean;\n\tjsonbContainment: boolean;\n\tmanyToManyRelations: boolean;\n\tnestedOrdering: boolean;\n\tnestedPagination: boolean;\n\tnestedRelations: boolean;\n\tnullsOrdering: boolean;\n\trelationalPredicates: boolean;\n}\n\nexport const GATEWAY_QUERY_CAPABILITIES: AthenaQueryCapabilityMatrix = {\n\tbackend: \"gateway\",\n\tilike: true,\n\tjsonbContainment: true,\n\tmanyToManyRelations: false,\n\tnestedOrdering: true,\n\tnestedPagination: true,\n\tnestedRelations: true,\n\tnullsOrdering: true,\n\trelationalPredicates: false,\n};\n\nexport const POSTGRES_QUERY_CAPABILITIES: AthenaQueryCapabilityMatrix = {\n\tbackend: \"postgresql\",\n\tilike: true,\n\tjsonbContainment: true,\n\tmanyToManyRelations: true,\n\tnestedOrdering: true,\n\tnestedPagination: true,\n\tnestedRelations: true,\n\tnullsOrdering: true,\n\trelationalPredicates: true,\n};\n\nexport const D1_QUERY_CAPABILITIES: AthenaQueryCapabilityMatrix = {\n\tbackend: \"d1\",\n\tilike: false,\n\tjsonbContainment: false,\n\tmanyToManyRelations: true,\n\tnestedOrdering: true,\n\tnestedPagination: true,\n\tnestedRelations: true,\n\tnullsOrdering: false,\n\trelationalPredicates: true,\n};\n","export type AthenaQueryErrorCode =\n\t| \"ATHENA_QUERY_INVALID_SOURCE\"\n\t| \"ATHENA_QUERY_UNKNOWN_FIELD\"\n\t| \"ATHENA_QUERY_UNKNOWN_RELATION\"\n\t| \"ATHENA_QUERY_AMBIGUOUS_RELATION\"\n\t| \"ATHENA_QUERY_INVALID_PAGINATION\"\n\t| \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\"\n\t| \"ATHENA_QUERY_INVALID_NESTING\"\n\t| \"ATHENA_QUERY_INVALID_IDENTIFIER\"\n\t| \"ATHENA_QUERY_INVALID_SELECTION\"\n\t| \"ATHENA_QUERY_INVALID_CONDITION\"\n\t| \"ATHENA_QUERY_INVALID_NORMALIZED_AST\"\n\t| \"ATHENA_QUERY_COMPLEXITY_EXCEEDED\"\n\t| \"ATHENA_QUERY_MAX_DEPTH_EXCEEDED\"\n\t| \"ATHENA_QUERY_CYCLIC_INPUT\"\n\t| \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\"\n\t| \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\";\n\nexport class AthenaQueryError extends Error {\n\treadonly code: AthenaQueryErrorCode;\n\n\tconstructor(code: AthenaQueryErrorCode, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"AthenaQueryError\";\n\t\tthis.code = code;\n\t}\n}\n","import type {\n\tAthenaGatewayCondition,\n\tAthenaSortBy,\n} from \"../../gateway/types.ts\";\nimport type {\n\tAthenaOrderBy,\n\tAthenaRelationSelectNode,\n\tAthenaSelectShape,\n\tAthenaWhere,\n\tAthenaWhereOperatorInput,\n} from \"../../query-ast.ts\";\nimport type {\n\tAthenaCompareOperator,\n\tAthenaConditionAst,\n\tAthenaFieldRefAst,\n\tAthenaOrderAst,\n\tAthenaPaginationAst,\n\tAthenaQueryCardinality,\n\tAthenaRelationPredicate,\n\tAthenaSelectedFieldAst,\n\tAthenaSelectQueryAst,\n\tAthenaSourceAst,\n} from \"./ast.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\n\nconst IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst COMPARE_OPERATORS = new Set<AthenaCompareOperator>([\n\t\"eq\",\n\t\"neq\",\n\t\"gt\",\n\t\"gte\",\n\t\"lt\",\n\t\"lte\",\n\t\"like\",\n\t\"ilike\",\n]);\nconst RELATION_PREDICATES = new Set<AthenaRelationPredicate>([\n\t\"some\",\n\t\"none\",\n\t\"every\",\n\t\"exists\",\n\t\"is\",\n\t\"isNot\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction assertIdentifier(value: string, label: string): string {\n\tconst trimmed = value.trim();\n\tif (!IDENTIFIER.test(trimmed)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_IDENTIFIER\",\n\t\t\t`Invalid ${label}: ${value}`,\n\t\t);\n\t}\n\treturn trimmed;\n}\n\nexport function parseSourceName(raw: string): AthenaSourceAst {\n\tconst trimmed = raw.trim();\n\tif (!trimmed) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t\t\"Query source table is required\",\n\t\t);\n\t}\n\tconst segments = trimmed.split(\".\").map((segment) => segment.trim());\n\tif (segments.some((segment) => !IDENTIFIER.test(segment))) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t\t`Invalid table identifier: ${raw}`,\n\t\t);\n\t}\n\tif (segments.length === 1) {\n\t\treturn { kind: \"table\", table: segments[0] as string };\n\t}\n\tif (segments.length === 2) {\n\t\treturn {\n\t\t\tkind: \"table\",\n\t\t\tschema: segments[0],\n\t\t\ttable: segments[1] as string,\n\t\t};\n\t}\n\tthrow new AthenaQueryError(\n\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t`Table identifier is too deeply qualified: ${raw}`,\n\t);\n}\n\nfunction isRelationSelectNode(\n\tvalue: unknown,\n): value is AthenaRelationSelectNode {\n\treturn isRecord(value) && isRecord(value.select);\n}\n\nfunction normalizeSelectShape(\n\tselect: AthenaSelectShape,\n\tparentSource: AthenaSourceAst,\n\tcardinality: AthenaQueryCardinality,\n): AthenaSelectedFieldAst[] {\n\tif (!isRecord(select)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\"select must be an object\",\n\t\t);\n\t}\n\n\tconst fields: AthenaSelectedFieldAst[] = [];\n\tfor (const [rawKey, rawValue] of Object.entries(select)) {\n\t\tif (rawValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (rawValue === true) {\n\t\t\tfields.push({\n\t\t\t\tkind: \"column\",\n\t\t\t\tcolumn: assertIdentifier(rawKey, \"select column\"),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isRelationSelectNode(rawValue)) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_INVALID_NESTING\",\n\t\t\t\t`Unsupported select node for \"${rawKey}\"`,\n\t\t\t);\n\t\t}\n\t\tconst relationName = assertIdentifier(\n\t\t\trawValue.via?.trim() || rawKey,\n\t\t\t\"select relation\",\n\t\t);\n\t\tconst alias =\n\t\t\trawValue.as?.trim() ||\n\t\t\t(relationName === rawKey\n\t\t\t\t? undefined\n\t\t\t\t: assertIdentifier(rawKey, \"relation alias\"));\n\t\tconst nestedSource = rawValue.schema?.trim()\n\t\t\t? {\n\t\t\t\t\tkind: \"table\" as const,\n\t\t\t\t\tschema: assertIdentifier(rawValue.schema, \"relation schema\"),\n\t\t\t\t\ttable: relationName,\n\t\t\t\t}\n\t\t\t: parseSourceName(\n\t\t\t\t\trelationName.includes(\".\") ? relationName : relationName,\n\t\t\t\t);\n\n\t\tfields.push({\n\t\t\talias,\n\t\t\tkind: \"relation\",\n\t\t\tquery: {\n\t\t\t\tcardinality: \"many\",\n\t\t\t\tfilter: normalizeWhere(rawValue.where),\n\t\t\t\tkind: \"select\",\n\t\t\t\torderBy: normalizeOrderBy(rawValue.orderBy),\n\t\t\t\tpagination: normalizePagination({\n\t\t\t\t\tlimit: rawValue.limit,\n\t\t\t\t\toffset: rawValue.offset,\n\t\t\t\t}),\n\t\t\t\tselection: {\n\t\t\t\t\tfields: normalizeSelectShape(rawValue.select, nestedSource, \"many\"),\n\t\t\t\t},\n\t\t\t\tsource:\n\t\t\t\t\tnestedSource.table === relationName && !rawValue.schema\n\t\t\t\t\t\t? { kind: \"table\", table: relationName }\n\t\t\t\t\t\t: nestedSource,\n\t\t\t},\n\t\t\trelation: relationName,\n\t\t\tvia: rawValue.via?.trim(),\n\t\t});\n\t\tvoid parentSource;\n\t\tvoid cardinality;\n\t}\n\n\tif (fields.length === 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\"select requires at least one field\",\n\t\t);\n\t}\n\treturn fields;\n}\n\nfunction splitTopLevel(input: string, separator: string): string[] {\n\tconst parts: string[] = [];\n\tlet depth = 0;\n\tlet start = 0;\n\tfor (let index = 0; index < input.length; index += 1) {\n\t\tconst char = input[index];\n\t\tif (char === \"(\") {\n\t\t\tdepth += 1;\n\t\t} else if (char === \")\") {\n\t\t\tdepth = Math.max(0, depth - 1);\n\t\t} else if (char === separator && depth === 0) {\n\t\t\tparts.push(input.slice(start, index));\n\t\t\tstart = index + 1;\n\t\t}\n\t}\n\tparts.push(input.slice(start));\n\treturn parts.map((part) => part.trim()).filter(Boolean);\n}\n\nexport function parseSelectList(\n\traw: string,\n\tparentSource: AthenaSourceAst,\n): AthenaSelectedFieldAst[] {\n\tconst tokens = splitTopLevel(raw, \",\");\n\tif (tokens.length === 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\"select requires at least one field\",\n\t\t);\n\t}\n\n\tconst fields: AthenaSelectedFieldAst[] = [];\n\tfor (const token of tokens) {\n\t\tconst open = token.indexOf(\"(\");\n\t\tif (open < 0) {\n\t\t\tif (token === \"*\") {\n\t\t\t\tfields.push({ kind: \"column\", column: \"*\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst aliasMatch =\n\t\t\t\t/^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/.exec(\n\t\t\t\t\ttoken,\n\t\t\t\t);\n\t\t\tif (aliasMatch) {\n\t\t\t\tfields.push({\n\t\t\t\t\talias: aliasMatch[1],\n\t\t\t\t\tcolumn: aliasMatch[2] as string,\n\t\t\t\t\tkind: \"column\",\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfields.push({\n\t\t\t\tcolumn: assertIdentifier(\n\t\t\t\t\ttoken.split(\".\").pop() ?? token,\n\t\t\t\t\t\"select column\",\n\t\t\t\t),\n\t\t\t\tkind: \"column\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (!token.endsWith(\")\")) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_INVALID_NESTING\",\n\t\t\t\t`Malformed relation select token: ${token}`,\n\t\t\t);\n\t\t}\n\t\tconst head = token.slice(0, open).trim();\n\t\tconst inner = token.slice(open + 1, -1);\n\t\tconst aliasIndex = head.indexOf(\":\");\n\t\tconst alias =\n\t\t\taliasIndex >= 0 ? head.slice(0, aliasIndex).trim() : undefined;\n\t\tconst relationToken =\n\t\t\taliasIndex >= 0 ? head.slice(aliasIndex + 1).trim() : head;\n\t\tconst bang = relationToken.indexOf(\"!\");\n\t\tconst relationPath =\n\t\t\tbang >= 0 ? relationToken.slice(0, bang).trim() : relationToken;\n\t\tconst nestedSource = parseSourceName(relationPath);\n\t\tfields.push({\n\t\t\talias: alias || undefined,\n\t\t\tkind: \"relation\",\n\t\t\tquery: {\n\t\t\t\tcardinality: \"many\",\n\t\t\t\tkind: \"select\",\n\t\t\t\tselection: { fields: parseSelectList(inner, nestedSource) },\n\t\t\t\tsource: nestedSource,\n\t\t\t},\n\t\t\trelation: nestedSource.table,\n\t\t});\n\t}\n\tvoid parentSource;\n\treturn fields;\n}\n\nfunction fieldRef(field: string): AthenaFieldRefAst {\n\treturn { field: assertIdentifier(field, \"field\") };\n}\n\nfunction isRelationWhereValue(\n\tvalue: unknown,\n): value is Record<string, unknown> {\n\tif (!isRecord(value)) {\n\t\treturn false;\n\t}\n\tconst keys = Object.keys(value).filter((key) => value[key] !== undefined);\n\tif (\n\t\tkeys.some(\n\t\t\t(key) =>\n\t\t\t\tkey !== \"is\" && RELATION_PREDICATES.has(key as AthenaRelationPredicate),\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\treturn keys.includes(\"is\") && isRecord(value.is);\n}\n\nfunction normalizeRelationPredicate(\n\trelation: string,\n\tvalue: Record<string, unknown>,\n\tseen: WeakSet<object>,\n\tpath: string,\n): AthenaConditionAst {\n\tconst keys = Object.keys(value).filter((key) => value[key] !== undefined);\n\tconst predicateKeys = keys.filter((key) =>\n\t\tRELATION_PREDICATES.has(key as AthenaRelationPredicate),\n\t);\n\tif (predicateKeys.length !== 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_CONDITION\",\n\t\t\t`Relation \"${relation}\" at ${path} requires exactly one of some/none/every/exists/is/isNot`,\n\t\t);\n\t}\n\tconst predicate = predicateKeys[0] as AthenaRelationPredicate;\n\tconst operand = value[predicate];\n\tif (predicate === \"exists\") {\n\t\tif (\n\t\t\toperand === true ||\n\t\t\t(isRecord(operand) && Object.keys(operand).length === 0)\n\t\t) {\n\t\t\treturn { kind: \"relation\", predicate, relation };\n\t\t}\n\t\tif (!isRecord(operand)) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_INVALID_CONDITION\",\n\t\t\t\t`exists at ${path}.${relation} must be true or a filter object`,\n\t\t\t);\n\t\t}\n\t}\n\tif (operand === undefined) {\n\t\treturn { kind: \"relation\", predicate, relation };\n\t}\n\tif (isRecord(operand) && Object.keys(operand).length === 0) {\n\t\treturn { kind: \"relation\", predicate, relation };\n\t}\n\treturn {\n\t\tfilter: normalizeWhere(\n\t\t\toperand as AthenaWhere,\n\t\t\tseen,\n\t\t\t`${path}.${relation}.${predicate}`,\n\t\t),\n\t\tkind: \"relation\",\n\t\tpredicate,\n\t\trelation,\n\t};\n}\n\nfunction normalizeColumnPredicate(\n\tcolumn: string,\n\tvalue: unknown,\n): AthenaConditionAst[] {\n\tconst field = fieldRef(column);\n\tif (!isRecord(value)) {\n\t\tif (value === null) {\n\t\t\treturn [{ field, kind: \"is-null\" }];\n\t\t}\n\t\treturn [{ field, kind: \"compare\", operator: \"eq\", value }];\n\t}\n\n\tconst conditions: AthenaConditionAst[] = [];\n\tfor (const [operator, operand] of Object.entries(value)) {\n\t\tif (operand === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (operator === \"in\") {\n\t\t\tconditions.push({\n\t\t\t\tfield,\n\t\t\t\tkind: \"in\",\n\t\t\t\tvalues: Array.isArray(operand) ? operand : [operand],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (operator === \"contains\") {\n\t\t\tconditions.push({ field, kind: \"contains\", value: operand });\n\t\t\tcontinue;\n\t\t}\n\t\tif (operator === \"containedBy\") {\n\t\t\tconditions.push({ field, kind: \"contained-by\", value: operand });\n\t\t\tcontinue;\n\t\t}\n\t\tif (operator === \"is\") {\n\t\t\tif (operand === null || operand === \"null\") {\n\t\t\t\tconditions.push({ field, kind: \"is-null\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (operand === true || operand === \"true\") {\n\t\t\t\tconditions.push({ field, kind: \"is-true\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (operand === false || operand === \"false\") {\n\t\t\t\tconditions.push({ field, kind: \"is-false\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (COMPARE_OPERATORS.has(operator as AthenaCompareOperator)) {\n\t\t\tif (operator === \"eq\" && operand === null) {\n\t\t\t\tconditions.push({ field, kind: \"is-null\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (operator === \"neq\" && operand === null) {\n\t\t\t\tconditions.push({ field, kind: \"is-null\", negated: true });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconditions.push({\n\t\t\t\tfield,\n\t\t\t\tkind: \"compare\",\n\t\t\t\toperator: operator as AthenaCompareOperator,\n\t\t\t\tvalue: operand,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t`Unsupported where operator \"${operator}\" on \"${column}\"`,\n\t\t);\n\t}\n\tif (conditions.length === 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t`where.${column} requires at least one operator`,\n\t\t);\n\t}\n\treturn conditions;\n}\n\nexport function normalizeWhere(\n\twhere?: AthenaWhere | Record<string, unknown>,\n\tseen: WeakSet<object> = new WeakSet<object>(),\n\tpath = \"where\",\n): AthenaConditionAst | undefined {\n\tif (where === undefined) {\n\t\treturn;\n\t}\n\tif (!isRecord(where)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\"where must be an object\",\n\t\t);\n\t}\n\tif (seen.has(where)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_CYCLIC_INPUT\",\n\t\t\t`Cyclic where object at ${path}`,\n\t\t);\n\t}\n\tseen.add(where);\n\n\tconst parts: AthenaConditionAst[] = [];\n\tfor (const [key, value] of Object.entries(where)) {\n\t\tif (value === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (key === \"or\") {\n\t\t\tif (!Array.isArray(value) || value.length === 0) {\n\t\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\t\t\"where.or must be a non-empty array\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst orParts = value.flatMap((clause) => {\n\t\t\t\tconst normalized = normalizeWhere(\n\t\t\t\t\tclause as AthenaWhere,\n\t\t\t\t\tseen,\n\t\t\t\t\t`${path}.or`,\n\t\t\t\t);\n\t\t\t\treturn normalized ? [normalized] : [];\n\t\t\t});\n\t\t\tif (orParts.length === 1) {\n\t\t\t\tparts.push(orParts[0] as AthenaConditionAst);\n\t\t\t} else if (orParts.length > 1) {\n\t\t\t\tparts.push({ kind: \"or\", conditions: orParts });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (key === \"not\") {\n\t\t\tconst negated = normalizeWhere(value as AthenaWhere, seen, `${path}.not`);\n\t\t\tif (negated) {\n\t\t\t\tparts.push({ kind: \"not\", condition: negated });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (isRecord(value) && seen.has(value)) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_CYCLIC_INPUT\",\n\t\t\t\t`Cyclic where object at ${path}.${key}`,\n\t\t\t);\n\t\t}\n\t\tif (isRelationWhereValue(value)) {\n\t\t\tparts.push(normalizeRelationPredicate(key, value, seen, path));\n\t\t\tcontinue;\n\t\t}\n\t\tparts.push(\n\t\t\t...normalizeColumnPredicate(\n\t\t\t\tkey,\n\t\t\t\tvalue as AthenaWhereOperatorInput | unknown,\n\t\t\t),\n\t\t);\n\t}\n\n\tif (parts.length === 0) {\n\t\treturn;\n\t}\n\tif (parts.length === 1) {\n\t\treturn parts[0];\n\t}\n\treturn { kind: \"and\", conditions: parts };\n}\n\nexport function normalizeGatewayConditions(\n\tconditions?: AthenaGatewayCondition[],\n): AthenaConditionAst | undefined {\n\tif (!conditions?.length) {\n\t\treturn;\n\t}\n\tconst parts: AthenaConditionAst[] = [];\n\tfor (const condition of conditions) {\n\t\tconst operator = (condition.operator || \"eq\").toLowerCase();\n\t\tconst column = condition.column ?? condition.eq_column;\n\t\tconst value =\n\t\t\tcondition.value === undefined ? condition.eq_value : condition.value;\n\t\tif (operator === \"or\" || operator === \"not\") {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\t`Raw \"${operator}\" expressions cannot be lifted into the Athena Query AST`,\n\t\t\t);\n\t\t}\n\t\tif (!column) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\t\"Condition requires a column\",\n\t\t\t);\n\t\t}\n\t\tparts.push(\n\t\t\t...normalizeColumnPredicate(column, {\n\t\t\t\t[operator === \"containedby\" ? \"containedBy\" : operator]: value,\n\t\t\t}),\n\t\t);\n\t}\n\tif (parts.length === 1) {\n\t\treturn parts[0];\n\t}\n\treturn { kind: \"and\", conditions: parts };\n}\n\nexport function normalizeOrderBy(\n\torderBy?: AthenaOrderBy | AthenaSortBy | Record<string, unknown>,\n): AthenaOrderAst[] | undefined {\n\tif (!orderBy) {\n\t\treturn;\n\t}\n\tif (!isRecord(orderBy)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\"orderBy must be an object\",\n\t\t);\n\t}\n\tif (\"field\" in orderBy && typeof orderBy.field === \"string\") {\n\t\treturn [\n\t\t\t{\n\t\t\t\tdirection: orderBy.direction === \"descending\" ? \"desc\" : \"asc\",\n\t\t\t\tfield: fieldRef(orderBy.field),\n\t\t\t},\n\t\t];\n\t}\n\tif (\"column\" in orderBy && orderBy.column !== undefined) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tdirection: orderBy.ascending === false ? \"desc\" : \"asc\",\n\t\t\t\tfield: fieldRef(String(orderBy.column)),\n\t\t\t},\n\t\t];\n\t}\n\tconst entries = Object.entries(orderBy).filter(\n\t\t([, value]) => value !== undefined,\n\t);\n\tif (entries.length === 0) {\n\t\treturn;\n\t}\n\tif (entries.length > 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\"orderBy only supports a single column in v1\",\n\t\t);\n\t}\n\tconst [column, input] = entries[0] as [string, unknown];\n\tlet direction: \"asc\" | \"desc\" = \"asc\";\n\tif (input === false || input === \"desc\" || input === \"descending\") {\n\t\tdirection = \"desc\";\n\t} else if (isRecord(input) && input.ascending === false) {\n\t\tdirection = \"desc\";\n\t}\n\treturn [{ direction, field: fieldRef(column) }];\n}\n\nexport function normalizePagination(input: {\n\tlimit?: number;\n\toffset?: number;\n\tcurrentPage?: number;\n\tcurrent_page?: number;\n\tpageSize?: number;\n\tpage_size?: number;\n}): AthenaPaginationAst | undefined {\n\tconst page = input.currentPage ?? input.current_page;\n\tconst pageSize = input.pageSize ?? input.page_size;\n\tif (\n\t\tinput.limit === undefined &&\n\t\tinput.offset === undefined &&\n\t\tpage === undefined &&\n\t\tpageSize === undefined\n\t) {\n\t\treturn;\n\t}\n\tif (page !== undefined && page < 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_PAGINATION\",\n\t\t\t\"current_page must be >= 1\",\n\t\t);\n\t}\n\tif (pageSize !== undefined && pageSize < 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_PAGINATION\",\n\t\t\t\"page_size must be >= 0\",\n\t\t);\n\t}\n\treturn {\n\t\tlimit: input.limit,\n\t\toffset: input.offset,\n\t\tpage,\n\t\tpageSize,\n\t};\n}\n\nexport function canonicalizePagination(pagination?: AthenaPaginationAst): {\n\tlimit?: number;\n\toffset?: number;\n} {\n\tif (!pagination) {\n\t\treturn {};\n\t}\n\tlet { limit, offset } = pagination;\n\tif (limit === undefined && pagination.pageSize !== undefined) {\n\t\tlimit = Math.max(0, Math.trunc(pagination.pageSize));\n\t}\n\tif (\n\t\toffset === undefined &&\n\t\tpagination.page !== undefined &&\n\t\tpagination.pageSize !== undefined\n\t) {\n\t\toffset =\n\t\t\t(Math.trunc(pagination.page) - 1) *\n\t\t\tMath.max(0, Math.trunc(pagination.pageSize));\n\t}\n\treturn { limit, offset };\n}\n\nexport function normalizeFindManyInput(input: {\n\ttable: string;\n\tselect: AthenaSelectShape;\n\twhere?: AthenaWhere | Record<string, unknown>;\n\torderBy?: AthenaOrderBy | Record<string, unknown>;\n\tlimit?: number;\n\toffset?: number;\n\tcurrentPage?: number;\n\tpageSize?: number;\n\tcardinality?: AthenaQueryCardinality;\n\tmodelId?: string;\n}): AthenaSelectQueryAst {\n\tconst source = parseSourceName(input.table);\n\tif (input.modelId) {\n\t\tsource.modelId = input.modelId;\n\t}\n\tconst pagination = normalizePagination({\n\t\tcurrentPage: input.currentPage,\n\t\tlimit: input.limit,\n\t\toffset: input.offset,\n\t\tpageSize: input.pageSize,\n\t});\n\treturn {\n\t\tcardinality: input.cardinality ?? \"many\",\n\t\tfilter: normalizeWhere(input.where),\n\t\tkind: \"select\",\n\t\torderBy: normalizeOrderBy(input.orderBy),\n\t\tpagination,\n\t\tselection: {\n\t\t\tfields: normalizeSelectShape(\n\t\t\t\tinput.select,\n\t\t\t\tsource,\n\t\t\t\tinput.cardinality ?? \"many\",\n\t\t\t),\n\t\t},\n\t\tsource,\n\t};\n}\n\nexport function normalizeFindFirstInput(\n\tinput: Omit<Parameters<typeof normalizeFindManyInput>[0], \"cardinality\">,\n): AthenaSelectQueryAst {\n\treturn normalizeFindManyInput({ ...input, cardinality: \"first\" });\n}\n\nexport function normalizeFindUniqueInput(\n\tinput: Omit<Parameters<typeof normalizeFindManyInput>[0], \"cardinality\">,\n): AthenaSelectQueryAst {\n\treturn normalizeFindManyInput({ ...input, cardinality: \"unique\" });\n}\n\nexport function isFindManyAstPayload(value: unknown): value is {\n\tlimit?: number;\n\torderBy?: Record<string, unknown>;\n\tselect: AthenaSelectShape;\n\ttable_name: string;\n\twhere?: Record<string, unknown>;\n} {\n\tif (!isRecord(value) || typeof value.table_name !== \"string\") {\n\t\treturn false;\n\t}\n\tif (!isRecord(value.select)) {\n\t\treturn false;\n\t}\n\treturn Object.values(value.select).some(\n\t\t(entry) => entry === true || isRelationSelectNode(entry),\n\t);\n}\n\nexport function whereHasRelationPredicates(\n\tvalue: unknown,\n\tseen: WeakSet<object> = new WeakSet<object>(),\n): boolean {\n\tconst where = isRecord(value) && \"where\" in value ? value.where : value;\n\tif (!isRecord(where) || seen.has(where)) {\n\t\treturn false;\n\t}\n\tseen.add(where);\n\tfor (const [key, child] of Object.entries(where)) {\n\t\tif (child === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (key === \"or\" && Array.isArray(child)) {\n\t\t\tif (child.some((clause) => whereHasRelationPredicates(clause, seen))) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (key === \"not\" && whereHasRelationPredicates(child, seen)) {\n\t\t\treturn true;\n\t\t}\n\t\tif (isRelationWhereValue(child)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport function selectPayloadHasRelations(value: unknown): boolean {\n\tif (!isRecord(value)) {\n\t\treturn false;\n\t}\n\tif (whereHasRelationPredicates(value)) {\n\t\treturn true;\n\t}\n\tif (isRecord(value.select)) {\n\t\treturn Object.values(value.select).some((entry) =>\n\t\t\tisRelationSelectNode(entry),\n\t\t);\n\t}\n\tif (typeof value.select === \"string\" && value.select.includes(\"(\")) {\n\t\treturn true;\n\t}\n\tif (typeof value.columns === \"string\" && value.columns.includes(\"(\")) {\n\t\treturn true;\n\t}\n\tif (\n\t\tArray.isArray(value.columns) &&\n\t\tvalue.columns.some((column) => String(column).includes(\"(\"))\n\t) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport function normalizeTransportPayload(\n\tpayload: unknown,\n): AthenaSelectQueryAst {\n\tif (!isRecord(payload)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t\t\"Query payload must be an object\",\n\t\t);\n\t}\n\n\tif (payload.kind === \"select\" && isRecord(payload.source)) {\n\t\treturn payload as unknown as AthenaSelectQueryAst;\n\t}\n\n\tconst table = String(payload.table_name ?? \"\").trim();\n\tif (!table) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t\t\"table_name is required\",\n\t\t);\n\t}\n\tconst source = parseSourceName(table);\n\n\tlet fields: AthenaSelectedFieldAst[];\n\tif (isRecord(payload.select) && !Array.isArray(payload.select)) {\n\t\tconst asShape = payload.select as AthenaSelectShape;\n\t\tconst hasRelation = Object.values(asShape).some((value) =>\n\t\t\tisRelationSelectNode(value),\n\t\t);\n\t\tif (\n\t\t\thasRelation ||\n\t\t\tObject.values(asShape).every((value) => value === true)\n\t\t) {\n\t\t\tfields = normalizeSelectShape(asShape, source, \"many\");\n\t\t} else {\n\t\t\tfields = normalizeSelectShape(asShape, source, \"many\");\n\t\t}\n\t} else {\n\t\tconst rawColumns =\n\t\t\ttypeof payload.select === \"string\"\n\t\t\t\t? payload.select\n\t\t\t\t: Array.isArray(payload.columns)\n\t\t\t\t\t? payload.columns.join(\",\")\n\t\t\t\t\t: typeof payload.columns === \"string\"\n\t\t\t\t\t\t? payload.columns\n\t\t\t\t\t\t: \"*\";\n\t\tfields =\n\t\t\trawColumns.trim() === \"\" || rawColumns.trim() === \"*\"\n\t\t\t\t? [{ kind: \"column\", column: \"*\" }]\n\t\t\t\t: parseSelectList(rawColumns, source);\n\t}\n\n\treturn {\n\t\tcardinality: \"many\",\n\t\tfilter:\n\t\t\tnormalizeWhere(payload.where as AthenaWhere | undefined) ??\n\t\t\tnormalizeGatewayConditions(\n\t\t\t\tpayload.conditions as AthenaGatewayCondition[] | undefined,\n\t\t\t),\n\t\tkind: \"select\",\n\t\torderBy: normalizeOrderBy(\n\t\t\t(payload.orderBy as AthenaOrderBy | undefined) ??\n\t\t\t\t(payload.sort_by as AthenaSortBy | undefined),\n\t\t),\n\t\tpagination: normalizePagination({\n\t\t\tcurrent_page: payload.current_page as number | undefined,\n\t\t\tlimit: payload.limit as number | undefined,\n\t\t\toffset: payload.offset as number | undefined,\n\t\t\tpage_size: payload.page_size as number | undefined,\n\t\t}),\n\t\tselection: { fields },\n\t\tsource,\n\t};\n}\n","import type { AthenaConditionAst, AthenaSelectQueryAst } from \"./ast.ts\";\nimport type { AthenaQueryCapabilityMatrix } from \"./capabilities.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\nimport type { AthenaQueryPlan } from \"./plan.ts\";\n\nconst IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nfunction walkConditions(\n\tcondition: AthenaConditionAst | undefined,\n\tvisit: (node: AthenaConditionAst) => void,\n): void {\n\tif (!condition) {\n\t\treturn;\n\t}\n\tvisit(condition);\n\tif (condition.kind === \"and\" || condition.kind === \"or\") {\n\t\tfor (const child of condition.conditions) {\n\t\t\twalkConditions(child, visit);\n\t\t}\n\t}\n\tif (condition.kind === \"not\") {\n\t\twalkConditions(condition.condition, visit);\n\t}\n\tif (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n\t\twalkConditions(condition.filter, visit);\n\t}\n}\n\nexport const DEFAULT_QUERY_MAX_NESTED_DEPTH = 8;\nexport const DEFAULT_QUERY_MAX_RELATIONS = 32;\n\nfunction countConditionRelations(condition?: AthenaConditionAst): number {\n\tif (!condition) {\n\t\treturn 0;\n\t}\n\tif (condition.kind === \"and\" || condition.kind === \"or\") {\n\t\treturn condition.conditions.reduce(\n\t\t\t(total, child) => total + countConditionRelations(child),\n\t\t\t0,\n\t\t);\n\t}\n\tif (condition.kind === \"not\") {\n\t\treturn countConditionRelations(condition.condition);\n\t}\n\tif (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n\t\treturn 1 + countConditionRelations(condition.filter);\n\t}\n\treturn 0;\n}\n\nfunction measureConditionDepth(condition?: AthenaConditionAst): number {\n\tif (!condition) {\n\t\treturn 0;\n\t}\n\tif (condition.kind === \"and\" || condition.kind === \"or\") {\n\t\treturn condition.conditions.reduce(\n\t\t\t(depth, child) => Math.max(depth, measureConditionDepth(child)),\n\t\t\t0,\n\t\t);\n\t}\n\tif (condition.kind === \"not\") {\n\t\treturn measureConditionDepth(condition.condition);\n\t}\n\tif (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n\t\treturn 1 + measureConditionDepth(condition.filter);\n\t}\n\treturn 0;\n}\n\nexport function countAstRelations(ast: AthenaSelectQueryAst): number {\n\tlet count = countConditionRelations(ast.filter);\n\tfor (const field of ast.selection.fields) {\n\t\tif (field.kind === \"relation\") {\n\t\t\tcount += 1 + countAstRelations(field.query);\n\t\t}\n\t}\n\treturn count;\n}\n\nexport function measureAstDepth(ast: AthenaSelectQueryAst): number {\n\tlet depth = measureConditionDepth(ast.filter);\n\tfor (const field of ast.selection.fields) {\n\t\tif (field.kind === \"relation\") {\n\t\t\tdepth = Math.max(depth, 1 + measureAstDepth(field.query));\n\t\t}\n\t}\n\treturn depth;\n}\n\nexport function validateQueryComplexity(\n\tast: AthenaSelectQueryAst,\n\tlimits?: { maxNestedDepth?: number; maxRelations?: number },\n): void {\n\tconst maxDepth = limits?.maxNestedDepth ?? DEFAULT_QUERY_MAX_NESTED_DEPTH;\n\tconst maxRelations = limits?.maxRelations ?? DEFAULT_QUERY_MAX_RELATIONS;\n\tif (measureAstDepth(ast) > maxDepth) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_NESTING\",\n\t\t\t`Nested relation depth exceeds ${maxDepth}`,\n\t\t);\n\t}\n\tif (countAstRelations(ast) > maxRelations) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_NESTING\",\n\t\t\t`Relation count exceeds ${maxRelations}`,\n\t\t);\n\t}\n}\n\nexport function validateSelectQueryAst(ast: AthenaSelectQueryAst): void {\n\tif (!IDENTIFIER.test(ast.source.table)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t\t`Invalid source table: ${ast.source.table}`,\n\t\t);\n\t}\n\tif (ast.selection.fields.length === 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\"select requires at least one field\",\n\t\t);\n\t}\n\tif (ast.pagination?.page !== undefined && ast.pagination.page < 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_PAGINATION\",\n\t\t\t\"page must be >= 1\",\n\t\t);\n\t}\n\tvalidateQueryComplexity(ast);\n}\n\nexport function validatePlanAgainstCapabilities(\n\tplan: AthenaQueryPlan,\n\tcapabilities: AthenaQueryCapabilityMatrix,\n): void {\n\tif (planHasUnsupportedNulls(plan) && !capabilities.nullsOrdering) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n\t\t\t`NULL ordering is unsupported on ${capabilities.backend}`,\n\t\t);\n\t}\n\n\twalkConditions(plan.filter, (node) => {\n\t\tif (\n\t\t\tnode.kind === \"compare\" &&\n\t\t\tnode.operator === \"ilike\" &&\n\t\t\t!capabilities.ilike\n\t\t) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\t`ilike is unsupported on ${capabilities.backend}`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\t(node.kind === \"contains\" || node.kind === \"contained-by\") &&\n\t\t\t!capabilities.jsonbContainment\n\t\t) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\t`${node.kind} is unsupported on ${capabilities.backend}`,\n\t\t\t);\n\t\t}\n\t});\n\n\tconst hasRelations = plan.selection.some(\n\t\t(field) => field.kind === \"relation\",\n\t);\n\tif (hasRelations && !capabilities.nestedRelations) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n\t\t\t`Nested relations are unsupported on ${capabilities.backend}`,\n\t\t);\n\t}\n\n\tlet hasRelationalPredicate = false;\n\tlet hasManyToMany = false;\n\twalkConditions(plan.filter, (node) => {\n\t\tif (node.kind === \"relation\" || node.kind === \"resolved-relation\") {\n\t\t\thasRelationalPredicate = true;\n\t\t\tif (\n\t\t\t\tnode.kind === \"resolved-relation\" &&\n\t\t\t\tnode.descriptor.cardinality === \"many-to-many\"\n\t\t\t) {\n\t\t\t\thasManyToMany = true;\n\t\t\t}\n\t\t}\n\t});\n\tfor (const field of plan.selection) {\n\t\tif (\n\t\t\tfield.kind === \"relation\" &&\n\t\t\tfield.descriptor.cardinality === \"many-to-many\"\n\t\t) {\n\t\t\thasManyToMany = true;\n\t\t}\n\t}\n\tif (hasRelationalPredicate && !capabilities.relationalPredicates) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n\t\t\t`Relational predicates are unsupported on ${capabilities.backend}`,\n\t\t);\n\t}\n\tif (hasManyToMany && !capabilities.manyToManyRelations) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n\t\t\t`Many-to-many relations are unsupported on ${capabilities.backend}`,\n\t\t);\n\t}\n\n\tfor (const field of plan.selection) {\n\t\tif (field.kind === \"relation\") {\n\t\t\tvalidatePlanAgainstCapabilities(field.plan, capabilities);\n\t\t}\n\t}\n}\n\nfunction planHasUnsupportedNulls(plan: AthenaQueryPlan): boolean {\n\treturn Boolean(plan.orderBy?.some((order) => order.nulls));\n}\n","import { compileSelectShape } from \"../query-ast.ts\";\nimport type { AthenaSelectShape } from \"../query-ast.ts\";\nimport type { AthenaConditionAst, AthenaSelectQueryAst } from \"../query/engine/ast.ts\";\nimport { GATEWAY_QUERY_CAPABILITIES } from \"../query/engine/capabilities.ts\";\nimport { canonicalizePagination } from \"../query/engine/normalize.ts\";\nimport type { AthenaQueryPlan } from \"../query/engine/plan.ts\";\nimport { validatePlanAgainstCapabilities } from \"../query/engine/validate.ts\";\nimport type { AthenaFetchPayload } from \"./types.ts\";\n\nfunction sourceName(ast: AthenaSelectQueryAst): string {\n  return ast.source.schema\n    ? `${ast.source.schema}.${ast.source.table}`\n    : ast.source.table;\n}\n\nfunction selectionToShape(ast: AthenaSelectQueryAst): AthenaSelectShape {\n  const shape: AthenaSelectShape = {};\n  for (const field of ast.selection.fields) {\n    if (field.kind === \"column\") {\n      shape[field.alias ?? field.column] =\n        field.alias && field.alias !== field.column\n          ? true\n          : true;\n      if (field.column !== \"*\") {\n        shape[field.column] = true;\n        if (field.alias && field.alias !== field.column) {\n          delete shape[field.column];\n          shape[field.alias] = true;\n        }\n      } else {\n        shape[\"*\"] = true;\n      }\n      continue;\n    }\n    shape[field.alias ?? field.relation] = {\n      as: field.alias,\n      schema: field.query.source.schema,\n      select: selectionToShape(field.query),\n      via: field.via ?? field.relation,\n    };\n  }\n  return shape;\n}\n\nfunction conditionToWhere(condition: AthenaConditionAst): Record<string, unknown> {\n  switch (condition.kind) {\n    case \"and\":\n      return Object.assign(\n        {},\n        ...condition.conditions.map((child) => conditionToWhere(child))\n      );\n    case \"or\":\n      return { or: condition.conditions.map((child) => conditionToWhere(child)) };\n    case \"not\":\n      return { not: conditionToWhere(condition.condition) };\n    case \"compare\":\n      return { [condition.field.field]: { [condition.operator]: condition.value } };\n    case \"in\":\n      return { [condition.field.field]: { in: condition.values } };\n    case \"is-null\":\n      return {\n        [condition.field.field]: condition.negated ? { neq: null } : { eq: null },\n      };\n    case \"is-true\":\n      return { [condition.field.field]: { is: true } };\n    case \"is-false\":\n      return { [condition.field.field]: { is: false } };\n    case \"contains\":\n      return { [condition.field.field]: { contains: condition.value } };\n    case \"contained-by\":\n      return { [condition.field.field]: { containedBy: condition.value } };\n    case \"relation\":\n    case \"resolved-relation\":\n      return {\n        [condition.relation]: {\n          [condition.predicate]: condition.filter\n            ? conditionToWhere(condition.filter)\n            : {},\n        },\n      };\n    default:\n      return {};\n  }\n}\n\n/**\n * Project a semantic AST onto the existing Gateway `/gateway/fetch` wire.\n * Rust remains a consumer, not the owner, of query semantics.\n */\nexport function serializeGatewayAst(ast: AthenaSelectQueryAst): AthenaFetchPayload {\n  const select = selectionToShape(ast);\n  const page = canonicalizePagination(ast.pagination);\n  const payload: AthenaFetchPayload = {\n    select: compileSelectShape(select),\n    table_name: sourceName(ast),\n  };\n  if (ast.filter) {\n    payload.where = conditionToWhere(ast.filter) as AthenaFetchPayload[\"where\"];\n  }\n  if (ast.orderBy?.[0]) {\n    payload.orderBy = {\n      [ast.orderBy[0].field.field]: ast.orderBy[0].direction,\n    };\n  }\n  if (page.limit !== undefined) {\n    payload.limit = page.limit;\n  }\n  if (page.offset !== undefined) {\n    payload.offset = page.offset;\n  }\n  if (ast.cardinality === \"first\" || ast.cardinality === \"unique\") {\n    payload.limit = 1;\n  }\n  return payload;\n}\n\n/**\n * Serialize a resolved plan onto the existing Gateway fetch wire.\n * Compilers must not re-resolve relations; the plan is the input.\n */\nexport function serializeGatewayPlan(plan: AthenaQueryPlan): AthenaFetchPayload {\n  validatePlanAgainstCapabilities(plan, GATEWAY_QUERY_CAPABILITIES);\n  return serializeGatewayAst(plan.ast);\n}\n\nexport function serializeGatewayFindManyAst(ast: AthenaSelectQueryAst): {\n  limit?: number;\n  orderBy?: Record<string, string>;\n  select: AthenaSelectShape;\n  table_name: string;\n  where?: Record<string, unknown>;\n} {\n  const page = canonicalizePagination(ast.pagination);\n  return {\n    limit:\n      ast.cardinality === \"first\" || ast.cardinality === \"unique\"\n        ? 1\n        : page.limit,\n    orderBy: ast.orderBy?.[0]\n      ? { [ast.orderBy[0].field.field]: ast.orderBy[0].direction }\n      : undefined,\n    select: selectionToShape(ast),\n    table_name: sourceName(ast),\n    where: ast.filter ? conditionToWhere(ast.filter) : undefined,\n  };\n}\n","import type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n} from \"./types.ts\";\nimport { AthenaTransactionError } from \"../db/transaction/errors.ts\";\nimport type {\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionCapabilities,\n  AthenaTransactionOperation,\n  AthenaTransactionTransport,\n  AthenaTransactionTransportResult,\n} from \"../db/transaction/types.ts\";\nimport { GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES } from \"../db/transaction/types.ts\";\n\nexport interface GatewayTransactionHttpCaller {\n  (\n    payload: unknown,\n    options?: AthenaGatewayCallOptions\n  ): Promise<AthenaGatewayResponse<unknown>>;\n}\n\nfunction asResults(\n  raw: unknown\n): AthenaGatewayResponse<unknown>[] | undefined {\n  if (!raw || typeof raw !== \"object\") {\n    return undefined;\n  }\n  const record = raw as Record<string, unknown>;\n  const results = record.results;\n  if (!Array.isArray(results)) {\n    return undefined;\n  }\n  return results.map((item) => {\n    if (item && typeof item === \"object\") {\n      const row = item as Record<string, unknown>;\n      const ok = row.ok !== false && !row.error;\n      return {\n        count: typeof row.count === \"number\" ? row.count : null,\n        data: (row.data ?? null) as unknown,\n        error: typeof row.error === \"string\" ? row.error : undefined,\n        errorDetails: null,\n        ok,\n        raw: item,\n        status: typeof row.status === \"number\" ? row.status : ok ? 200 : 400,\n        statusText: ok ? \"OK\" : null,\n      };\n    }\n    return {\n      count: null,\n      data: item,\n      error: undefined,\n      errorDetails: null,\n      ok: true,\n      raw: item,\n      status: 200,\n      statusText: \"OK\",\n    };\n  });\n}\n\nexport function createGatewayHttpTransactionTransport(input: {\n  capabilities?: AthenaTransactionCapabilities;\n  postTransaction: GatewayTransactionHttpCaller;\n}): AthenaTransactionTransport {\n  const capabilities =\n    input.capabilities ?? GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES;\n  return {\n    capabilities,\n    async executeAtomic(\n      operations: readonly AthenaTransactionOperation[],\n      options?: AthenaResolvedTransactionOptions\n    ): Promise<AthenaTransactionTransportResult> {\n      if (!capabilities.atomic) {\n        throw new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_ATOMIC_UNSUPPORTED\",\n          `Atomic transactions are not supported by backend \"${capabilities.backend}\"`,\n          { backend: capabilities.backend }\n        );\n      }\n      const response = await input.postTransaction(\n        {\n          idempotency_key: options?.idempotencyKey ?? null,\n          operations: operations.map((operation) => ({\n            id: operation.id,\n            kind: operation.kind,\n            payload: operation.payload,\n          })),\n          options: {\n            deferrable: options?.deferrable ?? false,\n            isolation_level: options?.isolationLevel ?? null,\n            read_only: options?.readOnly ?? false,\n          },\n        },\n        options?.callOptions\n      );\n      if (!response.ok) {\n        throw new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_FAILED\",\n          response.error ?? \"Gateway transaction failed\",\n          {\n            backend: capabilities.backend,\n            status: response.status,\n          }\n        );\n      }\n      const results = asResults(response.raw) ?? asResults(response.data);\n      if (!results || results.length !== operations.length) {\n        throw new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_FAILED\",\n          \"Gateway transaction response did not include positional results\",\n          { backend: capabilities.backend }\n        );\n      }\n      const committed =\n        response.data &&\n        typeof response.data === \"object\" &&\n        \"committed\" in (response.data as object)\n          ? Boolean((response.data as { committed?: unknown }).committed)\n          : results.every((result) => result.ok);\n      return { committed, results };\n    },\n  };\n}\n","import type { AthenaTransactionTransport } from \"../db/transaction/types.ts\";\nimport { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport { isAthenaSelectQueryAst } from \"../query/engine/ast.ts\";\nimport { resolveMutationAffectedRows } from \"../result/mutation-meta.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\nimport { buildServiceRequestHeaders } from \"../utils/athena-request-headers.ts\";\nimport { AthenaGatewayError } from \"./errors.ts\";\nimport { serializeGatewayAst } from \"./serialize-ast.ts\";\nimport { createGatewayHttpTransactionTransport } from \"./transaction.ts\";\nimport type {\n\tAthenaDeletePayload,\n\tAthenaFetchPayload,\n\tAthenaGatewayBaseOptions,\n\tAthenaGatewayCallOptions,\n\tAthenaGatewayConnectionOptions,\n\tAthenaGatewayConnectionResult,\n\tAthenaGatewayEndpointPath,\n\tAthenaGatewayErrorDetails,\n\tAthenaGatewayMethod,\n\tAthenaGatewayResponse,\n\tAthenaInsertPayload,\n\tAthenaQueryPayload,\n\tAthenaRpcCallOptions,\n\tAthenaRpcFilter,\n\tAthenaRpcPayload,\n\tAthenaUpdatePayload,\n} from \"./types.js\";\nimport {\n\tATHENA_DEFAULT_BASE_URL,\n\tbuildAthenaGatewayUrl,\n\tnormalizeAthenaGatewayBaseUrl,\n} from \"./url.ts\";\n\nconst SDK_NAME = \"@xylex-group/athena\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n}\n\nfunction resolveStructuredErrorPayload(\n\tpayload: unknown,\n): Record<string, unknown> | null {\n\tif (!isRecord(payload)) {\n\t\treturn null;\n\t}\n\treturn isRecord(payload.error) ? payload.error : payload;\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n\treturn (\n\t\theaders.get(\"x-request-id\") ??\n\t\theaders.get(\"x-correlation-id\") ??\n\t\theaders.get(\"x-athena-request-id\") ??\n\t\tundefined\n\t);\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n\tconst structuredPayload = resolveStructuredErrorPayload(payload);\n\tif (structuredPayload) {\n\t\tconst messageCandidates = [\n\t\t\tstructuredPayload.message,\n\t\t\tstructuredPayload.error,\n\t\t\tstructuredPayload.details,\n\t\t];\n\t\tfor (const candidate of messageCandidates) {\n\t\t\tconst resolved = nonEmptyString(candidate);\n\t\t\tif (resolved) {\n\t\t\t\treturn resolved;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rawMessage = nonEmptyString(payload);\n\tif (rawMessage) {\n\t\treturn rawMessage;\n\t}\n\n\treturn fallback;\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n\tconst structuredPayload = resolveStructuredErrorPayload(payload);\n\treturn structuredPayload ? nonEmptyString(structuredPayload.hint) : undefined;\n}\n\nfunction resolveStatusText(\n\tresponse: Response,\n\tpayload: unknown,\n): string | null {\n\tconst rawStatusText = nonEmptyString(response.statusText);\n\tif (rawStatusText) {\n\t\treturn rawStatusText;\n\t}\n\tconst payloadRecord = isRecord(payload) ? payload : null;\n\treturn payloadRecord\n\t\t? (nonEmptyString(payloadRecord.statusText) ?? null)\n\t\t: null;\n}\n\nfunction detailsFromError(\n\terror: AthenaGatewayError,\n): AthenaGatewayErrorDetails {\n\treturn error.toDetails();\n}\n\ninterface AthenaFindManyAstPayload {\n\tlimit?: number;\n\torderBy?: Record<string, unknown>;\n\tselect: Record<string, unknown>;\n\ttable_name: string;\n\twhere?: Record<string, unknown>;\n}\n\nfunction toQueryScalar(value: unknown): string {\n\tif (value === null || value === undefined) {\n\t\treturn \"null\";\n\t}\n\tif (typeof value === \"boolean\") {\n\t\treturn value ? \"true\" : \"false\";\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn Number.isFinite(value) ? String(value) : \"null\";\n\t}\n\treturn String(value);\n}\n\nfunction toQueryArray(values: unknown[]): string {\n\treturn `{${values.map(toQueryScalar).join(\",\")}}`;\n}\n\nfunction toRpcArgumentQueryValue(value: unknown): string {\n\tif (Array.isArray(value)) {\n\t\treturn toQueryArray(value);\n\t}\n\tif (value && typeof value === \"object\") {\n\t\treturn JSON.stringify(value);\n\t}\n\treturn toQueryScalar(value);\n}\n\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\n\tconst value = filter.value;\n\tswitch (filter.operator) {\n\t\tcase \"in\": {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tthrow new AthenaGatewayError({\n\t\t\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\t\t\tmessage: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\n\t\t\t\t\tstatus: 0,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn `in.${toQueryArray(value)}`;\n\t\t}\n\t\tcase \"is\":\n\t\t\treturn `is.${toQueryScalar(value)}`;\n\t\tcase \"eq\":\n\t\tcase \"neq\":\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"like\":\n\t\tcase \"ilike\":\n\t\t\treturn `${filter.operator}.${toQueryScalar(value)}`;\n\t\tdefault: {\n\t\t\tconst exhaustive: never = filter.operator;\n\t\t\tthrow new AthenaGatewayError({\n\t\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\t\tmessage: `Unsupported RPC filter operator: ${String(exhaustive)}`,\n\t\t\t\tstatus: 0,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction buildRpcGetEndpoint(\n\tpayload: AthenaRpcPayload,\n): AthenaGatewayEndpointPath {\n\tconst functionName = (payload.function_name ?? payload.function).trim();\n\tif (!functionName) {\n\t\tthrow new AthenaGatewayError({\n\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\tendpoint: \"/gateway/rpc\",\n\t\t\tmessage: \"rpc requires a function name\",\n\t\t\tmethod: \"GET\",\n\t\t\tstatus: 0,\n\t\t});\n\t}\n\n\tconst query = new URLSearchParams();\n\tif (payload.schema) {\n\t\tquery.set(\"schema\", payload.schema);\n\t}\n\tif (payload.select) {\n\t\tquery.set(\"select\", payload.select);\n\t}\n\tif (payload.count) {\n\t\tquery.set(\"count\", payload.count);\n\t}\n\tif (payload.head) {\n\t\tquery.set(\"head\", \"true\");\n\t}\n\tif (typeof payload.limit === \"number\") {\n\t\tquery.set(\"limit\", String(payload.limit));\n\t}\n\tif (typeof payload.offset === \"number\") {\n\t\tquery.set(\"offset\", String(payload.offset));\n\t}\n\tif (payload.order?.column) {\n\t\tquery.set(\n\t\t\t\"order\",\n\t\t\tpayload.order.ascending === false\n\t\t\t\t? `${payload.order.column}.desc`\n\t\t\t\t: payload.order.column,\n\t\t);\n\t}\n\n\tif (payload.args) {\n\t\tfor (const [key, value] of Object.entries(payload.args)) {\n\t\t\tquery.set(key, toRpcArgumentQueryValue(value));\n\t\t}\n\t}\n\n\tif (payload.filters?.length) {\n\t\tfor (const filter of payload.filters) {\n\t\t\tif (payload.args && Object.hasOwn(payload.args, filter.column)) {\n\t\t\t\tthrow new AthenaGatewayError({\n\t\t\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\t\t\tmessage: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\n\t\t\t\t\tstatus: 0,\n\t\t\t\t});\n\t\t\t}\n\t\t\tquery.append(filter.column, toRpcFilterQueryValue(filter));\n\t\t}\n\t}\n\n\tconst endpoint = `/rpc/${encodeURIComponent(functionName)}`;\n\tconst queryText = query.toString();\n\tconst withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\n\treturn withQuery as AthenaGatewayEndpointPath;\n}\n\nfunction buildHeaders(\n\tconfig: AthenaGatewayBaseOptions,\n\toptions?: AthenaGatewayCallOptions,\n): Record<string, string> {\n\treturn buildServiceRequestHeaders(\n\t\t\"gateway\",\n\t\tSDK_HEADER_VALUE,\n\t\tconfig,\n\t\toptions,\n\t\t{\n\t\t\tclient: options?.client ?? config.client ?? \"DEFAULT_CLIENT\",\n\t\t\tstripNulls: options?.stripNulls ?? true,\n\t\t},\n\t);\n}\n\nfunction toInvalidUrlResponse<T>(\n\terror: unknown,\n\tendpoint: AthenaGatewayEndpointPath,\n\tmethod: AthenaGatewayMethod,\n): AthenaGatewayResponse<T> {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconst gatewayError =\n\t\terror instanceof AthenaGatewayError\n\t\t\t? error\n\t\t\t: new AthenaGatewayError({\n\t\t\t\t\tcause: message,\n\t\t\t\t\tcode: \"INVALID_URL\",\n\t\t\t\t\tendpoint,\n\t\t\t\t\thint: \"Set ATHENA_URL to a full http(s) URL before running queries.\",\n\t\t\t\t\tmessage,\n\t\t\t\t\tmethod,\n\t\t\t\t\tstatus: 0,\n\t\t\t\t});\n\n\treturn {\n\t\tdata: null,\n\t\terror: gatewayError.message,\n\t\terrorDetails: detailsFromError(\n\t\t\tnew AthenaGatewayError({\n\t\t\t\tcause: gatewayError.causeDetail,\n\t\t\t\tcode: gatewayError.code,\n\t\t\t\tendpoint,\n\t\t\t\thint: gatewayError.hint,\n\t\t\t\tmessage: gatewayError.message,\n\t\t\t\tmethod,\n\t\t\t\trequestId: gatewayError.requestId,\n\t\t\t\tstatus: gatewayError.status,\n\t\t\t}),\n\t\t),\n\t\tok: false,\n\t\traw: null,\n\t\tstatus: 0,\n\t\tstatusText: null,\n\t};\n}\n\nfunction resolveGatewayBaseUrl(input?: string | null) {\n\treturn normalizeAthenaGatewayBaseUrl(input, {\n\t\tdefaultBaseUrl: ATHENA_DEFAULT_BASE_URL,\n\t});\n}\n\nfunction resolveProbePath(path?: string) {\n\tif (!path) {\n\t\treturn \"/\";\n\t}\n\tif (!path.startsWith(\"/\")) {\n\t\tthrow new AthenaGatewayError({\n\t\t\tcode: \"INVALID_URL\",\n\t\t\thint: 'Use a leading slash such as \"/\" or \"/health\".',\n\t\t\tmessage: `Athena gateway probe path must start with \"/\". Received ${JSON.stringify(path)}.`,\n\t\t\tstatus: 0,\n\t\t});\n\t}\n\treturn path;\n}\n\nfunction mergeConnectionHeaders(\n\tbaseHeaders: Record<string, string>,\n\theaders?: Record<string, string>,\n): Record<string, string> {\n\tconst merged = {\n\t\t...baseHeaders,\n\t\t...(headers ?? {}),\n\t};\n\n\tif (!(merged[\"X-Athena-Sdk\"] || merged[\"x-athena-sdk\"])) {\n\t\tmerged[\"X-Athena-Sdk\"] = SDK_HEADER_VALUE;\n\t}\n\n\treturn merged;\n}\n\nasync function performConnectionCheck(\n\tbaseUrl: string,\n\trequestHeaders: Record<string, string>,\n\toptions?: AthenaGatewayConnectionOptions,\n): Promise<AthenaGatewayConnectionResult> {\n\tconst path = resolveProbePath(options?.path);\n\tconst url = buildAthenaGatewayUrl(baseUrl, path);\n\n\ttry {\n\t\tconst response = await fetch(url, {\n\t\t\theaders: mergeConnectionHeaders(requestHeaders, options?.headers),\n\t\t\tmethod: \"GET\",\n\t\t\tsignal: options?.signal,\n\t\t});\n\t\tconst rawText = await response.text();\n\t\tconst requestId = resolveRequestId(response.headers);\n\t\tconst parsedBody = parseResponseBody(\n\t\t\trawText ?? \"\",\n\t\t\tresponse.headers.get(\"content-type\"),\n\t\t);\n\n\t\tif (parsedBody.parseFailed) {\n\t\t\tconst invalidJsonError = new AthenaGatewayError({\n\t\t\t\tcause: rawText.slice(0, 300),\n\t\t\t\tcode: \"INVALID_JSON\",\n\t\t\t\thint: \"Verify the gateway response body is valid JSON.\",\n\t\t\t\tmessage: \"Gateway probe returned malformed JSON\",\n\t\t\t\tmethod: \"GET\",\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tbaseUrl,\n\t\t\t\terror: invalidJsonError.message,\n\t\t\t\terrorDetails: detailsFromError(invalidJsonError),\n\t\t\t\tok: false,\n\t\t\t\traw: parsedBody.parsed,\n\t\t\t\treachable: true,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: resolveStatusText(response, parsedBody.parsed),\n\t\t\t\turl,\n\t\t\t};\n\t\t}\n\n\t\tconst parsed = parsedBody.parsed;\n\t\tif (!response.ok) {\n\t\t\tconst httpError = new AthenaGatewayError({\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: resolveErrorHint(parsed),\n\t\t\t\tmessage: resolveErrorMessage(\n\t\t\t\t\tparsed,\n\t\t\t\t\t`Athena gateway GET ${path} failed with status ${response.status}`,\n\t\t\t\t),\n\t\t\t\tmethod: \"GET\",\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tbaseUrl,\n\t\t\t\terror: httpError.message,\n\t\t\t\terrorDetails: detailsFromError(httpError),\n\t\t\t\tok: false,\n\t\t\t\traw: parsed,\n\t\t\t\treachable: true,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: resolveStatusText(response, parsed),\n\t\t\t\turl,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tbaseUrl,\n\t\t\terror: undefined,\n\t\t\terrorDetails: null,\n\t\t\tok: true,\n\t\t\traw: parsed,\n\t\t\treachable: true,\n\t\t\tstatus: response.status,\n\t\t\tstatusText: resolveStatusText(response, parsed),\n\t\t\turl,\n\t\t};\n\t} catch (callError) {\n\t\tconst message =\n\t\t\tcallError instanceof Error ? callError.message : String(callError);\n\t\tconst networkError = new AthenaGatewayError({\n\t\t\tcause: message,\n\t\t\tcode: \"NETWORK_ERROR\",\n\t\t\thint: \"Check gateway URL, DNS, and network reachability.\",\n\t\t\tmessage: `Network error while probing Athena gateway ${url}: ${message}`,\n\t\t\tmethod: \"GET\",\n\t\t});\n\t\treturn {\n\t\t\tbaseUrl,\n\t\t\terror: networkError.message,\n\t\t\terrorDetails: detailsFromError(networkError),\n\t\t\tok: false,\n\t\t\traw: null,\n\t\t\treachable: false,\n\t\t\tstatus: 0,\n\t\t\tstatusText: null,\n\t\t\turl,\n\t\t};\n\t}\n}\n\nexport async function verifyAthenaGatewayUrl(\n\tbaseUrl: string,\n\toptions?: AthenaGatewayConnectionOptions,\n): Promise<AthenaGatewayConnectionResult> {\n\tconst normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl);\n\treturn performConnectionCheck(\n\t\tnormalizedBaseUrl,\n\t\t{ \"X-Athena-Sdk\": SDK_HEADER_VALUE },\n\t\toptions,\n\t);\n}\n\nasync function callAthena<T>(\n\tconfig: AthenaGatewayBaseOptions,\n\tendpoint: AthenaGatewayEndpointPath,\n\tmethod: AthenaGatewayMethod,\n\tpayload: unknown,\n\toptions?: AthenaGatewayCallOptions,\n): Promise<AthenaGatewayResponse<T>> {\n\tlet baseUrl: string;\n\ttry {\n\t\tbaseUrl = resolveGatewayBaseUrl(options?.baseUrl ?? config.baseUrl);\n\t} catch (error) {\n\t\treturn toInvalidUrlResponse<T>(error, endpoint, method);\n\t}\n\n\tconst url = buildAthenaGatewayUrl(baseUrl, endpoint);\n\tconst headers = buildHeaders(config, options);\n\n\ttry {\n\t\tconst requestInit: RequestInit = {\n\t\t\theaders,\n\t\t\tmethod,\n\t\t\tsignal: options?.signal,\n\t\t};\n\t\tif (method !== \"GET\") {\n\t\t\trequestInit.body = JSON.stringify(payload);\n\t\t}\n\n\t\tconst response = await fetch(url, requestInit);\n\n\t\tconst rawText = await response.text();\n\t\tconst requestId = resolveRequestId(response.headers);\n\t\tconst parsedBody = parseResponseBody(\n\t\t\trawText ?? \"\",\n\t\t\tresponse.headers.get(\"content-type\"),\n\t\t);\n\n\t\tif (parsedBody.parseFailed) {\n\t\t\tconst invalidJsonError = new AthenaGatewayError({\n\t\t\t\tcause: rawText.slice(0, 300),\n\t\t\t\tcode: \"INVALID_JSON\",\n\t\t\t\tendpoint,\n\t\t\t\thint: \"Verify the gateway response body is valid JSON.\",\n\t\t\t\tmessage: \"Gateway returned malformed JSON\",\n\t\t\t\tmethod,\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: invalidJsonError.message,\n\t\t\t\terrorDetails: detailsFromError(invalidJsonError),\n\t\t\t\tok: false,\n\t\t\t\traw: parsedBody.parsed,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: resolveStatusText(response, parsedBody.parsed),\n\t\t\t};\n\t\t}\n\n\t\tconst parsed = parsedBody.parsed;\n\t\tconst parsedPayload = isRecord(parsed) ? parsed : null;\n\n\t\tif (!response.ok) {\n\t\t\tconst httpError = new AthenaGatewayError({\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\tendpoint,\n\t\t\t\thint: resolveErrorHint(parsed),\n\t\t\t\tmessage: resolveErrorMessage(\n\t\t\t\t\tparsed,\n\t\t\t\t\t`Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\n\t\t\t\t),\n\t\t\t\tmethod,\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: httpError.message,\n\t\t\t\terrorDetails: detailsFromError(httpError),\n\t\t\t\tok: false,\n\t\t\t\traw: parsed,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: resolveStatusText(response, parsed),\n\t\t\t};\n\t\t}\n\n\t\t// Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\n\t\t// vs raw array when uncached. Use inner data when present to avoid double nesting.\n\t\tconst payloadData =\n\t\t\tparsedPayload && \"data\" in parsedPayload\n\t\t\t\t? (parsedPayload.data as T)\n\t\t\t\t: (parsed as T);\n\t\tconst payloadCount =\n\t\t\tparsedPayload && \"count\" in parsedPayload\n\t\t\t\t? typeof parsedPayload.count === \"number\" ||\n\t\t\t\t\tparsedPayload.count === null\n\t\t\t\t\t? (parsedPayload.count as number | null)\n\t\t\t\t\t: undefined\n\t\t\t\t: undefined;\n\n\t\tconst affectedRows = resolveMutationAffectedRows({\n\t\t\tcount: payloadCount,\n\t\t\tendpoint,\n\t\t\traw: parsed,\n\t\t});\n\t\tconst mutationCount =\n\t\t\taffectedRows === undefined\n\t\t\t\t? payloadCount\n\t\t\t\t: (payloadCount ?? affectedRows);\n\n\t\treturn {\n\t\t\t...(affectedRows !== undefined ? { affectedRows } : {}),\n\t\t\tcount: mutationCount,\n\t\t\tdata: payloadData ?? null,\n\t\t\terror: undefined,\n\t\t\terrorDetails: null,\n\t\t\tok: true,\n\t\t\traw: parsed,\n\t\t\tstatus: response.status,\n\t\t\tstatusText: resolveStatusText(response, parsed),\n\t\t};\n\t} catch (callError) {\n\t\tconst message =\n\t\t\tcallError instanceof Error ? callError.message : String(callError);\n\t\tconst networkError = new AthenaGatewayError({\n\t\t\tcause: message,\n\t\t\tcode: \"NETWORK_ERROR\",\n\t\t\tendpoint,\n\t\t\thint: \"Check gateway URL, DNS, and network reachability.\",\n\t\t\tmessage: `Network error while calling ${method} ${endpoint}: ${message}`,\n\t\t\tmethod,\n\t\t});\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: networkError.message,\n\t\t\terrorDetails: detailsFromError(networkError),\n\t\t\tok: false,\n\t\t\traw: null,\n\t\t\tstatus: 0,\n\t\t\tstatusText: null,\n\t\t};\n\t}\n}\n\nexport interface AthenaGatewayClient {\n\tbaseUrl: string;\n\tbuildHeaders: (options?: AthenaGatewayCallOptions) => Record<string, string>;\n\tdeleteGateway: <T>(\n\t\tpayload: AthenaDeletePayload,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\tfetchGateway: <T>(\n\t\tpayload: AthenaFetchPayload | AthenaFindManyAstPayload,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\tinsertGateway: <T>(\n\t\tpayload: AthenaInsertPayload,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\tqueryGateway: <T>(\n\t\tpayload: AthenaQueryPayload,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\tresolveCallOptions: (\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayCallOptions | undefined>;\n\trpcGateway: <T>(\n\t\tpayload: AthenaRpcPayload,\n\t\toptions?: AthenaRpcCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\tupdateGateway: <T>(\n\t\tpayload: AthenaUpdatePayload,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\ttransactions?: AthenaTransactionTransport;\n\tverifyConnection: (\n\t\toptions?: AthenaGatewayConnectionOptions,\n\t) => Promise<AthenaGatewayConnectionResult>;\n}\n\nexport function createAthenaGatewayClient(\n\tconfig: AthenaGatewayBaseOptions = {},\n): AthenaGatewayClient {\n\tconst normalizedBaseUrl = resolveGatewayBaseUrl(config.baseUrl);\n\tconst normalizedConfig: AthenaGatewayBaseOptions = {\n\t\t...config,\n\t\tbaseUrl: normalizedBaseUrl,\n\t};\n\n\treturn {\n\t\tbaseUrl: normalizedBaseUrl,\n\t\tbuildHeaders(options) {\n\t\t\treturn buildHeaders(normalizedConfig, options);\n\t\t},\n\t\tdeleteGateway(payload, options) {\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/delete\",\n\t\t\t\t\"DELETE\",\n\t\t\t\tpayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tfetchGateway(payload, options) {\n\t\t\tconst wirePayload = isAthenaSelectQueryAst(payload)\n\t\t\t\t? serializeGatewayAst(payload)\n\t\t\t\t: payload;\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/fetch\",\n\t\t\t\t\"POST\",\n\t\t\t\twirePayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tinsertGateway(payload, options) {\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/insert\",\n\t\t\t\t\"PUT\",\n\t\t\t\tpayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tqueryGateway(payload, options) {\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/query\",\n\t\t\t\t\"POST\",\n\t\t\t\tpayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tasync resolveCallOptions(options) {\n\t\t\treturn options;\n\t\t},\n\t\trpcGateway(payload, options) {\n\t\t\tif (options?.get) {\n\t\t\t\tconst endpoint = buildRpcGetEndpoint(payload);\n\t\t\t\treturn callAthena(normalizedConfig, endpoint, \"GET\", null, options);\n\t\t\t}\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/rpc\",\n\t\t\t\t\"POST\",\n\t\t\t\tpayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdateGateway(payload, options) {\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/update\",\n\t\t\t\t\"POST\",\n\t\t\t\tpayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\ttransactions: createGatewayHttpTransactionTransport({\n\t\t\tpostTransaction(payload, options) {\n\t\t\t\treturn callAthena(\n\t\t\t\t\tnormalizedConfig,\n\t\t\t\t\t\"/gateway/transaction\",\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tpayload,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t}),\n\t\tverifyConnection(options) {\n\t\t\treturn performConnectionCheck(\n\t\t\t\tnormalizedBaseUrl,\n\t\t\t\tbuildHeaders(normalizedConfig),\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t};\n}\n\ntype AthenaGatewayCallOptionsResolver = () =>\n\t| AthenaGatewayCallOptions\n\t| undefined\n\t| Promise<AthenaGatewayCallOptions | undefined>;\n\nfunction mergeGatewayCallOptions(\n\tbase?: AthenaGatewayCallOptions,\n\toverride?: AthenaGatewayCallOptions,\n): AthenaGatewayCallOptions | undefined {\n\tif (!(base || override)) {\n\t\treturn;\n\t}\n\treturn {\n\t\t...base,\n\t\t...override,\n\t\theaders:\n\t\t\tbase?.headers || override?.headers\n\t\t\t\t? { ...(base?.headers ?? {}), ...(override?.headers ?? {}) }\n\t\t\t\t: undefined,\n\t};\n}\n\n/**\n * Creates a request-context view over one immutable gateway transport.\n * The resolver runs once for every operation; the underlying transport and\n * normalized route configuration are never reconstructed.\n */\nexport function createAthenaGatewayClientView(\n\ttransport: AthenaGatewayClient,\n\tresolveContext: AthenaGatewayCallOptionsResolver,\n): AthenaGatewayClient {\n\tconst resolveCallOptions = async (\n\t\toptions?: AthenaGatewayCallOptions,\n\t): Promise<AthenaGatewayCallOptions | undefined> =>\n\t\tmergeGatewayCallOptions(await resolveContext(), options);\n\n\treturn {\n\t\tbaseUrl: transport.baseUrl,\n\t\tbuildHeaders(options) {\n\t\t\treturn transport.buildHeaders(options);\n\t\t},\n\t\tasync deleteGateway(payload, options) {\n\t\t\treturn transport.deleteGateway(\n\t\t\t\tpayload,\n\t\t\t\tawait resolveCallOptions(options),\n\t\t\t);\n\t\t},\n\t\tasync fetchGateway(payload, options) {\n\t\t\treturn transport.fetchGateway(payload, await resolveCallOptions(options));\n\t\t},\n\t\tasync insertGateway(payload, options) {\n\t\t\treturn transport.insertGateway(\n\t\t\t\tpayload,\n\t\t\t\tawait resolveCallOptions(options),\n\t\t\t);\n\t\t},\n\t\tasync queryGateway(payload, options) {\n\t\t\treturn transport.queryGateway(payload, await resolveCallOptions(options));\n\t\t},\n\t\tresolveCallOptions,\n\t\tasync rpcGateway(payload, options) {\n\t\t\treturn transport.rpcGateway(payload, await resolveCallOptions(options));\n\t\t},\n\t\tasync updateGateway(payload, options) {\n\t\t\treturn transport.updateGateway(\n\t\t\t\tpayload,\n\t\t\t\tawait resolveCallOptions(options),\n\t\t\t);\n\t\t},\n\t\ttransactions: transport.transactions,\n\t\tasync verifyConnection(options) {\n\t\t\tconst context = await resolveCallOptions();\n\t\t\tconst contextHeaders = transport.buildHeaders(context);\n\t\t\treturn transport.verifyConnection({\n\t\t\t\t...options,\n\t\t\t\theaders: {\n\t\t\t\t\t...contextHeaders,\n\t\t\t\t\t...(options?.headers ?? {}),\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t};\n}\n","/**\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/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  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","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 { ATHENA_ENV_CLIENT_KEYS } from \"../env/index.ts\";\nimport type { BackendType } from \"../gateway/types.ts\";\nimport { DEFAULT_MIGRATIONS_DIRECTORY } from \"../migrations/constants.ts\";\nimport { normalizeSchemaSelection } from \"./schema-selection.ts\";\nimport { normalizeTableSelection } from \"./table-selection.ts\";\nimport type {\n\tAthenaConfig,\n\tAthenaGeneratorConfig,\n\tAthenaMigrationsConfig,\n\tAthenaPolicyProjectConfig,\n\tAthenaToolingEntrypoints,\n\tGeneratorArtifactWriteConfig,\n\tGeneratorArtifactWritePolicy,\n\tGeneratorExperimentalFlags,\n\tGeneratorFeatureFlags,\n\tGeneratorFilterConfig,\n\tGeneratorInternalConfig,\n\tGeneratorNamingConfig,\n\tGeneratorOutputConfig,\n\tGeneratorOutputFormat,\n\tGeneratorOutputPreset,\n\tGeneratorOutputTargets,\n\tGeneratorProviderConfig,\n\tGeneratorProviderInputConfig,\n\tLoadedAthenaConfig,\n\tLoadedGeneratorConfig,\n\tLoadAthenaConfigOptions,\n\tLoadGeneratorConfigOptions,\n\tNormalizedAthenaGeneratorConfig,\n\tNormalizedAthenaMigrationsConfig,\n\tNormalizedGeneratorOutputConfig,\n} from \"./types.ts\";\n\nexport { DEFAULT_MIGRATIONS_DIRECTORY };\n\nconst POSTGRES_PROTOCOLS = new Set([\"postgres:\", \"postgresql:\"]);\n\nconst DEFAULT_CONFIG_CANDIDATES = [\n\t\"athena.config.ts\",\n\t\"athena.config.js\",\n\t\"athena-js.config.ts\",\n\t\"athena-js.config.js\",\n\t\".athena.config.ts\",\n\t\".athena.config.js\",\n];\n\n/**\n * N-1 layout (Architecture 3 / early 4-RC root `athena/*`).\n * Generator still accepts this preset; doctor warns; migrate upgrades to N.\n */\nconst LEGACY_DEFAULT_TARGETS: GeneratorOutputTargets = {\n\tdatabase: \"athena/relations.ts\",\n\tmodel: \"athena/models/{schema_kebab}/{model_kebab}.ts\",\n\tregistry: \"athena/registry.generated.ts\",\n\tschema: \"athena/schemas/{schema_kebab}.ts\",\n};\n\n/**\n * Project artifact root — generated models sit next to `athena/migrations`\n * and `athena/schema.snapshot.json`. Runtime client files may still live\n * under `src/lib/athena/` without a generated subtree.\n */\nexport const ATHENA_PROJECT_GENERATED_ROOT = \"athena/generated\";\n\n/**\n * Accepted runtime-colocated generated root (Architecture 4.0 N).\n * Still first-class; generate does not warn.\n */\nexport const ATHENA_RUNTIME_GENERATED_ROOT = \"src/lib/athena/generated\";\n\n/**\n * Architecture 4.0 default (`preset: athena-direct`) — project `athena/generated/`.\n * Model home is the `models/` directory (not a single long-term file).\n */\nconst ATHENA_DIRECT_TARGETS: GeneratorOutputTargets = {\n\tdatabase: `${ATHENA_PROJECT_GENERATED_ROOT}/relations.ts`,\n\tmodel: `${ATHENA_PROJECT_GENERATED_ROOT}/models/{schema_kebab}/{model_kebab}.ts`,\n\tregistry: `${ATHENA_PROJECT_GENERATED_ROOT}/registry.ts`,\n\tschema: `${ATHENA_PROJECT_GENERATED_ROOT}/schema/{schema_kebab}.ts`,\n};\n\n/** Default generated root (project artifact folder). */\nexport const ATHENA_GENERATED_ROOT = ATHENA_PROJECT_GENERATED_ROOT;\n\nfunction normalizeGeneratedPath(pathValue: string): string {\n\treturn pathValue.replace(/\\\\/g, \"/\");\n}\n\n/** True when a target lives under project or runtime-colocated generated roots. */\nexport function isCurrentAthenaGeneratedPath(pathValue: string): boolean {\n\tconst path = normalizeGeneratedPath(pathValue);\n\treturn (\n\t\tpath === ATHENA_PROJECT_GENERATED_ROOT ||\n\t\tpath.startsWith(`${ATHENA_PROJECT_GENERATED_ROOT}/`) ||\n\t\tpath === ATHENA_RUNTIME_GENERATED_ROOT ||\n\t\tpath.startsWith(`${ATHENA_RUNTIME_GENERATED_ROOT}/`)\n\t);\n}\n\n/**\n * True for flat N-1 `athena/*` (registry.generated.ts, athena/schema.ts, …)\n * and not for `athena/generated/**`.\n */\nexport function isLegacyFlatAthenaGeneratedPath(pathValue: string): boolean {\n\tconst path = normalizeGeneratedPath(pathValue);\n\tif (isCurrentAthenaGeneratedPath(path)) {\n\t\treturn false;\n\t}\n\treturn path === \"athena\" || path.startsWith(\"athena/\");\n}\n\n/** Path of generator ownership manifest relative to project cwd. */\nexport const GENERATED_MANIFEST_REL = \".athena/generated-manifest.json\";\n\nconst DEFAULT_OUTPUT_FORMAT: GeneratorOutputFormat = \"table-builder\";\nconst DEFAULT_OUTPUT_PRESET: GeneratorOutputPreset = \"athena-direct\";\nconst DEFAULT_ARTIFACT_WRITE_POLICY: GeneratorArtifactWritePolicy = \"merge\";\nconst ARTIFACT_WRITE_POLICIES = new Set<GeneratorArtifactWritePolicy>([\n\t\"merge\",\n\t\"skip\",\n\t\"overwrite\",\n]);\n\nconst DEFAULT_NAMING: GeneratorNamingConfig = {\n\tdatabaseConst: \"camel\",\n\tmodelConst: \"camel\",\n\tmodelType: \"pascal\",\n\tregistryConst: \"camel\",\n\tschemaConst: \"camel\",\n};\n\nconst DEFAULT_FEATURES: GeneratorFeatureFlags = {\n\temitRegistry: true,\n\temitRelations: true,\n};\n\nconst DEFAULT_EXPERIMENTAL_FLAGS: GeneratorExperimentalFlags = {\n\tpostgresGatewayIntrospection: false,\n\tscyllaProviderContracts: true,\n};\n\nconst DEFAULT_INTERNAL_CONFIG: GeneratorInternalConfig = {\n\tschemaVersion: 1,\n};\n\nconst DEFAULT_FILTER_CONFIG = {\n\texcludeTables: [],\n\tincludeTables: [],\n} as const;\n\nconst PROJECT_ENV_FILENAMES = [\".env\", \".env.local\"] as const;\n\nconst DIRECT_CONNECTION_STRING_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_PG_URL\",\n\t\"DATABASE_URL\",\n\t\"PG_URL\",\n\t\"POSTGRES_URL\",\n\t\"POSTGRESQL_URL\",\n] as const;\n\nconst POSTGRES_DATABASE_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_DB\",\n\t\"ATHENA_DATABASE\",\n\t\"PGDATABASE\",\n] as const;\n\nconst POSTGRES_PASSWORD_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_PG_PASSWORD\",\n\t\"PGPASSWORD\",\n] as const;\n\n/**\n * Generator gateway URL keys (server/CLI only — intentionally omits NEXT_PUBLIC_*).\n * Includes primary + gateway alias keys, plus generator-only ATHENA_GENERATOR_URL.\n */\nconst GATEWAY_URL_ENV_KEYS = [\n\t\"ATHENA_URL\",\n\t\"ATHENA_GATEWAY_URL\",\n\t\"ATHENA_GENERATOR_URL\",\n] as const;\n\n/**\n * Generator API key keys (server/CLI only — no NEXT_PUBLIC_*, adds ATHENA_GENERATOR_API_KEY).\n */\nconst GATEWAY_API_KEY_ENV_KEYS = [\n\t\"ATHENA_API_KEY\",\n\t\"ATHENA_GATEWAY_API_KEY\",\n\t\"ATHENA_GENERATOR_API_KEY\",\n] as const;\n\n/**\n * Registry client name for gateway introspection (`X-Athena-Client`).\n * Shared env client keys via ATHENA_ENV_CLIENT_KEYS SSOT.\n */\nconst GATEWAY_CLIENT_ENV_KEYS = ATHENA_ENV_CLIENT_KEYS;\n\nconst GENERATOR_SCHEMA_ENV_KEYS = [\"ATHENA_GENERATOR_SCHEMAS\"] as const;\nconst OUTPUT_FORMAT_ENV_KEYS = [\"ATHENA_GENERATOR_OUTPUT_FORMAT\"] as const;\nconst OUTPUT_PRESET_ENV_KEYS = [\"ATHENA_GENERATOR_OUTPUT_PRESET\"] as const;\nconst MODEL_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_MODEL_TARGET\"] as const;\nconst SCHEMA_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_SCHEMA_TARGET\"] as const;\nconst DATABASE_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_DATABASE_TARGET\"] as const;\nconst REGISTRY_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_REGISTRY_TARGET\"] as const;\nconst TABLES_ENV_KEYS = [\"ATHENA_GENERATOR_TABLES\"] as const;\nconst EXCLUDE_TABLES_ENV_KEYS = [\"ATHENA_GENERATOR_EXCLUDE_TABLES\"] as const;\nconst PLACEHOLDER_MAP_ENV_KEYS = [\"ATHENA_GENERATOR_PLACEHOLDER_MAP\"] as const;\nconst MODEL_TYPE_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_MODEL_TYPE\",\n\t\"ATHENA_GENERATOR_MODEL_STYLE\",\n] as const;\nconst MODEL_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_MODEL_CONST\"] as const;\nconst SCHEMA_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_SCHEMA_CONST\"] as const;\nconst DATABASE_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_DATABASE_CONST\"] as const;\nconst REGISTRY_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_REGISTRY_CONST\"] as const;\nconst EMIT_RELATIONS_ENV_KEYS = [\"ATHENA_GENERATOR_EMIT_RELATIONS\"] as const;\nconst EMIT_REGISTRY_ENV_KEYS = [\"ATHENA_GENERATOR_EMIT_REGISTRY\"] as const;\nconst GATEWAY_BACKEND_ENV_KEYS = [\"ATHENA_GENERATOR_BACKEND\"] as const;\nconst GATEWAY_EXPERIMENTAL_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_GATEWAY_EXPERIMENTAL\",\n] as const;\nconst SCYLLA_PROVIDER_CONTRACTS_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_SCYLLA_PROVIDER_CONTRACTS\",\n] as const;\nconst ENV_ONLY_CONFIG_PATH = \"[environment defaults]\";\n\nconst NAMING_STYLE_VALUES = [\n\t\"preserve\",\n\t\"camel\",\n\t\"pascal\",\n\t\"snake\",\n\t\"kebab\",\n] as const;\nconst OUTPUT_FORMAT_VALUES = [\"define-model\", \"table-builder\"] as const;\nconst OUTPUT_PRESET_VALUES = [\"legacy\", \"athena-direct\"] as const;\nconst BACKEND_TYPE_VALUES = [\n\t\"athena\",\n\t\"postgrest\",\n\t\"postgresql\",\n\t\"scylladb\",\n] as const;\n\nconst OUTPUT_PRESET_TARGETS: Record<\n\tGeneratorOutputPreset,\n\tGeneratorOutputTargets\n> = {\n\t\"athena-direct\": ATHENA_DIRECT_TARGETS,\n\tlegacy: LEGACY_DEFAULT_TARGETS,\n};\n\nfunction normalizeRawEnvValue(rawValue: string): string {\n\tif (\n\t\trawValue.startsWith('\"') &&\n\t\trawValue.endsWith('\"') &&\n\t\trawValue.length >= 2\n\t) {\n\t\tconst inner = rawValue.slice(1, -1);\n\t\treturn inner\n\t\t\t.replace(/\\\\n/g, \"\\n\")\n\t\t\t.replace(/\\\\r/g, \"\\r\")\n\t\t\t.replace(/\\\\t/g, \"\\t\")\n\t\t\t.replace(/\\\\\"/g, '\"')\n\t\t\t.replace(/\\\\\\\\/g, \"\\\\\");\n\t}\n\n\tif (\n\t\trawValue.startsWith(\"'\") &&\n\t\trawValue.endsWith(\"'\") &&\n\t\trawValue.length >= 2\n\t) {\n\t\treturn rawValue.slice(1, -1);\n\t}\n\n\tconst commentIndex = rawValue.search(/\\s+#/);\n\tconst withoutComment =\n\t\tcommentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue;\n\treturn withoutComment.trim();\n}\n\nfunction parseEnvLine(line: string): [key: string, value: string] | undefined {\n\tconst trimmed = line.trim();\n\tif (!trimmed || trimmed.startsWith(\"#\")) {\n\t\treturn undefined;\n\t}\n\n\tconst match = trimmed.match(\n\t\t/^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/,\n\t);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\n\tconst [, key, rawValue] = match;\n\treturn [key, normalizeRawEnvValue(rawValue.trim())];\n}\n\nfunction readProjectEnvEntries(cwd: string): Map<string, string> {\n\tconst nodeEnv = process.env.NODE_ENV?.trim();\n\tconst filenames = [\n\t\t...PROJECT_ENV_FILENAMES,\n\t\t...(nodeEnv ? [`.env.${nodeEnv}`, `.env.${nodeEnv}.local`] : []),\n\t];\n\n\tconst entries = new Map<string, string>();\n\n\tfor (const filename of filenames) {\n\t\tconst absolutePath = resolve(cwd, filename);\n\t\tif (!existsSync(absolutePath)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst content = readFileSync(absolutePath, \"utf8\");\n\t\tconst lines = content.split(/\\r?\\n/g);\n\t\tfor (const line of lines) {\n\t\t\tconst parsed = parseEnvLine(line);\n\t\t\tif (!parsed) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst [key, value] = parsed;\n\t\t\tentries.set(key, value);\n\t\t}\n\t}\n\n\treturn entries;\n}\n\n/**\n * Loads project `.env*` into `process.env` without overriding existing shell\n * values. Same authority migrate / `loadGeneratorConfig` use before resolving\n * connection strings. Returns a restore function that removes staged keys.\n */\nexport function applyGeneratorProjectEnv(cwd: string): () => void {\n\tconst envEntries = readProjectEnvEntries(cwd);\n\tif (envEntries.size === 0) {\n\t\treturn () => {};\n\t}\n\n\tconst initialKeys = new Set<string>(\n\t\tObject.keys(process.env).filter((key) => process.env[key] !== undefined),\n\t);\n\tconst staged = new Map<string, string>();\n\n\tfor (const [key, value] of envEntries.entries()) {\n\t\tif (initialKeys.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tstaged.set(key, value);\n\t}\n\n\tfor (const [key, value] of staged.entries()) {\n\t\tprocess.env[key] = value;\n\t}\n\n\treturn () => {\n\t\tfor (const key of staged.keys()) {\n\t\t\tdelete process.env[key];\n\t\t}\n\t};\n}\n\n/** @deprecated Use {@link applyGeneratorProjectEnv}. */\nconst applyProjectEnv = applyGeneratorProjectEnv;\n\nfunction readEnvStringValue(key: string): string | undefined {\n\tconst value = process.env[key];\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction resolveFallbackValue(\n\tfallbackKeys: readonly string[],\n): string | undefined {\n\tfor (const key of fallbackKeys) {\n\t\tconst value = readEnvStringValue(key);\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction normalizeOneOfValue<const T extends string>(\n\trawValue: string | undefined,\n\tallowedValues: readonly T[],\n\tenvKeys: readonly string[],\n): T | undefined {\n\tif (!rawValue) {\n\t\treturn undefined;\n\t}\n\tif (allowedValues.includes(rawValue as T)) {\n\t\treturn rawValue as T;\n\t}\n\tthrow new Error(\n\t\t`Generator config env vars ${envKeys.join(\", \")} must resolve to one of: ${allowedValues.join(\", \")}. Received: ${rawValue}.`,\n\t);\n}\n\nfunction resolveOptionalOneOf<const T extends string>(\n\tenvKeys: readonly string[],\n\tallowedValues: readonly T[],\n): T | undefined {\n\treturn normalizeOneOfValue(\n\t\tresolveFallbackValue(envKeys),\n\t\tallowedValues,\n\t\tenvKeys,\n\t);\n}\n\nfunction resolveOptionalBoolean(\n\tenvKeys: readonly string[],\n): boolean | undefined {\n\tconst rawValue = resolveFallbackValue(envKeys);\n\treturn rawValue === undefined ? undefined : parseBooleanFlag(rawValue, false);\n}\n\nfunction resolveOptionalJson<T>(envKeys: readonly string[]): T | undefined {\n\tconst rawValue = resolveFallbackValue(envKeys);\n\tif (rawValue === undefined) {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn JSON.parse(rawValue) as T;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow new Error(\n\t\t\t`Generator config env vars ${envKeys.join(\", \")} must contain valid JSON. ${message}`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n\nfunction deriveDatabaseNameFromConnectionString(\n\tconnectionString: string,\n): string | undefined {\n\ttry {\n\t\tconst parsedUrl = new URL(connectionString);\n\t\tif (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst pathname = parsedUrl.pathname.replace(/^\\/+/, \"\").trim();\n\t\treturn pathname.length > 0 ? decodeURIComponent(pathname) : undefined;\n\t} catch {\n\t\t// Invalid connection string — no database name.\n\t}\n\treturn undefined;\n}\n\nfunction normalizeOptionalString(\n\tvalue: unknown,\n\tfallbackKeys: readonly string[],\n): string | undefined {\n\tif (typeof value === \"string\") {\n\t\tconst trimmed = value.trim();\n\t\tif (trimmed.length > 0) {\n\t\t\treturn trimmed;\n\t\t}\n\t}\n\n\treturn resolveFallbackValue(fallbackKeys);\n}\n\nfunction normalizeRequiredString(\n\tvalue: unknown,\n\tfieldLabel: string,\n\tfallbackKeys: readonly string[],\n): string {\n\tconst resolved = normalizeOptionalString(value, fallbackKeys);\n\tif (resolved) {\n\t\treturn resolved;\n\t}\n\n\tthrow new Error(\n\t\t`Generator config is missing ${fieldLabel}. Set ${fieldLabel} directly or provide one of: ${fallbackKeys.join(\", \")}.`,\n\t);\n}\n\nfunction applyPostgresPasswordFallback(connectionString: string): string {\n\tlet parsedUrl: URL;\n\ttry {\n\t\tparsedUrl = new URL(connectionString);\n\t} catch {\n\t\treturn connectionString;\n\t}\n\n\tif (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n\t\treturn connectionString;\n\t}\n\n\tif (!parsedUrl.username || parsedUrl.password) {\n\t\treturn connectionString;\n\t}\n\n\tconst fallbackPassword = resolveFallbackValue(POSTGRES_PASSWORD_ENV_KEYS);\n\tif (!fallbackPassword) {\n\t\treturn connectionString;\n\t}\n\n\tparsedUrl.password = fallbackPassword;\n\treturn parsedUrl.toString();\n}\n\nfunction normalizeBooleanFlag(rawValue: unknown, fallback: boolean): boolean {\n\tif (typeof rawValue === \"boolean\") {\n\t\treturn rawValue;\n\t}\n\tif (typeof rawValue === \"string\") {\n\t\treturn parseBooleanFlag(rawValue, fallback);\n\t}\n\treturn fallback;\n}\n\nfunction normalizeFeatureFlags(\n\tinput: Partial<GeneratorFeatureFlags> | undefined,\n): GeneratorFeatureFlags {\n\treturn {\n\t\temitRegistry: normalizeBooleanFlag(\n\t\t\tinput?.emitRegistry,\n\t\t\tDEFAULT_FEATURES.emitRegistry,\n\t\t),\n\t\temitRelations: normalizeBooleanFlag(\n\t\t\tinput?.emitRelations,\n\t\t\tDEFAULT_FEATURES.emitRelations,\n\t\t),\n\t};\n}\n\nfunction normalizeExperimentalFlags(\n\tinput: Partial<GeneratorExperimentalFlags> | undefined,\n): GeneratorExperimentalFlags {\n\treturn {\n\t\tpostgresGatewayIntrospection: normalizeBooleanFlag(\n\t\t\tinput?.postgresGatewayIntrospection,\n\t\t\tDEFAULT_EXPERIMENTAL_FLAGS.postgresGatewayIntrospection,\n\t\t),\n\t\tscyllaProviderContracts: normalizeBooleanFlag(\n\t\t\tinput?.scyllaProviderContracts,\n\t\t\tDEFAULT_EXPERIMENTAL_FLAGS.scyllaProviderContracts,\n\t\t),\n\t};\n}\n\nfunction normalizeFilterConfig(input: GeneratorFilterConfig | undefined) {\n\treturn {\n\t\texcludeTables: normalizeTableSelection(input?.excludeTables),\n\t\tincludeTables: normalizeTableSelection(input?.includeTables),\n\t};\n}\n\nfunction normalizeArtifactWritePolicy(\n\tvalue: unknown,\n\tfieldName: string,\n): GeneratorArtifactWritePolicy {\n\tif (value === undefined || value === null || value === \"\") {\n\t\treturn DEFAULT_ARTIFACT_WRITE_POLICY;\n\t}\n\tif (\n\t\ttypeof value === \"string\" &&\n\t\tARTIFACT_WRITE_POLICIES.has(value as GeneratorArtifactWritePolicy)\n\t) {\n\t\treturn value as GeneratorArtifactWritePolicy;\n\t}\n\tthrow new Error(\n\t\t`Invalid output.artifactWrite.${fieldName}: expected one of merge | skip | overwrite, received ${JSON.stringify(value)}.`,\n\t);\n}\n\nfunction normalizeArtifactWriteConfig(\n\tinput: GeneratorArtifactWriteConfig | undefined,\n): NormalizedGeneratorOutputConfig[\"artifactWrite\"] {\n\treturn {\n\t\tdatabase: normalizeArtifactWritePolicy(input?.database, \"database\"),\n\t\tregistry: normalizeArtifactWritePolicy(input?.registry, \"registry\"),\n\t};\n}\n\nfunction normalizeOutputConfig(\n\toutput: GeneratorOutputConfig | undefined,\n): NormalizedGeneratorOutputConfig {\n\tconst preset = output?.preset ?? DEFAULT_OUTPUT_PRESET;\n\treturn {\n\t\tartifactWrite: normalizeArtifactWriteConfig(output?.artifactWrite),\n\t\tformat: output?.format ?? DEFAULT_OUTPUT_FORMAT,\n\t\tplaceholderMap: {\n\t\t\t...(output?.placeholderMap ?? {}),\n\t\t},\n\t\tpreset,\n\t\ttargets: {\n\t\t\t...OUTPUT_PRESET_TARGETS[preset],\n\t\t\t...(output?.targets ?? {}),\n\t\t},\n\t};\n}\n\nfunction normalizeProviderConfig(\n\tprovider: GeneratorProviderInputConfig,\n): GeneratorProviderConfig {\n\tif (provider.kind === \"postgres\" && provider.mode === \"direct\") {\n\t\tconst connectionString = normalizeRequiredString(\n\t\t\tprovider.connectionString,\n\t\t\t\"provider.connectionString\",\n\t\t\tDIRECT_CONNECTION_STRING_ENV_KEYS,\n\t\t);\n\t\tconst database =\n\t\t\tnormalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS) ??\n\t\t\tderiveDatabaseNameFromConnectionString(connectionString);\n\n\t\treturn {\n\t\t\t...provider,\n\t\t\tconnectionString: applyPostgresPasswordFallback(connectionString),\n\t\t\tdatabase,\n\t\t\tschemas: normalizeSchemaSelection(provider.schemas),\n\t\t};\n\t}\n\n\tif (provider.kind === \"postgres\" && provider.mode === \"gateway\") {\n\t\tconst gatewayUrl = normalizeRequiredString(\n\t\t\tprovider.gatewayUrl,\n\t\t\t\"provider.gatewayUrl\",\n\t\t\tGATEWAY_URL_ENV_KEYS,\n\t\t);\n\t\tconst apiKey = normalizeRequiredString(\n\t\t\tprovider.apiKey,\n\t\t\t\"provider.apiKey\",\n\t\t\tGATEWAY_API_KEY_ENV_KEYS,\n\t\t);\n\t\tconst database =\n\t\t\tnormalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS) ??\n\t\t\t\"postgres\";\n\t\tconst client = normalizeOptionalString(\n\t\t\tprovider.client,\n\t\t\tGATEWAY_CLIENT_ENV_KEYS,\n\t\t);\n\n\t\treturn {\n\t\t\t...provider,\n\t\t\tapiKey,\n\t\t\tdatabase,\n\t\t\tgatewayUrl,\n\t\t\t...(client ? { client } : {}),\n\t\t\tschemas: normalizeSchemaSelection(provider.schemas),\n\t\t};\n\t}\n\n\tif (provider.kind === \"scylla\" && provider.mode === \"direct\") {\n\t\tif (!provider.contactPoints?.length) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Generator config is missing provider.contactPoints for scylla direct mode.\",\n\t\t\t);\n\t\t}\n\t\tconst keyspace = normalizeOptionalString(provider.keyspace, []);\n\t\tif (!keyspace) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Generator config is missing provider.keyspace for scylla direct mode.\",\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tcontactPoints: provider.contactPoints.slice(),\n\t\t\tdatacenter: normalizeOptionalString(provider.datacenter, []),\n\t\t\tkeyspace,\n\t\t\tkind: \"scylla\",\n\t\t\tmode: \"direct\",\n\t\t};\n\t}\n\n\treturn provider;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isOptionalObjectField(\n\trecord: Record<string, unknown>,\n\tkey: string,\n): boolean {\n\tconst value = record[key];\n\treturn value === undefined || (typeof value === \"object\" && value !== null);\n}\n\nfunction isAthenaConfig(value: unknown): value is AthenaConfig {\n\tif (!isPlainRecord(value)) {\n\t\treturn false;\n\t}\n\tif (\n\t\t!(\n\t\t\tisOptionalObjectField(value, \"provider\") &&\n\t\t\tisOptionalObjectField(value, \"output\") &&\n\t\t\tisOptionalObjectField(value, \"tooling\") &&\n\t\t\tisOptionalObjectField(value, \"models\") &&\n\t\t\tisOptionalObjectField(value, \"policies\") &&\n\t\t\tisOptionalObjectField(value, \"migrations\") &&\n\t\t\tisOptionalObjectField(value, \"modules\") &&\n\t\t\tisOptionalObjectField(value, \"features\") &&\n\t\t\tisOptionalObjectField(value, \"experimental\") &&\n\t\t\tisOptionalObjectField(value, \"filter\") &&\n\t\t\tisOptionalObjectField(value, \"naming\")\n\t\t)\n\t) {\n\t\treturn false;\n\t}\n\treturn (\n\t\tvalue.provider !== undefined ||\n\t\tvalue.models !== undefined ||\n\t\tvalue.policies !== undefined ||\n\t\tvalue.tooling !== undefined ||\n\t\tvalue.output !== undefined ||\n\t\tvalue.migrations !== undefined ||\n\t\tvalue.modules !== undefined ||\n\t\tvalue.features !== undefined ||\n\t\tvalue.experimental !== undefined ||\n\t\tvalue.filter !== undefined ||\n\t\tvalue.naming !== undefined\n\t);\n}\n\nfunction isAthenaGeneratorConfig(\n\tvalue: unknown,\n): value is AthenaGeneratorConfig {\n\treturn (\n\t\tisAthenaConfig(value) &&\n\t\tBoolean(value.provider && typeof value.provider === \"object\")\n\t);\n}\n\nconst PROJECT_CONFIG_NESTED_KEYS = new Set([\n\t\"experimental\",\n\t\"features\",\n\t\"filter\",\n\t\"migrations\",\n\t\"models\",\n\t\"modules\",\n\t\"naming\",\n\t\"output\",\n\t\"policies\",\n\t\"provider\",\n\t\"tooling\",\n]);\n\nfunction retainAthenaConfig(input: AthenaConfig): AthenaConfig {\n\tconst retained: AthenaConfig = {};\n\tif (input.experimental !== undefined) {\n\t\tretained.experimental = input.experimental;\n\t}\n\tif (input.features !== undefined) {\n\t\tretained.features = input.features;\n\t}\n\tif (input.filter !== undefined) {\n\t\tretained.filter = input.filter;\n\t}\n\tif (input.migrations !== undefined) {\n\t\tretained.migrations = input.migrations;\n\t}\n\tif (input.modules !== undefined) {\n\t\tretained.modules = input.modules;\n\t}\n\tif (input.models !== undefined) {\n\t\tretained.models = input.models;\n\t}\n\tif (input.naming !== undefined) {\n\t\tretained.naming = input.naming;\n\t}\n\tif (input.output !== undefined) {\n\t\tretained.output = input.output;\n\t}\n\tif (input.policies !== undefined) {\n\t\tretained.policies = input.policies as AthenaPolicyProjectConfig;\n\t}\n\tif (input.provider !== undefined) {\n\t\tretained.provider = input.provider;\n\t}\n\tif (input.tooling !== undefined) {\n\t\tretained.tooling = input.tooling as AthenaToolingEntrypoints;\n\t}\n\treturn retained;\n}\n\nfunction normalizeMigrationsConfig(\n\tinput: AthenaMigrationsConfig | undefined,\n): NormalizedAthenaMigrationsConfig {\n\tconst directory =\n\t\ttypeof input?.directory === \"string\" && input.directory.trim().length > 0\n\t\t\t? input.directory.trim()\n\t\t\t: DEFAULT_MIGRATIONS_DIRECTORY;\n\treturn { directory };\n}\n\nexport function normalizeGeneratorConfig(\n\tinput: AthenaGeneratorConfig,\n): NormalizedAthenaGeneratorConfig {\n\treturn {\n\t\texperimental: normalizeExperimentalFlags(input.experimental),\n\t\tfeatures: normalizeFeatureFlags(input.features),\n\t\tfilter: {\n\t\t\t...DEFAULT_FILTER_CONFIG,\n\t\t\t...normalizeFilterConfig(input.filter),\n\t\t},\n\t\tinternal: {\n\t\t\t...DEFAULT_INTERNAL_CONFIG,\n\t\t},\n\t\tmigrations: normalizeMigrationsConfig(input.migrations),\n\t\t...(input.modules === undefined ? {} : { modules: input.modules }),\n\t\tnaming: {\n\t\t\t...DEFAULT_NAMING,\n\t\t\t...(input.naming ?? {}),\n\t\t},\n\t\toutput: normalizeOutputConfig(input.output),\n\t\tprovider: normalizeProviderConfig(input.provider),\n\t};\n}\n\n/**\n * Typed identity helper for authoring the static project SSOT (`athena.config.ts`).\n * `provider` is optional; generator commands still validate via\n * {@link defineGeneratorConfig} / {@link loadGeneratorConfig}.\n */\nexport function defineAthenaConfig<TConfig extends AthenaConfig>(\n\tconfig: TConfig,\n): TConfig {\n\treturn config;\n}\n\n/**\n * @deprecated Prefer {@link defineAthenaConfig} for project files.\n * Strict generator identity — not an alias of {@link defineAthenaConfig}.\n */\nexport function defineGeneratorConfig<TConfig extends AthenaGeneratorConfig>(\n\tconfig: TConfig,\n): TConfig {\n\treturn config;\n}\n\n/**\n * Finds a supported generator config filename in the provided directory.\n */\nexport function findGeneratorConfigPath(\n\tcwd: string = process.cwd(),\n): string | undefined {\n\tfor (const candidate of DEFAULT_CONFIG_CANDIDATES) {\n\t\tconst absolutePath = resolve(cwd, candidate);\n\t\tif (existsSync(absolutePath)) {\n\t\t\treturn absolutePath;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction enqueueConfigExportCandidates(\n\trecord: Record<string, unknown>,\n\tqueue: unknown[],\n): void {\n\tconst defaultExport = record.default;\n\tif (defaultExport && typeof defaultExport === \"object\") {\n\t\tqueue.push(defaultExport);\n\t}\n\n\tconst namedConfigExport = record.config;\n\tif (namedConfigExport && typeof namedConfigExport === \"object\") {\n\t\tqueue.push(namedConfigExport);\n\t}\n\n\tconst moduleExports = record[\"module.exports\"];\n\tif (moduleExports && typeof moduleExports === \"object\") {\n\t\tqueue.push(moduleExports);\n\t}\n\n\tfor (const [key, value] of Object.entries(record)) {\n\t\tif (PROJECT_CONFIG_NESTED_KEYS.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (value && typeof value === \"object\") {\n\t\t\tqueue.push(value);\n\t\t}\n\t}\n}\n\nfunction extractAthenaConfigExport(module: unknown): AthenaConfig {\n\tconst visited = new Set<unknown>();\n\tconst queue: unknown[] = [module];\n\n\twhile (queue.length > 0) {\n\t\tconst current = queue.shift();\n\t\tif (!current || typeof current !== \"object\" || visited.has(current)) {\n\t\t\tcontinue;\n\t\t}\n\t\tvisited.add(current);\n\n\t\tconst record = current as Record<string, unknown>;\n\t\tif (isAthenaConfig(record)) {\n\t\t\treturn record;\n\t\t}\n\n\t\tenqueueConfigExportCandidates(record, queue);\n\t}\n\n\tthrow new Error(\n\t\t\"Athena config file must export a config object as default export or `config`.\",\n\t);\n}\n\nfunction extractGeneratorConfigExport(module: unknown): AthenaGeneratorConfig {\n\tconst visited = new Set<unknown>();\n\tconst queue: unknown[] = [module];\n\n\twhile (queue.length > 0) {\n\t\tconst current = queue.shift();\n\t\tif (!current || typeof current !== \"object\" || visited.has(current)) {\n\t\t\tcontinue;\n\t\t}\n\t\tvisited.add(current);\n\n\t\tconst record = current as Record<string, unknown>;\n\t\tif (isAthenaGeneratorConfig(record)) {\n\t\t\treturn record;\n\t\t}\n\n\t\tenqueueConfigExportCandidates(record, queue);\n\t}\n\n\tthrow new Error(\n\t\t\"Generator config file must export a config object as default export or `config`.\",\n\t);\n}\n\nfunction isTypeScriptConfigPath(filePath: string): boolean {\n\treturn /\\.[cm]?tsx?$/i.test(filePath);\n}\n\nfunction isUnknownTypeScriptModuleError(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst code = \"code\" in error ? String(error.code) : \"\";\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn (\n\t\t((code === \"ERR_UNKNOWN_FILE_EXTENSION\" ||\n\t\t\tcode === \"ERR_UNKNOWN_MODULE_FORMAT\") &&\n\t\t\t/\\.tsx?/i.test(message)) ||\n\t\t/Unknown file extension [\"']\\.tsx?[\"']/i.test(message)\n\t);\n}\n\nfunction isNodeUnsupportedTypescriptSyntax(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst code = \"code\" in error ? error.code : undefined;\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn (\n\t\tcode === \"ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX\" ||\n\t\t/strip-only mode/i.test(message) ||\n\t\t/parameter property is not supported/i.test(message)\n\t);\n}\n\n/**\n * Native `import()` of `athena.config.ts` uses Node type-stripping. Syntax Node\n * cannot strip (constructor parameter properties) fails with a cryptic code.\n * Real evaluation failures are {@link AthenaConfigurationError}\n * `ATHENA_CONFIG_IMPORT_FAILED` — loaders still do not instantiate runtimes.\n */\nexport function explainGeneratorConfigLoadError(\n\terror: unknown,\n\tconfigPath: string,\n): AthenaConfigurationError {\n\tif (error instanceof AthenaConfigurationError) {\n\t\treturn error;\n\t}\n\n\tconst cause = error instanceof Error ? { cause: error } : undefined;\n\tif (isNodeUnsupportedTypescriptSyntax(error)) {\n\t\tconst message = [\n\t\t\t`Cannot load ${configPath}: Node.js type-stripping cannot compile this TypeScript.`,\n\t\t\t\"Constructor parameter properties (`constructor(private foo: T)`) and similar syntax are not supported in strip-only mode.\",\n\t\t\t\"Import `defineAthenaConfig` / `generatorEnv` from `@xylex-group/athena` (the compiled package), not from `./src/...`.\",\n\t\t\terror instanceof Error ? error.message : String(error),\n\t\t].join(\"\\n\");\n\t\treturn new AthenaConfigurationError(\n\t\t\t\"ATHENA_CONFIG_IMPORT_FAILED\",\n\t\t\tmessage,\n\t\t\tundefined,\n\t\t\tcause,\n\t\t);\n\t}\n\n\tif (isUnknownTypeScriptModuleError(error)) {\n\t\tconst message = [\n\t\t\t`Cannot load ${configPath}: this Node.js cannot import TypeScript config files.`,\n\t\t\t\"Use Node.js 22.18+ (native type-stripping) or keep `tsx` installed next to the Athena CLI.\",\n\t\t\terror instanceof Error ? error.message : String(error),\n\t\t].join(\"\\n\");\n\t\treturn new AthenaConfigurationError(\n\t\t\t\"ATHENA_CONFIG_IMPORT_FAILED\",\n\t\t\tmessage,\n\t\t\tundefined,\n\t\t\tcause,\n\t\t);\n\t}\n\n\tconst detail = error instanceof Error ? error.message : String(error);\n\treturn new AthenaConfigurationError(\n\t\t\"ATHENA_CONFIG_IMPORT_FAILED\",\n\t\t`Cannot load ${configPath}: ${detail}`,\n\t\tundefined,\n\t\tcause,\n\t);\n}\n\nfunction createRuntimeImport(): (moduleSpecifier: string) => Promise<unknown> {\n\t// Keep this as an indirect import so bundlers do not try to statically resolve\n\t// runtime file-system config paths when athena-js is consumed in Next.js.\n\treturn new Function(\n\t\t\"moduleSpecifier\",\n\t\t\"return import(moduleSpecifier)\",\n\t) as (moduleSpecifier: string) => Promise<unknown>;\n}\n\nfunction importConfigModule(moduleSpecifier: string): Promise<unknown> {\n\treturn createRuntimeImport()(moduleSpecifier);\n}\n\nlet typeScriptConfigLoaderPromise: Promise<boolean> | undefined;\n\nasync function ensureTypeScriptConfigLoader(\n\tanchorPath: string,\n): Promise<boolean> {\n\tif (typeScriptConfigLoaderPromise) {\n\t\treturn typeScriptConfigLoaderPromise;\n\t}\n\ttypeScriptConfigLoaderPromise = (async () => {\n\t\tconst runtimeImport = createRuntimeImport();\n\t\tconst nodeModule = (await runtimeImport(\"node:module\")) as {\n\t\t\tcreateRequire: (filename: string) => {\n\t\t\t\tresolve: (id: string) => string;\n\t\t\t};\n\t\t};\n\t\tconst anchors = [anchorPath, fileURLToPath(import.meta.url)];\n\t\tfor (const anchor of anchors) {\n\t\t\ttry {\n\t\t\t\tconst require = nodeModule.createRequire(anchor);\n\t\t\t\tconst tsxLoader = require.resolve(\"tsx\");\n\t\t\t\tawait runtimeImport(pathToFileURL(tsxLoader).href);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\ttry {\n\t\t\tawait runtimeImport(\"tsx\");\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t})();\n\treturn typeScriptConfigLoaderPromise;\n}\n\nasync function importConfigFile(resolvedPath: string): Promise<unknown> {\n\tconst moduleUrl = pathToFileURL(resolvedPath);\n\tconst load = () =>\n\t\timportConfigModule(`${moduleUrl.href}?cacheBust=${Date.now()}`);\n\ttry {\n\t\treturn await load();\n\t} catch (error) {\n\t\tif (\n\t\t\tisTypeScriptConfigPath(resolvedPath) &&\n\t\t\tisUnknownTypeScriptModuleError(error)\n\t\t) {\n\t\t\tconst registered = await ensureTypeScriptConfigLoader(resolvedPath);\n\t\t\tif (registered) {\n\t\t\t\ttry {\n\t\t\t\t\treturn await load();\n\t\t\t\t} catch (retryError) {\n\t\t\t\t\tthrow explainGeneratorConfigLoadError(retryError, resolvedPath);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthrow explainGeneratorConfigLoadError(error, resolvedPath);\n\t}\n}\n\nfunction buildEnvironmentOutputConfig(): GeneratorOutputConfig | undefined {\n\tconst format = resolveOptionalOneOf(\n\t\tOUTPUT_FORMAT_ENV_KEYS,\n\t\tOUTPUT_FORMAT_VALUES,\n\t);\n\tconst preset = resolveOptionalOneOf(\n\t\tOUTPUT_PRESET_ENV_KEYS,\n\t\tOUTPUT_PRESET_VALUES,\n\t);\n\tconst modelTarget = resolveFallbackValue(MODEL_TARGET_ENV_KEYS);\n\tconst schemaTarget = resolveFallbackValue(SCHEMA_TARGET_ENV_KEYS);\n\tconst databaseTarget = resolveFallbackValue(DATABASE_TARGET_ENV_KEYS);\n\tconst registryTarget = resolveFallbackValue(REGISTRY_TARGET_ENV_KEYS);\n\tconst placeholderMap = resolveOptionalJson<Record<string, string>>(\n\t\tPLACEHOLDER_MAP_ENV_KEYS,\n\t);\n\n\tif (\n\t\tformat === undefined &&\n\t\tpreset === undefined &&\n\t\tmodelTarget === undefined &&\n\t\tschemaTarget === undefined &&\n\t\tdatabaseTarget === undefined &&\n\t\tregistryTarget === undefined &&\n\t\tplaceholderMap === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tformat,\n\t\tplaceholderMap,\n\t\tpreset,\n\t\ttargets: {\n\t\t\t...(modelTarget ? { model: modelTarget } : {}),\n\t\t\t...(schemaTarget ? { schema: schemaTarget } : {}),\n\t\t\t...(databaseTarget ? { database: databaseTarget } : {}),\n\t\t\t...(registryTarget ? { registry: registryTarget } : {}),\n\t\t},\n\t};\n}\n\nfunction buildEnvironmentFilterConfig(): GeneratorFilterConfig | undefined {\n\tconst includeTables = resolveFallbackValue(TABLES_ENV_KEYS);\n\tconst excludeTables = resolveFallbackValue(EXCLUDE_TABLES_ENV_KEYS);\n\n\tif (includeTables === undefined && excludeTables === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\t...(includeTables === undefined ? {} : { includeTables }),\n\t\t...(excludeTables === undefined ? {} : { excludeTables }),\n\t};\n}\n\nfunction buildEnvironmentNamingConfig():\n\t| Partial<GeneratorNamingConfig>\n\t| undefined {\n\tconst modelType = resolveOptionalOneOf(\n\t\tMODEL_TYPE_ENV_KEYS,\n\t\tNAMING_STYLE_VALUES,\n\t);\n\tconst modelConst = resolveOptionalOneOf(\n\t\tMODEL_CONST_ENV_KEYS,\n\t\tNAMING_STYLE_VALUES,\n\t);\n\tconst schemaConst = resolveOptionalOneOf(\n\t\tSCHEMA_CONST_ENV_KEYS,\n\t\tNAMING_STYLE_VALUES,\n\t);\n\tconst databaseConst = resolveOptionalOneOf(\n\t\tDATABASE_CONST_ENV_KEYS,\n\t\tNAMING_STYLE_VALUES,\n\t);\n\tconst registryConst = resolveOptionalOneOf(\n\t\tREGISTRY_CONST_ENV_KEYS,\n\t\tNAMING_STYLE_VALUES,\n\t);\n\n\tif (\n\t\tmodelType === undefined &&\n\t\tmodelConst === undefined &&\n\t\tschemaConst === undefined &&\n\t\tdatabaseConst === undefined &&\n\t\tregistryConst === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\t...(modelType ? { modelType } : {}),\n\t\t...(modelConst ? { modelConst } : {}),\n\t\t...(schemaConst ? { schemaConst } : {}),\n\t\t...(databaseConst ? { databaseConst } : {}),\n\t\t...(registryConst ? { registryConst } : {}),\n\t};\n}\n\nfunction buildEnvironmentFeatureFlags():\n\t| Partial<GeneratorFeatureFlags>\n\t| undefined {\n\tconst emitRelations = resolveOptionalBoolean(EMIT_RELATIONS_ENV_KEYS);\n\tconst emitRegistry = resolveOptionalBoolean(EMIT_REGISTRY_ENV_KEYS);\n\n\tif (emitRelations === undefined && emitRegistry === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\t...(emitRelations === undefined ? {} : { emitRelations }),\n\t\t...(emitRegistry === undefined ? {} : { emitRegistry }),\n\t};\n}\n\nfunction buildEnvironmentExperimentalFlags():\n\t| Partial<GeneratorExperimentalFlags>\n\t| undefined {\n\tconst postgresGatewayIntrospection = resolveOptionalBoolean(\n\t\tGATEWAY_EXPERIMENTAL_ENV_KEYS,\n\t);\n\tconst scyllaProviderContracts = resolveOptionalBoolean(\n\t\tSCYLLA_PROVIDER_CONTRACTS_ENV_KEYS,\n\t);\n\n\tif (\n\t\tpostgresGatewayIntrospection === undefined &&\n\t\tscyllaProviderContracts === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\t...(postgresGatewayIntrospection === undefined\n\t\t\t? {}\n\t\t\t: { postgresGatewayIntrospection }),\n\t\t...(scyllaProviderContracts === undefined\n\t\t\t? {}\n\t\t\t: { scyllaProviderContracts }),\n\t};\n}\n\nfunction buildEnvironmentProviderConfig():\n\t| GeneratorProviderInputConfig\n\t| undefined {\n\tconst directConnectionString = resolveFallbackValue(\n\t\tDIRECT_CONNECTION_STRING_ENV_KEYS,\n\t);\n\tif (directConnectionString) {\n\t\treturn {\n\t\t\tconnectionString: directConnectionString,\n\t\t\tdatabase: normalizeOptionalString(undefined, POSTGRES_DATABASE_ENV_KEYS),\n\t\t\tkind: \"postgres\",\n\t\t\tmode: \"direct\",\n\t\t\tschemas: normalizeSchemaSelection(\n\t\t\t\tresolveFallbackValue(GENERATOR_SCHEMA_ENV_KEYS),\n\t\t\t),\n\t\t};\n\t}\n\n\tconst gatewayUrl = resolveFallbackValue(GATEWAY_URL_ENV_KEYS);\n\tconst apiKey = resolveFallbackValue(GATEWAY_API_KEY_ENV_KEYS);\n\tif (gatewayUrl && apiKey) {\n\t\tconst backend = resolveOptionalOneOf(\n\t\t\tGATEWAY_BACKEND_ENV_KEYS,\n\t\t\tBACKEND_TYPE_VALUES,\n\t\t) as BackendType | undefined;\n\t\tconst client = resolveFallbackValue(GATEWAY_CLIENT_ENV_KEYS);\n\t\treturn {\n\t\t\tapiKey,\n\t\t\tbackend,\n\t\t\tdatabase: normalizeOptionalString(undefined, POSTGRES_DATABASE_ENV_KEYS),\n\t\t\tgatewayUrl,\n\t\t\tkind: \"postgres\",\n\t\t\tmode: \"gateway\",\n\t\t\tschemas: normalizeSchemaSelection(\n\t\t\t\tresolveFallbackValue(GENERATOR_SCHEMA_ENV_KEYS),\n\t\t\t),\n\t\t\t...(client ? { client } : {}),\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction createEnvironmentGeneratorConfig(): AthenaGeneratorConfig | undefined {\n\tconst provider = buildEnvironmentProviderConfig();\n\tif (!provider) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\texperimental: buildEnvironmentExperimentalFlags(),\n\t\tfeatures: buildEnvironmentFeatureFlags(),\n\t\tfilter: buildEnvironmentFilterConfig(),\n\t\tnaming: buildEnvironmentNamingConfig(),\n\t\toutput: buildEnvironmentOutputConfig(),\n\t\tprovider,\n\t};\n}\n\n/**\n * Loads the static project SSOT from `athena.config.*`.\n * Retains `models`, `policies`, and `tooling` exactly. Does not instantiate\n * clients, open database connections, or import `tooling.*` paths.\n */\nexport async function loadAthenaConfig(\n\toptions: LoadAthenaConfigOptions = {},\n): Promise<LoadedAthenaConfig> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst restoreProjectEnv = applyProjectEnv(cwd);\n\ttry {\n\t\tconst resolvedPath = options.configPath\n\t\t\t? resolve(cwd, options.configPath)\n\t\t\t: findGeneratorConfigPath(cwd);\n\n\t\tif (!resolvedPath) {\n\t\t\tthrow new Error(\n\t\t\t\t`No Athena config found in ${cwd}. Expected one of: ${DEFAULT_CONFIG_CANDIDATES.join(\", \")}.`,\n\t\t\t);\n\t\t}\n\n\t\tconst module = await importConfigFile(resolvedPath);\n\t\tconst rawConfig = extractAthenaConfigExport(module);\n\t\treturn {\n\t\t\tconfig: retainAthenaConfig(rawConfig),\n\t\t\tconfigPath: resolvedPath,\n\t\t};\n\t} finally {\n\t\trestoreProjectEnv();\n\t}\n}\n\n/**\n * Loads and normalizes `athena.config.*` as a required-provider generator\n * projection. Extra project-only keys (`models`, `policies`, `tooling`) are\n * dropped. Env-only fallback still requires a resolvable provider.\n */\nexport async function loadGeneratorConfig(\n\toptions: LoadGeneratorConfigOptions = {},\n): Promise<LoadedGeneratorConfig> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst restoreAppliedEnv =\n\t\toptions.applyProjectEnv === false ? () => {} : applyProjectEnv(cwd);\n\ttry {\n\t\tconst resolvedPath = options.configPath\n\t\t\t? resolve(cwd, options.configPath)\n\t\t\t: findGeneratorConfigPath(cwd);\n\n\t\tif (!resolvedPath) {\n\t\t\tconst environmentConfig = createEnvironmentGeneratorConfig();\n\t\t\tif (environmentConfig) {\n\t\t\t\treturn {\n\t\t\t\t\tconfig: normalizeGeneratorConfig(environmentConfig),\n\t\t\t\t\tconfigPath: ENV_ONLY_CONFIG_PATH,\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`No generator config found in ${cwd}. Expected one of: ${DEFAULT_CONFIG_CANDIDATES.join(\", \")}. To run without a config file, set DATABASE_URL (direct mode) or ATHENA_URL + ATHENA_API_KEY (gateway mode).`,\n\t\t\t);\n\t\t}\n\n\t\tconst module = await importConfigFile(resolvedPath);\n\t\tconst rawConfig = extractGeneratorConfigExport(module);\n\n\t\treturn {\n\t\t\tconfig: normalizeGeneratorConfig(rawConfig),\n\t\t\tconfigPath: resolvedPath,\n\t\t};\n\t} finally {\n\t\tif (options.restoreProjectEnv !== false) {\n\t\t\trestoreAppliedEnv();\n\t\t}\n\t}\n}\n","/** Default application SQL migrations directory (project-relative). */\nexport const DEFAULT_MIGRATIONS_DIRECTORY = \"athena/migrations\";\n\n/** Materialized, read-only view of package-owned Embedded Auth generations. */\nexport const DEFAULT_MANAGED_AUTH_MIGRATIONS_DIRECTORY =\n\t\"athena/managed/auth/migrations\";\n","import type {\n\tGeneratorProviderConfig,\n\tGeneratorSchemaSelection,\n} from \"./types.ts\";\n\nexport const DEFAULT_POSTGRES_SCHEMAS = [\"public\"] as const;\n\nfunction collectSchemaNames(\n\tinput: GeneratorSchemaSelection | undefined,\n): string[] {\n\tif (!input) {\n\t\treturn [];\n\t}\n\n\tconst values = typeof input === \"string\" ? [input] : input;\n\treturn values.flatMap((value) => String(value).split(\",\"));\n}\n\n/**\n * Normalizes schema selection from config or env-backed strings into a stable,\n * deduplicated list. Empty selections fall back to PostgreSQL's public schema.\n */\nexport function normalizeSchemaSelection(\n\tinput: GeneratorSchemaSelection | undefined,\n): string[] {\n\tconst schemas: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const value of collectSchemaNames(input)) {\n\t\tconst schema = value.trim();\n\t\tif (!schema || seen.has(schema)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(schema);\n\t\tschemas.push(schema);\n\t}\n\n\treturn schemas.length > 0 ? schemas : [...DEFAULT_POSTGRES_SCHEMAS];\n}\n\n/**\n * Resolves the effective schema list for provider-backed generator runs.\n */\nexport function resolveProviderSchemas(\n\tproviderConfig: GeneratorProviderConfig,\n): string[] {\n\tif (providerConfig.kind === \"postgres\") {\n\t\treturn normalizeSchemaSelection(providerConfig.schemas);\n\t}\n\n\treturn [...DEFAULT_POSTGRES_SCHEMAS];\n}\n","import type {\n\tIntrospectionSchema,\n\tIntrospectionSnapshot,\n} from \"../schema/types.ts\";\nimport type {\n\tGeneratorTableSelection,\n\tNormalizedGeneratorFilterConfig,\n} from \"./types.ts\";\n\nfunction normalizeTableSelector(value: string): string | undefined {\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function normalizeTableSelection(\n\tvalue: GeneratorTableSelection | undefined,\n): string[] {\n\tif (typeof value === \"string\") {\n\t\treturn Array.from(\n\t\t\tnew Set(\n\t\t\t\tvalue\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map(normalizeTableSelector)\n\t\t\t\t\t.filter((entry): entry is string => Boolean(entry)),\n\t\t\t),\n\t\t);\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn Array.from(\n\t\t\tnew Set(\n\t\t\t\tvalue\n\t\t\t\t\t.map((entry) =>\n\t\t\t\t\t\ttypeof entry === \"string\"\n\t\t\t\t\t\t\t? normalizeTableSelector(entry)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t)\n\t\t\t\t\t.filter((entry): entry is string => Boolean(entry)),\n\t\t\t),\n\t\t);\n\t}\n\n\treturn [];\n}\n\nfunction matchesTableSelector(\n\tschemaName: string,\n\ttableName: string,\n\tselector: string,\n): boolean {\n\tconst separatorIndex = selector.indexOf(\".\");\n\tif (separatorIndex < 0) {\n\t\treturn tableName === selector;\n\t}\n\n\tconst selectorSchema = selector.slice(0, separatorIndex).trim();\n\tconst selectorTable = selector.slice(separatorIndex + 1).trim();\n\treturn selectorSchema === schemaName && selectorTable === tableName;\n}\n\nfunction shouldKeepTable(\n\tschemaName: string,\n\ttableName: string,\n\tfilter: NormalizedGeneratorFilterConfig,\n): boolean {\n\tconst included =\n\t\tfilter.includeTables.length === 0 ||\n\t\tfilter.includeTables.some((selector) =>\n\t\t\tmatchesTableSelector(schemaName, tableName, selector),\n\t\t);\n\tif (!included) {\n\t\treturn false;\n\t}\n\n\treturn !filter.excludeTables.some((selector) =>\n\t\tmatchesTableSelector(schemaName, tableName, selector),\n\t);\n}\n\nfunction hasTableFilters(filter: NormalizedGeneratorFilterConfig): boolean {\n\treturn filter.includeTables.length > 0 || filter.excludeTables.length > 0;\n}\n\nexport function filterIntrospectionSnapshot(\n\tsnapshot: IntrospectionSnapshot,\n\tfilter: NormalizedGeneratorFilterConfig,\n): IntrospectionSnapshot {\n\tif (!hasTableFilters(filter)) {\n\t\treturn snapshot;\n\t}\n\n\tconst schemas: Record<string, IntrospectionSchema> = {};\n\n\tfor (const [schemaName, schema] of Object.entries(snapshot.schemas)) {\n\t\tconst tables = Object.fromEntries(\n\t\t\tObject.entries(schema.tables).filter(([tableName]) =>\n\t\t\t\tshouldKeepTable(schemaName, tableName, filter),\n\t\t\t),\n\t\t);\n\n\t\tif (Object.keys(tables).length === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tschemas[schemaName] = {\n\t\t\t...schema,\n\t\t\ttables,\n\t\t};\n\t}\n\n\tif (Object.keys(schemas).length === 0) {\n\t\tconst includeLabel =\n\t\t\tfilter.includeTables.length > 0\n\t\t\t\t? ` includeTables=${filter.includeTables.join(\", \")}`\n\t\t\t\t: \"\";\n\t\tconst excludeLabel =\n\t\t\tfilter.excludeTables.length > 0\n\t\t\t\t? ` excludeTables=${filter.excludeTables.join(\", \")}`\n\t\t\t\t: \"\";\n\t\tthrow new Error(\n\t\t\t`Generator table filters matched no tables after schema selection.${includeLabel}${excludeLabel}`,\n\t\t);\n\t}\n\n\treturn {\n\t\t...snapshot,\n\t\tschemas,\n\t};\n}\n","/**\n * Node `createHash` without static `node:crypto` / `Buffer` references.\n * Keeps DTS/tsup builds green when `@types/node` is not on the type path\n * (Workers CI / athena-auth-ui local overlay builds).\n */\n\ntype HashLike = {\n  update(data: string | Uint8Array, encoding?: string): HashLike;\n  digest(encoding: \"hex\"): string;\n};\n\ntype NodeCryptoLike = {\n  createHash: (algorithm: string) => HashLike;\n};\n\nfunction loadNodeCrypto(): NodeCryptoLike {\n  const processLike = (\n    globalThis as {\n      process?: {\n        getBuiltinModule?: (id: string) => unknown;\n      };\n    }\n  ).process;\n\n  // Node 20.16+ / 22.12+: no import graph for DTS.\n  const fromBuiltin = processLike?.getBuiltinModule?.(\"crypto\") as\n    | NodeCryptoLike\n    | undefined;\n  if (typeof fromBuiltin?.createHash === \"function\") {\n    return fromBuiltin;\n  }\n\n  // Node 18 / older 20: CJS `require` when available (tsup CJS output, some loaders).\n  try {\n    const nodeRequire = Function(\n      \"return typeof require !== 'undefined' ? require : null\"\n    )() as ((id: string) => NodeCryptoLike) | null;\n    const fromRequire = nodeRequire?.(\"crypto\");\n    if (typeof fromRequire?.createHash === \"function\") {\n      return fromRequire;\n    }\n  } catch {\n    // fall through\n  }\n\n  throw new Error(\n    \"Node.js crypto.createHash is required (process.getBuiltinModule or require)\"\n  );\n}\n\nlet cached: NodeCryptoLike | undefined;\n\n/** SHA-256 hex digest of a UTF-8 string (Node crypto, sync). */\nexport function sha256HexUtf8(text: string): string {\n  cached ??= loadNodeCrypto();\n  return cached.createHash(\"sha256\").update(text, \"utf8\").digest(\"hex\");\n}\n","import { sha256HexUtf8 } from \"../node-crypto.ts\";\n\n/**\n * Deterministic SHA-256 checksum of exact UTF-8 migration SQL bytes.\n * No line-ending normalization — file content is hashed as authored.\n * Uses node-crypto helper (no static `node:crypto` import) so DTS stays green\n * without `@types/node` on the type path.\n */\nexport function checksumMigrationSql(sql: string): string {\n  return sha256HexUtf8(sql);\n}\n","import { PACKAGE_VERSION } from \"../../sdk-version.ts\";\nimport {\n  ATHENA_AUTH_REQUEST_ID_HEADER,\n  ATHENA_AUTH_TRACE_ID_HEADER,\n  type AthenaAuthErrorBody,\n} from \"../contract/index.ts\";\nimport { currentAuthRequestTiming } from \"./request-timing.ts\";\n\nexport class AthenaAuthRuntimeError extends Error {\n  readonly code?: string;\n  readonly publicMessage: string;\n  readonly status: number;\n\n  constructor(\n    status: number,\n    publicMessage: string,\n    options?: { cause?: unknown; code?: string; internalMessage?: string },\n  ) {\n    super(options?.internalMessage ?? publicMessage, { cause: options?.cause });\n    this.name = \"AthenaAuthRuntimeError\";\n    this.status = status;\n    this.publicMessage = publicMessage;\n    this.code = options?.code;\n  }\n\n  static badRequest(message: string): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(400, message);\n  }\n\n  static invalidCredentials(): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(401, \"Invalid credentials\");\n  }\n\n  static unauthenticated(): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(401, \"Authentication required\");\n  }\n\n  static sessionNotFound(): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(401, \"Session not found or expired\");\n  }\n\n  static forbidden(\n    message = \"Insufficient permissions\",\n  ): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(403, message);\n  }\n\n  static notFound(message = \"Not found\"): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(404, message);\n  }\n\n  static conflict(message: string): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(409, message);\n  }\n\n  static rateLimited(): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(429, \"Too many requests\");\n  }\n\n  static notImplemented(message: string): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(501, message);\n  }\n\n  static payloadTooLarge(): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(413, \"Request body too large\");\n  }\n\n  static internal(cause?: unknown): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(500, \"Internal server error\", {\n      cause,\n      code: \"ATHENA_AUTH_INTERNAL\",\n      internalMessage:\n        cause instanceof Error ? cause.message : \"Internal server error\",\n    });\n  }\n}\n\nexport function createTraceId(): string {\n  return crypto.randomUUID();\n}\n\nexport function errorBody(\n  error: AthenaAuthRuntimeError,\n  traceId: string,\n  version = PACKAGE_VERSION,\n): AthenaAuthErrorBody {\n  const body: AthenaAuthErrorBody = {\n    message:\n      error.status >= 500 ? \"Internal server error\" : error.publicMessage,\n    traceId,\n    version,\n  };\n  if (error.code) {\n    body.code = error.code;\n  }\n  return body;\n}\n\nexport function jsonResponse(\n  status: number,\n  body: unknown,\n  headers?: HeadersInit,\n  traceId?: string,\n): Response {\n  const responseHeaders = new Headers(headers);\n  responseHeaders.set(\"content-type\", \"application/json; charset=utf-8\");\n  if (traceId) {\n    responseHeaders.set(ATHENA_AUTH_TRACE_ID_HEADER, traceId);\n    responseHeaders.set(ATHENA_AUTH_REQUEST_ID_HEADER, traceId);\n  }\n  const serializeStarted = performance.now();\n  const bodyText = JSON.stringify(body);\n  currentAuthRequestTiming()?.addSpan(\n    \"serialize\",\n    performance.now() - serializeStarted,\n  );\n  return new Response(bodyText, {\n    headers: responseHeaders,\n    status,\n  });\n}\n\nexport function errorResponse(\n  error: unknown,\n  traceId: string,\n  version = PACKAGE_VERSION,\n): Response {\n  const runtimeError =\n    error instanceof AthenaAuthRuntimeError\n      ? error\n      : AthenaAuthRuntimeError.internal(error);\n  if (runtimeError.status >= 500) {\n    console.error(\"[athena-auth]\", {\n      code: runtimeError.code ?? \"ATHENA_AUTH_INTERNAL\",\n      status: runtimeError.status,\n      traceId,\n      error: runtimeError.message,\n    });\n  }\n  return jsonResponse(\n    runtimeError.status,\n    errorBody(runtimeError, traceId, version),\n    undefined,\n    traceId,\n  );\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport type AuthTimingSpan =\n  | \"parse\"\n  | \"session_lookup\"\n  | \"session_refresh\"\n  | \"user_lookup\"\n  | \"authz\"\n  | \"org_lookup\"\n  | \"grants\"\n  | \"avatar\"\n  | \"users_batch\"\n  | \"serialize\";\n\nexport interface AuthRequestTimingSnapshot {\n  authzMs: number;\n  avatarMs: number;\n  grantsMs: number;\n  orgLookupMs: number;\n  parseMs: number;\n  serializeMs: number;\n  sessionLookupMs: number;\n  sessionRefreshMs: number;\n  sqlAcquireMs: number;\n  sqlCount: number;\n  sqlExecMs: number;\n  sqlPoolIdle: number;\n  sqlPoolTotal: number;\n  sqlPoolWaiting: number;\n  userLookupMs: number;\n  usersBatchMs: number;\n}\n\nconst SPAN_KEYS: Record<AuthTimingSpan, keyof AuthRequestTimingSnapshot> = {\n  authz: \"authzMs\",\n  avatar: \"avatarMs\",\n  grants: \"grantsMs\",\n  org_lookup: \"orgLookupMs\",\n  parse: \"parseMs\",\n  serialize: \"serializeMs\",\n  session_lookup: \"sessionLookupMs\",\n  session_refresh: \"sessionRefreshMs\",\n  user_lookup: \"userLookupMs\",\n  users_batch: \"usersBatchMs\",\n};\n\nexport class AuthRequestTiming {\n  private requestTraceId: string | null = null;\n\n  private readonly snapshot: AuthRequestTimingSnapshot = {\n    authzMs: 0,\n    avatarMs: 0,\n    grantsMs: 0,\n    orgLookupMs: 0,\n    parseMs: 0,\n    serializeMs: 0,\n    sessionLookupMs: 0,\n    sessionRefreshMs: 0,\n    sqlAcquireMs: 0,\n    sqlCount: 0,\n    sqlExecMs: 0,\n    sqlPoolIdle: 0,\n    sqlPoolTotal: 0,\n    sqlPoolWaiting: 0,\n    userLookupMs: 0,\n    usersBatchMs: 0,\n  };\n\n  setTraceId(traceId: string): void {\n    const trimmed = traceId.trim();\n    this.requestTraceId = trimmed.length > 0 ? trimmed : null;\n  }\n\n  traceId(): string | null {\n    return this.requestTraceId;\n  }\n\n  addSpan(span: AuthTimingSpan, durationMs: number): void {\n    const key = SPAN_KEYS[span];\n    this.snapshot[key] += Math.max(0, durationMs);\n  }\n\n  addSqlAcquire(durationMs: number): void {\n    this.snapshot.sqlAcquireMs += Math.max(0, durationMs);\n  }\n\n  addSqlExec(durationMs: number): void {\n    this.snapshot.sqlExecMs += Math.max(0, durationMs);\n  }\n\n  addSqlCount(count = 1): void {\n    this.snapshot.sqlCount += count;\n  }\n\n  setSqlPool(stats: {\n    idleCount: number;\n    totalCount: number;\n    waitingCount: number;\n  }): void {\n    this.snapshot.sqlPoolIdle = stats.idleCount;\n    this.snapshot.sqlPoolTotal = stats.totalCount;\n    this.snapshot.sqlPoolWaiting = stats.waitingCount;\n  }\n\n  copy(): AuthRequestTimingSnapshot {\n    return { ...this.snapshot };\n  }\n\n  toServerTimingHeader(totalMs: number): string {\n    const snap = this.snapshot;\n    const parts = [\n      `parse;dur=${Math.round(snap.parseMs)}`,\n      `session_lookup;dur=${Math.round(snap.sessionLookupMs)}`,\n      `authz;dur=${Math.round(snap.authzMs)}`,\n      `org_lookup;dur=${Math.round(snap.orgLookupMs)}`,\n      `sql_acquire;dur=${Math.round(snap.sqlAcquireMs)}`,\n      `sql_exec;dur=${Math.round(snap.sqlExecMs)}`,\n      `sql_pool;desc=\"total=${snap.sqlPoolTotal} idle=${snap.sqlPoolIdle} waiting=${snap.sqlPoolWaiting}\"`,\n      `serialize;dur=${Math.round(snap.serializeMs)}`,\n      `total;dur=${Math.round(totalMs)}`,\n      `sql_count;desc=\"${snap.sqlCount}\"`,\n    ];\n    if (snap.sessionRefreshMs > 0) {\n      parts.push(`session_refresh;dur=${Math.round(snap.sessionRefreshMs)}`);\n    }\n    if (snap.userLookupMs > 0) {\n      parts.push(`user_lookup;dur=${Math.round(snap.userLookupMs)}`);\n    }\n    if (snap.grantsMs > 0) {\n      parts.push(`grants;dur=${Math.round(snap.grantsMs)}`);\n    }\n    if (snap.avatarMs > 0) {\n      parts.push(`avatar;dur=${Math.round(snap.avatarMs)}`);\n    }\n    if (snap.usersBatchMs > 0) {\n      parts.push(`users_batch;dur=${Math.round(snap.usersBatchMs)}`);\n    }\n    return parts.join(\", \");\n  }\n}\n\nconst storage = new AsyncLocalStorage<AuthRequestTiming>();\n\nexport function currentAuthRequestTiming(): AuthRequestTiming | undefined {\n  return storage.getStore();\n}\n\nexport function runWithAuthRequestTiming<T>(\n  fn: () => Promise<T>\n): Promise<T> {\n  return storage.run(new AuthRequestTiming(), fn);\n}\n\nexport async function timeAuthSpan<T>(\n  span: AuthTimingSpan,\n  fn: () => Promise<T>\n): Promise<T> {\n  const started = performance.now();\n  try {\n    return await fn();\n  } finally {\n    currentAuthRequestTiming()?.addSpan(span, performance.now() - started);\n  }\n}\n\nexport async function timeAuthSql<T>(fn: () => Promise<T>): Promise<T> {\n  const started = performance.now();\n  try {\n    return await fn();\n  } finally {\n    const timing = currentAuthRequestTiming();\n    if (timing) {\n      timing.addSqlExec(performance.now() - started);\n      timing.addSqlCount(1);\n    }\n  }\n}\n\nexport function instrumentAuthStoreMethods<T extends object>(stores: T): T {\n  return new Proxy(stores, {\n    get(target, property, receiver) {\n      const value = Reflect.get(target, property, receiver) as unknown;\n      if (typeof value !== \"function\" || property === \"then\") {\n        return value;\n      }\n      return (...args: unknown[]) => {\n        const result = (value as (...inner: unknown[]) => unknown).apply(\n          target,\n          args\n        );\n        if (\n          result !== null &&\n          typeof result === \"object\" &&\n          \"then\" in result &&\n          typeof (result as Promise<unknown>).then === \"function\"\n        ) {\n          return timeAuthSql(() => result as Promise<unknown>);\n        }\n        return result;\n      };\n    },\n  }) as T;\n}\n\nexport const AUTH_TIMING_EXPOSE_HEADERS =\n  \"Server-Timing, X-Athena-Time, x-athena-trace-id, x-request-id\";\n\nexport function attachAuthTimingHeaders(\n  response: Response,\n  totalMs: number\n): Response {\n  const headers = new Headers(response.headers);\n  const timing = currentAuthRequestTiming();\n  headers.set(\n    \"Server-Timing\",\n    (timing ?? new AuthRequestTiming()).toServerTimingHeader(totalMs)\n  );\n  headers.set(\"X-Athena-Time\", `${Math.round(totalMs)}ms`);\n  const exposed = headers.get(\"Access-Control-Expose-Headers\");\n  if (exposed) {\n    if (!exposed.toLowerCase().includes(\"server-timing\")) {\n      headers.set(\n        \"Access-Control-Expose-Headers\",\n        `${exposed}, ${AUTH_TIMING_EXPOSE_HEADERS}`\n      );\n    }\n  } else {\n    headers.set(\"Access-Control-Expose-Headers\", AUTH_TIMING_EXPOSE_HEADERS);\n  }\n  return new Response(response.body, {\n    headers,\n    status: response.status,\n    statusText: response.statusText,\n  });\n}\n","import { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport type { AuthMemberRow, AuthOrganizationRow, AuthSessionRow } from \"./models.ts\";\n\n/**\n * AUTH-ORG-CTX-001: a persisted session MUST NOT reference an organization\n * for which its user lacks membership.\n *\n * AUTH-ORG-CTX-002: any mutation that invalidates membership MUST clear the\n * matching active organization context in the same transaction (all sessions,\n * not a single token).\n */\n\nexport const FOUNDING_OWNER_REMOVE_FORBIDDEN =\n\t\"The founding owner cannot be removed from the organization\";\nexport const FOUNDING_OWNER_ROLE_LOCKED = \"The founding owner role is locked.\";\nexport const FOUNDING_OWNER_LEAVE_FORBIDDEN =\n\t\"The founding owner can't leave the organization.\";\nexport const LAST_MEMBER_LEAVE_FORBIDDEN =\n\t\"The last member can't leave the organization.\";\nexport const LAST_OWNER_LEAVE_FORBIDDEN =\n\t\"The sole owner can't leave the organization.\";\nexport const LAST_OWNER_REMOVE_FORBIDDEN =\n\t\"The sole owner can't be removed from the organization.\";\nexport const LAST_OWNER_ROLE_LOCKED =\n\t\"The sole owner role cannot be changed.\";\nexport const SELF_ELEVATION_FORBIDDEN =\n\t\"Members cannot assign themselves a higher role.\";\nexport const GRANT_HIGHER_ROLE_FORBIDDEN =\n\t\"Cannot assign a role above your own.\";\nexport const GRANT_OWNER_FORBIDDEN =\n\t\"Only organization owners can assign the owner role.\";\n\nfunction membershipRank(role: string): number {\n\tconst key = role.trim().toLowerCase();\n\tif (key === \"owner\" || key === \"organization_owner\") {\n\t\treturn 3;\n\t}\n\tif (key === \"admin\" || key === \"organization_admin\") {\n\t\treturn 2;\n\t}\n\tif (key === \"member\" || key === \"organization_member\") {\n\t\treturn 1;\n\t}\n\tif (key.startsWith(\"custom_\")) {\n\t\treturn 2;\n\t}\n\treturn 0;\n}\n\nexport function assertMemberRoleAssignmentAllowed(input: {\n\tactorCanAssignOwner: boolean;\n\tactorRole: string;\n\tactorUserId: string;\n\tnextRole: string;\n\ttargetRole: string;\n\ttargetUserId: string;\n}): void {\n\tconst nextRank = membershipRank(input.nextRole);\n\tconst actorRank = membershipRank(input.actorRole);\n\tif (\n\t\tinput.actorUserId === input.targetUserId &&\n\t\tnextRank > membershipRank(input.targetRole)\n\t) {\n\t\tthrow AthenaAuthRuntimeError.forbidden(SELF_ELEVATION_FORBIDDEN);\n\t}\n\tif (nextRank > actorRank) {\n\t\tthrow AthenaAuthRuntimeError.forbidden(GRANT_HIGHER_ROLE_FORBIDDEN);\n\t}\n\tif (nextRank >= 3 && !input.actorCanAssignOwner) {\n\t\tthrow AthenaAuthRuntimeError.forbidden(GRANT_OWNER_FORBIDDEN);\n\t}\n}\n\nexport function resolveFoundingOwnerUserId(\n\torganization: Pick<AuthOrganizationRow, \"created_by_user_id\"> | undefined,\n\tmembers: readonly AuthMemberRow[],\n): string | null {\n\tconst stored =\n\t\ttypeof organization?.created_by_user_id === \"string\"\n\t\t\t? organization.created_by_user_id.trim()\n\t\t\t: \"\";\n\tif (stored.length > 0) {\n\t\treturn stored;\n\t}\n\tconst owners = members\n\t\t.filter((member) => member.role === \"owner\")\n\t\t.slice()\n\t\t.sort((left, right) => {\n\t\t\tconst byTime =\n\t\t\t\tnew Date(left.created_at).getTime() - new Date(right.created_at).getTime();\n\t\t\tif (byTime !== 0) {\n\t\t\t\treturn byTime;\n\t\t\t}\n\t\t\treturn left.id.localeCompare(right.id);\n\t\t});\n\treturn owners[0]?.user_id ?? null;\n}\n\nexport function assertFoundingOwnerMutationAllowed(input: {\n\tkind: \"leave\" | \"remove\" | \"role\";\n\tmembers: readonly AuthMemberRow[];\n\tnextRole?: string;\n\torganization: AuthOrganizationRow | undefined;\n\ttargetUserId: string;\n}): void {\n\tif (input.kind === \"role\" && input.nextRole === \"owner\") {\n\t\treturn;\n\t}\n\tconst founderId = resolveFoundingOwnerUserId(\n\t\tinput.organization,\n\t\tinput.members,\n\t);\n\tif (founderId !== input.targetUserId) {\n\t\treturn;\n\t}\n\tif (input.kind === \"leave\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden(FOUNDING_OWNER_LEAVE_FORBIDDEN);\n\t}\n\tif (input.kind === \"role\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden(FOUNDING_OWNER_ROLE_LOCKED);\n\t}\n\tthrow AthenaAuthRuntimeError.forbidden(FOUNDING_OWNER_REMOVE_FORBIDDEN);\n}\n\nexport function assertLastOwnerMutationAllowed(input: {\n\tkind: \"leave\" | \"remove\" | \"role\";\n\tmembers: readonly AuthMemberRow[];\n\tnextRole?: string;\n\ttargetUserId: string;\n}): void {\n\tif (input.members.length <= 1 && input.kind !== \"role\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden(LAST_MEMBER_LEAVE_FORBIDDEN);\n\t}\n\tconst owners = input.members.filter((member) => member.role === \"owner\");\n\tconst target = input.members.find(\n\t\t(member) => member.user_id === input.targetUserId,\n\t);\n\tif (!target || target.role !== \"owner\") {\n\t\treturn;\n\t}\n\tif (owners.length > 1) {\n\t\treturn;\n\t}\n\tif (input.kind === \"role\" && input.nextRole === \"owner\") {\n\t\treturn;\n\t}\n\tif (input.kind === \"leave\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden(LAST_OWNER_LEAVE_FORBIDDEN);\n\t}\n\tif (input.kind === \"role\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden(LAST_OWNER_ROLE_LOCKED);\n\t}\n\tthrow AthenaAuthRuntimeError.forbidden(LAST_OWNER_REMOVE_FORBIDDEN);\n}\n\nexport async function normalizeSessionActiveOrganization(\n\tsession: AuthSessionRow,\n\tstores: {\n\t\tgetMember(\n\t\t\torganizationId: string,\n\t\t\tuserId: string,\n\t\t): Promise<AuthMemberRow | undefined>;\n\t\tsetSessionActiveOrganization(\n\t\t\ttoken: string,\n\t\t\torganizationId: string | null,\n\t\t): Promise<void>;\n\t},\n): Promise<AuthSessionRow> {\n\tconst organizationId = session.active_organization_id;\n\tif (!organizationId) {\n\t\treturn session;\n\t}\n\tconst membership = await stores.getMember(organizationId, session.user_id);\n\tif (membership) {\n\t\treturn session;\n\t}\n\tawait stores.setSessionActiveOrganization(session.token, null);\n\treturn {\n\t\t...session,\n\t\tactive_organization_id: null,\n\t};\n}\n","export type AthenaRightKeyErrorCode =\n\t| \"RIGHT_KEY_EMPTY\"\n\t| \"RIGHT_KEY_INVALID_CHARACTERS\"\n\t| \"RIGHT_KEY_EMPTY_SEGMENT\"\n\t| \"RIGHT_KEY_MALFORMED_PATTERN\";\n\nexport class AthenaRightKeyError extends Error {\n\treadonly code: AthenaRightKeyErrorCode;\n\treadonly key?: string;\n\n\tconstructor(code: AthenaRightKeyErrorCode, message: string, key?: string) {\n\t\tsuper(message);\n\t\tthis.name = \"AthenaRightKeyError\";\n\t\tthis.code = code;\n\t\tif (key !== undefined) {\n\t\t\tthis.key = key;\n\t\t}\n\t}\n}\n","import {\n\tAthenaRightKeyError,\n\ttype AthenaRightKeyErrorCode,\n} from \"./errors.ts\";\n\ndeclare const athenaRightKeyBrand: unique symbol;\n\n/** Branded Right identity. Runtime value is a normal string. */\nexport type AthenaRightKey = string & {\n\treadonly [athenaRightKeyBrand]: true;\n};\n\nfunction brandAthenaRightKey(canonical: string): AthenaRightKey {\n\treturn canonical as AthenaRightKey;\n}\n\nfunction isAsciiAlphanumeric(ch: string): boolean {\n\tconst code = ch.charCodeAt(0);\n\treturn (\n\t\t(code >= 48 && code <= 57) ||\n\t\t(code >= 65 && code <= 90) ||\n\t\t(code >= 97 && code <= 122)\n\t);\n}\n\nfunction isIdentifierChar(ch: string): boolean {\n\treturn isAsciiAlphanumeric(ch) || ch === \"_\";\n}\n\n/** Unicode White_Space — same set as Rust `char::is_whitespace` / `str::trim`. */\nfunction isRustWhiteSpace(ch: string): boolean {\n\tconst code = ch.codePointAt(0);\n\tif (code === undefined) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(code >= 0x09 && code <= 0x0d) ||\n\t\tcode === 0x20 ||\n\t\tcode === 0x85 ||\n\t\tcode === 0xa0 ||\n\t\tcode === 0x1680 ||\n\t\t(code >= 0x2000 && code <= 0x200a) ||\n\t\tcode === 0x2028 ||\n\t\tcode === 0x2029 ||\n\t\tcode === 0x202f ||\n\t\tcode === 0x205f ||\n\t\tcode === 0x3000\n\t);\n}\n\nfunction trimRustWhiteSpace(raw: string): string {\n\tlet start = 0;\n\tlet end = raw.length;\n\twhile (start < end) {\n\t\tconst head = raw[start];\n\t\tif (head === undefined || !isRustWhiteSpace(head)) {\n\t\t\tbreak;\n\t\t}\n\t\tstart += 1;\n\t}\n\twhile (end > start) {\n\t\tconst tail = raw[end - 1];\n\t\tif (tail === undefined || !isRustWhiteSpace(tail)) {\n\t\t\tbreak;\n\t\t}\n\t\tend -= 1;\n\t}\n\treturn raw.slice(start, end);\n}\n\nfunction throwKeyError(\n\tcode: AthenaRightKeyErrorCode,\n\tmessage: string,\n\tkey?: string,\n): never {\n\tthrow new AthenaRightKeyError(code, message, key);\n}\n\nfunction validateSegment(segment: string, key: string): void {\n\tif (segment.length === 0) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_EMPTY_SEGMENT\",\n\t\t\t`right key \\`${key}\\` has an empty segment`,\n\t\t\tkey,\n\t\t);\n\t}\n\tif (segment === \"*\") {\n\t\treturn;\n\t}\n\tif (segment.startsWith(\"{\") && segment.endsWith(\"}\")) {\n\t\tconst inner = segment.slice(1, -1);\n\t\tif (inner.length === 0 || ![...inner].every(isIdentifierChar)) {\n\t\t\tthrowKeyError(\n\t\t\t\t\"RIGHT_KEY_MALFORMED_PATTERN\",\n\t\t\t\t`right key \\`${key}\\` is a malformed pattern`,\n\t\t\t\tkey,\n\t\t\t);\n\t\t}\n\t\treturn;\n\t}\n\tconst first = segment[0];\n\tif (first === undefined) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_EMPTY_SEGMENT\",\n\t\t\t`right key \\`${key}\\` has an empty segment`,\n\t\t\tkey,\n\t\t);\n\t}\n\tif (!(isAsciiAlphanumeric(first) || first === \"_\")) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_INVALID_CHARACTERS\",\n\t\t\t`right key \\`${key}\\` contains invalid characters`,\n\t\t\tkey,\n\t\t);\n\t}\n\tconst rest = segment.slice(1);\n\tif (\n\t\t![...rest].every(\n\t\t\t(ch) => isAsciiAlphanumeric(ch) || ch === \"_\" || ch === \"-\",\n\t\t)\n\t) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_INVALID_CHARACTERS\",\n\t\t\t`right key \\`${key}\\` contains invalid characters`,\n\t\t\tkey,\n\t\t);\n\t}\n}\n\n/**\n * Parse and canonicalize a right key. Trims edges; rejects interior whitespace.\n * Exact parity with `crates/athena-rights/src/key.rs`.\n */\nexport function parseAthenaRightKey(raw: string): AthenaRightKey {\n\tconst trimmed = trimRustWhiteSpace(raw);\n\tif (trimmed.length === 0) {\n\t\tthrowKeyError(\"RIGHT_KEY_EMPTY\", \"right key must not be empty\");\n\t}\n\tif ([...trimmed].some(isRustWhiteSpace)) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_INVALID_CHARACTERS\",\n\t\t\t`right key \\`${trimmed}\\` contains invalid characters`,\n\t\t\ttrimmed,\n\t\t);\n\t}\n\tif (\n\t\ttrimmed.startsWith(\".\") ||\n\t\ttrimmed.endsWith(\".\") ||\n\t\ttrimmed.includes(\"..\")\n\t) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_EMPTY_SEGMENT\",\n\t\t\t`right key \\`${trimmed}\\` has an empty segment`,\n\t\t\ttrimmed,\n\t\t);\n\t}\n\tfor (const segment of trimmed.split(\".\")) {\n\t\tvalidateSegment(segment, trimmed);\n\t}\n\treturn brandAthenaRightKey(trimmed);\n}\n\nexport function tryParseAthenaRightKey(raw: string): AthenaRightKey | undefined {\n\ttry {\n\t\treturn parseAthenaRightKey(raw);\n\t} catch (error) {\n\t\tif (error instanceof AthenaRightKeyError) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport function athenaRightKeyString(key: AthenaRightKey): string {\n\treturn key;\n}\n","import type { AthenaRightKey } from \"./key.ts\";\n\nfunction splitOnce(value: string): [string, string] | undefined {\n\tconst index = value.indexOf(\".\");\n\tif (index < 0) {\n\t\treturn undefined;\n\t}\n\treturn [value.slice(0, index), value.slice(index + 1)];\n}\n\n/**\n * Exact parity with `crates/athena-rights/src/matching.rs` `right_matches`.\n * Adapters must parse before calling; unparsed strings are not accepted.\n */\nexport function rightMatches(\n\tgranted: AthenaRightKey,\n\trequired: AthenaRightKey,\n): boolean {\n\tif (granted === \"*\" || granted === required) {\n\t\treturn true;\n\t}\n\n\tconst grantedParts = splitOnce(granted);\n\tif (grantedParts === undefined) {\n\t\treturn false;\n\t}\n\tconst requiredParts = splitOnce(required);\n\tif (requiredParts === undefined) {\n\t\treturn false;\n\t}\n\n\tconst [grantedResource, grantedAction] = grantedParts;\n\tconst [requiredResource, requiredAction] = requiredParts;\n\n\tif (grantedResource === \"*\" && grantedAction === requiredAction) {\n\t\treturn true;\n\t}\n\tif (grantedResource === requiredResource && grantedAction === \"*\") {\n\t\treturn true;\n\t}\n\tif (grantedResource === \"gateway\" && grantedAction === requiredAction) {\n\t\treturn true;\n\t}\n\tif (grantedResource === \"gateway\" && grantedAction === \"*\") {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function missingRequiredRights(\n\tgranted: readonly AthenaRightKey[],\n\trequired: readonly AthenaRightKey[],\n): AthenaRightKey[] {\n\treturn required.filter(\n\t\t(requiredKey) =>\n\t\t\t!granted.some((grantedKey) => rightMatches(grantedKey, requiredKey)),\n\t);\n}\n","import { type AthenaRightKey, parseAthenaRightKey } from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { AthenaBillingAuthorizationError } from \"../errors.ts\";\nimport type {\n\tBillingOperation,\n\tBillingOperationCapability,\n} from \"./capabilities.ts\";\nimport type { BillingInvocationAuthority } from \"./invocation-authority.ts\";\nimport {\n\tisProcessBillingInvocation,\n\tSESSION_BILLING_INVOCATION,\n} from \"./invocation-authority.ts\";\n\nconst CATALOG_READ = parseAthenaRightKey(\"billing.catalog.read\");\nconst PAYMENTS_READ = parseAthenaRightKey(\"billing.payments.read\");\nconst PAYMENTS_WRITE = parseAthenaRightKey(\"billing.payments.write\");\nconst CUSTOMERS_READ = parseAthenaRightKey(\"billing.customers.read\");\nconst CUSTOMERS_WRITE = parseAthenaRightKey(\"billing.customers.write\");\nconst REFUNDS_READ = parseAthenaRightKey(\"billing.refunds.read\");\nconst REFUNDS_WRITE = parseAthenaRightKey(\"billing.refunds.write\");\nconst SUBSCRIPTIONS_READ = parseAthenaRightKey(\"billing.subscriptions.read\");\nconst SUBSCRIPTIONS_WRITE = parseAthenaRightKey(\"billing.subscriptions.write\");\nconst PAYMENT_LINKS_READ = parseAthenaRightKey(\"billing.payment-links.read\");\nconst PAYMENT_LINKS_WRITE = parseAthenaRightKey(\"billing.payment-links.write\");\nconst SALES_INVOICES_READ = parseAthenaRightKey(\"billing.sales-invoices.read\");\nconst WEBHOOKS_READ = parseAthenaRightKey(\"billing.webhooks.read\");\nconst WEBHOOKS_WRITE = parseAthenaRightKey(\"billing.webhooks.write\");\nconst SELF_INVOICES_READ = parseAthenaRightKey(\"billing.self.invoices.read\");\nconst SELF_PAYMENTS_READ = parseAthenaRightKey(\"billing.self.payments.read\");\nconst SELF_SUBSCRIPTION_READ = parseAthenaRightKey(\n\t\"billing.self.subscription.read\",\n);\nconst SELF_SUBSCRIPTION_WRITE = parseAthenaRightKey(\n\t\"billing.self.subscription.write\",\n);\nconst SELF_CHECKOUT_WRITE = parseAthenaRightKey(\"billing.self.checkout.write\");\nconst ADMIN_RECONCILIATION_WRITE = parseAthenaRightKey(\n\t\"billing.admin.reconciliation.write\",\n);\nconst ADMIN_WEBHOOKS_READ = parseAthenaRightKey(\"billing.admin.webhooks.read\");\nconst ADMIN_WEBHOOKS_WRITE = parseAthenaRightKey(\"billing.admin.webhooks.write\");\nconst ADMIN_INGESTION_READ = parseAthenaRightKey(\"billing.admin.ingestion.read\");\nconst ADMIN_CONFLICTS_WRITE = parseAthenaRightKey(\n\t\"billing.admin.conflicts.write\",\n);\n\n/** Process-owned overlay Rights — dialect execute keys, not grant-catalog. */\nexport const BILLING_DIALECT_RIGHTS: readonly AthenaRightKey[] = Object.freeze([\n\tCATALOG_READ,\n\tPAYMENTS_READ,\n\tPAYMENTS_WRITE,\n\tCUSTOMERS_READ,\n\tCUSTOMERS_WRITE,\n\tREFUNDS_READ,\n\tREFUNDS_WRITE,\n\tSUBSCRIPTIONS_READ,\n\tSUBSCRIPTIONS_WRITE,\n\tPAYMENT_LINKS_READ,\n\tPAYMENT_LINKS_WRITE,\n\tSALES_INVOICES_READ,\n\tWEBHOOKS_READ,\n\tWEBHOOKS_WRITE,\n\tSELF_INVOICES_READ,\n\tSELF_PAYMENTS_READ,\n\tSELF_SUBSCRIPTION_READ,\n\tSELF_SUBSCRIPTION_WRITE,\n\tSELF_CHECKOUT_WRITE,\n\tADMIN_RECONCILIATION_WRITE,\n\tADMIN_WEBHOOKS_READ,\n\tADMIN_WEBHOOKS_WRITE,\n\tADMIN_INGESTION_READ,\n\tADMIN_CONFLICTS_WRITE,\n]);\n\n/** In-process dialect Rights bag. Not an HTTP identity and not detected by userId. */\nexport const PROCESS_OWNED_BILLING_PRINCIPAL: AthenaPrincipal = {\n\tauthenticated: true,\n\tgrants: [],\n\trights: BILLING_DIALECT_RIGHTS,\n\tuserId: \"athena.billing.process\",\n};\n\n/**\n * Catalog reads do not require a provider-subject binding. Everything else\n * is operator-only until an Athena billing subject is bound.\n */\nconst BILLING_UNBOUND_SESSION_OPERATIONS = new Set<BillingOperation>([\n\t\"prices.list\",\n\t\"products.list\",\n\t\"self.invoices.list\",\n\t\"self.invoices.get\",\n\t\"self.payments.list\",\n\t\"self.payments.get\",\n\t\"self.subscription.get\",\n\t\"self.subscription.cancel\",\n\t\"self.subscription.enroll\",\n\t\"self.checkout.create\",\n\t\"self.checkout.resume\",\n]);\n\nexport function isProcessOwnedBillingPrincipal(\n\tprincipal: AthenaPrincipal,\n): boolean {\n\treturn principal === PROCESS_OWNED_BILLING_PRINCIPAL;\n}\n\nexport const BILLING_OPERATION_RIGHTS: Record<\n\tBillingOperation,\n\treadonly AthenaRightKey[]\n> = {\n\t\"customers.create\": [CUSTOMERS_WRITE],\n\t\"customers.delete\": [CUSTOMERS_WRITE],\n\t\"customers.get\": [CUSTOMERS_READ],\n\t\"customers.list\": [CUSTOMERS_READ],\n\t\"customers.update\": [CUSTOMERS_WRITE],\n\t\"invoices.get\": [SALES_INVOICES_READ],\n\t\"invoices.list\": [SALES_INVOICES_READ],\n\t\"paymentLinks.create\": [PAYMENT_LINKS_WRITE],\n\t\"paymentLinks.delete\": [PAYMENT_LINKS_WRITE],\n\t\"paymentLinks.get\": [PAYMENT_LINKS_READ],\n\t\"paymentLinks.list\": [PAYMENT_LINKS_READ],\n\t\"paymentLinks.update\": [PAYMENT_LINKS_WRITE],\n\t\"payments.cancel\": [PAYMENTS_WRITE],\n\t\"payments.create\": [PAYMENTS_WRITE],\n\t\"payments.get\": [PAYMENTS_READ],\n\t\"payments.list\": [PAYMENTS_READ],\n\t\"refunds.cancel\": [REFUNDS_WRITE],\n\t\"refunds.create\": [REFUNDS_WRITE],\n\t\"refunds.get\": [REFUNDS_READ],\n\t\"refunds.list\": [REFUNDS_READ],\n\t\"subscriptions.cancel\": [SUBSCRIPTIONS_WRITE],\n\t\"subscriptions.create\": [SUBSCRIPTIONS_WRITE],\n\t\"subscriptions.get\": [SUBSCRIPTIONS_READ],\n\t\"subscriptions.list\": [SUBSCRIPTIONS_READ],\n\t\"subscriptions.update\": [SUBSCRIPTIONS_WRITE],\n\t\"webhooks.create\": [WEBHOOKS_WRITE],\n\t\"webhooks.delete\": [WEBHOOKS_WRITE],\n\t\"webhooks.get\": [WEBHOOKS_READ],\n\t\"webhooks.list\": [WEBHOOKS_READ],\n\t\"webhooks.test\": [WEBHOOKS_WRITE],\n\t\"webhooks.update\": [WEBHOOKS_WRITE],\n\t\"products.list\": [CATALOG_READ],\n\t\"prices.list\": [CATALOG_READ],\n\t\"checkout.create\": [PAYMENTS_WRITE],\n\t\"self.invoices.list\": [SELF_INVOICES_READ],\n\t\"self.invoices.get\": [SELF_INVOICES_READ],\n\t\"self.payments.list\": [SELF_PAYMENTS_READ],\n\t\"self.payments.get\": [SELF_PAYMENTS_READ],\n\t\"self.subscription.get\": [SELF_SUBSCRIPTION_READ],\n\t\"self.subscription.cancel\": [SELF_SUBSCRIPTION_WRITE],\n\t\"self.subscription.enroll\": [SELF_SUBSCRIPTION_WRITE],\n\t\"self.checkout.create\": [SELF_CHECKOUT_WRITE],\n\t\"self.checkout.resume\": [SELF_CHECKOUT_WRITE],\n\t\"admin.connections.materialize\": [ADMIN_RECONCILIATION_WRITE],\n\t\"admin.conflicts.resolve\": [ADMIN_CONFLICTS_WRITE],\n\t\"admin.ingestion.health\": [ADMIN_INGESTION_READ],\n\t\"admin.reconciliation.retry\": [ADMIN_RECONCILIATION_WRITE],\n\t\"admin.reconciliation.run\": [ADMIN_RECONCILIATION_WRITE],\n\t\"admin.webhooks.reconcile\": [ADMIN_WEBHOOKS_WRITE],\n\t\"admin.webhooks.status\": [ADMIN_WEBHOOKS_READ],\n\t\"admin.webhooks.verify\": [ADMIN_WEBHOOKS_WRITE],\n};\n\nexport function requiredBillingRights(\n\toperation: BillingOperation,\n): readonly AthenaRightKey[] {\n\treturn BILLING_OPERATION_RIGHTS[operation];\n}\n\n/**\n * Rights gate for local Billing. Grants are never consulted.\n * Returns a deny error, or undefined when the principal holds the Rights.\n */\nexport function authorizeBillingOperation(\n\tprincipal: AthenaPrincipal,\n\toperation: BillingOperation,\n): AthenaBillingAuthorizationError | undefined {\n\tconst required = requiredBillingRights(operation);\n\tconst missing = missingRequiredRights(principal.rights, required);\n\tif (missing.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn new AthenaBillingAuthorizationError({\n\t\tmissing,\n\t\toperation,\n\t});\n}\n\n/**\n * Session principals cannot run merchant-wide Billing. Process invocation\n * authority is the operator path — never a forgeable principal userId.\n */\nexport function authorizeBillingSubjectBinding(\n\tprincipal: AthenaPrincipal,\n\toperation: BillingOperation | string,\n\tauthority: BillingInvocationAuthority = SESSION_BILLING_INVOCATION,\n): AthenaBillingAuthorizationError | undefined {\n\tvoid principal;\n\tif (isProcessBillingInvocation(authority)) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\ttypeof operation === \"string\" &&\n\t\tBILLING_UNBOUND_SESSION_OPERATIONS.has(operation as BillingOperation)\n\t) {\n\t\treturn undefined;\n\t}\n\tif (typeof operation === \"string\" && operation.startsWith(\"self.\")) {\n\t\treturn undefined;\n\t}\n\treturn new AthenaBillingAuthorizationError({\n\t\tmissing: [],\n\t\toperation,\n\t});\n}\n\nexport function denyBillingInvocation(\n\tprincipal: AthenaPrincipal,\n\toperation: BillingOperation,\n\tauthority: BillingInvocationAuthority = SESSION_BILLING_INVOCATION,\n): AthenaBillingAuthorizationError | undefined {\n\tif (isProcessBillingInvocation(authority)) {\n\t\treturn authorizeBillingOperation(principal, operation);\n\t}\n\treturn (\n\t\tauthorizeBillingOperation(principal, operation) ??\n\t\tauthorizeBillingSubjectBinding(principal, operation, authority)\n\t);\n}\n\nexport function callerEffectiveBillingCapability(input: {\n\tauthority?: BillingInvocationAuthority;\n\tcapability: BillingOperationCapability;\n\toperation: BillingOperation;\n\tprincipal: AthenaPrincipal;\n}): BillingOperationCapability {\n\tif (input.capability.available !== true) {\n\t\treturn input.capability;\n\t}\n\tconst authority = input.authority ?? SESSION_BILLING_INVOCATION;\n\tconst denied = denyBillingInvocation(\n\t\tinput.principal,\n\t\tinput.operation,\n\t\tauthority,\n\t);\n\tif (denied == null) {\n\t\treturn input.capability;\n\t}\n\tconst sessionMerchant =\n\t\tauthority.kind === \"session\" &&\n\t\t!BILLING_UNBOUND_SESSION_OPERATIONS.has(input.operation);\n\treturn {\n\t\tavailable: false,\n\t\treason: sessionMerchant ? \"operator_only\" : \"missing_permission\",\n\t};\n}\n","export const PROCESS_INVOCATION_BRAND =\n\t\"athena.billing.invocation.process\" as const;\n\nexport type BillingProcessInvocationAuthority = {\n\treadonly brand: typeof PROCESS_INVOCATION_BRAND;\n\treadonly kind: \"process\";\n};\n\nexport type BillingSessionInvocationAuthority = {\n\treadonly kind: \"session\";\n};\n\nexport type BillingInvocationAuthority =\n\t| BillingProcessInvocationAuthority\n\t| BillingSessionInvocationAuthority;\n\nexport const PROCESS_BILLING_INVOCATION: BillingProcessInvocationAuthority =\n\tObject.freeze({\n\t\tbrand: PROCESS_INVOCATION_BRAND,\n\t\tkind: \"process\",\n\t});\n\nexport const SESSION_BILLING_INVOCATION: BillingSessionInvocationAuthority =\n\tObject.freeze({\n\t\tkind: \"session\",\n\t});\n\nexport function isProcessBillingInvocation(\n\tauthority: BillingInvocationAuthority | { readonly kind?: string } | undefined,\n): authority is BillingProcessInvocationAuthority {\n\treturn (\n\t\tauthority != null &&\n\t\tauthority.kind === \"process\" &&\n\t\t\"brand\" in authority &&\n\t\t(authority as BillingProcessInvocationAuthority).brand ===\n\t\t\tPROCESS_INVOCATION_BRAND\n\t);\n}\n\n/**\n * Process invocation is sealed. `{ kind: \"process\" }` without the brand is\n * ignored. Omitted authority is session (least privilege). Operator Node\n * runtimes must pass `PROCESS_BILLING_INVOCATION` explicitly.\n */\nexport function resolveBillingInvocationAuthority(input: {\n\tauthority?: BillingInvocationAuthority | { readonly kind?: string };\n}): BillingInvocationAuthority {\n\tif (isProcessBillingInvocation(input.authority)) {\n\t\treturn PROCESS_BILLING_INVOCATION;\n\t}\n\treturn SESSION_BILLING_INVOCATION;\n}\n","/**\n * Transport/provider/runtime input to Error Classification.\n *\n * Failure IR deliberately contains occurrence facts only. It cannot carry\n * canonical error numbers, retry policy, or domain meaning.\n */\nexport interface AthenaFailureBase {\n\treadonly cause?: unknown;\n\treadonly code?: string;\n\treadonly details?: unknown;\n\treadonly message?: string;\n\treadonly status?: number;\n}\n\nexport interface AthenaHttpFailureIR extends AthenaFailureBase {\n\treadonly source: \"http\";\n}\n\nexport interface AthenaProviderFailureIR extends AthenaFailureBase {\n\treadonly provider?: string;\n\treadonly providerCode?: string;\n\treadonly source: \"provider\";\n}\n\nexport interface AthenaRuntimeFailureIR extends AthenaFailureBase {\n\treadonly reason?: string;\n\treadonly source: \"runtime\";\n}\n\nexport type AthenaFailureIR =\n\t| AthenaHttpFailureIR\n\t| AthenaProviderFailureIR\n\t| AthenaRuntimeFailureIR;\n\nexport function failureFromUnknown(\n\tsource: AthenaFailureIR[\"source\"],\n\terror: unknown,\n\tinput: Omit<Partial<AthenaFailureIR>, \"source\"> = {},\n): AthenaFailureIR {\n\tconst fromOccurrence = occurrenceFields(error);\n\treturn {\n\t\t...fromOccurrence,\n\t\t...input,\n\t\tcause: input.cause ?? error,\n\t\tmessage: input.message ?? messageFromUnknown(error),\n\t\tsource,\n\t} as AthenaFailureIR;\n}\n\nfunction occurrenceFields(\n\terror: unknown,\n): Omit<Partial<AthenaFailureIR>, \"source\"> {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn {};\n\t}\n\tconst record = error as {\n\t\tcode?: unknown;\n\t\tdetails?: unknown;\n\t\tstatus?: unknown;\n\t};\n\treturn {\n\t\t...(typeof record.code === \"string\" && record.code.length > 0\n\t\t\t? { code: record.code }\n\t\t\t: {}),\n\t\t...(record.details !== undefined ? { details: record.details } : {}),\n\t\t...(typeof record.status === \"number\" ? { status: record.status } : {}),\n\t};\n}\n\nexport function messageFromUnknown(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport function failureRecord(\n\tfailure: AthenaFailureIR,\n): Record<string, unknown> {\n\treturn failure as unknown as Record<string, unknown>;\n}\n","/**\n * PostgreSQL provider facts → Data catalog code (one class per SQLSTATE family).\n * SQLSTATE is never a public code.\n */\nconst SQLSTATE = /^[0-9A-Z]{5}$/;\n\nexport type AthenaDataErrorCode =\n\t| \"data_backend_unavailable\"\n\t| \"data_column_not_found\"\n\t| \"data_conflict\"\n\t| \"data_constraint_violation\"\n\t| \"data_execution_failed\"\n\t| \"data_function_not_found\"\n\t| \"data_invalid_value\"\n\t| \"data_permission_denied\"\n\t| \"data_query_cancelled\"\n\t| \"data_relation_not_found\"\n\t| \"data_schema_not_found\";\n\nexport function dataErrorCodeForProviderFacts(input: {\n\thint?: string;\n\tmessage?: string;\n\tproviderCode?: string;\n\ttransportCode?: string;\n}): AthenaDataErrorCode {\n\tconst sqlState =\n\t\tnormalizeSqlState(input.providerCode) ??\n\t\tnormalizeSqlState(input.hint) ??\n\t\tsqlStateFromNamedHint(input.hint);\n\n\tif (sqlState === \"42P01\") {\n\t\treturn \"data_relation_not_found\";\n\t}\n\tif (sqlState === \"3F000\") {\n\t\treturn \"data_schema_not_found\";\n\t}\n\tif (sqlState === \"42703\") {\n\t\treturn \"data_column_not_found\";\n\t}\n\tif (sqlState === \"42883\") {\n\t\treturn \"data_function_not_found\";\n\t}\n\tif (\n\t\tsqlState === \"23505\" ||\n\t\tsqlState === \"23503\" ||\n\t\tsqlState === \"40001\" ||\n\t\tsqlState === \"40P01\"\n\t) {\n\t\treturn \"data_conflict\";\n\t}\n\tif (\n\t\tsqlState === \"23502\" ||\n\t\tsqlState === \"23514\" ||\n\t\tsqlState?.startsWith(\"22\")\n\t) {\n\t\treturn \"data_invalid_value\";\n\t}\n\tif (sqlState?.startsWith(\"23\")) {\n\t\treturn \"data_constraint_violation\";\n\t}\n\tif (sqlState === \"42501\") {\n\t\treturn \"data_permission_denied\";\n\t}\n\tif (sqlState === \"57014\") {\n\t\treturn \"data_query_cancelled\";\n\t}\n\tif (\n\t\tsqlState?.startsWith(\"08\") ||\n\t\tsqlState === \"53300\" ||\n\t\tsqlState === \"57P03\"\n\t) {\n\t\treturn \"data_backend_unavailable\";\n\t}\n\n\tconst haystack =\n\t\t`${input.message ?? \"\"} ${input.hint ?? \"\"} ${input.transportCode ?? \"\"}`.toLowerCase();\n\tif (\n\t\tinput.hint === \"connection\" ||\n\t\tinput.transportCode === \"NETWORK_ERROR\" ||\n\t\t/(econnrefused|enotfound|econnreset|connection terminated)/.test(haystack)\n\t) {\n\t\treturn \"data_backend_unavailable\";\n\t}\n\n\treturn \"data_execution_failed\";\n}\n\nfunction normalizeSqlState(value: string | undefined): string | undefined {\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim().toUpperCase();\n\treturn SQLSTATE.test(trimmed) ? trimmed : undefined;\n}\n\nfunction sqlStateFromNamedHint(hint: string | undefined): string | undefined {\n\tif (!hint) {\n\t\treturn undefined;\n\t}\n\tif (hint.startsWith(\"unique_violation\")) {\n\t\treturn \"23505\";\n\t}\n\tif (hint.startsWith(\"foreign_key_violation\")) {\n\t\treturn \"23503\";\n\t}\n\tif (hint.startsWith(\"not_null_violation\")) {\n\t\treturn \"23502\";\n\t}\n\tif (hint.startsWith(\"check_violation\")) {\n\t\treturn \"23514\";\n\t}\n\treturn undefined;\n}\n","/* AUTO-GENERATED from contracts/auth/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_AUTH_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"auth\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"auth_bad_request\",\n\t    \"description\": \"The auth request payload or headers are malformed.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_invalid_request\",\n\t    \"description\": \"The auth request is invalid for the target endpoint.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_validation\",\n\t    \"description\": \"Auth input failed validation.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8002,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_invalid_credentials\",\n\t    \"description\": \"The provided credentials are invalid.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8003,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"auth_unauthenticated\",\n\t    \"description\": \"Authentication is required for this operation.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"auth_session_not_found\",\n\t    \"description\": \"The session was not found or has expired.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8005,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"auth_forbidden\",\n\t    \"description\": \"The authenticated principal is forbidden from this operation.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8006,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"auth_insufficient_permissions\",\n\t    \"description\": \"The authenticated principal lacks the required permissions.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8007,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"auth_user_not_found\",\n\t    \"description\": \"The requested user was not found.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8008,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"auth_not_found\",\n\t    \"description\": \"The requested auth resource was not found.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8009,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"auth_conflict\",\n\t    \"description\": \"The auth operation conflicts with existing state.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8010,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"auth_rate_limited\",\n\t    \"description\": \"Too many auth requests; retry later.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8011,\n\t    \"kind\": \"rate_limited\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 429\n\t  },\n\t  {\n\t    \"code\": \"auth_not_implemented\",\n\t    \"description\": \"The requested auth capability is not implemented.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8012,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 501\n\t  },\n\t  {\n\t    \"code\": \"auth_config\",\n\t    \"description\": \"Auth service configuration is invalid or incomplete.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8013,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_database\",\n\t    \"description\": \"Auth persistence failed unexpectedly.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8014,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_internal\",\n\t    \"description\": \"An unexpected auth internal error occurred.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8015,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_invalid_payload\",\n\t    \"description\": \"The avatar image payload is invalid.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8016,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_unsupported_format\",\n\t    \"description\": \"The avatar image must be PNG, JPEG, or WebP.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8017,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_too_large\",\n\t    \"description\": \"The avatar image exceeds the maximum allowed size.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8018,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 413\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_storage_unavailable\",\n\t    \"description\": \"Avatar object storage is not configured.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8019,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_upload_failed\",\n\t    \"description\": \"Avatar upload to object storage failed.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8020,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_url_generation_failed\",\n\t    \"description\": \"Unable to generate an avatar object URL.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8021,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_signing_failed\",\n\t    \"description\": \"Unable to sign an avatar object URL.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8022,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_bridge_exchange_invalid\",\n\t    \"description\": \"The one-time auth bridge code is invalid, expired, already consumed, or bound to a different destination.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8023,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_previous_required\",\n\t    \"description\": \"The Auth audit Event IR requires a previous snapshot and none was captured.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8024,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_result_required\",\n\t    \"description\": \"The Auth audit Event IR requires a result snapshot and none was produced.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8025,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_subject_required\",\n\t    \"description\": \"The Auth audit Event IR could not resolve a subject id and type.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8026,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_subject_type_mismatch\",\n\t    \"description\": \"The resolved audit subject type does not match the catalog subjectType.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8027,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_organization_unresolved\",\n\t    \"description\": \"An org-aware Auth event could not resolve organization_id from the Event IR.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8028,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_invalid_result\",\n\t    \"description\": \"The Auth audit result snapshot failed the resource vs receipt policy.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8029,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_role_protected\",\n\t    \"description\": \"Built-in protected roles cannot be renamed, deleted, or have their rights replaced.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8030,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_role_version_conflict\",\n\t    \"description\": \"The role was modified concurrently; reload and retry with the current version.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8031,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_role_has_assignments\",\n\t    \"description\": \"The role still has assignments; reassign them before deleting.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8032,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_right_unknown\",\n\t    \"description\": \"The requested right is not in the authorization catalog.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8033,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_right_not_assignable\",\n\t    \"description\": \"The requested right is not assignable to roles.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8034,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_right_scope_mismatch\",\n\t    \"description\": \"The right's scope is not allowed on this role.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8035,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_role_not_found\",\n\t    \"description\": \"The authorization role was not found in the current command scope.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8036,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_reassignment_invalid\",\n\t    \"description\": \"The replacement role is missing, out of scope, or not assignable.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8037,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  }\n\t]);\n","import { ATHENA_AUTH_ERROR_DESCRIPTORS } from \"./generated/auth.ts\";\nimport { ATHENA_BILLING_ERROR_DESCRIPTORS } from \"./generated/billing.ts\";\nimport { ATHENA_CHAT_ERROR_DESCRIPTORS } from \"./generated/chat.ts\";\nimport { ATHENA_DATA_ERROR_DESCRIPTORS } from \"./generated/data.ts\";\nimport { ATHENA_GATEWAY_ERROR_DESCRIPTORS } from \"./generated/gateway.ts\";\nimport { ATHENA_INTERNAL_ERROR_DESCRIPTORS } from \"./generated/internal.ts\";\nimport { ATHENA_NOTIFICATIONS_ERROR_DESCRIPTORS } from \"./generated/notifications.ts\";\nimport { ATHENA_POLICY_ERROR_DESCRIPTORS } from \"./generated/policy.ts\";\nimport { ATHENA_STORAGE_ERROR_DESCRIPTORS } from \"./generated/storage.ts\";\nimport { ATHENA_WEBHOOK_ERROR_DESCRIPTORS } from \"./generated/webhook.ts\";\nimport type { AthenaErrorDomain, AthenaErrorIR } from \"./ir.ts\";\n\nconst DESCRIPTORS: ReadonlyMap<string, AthenaErrorIR> = new Map(\n\t[\n\t\t...ATHENA_AUTH_ERROR_DESCRIPTORS,\n\t\t...ATHENA_BILLING_ERROR_DESCRIPTORS,\n\t\t...ATHENA_CHAT_ERROR_DESCRIPTORS,\n\t\t...ATHENA_DATA_ERROR_DESCRIPTORS,\n\t\t...ATHENA_GATEWAY_ERROR_DESCRIPTORS,\n\t\t...ATHENA_INTERNAL_ERROR_DESCRIPTORS,\n\t\t...ATHENA_NOTIFICATIONS_ERROR_DESCRIPTORS,\n\t\t...ATHENA_POLICY_ERROR_DESCRIPTORS,\n\t\t...ATHENA_STORAGE_ERROR_DESCRIPTORS,\n\t\t...ATHENA_WEBHOOK_ERROR_DESCRIPTORS,\n\t].map((descriptor) => [\n\t\t`${descriptor.domain}:${descriptor.code}`,\n\t\tdescriptor,\n\t]),\n);\nconst DESCRIPTOR_LIST = [...DESCRIPTORS.values()];\nconst DESCRIPTORS_BY_CODE: ReadonlyMap<string, AthenaErrorIR> = new Map(\n\tDESCRIPTOR_LIST.map((descriptor) => [descriptor.code, descriptor]),\n);\n\nexport function errorDescriptor(\n\tdomain: AthenaErrorDomain,\n\tcode: string,\n): AthenaErrorIR | undefined {\n\treturn DESCRIPTORS.get(`${domain}:${normalizeCatalogCode(domain, code)}`);\n}\n\nexport function normalizeCatalogCode(\n\tdomain: AthenaErrorDomain,\n\tcode: string,\n): string {\n\tconst normalized = code.trim().toLowerCase();\n\tconst withoutAthenaPrefix = normalized.startsWith(\"athena_\")\n\t\t? normalized.slice(\"athena_\".length)\n\t\t: normalized;\n\tif (domain === \"internal\") {\n\t\treturn withoutAthenaPrefix;\n\t}\n\tconst domainPrefix = `${domain}_`;\n\tif (withoutAthenaPrefix.startsWith(domainPrefix)) {\n\t\treturn withoutAthenaPrefix;\n\t}\n\treturn `${domainPrefix}${withoutAthenaPrefix}`;\n}\n\nexport function storageErrorDescriptor(\n\tcode: string,\n): AthenaErrorIR<string, \"storage\"> | undefined {\n\treturn errorDescriptor(\"storage\", code) as\n\t\t| AthenaErrorIR<string, \"storage\">\n\t\t| undefined;\n}\n\nexport function dataErrorDescriptor(\n\tcode: string,\n): AthenaErrorIR<string, \"data\"> | undefined {\n\treturn errorDescriptor(\"data\", code) as\n\t\t| AthenaErrorIR<string, \"data\">\n\t\t| undefined;\n}\n\nexport function errorDescriptorForPublicCode(\n\tcode: string,\n): AthenaErrorIR | undefined {\n\treturn DESCRIPTORS_BY_CODE.get(code.trim().toLowerCase());\n}\n\nexport function isCatalogErrorCode(code: string): boolean {\n\treturn DESCRIPTORS_BY_CODE.has(code.trim().toLowerCase());\n}\n\nexport function errorDescriptorsForDomain(\n\tdomain: AthenaErrorDomain,\n): readonly AthenaErrorIR[] {\n\treturn DESCRIPTOR_LIST.filter((descriptor) => descriptor.domain === domain);\n}\n","/* AUTO-GENERATED from contracts/chat/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_CHAT_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"chat\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"chat_auth_required\",\n\t    \"description\": \"The chat route requires an authenticated actor.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"chat_forbidden\",\n\t    \"description\": \"The actor is not allowed to perform the requested chat action.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5001,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"chat_not_found\",\n\t    \"description\": \"The requested chat room, member, message, or related resource was not found.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5002,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"chat_conflict\",\n\t    \"description\": \"The requested chat mutation conflicts with the current durable chat state.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5003,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"chat_validation_failed\",\n\t    \"description\": \"The chat request payload failed validation.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"chat_unavailable\",\n\t    \"description\": \"Athena chat is temporarily unavailable.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5005,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"chat_unsupported\",\n\t    \"description\": \"The requested chat operation is not supported by this Athena runtime.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5006,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"chat_internal\",\n\t    \"description\": \"Athena chat failed while processing the request.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5007,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/data/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_DATA_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"data\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"data_relation_not_found\",\n\t    \"description\": \"The requested table or schema does not exist.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10000,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"data_schema_not_found\",\n\t    \"description\": \"The requested database schema does not exist.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10001,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"data_column_not_found\",\n\t    \"description\": \"The requested column does not exist.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10002,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"data_function_not_found\",\n\t    \"description\": \"The requested database function does not exist.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10003,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"data_constraint_violation\",\n\t    \"description\": \"A database constraint rejected the request.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"data_invalid_value\",\n\t    \"description\": \"The request included a value the database rejected.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10005,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"data_conflict\",\n\t    \"description\": \"The request conflicts with existing data.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10006,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"data_permission_denied\",\n\t    \"description\": \"The database refused the operation.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10007,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"data_query_cancelled\",\n\t    \"description\": \"The database cancelled the query before it completed.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10008,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"never\",\n\t    \"status\": 408\n\t  },\n\t  {\n\t    \"code\": \"data_backend_unavailable\",\n\t    \"description\": \"The database backend is unavailable.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10009,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"data_execution_failed\",\n\t    \"description\": \"The data operation failed.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10010,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/gateway/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_GATEWAY_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"gateway\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"gateway_validation_failed\",\n\t    \"description\": \"Legacy generic validation fallback for older gateway paths.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_internal_error\",\n\t    \"description\": \"Legacy generic internal fallback for older gateway paths.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2001,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_service_unavailable\",\n\t    \"description\": \"Legacy generic availability fallback for older gateway paths.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2002,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_client_header\",\n\t    \"description\": \"The request omitted both X-Athena-Client and direct PostgreSQL routing headers.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2003,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_client\",\n\t    \"description\": \"The provided Athena client name does not resolve to a configured client.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_client_inactive\",\n\t    \"description\": \"The resolved Athena client exists but is inactive.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2005,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_client_frozen\",\n\t    \"description\": \"The resolved Athena client exists but is frozen.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2006,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_client_metadata\",\n\t    \"description\": \"Athena client metadata is invalid for the requested operation.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2007,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_client_lookup_failed\",\n\t    \"description\": \"Athena could not resolve the requested client because the lookup backend failed.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2008,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_client_catalog_unavailable\",\n\t    \"description\": \"Athena could not read catalog state needed to resolve the requested client.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2009,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_request_body\",\n\t    \"description\": \"The request body is required for this gateway operation.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2010,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_view_parameter\",\n\t    \"description\": \"The legacy GET /data compatibility route requires the view parameter.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2011,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_eq_column_parameter\",\n\t    \"description\": \"The legacy GET /data compatibility route requires the eq_column parameter.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2012,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_eq_value_parameter\",\n\t    \"description\": \"The legacy GET /data compatibility route requires the eq_value parameter.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2013,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_table_name\",\n\t    \"description\": \"The request did not include a usable table_name selector.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2014,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_resource_id\",\n\t    \"description\": \"The gateway delete request did not include a resource_id.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2015,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_update_payload\",\n\t    \"description\": \"The gateway update request did not include a valid update payload.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2016,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_conditions\",\n\t    \"description\": \"The gateway update request did not include any conditions.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2017,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_organization_header\",\n\t    \"description\": \"Legacy error code retained for API stability. X-Organization-Id is no longer accepted; organization scope comes from Athena Auth context.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2018,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_insert_payload\",\n\t    \"description\": \"The insert request body was missing canonical fields or contained an invalid target selector.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2019,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_delete_payload\",\n\t    \"description\": \"The delete request body failed Athena delete-side validation.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2020,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_fetch_condition\",\n\t    \"description\": \"The fetch request contained an invalid compatibility condition.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2021,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_condition_value\",\n\t    \"description\": \"A request condition value failed Athena validation or coercion.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2022,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_structured_select_request\",\n\t    \"description\": \"The structured select request body does not satisfy Athena's public fetch contract.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2023,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_schema_table_selector\",\n\t    \"description\": \"The combination of schema_name and table_name is invalid or ambiguous.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2024,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_schema_name\",\n\t    \"description\": \"The provided schema_name is not a valid Athena schema selector.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2025,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_post_processing_configuration\",\n\t    \"description\": \"The fetch request asked Athena to apply an invalid post-processing configuration.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2026,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_query_payload\",\n\t    \"description\": \"The /gateway/query JSON body does not match the canonical request shape.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2027,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_malformed_json_payload\",\n\t    \"description\": \"The request body could not be parsed as valid JSON.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2028,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_relation_select_compatibility_query\",\n\t    \"description\": \"The SQL relation-select compatibility query could not be rewritten into a valid Athena fetch plan.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2029,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_empty_query\",\n\t    \"description\": \"The provided SQL query was empty after normalization.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2030,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_unsupported_schema_name\",\n\t    \"description\": \"The requested backend does not support schema_name for this operation.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2031,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_unsupported_fetch_shape\",\n\t    \"description\": \"The request used a fetch shape that Athena cannot execute on the resolved backend.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2032,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_deferred_query_not_supported\",\n\t    \"description\": \"The resolved backend does not support deferred gateway query execution.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2033,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_deferred_queue_unavailable\",\n\t    \"description\": \"Athena could not enqueue the request into the deferred queue.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2034,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_outbound_request_rate_limited\",\n\t    \"description\": \"Athena throttled an outbound backend request before execution completed.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2035,\n\t    \"kind\": \"rate_limited\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_backend_temporarily_unavailable\",\n\t    \"description\": \"The resolved backend is temporarily unavailable and should be retried later.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2036,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_backend_unavailable\",\n\t    \"description\": \"A backend dependency needed by the gateway route is unavailable.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2037,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_route_target\",\n\t    \"description\": \"The configured route target URL is invalid for Athena proxying.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2038,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_route_target_loop_detected\",\n\t    \"description\": \"Athena rejected a proxy loop back into another route target hop.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2039,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_route_target_unavailable\",\n\t    \"description\": \"Athena could not reach the configured upstream route target.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2040,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_route_target_response_unavailable\",\n\t    \"description\": \"Athena reached the route target but could not read the upstream response body.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2041,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_fetch_delegation_failed\",\n\t    \"description\": \"Athena failed while delegating a legacy GET /data request through the fetch path.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2042,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_fetch_response_processing_failed\",\n\t    \"description\": \"Athena failed while post-processing or normalizing fetch results.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2043,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_fetch_data_failed\",\n\t    \"description\": \"Athena failed while building the final gateway fetch response.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2044,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_delete_execution_failed\",\n\t    \"description\": \"Athena failed while executing the gateway delete operation.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2045,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_query_sql_execution_failed\",\n\t    \"description\": \"Athena rejected SQL statement execution for a caller-correctable reason.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2046,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_query_backend_unavailable\",\n\t    \"description\": \"Athena could not execute the query because the resolved backend was unavailable.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2047,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_query_execution_failed\",\n\t    \"description\": \"Athena failed while executing the query after validation succeeded.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2048,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_d1_backend_unavailable\",\n\t    \"description\": \"Athena could not reach the Cloudflare D1 backend.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2049,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_scylla_backend_unavailable\",\n\t    \"description\": \"Athena could not reach the Scylla backend.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2050,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_insert_window_response_channel_dropped\",\n\t    \"description\": \"The insert window worker failed to return a response to the HTTP handler.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2051,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_supabase_client_resolution_failed\",\n\t    \"description\": \"Athena could not resolve a legacy Supabase client for the request.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2052,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_delete_resource_id_column\",\n\t    \"description\": \"The explicit delete resource_id column alias is invalid for the resolved backend.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2053,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/internal/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_INTERNAL_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"internal\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"unique_violation\",\n\t    \"description\": \"A uniqueness constraint rejected the request.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1000,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"foreign_key_violation\",\n\t    \"description\": \"A foreign-key constraint rejected the request.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"not_null_violation\",\n\t    \"description\": \"A required database field was missing.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1002,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"check_constraint_violation\",\n\t    \"description\": \"A database check constraint rejected the request.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1003,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"invalid_text_encoding\",\n\t    \"description\": \"The request included invalid text encoding.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"undefined_column\",\n\t    \"description\": \"The request referenced a column that does not exist.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1005,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"type_operator_mismatch\",\n\t    \"description\": \"The request used incompatible operand types.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1006,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"text_uuid_operator_mismatch\",\n\t    \"description\": \"The request compared text and UUID values without compatible coercion.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1007,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"syntax_error\",\n\t    \"description\": \"The SQL or query shape is invalid.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1008,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"insufficient_privilege\",\n\t    \"description\": \"The caller lacks database privileges.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1009,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"connection_error\",\n\t    \"description\": \"Athena could not reach the database backend.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1010,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"pool_timeout\",\n\t    \"description\": \"Athena timed out waiting for a database connection.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1011,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"pool_closed\",\n\t    \"description\": \"The database connection pool is closed.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1012,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"worker_crashed\",\n\t    \"description\": \"A database worker crashed during execution.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1013,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"io_error\",\n\t    \"description\": \"A database network or I/O failure occurred.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1014,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"tls_error\",\n\t    \"description\": \"A secure database connection could not be established.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1015,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"column_not_found\",\n\t    \"description\": \"Athena could not find a query result column it expected.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1016,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"column_index_out_of_bounds\",\n\t    \"description\": \"Athena attempted to read a query result column beyond the available range.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1017,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"type_not_found\",\n\t    \"description\": \"Athena could not resolve a database type.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1018,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"column_decode_error\",\n\t    \"description\": \"Athena failed to decode a result column.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1019,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"row_not_found\",\n\t    \"description\": \"The requested row does not exist.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1020,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"migration_error\",\n\t    \"description\": \"A database migration operation failed.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1021,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"configuration_error\",\n\t    \"description\": \"Athena database configuration is invalid.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1022,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"database_error\",\n\t    \"description\": \"Athena hit an unclassified database error.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1023,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"data_exception\",\n\t    \"description\": \"The database rejected caller-provided data.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1024,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"query_syntax\",\n\t    \"description\": \"The query is invalid for the database backend.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1025,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"db_error\",\n\t    \"description\": \"The database returned an unclassified server error.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1026,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"postgres_driver_error\",\n\t    \"description\": \"The PostgreSQL driver failed before completion.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1027,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/notifications/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_NOTIFICATIONS_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"notifications\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"notifications_athena_unauthenticated\",\n\t    \"description\": \"A signed-in user is required for this notifications operation.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_topic_unknown\",\n\t    \"description\": \"The notification topic is not in the Athena catalog.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_channel_unknown\",\n\t    \"description\": \"The notification channel is not in the Athena catalog.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9002,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_digest_invalid\",\n\t    \"description\": \"Notification digest must be null, daily, or weekly.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9003,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_scope_invalid\",\n\t    \"description\": \"Notification organization scope is empty or invalid.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_event_not_found\",\n\t    \"description\": \"The notification event was not found.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9005,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_unavailable\",\n\t    \"description\": \"The notifications capability is not available on this client.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9006,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/policy/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_POLICY_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"policy\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"policy_denied\",\n\t    \"description\": \"The policy engine denied the requested operation.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"policy_field_denied\",\n\t    \"description\": \"The policy engine denied access to one or more fields.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"policy_write_conflict\",\n\t    \"description\": \"The write conflicts with policy visibility or check predicates.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7002,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"policy_subject_required\",\n\t    \"description\": \"A trusted policy subject is required for this operation.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7003,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"policy_subject_attribute_missing\",\n\t    \"description\": \"A required trusted subject attribute is missing.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7004,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"policy_resource_unmanaged\",\n\t    \"description\": \"The target resource is not managed by the active policy set.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7005,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"policy_invalid\",\n\t    \"description\": \"The policy definition or IR document is invalid.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7006,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"policy_compilation_failed\",\n\t    \"description\": \"Athena failed to compile the policy set into a runtime artifact.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7007,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"policy_capability_unsupported\",\n\t    \"description\": \"The backend capability profile cannot enforce the required policy predicate.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7008,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"policy_raw_sql_denied\",\n\t    \"description\": \"Raw SQL is denied while policy enforcement is active.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7009,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"policy_rpc_denied\",\n\t    \"description\": \"RPC execution is denied while policy enforcement is active.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7010,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"policy_context_invalid\",\n\t    \"description\": \"The policy evaluation context is invalid.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7011,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"policy_version_mismatch\",\n\t    \"description\": \"The bound policy version does not match the compiled artifact.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7012,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"policy_not_found\",\n\t    \"description\": \"The requested policy was not found.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7013,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"policy_set_not_found\",\n\t    \"description\": \"The requested policy set was not found.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7014,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"policy_evaluation_failed\",\n\t    \"description\": \"Policy evaluation failed unexpectedly.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7015,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"policy_enforcement_failed\",\n\t    \"description\": \"Policy enforcement failed unexpectedly.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7016,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"policy_binding_conflict\",\n\t    \"description\": \"The policy binding conflicts with an existing binding.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7017,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"policy_import_unsupported\",\n\t    \"description\": \"The imported policy construct is unsupported.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7018,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"policy_import_function_unresolved\",\n\t    \"description\": \"An imported policy function could not be resolved.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7019,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"policy_schema_drift\",\n\t    \"description\": \"The live schema drifted from the schema fingerprint used to compile policies.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7020,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/storage/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_STORAGE_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"storage\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"storage_invalid_request\",\n\t    \"description\": \"Caller-correctable storage request validation failure.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"storage_invalid_provider\",\n\t    \"description\": \"Unknown storage provider label rejected without AWS fallback.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"storage_unsupported_provider\",\n\t    \"description\": \"Storage provider is recognized but not implemented.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3002,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"storage_authorization_denied\",\n\t    \"description\": \"Caller is not authorized for the storage operation.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3003,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"storage_connection_not_found\",\n\t    \"description\": \"Storage connection or related resource was not found.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3004,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"storage_file_not_found\",\n\t    \"description\": \"Managed file or permission was not found.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3005,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"storage_conflict\",\n\t    \"description\": \"Storage state conflict or idempotency collision.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3006,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"storage_provider_unavailable\",\n\t    \"description\": \"Upstream object store is unavailable.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3007,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_provider_authentication_failed\",\n\t    \"description\": \"Upstream object store rejected the resolved credentials.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3008,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"storage_persistence_failure\",\n\t    \"description\": \"Storage metadata persistence failed.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3009,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_internal\",\n\t    \"description\": \"Unexpected storage subsystem failure.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3010,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"storage_r2_invalid_access_key_id_format\",\n\t    \"description\": \"Cloudflare R2 direct credentials used an invalid S3 access key ID format for the selected endpoint.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3011,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"storage_upstream_invalid_argument\",\n\t    \"description\": \"The upstream S3-compatible backend rejected the request as caller-correctable.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3012,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"storage_upstream_access_denied\",\n\t    \"description\": \"The upstream S3-compatible backend rejected the request because the provided credentials lack permission.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3013,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"storage_bucket_not_found\",\n\t    \"description\": \"The requested bucket does not exist on the selected storage backend.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3014,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"storage_upstream_unavailable\",\n\t    \"description\": \"Athena could not reach or complete the request against the selected storage backend.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3015,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_list_buckets_failed\",\n\t    \"description\": \"Athena failed while normalizing an upstream bucket-list response.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3016,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"storage_list_objects_failed\",\n\t    \"description\": \"Athena failed while normalizing an upstream object-list response.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3017,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"storage_encryption_key_missing\",\n\t    \"description\": \"Storage encryption key is not configured and auto-generation is disabled (ATHENA_STORAGE_SECRET_ENCRYPTION_KEY_AUTO=false); credential operations are unavailable.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3018,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_encryption_key_invalid\",\n\t    \"description\": \"Storage encryption key configuration is present but unusable.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3019,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_credential_decrypt_failed\",\n\t    \"description\": \"Active s3_credentials.secret_key_encrypted could not be decrypted with the configured encryption key. s3_id refers to s3_catalogs.id.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3020,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_credential_missing\",\n\t    \"description\": \"No active athena.s3_credentials row exists for the requested s3_catalogs.id (API field s3_id).\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3021,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_credential_corrupted\",\n\t    \"description\": \"Active credential ciphertext is missing, empty after decrypt, or structurally invalid.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3022,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_catalog_not_found\",\n\t    \"description\": \"No athena.s3_catalogs row exists for the requested s3_id (catalog id).\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3023,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/webhooks/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_WEBHOOK_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"webhook\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"webhook_not_found\",\n\t    \"description\": \"The requested gateway webhook definition does not exist.\",\n\t    \"domain\": \"webhook\",\n\t    \"errorNumber\": 6000,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"webhook_sink_not_found\",\n\t    \"description\": \"The requested gateway webhook sink definition does not exist.\",\n\t    \"domain\": \"webhook\",\n\t    \"errorNumber\": 6001,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"webhook_sink_provision_failed\",\n\t    \"description\": \"Athena could not persist the requested webhook sink definition set.\",\n\t    \"domain\": \"webhook\",\n\t    \"errorNumber\": 6002,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  }\n\t]);\n","import {\n\ttype AthenaFailureIR,\n\tfailureFromUnknown,\n\tmessageFromUnknown,\n} from \"./failure.ts\";\nimport type { AthenaErrorDomain, AthenaErrorIR } from \"./ir.ts\";\nimport type { AthenaErrorKind } from \"./kinds.ts\";\nimport { dataErrorCodeForProviderFacts } from \"./data.ts\";\nimport {\n\tdataErrorDescriptor,\n\terrorDescriptor,\n\terrorDescriptorsForDomain,\n\tstorageErrorDescriptor,\n} from \"./registry.ts\";\n\nexport interface ClassifyAthenaErrorInput {\n\treadonly domain: AthenaErrorDomain;\n\treadonly failure: AthenaFailureIR | unknown;\n}\n\nexport function classifyAthenaError(\n\tinput: ClassifyAthenaErrorInput,\n): AthenaErrorIR {\n\tconst failure = asFailure(input.failure);\n\tconst explicit = descriptorForFailure(input.domain, failure);\n\tif (explicit) {\n\t\treturn explicit;\n\t}\n\n\tconst descriptor = fallbackDescriptor(input.domain, failure);\n\treturn descriptor;\n}\n\nfunction descriptorForFailure(\n\tdomain: AthenaErrorDomain,\n\tfailure: AthenaFailureIR,\n): AthenaErrorIR | undefined {\n\tif (!failure.code) {\n\t\treturn;\n\t}\n\tconst code = failure.code.toLowerCase();\n\tif (domain === \"storage\" && code === \"storage_unavailable\") {\n\t\treturn storageErrorDescriptor(\"storage_provider_unavailable\");\n\t}\n\treturn errorDescriptor(domain, code);\n}\n\nfunction fallbackDescriptor(\n\tdomain: AthenaErrorDomain,\n\tfailure: AthenaFailureIR,\n): AthenaErrorIR {\n\tif (domain === \"storage\") {\n\t\treturn storageFallbackDescriptor(failure);\n\t}\n\tif (domain === \"data\") {\n\t\treturn dataFallbackDescriptor(failure);\n\t}\n\tif (failure.status === 401 || failure.status === 403) {\n\t\treturn descriptorByKind(domain, \"authorization\");\n\t}\n\tif (failure.status === 404) {\n\t\treturn descriptorByKind(domain, \"not_found\");\n\t}\n\tif (failure.status === 503) {\n\t\treturn descriptorByKind(domain, \"unavailable\");\n\t}\n\tif (failure.status && failure.status >= 400 && failure.status < 500) {\n\t\treturn descriptorByKind(domain, \"validation\");\n\t}\n\treturn descriptorByKind(domain, \"internal\");\n}\n\nfunction storageFallbackDescriptor(\n\tfailure: AthenaFailureIR,\n): AthenaErrorIR<string, \"storage\"> {\n\tconst code = failure.code?.toLowerCase() ?? \"\";\n\tconst providerCode =\n\t\t\"providerCode\" in failure ? (failure.providerCode ?? \"\") : \"\";\n\tconst combined =\n\t\t`${code} ${providerCode} ${failure.message ?? \"\"}`.toLowerCase();\n\tconst status = failure.status;\n\n\tif (\n\t\t(status === 401 || status === 403) &&\n\t\t!isProviderAuthenticationFailure(combined)\n\t) {\n\t\treturn storageErrorDescriptor(\n\t\t\t\"storage_authorization_denied\",\n\t\t) as AthenaErrorIR<string, \"storage\">;\n\t}\n\tif (\n\t\tcombined.includes(\"accessdenied\") ||\n\t\tcombined.includes(\"access denied\") ||\n\t\tcombined.includes(\"forbidden\")\n\t) {\n\t\treturn storageErrorDescriptor(\n\t\t\t\"storage_authorization_denied\",\n\t\t) as AthenaErrorIR<string, \"storage\">;\n\t}\n\tif (\n\t\tstatus === 404 ||\n\t\tcombined.includes(\"nosuchkey\") ||\n\t\tcombined.includes(\"not found\") ||\n\t\tcombined.includes(\"enoent\")\n\t) {\n\t\treturn storageErrorDescriptor(\"storage_file_not_found\") as AthenaErrorIR<\n\t\t\tstring,\n\t\t\t\"storage\"\n\t\t>;\n\t}\n\tif (\n\t\tstatus === 400 ||\n\t\tcombined.includes(\"invalidargument\") ||\n\t\tcombined.includes(\"invalid request\") ||\n\t\tcombined.includes(\"object key\")\n\t) {\n\t\treturn storageErrorDescriptor(\"storage_invalid_request\") as AthenaErrorIR<\n\t\t\tstring,\n\t\t\t\"storage\"\n\t\t>;\n\t}\n\tif (status === 503 || (failure.source === \"http\" && status === undefined)) {\n\t\treturn storageErrorDescriptor(\n\t\t\t\"storage_provider_unavailable\",\n\t\t) as AthenaErrorIR<string, \"storage\">;\n\t}\n\treturn storageErrorDescriptor(\"storage_internal\") as AthenaErrorIR<\n\t\tstring,\n\t\t\"storage\"\n\t>;\n}\n\nfunction dataFallbackDescriptor(\n\tfailure: AthenaFailureIR,\n): AthenaErrorIR<string, \"data\"> {\n\tconst providerCode =\n\t\t\"providerCode\" in failure ? failure.providerCode : undefined;\n\tconst details = failure.details;\n\tconst hint =\n\t\tdetails && typeof details === \"object\" && !Array.isArray(details)\n\t\t\t? (details as { hint?: unknown }).hint\n\t\t\t: undefined;\n\tconst code = dataErrorCodeForProviderFacts({\n\t\thint: typeof hint === \"string\" ? hint : undefined,\n\t\tmessage: failure.message,\n\t\tproviderCode,\n\t\ttransportCode: failure.code,\n\t});\n\tconst descriptor = dataErrorDescriptor(code);\n\tif (!descriptor) {\n\t\tthrow new Error(`No Data Error IR descriptor is registered for ${code}`);\n\t}\n\treturn descriptor;\n}\n\nfunction isProviderAuthenticationFailure(value: string): boolean {\n\treturn (\n\t\tvalue.includes(\"invalid access key\") ||\n\t\tvalue.includes(\"credential\") ||\n\t\tvalue.includes(\"authentication\")\n\t);\n}\n\nfunction descriptorByKind(\n\tdomain: AthenaErrorDomain,\n\tkind: AthenaErrorKind,\n): AthenaErrorIR {\n\tconst descriptor = errorDescriptorsForDomain(domain).find(\n\t\t(candidate) => candidate.kind === kind,\n\t);\n\tif (!descriptor) {\n\t\tthrow new Error(\n\t\t\t`No ${kind} Error IR descriptor is registered for ${domain}`,\n\t\t);\n\t}\n\treturn descriptor;\n}\n\nfunction asFailure(value: AthenaFailureIR | unknown): AthenaFailureIR {\n\tif (isFailure(value)) {\n\t\treturn value;\n\t}\n\treturn failureFromUnknown(\"runtime\", value);\n}\n\nfunction isFailure(value: unknown): value is AthenaFailureIR {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst source = (value as { source?: unknown }).source;\n\treturn source === \"http\" || source === \"provider\" || source === \"runtime\";\n}\n\nexport function errorKind(error: AthenaErrorIR): AthenaErrorKind {\n\treturn error.kind;\n}\n\nexport function errorMessage(failure: AthenaFailureIR | unknown): string {\n\treturn isFailure(failure)\n\t\t? (failure.message ?? \"Athena request failed\")\n\t\t: messageFromUnknown(failure);\n}\n","import type { AthenaErrorIR } from \"./ir.ts\";\n\nexport interface AthenaErrorInstance<\n\tError extends AthenaErrorIR = AthenaErrorIR,\n> {\n\treadonly error: Error;\n\treadonly message: string;\n\treadonly details?: unknown;\n\treadonly cause?: unknown;\n}\n\nexport function createAthenaErrorInstance<Error extends AthenaErrorIR>(\n\terror: Error,\n\tinput: {\n\t\treadonly cause?: unknown;\n\t\treadonly details?: unknown;\n\t\treadonly message?: string;\n\t} = {},\n): AthenaErrorInstance<Error> {\n\treturn Object.freeze({\n\t\tcause: input.cause,\n\t\tdetails: input.details,\n\t\terror,\n\t\tmessage: input.message ?? error.description,\n\t});\n}\n\nexport interface AthenaErrorResult {\n\treadonly error: {\n\t\treadonly code: string;\n\t\treadonly errorNumber: number;\n\t\treadonly message: string;\n\t\treadonly missing?: readonly string[];\n\t\treadonly operation?: string;\n\t};\n\treadonly ok: false;\n\treadonly status: number;\n}\n\nexport function athenaErrorResult(\n\tinstance: AthenaErrorInstance,\n): AthenaErrorResult {\n\tconst envelope = authorizationEnvelopeFromDetails(instance.details);\n\treturn {\n\t\terror: {\n\t\t\tcode: instance.error.code,\n\t\t\terrorNumber: instance.error.errorNumber,\n\t\t\tmessage: instance.message,\n\t\t\t...envelope,\n\t\t},\n\t\tok: false,\n\t\tstatus: instance.error.status,\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\";\n}\n\nfunction authorizationEnvelopeFromDetails(details: unknown): {\n\tmissing?: readonly string[];\n\toperation?: string;\n} {\n\tif (!isRecord(details)) {\n\t\treturn {};\n\t}\n\tconst extra: {\n\t\tmissing?: readonly string[];\n\t\toperation?: string;\n\t} = {};\n\tif (typeof details.operation === \"string\" && details.operation.length > 0) {\n\t\textra.operation = details.operation;\n\t}\n\tif (\n\t\tArray.isArray(details.missing) &&\n\t\tdetails.missing.length > 0 &&\n\t\tdetails.missing.every((entry) => typeof entry === \"string\")\n\t) {\n\t\textra.missing = details.missing;\n\t}\n\treturn extra;\n}\n","import type { AthenaPolicyRegistry } from \"../../policy/registry.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\n\nexport type StorageObjectOp = \"get\" | \"put\" | \"delete\" | \"list\" | \"head\";\n\nexport function isStorageObjectOp(value: unknown): value is StorageObjectOp {\n\treturn (\n\t\tvalue === \"delete\" ||\n\t\tvalue === \"get\" ||\n\t\tvalue === \"head\" ||\n\t\tvalue === \"list\" ||\n\t\tvalue === \"put\"\n\t);\n}\n\nexport interface StorageObjectRequest {\n\tbody?: Uint8Array | string;\n\tcontentType?: string;\n\tcursor?: string;\n\tkey?: string;\n\tlimit?: number;\n\tmetadata?: Record<string, string>;\n\top: StorageObjectOp;\n\tprefix?: string;\n}\n\nexport interface AuthorizedStorageOperation {\n\tbody?: Uint8Array;\n\tcontentType?: string;\n\tcursor?: string;\n\tkey?: string;\n\tlimit?: number;\n\tmetadata?: Record<string, string>;\n\top: StorageObjectOp;\n\tprefix?: string;\n\tprincipal: AthenaPrincipal;\n}\n\nexport interface StorageObjectError {\n\tcode: string;\n\terrorNumber: number;\n\tmessage: string;\n\tmissing?: readonly string[];\n\toperation?: StorageObjectOp;\n}\n\nexport interface StorageObjectResult {\n\tdata?: unknown;\n\terror?: StorageObjectError;\n\tok: boolean;\n\tstatus: number;\n}\n\nexport interface StorageObjectProvider {\n\texecute(op: AuthorizedStorageOperation): Promise<StorageObjectResult>;\n}\n\nexport interface AthenaStorageLifecycleHooks {\n\tafter?(event: { op: StorageObjectOp; result: StorageObjectResult }): void;\n\tbefore?(event: { op: StorageObjectOp; request: StorageObjectRequest }): void;\n}\n\nexport interface CreateStorageRuntimeOptions {\n\tlifecycle?: AthenaStorageLifecycleHooks;\n\tpolicies?: AthenaPolicyRegistry;\n\tprovider: StorageObjectProvider;\n}\n\nexport interface StorageRuntime {\n\texecute(\n\t\trequest: StorageObjectRequest,\n\t\tprincipal: AthenaPrincipal,\n\t): Promise<StorageObjectResult>;\n\treadonly provider: StorageObjectProvider;\n}\n\nexport const ATHENA_STORAGE_PROVIDER = Symbol.for(\n\t\"@xylex-group/athena.storage.provider\",\n);\n\nexport const ATHENA_STORAGE_RUNTIME = Symbol.for(\n\t\"@xylex-group/athena.storage.runtime\",\n);\n\nexport type StorageProviderHandle = StorageObjectProvider;\n","import {\n\ttype AthenaFailureIR,\n\tathenaErrorResult,\n\tclassifyAthenaError,\n\tcreateAthenaErrorInstance,\n\tfailureFromUnknown,\n\tmessageFromUnknown,\n} from \"../../runtime/error/index.ts\";\nimport {\n\tisStorageObjectOp,\n\ttype StorageObjectOp,\n\ttype StorageObjectResult,\n} from \"./types.ts\";\n\nexport class AthenaStorageError extends Error {\n\treadonly code: string;\n\treadonly details?: unknown;\n\treadonly errorNumber: number;\n\treadonly status: number;\n\n\tconstructor(input: {\n\t\tcode: string;\n\t\tdetails?: unknown;\n\t\terrorNumber: number;\n\t\tmessage: string;\n\t\tstatus: number;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaStorageError\";\n\t\tthis.code = input.code;\n\t\tthis.errorNumber = input.errorNumber;\n\t\tthis.status = input.status;\n\t\tthis.details = input.details;\n\t}\n}\n\nexport class AthenaStorageAuthorizationError extends AthenaStorageError {\n\treadonly missing: readonly string[];\n\treadonly operation: StorageObjectOp;\n\n\tconstructor(input: {\n\t\tmissing: readonly string[];\n\t\toperation: StorageObjectOp;\n\t}) {\n\t\tsuper({\n\t\t\tcode: \"storage_authorization_denied\",\n\t\t\tdetails: {\n\t\t\t\tmissing: input.missing,\n\t\t\t\toperation: input.operation,\n\t\t\t},\n\t\t\terrorNumber: 3003,\n\t\t\tmessage:\n\t\t\t\tinput.missing.length === 0\n\t\t\t\t\t? `Storage operation ${input.operation} denied`\n\t\t\t\t\t: `Storage operation ${input.operation} denied (missing ${input.missing.join(\", \")})`,\n\t\t\tstatus: 403,\n\t\t});\n\t\tthis.name = \"AthenaStorageAuthorizationError\";\n\t\tthis.missing = input.missing;\n\t\tthis.operation = input.operation;\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\";\n}\n\nexport function isAthenaStorageAuthorizationError(\n\terror: unknown,\n): error is AthenaStorageAuthorizationError {\n\tif (error instanceof AthenaStorageAuthorizationError) {\n\t\treturn true;\n\t}\n\tif (!isRecord(error)) {\n\t\treturn false;\n\t}\n\treturn (\n\t\terror.code === \"storage_authorization_denied\" &&\n\t\tArray.isArray(error.missing) &&\n\t\tisStorageObjectOp(error.operation)\n\t);\n}\n\nexport function storageErrorResult(\n\tfailure: AthenaFailureIR | unknown,\n): StorageObjectResult;\n/**\n * Compatibility overload for existing provider tests and internal adapters.\n * New call sites must pass a Failure IR (or an unknown occurrence) so the\n * classifier owns canonical identity.\n */\nexport function storageErrorResult(\n\terrorNumber: number,\n\tcode: string,\n\tmessage: string,\n\tstatus: number,\n): StorageObjectResult;\nexport function storageErrorResult(\n\tfailureOrErrorNumber: AthenaFailureIR | unknown | number,\n\tcode?: string,\n\tmessage?: string,\n\tstatus?: number,\n): StorageObjectResult {\n\tconst failure =\n\t\ttypeof failureOrErrorNumber === \"number\"\n\t\t\t? failureFromUnknown(\n\t\t\t\t\"runtime\",\n\t\t\t\tnew Error(message ?? \"storage request failed\"),\n\t\t\t\t{\n\t\t\t\t\tcode,\n\t\t\t\t\tstatus,\n\t\t\t\t},\n\t\t\t)\n\t\t\t: failureOrErrorNumber;\n\tconst error = classifyAthenaError({ domain: \"storage\", failure });\n\tconst instance = createAthenaErrorInstance(error, {\n\t\tdetails: occurrenceDetails(failure),\n\t\tmessage:\n\t\t\ttypeof failureOrErrorNumber === \"number\"\n\t\t\t\t? (message ?? error.description)\n\t\t\t\t: messageFromUnknownFailure(failure),\n\t});\n\tconst result = athenaErrorResult(instance);\n\tconst explicitCode =\n\t\ttypeof code === \"string\" && code.trim() ? code.trim() : undefined;\n\n\t// Pre-Error-Spine wire aliases. Keep them narrow so HTTP principal\n\t// failures still classify with Direct (unknown codes → storage_internal).\n\tif (explicitCode === \"storage_unauthenticated\" && status === 401) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\tcode: \"storage_unauthenticated\",\n\t\t\t\terrorNumber: 3003,\n\t\t\t\tmessage: result.error.message,\n\t\t\t},\n\t\t\tok: false,\n\t\t\tstatus: 401,\n\t\t};\n\t}\n\n\tif (failure instanceof AthenaStorageAuthorizationError) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\tcode: failure.code,\n\t\t\t\terrorNumber: failure.errorNumber,\n\t\t\t\tmessage: failure.message,\n\t\t\t\tmissing: failure.missing,\n\t\t\t\toperation: failure.operation,\n\t\t\t},\n\t\t\tok: false,\n\t\t\tstatus: failure.status,\n\t\t};\n\t}\n\n\tconst resolvedCode =\n\t\tresult.error.code === \"storage_provider_unavailable\"\n\t\t\t? \"storage_unavailable\"\n\t\t\t: result.error.code;\n\tconst operation = isStorageObjectOp(result.error.operation)\n\t\t? result.error.operation\n\t\t: undefined;\n\tconst missing = Array.isArray(result.error.missing)\n\t\t? result.error.missing\n\t\t: undefined;\n\n\treturn {\n\t\terror: {\n\t\t\tcode: resolvedCode,\n\t\t\terrorNumber: result.error.errorNumber,\n\t\t\tmessage: result.error.message,\n\t\t\t...(missing !== undefined ? { missing } : {}),\n\t\t\t...(operation !== undefined ? { operation } : {}),\n\t\t},\n\t\tok: false,\n\t\tstatus: result.status,\n\t};\n}\n\nfunction occurrenceDetails(failure: unknown): unknown {\n\tif (failure instanceof AthenaStorageAuthorizationError) {\n\t\treturn {\n\t\t\tmissing: failure.missing,\n\t\t\toperation: failure.operation,\n\t\t};\n\t}\n\tif (isRecord(failure) && failure.details !== undefined) {\n\t\treturn failure.details;\n\t}\n\treturn undefined;\n}\n\nexport function storageOkResult(\n\tdata: unknown,\n\tstatus = 200,\n): StorageObjectResult {\n\treturn { data, ok: true, status };\n}\n\nexport function mapProviderFailure(error: unknown): StorageObjectResult {\n\treturn storageErrorResult({\n\t\t...providerFailureFields(error),\n\t\tsource: \"provider\",\n\t});\n}\n\nfunction messageFromUnknownFailure(failure: unknown): string {\n\tif (failure && typeof failure === \"object\") {\n\t\tconst message = (failure as { message?: unknown }).message;\n\t\tif (typeof message === \"string\" && message.length > 0) {\n\t\t\treturn message;\n\t\t}\n\t}\n\treturn messageFromUnknown(failure);\n}\n\nfunction providerFailureFields(error: unknown): {\n\tcause: unknown;\n\tmessage: string;\n\tproviderCode?: string;\n\tstatus?: number;\n} {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn { cause: error, message: messageFromUnknown(error) };\n\t}\n\tconst record = error as {\n\t\t$metadata?: { httpStatusCode?: unknown };\n\t\tCode?: unknown;\n\t\tcode?: unknown;\n\t\tmessage?: unknown;\n\t\tname?: unknown;\n\t\tstatus?: unknown;\n\t};\n\tconst providerCode =\n\t\ttypeof record.Code === \"string\"\n\t\t\t? record.Code\n\t\t\t: typeof record.code === \"string\"\n\t\t\t\t? record.code\n\t\t\t\t: typeof record.name === \"string\"\n\t\t\t\t\t? record.name\n\t\t\t\t\t: undefined;\n\tconst status =\n\t\ttypeof record.status === \"number\"\n\t\t\t? record.status\n\t\t\t: typeof record.$metadata?.httpStatusCode === \"number\"\n\t\t\t\t? record.$metadata.httpStatusCode\n\t\t\t\t: undefined;\n\treturn {\n\t\tcause: error,\n\t\tmessage:\n\t\t\ttypeof record.message === \"string\" ? record.message : String(error),\n\t\tproviderCode,\n\t\tstatus,\n\t};\n}\n","import {\n\tathenaRightKeyString,\n\tparseAthenaRightKey,\n\ttype AthenaRightKey,\n} from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport {\n\tAthenaStorageAuthorizationError,\n\tstorageErrorResult,\n} from \"./errors.ts\";\nimport type { StorageObjectOp, StorageObjectResult } from \"./types.ts\";\n\nconst STORAGE_GET = parseAthenaRightKey(\"storage.get\");\nconst STORAGE_HEAD = parseAthenaRightKey(\"storage.head\");\nconst STORAGE_LIST = parseAthenaRightKey(\"storage.list\");\nconst STORAGE_PUT = parseAthenaRightKey(\"storage.put\");\nconst STORAGE_DELETE = parseAthenaRightKey(\"storage.delete\");\n\nconst STORAGE_OPERATION_RIGHTS: Record<StorageObjectOp, AthenaRightKey> = {\n\tdelete: STORAGE_DELETE,\n\tget: STORAGE_GET,\n\thead: STORAGE_HEAD,\n\tlist: STORAGE_LIST,\n\tput: STORAGE_PUT,\n};\n\nexport function requiredStorageRight(op: StorageObjectOp): AthenaRightKey {\n\treturn STORAGE_OPERATION_RIGHTS[op];\n}\n\nexport function listStorageRightKeys(): readonly AthenaRightKey[] {\n\treturn Object.values(STORAGE_OPERATION_RIGHTS);\n}\n\n/**\n * Rights gate for Storage Nucleus. Grants are never consulted.\n * Returns a deny result, or undefined when the principal holds the Right.\n */\nexport function authorizeStorageOperation(\n\tprincipal: AthenaPrincipal,\n\top: StorageObjectOp,\n): StorageObjectResult | undefined {\n\tif (!principal.authenticated) {\n\t\treturn storageErrorResult(\n\t\t\t3003,\n\t\t\t\"storage_unauthenticated\",\n\t\t\t\"authentication is required\",\n\t\t\t401,\n\t\t);\n\t}\n\tconst required = requiredStorageRight(op);\n\tconst missing = missingRequiredRights(principal.rights, [required]);\n\tif (missing.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn storageErrorResult(\n\t\tnew AthenaStorageAuthorizationError({\n\t\t\tmissing: missing.map(athenaRightKeyString),\n\t\t\toperation: op,\n\t\t}),\n\t);\n}\n","import { BILLING_OPERATION_RIGHTS } from \"../../billing/runtime/rights.ts\";\nimport { parseAthenaRightKey, type AthenaRightKey } from \"../../rights/key.ts\";\nimport { listStorageRightKeys } from \"../../storage/runtime/rights.ts\";\nimport type {\n\tAthenaAuthorizationRightDefinition,\n\tAthenaAuthorizationRiskLevel,\n\tAthenaAuthorizationScopeKind,\n} from \"./types.ts\";\n\nexport const AUTHORIZATION_CATALOG_VERSION = 1;\n\nexport function defineAthenaRight(input: {\n\tdescription: string;\n\tdisplayName: string;\n\tdomain: string;\n\tkey: string;\n\trisk?: AthenaAuthorizationRiskLevel;\n\tscope: AthenaAuthorizationScopeKind;\n\tassignable?: boolean;\n}): AthenaAuthorizationRightDefinition {\n\treturn {\n\t\tassignable: input.assignable !== false,\n\t\tdescription: input.description,\n\t\tdisplayName: input.displayName,\n\t\tdomain: input.domain,\n\t\tkey: parseAthenaRightKey(input.key),\n\t\triskLevel: input.risk ?? \"low\",\n\t\tscopeKind: input.scope,\n\t};\n}\n\nconst ORGANIZATION_RIGHTS: readonly AthenaAuthorizationRightDefinition[] = [\n\tdefineAthenaRight({\n\t\tdescription: \"List organization members and invitations\",\n\t\tdisplayName: \"View members\",\n\t\tdomain: \"organization\",\n\t\tkey: \"organization.members.read\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Invite, change role, or remove organization members\",\n\t\tdisplayName: \"Manage members\",\n\t\tdomain: \"organization\",\n\t\tkey: \"organization.members.write\",\n\t\trisk: \"elevated\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Assign the organization owner role\",\n\t\tdisplayName: \"Assign owners\",\n\t\tdomain: \"organization\",\n\t\tkey: \"organization.owners.assign\",\n\t\trisk: \"critical\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Delete the organization\",\n\t\tdisplayName: \"Delete organization\",\n\t\tdomain: \"organization\",\n\t\tkey: \"organization.lifecycle.delete\",\n\t\trisk: \"critical\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Send organization invitations\",\n\t\tdisplayName: \"Invite members\",\n\t\tdomain: \"organization\",\n\t\tkey: \"organization.members.invite\",\n\t\trisk: \"elevated\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"View organization role templates and assignments\",\n\t\tdisplayName: \"View organization roles\",\n\t\tdomain: \"authorization\",\n\t\tkey: \"authorization.roles.read\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Create or clone organization roles\",\n\t\tdisplayName: \"Manage organization roles\",\n\t\tdomain: \"authorization\",\n\t\tkey: \"authorization.roles.write\",\n\t\trisk: \"elevated\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"View platform role templates\",\n\t\tdisplayName: \"View platform roles\",\n\t\tdomain: \"authorization\",\n\t\tkey: \"authorization.platform.read\",\n\t\tscope: \"platform\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Assign platform roles\",\n\t\tdisplayName: \"Manage platform roles\",\n\t\tdomain: \"authorization\",\n\t\tkey: \"authorization.platform.write\",\n\t\trisk: \"critical\",\n\t\tscope: \"platform\",\n\t}),\n];\n\nconst BILLING_RIGHT_META: Record<\n\tstring,\n\tPick<AthenaAuthorizationRightDefinition, \"displayName\" | \"description\" | \"scopeKind\" | \"riskLevel\">\n> = {\n\t\"billing.admin.conflicts.write\": {\n\t\tdescription: \"Resolve billing ingestion conflicts\",\n\t\tdisplayName: \"Resolve billing conflicts\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.admin.ingestion.read\": {\n\t\tdescription: \"View billing ingestion health\",\n\t\tdisplayName: \"View billing ingestion\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.admin.reconciliation.write\": {\n\t\tdescription: \"Run billing reconciliation\",\n\t\tdisplayName: \"Run billing reconciliation\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.admin.webhooks.read\": {\n\t\tdescription: \"View billing webhook status\",\n\t\tdisplayName: \"View billing webhooks\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.admin.webhooks.write\": {\n\t\tdescription: \"Reconcile or verify billing webhooks\",\n\t\tdisplayName: \"Manage billing webhooks\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.catalog.read\": {\n\t\tdescription: \"List Athena-owned products and prices\",\n\t\tdisplayName: \"View catalog\",\n\t\triskLevel: \"low\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.customers.read\": {\n\t\tdescription: \"Read merchant customer records\",\n\t\tdisplayName: \"View customers\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.customers.write\": {\n\t\tdescription: \"Create or update merchant customers\",\n\t\tdisplayName: \"Manage customers\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.payment-links.read\": {\n\t\tdescription: \"View payment links\",\n\t\tdisplayName: \"View payment links\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.payment-links.write\": {\n\t\tdescription: \"Create or update payment links\",\n\t\tdisplayName: \"Manage payment links\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.payments.read\": {\n\t\tdescription: \"List merchant-wide payments\",\n\t\tdisplayName: \"View all payments\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.payments.write\": {\n\t\tdescription: \"Create or cancel merchant payments\",\n\t\tdisplayName: \"Manage payments\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.refunds.read\": {\n\t\tdescription: \"View refunds\",\n\t\tdisplayName: \"View refunds\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.refunds.write\": {\n\t\tdescription: \"Create refunds\",\n\t\tdisplayName: \"Manage refunds\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.sales-invoices.read\": {\n\t\tdescription: \"View sales invoices\",\n\t\tdisplayName: \"View invoices\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.self.checkout.write\": {\n\t\tdescription: \"Start or resume own checkout\",\n\t\tdisplayName: \"Checkout\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.self.invoices.read\": {\n\t\tdescription: \"View own invoices\",\n\t\tdisplayName: \"View own invoices\",\n\t\triskLevel: \"low\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.self.payments.read\": {\n\t\tdescription: \"View payments belonging to the current account\",\n\t\tdisplayName: \"View own payments\",\n\t\triskLevel: \"low\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.self.subscription.read\": {\n\t\tdescription: \"View own subscription\",\n\t\tdisplayName: \"View own subscription\",\n\t\triskLevel: \"low\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.self.subscription.write\": {\n\t\tdescription: \"Enroll or cancel own subscription\",\n\t\tdisplayName: \"Manage own subscription\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.subscriptions.read\": {\n\t\tdescription: \"View merchant subscriptions\",\n\t\tdisplayName: \"View subscriptions\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.subscriptions.write\": {\n\t\tdescription: \"Create or cancel merchant subscriptions\",\n\t\tdisplayName: \"Manage subscriptions\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.webhooks.read\": {\n\t\tdescription: \"View webhook endpoints\",\n\t\tdisplayName: \"View webhooks\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.webhooks.write\": {\n\t\tdescription: \"Create or update webhook endpoints\",\n\t\tdisplayName: \"Manage webhooks\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n};\n\nfunction uniqueBillingRightKeys(): AthenaRightKey[] {\n\tconst keys = new Set<string>();\n\tfor (const required of Object.values(BILLING_OPERATION_RIGHTS)) {\n\t\tfor (const key of required) {\n\t\t\tkeys.add(key);\n\t\t}\n\t}\n\treturn [...keys].sort().map((key) => parseAthenaRightKey(key));\n}\n\nfunction billingDescriptors(): AthenaAuthorizationRightDefinition[] {\n\treturn uniqueBillingRightKeys().map((key) => {\n\t\tconst meta = BILLING_RIGHT_META[key];\n\t\treturn {\n\t\t\tassignable: true,\n\t\t\tdescription: meta?.description ?? `Billing right ${key}`,\n\t\t\tdisplayName: meta?.displayName ?? key,\n\t\t\tdomain: \"billing\",\n\t\t\tkey,\n\t\t\triskLevel: meta?.riskLevel ?? \"elevated\",\n\t\t\tscopeKind: meta?.scopeKind ?? \"platform\",\n\t\t};\n\t});\n}\n\nfunction storageDescriptors(): AthenaAuthorizationRightDefinition[] {\n\treturn listStorageRightKeys().map((key) =>\n\t\tdefineAthenaRight({\n\t\t\tdescription: `Storage ${key}`,\n\t\t\tdisplayName: key === \"storage.get\" ? \"Read files\" : key,\n\t\t\tdomain: \"storage\",\n\t\t\tkey,\n\t\t\tscope: \"self\",\n\t\t}),\n\t);\n}\n\nlet cached: readonly AthenaAuthorizationRightDefinition[] | undefined;\n\nexport function listAthenaAuthorizationRights(): readonly AthenaAuthorizationRightDefinition[] {\n\tcached ??= Object.freeze([\n\t\t...billingDescriptors(),\n\t\t...storageDescriptors(),\n\t\t...ORGANIZATION_RIGHTS,\n\t]);\n\treturn cached;\n}\n\nexport function getAthenaAuthorizationRight(\n\tkey: string,\n): AthenaAuthorizationRightDefinition | undefined {\n\treturn listAthenaAuthorizationRights().find((entry) => entry.key === key);\n}\n\nexport function assertBillingOperationsReferenceCatalog(): void {\n\tconst registered = new Set(\n\t\tlistAthenaAuthorizationRights().map((entry) => entry.key),\n\t);\n\tfor (const [operation, required] of Object.entries(BILLING_OPERATION_RIGHTS)) {\n\t\tfor (const key of required) {\n\t\t\tif (!registered.has(key)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Billing operation ${operation} references unregistered right ${key}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const ORGANIZATION_MEMBERS_READ = parseAthenaRightKey(\n\t\"organization.members.read\",\n);\nexport const ORGANIZATION_MEMBERS_WRITE = parseAthenaRightKey(\n\t\"organization.members.write\",\n);\nexport const ORGANIZATION_OWNERS_ASSIGN = parseAthenaRightKey(\n\t\"organization.owners.assign\",\n);\nexport const ORGANIZATION_LIFECYCLE_DELETE = parseAthenaRightKey(\n\t\"organization.lifecycle.delete\",\n);\nexport const ORGANIZATION_MEMBERS_INVITE = parseAthenaRightKey(\n\t\"organization.members.invite\",\n);\nexport const AUTHORIZATION_ROLES_READ = parseAthenaRightKey(\n\t\"authorization.roles.read\",\n);\nexport const AUTHORIZATION_ROLES_WRITE = parseAthenaRightKey(\n\t\"authorization.roles.write\",\n);\nexport const AUTHORIZATION_PLATFORM_READ = parseAthenaRightKey(\n\t\"authorization.platform.read\",\n);\nexport const AUTHORIZATION_PLATFORM_WRITE = parseAthenaRightKey(\n\t\"authorization.platform.write\",\n);\nexport const BILLING_PAYMENTS_READ = parseAthenaRightKey(\"billing.payments.read\");\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport {\n\tAUTHORIZATION_PLATFORM_WRITE,\n\tAUTHORIZATION_ROLES_WRITE,\n\tORGANIZATION_LIFECYCLE_DELETE,\n\tORGANIZATION_MEMBERS_INVITE,\n\tORGANIZATION_MEMBERS_WRITE,\n} from \"./catalog.ts\";\nimport type { AuthorizationCapabilities } from \"./types.ts\";\n\nexport function capabilitiesFromRights(\n\trights: readonly AthenaRightKey[],\n): AuthorizationCapabilities {\n\tconst holds = (required: AthenaRightKey) =>\n\t\tmissingRequiredRights(rights, [required]).length === 0;\n\tconst canManageMembers = holds(ORGANIZATION_MEMBERS_WRITE);\n\treturn {\n\t\tcanChangeMemberRole: canManageMembers,\n\t\tcanDeleteOrganization: holds(ORGANIZATION_LIFECYCLE_DELETE),\n\t\tcanInviteMembers: canManageMembers || holds(ORGANIZATION_MEMBERS_INVITE),\n\t\tcanManageOrganizationRoles: holds(AUTHORIZATION_ROLES_WRITE),\n\t\tcanManagePlatformRoles: holds(AUTHORIZATION_PLATFORM_WRITE),\n\t\tcanRemoveMember: canManageMembers,\n\t};\n}\n","import { AthenaAuthRuntimeError } from \"../../auth/local/errors.ts\";\nimport type { AthenaAuthorizationRoleScope } from \"./types.ts\";\n\n/**\n * Organization custom roles are tenant-owned. Built-in organization templates\n * (`organization_id` NULL) may be cloned into the actor's organization.\n * Another organization's custom role must never be a clone source.\n */\nexport function assertCloneRoleTenantBoundary(input: {\n\tsourceOrganizationId: string | null;\n\tsourceScopeKind: AthenaAuthorizationRoleScope;\n\ttargetOrganizationId: string | null | undefined;\n}): void {\n\tconst targetOrganizationId = input.targetOrganizationId ?? null;\n\tif (input.sourceScopeKind === \"platform\" && targetOrganizationId) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"Platform roles cannot be cloned into an organization\",\n\t\t);\n\t}\n\tif (input.sourceScopeKind === \"organization\" && !targetOrganizationId) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"Organization roles must be cloned into an organization\",\n\t\t);\n\t}\n\tif (\n\t\tinput.sourceScopeKind === \"organization\" &&\n\t\tinput.sourceOrganizationId !== null &&\n\t\tinput.sourceOrganizationId !== targetOrganizationId\n\t) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n}\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\nimport type {\n\tAthenaAuthorizationRoleDetail,\n\tAthenaAuthorizationRoleRecord,\n\tRoleDescriptor,\n} from \"./types.ts\";\n\nexport function toRoleDescriptor(\n\trole: AthenaAuthorizationRoleRecord,\n\tcounts: { assignmentCount: number; rightCount: number },\n\tdescription?: string,\n): RoleDescriptor {\n\treturn {\n\t\tassignable: role.assignable,\n\t\tassignmentCount: counts.assignmentCount,\n\t\t...(description ? { description } : {}),\n\t\tdisplayName: role.name,\n\t\tid: role.id,\n\t\tkey: role.key,\n\t\torganizationId: role.organizationId,\n\t\tprotected: role.protected,\n\t\trightCount: counts.rightCount,\n\t\tscopeKind: role.scopeKind,\n\t\tsystemKind: role.systemKind,\n\t\tversion: role.version,\n\t};\n}\n\nexport function toRoleDetail(\n\trole: AthenaAuthorizationRoleRecord,\n\trights: readonly AthenaRightKey[],\n\tassignmentCount: number,\n): AthenaAuthorizationRoleDetail {\n\treturn {\n\t\t...role,\n\t\tassignmentCount,\n\t\trightCount: rights.length,\n\t\trights,\n\t};\n}\n","import { AthenaAuthRuntimeError } from \"../../auth/local/errors.ts\";\nimport { tryParseAthenaRightKey } from \"../../rights/key.ts\";\nimport {\n\tgetAthenaAuthorizationRight,\n} from \"./catalog.ts\";\nimport type {\n\tAthenaAuthorizationRoleRecord,\n\tAthenaAuthorizationRoleScope,\n\tAthenaAuthorizationScopeKind,\n} from \"./types.ts\";\n\nexport const AUTHORIZATION_ROLE_PROTECTED = \"AUTHORIZATION_ROLE_PROTECTED\";\nexport const AUTHORIZATION_ROLE_VERSION_CONFLICT =\n\t\"AUTHORIZATION_ROLE_VERSION_CONFLICT\";\nexport const AUTHORIZATION_ROLE_HAS_ASSIGNMENTS =\n\t\"AUTHORIZATION_ROLE_HAS_ASSIGNMENTS\";\nexport const AUTHORIZATION_RIGHT_UNKNOWN = \"AUTHORIZATION_RIGHT_UNKNOWN\";\nexport const AUTHORIZATION_RIGHT_NOT_ASSIGNABLE =\n\t\"AUTHORIZATION_RIGHT_NOT_ASSIGNABLE\";\nexport const AUTHORIZATION_RIGHT_SCOPE_MISMATCH =\n\t\"AUTHORIZATION_RIGHT_SCOPE_MISMATCH\";\nexport const AUTHORIZATION_ROLE_NOT_FOUND = \"AUTHORIZATION_ROLE_NOT_FOUND\";\nexport const AUTHORIZATION_REASSIGNMENT_INVALID =\n\t\"AUTHORIZATION_REASSIGNMENT_INVALID\";\n\nfunction authorizationError(\n\tstatus: number,\n\tcode: string,\n\tmessage: string,\n): AthenaAuthRuntimeError {\n\treturn new AthenaAuthRuntimeError(status, message, { code });\n}\n\nexport function throwRoleProtected(): never {\n\tthrow authorizationError(\n\t\t403,\n\t\tAUTHORIZATION_ROLE_PROTECTED,\n\t\t\"Protected roles cannot be renamed, deleted, or have their rights changed\",\n\t);\n}\n\nexport function throwRoleVersionConflict(): never {\n\tthrow authorizationError(\n\t\t409,\n\t\tAUTHORIZATION_ROLE_VERSION_CONFLICT,\n\t\t\"Role version conflict\",\n\t);\n}\n\nexport function throwRoleHasAssignments(): never {\n\tthrow authorizationError(\n\t\t409,\n\t\tAUTHORIZATION_ROLE_HAS_ASSIGNMENTS,\n\t\t\"Role has assignments\",\n\t);\n}\n\nexport function throwRoleNotFound(): never {\n\tthrow authorizationError(404, AUTHORIZATION_ROLE_NOT_FOUND, \"Role not found\");\n}\n\nexport function throwReassignmentInvalid(message = \"Invalid reassignment role\"): never {\n\tthrow authorizationError(400, AUTHORIZATION_REASSIGNMENT_INVALID, message);\n}\n\nexport function assertProtectedRoleImmutable(\n\trole: Pick<AthenaAuthorizationRoleRecord, \"protected\">,\n): void {\n\tif (role.protected) {\n\t\tthrowRoleProtected();\n\t}\n}\n\nexport function assertExpectedVersion(\n\trole: Pick<AthenaAuthorizationRoleRecord, \"version\">,\n\texpectedVersion: number,\n): void {\n\tif (role.version !== expectedVersion) {\n\t\tthrowRoleVersionConflict();\n\t}\n}\n\nfunction rightAllowedOnRoleScope(\n\troleScope: AthenaAuthorizationRoleScope,\n\trightScope: AthenaAuthorizationScopeKind,\n): boolean {\n\tif (rightScope === \"self\") {\n\t\treturn true;\n\t}\n\tif (roleScope === \"platform\") {\n\t\treturn rightScope === \"platform\";\n\t}\n\treturn rightScope === \"organization\";\n}\n\nexport function assertRoleRightAssignmentAllowed(input: {\n\torganizationId?: string | null;\n\tright: string;\n\troleScope: AthenaAuthorizationRoleScope;\n}): void {\n\tvoid input.organizationId;\n\tconst parsed = tryParseAthenaRightKey(input.right);\n\tif (!parsed) {\n\t\tthrow authorizationError(\n\t\t\t400,\n\t\t\tAUTHORIZATION_RIGHT_UNKNOWN,\n\t\t\t\"Unknown authorization right\",\n\t\t);\n\t}\n\tconst definition = getAthenaAuthorizationRight(parsed);\n\tif (!definition) {\n\t\tthrow authorizationError(\n\t\t\t400,\n\t\t\tAUTHORIZATION_RIGHT_UNKNOWN,\n\t\t\t\"Unknown authorization right\",\n\t\t);\n\t}\n\tif (!definition.assignable) {\n\t\tthrow authorizationError(\n\t\t\t400,\n\t\t\tAUTHORIZATION_RIGHT_NOT_ASSIGNABLE,\n\t\t\t\"Right is not assignable\",\n\t\t);\n\t}\n\tif (!rightAllowedOnRoleScope(input.roleScope, definition.scopeKind)) {\n\t\tthrow authorizationError(\n\t\t\t400,\n\t\t\tAUTHORIZATION_RIGHT_SCOPE_MISMATCH,\n\t\t\t\"Right is not allowed on this role scope\",\n\t\t);\n\t}\n}\n\nexport function assertRightsReplaceAllowed(input: {\n\torganizationId?: string | null;\n\trights: readonly string[];\n\troleScope: AthenaAuthorizationRoleScope;\n}): void {\n\tfor (const right of input.rights) {\n\t\tassertRoleRightAssignmentAllowed({\n\t\t\torganizationId: input.organizationId,\n\t\t\tright,\n\t\t\troleScope: input.roleScope,\n\t\t});\n\t}\n}\n\nexport function requireExpectedVersion(value: unknown): number {\n\tif (typeof value === \"number\" && Number.isInteger(value) && value >= 1) {\n\t\treturn value;\n\t}\n\tif (typeof value === \"string\" && /^\\d+$/.test(value.trim())) {\n\t\tconst parsed = Number(value.trim());\n\t\tif (parsed >= 1) {\n\t\t\treturn parsed;\n\t\t}\n\t}\n\tthrow AthenaAuthRuntimeError.badRequest(\"expectedVersion is required\");\n}\n","import type { AuthorizationCapabilities, RoleDescriptor } from \"./types.ts\";\n\nexport function projectAssignableRoles(input: {\n\tactiveOrganizationId?: string | null;\n\tcapabilities: AuthorizationCapabilities;\n\troles: readonly RoleDescriptor[];\n}): RoleDescriptor[] {\n\tconst organizationId = input.activeOrganizationId?.trim() ?? \"\";\n\tconst { capabilities } = input;\n\treturn input.roles.filter((role) => {\n\t\tif (!role.assignable) {\n\t\t\treturn false;\n\t\t}\n\t\tif (role.scopeKind === \"platform\") {\n\t\t\treturn capabilities.canManagePlatformRoles;\n\t\t}\n\t\tif (organizationId.length === 0) {\n\t\t\treturn false;\n\t\t}\n\t\tif (\n\t\t\trole.organizationId !== null &&\n\t\t\trole.organizationId !== organizationId\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tif (role.organizationId === organizationId) {\n\t\t\treturn (\n\t\t\t\tcapabilities.canManageOrganizationRoles ||\n\t\t\t\tcapabilities.canChangeMemberRole ||\n\t\t\t\tcapabilities.canInviteMembers\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\tcapabilities.canManageOrganizationRoles ||\n\t\t\tcapabilities.canChangeMemberRole ||\n\t\t\tcapabilities.canInviteMembers\n\t\t);\n\t});\n}\n","import { parseAthenaRightKey, type AthenaRightKey } from \"../../rights/key.ts\";\nimport {\n\tAUTHORIZATION_PLATFORM_READ,\n\tAUTHORIZATION_PLATFORM_WRITE,\n\tAUTHORIZATION_ROLES_READ,\n\tAUTHORIZATION_ROLES_WRITE,\n\tORGANIZATION_MEMBERS_INVITE,\n\tORGANIZATION_MEMBERS_READ,\n\tORGANIZATION_MEMBERS_WRITE,\n\tORGANIZATION_OWNERS_ASSIGN,\n\tORGANIZATION_LIFECYCLE_DELETE,\n\tlistAthenaAuthorizationRights,\n} from \"./catalog.ts\";\nimport type { AthenaAuthorizationRoleRecord } from \"./types.ts\";\n\nexport const PLATFORM_ADMIN_ROLE = \"platform_admin\";\nexport const PLATFORM_CUSTOMER_ROLE = \"platform_customer\";\nexport const PLATFORM_UNAUTHORIZED_ROLE = \"platform_unauthorized\";\nexport const ORGANIZATION_OWNER_ROLE = \"organization_owner\";\nexport const ORGANIZATION_ADMIN_ROLE = \"organization_admin\";\nexport const ORGANIZATION_MEMBER_ROLE = \"organization_member\";\n\nexport interface BuiltInAuthorizationRoleTemplate {\n\tassignable: boolean;\n\tdescription: string;\n\tid: string;\n\tkey: string;\n\tname: string;\n\tprotected: boolean;\n\trights: readonly AthenaRightKey[];\n\tscopeKind: \"platform\" | \"organization\";\n\tsystemKind: \"owner\" | \"admin\" | \"member\" | null;\n}\n\nfunction billingKeysMatching(\n\tpredicate: (key: string) => boolean,\n): AthenaRightKey[] {\n\treturn listAthenaAuthorizationRights()\n\t\t.filter((entry) => entry.domain === \"billing\" && predicate(entry.key))\n\t\t.map((entry) => entry.key);\n}\n\nfunction storageKeys(): AthenaRightKey[] {\n\treturn listAthenaAuthorizationRights()\n\t\t.filter((entry) => entry.domain === \"storage\")\n\t\t.map((entry) => entry.key);\n}\n\nconst CUSTOMER_BILLING: readonly AthenaRightKey[] = Object.freeze([\n\tparseAthenaRightKey(\"billing.catalog.read\"),\n\tparseAthenaRightKey(\"billing.self.invoices.read\"),\n\tparseAthenaRightKey(\"billing.self.payments.read\"),\n\tparseAthenaRightKey(\"billing.self.subscription.read\"),\n\tparseAthenaRightKey(\"billing.self.subscription.write\"),\n\tparseAthenaRightKey(\"billing.self.checkout.write\"),\n\tparseAthenaRightKey(\"billing.customers.write\"),\n]);\n\nexport const BUILTIN_AUTHORIZATION_ROLES: readonly BuiltInAuthorizationRoleTemplate[] =\n\tObject.freeze([\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"Platform operator\",\n\t\t\tid: PLATFORM_ADMIN_ROLE,\n\t\t\tkey: PLATFORM_ADMIN_ROLE,\n\t\t\tname: \"Platform administrator\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([\n\t\t\t\t...billingKeysMatching(() => true),\n\t\t\t\t...storageKeys(),\n\t\t\t\tAUTHORIZATION_PLATFORM_READ,\n\t\t\t\tAUTHORIZATION_PLATFORM_WRITE,\n\t\t\t\tAUTHORIZATION_ROLES_READ,\n\t\t\t\tORGANIZATION_MEMBERS_READ,\n\t\t\t]),\n\t\t\tscopeKind: \"platform\",\n\t\t\tsystemKind: \"admin\",\n\t\t},\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"Customer account\",\n\t\t\tid: PLATFORM_CUSTOMER_ROLE,\n\t\t\tkey: PLATFORM_CUSTOMER_ROLE,\n\t\t\tname: \"Customer\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([\n\t\t\t\t...CUSTOMER_BILLING,\n\t\t\t\t...storageKeys().filter((key) => key !== \"storage.put\" && key !== \"storage.delete\"),\n\t\t\t]),\n\t\t\tscopeKind: \"platform\",\n\t\t\tsystemKind: \"member\",\n\t\t},\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"No rights\",\n\t\t\tid: PLATFORM_UNAUTHORIZED_ROLE,\n\t\t\tkey: PLATFORM_UNAUTHORIZED_ROLE,\n\t\t\tname: \"Unauthorized\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([]),\n\t\t\tscopeKind: \"platform\",\n\t\t\tsystemKind: null,\n\t\t},\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"Organization owner\",\n\t\t\tid: ORGANIZATION_OWNER_ROLE,\n\t\t\tkey: ORGANIZATION_OWNER_ROLE,\n\t\t\tname: \"Organization owner\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([\n\t\t\t\tORGANIZATION_MEMBERS_READ,\n\t\t\t\tORGANIZATION_MEMBERS_WRITE,\n\t\t\t\tORGANIZATION_MEMBERS_INVITE,\n\t\t\t\tORGANIZATION_OWNERS_ASSIGN,\n\t\t\t\tORGANIZATION_LIFECYCLE_DELETE,\n\t\t\t\tAUTHORIZATION_ROLES_READ,\n\t\t\t\tAUTHORIZATION_ROLES_WRITE,\n\t\t\t]),\n\t\t\tscopeKind: \"organization\",\n\t\t\tsystemKind: \"owner\",\n\t\t},\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"Organization administrator\",\n\t\t\tid: ORGANIZATION_ADMIN_ROLE,\n\t\t\tkey: ORGANIZATION_ADMIN_ROLE,\n\t\t\tname: \"Organization administrator\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([\n\t\t\t\tORGANIZATION_MEMBERS_READ,\n\t\t\t\tORGANIZATION_MEMBERS_WRITE,\n\t\t\t\tORGANIZATION_MEMBERS_INVITE,\n\t\t\t\tAUTHORIZATION_ROLES_READ,\n\t\t\t]),\n\t\t\tscopeKind: \"organization\",\n\t\t\tsystemKind: \"admin\",\n\t\t},\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"Organization member\",\n\t\t\tid: ORGANIZATION_MEMBER_ROLE,\n\t\t\tkey: ORGANIZATION_MEMBER_ROLE,\n\t\t\tname: \"Organization member\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([ORGANIZATION_MEMBERS_READ]),\n\t\t\tscopeKind: \"organization\",\n\t\t\tsystemKind: \"member\",\n\t\t},\n\t]);\n\nexport function mapLegacyUserRole(role: string | null | undefined): string {\n\tconst trimmed = role?.trim() ?? \"\";\n\tif (trimmed === \"admin\") {\n\t\treturn PLATFORM_ADMIN_ROLE;\n\t}\n\tif (trimmed === \"unauthorized\") {\n\t\treturn PLATFORM_UNAUTHORIZED_ROLE;\n\t}\n\tif (trimmed === \"\" || trimmed === \"customer\") {\n\t\treturn PLATFORM_CUSTOMER_ROLE;\n\t}\n\treturn PLATFORM_UNAUTHORIZED_ROLE;\n}\n\nexport function mapLegacyMemberRole(role: string | null | undefined): string {\n\tconst trimmed = role?.trim().toLowerCase() ?? \"member\";\n\tif (trimmed === \"owner\") {\n\t\treturn ORGANIZATION_OWNER_ROLE;\n\t}\n\tif (trimmed === \"admin\") {\n\t\treturn ORGANIZATION_ADMIN_ROLE;\n\t}\n\tif (trimmed === \"member\") {\n\t\treturn ORGANIZATION_MEMBER_ROLE;\n\t}\n\treturn ORGANIZATION_MEMBER_ROLE;\n}\n\nexport function resolveMemberAssignmentRole(\n\trole: string | null | undefined,\n): string {\n\tconst trimmed = role?.trim() ?? \"member\";\n\tconst lower = trimmed.toLowerCase();\n\tif (lower === \"owner\" || lower === ORGANIZATION_OWNER_ROLE) {\n\t\treturn ORGANIZATION_OWNER_ROLE;\n\t}\n\tif (lower === \"admin\" || lower === ORGANIZATION_ADMIN_ROLE) {\n\t\treturn ORGANIZATION_ADMIN_ROLE;\n\t}\n\tif (lower === \"member\" || lower === ORGANIZATION_MEMBER_ROLE) {\n\t\treturn ORGANIZATION_MEMBER_ROLE;\n\t}\n\treturn trimmed;\n}\n\nexport function persistedMemberRole(\n\trole: Pick<AthenaAuthorizationRoleRecord, \"key\" | \"systemKind\">,\n): string {\n\tif (role.systemKind === \"owner\") {\n\t\treturn \"owner\";\n\t}\n\tif (role.systemKind === \"admin\") {\n\t\treturn \"admin\";\n\t}\n\tif (role.systemKind === \"member\") {\n\t\treturn \"member\";\n\t}\n\treturn role.key;\n}\n\nexport function grantRankRole(\n\trole: Pick<AthenaAuthorizationRoleRecord, \"key\" | \"systemKind\">,\n): string {\n\tif (role.systemKind === \"owner\" || role.key === ORGANIZATION_OWNER_ROLE) {\n\t\treturn \"owner\";\n\t}\n\tif (role.systemKind === \"admin\" || role.key === ORGANIZATION_ADMIN_ROLE) {\n\t\treturn \"admin\";\n\t}\n\tif (role.systemKind === \"member\" || role.key === ORGANIZATION_MEMBER_ROLE) {\n\t\treturn \"member\";\n\t}\n\treturn \"admin\";\n}\n\nexport function builtinRoleRecord(\n\ttemplate: BuiltInAuthorizationRoleTemplate,\n): AthenaAuthorizationRoleRecord {\n\treturn {\n\t\tassignable: template.assignable,\n\t\tid: template.id,\n\t\tkey: template.key,\n\t\tname: template.name,\n\t\torganizationId: null,\n\t\tprotected: template.protected,\n\t\tscopeKind: template.scopeKind,\n\t\tsystemKind: template.systemKind,\n\t\tversion: 1,\n\t};\n}\n\nexport function compatibilityMemberRole(roleKey: string): string {\n\tif (roleKey === ORGANIZATION_OWNER_ROLE) {\n\t\treturn \"owner\";\n\t}\n\tif (roleKey === ORGANIZATION_ADMIN_ROLE) {\n\t\treturn \"admin\";\n\t}\n\treturn \"member\";\n}\n\nexport function compatibilityUserRole(roleKey: string): string | null {\n\tif (roleKey === PLATFORM_ADMIN_ROLE) {\n\t\treturn \"admin\";\n\t}\n\tif (roleKey === PLATFORM_UNAUTHORIZED_ROLE) {\n\t\treturn \"unauthorized\";\n\t}\n\tif (roleKey === PLATFORM_CUSTOMER_ROLE) {\n\t\treturn \"customer\";\n\t}\n\treturn null;\n}\n","import type { AthenaAuthDatabase } from \"../../auth/local/database.ts\";\nimport { AthenaAuthRuntimeError } from \"../../auth/local/errors.ts\";\nimport type { AuthMemberRow } from \"../../auth/local/models.ts\";\nimport {\n\tFOUNDING_OWNER_REMOVE_FORBIDDEN,\n\tFOUNDING_OWNER_ROLE_LOCKED,\n} from \"../../auth/local/organization-invariants.ts\";\nimport { type AthenaRightKey, parseAthenaRightKey } from \"../../rights/key.ts\";\nimport { capabilitiesFromRights } from \"./capabilities.ts\";\nimport {\n\tAUTHORIZATION_CATALOG_VERSION,\n\tlistAthenaAuthorizationRights,\n} from \"./catalog.ts\";\nimport { assertCloneRoleTenantBoundary } from \"./clone-source.ts\";\nimport { toRoleDescriptor, toRoleDetail } from \"./role-descriptor.ts\";\nimport {\n\tassertProtectedRoleImmutable,\n\tassertRightsReplaceAllowed,\n\tthrowReassignmentInvalid,\n\tthrowRoleHasAssignments,\n\tthrowRoleNotFound,\n\tthrowRoleVersionConflict,\n} from \"./role-invariants.ts\";\nimport { projectAssignableRoles } from \"./snapshot-catalog.ts\";\nimport type { AthenaAuthorizationStore } from \"./store.ts\";\nimport {\n\tBUILTIN_AUTHORIZATION_ROLES,\n\tmapLegacyMemberRole,\n\tmapLegacyUserRole,\n\tORGANIZATION_OWNER_ROLE,\n\tresolveMemberAssignmentRole,\n} from \"./templates.ts\";\nimport type {\n\tAssignedRoleSummary,\n\tAthenaAuthorizationRoleDetail,\n\tAthenaAuthorizationRoleRecord,\n\tAuthorizationSnapshot,\n\tMemberAuthorizationActions,\n\tRoleDescriptor,\n} from \"./types.ts\";\n\ninterface RoleRow {\n\tassignable: boolean;\n\tid: string;\n\tkey: string;\n\tname: string;\n\torganization_id: string | null;\n\tprotected: boolean;\n\tscope_kind: \"platform\" | \"organization\";\n\tsystem_kind: \"owner\" | \"admin\" | \"member\" | null;\n\tversion: number;\n}\n\nfunction mapRoleRow(row: RoleRow): AthenaAuthorizationRoleRecord {\n\treturn {\n\t\tassignable: row.assignable,\n\t\tid: row.id,\n\t\tkey: row.key,\n\t\tname: row.name,\n\t\torganizationId: row.organization_id,\n\t\tprotected: row.protected,\n\t\tscopeKind: row.scope_kind,\n\t\tsystemKind: row.system_kind,\n\t\tversion: row.version,\n\t};\n}\n\nexport class PostgresAuthorizationStore implements AthenaAuthorizationStore {\n\tconstructor(private readonly db: AthenaAuthDatabase) { }\n\n\tasync materialize(): Promise<void> {\n\t\tfor (const right of listAthenaAuthorizationRights()) {\n\t\t\tawait this.db.query(\n\t\t\t\t`INSERT INTO athena.authorization_rights (\n\t\t\t\t\tkey, domain, display_name, description, scope_kind, risk_level,\n\t\t\t\t\tassignable, source_version\n\t\t\t\t) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n\t\t\t\tON CONFLICT (key) DO UPDATE SET\n\t\t\t\t\tdomain = EXCLUDED.domain,\n\t\t\t\t\tdisplay_name = EXCLUDED.display_name,\n\t\t\t\t\tdescription = EXCLUDED.description,\n\t\t\t\t\tscope_kind = EXCLUDED.scope_kind,\n\t\t\t\t\trisk_level = EXCLUDED.risk_level,\n\t\t\t\t\tassignable = EXCLUDED.assignable,\n\t\t\t\t\tsource_version = EXCLUDED.source_version`,\n\t\t\t\t[\n\t\t\t\t\tright.key,\n\t\t\t\t\tright.domain,\n\t\t\t\t\tright.displayName,\n\t\t\t\t\tright.description,\n\t\t\t\t\tright.scopeKind,\n\t\t\t\t\tright.riskLevel,\n\t\t\t\t\tright.assignable,\n\t\t\t\t\tAUTHORIZATION_CATALOG_VERSION,\n\t\t\t\t],\n\t\t\t);\n\t\t}\n\t\tfor (const template of BUILTIN_AUTHORIZATION_ROLES) {\n\t\t\tawait this.db.query(\n\t\t\t\t`INSERT INTO athena.authorization_roles (\n\t\t\t\t\tid, key, name, scope_kind, organization_id, system_kind,\n\t\t\t\t\tprotected, assignable, version\n\t\t\t\t) VALUES ($1, $2, $3, $4, NULL, $5, $6, $7, 1)\n\t\t\t\tON CONFLICT (id) DO UPDATE SET\n\t\t\t\t\tname = EXCLUDED.name,\n\t\t\t\t\tscope_kind = EXCLUDED.scope_kind,\n\t\t\t\t\tsystem_kind = EXCLUDED.system_kind,\n\t\t\t\t\tprotected = EXCLUDED.protected,\n\t\t\t\t\tassignable = EXCLUDED.assignable,\n\t\t\t\t\tupdated_at = NOW()`,\n\t\t\t\t[\n\t\t\t\t\ttemplate.id,\n\t\t\t\t\ttemplate.key,\n\t\t\t\t\ttemplate.name,\n\t\t\t\t\ttemplate.scopeKind,\n\t\t\t\t\ttemplate.systemKind,\n\t\t\t\t\ttemplate.protected,\n\t\t\t\t\ttemplate.assignable,\n\t\t\t\t],\n\t\t\t);\n\t\t\tawait this.db.query(\n\t\t\t\t`DELETE FROM athena.authorization_role_rights WHERE role_id = $1`,\n\t\t\t\t[template.id],\n\t\t\t);\n\t\t\tfor (const key of template.rights) {\n\t\t\t\tawait this.db.query(\n\t\t\t\t\t`INSERT INTO athena.authorization_role_rights (role_id, right_key)\n\t\t\t\t\t VALUES ($1, $2)\n\t\t\t\t\t ON CONFLICT DO NOTHING`,\n\t\t\t\t\t[template.id, key],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_user_roles (user_id, role_id)\n\t\t\t SELECT u.id, r.id\n\t\t\t FROM athena.users u\n\t\t\t JOIN athena.authorization_roles r\n\t\t\t   ON r.id = $1\n\t\t\t  AND r.organization_id IS NULL\n\t\t\t WHERE COALESCE(u.role, '') = 'admin'\n\t\t\t   AND NOT EXISTS (\n\t\t\t     SELECT 1 FROM athena.authorization_user_roles a WHERE a.user_id = u.id\n\t\t\t   )`,\n\t\t\t[\"platform_admin\"],\n\t\t);\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_user_roles (user_id, role_id)\n\t\t\t SELECT u.id, r.id\n\t\t\t FROM athena.users u\n\t\t\t JOIN athena.authorization_roles r\n\t\t\t   ON r.id = $1\n\t\t\t  AND r.organization_id IS NULL\n\t\t\t WHERE COALESCE(u.role, '') = 'unauthorized'\n\t\t\t   AND NOT EXISTS (\n\t\t\t     SELECT 1 FROM athena.authorization_user_roles a WHERE a.user_id = u.id\n\t\t\t   )`,\n\t\t\t[\"platform_unauthorized\"],\n\t\t);\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_user_roles (user_id, role_id)\n\t\t\t SELECT u.id, r.id\n\t\t\t FROM athena.users u\n\t\t\t JOIN athena.authorization_roles r\n\t\t\t   ON r.id = $1\n\t\t\t  AND r.organization_id IS NULL\n\t\t\t WHERE COALESCE(u.role, '') IN ('', 'customer')\n\t\t\t   AND NOT EXISTS (\n\t\t\t     SELECT 1 FROM athena.authorization_user_roles a WHERE a.user_id = u.id\n\t\t\t   )`,\n\t\t\t[\"platform_customer\"],\n\t\t);\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_user_roles (user_id, role_id)\n\t\t\t SELECT u.id, r.id\n\t\t\t FROM athena.users u\n\t\t\t JOIN athena.authorization_roles r\n\t\t\t   ON r.id = $1\n\t\t\t  AND r.organization_id IS NULL\n\t\t\t WHERE u.role IS NOT NULL\n\t\t\t   AND u.role NOT IN ('admin', 'unauthorized', 'customer')\n\t\t\t   AND NOT EXISTS (\n\t\t\t     SELECT 1 FROM athena.authorization_user_roles a WHERE a.user_id = u.id\n\t\t\t   )`,\n\t\t\t[\"platform_unauthorized\"],\n\t\t);\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_member_roles (member_id, role_id)\n\t\t\t SELECT m.id, r.id\n\t\t\t FROM athena.member m\n\t\t\t JOIN athena.authorization_roles r\n\t\t\t   ON r.id = CASE\n\t\t\t     WHEN m.role = 'owner' THEN 'organization_owner'\n\t\t\t     WHEN m.role = 'admin' THEN 'organization_admin'\n\t\t\t     ELSE 'organization_member'\n\t\t\t   END\n\t\t\t WHERE NOT EXISTS (\n\t\t\t   SELECT 1 FROM athena.authorization_member_roles a WHERE a.member_id = m.id\n\t\t\t )`,\n\t\t);\n\t}\n\n\tasync hasUserAssignment(userId: string): Promise<boolean> {\n\t\tconst result = await this.db.query(\n\t\t\t`SELECT 1 FROM athena.authorization_user_roles WHERE user_id = $1`,\n\t\t\t[userId],\n\t\t);\n\t\treturn result.rowCount > 0;\n\t}\n\n\tasync assignUserRole(\n\t\tuserId: string,\n\t\troleKey: string,\n\t\tassignedBy?: string,\n\t): Promise<void> {\n\t\tconst mapped = mapLegacyUserRole(\n\t\t\troleKey === \"admin\" ||\n\t\t\t\troleKey === \"customer\" ||\n\t\t\t\troleKey === \"unauthorized\"\n\t\t\t\t? roleKey\n\t\t\t\t: roleKey,\n\t\t);\n\t\tconst key = roleKey.startsWith(\"platform_\") ? roleKey : mapped;\n\t\tconst inserted = await this.db.query(\n\t\t\t`INSERT INTO athena.authorization_user_roles (user_id, role_id, assigned_by)\n\t\t\t SELECT $1, id, $3\n\t\t\t FROM athena.authorization_roles\n\t\t\t WHERE key = $2 AND organization_id IS NULL AND scope_kind = 'platform'\n\t\t\t ON CONFLICT (user_id) DO UPDATE SET\n\t\t\t   role_id = EXCLUDED.role_id,\n\t\t\t   assigned_by = EXCLUDED.assigned_by,\n\t\t\t   updated_at = NOW()`,\n\t\t\t[userId, key, assignedBy ?? null],\n\t\t);\n\t\tif (inserted.rowCount < 1) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Unknown platform role\");\n\t\t}\n\t\tawait this.bumpRevision(null);\n\t\tawait this.writeAudit({\n\t\t\taction: \"user.role.assign\",\n\t\t\tactorUserId: assignedBy,\n\t\t\tafter: { roleKey: key },\n\t\t\ttargetId: userId,\n\t\t\ttargetKind: \"user\",\n\t\t});\n\t}\n\n\tasync assignMemberRole(\n\t\tmemberId: string,\n\t\troleKey: string,\n\t\tassignedBy?: string,\n\t\torganizationId?: string | null,\n\t): Promise<void> {\n\t\tconst member = await this.db.query<{ organization_id: string }>(\n\t\t\t`SELECT organization_id FROM athena.member WHERE id = $1`,\n\t\t\t[memberId],\n\t\t);\n\t\tconst orgId = organizationId ?? member.rows[0]?.organization_id ?? null;\n\t\tif (!orgId) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Member not found\");\n\t\t}\n\t\tconst role = await this.lookupAssignableOrganizationRole(orgId, roleKey);\n\t\tif (!role) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Unknown or unassignable role\");\n\t\t}\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_member_roles (member_id, role_id, assigned_by)\n\t\t\t VALUES ($1, $2, $3)\n\t\t\t ON CONFLICT (member_id) DO UPDATE SET\n\t\t\t   role_id = EXCLUDED.role_id,\n\t\t\t   assigned_by = EXCLUDED.assigned_by,\n\t\t\t   updated_at = NOW()`,\n\t\t\t[memberId, role.id, assignedBy ?? null],\n\t\t);\n\t\tawait this.bumpRevision(orgId);\n\t\tawait this.writeAudit({\n\t\t\taction: \"member.role.assign\",\n\t\t\tactorUserId: assignedBy,\n\t\t\tafter: { roleKey: role.key },\n\t\t\torganizationId: orgId,\n\t\t\ttargetId: memberId,\n\t\t\ttargetKind: \"member\",\n\t\t});\n\t}\n\n\tasync lookupAssignableOrganizationRole(\n\t\torganizationId: string,\n\t\troleRef: string,\n\t): Promise<AthenaAuthorizationRoleRecord | undefined> {\n\t\tconst mapped = resolveMemberAssignmentRole(roleRef);\n\t\tconst result = await this.db.query<RoleRow>(\n\t\t\t`SELECT * FROM athena.authorization_roles\n\t\t\t WHERE scope_kind = 'organization'\n\t\t\t   AND assignable = TRUE\n\t\t\t   AND (\n\t\t\t     id = $2\n\t\t\t     OR key = $2\n\t\t\t     OR key = $3\n\t\t\t     OR ($2 IN ('owner', 'organization_owner') AND key = 'organization_owner')\n\t\t\t     OR ($2 IN ('admin', 'organization_admin') AND key = 'organization_admin')\n\t\t\t     OR ($2 IN ('member', 'organization_member') AND key = 'organization_member')\n\t\t\t   )\n\t\t\t   AND (organization_id IS NULL OR organization_id = $1)\n\t\t\t ORDER BY CASE WHEN organization_id IS NOT NULL THEN 0 ELSE 1 END\n\t\t\t LIMIT 1`,\n\t\t\t[organizationId, roleRef, mapped],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn mapRoleRow(row);\n\t}\n\n\tasync cloneRole(input: {\n\t\tactorUserId: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t\tsourceRoleId: string;\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\treturn this.db.transaction(async (tx) => {\n\t\t\tconst nested = new PostgresAuthorizationStore(tx);\n\t\t\treturn nested.cloneRoleInTransaction(input);\n\t\t});\n\t}\n\n\tprivate async cloneRoleInTransaction(input: {\n\t\tactorUserId: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t\tsourceRoleId: string;\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst id = crypto.randomUUID();\n\t\tconst source = await this.db.query<RoleRow>(\n\t\t\t`SELECT * FROM athena.authorization_roles WHERE id = $1`,\n\t\t\t[input.sourceRoleId],\n\t\t);\n\t\tconst row = source.rows[0];\n\t\tif (!row) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Source role not found\");\n\t\t}\n\t\tconst organizationId = input.organizationId ?? row.organization_id;\n\t\tassertCloneRoleTenantBoundary({\n\t\t\tsourceOrganizationId: row.organization_id,\n\t\t\tsourceScopeKind: row.scope_kind,\n\t\t\ttargetOrganizationId: organizationId,\n\t\t});\n\t\tconst key = `custom_${id.slice(0, 8)}`;\n\t\tconst name = input.name.trim() || `${row.name} copy`;\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_roles (\n\t\t\t\tid, key, name, scope_kind, organization_id, system_kind,\n\t\t\t\tprotected, assignable, version\n\t\t\t) VALUES ($1, $2, $3, $4, $5, NULL, FALSE, TRUE, 1)`,\n\t\t\t[id, key, name, row.scope_kind, organizationId],\n\t\t);\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_role_rights (role_id, right_key)\n\t\t\t SELECT $1, right_key FROM athena.authorization_role_rights WHERE role_id = $2`,\n\t\t\t[id, input.sourceRoleId],\n\t\t);\n\t\tawait this.bumpRevision(organizationId);\n\t\tconst clonedRights = await this.listRoleRights(id);\n\t\tawait this.writeAudit({\n\t\t\taction: \"role.clone\",\n\t\t\tactorUserId: input.actorUserId,\n\t\t\tafter: { rights: [...clonedRights] },\n\t\t\torganizationId,\n\t\t\ttargetId: id,\n\t\t\ttargetKind: \"role\",\n\t\t});\n\t\treturn {\n\t\t\tassignable: true,\n\t\t\tid,\n\t\t\tkey,\n\t\t\tname,\n\t\t\torganizationId,\n\t\t\tprotected: false,\n\t\t\tscopeKind: row.scope_kind,\n\t\t\tsystemKind: null,\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tasync createRole(input: {\n\t\tactorUserId: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t\trights?: readonly string[];\n\t\tscopeKind: \"platform\" | \"organization\";\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\treturn this.db.transaction(async (tx) => {\n\t\t\tconst nested = new PostgresAuthorizationStore(tx);\n\t\t\treturn nested.createRoleInTransaction(input);\n\t\t});\n\t}\n\n\tasync getRole(\n\t\tid: string,\n\t\torganizationId?: string | null,\n\t): Promise<AthenaAuthorizationRoleDetail | undefined> {\n\t\tconst role = await this.loadScopedRole(id, organizationId);\n\t\tif (!role) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst rights = await this.listRoleRights(role.id);\n\t\treturn toRoleDetail(role, rights, await this.countAssignments(role));\n\t}\n\n\tasync listRoles(input: {\n\t\torganizationId?: string | null;\n\t\tscopeKind: \"platform\" | \"organization\";\n\t}): Promise<readonly RoleDescriptor[]> {\n\t\tconst result = input.organizationId\n\t\t\t? await this.db.query<\n\t\t\t\t\tRoleRow & { assignment_count: string; right_count: string }\n\t\t\t\t>(\n\t\t\t\t\t`SELECT r.*,\n\t\t\t\t\t        (SELECT COUNT(*)::text FROM athena.authorization_member_roles mr WHERE mr.role_id = r.id) AS assignment_count,\n\t\t\t\t\t        (SELECT COUNT(*)::text FROM athena.authorization_role_rights rr WHERE rr.role_id = r.id) AS right_count\n\t\t\t\t\t FROM athena.authorization_roles r\n\t\t\t\t\t WHERE r.scope_kind = 'organization'\n\t\t\t\t\t   AND (r.organization_id IS NULL OR r.organization_id = $1)\n\t\t\t\t\t ORDER BY r.protected DESC, r.key`,\n\t\t\t\t\t[input.organizationId],\n\t\t\t\t)\n\t\t\t: await this.db.query<\n\t\t\t\t\tRoleRow & { assignment_count: string; right_count: string }\n\t\t\t\t>(\n\t\t\t\t\t`SELECT r.*,\n\t\t\t\t\t        (SELECT COUNT(*)::text FROM athena.authorization_user_roles ur WHERE ur.role_id = r.id) AS assignment_count,\n\t\t\t\t\t        (SELECT COUNT(*)::text FROM athena.authorization_role_rights rr WHERE rr.role_id = r.id) AS right_count\n\t\t\t\t\t FROM athena.authorization_roles r\n\t\t\t\t\t WHERE r.scope_kind = 'platform' AND r.organization_id IS NULL\n\t\t\t\t\t ORDER BY r.protected DESC, r.key`,\n\t\t\t\t);\n\t\treturn result.rows\n\t\t\t.filter((row) => row.scope_kind === input.scopeKind)\n\t\t\t.map((row) =>\n\t\t\t\ttoRoleDescriptor(mapRoleRow(row), {\n\t\t\t\t\tassignmentCount: Number(row.assignment_count),\n\t\t\t\t\trightCount: Number(row.right_count),\n\t\t\t\t}),\n\t\t\t);\n\t}\n\n\tasync listRoleRights(roleId: string): Promise<readonly AthenaRightKey[]> {\n\t\tconst result = await this.db.query<{ right_key: string }>(\n\t\t\t`SELECT right_key FROM athena.authorization_role_rights\n\t\t\t WHERE role_id = $1 ORDER BY right_key`,\n\t\t\t[roleId],\n\t\t);\n\t\treturn result.rows.map((row) => parseAthenaRightKey(row.right_key));\n\t}\n\n\tasync updateRole(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\treturn this.db.transaction(async (tx) => {\n\t\t\tconst nested = new PostgresAuthorizationStore(tx);\n\t\t\treturn nested.updateRoleInTransaction(input);\n\t\t});\n\t}\n\n\tasync replaceRoleRights(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\torganizationId?: string | null;\n\t\trights: readonly string[];\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\treturn this.db.transaction(async (tx) => {\n\t\t\tconst nested = new PostgresAuthorizationStore(tx);\n\t\t\treturn nested.replaceRoleRightsInTransaction(input);\n\t\t});\n\t}\n\n\tasync deleteRole(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\torganizationId?: string | null;\n\t\treassignmentRoleId?: string | null;\n\t}): Promise<void> {\n\t\tawait this.db.transaction(async (tx) => {\n\t\t\tconst nested = new PostgresAuthorizationStore(tx);\n\t\t\tawait nested.deleteRoleInTransaction(input);\n\t\t});\n\t}\n\n\tprivate async createRoleInTransaction(input: {\n\t\tactorUserId: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t\trights?: readonly string[];\n\t\tscopeKind: \"platform\" | \"organization\";\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst name = input.name.trim();\n\t\tif (!name) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"name is required\");\n\t\t}\n\t\tif (input.scopeKind === \"organization\" && !input.organizationId) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t}\n\t\tconst rights = input.rights ?? [];\n\t\tassertRightsReplaceAllowed({\n\t\t\torganizationId: input.organizationId,\n\t\t\trights,\n\t\t\troleScope: input.scopeKind,\n\t\t});\n\t\tconst id = crypto.randomUUID();\n\t\tconst key = `custom_${id.slice(0, 8)}`;\n\t\tconst organizationId =\n\t\t\tinput.scopeKind === \"organization\" ? (input.organizationId ?? null) : null;\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_roles (\n\t\t\t\tid, key, name, scope_kind, organization_id, system_kind,\n\t\t\t\tprotected, assignable, version\n\t\t\t) VALUES ($1, $2, $3, $4, $5, NULL, FALSE, TRUE, 1)`,\n\t\t\t[id, key, name, input.scopeKind, organizationId],\n\t\t);\n\t\tawait this.replaceMapping(id, rights);\n\t\tawait this.bumpRevision(organizationId);\n\t\tawait this.writeAudit({\n\t\t\taction: \"role.create\",\n\t\t\tactorUserId: input.actorUserId,\n\t\t\tafter: { rights: [...rights].sort() },\n\t\t\torganizationId,\n\t\t\ttargetId: id,\n\t\t\ttargetKind: \"role\",\n\t\t});\n\t\treturn {\n\t\t\tassignable: true,\n\t\t\tid,\n\t\t\tkey,\n\t\t\tname,\n\t\t\torganizationId,\n\t\t\tprotected: false,\n\t\t\tscopeKind: input.scopeKind,\n\t\t\tsystemKind: null,\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tprivate async updateRoleInTransaction(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst role = await this.requireScopedRole(input.id, input.organizationId);\n\t\tassertProtectedRoleImmutable(role);\n\t\tconst name = input.name.trim();\n\t\tif (!name) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"name is required\");\n\t\t}\n\t\tconst updated = await this.bumpRoleVersion(role.id, input.expectedVersion);\n\t\tawait this.db.query(\n\t\t\t`UPDATE athena.authorization_roles SET name = $1, updated_at = NOW() WHERE id = $2`,\n\t\t\t[name, role.id],\n\t\t);\n\t\tawait this.bumpRevision(role.organizationId);\n\t\tawait this.writeAudit({\n\t\t\taction: \"role.rename\",\n\t\t\tactorUserId: input.actorUserId,\n\t\t\tafter: { name },\n\t\t\tbefore: { name: role.name },\n\t\t\torganizationId: role.organizationId,\n\t\t\ttargetId: role.id,\n\t\t\ttargetKind: \"role\",\n\t\t});\n\t\treturn { ...updated, name };\n\t}\n\n\tprivate async replaceRoleRightsInTransaction(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\torganizationId?: string | null;\n\t\trights: readonly string[];\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst role = await this.requireScopedRole(input.id, input.organizationId);\n\t\tassertProtectedRoleImmutable(role);\n\t\tassertRightsReplaceAllowed({\n\t\t\torganizationId: role.organizationId,\n\t\t\trights: input.rights,\n\t\t\troleScope: role.scopeKind,\n\t\t});\n\t\tconst before = [...(await this.listRoleRights(role.id))].sort();\n\t\tconst after = [...new Set(input.rights)].sort();\n\t\tconst updated = await this.bumpRoleVersion(role.id, input.expectedVersion);\n\t\tawait this.replaceMapping(role.id, after);\n\t\tawait this.bumpRevision(role.organizationId);\n\t\tawait this.writeAudit({\n\t\t\taction: \"role.rights.replace\",\n\t\t\tactorUserId: input.actorUserId,\n\t\t\tafter: { rights: after },\n\t\t\tbefore: { rights: before },\n\t\t\torganizationId: role.organizationId,\n\t\t\ttargetId: role.id,\n\t\t\ttargetKind: \"role\",\n\t\t});\n\t\treturn updated;\n\t}\n\n\tprivate async deleteRoleInTransaction(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\torganizationId?: string | null;\n\t\treassignmentRoleId?: string | null;\n\t}): Promise<void> {\n\t\tconst role = await this.requireScopedRole(input.id, input.organizationId);\n\t\tassertProtectedRoleImmutable(role);\n\t\tawait this.bumpRoleVersion(role.id, input.expectedVersion);\n\t\tconst assigned = await this.countAssignments(role);\n\t\tif (assigned > 0) {\n\t\t\tconst replacementId = input.reassignmentRoleId?.trim() ?? \"\";\n\t\t\tif (!replacementId) {\n\t\t\t\tthrowRoleHasAssignments();\n\t\t\t}\n\t\t\tconst replacement = await this.requireScopedRole(\n\t\t\t\treplacementId,\n\t\t\t\tinput.organizationId,\n\t\t\t);\n\t\t\tif (\n\t\t\t\treplacement.id === role.id ||\n\t\t\t\t!replacement.assignable ||\n\t\t\t\treplacement.scopeKind !== role.scopeKind\n\t\t\t) {\n\t\t\t\tthrowReassignmentInvalid();\n\t\t\t}\n\t\t\tif (role.scopeKind === \"organization\") {\n\t\t\t\tawait this.db.query(\n\t\t\t\t\t`UPDATE athena.authorization_member_roles SET role_id = $1, updated_at = NOW()\n\t\t\t\t\t WHERE role_id = $2`,\n\t\t\t\t\t[replacement.id, role.id],\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tawait this.db.query(\n\t\t\t\t\t`UPDATE athena.authorization_user_roles SET role_id = $1, updated_at = NOW()\n\t\t\t\t\t WHERE role_id = $2`,\n\t\t\t\t\t[replacement.id, role.id],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst before = [...(await this.listRoleRights(role.id))].sort();\n\t\tawait this.db.query(\n\t\t\t`DELETE FROM athena.authorization_roles WHERE id = $1`,\n\t\t\t[role.id],\n\t\t);\n\t\tawait this.bumpRevision(role.organizationId);\n\t\tawait this.writeAudit({\n\t\t\taction: \"role.delete\",\n\t\t\tactorUserId: input.actorUserId,\n\t\t\tbefore: { rights: before },\n\t\t\torganizationId: role.organizationId,\n\t\t\ttargetId: role.id,\n\t\t\ttargetKind: \"role\",\n\t\t});\n\t}\n\n\tasync listAudit(input: {\n\t\tlimit?: number;\n\t\torganizationId?: string | null;\n\t}): Promise<readonly Record<string, unknown>[]> {\n\t\tconst result = await this.db.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM athena.authorization_audit_log\n\t\t\t WHERE (\n\t\t\t   ($1::text IS NULL AND organization_id IS NULL)\n\t\t\t   OR ($1::text IS NOT NULL AND organization_id = $1)\n\t\t\t )\n\t\t\t ORDER BY created_at DESC\n\t\t\t LIMIT $2`,\n\t\t\t[input.organizationId ?? null, input.limit ?? 50],\n\t\t);\n\t\treturn result.rows;\n\t}\n\n\tasync resolveEffectiveRights(input: {\n\t\tactiveOrganizationId?: string | null;\n\t\tgetMember: (\n\t\t\torganizationId: string,\n\t\t\tuserId: string,\n\t\t) => Promise<AuthMemberRow | undefined>;\n\t\tuserId: string;\n\t}): Promise<readonly AthenaRightKey[]> {\n\t\tconst platform = await this.db.query<{ right_key: string }>(\n\t\t\t`SELECT rr.right_key\n\t\t\t FROM athena.authorization_user_roles ur\n\t\t\t JOIN athena.authorization_role_rights rr ON rr.role_id = ur.role_id\n\t\t\t WHERE ur.user_id = $1`,\n\t\t\t[input.userId],\n\t\t);\n\t\tconst keys = new Set(platform.rows.map((row) => row.right_key));\n\t\tconst organizationId = input.activeOrganizationId?.trim() ?? \"\";\n\t\tif (organizationId.length > 0) {\n\t\t\tconst member = await input.getMember(organizationId, input.userId);\n\t\t\tif (member) {\n\t\t\t\tconst org = await this.db.query<{ right_key: string }>(\n\t\t\t\t\t`SELECT rr.right_key\n\t\t\t\t\t FROM athena.authorization_member_roles mr\n\t\t\t\t\t JOIN athena.authorization_role_rights rr ON rr.role_id = mr.role_id\n\t\t\t\t\t WHERE mr.member_id = $1`,\n\t\t\t\t\t[member.id],\n\t\t\t\t);\n\t\t\t\tfor (const row of org.rows) {\n\t\t\t\t\tkeys.add(row.right_key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...keys].sort().map((key) => parseAthenaRightKey(key));\n\t}\n\n\tasync readSnapshot(input: {\n\t\tactiveOrganizationId?: string | null;\n\t\tfoundingOwnerUserId?: string | null;\n\t\tgetMember: (\n\t\t\torganizationId: string,\n\t\t\tuserId: string,\n\t\t) => Promise<AuthMemberRow | undefined>;\n\t\tlistMembers: (organizationId: string) => Promise<AuthMemberRow[]>;\n\t\tuserId: string;\n\t}): Promise<AuthorizationSnapshot> {\n\t\tvoid input.foundingOwnerUserId;\n\t\tvoid input.listMembers;\n\t\tconst effectiveRights = await this.resolveEffectiveRights(input);\n\t\tconst capabilities = capabilitiesFromRights(effectiveRights);\n\t\tconst roleRows = await this.db.query<{\n\t\t\tkey: string;\n\t\t\tname: string;\n\t\t\tscope_kind: \"platform\" | \"organization\";\n\t\t}>(\n\t\t\t`SELECT r.key, r.name, r.scope_kind\n\t\t\t FROM athena.authorization_user_roles ur\n\t\t\t JOIN athena.authorization_roles r ON r.id = ur.role_id\n\t\t\t WHERE ur.user_id = $1\n\t\t\t UNION ALL\n\t\t\t SELECT r.key, r.name, r.scope_kind\n\t\t\t FROM athena.member m\n\t\t\t JOIN athena.authorization_member_roles mr ON mr.member_id = m.id\n\t\t\t JOIN athena.authorization_roles r ON r.id = mr.role_id\n\t\t\t WHERE m.user_id = $1 AND $2::text IS NOT NULL AND m.organization_id = $2`,\n\t\t\t[input.userId, input.activeOrganizationId ?? null],\n\t\t);\n\t\tconst roles: AssignedRoleSummary[] = roleRows.rows.map((row) => ({\n\t\t\tdisplayName: row.name,\n\t\t\tkey: row.key,\n\t\t\tscopeKind: row.scope_kind,\n\t\t}));\n\t\tconst assignable = await this.db.query<{\n\t\t\tassignable: boolean;\n\t\t\tassignment_count: string;\n\t\t\tid: string;\n\t\t\tkey: string;\n\t\t\tname: string;\n\t\t\torganization_id: string | null;\n\t\t\tprotected: boolean;\n\t\t\tright_count: string;\n\t\t\tscope_kind: \"platform\" | \"organization\";\n\t\t\tsystem_kind: \"owner\" | \"admin\" | \"member\" | null;\n\t\t\tversion: number;\n\t\t}>(\n\t\t\t`SELECT r.id, r.key, r.name, r.scope_kind, r.organization_id, r.protected, r.assignable, r.system_kind, r.version,\n\t\t\t        (\n\t\t\t          CASE\n\t\t\t            WHEN r.scope_kind = 'organization' THEN (\n\t\t\t              SELECT COUNT(*)::text\n\t\t\t              FROM athena.authorization_member_roles mr\n\t\t\t              JOIN athena.member m ON m.id = mr.member_id\n\t\t\t              WHERE mr.role_id = r.id\n\t\t\t                AND ($1::text IS NULL OR m.organization_id = $1)\n\t\t\t            )\n\t\t\t            ELSE (\n\t\t\t              SELECT COUNT(*)::text FROM athena.authorization_user_roles ur WHERE ur.role_id = r.id\n\t\t\t            )\n\t\t\t          END\n\t\t\t        ) AS assignment_count,\n\t\t\t        (\n\t\t\t          SELECT COUNT(*)::text FROM athena.authorization_role_rights rr WHERE rr.role_id = r.id\n\t\t\t        ) AS right_count\n\t\t\t FROM athena.authorization_roles r\n\t\t\t WHERE r.assignable = TRUE\n\t\t\t   AND (r.organization_id IS NULL OR r.organization_id = $1)\n\t\t\t ORDER BY r.scope_kind, r.key`,\n\t\t\t[input.activeOrganizationId ?? null],\n\t\t);\n\t\tconst assignableRoles = projectAssignableRoles({\n\t\t\tactiveOrganizationId: input.activeOrganizationId,\n\t\t\tcapabilities,\n\t\t\troles: assignable.rows.map((row) =>\n\t\t\t\ttoRoleDescriptor(\n\t\t\t\t\t{\n\t\t\t\t\t\tassignable: row.assignable,\n\t\t\t\t\t\tid: row.id,\n\t\t\t\t\t\tkey: row.key,\n\t\t\t\t\t\tname: row.name,\n\t\t\t\t\t\torganizationId: row.organization_id,\n\t\t\t\t\t\tprotected: row.protected,\n\t\t\t\t\t\tscopeKind: row.scope_kind,\n\t\t\t\t\t\tsystemKind: row.system_kind,\n\t\t\t\t\t\tversion: row.version,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tassignmentCount: Number(row.assignment_count),\n\t\t\t\t\t\trightCount: Number(row.right_count),\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t});\n\t\tconst organizationId = input.activeOrganizationId?.trim() ?? \"\";\n\t\tconst revisionRow = await this.db.query<{ revision: string }>(\n\t\t\torganizationId.length > 0\n\t\t\t\t? `SELECT revision::text AS revision FROM athena.authorization_revisions\n\t\t\t\t   WHERE scope_kind = 'organization' AND organization_id = $1`\n\t\t\t\t: `SELECT revision::text AS revision FROM athena.authorization_revisions\n\t\t\t\t   WHERE scope_kind = 'platform' AND organization_id IS NULL`,\n\t\t\torganizationId.length > 0 ? [organizationId] : [],\n\t\t);\n\t\treturn {\n\t\t\t...(organizationId.length > 0\n\t\t\t\t? { activeOrganizationId: organizationId }\n\t\t\t\t: {}),\n\t\t\tassignableRoles,\n\t\t\tcapabilities,\n\t\t\teffectiveRights,\n\t\t\trevision: Number(revisionRow.rows[0]?.revision ?? 1),\n\t\t\troles,\n\t\t};\n\t}\n\n\tasync annotateMember(\n\t\tmember: AuthMemberRow,\n\t\tactor: {\n\t\t\tfoundingOwnerUserId: string | null;\n\t\t\tgetMember: (\n\t\t\t\torganizationId: string,\n\t\t\t\tuserId: string,\n\t\t\t) => Promise<AuthMemberRow | undefined>;\n\t\t\tuserId: string;\n\t\t},\n\t): Promise<MemberAuthorizationActions> {\n\t\tconst roleRow = await this.db.query<{ key: string; name: string }>(\n\t\t\t`SELECT r.key, r.name\n\t\t\t FROM athena.authorization_member_roles mr\n\t\t\t JOIN athena.authorization_roles r ON r.id = mr.role_id\n\t\t\t WHERE mr.member_id = $1`,\n\t\t\t[member.id],\n\t\t);\n\t\tconst roleKey = roleRow.rows[0]?.key ?? mapLegacyMemberRole(member.role);\n\t\tconst roleName = roleRow.rows[0]?.name ?? roleKey;\n\t\tconst actorRights = await this.resolveEffectiveRights({\n\t\t\tactiveOrganizationId: member.organization_id,\n\t\t\tgetMember: actor.getMember,\n\t\t\tuserId: actor.userId,\n\t\t});\n\t\tconst capabilities = capabilitiesFromRights(actorRights);\n\t\tconst denialReasons: MemberAuthorizationActions[\"denialReasons\"] = {};\n\t\tif (actor.foundingOwnerUserId === member.user_id) {\n\t\t\tdenialReasons.changeRole = FOUNDING_OWNER_ROLE_LOCKED;\n\t\t\tdenialReasons.remove = FOUNDING_OWNER_REMOVE_FORBIDDEN;\n\t\t} else if (\n\t\t\tactor.userId === member.user_id &&\n\t\t\troleKey === ORGANIZATION_OWNER_ROLE\n\t\t) {\n\t\t\tdenialReasons.changeRole =\n\t\t\t\t\"Owners can't change their own role from the members table.\";\n\t\t\tdenialReasons.remove =\n\t\t\t\t\"Owners can't suspend or remove themselves from the members table.\";\n\t\t} else if (!capabilities.canChangeMemberRole) {\n\t\t\tdenialReasons.changeRole = \"Not allowed to change member roles.\";\n\t\t\tdenialReasons.remove = \"Not allowed to remove members.\";\n\t\t}\n\t\treturn {\n\t\t\tcanChangeRole: denialReasons.changeRole === undefined,\n\t\t\tcanRemove: denialReasons.remove === undefined,\n\t\t\tdenialReasons,\n\t\t\troleDisplayName: roleName,\n\t\t\troleKey,\n\t\t};\n\t}\n\n\tprivate async loadScopedRole(\n\t\tid: string,\n\t\torganizationId?: string | null,\n\t): Promise<AthenaAuthorizationRoleRecord | undefined> {\n\t\tconst result = organizationId\n\t\t\t? await this.db.query<RoleRow>(\n\t\t\t\t\t`SELECT * FROM athena.authorization_roles\n\t\t\t\t\t WHERE id = $1 AND scope_kind = 'organization'\n\t\t\t\t\t   AND (organization_id IS NULL OR organization_id = $2)`,\n\t\t\t\t\t[id, organizationId],\n\t\t\t\t)\n\t\t\t: await this.db.query<RoleRow>(\n\t\t\t\t\t`SELECT * FROM athena.authorization_roles\n\t\t\t\t\t WHERE id = $1 AND scope_kind = 'platform' AND organization_id IS NULL`,\n\t\t\t\t\t[id],\n\t\t\t\t);\n\t\tconst row = result.rows[0];\n\t\treturn row ? mapRoleRow(row) : undefined;\n\t}\n\n\tprivate async requireScopedRole(\n\t\tid: string,\n\t\torganizationId?: string | null,\n\t): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst role = await this.loadScopedRole(id, organizationId);\n\t\tif (!role) {\n\t\t\tthrowRoleNotFound();\n\t\t}\n\t\treturn role;\n\t}\n\n\tprivate async countAssignments(\n\t\trole: Pick<AthenaAuthorizationRoleRecord, \"id\" | \"scopeKind\">,\n\t): Promise<number> {\n\t\tif (role.scopeKind === \"organization\") {\n\t\t\tconst result = await this.db.query<{ count: string }>(\n\t\t\t\t`SELECT COUNT(*)::text AS count FROM athena.authorization_member_roles WHERE role_id = $1`,\n\t\t\t\t[role.id],\n\t\t\t);\n\t\t\treturn Number(result.rows[0]?.count ?? 0);\n\t\t}\n\t\tconst result = await this.db.query<{ count: string }>(\n\t\t\t`SELECT COUNT(*)::text AS count FROM athena.authorization_user_roles WHERE role_id = $1`,\n\t\t\t[role.id],\n\t\t);\n\t\treturn Number(result.rows[0]?.count ?? 0);\n\t}\n\n\tprivate async replaceMapping(\n\t\troleId: string,\n\t\trights: readonly string[],\n\t): Promise<void> {\n\t\tawait this.db.query(\n\t\t\t`DELETE FROM athena.authorization_role_rights WHERE role_id = $1`,\n\t\t\t[roleId],\n\t\t);\n\t\tfor (const key of rights) {\n\t\t\tawait this.db.query(\n\t\t\t\t`INSERT INTO athena.authorization_role_rights (role_id, right_key)\n\t\t\t\t VALUES ($1, $2)`,\n\t\t\t\t[roleId, parseAthenaRightKey(key)],\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async bumpRoleVersion(\n\t\tid: string,\n\t\texpectedVersion: number,\n\t): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst updated = await this.db.query<RoleRow>(\n\t\t\t`UPDATE athena.authorization_roles\n\t\t\t SET version = version + 1, updated_at = NOW()\n\t\t\t WHERE id = $1 AND version = $2\n\t\t\t RETURNING *`,\n\t\t\t[id, expectedVersion],\n\t\t);\n\t\tconst row = updated.rows[0];\n\t\tif (!row) {\n\t\t\tthrowRoleVersionConflict();\n\t\t}\n\t\treturn mapRoleRow(row);\n\t}\n\n\tprivate async bumpRevision(organizationId: string | null): Promise<void> {\n\t\tif (organizationId) {\n\t\t\tawait this.db.query(\n\t\t\t\t`WITH updated AS (\n\t\t\t\t\tUPDATE athena.authorization_revisions\n\t\t\t\t\tSET revision = revision + 1, updated_at = NOW()\n\t\t\t\t\tWHERE organization_id = $1\n\t\t\t\t\tRETURNING organization_id\n\t\t\t\t)\n\t\t\t\tINSERT INTO athena.authorization_revisions (scope_kind, organization_id, revision)\n\t\t\t\tSELECT 'organization', $1, 1\n\t\t\t\tWHERE NOT EXISTS (SELECT 1 FROM updated)`,\n\t\t\t\t[organizationId],\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tawait this.db.query(\n\t\t\t`UPDATE athena.authorization_revisions\n\t\t\t SET revision = revision + 1, updated_at = NOW()\n\t\t\t WHERE scope_kind = 'platform' AND organization_id IS NULL`,\n\t\t);\n\t}\n\n\tprivate async writeAudit(input: {\n\t\taction: string;\n\t\tactorUserId?: string;\n\t\tafter?: unknown;\n\t\tbefore?: unknown;\n\t\torganizationId?: string | null;\n\t\ttargetId: string;\n\t\ttargetKind: string;\n\t}): Promise<void> {\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_audit_log (\n\t\t\t\tid, actor_user_id, action, target_kind, target_id, organization_id,\n\t\t\t\tbefore_state, after_state, created_at\n\t\t\t) VALUES ($1, $2, $3, $4, $5, $6, $7::jsonb, $8::jsonb, NOW())`,\n\t\t\t[\n\t\t\t\tcrypto.randomUUID(),\n\t\t\t\tinput.actorUserId ?? null,\n\t\t\t\tinput.action,\n\t\t\t\tinput.targetKind,\n\t\t\t\tinput.targetId,\n\t\t\t\tinput.organizationId ?? null,\n\t\t\t\tJSON.stringify(input.before ?? {}),\n\t\t\t\tJSON.stringify(input.after ?? {}),\n\t\t\t],\n\t\t);\n\t}\n}\n","import { checksumMigrationSql } from \"../../migrations/checksum.ts\";\nimport { PostgresAuthorizationStore } from \"../../runtime/authorization/postgres.ts\";\nimport {\n  ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n  ATHENA_AUTH_SCHEMA_GENERATION,\n} from \"../contract/index.ts\";\nimport { ATHENA_AUTHORIZATION_ASSIGNMENT_SQL, ATHENA_AUTHORIZATION_CONSTRAINTS_SQL } from \"./authorization-sql.ts\";\nimport type { AthenaAuthDatabase } from \"./database.ts\";\nimport { assertQueryResult } from \"./database.ts\";\nimport { ATHENA_AUTH_EMAIL_SCHEMA_STATEMENTS } from \"./email/schema-sql.ts\";\nimport { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport {\n  type AthenaAuthLedgerHealth,\n  classifyAuthLedgerQueryError,\n  healthFromAuthPlan,\n} from \"./ledger-health.ts\";\nimport type { AthenaAuthSchemaDrift } from \"./schema-inspect.ts\";\nimport { inspectAthenaAuthExpectations } from \"./schema-inspect.ts\";\nimport {\n  ATHENA_AUTH_MIGRATION_EXPECTATIONS,\n  type MigrationRepairability,\n  repairabilityForAuthMigration,\n} from \"./schema-manifest.ts\";\n\nconst SCHEMA_STATEMENTS: ReadonlyArray<{ name: string; sql: string; version: number }> = [\n  {\n    name: \"001_create_schema\",\n    sql: \"CREATE SCHEMA IF NOT EXISTS athena\",\n    version: 0,\n  },\n  {\n    name: \"001_create_core_tables\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.users (\n    id TEXT PRIMARY KEY,\n    name TEXT,\n    email TEXT UNIQUE,\n    email_verified BOOLEAN NOT NULL DEFAULT FALSE,\n    image TEXT,\n    username TEXT UNIQUE,\n    display_username TEXT,\n    two_factor_enabled BOOLEAN NOT NULL DEFAULT FALSE,\n    role TEXT,\n    banned BOOLEAN NOT NULL DEFAULT FALSE,\n    ban_reason TEXT,\n    ban_expires TIMESTAMPTZ,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.sessions (\n    id TEXT PRIMARY KEY,\n    expires_at TIMESTAMPTZ NOT NULL,\n    token TEXT NOT NULL UNIQUE,\n    ip_address TEXT,\n    user_agent TEXT,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    impersonated_by TEXT,\n    active_organization_id TEXT,\n    active BOOLEAN NOT NULL DEFAULT TRUE,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.accounts (\n    id TEXT PRIMARY KEY,\n    account_id TEXT NOT NULL,\n    provider_id TEXT NOT NULL,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    access_token TEXT,\n    refresh_token TEXT,\n    id_token TEXT,\n    access_token_expires_at TIMESTAMPTZ,\n    refresh_token_expires_at TIMESTAMPTZ,\n    scope TEXT,\n    password TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (provider_id, account_id)\n);\nCREATE TABLE IF NOT EXISTS athena.verifications (\n    id TEXT PRIMARY KEY,\n    identifier TEXT NOT NULL,\n    value TEXT NOT NULL,\n    expires_at TIMESTAMPTZ NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_users_email ON athena.users (email);\nCREATE INDEX IF NOT EXISTS idx_users_username ON athena.users (username);\nCREATE INDEX IF NOT EXISTS idx_sessions_token ON athena.sessions (token);\nCREATE INDEX IF NOT EXISTS idx_sessions_user_id ON athena.sessions (user_id);\nCREATE INDEX IF NOT EXISTS idx_sessions_expires_at ON athena.sessions (expires_at);\nCREATE INDEX IF NOT EXISTS idx_accounts_user_id ON athena.accounts (user_id);\nCREATE INDEX IF NOT EXISTS idx_accounts_provider_account ON athena.accounts (provider_id, account_id);\n`,\n    version: 1,\n  },\n  {\n    name: \"002_create_organization_tables\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.organization (\n    id TEXT PRIMARY KEY,\n    name TEXT NOT NULL,\n    slug TEXT NOT NULL UNIQUE,\n    logo TEXT,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.member (\n    id TEXT PRIMARY KEY,\n    organization_id TEXT NOT NULL REFERENCES athena.organization (id) ON DELETE CASCADE,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    role TEXT NOT NULL DEFAULT 'member',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (organization_id, user_id)\n);\nCREATE TABLE IF NOT EXISTS athena.invitation (\n    id TEXT PRIMARY KEY,\n    organization_id TEXT NOT NULL REFERENCES athena.organization (id) ON DELETE CASCADE,\n    email TEXT NOT NULL,\n    role TEXT NOT NULL DEFAULT 'member',\n    status TEXT NOT NULL DEFAULT 'pending',\n    inviter_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    expires_at TIMESTAMPTZ NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_organization_slug ON athena.organization (slug);\nCREATE INDEX IF NOT EXISTS idx_member_organization_id ON athena.member (organization_id);\nCREATE INDEX IF NOT EXISTS idx_member_user_id ON athena.member (user_id);\nCREATE INDEX IF NOT EXISTS idx_invitation_organization_id ON athena.invitation (organization_id);\nCREATE INDEX IF NOT EXISTS idx_invitation_email ON athena.invitation (email);\n`,\n    version: 2,\n  },\n  {\n    name: \"003_create_two_factor_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.two_factor (\n    id TEXT PRIMARY KEY,\n    secret TEXT NOT NULL,\n    backup_codes TEXT,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (user_id)\n);\nCREATE INDEX IF NOT EXISTS idx_two_factor_user_id ON athena.two_factor (user_id);\n`,\n    version: 3,\n  },\n  {\n    name: \"004_create_api_key_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.api_keys (\n    id TEXT PRIMARY KEY,\n    name TEXT,\n    start TEXT,\n    prefix TEXT,\n    key TEXT NOT NULL UNIQUE,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    refill_interval INTEGER,\n    refill_amount INTEGER,\n    last_refill_at TIMESTAMPTZ,\n    enabled BOOLEAN NOT NULL DEFAULT true,\n    rate_limit_enabled BOOLEAN NOT NULL DEFAULT false,\n    rate_limit_time_window INTEGER,\n    rate_limit_max INTEGER,\n    request_count INTEGER DEFAULT 0,\n    remaining INTEGER,\n    last_request TIMESTAMPTZ,\n    expires_at TIMESTAMPTZ,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    permissions TEXT,\n    metadata TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_api_keys_user_id ON athena.api_keys (user_id);\n`,\n    version: 4,\n  },\n  {\n    name: \"005_create_passkey_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.passkeys (\n    id TEXT PRIMARY KEY,\n    name TEXT NOT NULL,\n    public_key TEXT NOT NULL,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    credential_id TEXT NOT NULL UNIQUE,\n    counter BIGINT NOT NULL DEFAULT 0,\n    device_type TEXT NOT NULL DEFAULT 'singleDevice',\n    backed_up BOOLEAN NOT NULL DEFAULT FALSE,\n    transports TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_passkeys_user_id ON athena.passkeys (user_id);\nCREATE INDEX IF NOT EXISTS idx_passkeys_credential_id ON athena.passkeys (credential_id);\n`,\n    version: 5,\n  },\n  {\n    name: \"009_add_last_sign_in_at_to_users\",\n    sql: `\nALTER TABLE athena.users ADD COLUMN IF NOT EXISTS last_sign_in_at TIMESTAMPTZ;\nCREATE INDEX IF NOT EXISTS idx_users_last_sign_in_at ON athena.users (last_sign_in_at);\n`,\n    version: 9,\n  },\n  {\n    name: \"021_runtime_key_and_ledger\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.auth_schema_migrations (\n    version INTEGER PRIMARY KEY,\n    name TEXT NOT NULL,\n    applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.runtime_key (\n    key_id TEXT PRIMARY KEY,\n    purpose TEXT NOT NULL,\n    key_material TEXT NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    activated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    retired_at TIMESTAMPTZ\n);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_runtime_key_active_purpose\n    ON athena.runtime_key (purpose)\n    WHERE retired_at IS NULL;\n`,\n    version: 21,\n  },\n  {\n    name: \"022_add_updated_at_to_passkeys\",\n    sql: `\nALTER TABLE athena.passkeys ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();\n`,\n    version: 22,\n  },\n  {\n    name: \"023_auth_observability\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.audit_log_auth (\n    id UUID PRIMARY KEY,\n    event_id UUID NOT NULL,\n    trace_id TEXT NOT NULL,\n    event TEXT NOT NULL,\n    actor_kind TEXT NOT NULL,\n    actor_user_id TEXT,\n    actor_session_id TEXT,\n    subject_type TEXT,\n    subject_id TEXT,\n    organization_id TEXT,\n    previous JSONB,\n    result JSONB,\n    request_ip TEXT,\n    request_user_agent TEXT,\n    outcome TEXT NOT NULL DEFAULT 'success',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE UNIQUE INDEX IF NOT EXISTS audit_log_auth_event_id_idx\n    ON athena.audit_log_auth(event_id);\nCREATE INDEX IF NOT EXISTS audit_log_auth_trace_id_idx\n    ON athena.audit_log_auth(trace_id);\nCREATE INDEX IF NOT EXISTS audit_log_auth_event_created_at_idx\n    ON athena.audit_log_auth(event, created_at DESC);\nCREATE INDEX IF NOT EXISTS audit_log_auth_actor_user_id_idx\n    ON athena.audit_log_auth(actor_user_id, created_at DESC);\nCREATE INDEX IF NOT EXISTS audit_log_auth_subject_idx\n    ON athena.audit_log_auth(subject_type, subject_id, created_at DESC);\nCREATE INDEX IF NOT EXISTS audit_log_auth_organization_id_idx\n    ON athena.audit_log_auth(organization_id, created_at DESC);\nCREATE TABLE IF NOT EXISTS athena.traces_auth (\n    id UUID PRIMARY KEY,\n    trace_id TEXT NOT NULL,\n    event_id UUID,\n    operation TEXT,\n    method TEXT NOT NULL,\n    path TEXT NOT NULL,\n    actor_kind TEXT,\n    actor_user_id TEXT,\n    organization_id TEXT,\n    outcome TEXT NOT NULL,\n    status_code INTEGER,\n    authorize_ms DOUBLE PRECISION,\n    validate_ms DOUBLE PRECISION,\n    before_hooks_ms DOUBLE PRECISION,\n    transaction_ms DOUBLE PRECISION,\n    after_hooks_ms DOUBLE PRECISION,\n    total_ms DOUBLE PRECISION NOT NULL,\n    error_code TEXT,\n    error_phase TEXT,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    started_at TIMESTAMPTZ NOT NULL,\n    completed_at TIMESTAMPTZ NOT NULL\n);\nCREATE INDEX IF NOT EXISTS traces_auth_trace_id_idx\n    ON athena.traces_auth(trace_id);\nCREATE INDEX IF NOT EXISTS traces_auth_event_id_idx\n    ON athena.traces_auth(event_id);\nCREATE INDEX IF NOT EXISTS traces_auth_operation_started_at_idx\n    ON athena.traces_auth(operation, started_at DESC);\nCREATE INDEX IF NOT EXISTS traces_auth_outcome_started_at_idx\n    ON athena.traces_auth(outcome, started_at DESC);\nCREATE INDEX IF NOT EXISTS traces_auth_actor_user_id_idx\n    ON athena.traces_auth(actor_user_id, started_at DESC);\n`,\n    version: 23,\n  },\n  ...ATHENA_AUTH_EMAIL_SCHEMA_STATEMENTS,\n  {\n    name: \"025_add_aaguid_to_passkeys\",\n    sql: `\nALTER TABLE athena.passkeys ADD COLUMN IF NOT EXISTS aaguid TEXT;\n`,\n    version: 25,\n  },\n  {\n    name: \"026_passkey_resident_key_and_registration_transactions\",\n    sql: `\nALTER TABLE athena.passkeys ADD COLUMN IF NOT EXISTS resident_key BOOLEAN;\nCREATE TABLE IF NOT EXISTS athena.passkey_registration_transactions (\n    id TEXT PRIMARY KEY,\n    challenge_hash TEXT NOT NULL,\n    rp_id TEXT NOT NULL,\n    user_handle TEXT NOT NULL,\n    mode TEXT NOT NULL,\n    context TEXT,\n    expires_at TIMESTAMPTZ NOT NULL,\n    consumed_at TIMESTAMPTZ,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_passkey_reg_tx_challenge_hash\n    ON athena.passkey_registration_transactions (challenge_hash);\nCREATE INDEX IF NOT EXISTS idx_passkey_reg_tx_expires_at\n    ON athena.passkey_registration_transactions (expires_at);\n`,\n    version: 26,\n  },\n  {\n    name: \"027_auth_bridge_codes\",\n    sql: `CREATE TABLE IF NOT EXISTS athena.auth_bridge_codes (id TEXT PRIMARY KEY, code_hash TEXT NOT NULL UNIQUE, session_id TEXT NOT NULL REFERENCES athena.sessions (id) ON DELETE CASCADE, user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE, organization_id TEXT, destination_origin TEXT NOT NULL, redirect_path TEXT NOT NULL, expires_at TIMESTAMPTZ NOT NULL, consumed_at TIMESTAMPTZ, consume_reason TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_expires_at ON athena.auth_bridge_codes (expires_at); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_session_id ON athena.auth_bridge_codes (session_id); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_user_id ON athena.auth_bridge_codes (user_id); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_outstanding_session ON athena.auth_bridge_codes (session_id) WHERE consumed_at IS NULL;`,\n    version: 27,\n  },\n  {\n    name: \"028_oauth_transactions\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.oauth_transactions (\n    id TEXT PRIMARY KEY,\n    state_hash TEXT NOT NULL UNIQUE,\n    provider_id TEXT NOT NULL,\n    intent TEXT NOT NULL,\n    code_challenge_method TEXT NOT NULL,\n    pkce_verifier_ciphertext TEXT NOT NULL,\n    nonce_hash TEXT NOT NULL,\n    redirect_uri TEXT NOT NULL,\n    user_id TEXT,\n    expires_at TIMESTAMPTZ NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_oauth_transactions_expires_at\n    ON athena.oauth_transactions (expires_at);\n`,\n    version: 28,\n  },\n  {\n    name: \"029_notification_preferences\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.notification_preferences (\n    id TEXT PRIMARY KEY,\n    user_id TEXT NOT NULL,\n    organization_id TEXT NULL,\n    channel TEXT NOT NULL,\n    topic TEXT NOT NULL,\n    enabled BOOLEAN NOT NULL DEFAULT TRUE,\n    digest TEXT NULL,\n    metadata JSONB NOT NULL DEFAULT '{}'::jsonb,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE UNIQUE INDEX IF NOT EXISTS uq_notification_preferences_user_channel_topic\n  ON athena.notification_preferences (user_id, channel, topic)\n  WHERE organization_id IS NULL;\nCREATE UNIQUE INDEX IF NOT EXISTS uq_notification_preferences_user_org_channel_topic\n  ON athena.notification_preferences (user_id, organization_id, channel, topic)\n  WHERE organization_id IS NOT NULL;\n`,\n    version: 29,\n  },\n  {\n    name: \"030_organization_created_by\",\n    sql: `\nALTER TABLE athena.organization\n  ADD COLUMN IF NOT EXISTS created_by_user_id TEXT;\nUPDATE athena.organization AS org\nSET created_by_user_id = founder.user_id\nFROM (\n  SELECT DISTINCT ON (organization_id)\n    organization_id,\n    user_id\n  FROM athena.member\n  WHERE role = 'owner'\n  ORDER BY organization_id, created_at ASC, id ASC\n) AS founder\nWHERE org.created_by_user_id IS NULL\n  AND founder.organization_id = org.id;\nCREATE INDEX IF NOT EXISTS idx_organization_created_by_user_id\n  ON athena.organization (created_by_user_id);\n`,\n    version: 30,\n  },\n  {\n    name: \"031_authorization_assignment\",\n    sql: ATHENA_AUTHORIZATION_ASSIGNMENT_SQL,\n    version: 31,\n  },\n  {\n    name: \"032_authorization_assignment_constraints\",\n    sql: ATHENA_AUTHORIZATION_CONSTRAINTS_SQL,\n    version: 32,\n  },\n];\n\nexport type AthenaAuthSchemaDirection =\n  | \"current\"\n  | \"upgrade-required\"\n  | \"runtime-too-old\"\n  | \"history-diverged\";\n\nexport interface AthenaAuthLedgerEntry {\n  checksum?: string | null;\n  name: string;\n  version: number;\n}\n\nexport interface AthenaAuthSchemaCompatibility {\n  checksumMismatch: number[];\n  compatible: boolean;\n  current: number;\n  direction: AthenaAuthSchemaDirection;\n  expected: number;\n  missing: number[];\n  unknown: number[];\n}\n\nexport type AthenaAuthSchemaStatus = AthenaAuthSchemaCompatibility;\n\nexport type AthenaAuthLedgerState =\n  | \"absent\"\n  | \"applied\"\n  | \"checksum-mismatch\"\n  | \"unknown\";\n\nexport type AthenaAuthSchemaState = \"unknown\" | \"healthy\" | \"drift\";\n\nexport type AthenaAuthMigrationAction =\n  | \"none\"\n  | \"apply\"\n  | \"repair\"\n  | \"blocked\";\n\nexport interface AthenaAuthMigrationPlanEntry {\n  version: number;\n  name: string;\n  checksum: string;\n  ledgerState: AthenaAuthLedgerState;\n  schemaState: AthenaAuthSchemaState;\n  action: AthenaAuthMigrationAction;\n  repairability: MigrationRepairability;\n  drift?: AthenaAuthSchemaDrift[];\n}\n\nexport interface AthenaAuthMigrationPlan {\n  entries: AthenaAuthMigrationPlanEntry[];\n  appliedCount: number;\n  pendingCount: number;\n  driftCount: number;\n  conflictCount: number;\n  hasBlockingDrift: boolean;\n  health: AthenaAuthLedgerHealth;\n}\n\nexport interface AthenaAuthRepairResult {\n  repaired: AthenaAuthMigrationPlanEntry[];\n  skipped: AthenaAuthMigrationPlanEntry[];\n  dryRun: boolean;\n}\n\nfunction ledgeredStatements(): Array<(typeof SCHEMA_STATEMENTS)[number]> {\n  return SCHEMA_STATEMENTS.filter((statement) => statement.version > 0).sort(\n    (a, b) => a.version - b.version\n  );\n}\n\nfunction statementByVersion(\n  version: number\n): (typeof SCHEMA_STATEMENTS)[number] | undefined {\n  return SCHEMA_STATEMENTS.find((statement) => statement.version === version);\n}\n\nexport interface AthenaAuthCanonicalMigration {\n  name: string;\n  sql: string;\n  version: number;\n}\n\n/** Package-owned Auth generations (ledgered, version > 0). Execution SSOT. */\nexport function listAthenaAuthCanonicalMigrations(): AthenaAuthCanonicalMigration[] {\n  return ledgeredStatements().map((statement) => ({\n    name: statement.name,\n    sql: statement.sql,\n    version: statement.version,\n  }));\n}\n\nexport function getAthenaAuthExpectedLedger(): AthenaAuthLedgerEntry[] {\n  return listAthenaAuthCanonicalMigrations().map((statement) => ({\n    checksum: checksumMigrationSql(statement.sql),\n    name: statement.name,\n    version: statement.version,\n  }));\n}\n\nexport function getAthenaAuthSchemaManifest(): Record<string, string> {\n  const manifest: Record<string, string> = {};\n  for (const entry of getAthenaAuthExpectedLedger()) {\n    manifest[String(entry.version).padStart(3, \"0\")] = entry.checksum ?? \"\";\n  }\n  return manifest;\n}\n\nfunction maxVersion(versions: Iterable<number>): number {\n  let max = 0;\n  for (const version of versions) {\n    if (version > max) {\n      max = version;\n    }\n  }\n  return max;\n}\n\nexport function compareAthenaAuthLedgers(\n  actual: ReadonlyArray<Pick<AthenaAuthLedgerEntry, \"checksum\" | \"version\">>,\n  expected: readonly AthenaAuthLedgerEntry[] = getAthenaAuthExpectedLedger()\n): AthenaAuthSchemaCompatibility {\n  const expectedByVersion = new Map(\n    expected.map((entry) => [entry.version, entry])\n  );\n  const actualByVersion = new Map<number, (typeof actual)[number]>();\n  for (const row of actual) {\n    const version = Number(row.version);\n    if (!Number.isFinite(version)) {\n      continue;\n    }\n    actualByVersion.set(version, row);\n  }\n\n  const missing: number[] = [];\n  const checksumMismatch: number[] = [];\n  const checksumMissing: number[] = [];\n  for (const entry of expected) {\n    const applied = actualByVersion.get(entry.version);\n    if (!applied) {\n      missing.push(entry.version);\n      continue;\n    }\n    const checksum = applied.checksum?.trim() ?? \"\";\n    if (!checksum) {\n      checksumMissing.push(entry.version);\n      continue;\n    }\n    if (entry.checksum && checksum !== entry.checksum) {\n      checksumMismatch.push(entry.version);\n    }\n  }\n\n  const unknown = [...actualByVersion.keys()]\n    .filter((version) => !expectedByVersion.has(version))\n    .sort((a, b) => a - b);\n  const current = maxVersion(actualByVersion.keys());\n  const expectedGeneration = maxVersion(expected.map((entry) => entry.version));\n\n  const appliedExpected = [...actualByVersion.keys()].filter((version) =>\n    expectedByVersion.has(version)\n  );\n  const maxAppliedExpected = maxVersion(appliedExpected);\n  const hasHole = missing.some((version) => version < maxAppliedExpected);\n  const hasNewerUnknown = unknown.some((version) => version > expectedGeneration);\n\n  let direction: AthenaAuthSchemaDirection;\n  if (hasNewerUnknown) {\n    direction = \"runtime-too-old\";\n  } else if (checksumMismatch.length > 0 || unknown.length > 0 || hasHole) {\n    direction = \"history-diverged\";\n  } else if (missing.length > 0 || checksumMissing.length > 0) {\n    direction = \"upgrade-required\";\n  } else {\n    direction = \"current\";\n  }\n\n  return {\n    checksumMismatch,\n    compatible: direction === \"current\",\n    current,\n    direction,\n    expected: expectedGeneration || ATHENA_AUTH_SCHEMA_GENERATION,\n    missing,\n    unknown,\n  };\n}\n\nexport function toAthenaAuthSchemaCompatibility(\n  current: number,\n  expected: number = ATHENA_AUTH_SCHEMA_GENERATION\n): AthenaAuthSchemaCompatibility {\n  const direction: AthenaAuthSchemaDirection =\n    current === expected\n      ? \"current\"\n      : current > expected\n        ? \"runtime-too-old\"\n        : \"upgrade-required\";\n  return {\n    checksumMismatch: [],\n    compatible: direction === \"current\",\n    current,\n    direction,\n    expected,\n    missing: [],\n    unknown: current > expected ? [current] : [],\n  };\n}\n\nfunction expectedName(version: number): string {\n  return (\n    getAthenaAuthExpectedLedger().find((entry) => entry.version === version)\n      ?.name ?? String(version).padStart(3, \"0\")\n  );\n}\n\nfunction formatMissingLines(versions: readonly number[]): string {\n  if (versions.length === 0) {\n    return \"\";\n  }\n  return `\\n\\nMissing:\\n${versions.map((version) => `    ${expectedName(version)}`).join(\"\\n\")}`;\n}\n\nfunction formatSchemaCompatibilityError(status: AthenaAuthSchemaCompatibility): {\n  code: string;\n  message: string;\n} {\n  if (status.direction === \"runtime-too-old\") {\n    return {\n      code: \"ATHENA_AUTH_SCHEMA_TOO_NEW\",\n      message: `ATHENA_AUTH_SCHEMA_TOO_NEW\\n\\nEmbedded Athena Auth requires schema generation ${status.expected}.\\nDatabase currently has generation ${status.current}.\\n\\nUpgrade @xylex-group/athena.`,\n    };\n  }\n  if (status.direction === \"history-diverged\") {\n    const mismatch =\n      status.checksumMismatch.length > 0\n        ? `\\n\\nChecksum mismatch:\\n${status.checksumMismatch.map((version) => `    ${expectedName(version)}`).join(\"\\n\")}`\n        : \"\";\n    const unknown =\n      status.unknown.length > 0\n        ? `\\n\\nUnknown:\\n${status.unknown.map((version) => `    ${version}`).join(\"\\n\")}`\n        : \"\";\n    return {\n      code: \"ATHENA_AUTH_SCHEMA_DRIFT\",\n      message: `ATHENA_AUTH_SCHEMA_DRIFT\\n\\nEmbedded Athena Auth schema history diverged.\\nRuntime generation ${status.expected}. Database generation ${status.current}.\\n\\nRun:\\n\\n    npx athena-js migrate\\n${formatMissingLines(status.missing)}${mismatch}${unknown}`,\n    };\n  }\n  if (status.current === 0) {\n    return {\n      code: \"ATHENA_AUTH_SCHEMA_MISSING\",\n      message:\n        \"ATHENA_AUTH_SCHEMA_MISSING\\n\\nAthena Auth schema is not installed.\\n\\nRun:\\n\\n    npx athena-js migrate\",\n    };\n  }\n  return {\n    code: \"ATHENA_AUTH_SCHEMA_OUTDATED\",\n    message: `ATHENA_AUTH_SCHEMA_OUTDATED\\n\\nEmbedded Athena Auth requires schema generation ${status.expected}.\\nDatabase currently has generation ${status.current}.\\n\\nRun:\\n\\n    npx athena-js migrate${formatMissingLines(status.missing)}`,\n  };\n}\n\nasync function readAuthSchemaLedgerRows(\n  db: AthenaAuthDatabase\n): Promise<AthenaAuthLedgerEntry[]> {\n  try {\n    const applied = assertQueryResult<{\n      checksum?: string | null;\n      name?: string;\n      version: number;\n    }>(\n      await db.query<{\n        checksum?: string | null;\n        name?: string;\n        version: number;\n      }>(\n        \"SELECT version, name, checksum FROM athena.auth_schema_migrations ORDER BY version\"\n      ),\n      \"reading migration ledger\"\n    );\n    return applied.rows.map((row) => ({\n      checksum: row.checksum,\n      name: row.name ?? expectedName(Number(row.version)),\n      version: Number(row.version),\n    }));\n  } catch (error) {\n    if (\n      error instanceof AthenaAuthRuntimeError &&\n      error.code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\"\n    ) {\n      throw error;\n    }\n    const kind = classifyAuthLedgerQueryError(error);\n    if (kind === \"UNINITIALIZED\") {\n      return [];\n    }\n    try {\n      const applied = assertQueryResult<{ name?: string; version: number }>(\n        await db.query<{ name?: string; version: number }>(\n          \"SELECT version, name FROM athena.auth_schema_migrations ORDER BY version\"\n        ),\n        \"reading migration ledger (legacy columns)\"\n      );\n      return applied.rows.map((row) => ({\n        name: row.name ?? expectedName(Number(row.version)),\n        version: Number(row.version),\n      }));\n    } catch (inner) {\n      if (\n        inner instanceof AthenaAuthRuntimeError &&\n        inner.code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\"\n      ) {\n        throw inner;\n      }\n      if (classifyAuthLedgerQueryError(inner) === \"UNINITIALIZED\") {\n        return [];\n      }\n      throw wrapAuthLedgerQueryError(inner);\n    }\n  }\n}\n\nfunction wrapAuthLedgerQueryError(error: unknown): AthenaAuthRuntimeError {\n  if (\n    error instanceof AthenaAuthRuntimeError &&\n    (error.code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" ||\n      error.code === \"ATHENA_AUTH_LEDGER_UNREACHABLE\" ||\n      error.code === \"ATHENA_AUTH_LEDGER_PERMISSION_DENIED\")\n  ) {\n    return error;\n  }\n  const kind = classifyAuthLedgerQueryError(error);\n  if (kind === \"INVALID_LEDGER\") {\n    if (error instanceof AthenaAuthRuntimeError) {\n      return error;\n    }\n    return new AthenaAuthRuntimeError(\n      500,\n      \"ATHENA_AUTH_DATABASE_RESULT_INVALID\",\n      { cause: error, code: \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" }\n    );\n  }\n  if (kind === \"PERMISSION_DENIED\") {\n    return new AthenaAuthRuntimeError(\n      403,\n      [\n        \"ATHENA_AUTH_LEDGER_PERMISSION_DENIED\",\n        \"\",\n        \"Embedded Auth cannot read athena.auth_schema_migrations.\",\n        \"\",\n        error instanceof Error ? error.message : String(error),\n      ].join(\"\\n\"),\n      { cause: error, code: \"ATHENA_AUTH_LEDGER_PERMISSION_DENIED\" }\n    );\n  }\n  const causeText = error instanceof Error ? error.message : String(error);\n  const causeFirstLine = causeText.split(/\\r?\\n/, 1)[0] ?? causeText;\n  return new AthenaAuthRuntimeError(\n    503,\n    [\n      `ATHENA_AUTH_LEDGER_UNREACHABLE: ${causeFirstLine}`,\n      \"\",\n      \"Embedded Auth could not reach the database to read the migration ledger.\",\n      \"\",\n      causeText,\n    ].join(\"\\n\"),\n    { cause: error, code: \"ATHENA_AUTH_LEDGER_UNREACHABLE\" }\n  );\n}\n\n/**\n * Session advisory lock on this Auth database connection.\n * Distinct from application `pg_advisory_lock(ATHA, MIGS)` — that lock is held\n * on the migrate backend session and does not cover this connection.\n */\nexport async function withAthenaAuthMigrationLock<T>(\n  db: AthenaAuthDatabase,\n  fn: () => Promise<T>\n): Promise<T> {\n  await db.query(`SELECT pg_advisory_lock($1)`, [\n    ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n  ]);\n  try {\n    return await fn();\n  } finally {\n    try {\n      await db.query(`SELECT pg_advisory_unlock($1)`, [\n        ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n      ]);\n    } catch {\n      // Session end / pool release drops session-level locks.\n    }\n  }\n}\n\nfunction formatDriftBlock(entries: readonly AthenaAuthMigrationPlanEntry[]): string {\n  const drifted = entries.filter(\n    (entry) => entry.schemaState === \"drift\" || entry.action === \"repair\"\n  );\n  if (drifted.length === 0) {\n    return \"\";\n  }\n  const blocks = drifted.map((entry) => {\n    const missing = (entry.drift ?? [])\n      .map((item) => `    ${item.kind.replace(\"missing-\", \"\")} ${item.object}`)\n      .join(\"\\n\");\n    return [\n      entry.name,\n      \"\",\n      \"  Missing:\",\n      missing || \"    (structural invariant)\",\n    ].join(\"\\n\");\n  });\n  return blocks.join(\"\\n\\n\");\n}\n\n/**\n * Sole planning authority for embedded Auth migrations.\n * Combines ledger history with physical schema expectations.\n */\nexport async function planAthenaAuthSchema(\n  db: AthenaAuthDatabase,\n  options: { inspectSchema?: boolean } = {}\n): Promise<AthenaAuthMigrationPlan> {\n  const inspectSchema = options.inspectSchema !== false;\n  const expected = getAthenaAuthExpectedLedger();\n  let actualRows: AthenaAuthLedgerEntry[] = [];\n  try {\n    actualRows = await readAuthSchemaLedgerRows(db);\n  } catch (error) {\n    throw wrapAuthLedgerQueryError(error);\n  }\n\n  const actualByVersion = new Map(\n    actualRows.map((row) => [Number(row.version), row])\n  );\n  const expectedVersions = new Set(expected.map((entry) => entry.version));\n\n  const entries: AthenaAuthMigrationPlanEntry[] = [];\n\n  for (const entry of expected) {\n    const applied = actualByVersion.get(entry.version);\n    let ledgerState: AthenaAuthLedgerState = \"absent\";\n    if (applied) {\n      const checksum = applied.checksum?.trim() ?? \"\";\n      if (\n        entry.checksum &&\n        checksum &&\n        checksum !== entry.checksum\n      ) {\n        ledgerState = \"checksum-mismatch\";\n      } else {\n        ledgerState = \"applied\";\n      }\n    }\n\n    let schemaState: AthenaAuthSchemaState = \"unknown\";\n    let drift: AthenaAuthSchemaDrift[] | undefined;\n    if (inspectSchema && ledgerState === \"applied\") {\n      const expectations =\n        ATHENA_AUTH_MIGRATION_EXPECTATIONS[entry.version] ?? [];\n      if (expectations.length > 0) {\n        try {\n          drift = await inspectAthenaAuthExpectations(db, expectations);\n          schemaState = drift.length > 0 ? \"drift\" : \"healthy\";\n        } catch (error) {\n          if (\n            error instanceof AthenaAuthRuntimeError &&\n            error.code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\"\n          ) {\n            throw error;\n          }\n          schemaState = \"unknown\";\n        }\n      } else {\n        schemaState = \"healthy\";\n      }\n    }\n\n    let action: AthenaAuthMigrationAction = \"none\";\n    if (ledgerState === \"absent\") {\n      action = \"apply\";\n    } else if (ledgerState === \"checksum-mismatch\") {\n      action = \"blocked\";\n    } else if (schemaState === \"drift\") {\n      action = \"repair\";\n    }\n\n    entries.push({\n      version: entry.version,\n      name: entry.name,\n      checksum: entry.checksum ?? \"\",\n      ledgerState,\n      schemaState,\n      action,\n      repairability: repairabilityForAuthMigration(),\n      drift,\n    });\n  }\n\n  for (const [version, row] of actualByVersion) {\n    if (expectedVersions.has(version)) {\n      continue;\n    }\n    entries.push({\n      version,\n      name: row.name ?? String(version).padStart(3, \"0\"),\n      checksum: row.checksum ?? \"\",\n      ledgerState: \"unknown\",\n      schemaState: \"unknown\",\n      action: \"blocked\",\n      repairability: \"manual\",\n    });\n  }\n\n  entries.sort((a, b) => a.version - b.version);\n\n  const appliedCount = entries.filter((e) => e.ledgerState === \"applied\" && e.schemaState !== \"drift\").length;\n  const pendingCount = entries.filter((e) => e.action === \"apply\").length;\n  const driftCount = entries.filter((e) => e.schemaState === \"drift\").length;\n  const conflictCount = entries.filter(\n    (e) => e.action === \"blocked\" || e.ledgerState === \"checksum-mismatch\"\n  ).length;\n  const hasBlockingDrift = driftCount > 0;\n\n  return {\n    entries,\n    appliedCount,\n    pendingCount,\n    driftCount,\n    conflictCount,\n    hasBlockingDrift,\n    health: healthFromAuthPlan({\n      conflictCount,\n      entries,\n      hasBlockingDrift,\n    }),\n  };\n}\n\nexport async function repairAthenaAuthSchema(\n  db: AthenaAuthDatabase,\n  options: { dryRun?: boolean } = {}\n): Promise<AthenaAuthRepairResult> {\n  return withAthenaAuthMigrationLock(db, async () => {\n    const plan = await planAthenaAuthSchema(db, { inspectSchema: true });\n    const toRepair = plan.entries.filter((entry) => entry.action === \"repair\");\n    const skipped = toRepair.filter((entry) => entry.repairability !== \"idempotent\");\n    const repairable = toRepair.filter((entry) => entry.repairability === \"idempotent\");\n\n    if (options.dryRun) {\n      return { repaired: repairable, skipped, dryRun: true };\n    }\n\n    if (skipped.length > 0 && repairable.length === 0) {\n      throw new AthenaAuthRuntimeError(\n        500,\n        [\n          \"ATHENA_AUTH_SCHEMA_REPAIR_MANUAL\",\n          \"\",\n          \"Athena cannot safely repair these migrations automatically.\",\n          \"\",\n          ...skipped.map((entry) => `  ${entry.name}`),\n        ].join(\"\\n\"),\n        { code: \"ATHENA_AUTH_SCHEMA_REPAIR_MANUAL\" }\n      );\n    }\n\n    await db.transaction(async (tx) => {\n      // Transaction-scoped lock on the same key as the session lock (reentrant\n      // in this session; blocks other Auth connections).\n      await tx.query(`SELECT pg_advisory_xact_lock($1)`, [\n        ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n      ]);\n      for (const entry of repairable) {\n        const statement = statementByVersion(entry.version);\n        if (!statement) {\n          continue;\n        }\n        await tx.query(statement.sql);\n      }\n    });\n\n    return { repaired: repairable, skipped, dryRun: false };\n  });\n}\n\nexport async function migrateAthenaAuthSchema(\n  db: AthenaAuthDatabase,\n  options: { allowDrift?: boolean } = {}\n): Promise<AthenaAuthSchemaStatus> {\n  return withAthenaAuthMigrationLock(db, async () => {\n    const expected = getAthenaAuthExpectedLedger();\n\n    // Fail closed: ledger-applied migrations with physical drift must not be\n    // silently repaired by normal migrate.\n    if (!options.allowDrift) {\n      const plan = await planAthenaAuthSchema(db, { inspectSchema: true });\n      if (plan.hasBlockingDrift) {\n        throw new AthenaAuthRuntimeError(\n          500,\n          [\n            \"ATHENA_AUTH_SCHEMA_DRIFT\",\n            \"\",\n            \"Embedded Auth schema drift detected\",\n            \"\",\n            formatDriftBlock(plan.entries),\n            \"\",\n            \"Migration history says these migrations were already applied.\",\n            \"\",\n            \"Athena will not silently modify a drifted schema.\",\n            \"\",\n            \"Run:\",\n            \"\",\n            \"    athena-js migrate repair\",\n          ].join(\"\\n\"),\n          { code: \"ATHENA_AUTH_SCHEMA_DRIFT\" }\n        );\n      }\n    }\n\n    await db.transaction(async (tx) => {\n      await tx.query(`SELECT pg_advisory_xact_lock($1)`, [\n        ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n      ]);\n      await tx.query(\"CREATE SCHEMA IF NOT EXISTS athena\");\n      await tx.query(`\n      CREATE TABLE IF NOT EXISTS athena.auth_schema_migrations (\n        version INTEGER PRIMARY KEY,\n        name TEXT NOT NULL,\n        checksum TEXT NOT NULL DEFAULT '',\n        applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n      )\n    `);\n      await tx.query(`\n      ALTER TABLE athena.auth_schema_migrations\n        ADD COLUMN IF NOT EXISTS checksum TEXT NOT NULL DEFAULT ''\n    `);\n\n      const appliedRows = await readAuthSchemaLedgerRows(tx);\n      const preflight = compareAthenaAuthLedgers(appliedRows, expected);\n      if (preflight.direction === \"runtime-too-old\") {\n        const formatted = formatSchemaCompatibilityError(preflight);\n        throw new AthenaAuthRuntimeError(500, formatted.message, {\n          code: formatted.code,\n        });\n      }\n      if (preflight.checksumMismatch.length > 0 || preflight.unknown.length > 0) {\n        const formatted = formatSchemaCompatibilityError({\n          ...preflight,\n          direction: \"history-diverged\",\n          compatible: false,\n        });\n        throw new AthenaAuthRuntimeError(500, formatted.message, {\n          code: formatted.code,\n        });\n      }\n\n      const appliedVersions = new Set(appliedRows.map((row) => row.version));\n\n      // Ensure schema exists first (version 0), then apply in numeric order.\n      const bootstrap = SCHEMA_STATEMENTS.find((s) => s.version === 0);\n      if (bootstrap) {\n        await tx.query(bootstrap.sql);\n      }\n\n      for (const statement of ledgeredStatements()) {\n        if (appliedVersions.has(statement.version)) {\n          continue;\n        }\n        const checksum = checksumMigrationSql(statement.sql);\n        await tx.query(statement.sql);\n        await tx.query(\n          \"INSERT INTO athena.auth_schema_migrations (version, name, checksum) VALUES ($1, $2, $3) ON CONFLICT (version) DO NOTHING\",\n          [statement.version, statement.name, checksum]\n        );\n      }\n\n      for (const entry of expected) {\n        if (!appliedVersions.has(entry.version) || !entry.checksum) {\n          continue;\n        }\n        await tx.query(\n          `UPDATE athena.auth_schema_migrations\n         SET checksum = $1\n         WHERE version = $2 AND (checksum IS NULL OR checksum = '')`,\n          [entry.checksum, entry.version]\n        );\n      }\n    });\n\n    await new PostgresAuthorizationStore(db).materialize();\n    return readAthenaAuthSchemaStatus(db);\n  });\n}\n\nexport async function readAthenaAuthSchemaStatus(\n  db: AthenaAuthDatabase\n): Promise<AthenaAuthSchemaStatus> {\n  const rows = await readAuthSchemaLedgerRows(db);\n  return compareAthenaAuthLedgers(rows);\n}\n\nexport async function assertAthenaAuthSchemaCompatible(\n  db: AthenaAuthDatabase\n): Promise<AthenaAuthSchemaCompatibility> {\n  const status = await readAthenaAuthSchemaStatus(db);\n  if (status.compatible) {\n    return status;\n  }\n  const formatted = formatSchemaCompatibilityError(status);\n  throw new AthenaAuthRuntimeError(500, formatted.message, {\n    code: formatted.code,\n  });\n}\n","/** 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","import type {\n\tPool,\n\tPoolClient,\n\tPoolConfig,\n\tQueryResult,\n\tQueryResultRow,\n} from \"pg\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { withPostgresLibpqCompatConnectionString } from \"./connection-string.ts\";\n\nexport { withPostgresLibpqCompatConnectionString } from \"./connection-string.ts\";\n\nexport const ATHENA_POSTGRES_DRIVER_MISSING_MESSAGE = [\n\t\"Athena local PostgreSQL runtime requires `pg`.\",\n\t\"\",\n\t\"Install:\",\n\t\"  pnpm add pg\",\n\t\"  npm install pg\",\n\t\"  yarn add pg\",\n\t\"  bun add pg\",\n].join(\"\\n\");\n\nexport function postgresDriverMissingError(\n\tcause?: unknown,\n): AthenaConfigurationError {\n\treturn new AthenaConfigurationError(\n\t\t\"ATHENA_POSTGRES_DRIVER_MISSING\",\n\t\tATHENA_POSTGRES_DRIVER_MISSING_MESSAGE,\n\t\t\"db\",\n\t\t{ cause },\n\t);\n}\n\nfunction isModuleNotFound(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst code = (error as { code?: unknown }).code;\n\tif (code === \"ERR_MODULE_NOT_FOUND\" || code === \"MODULE_NOT_FOUND\") {\n\t\treturn true;\n\t}\n\tconst message = (error as { message?: unknown }).message;\n\treturn (\n\t\ttypeof message === \"string\" &&\n\t\t/cannot find module ['\"]pg['\"]|can't resolve ['\"]pg['\"]/i.test(message)\n\t);\n}\n\n/**\n * Narrow pool surface used by Athena tooling (introspection + migrations).\n * Avoids leaking the full `pg` type graph into every consumer.\n */\nexport interface AthenaPostgresQueryable {\n\tquery<T extends QueryResultRow = QueryResultRow>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<QueryResult<T>>;\n}\n\nexport interface AthenaPostgresPoolDiagnostics {\n\tidleCount: number;\n\ttotalCount: number;\n\twaitingCount: number;\n}\n\nexport interface AthenaPostgresPool extends AthenaPostgresQueryable {\n\tconnect(): Promise<AthenaPostgresClient>;\n\tend(): Promise<void>;\n\treadonly idleCount?: number;\n\treadonly totalCount?: number;\n\treadonly waitingCount?: number;\n}\n\nexport const ATHENA_POSTGRES_POOL_DEFAULTS = {\n\tconnectionTimeoutMillis: 10_000,\n\tidleTimeoutMillis: 30_000,\n\tmax: 20,\n} as const;\n\nexport function postgresPoolDiagnostics(\n\tpool: AthenaPostgresPool,\n): AthenaPostgresPoolDiagnostics {\n\treturn {\n\t\tidleCount: pool.idleCount ?? 0,\n\t\ttotalCount: pool.totalCount ?? 0,\n\t\twaitingCount: pool.waitingCount ?? 0,\n\t};\n}\n\nexport interface AthenaPostgresClient {\n\tquery<T extends QueryResultRow = QueryResultRow>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<QueryResult<T>>;\n\trelease(err?: Error | boolean): void;\n}\n\ntype PgPoolConstructor = new (config: PoolConfig) => Pool;\n\nlet pgPoolConstructorPromise: Promise<PgPoolConstructor> | undefined;\n\n/**\n * Lazily loads the Node-only `pg` Pool constructor.\n * Safe to call only from server/CLI tooling entry points.\n */\nexport async function loadPgPoolConstructor(): Promise<PgPoolConstructor> {\n\tif (!pgPoolConstructorPromise) {\n\t\tpgPoolConstructorPromise = import(\"pg\")\n\t\t\t.then((module) => {\n\t\t\t\tconst poolConstructor =\n\t\t\t\t\t(module as { Pool?: PgPoolConstructor }).Pool ??\n\t\t\t\t\t(module as { default?: { Pool?: PgPoolConstructor } }).default?.Pool;\n\n\t\t\t\tif (!poolConstructor) {\n\t\t\t\t\tthrow postgresDriverMissingError();\n\t\t\t\t}\n\n\t\t\t\treturn poolConstructor;\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tpgPoolConstructorPromise = undefined;\n\t\t\t\tif (\n\t\t\t\t\tisModuleNotFound(error) ||\n\t\t\t\t\terror instanceof AthenaConfigurationError\n\t\t\t\t) {\n\t\t\t\t\tthrow error instanceof AthenaConfigurationError\n\t\t\t\t\t\t? error\n\t\t\t\t\t\t: postgresDriverMissingError(error);\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t});\n\t}\n\n\treturn pgPoolConstructorPromise;\n}\n\n/**\n * Creates a PostgreSQL connection pool for Node tooling.\n */\nexport async function createPostgresPool(\n\tconnectionString: string,\n\tconfig: Omit<PoolConfig, \"connectionString\"> = {},\n): Promise<AthenaPostgresPool> {\n\tconst PoolConstructor = await loadPgPoolConstructor();\n\tconst pool = new PoolConstructor({\n\t\tconnectionString: withPostgresLibpqCompatConnectionString(connectionString),\n\t\tconnectionTimeoutMillis:\n\t\t\tATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis,\n\t\tidleTimeoutMillis: ATHENA_POSTGRES_POOL_DEFAULTS.idleTimeoutMillis,\n\t\tmax: ATHENA_POSTGRES_POOL_DEFAULTS.max,\n\t\t...config,\n\t});\n\treturn pool as unknown as AthenaPostgresPool;\n}\n\nexport type { Pool, PoolClient, QueryResult, QueryResultRow };\n","/**\n * Postgres URI helpers for Node `pg` / pg-connection-string.\n *\n * pg-connection-string v2 treats sslmode `prefer` / `require` / `verify-ca` as\n * `verify-full` and emits a SECURITY WARNING unless the mode is already\n * `verify-full` or `uselibpqcompat=true` is set. Duplicate query keys also\n * re-trigger the warning. Collapse keys and pin `verify-full` once before\n * opening a pool.\n */\n\nconst POSTGRES_PROTOCOLS = new Set([\"postgres:\", \"postgresql:\"]);\n\nconst LIBPQ_COMPAT_SSLMODES = new Set([\"prefer\", \"require\", \"verify-ca\"]);\n\nfunction isLoopbackHost(hostname: string): boolean {\n\tconst host = hostname.replace(/^\\[|\\]$/g, \"\").toLowerCase();\n\treturn (\n\t\thost === \"localhost\" ||\n\t\thost === \"127.0.0.1\" ||\n\t\thost === \"::1\" ||\n\t\thost === \"0.0.0.0\"\n\t);\n}\n\nfunction collapseSearchParams(params: URLSearchParams): URLSearchParams {\n\tconst merged = new URLSearchParams();\n\tfor (const [key, value] of params.entries()) {\n\t\tmerged.set(key, value);\n\t}\n\treturn merged;\n}\n\nfunction rewritePostgresUrl(url: URL): void {\n\tconst merged = collapseSearchParams(url.searchParams);\n\tconst sslmode = (merged.get(\"sslmode\") ?? \"\").trim().toLowerCase();\n\tconst optedIntoLibpq =\n\t\t(merged.get(\"uselibpqcompat\") ?? \"\").trim().toLowerCase() === \"true\";\n\n\tif (!sslmode && !isLoopbackHost(url.hostname)) {\n\t\tmerged.set(\"sslmode\", \"verify-full\");\n\t} else if (LIBPQ_COMPAT_SSLMODES.has(sslmode) && !optedIntoLibpq) {\n\t\t// pg v2 treats prefer/require/verify-ca as verify-full and warns.\n\t\t// Pin verify-full (current secure behavior) instead of uselibpqcompat,\n\t\t// which would switch `require` to libpq's weaker no-verify semantics.\n\t\tmerged.set(\"sslmode\", \"verify-full\");\n\t}\n\n\turl.search = merged.toString();\n}\n\n/**\n * Deduplicate connection-string query params and pin remote TLS to\n * `sslmode=verify-full` so `pg` does not warn that `prefer` / `require` /\n * `verify-ca` are aliases of `verify-full`. Explicit `uselibpqcompat=true`\n * is left alone for callers that opted into libpq `require`.\n */\nexport function withPostgresLibpqCompatConnectionString(\n\tconnectionString: string,\n): string {\n\tconst trimmed = connectionString.trim();\n\tif (trimmed.length === 0) {\n\t\treturn connectionString;\n\t}\n\n\ttry {\n\t\tconst usesPostgresql = /^postgresql:/i.test(trimmed);\n\t\tconst normalized = trimmed.replace(/^postgresql:/i, \"postgres:\");\n\t\tconst url = new URL(normalized);\n\t\tif (!POSTGRES_PROTOCOLS.has(url.protocol)) {\n\t\t\treturn connectionString;\n\t\t}\n\n\t\trewritePostgresUrl(url);\n\t\tconst rewritten = url.toString();\n\t\treturn usesPostgresql\n\t\t\t? rewritten.replace(/^postgres:/i, \"postgresql:\")\n\t\t\t: rewritten;\n\t} catch {\n\t\treturn connectionString;\n\t}\n}\n","import { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { recordPostgresPoolCreated } from \"../runtime/ownership.ts\";\nimport {\n\tATHENA_POSTGRES_POOL_DEFAULTS,\n\ttype AthenaPostgresClient,\n\ttype AthenaPostgresPool,\n\ttype AthenaPostgresPoolDiagnostics,\n\tcreatePostgresPool,\n\tpostgresPoolDiagnostics,\n\ttype QueryResult,\n\ttype QueryResultRow,\n} from \"./driver.ts\";\nimport { assertNodePostgresRuntime } from \"./runtime.ts\";\n\nfunction isPostgresDebugEnabled(): boolean {\n\tconst value = (\n\t\tglobalThis as { process?: { env?: Record<string, string | undefined> } }\n\t).process?.env?.ATHENA_JS_DEBUG;\n\treturn value === \"1\" || value === \"true\";\n}\n\nfunction logPoolSaturation(\n\tstats: AthenaPostgresPoolDiagnostics,\n\tdurationMs: number,\n): void {\n\tif (!isPostgresDebugEnabled()) {\n\t\treturn;\n\t}\n\tif (stats.waitingCount <= 0 && !(stats.idleCount === 0 && durationMs >= 50)) {\n\t\treturn;\n\t}\n\tconsole.warn(\n\t\t`[athena-postgres] pool total=${stats.totalCount} idle=${stats.idleCount} waiting=${stats.waitingCount} queryMs=${Math.round(durationMs)}`,\n\t);\n}\n\nexport type AthenaResourceOwnership = \"owned\" | \"borrowed\";\n\nexport interface AthenaOwnedResource<T> {\n\treadonly ownership: AthenaResourceOwnership;\n\treadonly resource: T;\n}\n\nexport type AthenaPostgresTransactionOptions = {\n\tdeadlineMs?: number;\n};\n\nexport interface AthenaPostgresRuntime {\n\tclose(): Promise<void>;\n\tgetPool(): Promise<AthenaPostgresPool>;\n\tinspectPool(): Promise<AthenaPostgresPoolDiagnostics>;\n\treadonly ownership: AthenaResourceOwnership;\n\tquery<T extends QueryResultRow = QueryResultRow>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<QueryResult<T>>;\n\ttransaction<T>(\n\t\tfn: (runtime: AthenaPostgresRuntime) => Promise<T>,\n\t\toptions?: AthenaPostgresTransactionOptions,\n\t): Promise<T>;\n}\n\nexport function connectPostgresPoolWithDeadline(\n\tpool: AthenaPostgresPool,\n\tdeadlineMs: number,\n): Promise<AthenaPostgresClient> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet timedOut = false;\n\tconst connecting = pool.connect().then((client) => {\n\t\tif (timedOut) {\n\t\t\tclient.release();\n\t\t\tthrow postgresConnectDeadlineError();\n\t\t}\n\t\treturn client;\n\t});\n\tconnecting.catch(() => undefined);\n\treturn Promise.race([\n\t\tconnecting,\n\t\tnew Promise<never>((_, reject) => {\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\ttimedOut = true;\n\t\t\t\treject(postgresConnectDeadlineError());\n\t\t\t}, deadlineMs);\n\t\t}),\n\t]).finally(() => {\n\t\tif (timer !== undefined) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t});\n}\n\nfunction postgresConnectDeadlineError(): Error {\n\treturn new Error(\"connection timeout exceeded\");\n}\n\nexport interface CreateAthenaPostgresRuntimeOptions {\n\tconnectionString?: string;\n\townership?: AthenaResourceOwnership;\n\tpool?: AthenaPostgresPool;\n}\n\nconst runtimeByTransport = new WeakMap<object, AthenaPostgresRuntime>();\n\nconst OWNED_RUNTIME_CACHE = Symbol.for(\n\t\"@xylex-group/athena.ownedPostgresRuntimes\",\n);\n\ntype OwnedRuntimeCacheEntry = {\n\trefs: number;\n\truntime: AthenaPostgresRuntime;\n};\n\ntype OwnedRuntimeCache = Map<string, OwnedRuntimeCacheEntry>;\n\nfunction ownedRuntimeCache(): OwnedRuntimeCache {\n\tconst holder = globalThis as typeof globalThis & {\n\t\t[OWNED_RUNTIME_CACHE]?: OwnedRuntimeCache;\n\t};\n\tholder[OWNED_RUNTIME_CACHE] ??= new Map();\n\treturn holder[OWNED_RUNTIME_CACHE];\n}\n\nexport function bindPostgresRuntime(\n\ttransport: object,\n\truntime: AthenaPostgresRuntime,\n): void {\n\truntimeByTransport.set(transport, runtime);\n}\n\nexport function getBoundPostgresRuntime(\n\ttransport: object | undefined,\n): AthenaPostgresRuntime | undefined {\n\treturn transport ? runtimeByTransport.get(transport) : undefined;\n}\n\nexport function createAthenaPostgresRuntime(\n\toptions: CreateAthenaPostgresRuntimeOptions,\n): AthenaPostgresRuntime {\n\tconst connectionString = options.connectionString?.trim();\n\tif (!(options.pool || connectionString)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t\"AthenaPostgresRuntime requires a connection string or an existing pool.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n\n\tassertNodePostgresRuntime();\n\n\tconst ownership: AthenaResourceOwnership = options.pool\n\t\t? (options.ownership ?? \"borrowed\")\n\t\t: \"owned\";\n\n\tif (ownership === \"owned\" && connectionString && !options.pool) {\n\t\tconst cached = ownedRuntimeCache().get(connectionString);\n\t\tif (cached) {\n\t\t\tcached.refs += 1;\n\t\t\treturn cached.runtime;\n\t\t}\n\t}\n\n\tlet poolPromise: Promise<AthenaPostgresPool> | undefined;\n\tlet closed = false;\n\n\tconst getPool = async (): Promise<AthenaPostgresPool> => {\n\t\tif (closed) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_RUNTIME_DISPOSED\",\n\t\t\t\t\"Athena PostgreSQL runtime was disposed.\",\n\t\t\t\t\"db\",\n\t\t\t);\n\t\t}\n\t\tif (options.pool) {\n\t\t\treturn options.pool;\n\t\t}\n\t\tpoolPromise ??= createPostgresPool(connectionString as string);\n\t\treturn poolPromise;\n\t};\n\n\tconst inspectPool = async (): Promise<AthenaPostgresPoolDiagnostics> =>\n\t\tpostgresPoolDiagnostics(await getPool());\n\n\tconst runtime: AthenaPostgresRuntime = {\n\t\tasync close() {\n\t\t\tif (connectionString && ownership === \"owned\") {\n\t\t\t\tconst entry = ownedRuntimeCache().get(connectionString);\n\t\t\t\tif (entry && entry.runtime === runtime) {\n\t\t\t\t\tentry.refs -= 1;\n\t\t\t\t\tif (entry.refs > 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\townedRuntimeCache().delete(connectionString);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclosed = true;\n\t\t\tif (ownership !== \"owned\" || !poolPromise) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst pool = await poolPromise.catch(() => undefined);\n\t\t\tpoolPromise = undefined;\n\t\t\tif (pool) {\n\t\t\t\tawait pool.end();\n\t\t\t}\n\t\t},\n\t\tgetPool,\n\t\tinspectPool,\n\t\townership,\n\t\tasync query(text, values) {\n\t\t\tconst pool = await getPool();\n\t\t\tconst stats = postgresPoolDiagnostics(pool);\n\t\t\tconst started = performance.now();\n\t\t\ttry {\n\t\t\t\treturn await pool.query(text, values);\n\t\t\t} finally {\n\t\t\t\tlogPoolSaturation(stats, performance.now() - started);\n\t\t\t}\n\t\t},\n\t\tasync transaction(fn, options) {\n\t\t\tconst pool = await getPool();\n\t\t\tconst deadlineMs =\n\t\t\t\toptions?.deadlineMs ??\n\t\t\t\tATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis;\n\t\t\tconst client = await connectPostgresPoolWithDeadline(pool, deadlineMs);\n\t\t\tconst txRuntime: AthenaPostgresRuntime = {\n\t\t\t\tclose: async () => { },\n\t\t\t\tgetPool,\n\t\t\t\tinspectPool,\n\t\t\t\townership: \"borrowed\",\n\t\t\t\tquery: async (text, values) => client.query(text, values),\n\t\t\t\ttransaction: (inner) => inner(txRuntime),\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait client.query(\"BEGIN\");\n\t\t\t\tconst value = await fn(txRuntime);\n\t\t\t\tawait client.query(\"COMMIT\");\n\t\t\t\treturn value;\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore rollback failure\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t},\n\t};\n\n\tif (ownership === \"owned\" && connectionString && !options.pool) {\n\t\townedRuntimeCache().set(connectionString, { refs: 1, runtime });\n\t\trecordPostgresPoolCreated();\n\t}\n\n\treturn runtime;\n}\n\nexport function getAthenaOwnedRuntimeCacheSize(): number {\n\treturn ownedRuntimeCache().size;\n}\n","/**\n * Client ownership vs resource ownership.\n *\n *   ownership          — is this object a root or a request runtime?\n *   runtimeOwnership   — does this object own / borrow / have no runtime resources?\n *   lifecycle.runtimeId — shared identity across root + views\n */\n\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\n\nexport const ATHENA_CLIENT_INTERNAL_PROTOCOL = 1;\n\n/** Process-wide client: owns pools, embedded Auth, migrate, close, handlers. */\nexport interface AthenaRootRuntime {\n  readonly ownership: \"root\";\n}\n\n/** Request-scoped view: borrows root resources and must not own lifecycle. */\nexport interface AthenaRequestRuntime {\n  readonly ownership: \"request\";\n}\n\nexport type AthenaClientOwnership = \"root\" | \"request\";\nexport type AthenaRuntimeResourceOwnership = \"owned\" | \"borrowed\" | \"none\";\nexport type AthenaOwnershipReceived =\n  | \"request-view\"\n  | \"unknown\"\n  | \"foreign-runtime\";\n\nexport interface AthenaClientLifecycle {\n  closed: boolean;\n  requestViewsCreated: number;\n  readonly runtimeId: symbol;\n}\n\nexport interface AthenaRuntimeDiagnostics {\n  authRuntimesCreated: number;\n  closed: boolean;\n  internalProtocolVersion: number;\n  ownership: AthenaClientOwnership;\n  postgresPoolsCreated: number;\n  requestViewsCreated: number;\n  runtimeId: string;\n  runtimeOwnership: AthenaRuntimeResourceOwnership;\n  sdkVersion: string;\n}\n\nexport class AthenaRuntimeOwnershipError extends AthenaConfigurationError {\n  readonly caller: string;\n  readonly expected: \"root\";\n  readonly received: AthenaOwnershipReceived;\n\n  constructor(options: {\n    caller: string;\n    code?:\n      | \"ATHENA_RUNTIME_OWNERSHIP_INVALID\"\n      | \"ATHENA_HANDLER_ROOT_CLIENT_REQUIRED\"\n      | \"ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH\";\n    message: string;\n    received: AthenaOwnershipReceived;\n  }) {\n    super(\n      options.code ?? \"ATHENA_RUNTIME_OWNERSHIP_INVALID\",\n      options.message,\n      \"db\"\n    );\n    this.name = \"AthenaRuntimeOwnershipError\";\n    this.caller = options.caller;\n    this.expected = \"root\";\n    this.received = options.received;\n  }\n}\n\nexport function createAthenaClientLifecycle(): AthenaClientLifecycle {\n  return {\n    closed: false,\n    requestViewsCreated: 0,\n    runtimeId: Symbol(\"athena.runtime\"),\n  };\n}\n\nconst COUNTERS = Symbol.for(\"@xylex-group/athena.runtimeCounters\");\n\nexport interface AthenaRuntimeCounters {\n  authRuntimesCreated: number;\n  postgresPoolsCreated: number;\n}\n\nexport function athenaRuntimeCounters(): AthenaRuntimeCounters {\n  const holder = globalThis as typeof globalThis & {\n    [COUNTERS]?: AthenaRuntimeCounters;\n  };\n  holder[COUNTERS] ??= {\n    authRuntimesCreated: 0,\n    postgresPoolsCreated: 0,\n  };\n  return holder[COUNTERS];\n}\n\nexport function recordPostgresPoolCreated(): void {\n  athenaRuntimeCounters().postgresPoolsCreated += 1;\n}\n\nexport function recordAuthRuntimeCreated(): void {\n  athenaRuntimeCounters().authRuntimesCreated += 1;\n}\n\nexport function formatRuntimeId(runtimeId: symbol): string {\n  return runtimeId.description\n    ? `${runtimeId.description}:${String(runtimeId).slice(7, 15)}`\n    : String(runtimeId);\n}\n\nexport function describeAthenaRuntime(\n  ownership: AthenaClientOwnership,\n  runtimeOwnership: AthenaRuntimeResourceOwnership,\n  lifecycle: AthenaClientLifecycle\n): AthenaRuntimeDiagnostics {\n  const counters = athenaRuntimeCounters();\n  return {\n    authRuntimesCreated: counters.authRuntimesCreated,\n    closed: lifecycle.closed,\n    internalProtocolVersion: ATHENA_CLIENT_INTERNAL_PROTOCOL,\n    ownership,\n    postgresPoolsCreated: counters.postgresPoolsCreated,\n    requestViewsCreated: lifecycle.requestViewsCreated,\n    runtimeId: formatRuntimeId(lifecycle.runtimeId),\n    runtimeOwnership,\n    sdkVersion: PACKAGE_VERSION,\n  };\n}\n","import { AthenaConfigurationError } from \"../config/errors.ts\";\n\n/**\n * Direct PostgreSQL requires a Node.js server runtime (pg + sockets).\n */\nexport function assertNodePostgresRuntime(): void {\n\tconst isNode =\n\t\ttypeof process !== \"undefined\" &&\n\t\ttypeof process.versions === \"object\" &&\n\t\tprocess.versions !== null &&\n\t\ttypeof process.versions.node === \"string\" &&\n\t\tprocess.versions.node.length > 0;\n\n\tif (!isNode) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_NODE_RUNTIME_REQUIRED\",\n\t\t\t\"Direct PostgreSQL execution requires a Node.js server runtime. Use Athena Gateway or a runtime-native backend such as D1 in edge/client environments.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n}\n\nexport function isNodePostgresRuntime(): boolean {\n\ttry {\n\t\tassertNodePostgresRuntime();\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n","import {\n\ttype AthenaPostgresPool,\n\tcreatePostgresPool,\n\tpostgresPoolDiagnostics,\n} from \"../../postgres/driver.ts\";\nimport {\n\ttype AthenaPostgresRuntime,\n\tconnectPostgresPoolWithDeadline,\n} from \"../../postgres/owned-runtime.ts\";\nimport { assertNodePostgresRuntime } from \"../../postgres/runtime.ts\";\nimport { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport { currentAuthRequestTiming } from \"./request-timing.ts\";\n\nexport type AuthDatabaseTimeoutPhase =\n\t| \"sql_acquire\"\n\t| \"sql_exec\"\n\t| \"transaction\";\n\nfunction isAuthJsDebugEnabled(): boolean {\n\tconst value = (\n\t\tglobalThis as { process?: { env?: Record<string, string | undefined> } }\n\t).process?.env?.ATHENA_JS_DEBUG;\n\treturn value === \"1\" || value === \"true\";\n}\n\nfunction logAuthDatabaseTimeout(phase: AuthDatabaseTimeoutPhase): void {\n\tif (!isAuthJsDebugEnabled()) {\n\t\treturn;\n\t}\n\tconst timing = currentAuthRequestTiming();\n\tconst snap = timing?.copy();\n\tconsole.warn(\"[athena-auth] ATHENA_AUTH_DATABASE_TIMEOUT\", {\n\t\tphase,\n\t\tpool: {\n\t\t\tidle: snap?.sqlPoolIdle ?? 0,\n\t\t\ttotal: snap?.sqlPoolTotal ?? 0,\n\t\t\twaiting: snap?.sqlPoolWaiting ?? 0,\n\t\t},\n\t\tsqlAcquireMs: snap?.sqlAcquireMs ?? 0,\n\t\tsqlExecMs: snap?.sqlExecMs ?? 0,\n\t\ttraceId: timing?.traceId() ?? null,\n\t});\n}\n\nexport const ATHENA_AUTH_DATABASE_OPERATION_TIMEOUT_MS = 15_000;\n\nexport interface AthenaAuthQueryResult<T = Record<string, unknown>> {\n\trowCount: number;\n\trows: T[];\n}\n\nexport interface AthenaAuthDatabase {\n\tclose?(): Promise<void>;\n\tquery<T = Record<string, unknown>>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<AthenaAuthQueryResult<T>>;\n\ttransaction<T>(fn: (db: AthenaAuthDatabase) => Promise<T>): Promise<T>;\n}\n\n/**\n * Normalize any driver-shaped query result into the Auth database contract.\n * Never let callers hit `undefined.rows` / `undefined.length`.\n */\nexport function assertQueryResult<T = Record<string, unknown>>(\n\tvalue: unknown,\n\tcontext: string,\n): AthenaAuthQueryResult<T> {\n\tif (Array.isArray(value)) {\n\t\treturn {\n\t\t\trowCount: value.length,\n\t\t\trows: value as T[],\n\t\t};\n\t}\n\n\tif (value === null || value === undefined || typeof value !== \"object\") {\n\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t500,\n\t\t\t[\n\t\t\t\t\"ATHENA_AUTH_DATABASE_RESULT_INVALID\",\n\t\t\t\t\"\",\n\t\t\t\t\"Embedded Auth database adapter returned an unexpected query result.\",\n\t\t\t\t\"\",\n\t\t\t\t`Context: ${context}`,\n\t\t\t\t\"\",\n\t\t\t\t\"Run with:\",\n\t\t\t\t\"  ATHENA_JS_DEBUG=1 athena-js migrate\",\n\t\t\t].join(\"\\n\"),\n\t\t\t{ code: \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" },\n\t\t);\n\t}\n\n\tconst record = value as Record<string, unknown>;\n\tconst rows = record.rows;\n\tif (!Array.isArray(rows)) {\n\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t500,\n\t\t\t[\n\t\t\t\t\"ATHENA_AUTH_DATABASE_RESULT_INVALID\",\n\t\t\t\t\"\",\n\t\t\t\t\"Embedded Auth database adapter returned an invalid result while\",\n\t\t\t\t`${context}: expected result.rows to be an array.`,\n\t\t\t\t\"\",\n\t\t\t\t\"Run with:\",\n\t\t\t\t\"  ATHENA_JS_DEBUG=1 athena-js migrate\",\n\t\t\t].join(\"\\n\"),\n\t\t\t{ code: \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" },\n\t\t);\n\t}\n\n\tconst rawCount = record.rowCount;\n\tconst rowCount =\n\t\ttypeof rawCount === \"number\" && Number.isFinite(rawCount)\n\t\t\t? rawCount\n\t\t\t: rows.length;\n\n\treturn {\n\t\trowCount,\n\t\trows: rows as T[],\n\t};\n}\n\nfunction isDatabaseTimeoutError(error: unknown): boolean {\n\tif (\n\t\terror instanceof AthenaAuthRuntimeError &&\n\t\terror.code === \"ATHENA_AUTH_DATABASE_TIMEOUT\"\n\t) {\n\t\treturn true;\n\t}\n\tif (!error || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst record = error as { code?: unknown; message?: unknown };\n\tif (record.code === \"ETIMEDOUT\" || record.code === \"57014\") {\n\t\treturn true;\n\t}\n\treturn (\n\t\ttypeof record.message === \"string\" &&\n\t\t/timeout exceeded|query_timeout|statement timeout|connection timeout/i.test(\n\t\t\trecord.message,\n\t\t)\n\t);\n}\n\nexport function authDatabaseTimeoutError(\n\tcause?: unknown,\n): AthenaAuthRuntimeError {\n\treturn new AthenaAuthRuntimeError(\n\t\t504,\n\t\t[\n\t\t\t\"ATHENA_AUTH_DATABASE_TIMEOUT\",\n\t\t\t\"\",\n\t\t\t\"Embedded Auth could not complete a database operation before the timeout.\",\n\t\t].join(\"\\n\"),\n\t\t{ cause, code: \"ATHENA_AUTH_DATABASE_TIMEOUT\" },\n\t);\n}\n\nasync function withAuthDatabaseTimeout<T>(\n\toperation: () => Promise<T>,\n\ttimeoutMs: number,\n\tphase: AuthDatabaseTimeoutPhase,\n): Promise<T> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\toperation().then(\n\t\t\t\t(value) => value,\n\t\t\t\t(error: unknown) => {\n\t\t\t\t\tif (isDatabaseTimeoutError(error)) {\n\t\t\t\t\t\tlogAuthDatabaseTimeout(phase);\n\t\t\t\t\t\tthrow authDatabaseTimeoutError(error);\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t},\n\t\t\t),\n\t\t\tnew Promise<never>((_, reject) => {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tlogAuthDatabaseTimeout(phase);\n\t\t\t\t\treject(authDatabaseTimeoutError());\n\t\t\t\t}, timeoutMs);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timer !== undefined) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n}\n\nfunction recordSqlTiming(idleCount: number, elapsedMs: number): void {\n\tconst timing = currentAuthRequestTiming();\n\tif (!timing) {\n\t\treturn;\n\t}\n\tif (idleCount <= 0) {\n\t\ttiming.addSqlAcquire(elapsedMs);\n\t} else {\n\t\ttiming.addSqlExec(elapsedMs);\n\t}\n\ttiming.addSqlCount(1);\n}\n\nfunction normalizeDriverResult<T>(\n\tresult: unknown,\n\tcontext: string,\n): AthenaAuthQueryResult<T> {\n\treturn assertQueryResult<T>(result, context);\n}\n\nclass PoolDatabase implements AthenaAuthDatabase {\n\tconstructor(\n\t\tprivate readonly pool: AthenaPostgresPool,\n\t\tprivate readonly ownership: \"owned\" | \"borrowed\" = \"owned\",\n\t\tprivate readonly operationTimeoutMs = ATHENA_AUTH_DATABASE_OPERATION_TIMEOUT_MS,\n\t) { }\n\n\tclose = async (): Promise<void> => {\n\t\tif (this.ownership === \"borrowed\") {\n\t\t\treturn;\n\t\t}\n\t\tawait this.pool.end();\n\t};\n\n\tquery = async <T = Record<string, unknown>>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<AthenaAuthQueryResult<T>> => {\n\t\tconst stats = postgresPoolDiagnostics(this.pool);\n\t\tcurrentAuthRequestTiming()?.setSqlPool(stats);\n\t\treturn withAuthDatabaseTimeout(\n\t\t\tasync () => {\n\t\t\t\tconst started = performance.now();\n\t\t\t\tconst result = await this.pool.query<T & Record<string, unknown>>(\n\t\t\t\t\ttext,\n\t\t\t\t\tvalues,\n\t\t\t\t);\n\t\t\t\trecordSqlTiming(stats.idleCount, performance.now() - started);\n\t\t\t\treturn normalizeDriverResult<T>(result, \"pool.query\");\n\t\t\t},\n\t\t\tthis.operationTimeoutMs,\n\t\t\tstats.idleCount <= 0 ? \"sql_acquire\" : \"sql_exec\",\n\t\t);\n\t};\n\n\ttransaction = async <T>(\n\t\tfn: (db: AthenaAuthDatabase) => Promise<T>,\n\t): Promise<T> => {\n\t\treturn withAuthDatabaseTimeout(\n\t\t\tasync () => {\n\t\t\t\tconst acquireStarted = performance.now();\n\t\t\t\tconst client = await connectPostgresPoolWithDeadline(\n\t\t\t\t\tthis.pool,\n\t\t\t\t\tthis.operationTimeoutMs,\n\t\t\t\t);\n\t\t\t\tcurrentAuthRequestTiming()?.addSqlAcquire(\n\t\t\t\t\tperformance.now() - acquireStarted,\n\t\t\t\t);\n\t\t\t\ttry {\n\t\t\t\t\tawait client.query(\"BEGIN\");\n\t\t\t\t\tconst scoped: AthenaAuthDatabase = {\n\t\t\t\t\t\tquery: async <TRow = Record<string, unknown>>(\n\t\t\t\t\t\t\ttext: string,\n\t\t\t\t\t\t\tvalues?: unknown[],\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst execStarted = performance.now();\n\t\t\t\t\t\t\tconst result = await client.query(text, values);\n\t\t\t\t\t\t\tconst timing = currentAuthRequestTiming();\n\t\t\t\t\t\t\tif (timing) {\n\t\t\t\t\t\t\t\ttiming.addSqlExec(performance.now() - execStarted);\n\t\t\t\t\t\t\t\ttiming.addSqlCount(1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn normalizeDriverResult<TRow>(\n\t\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\t\t\"transaction.query\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttransaction: (inner) => inner(scoped),\n\t\t\t\t\t};\n\t\t\t\t\tconst value = await fn(scoped);\n\t\t\t\t\tawait client.query(\"COMMIT\");\n\t\t\t\t\treturn value;\n\t\t\t\t} catch (error) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore rollback failure\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\tclient.release();\n\t\t\t\t}\n\t\t\t},\n\t\t\tthis.operationTimeoutMs,\n\t\t\t\"transaction\",\n\t\t);\n\t};\n}\n\nexport async function createPostgresAuthDatabase(\n\tconnectionString: string,\n): Promise<AthenaAuthDatabase> {\n\tassertNodePostgresRuntime();\n\tconst pool = await createPostgresPool(connectionString, {\n\t\tmax: 20,\n\t\tmin: 4,\n\t});\n\treturn new PoolDatabase(pool);\n}\n\nexport function createAuthDatabaseFromPool(\n\tpool: AthenaPostgresPool,\n): AthenaAuthDatabase {\n\treturn new PoolDatabase(pool, \"borrowed\");\n}\n\nexport const createPostgresAuthDatabaseFromPool = createAuthDatabaseFromPool;\n\nexport function createAuthDatabaseFromRuntime(\n\truntime: Pick<AthenaPostgresRuntime, \"inspectPool\" | \"query\" | \"transaction\">,\n\toptions?: { operationTimeoutMs?: number },\n): AthenaAuthDatabase {\n\tconst timeoutMs =\n\t\toptions?.operationTimeoutMs ?? ATHENA_AUTH_DATABASE_OPERATION_TIMEOUT_MS;\n\n\tconst adapter: AthenaAuthDatabase = {\n\t\tasync close() { },\n\t\tasync query(text, values) {\n\t\t\tconst stats = await runtime.inspectPool();\n\t\t\tcurrentAuthRequestTiming()?.setSqlPool(stats);\n\t\t\treturn withAuthDatabaseTimeout(\n\t\t\t\tasync () => {\n\t\t\t\t\tconst started = performance.now();\n\t\t\t\t\tconst result = await runtime.query(text, values);\n\t\t\t\t\trecordSqlTiming(stats.idleCount, performance.now() - started);\n\t\t\t\t\treturn assertQueryResult(result, \"runtime.query\");\n\t\t\t\t},\n\t\t\t\ttimeoutMs,\n\t\t\t\tstats.idleCount <= 0 ? \"sql_acquire\" : \"sql_exec\",\n\t\t\t);\n\t\t},\n\t\tasync transaction(fn) {\n\t\t\treturn withAuthDatabaseTimeout(\n\t\t\t\t() =>\n\t\t\t\t\truntime.transaction(\n\t\t\t\t\t\tasync (tx) => fn(createAuthDatabaseFromRuntime(tx, options)),\n\t\t\t\t\t\t{ deadlineMs: timeoutMs },\n\t\t\t\t\t),\n\t\t\t\ttimeoutMs,\n\t\t\t\t\"transaction\",\n\t\t\t);\n\t\t},\n\t};\n\treturn adapter;\n}\n","import { AUTH_EMAIL_EVENT_CATALOG } from \"../../email/events.ts\";\n\n/**\n * Frozen 014 seed. Released migration 014 permanently inserted the ten later\n * events with `default_template_key = NULL`. Do not regenerate this from the\n * live catalog — 024 is the forward fix.\n */\nconst AUTH_EMAIL_EVENT_CATALOG_V014: ReadonlyArray<{\n  category: string;\n  default_template_key: string | null;\n  description: string;\n  event_type: string;\n  optional_variables: readonly string[];\n  required_variables: readonly string[];\n}> = AUTH_EMAIL_EVENT_CATALOG.map((entry) => {\n  const futureKeys: Record<string, null> = {\n    \"organization.create\": null,\n    \"organization.member.added\": null,\n    \"organization.member.invite.reminder\": null,\n    \"organization.member.invite.revoked\": null,\n    \"organization.member.removed\": null,\n    \"organization.member.role.updated\": null,\n    \"user.password.changed\": null,\n    \"user.security.alert\": null,\n    \"user.sign-in.email\": null,\n    \"user.sign-up.welcome\": null,\n  };\n  return {\n    category: entry.category,\n    default_template_key:\n      entry.event_type in futureKeys ? null : entry.default_template_key,\n    description: entry.description,\n    event_type: entry.event_type,\n    optional_variables: entry.optional_variables,\n    required_variables: entry.required_variables,\n  };\n});\n\n/**\n * Rust Athena Auth email tables (`services/athena-auth` migrations 006, 007,\n * 011, 012, 014, 015 + runtime ensure-schema). Same names and columns so a\n * shared Postgres is mutually readable.\n */\nexport const ATHENA_AUTH_EMAIL_SCHEMA_STATEMENTS: ReadonlyArray<{\n  name: string;\n  sql: string;\n  version: number;\n}> = [\n  {\n    name: \"006_create_email_send_failures_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.email_send_failures (\n    id TEXT PRIMARY KEY,\n    user_id TEXT,\n    recipient_email TEXT NOT NULL,\n    flow TEXT NOT NULL,\n    provider TEXT,\n    error_message TEXT NOT NULL,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    resolved BOOLEAN NOT NULL DEFAULT FALSE,\n    resolution_note TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_email_send_failures_created_at\n    ON athena.email_send_failures (created_at DESC);\nCREATE INDEX IF NOT EXISTS idx_email_send_failures_recipient_email\n    ON athena.email_send_failures (recipient_email);\n`,\n    version: 6,\n  },\n  {\n    name: \"007_create_emails_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.emails (\n    id TEXT PRIMARY KEY,\n    recipient_email TEXT NOT NULL,\n    subject TEXT NOT NULL,\n    from_address TEXT NOT NULL,\n    from_name TEXT,\n    text_body TEXT,\n    html_body TEXT,\n    provider TEXT NOT NULL,\n    flow TEXT,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_emails_created_at ON athena.emails (created_at DESC);\nCREATE INDEX IF NOT EXISTS idx_emails_recipient_email ON athena.emails (recipient_email);\n`,\n    version: 7,\n  },\n  {\n    name: \"011_create_email_templates_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.email_templates (\n    id TEXT PRIMARY KEY,\n    template_key TEXT NOT NULL,\n    locale TEXT NOT NULL DEFAULT 'en',\n    subject_template TEXT NOT NULL,\n    text_template TEXT,\n    html_template TEXT,\n    variables JSONB NOT NULL DEFAULT '[]',\n    is_active BOOLEAN NOT NULL DEFAULT TRUE,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (template_key, locale)\n);\nCREATE INDEX IF NOT EXISTS idx_email_templates_template_key ON athena.email_templates (template_key);\nCREATE INDEX IF NOT EXISTS idx_email_templates_is_active ON athena.email_templates (is_active);\n`,\n    version: 11,\n  },\n  {\n    name: \"012_email_multitenancy_admin_ops\",\n    sql: `\nALTER TABLE athena.email_send_failures\n    ADD COLUMN IF NOT EXISTS resolved BOOLEAN NOT NULL DEFAULT FALSE;\nALTER TABLE athena.email_send_failures\n    ADD COLUMN IF NOT EXISTS resolution_note TEXT;\nALTER TABLE athena.email_send_failures\n    ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();\nCREATE INDEX IF NOT EXISTS idx_email_send_failures_resolved\n    ON athena.email_send_failures (resolved);\nCREATE INDEX IF NOT EXISTS idx_email_send_failures_flow\n    ON athena.email_send_failures (flow);\nALTER TABLE athena.emails ADD COLUMN IF NOT EXISTS flow TEXT;\nALTER TABLE athena.emails ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();\nCREATE INDEX IF NOT EXISTS idx_emails_provider ON athena.emails (provider);\nCREATE INDEX IF NOT EXISTS idx_emails_flow ON athena.emails (flow);\n`,\n    version: 12,\n  },\n  {\n    name: \"014_email_event_types_and_template_assignment\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.email_event_types (\n    event_type TEXT PRIMARY KEY,\n    category TEXT NOT NULL,\n    description TEXT NOT NULL,\n    default_template_key TEXT,\n    is_active BOOLEAN NOT NULL DEFAULT TRUE,\n    is_system BOOLEAN NOT NULL DEFAULT TRUE,\n    required_variables JSONB NOT NULL DEFAULT '[]',\n    optional_variables JSONB NOT NULL DEFAULT '[]',\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nALTER TABLE athena.email_templates ADD COLUMN IF NOT EXISTS event_type TEXT;\nCREATE INDEX IF NOT EXISTS idx_email_event_types_category ON athena.email_event_types (category);\nCREATE INDEX IF NOT EXISTS idx_email_event_types_is_active ON athena.email_event_types (is_active);\nCREATE INDEX IF NOT EXISTS idx_email_templates_event_type ON athena.email_templates (event_type);\nCREATE INDEX IF NOT EXISTS idx_email_templates_event_type_locale_active\n    ON athena.email_templates (event_type, locale, is_active);\n${emailEventTypeSeedSql(AUTH_EMAIL_EVENT_CATALOG_V014)}\n`,\n    version: 14,\n  },\n  {\n    name: \"015_email_template_attachments\",\n    sql: `\nALTER TABLE athena.email_templates\n    ADD COLUMN IF NOT EXISTS attachments JSONB NOT NULL DEFAULT '[]';\nALTER TABLE athena.email_templates\n    ADD COLUMN IF NOT EXISTS attachment_failure_mode TEXT NOT NULL DEFAULT 'fail';\nALTER TABLE athena.email_templates\n    ADD COLUMN IF NOT EXISTS variable_bindings JSONB NOT NULL DEFAULT '[]';\n`,\n    version: 15,\n  },\n  {\n    name: \"024_email_event_default_templates\",\n    sql: `\nINSERT INTO athena.email_event_types (\n    event_type, category, description, default_template_key,\n    required_variables, optional_variables, is_active, is_system, metadata\n)\nVALUES\n    (\n        'user.sign-in.email',\n        'user_security',\n        'Email-based sign-in link or magic-link authentication flow.',\n        'magic_link_email',\n        '[\"sign_in_url\"]'::jsonb,\n        '[\"app_name\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"auth\"}'::jsonb\n    ),\n    (\n        'user.sign-up.welcome',\n        'user_lifecycle',\n        'Welcome message after account creation.',\n        'welcome_email',\n        '[\"user_name\"]'::jsonb,\n        '[\"app_name\",\"dashboard_url\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"auth\"}'::jsonb\n    ),\n    (\n        'user.password.changed',\n        'user_security',\n        'Security notification after password change completes.',\n        'password_changed_email',\n        '[]'::jsonb,\n        '[\"app_name\",\"support_url\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"auth\"}'::jsonb\n    ),\n    (\n        'user.security.alert',\n        'user_security',\n        'General security alert notification (suspicious sign-in, new device, policy event).',\n        'security_alert_email',\n        '[\"alert_title\",\"alert_details\"]'::jsonb,\n        '[\"app_name\",\"support_url\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"auth\"}'::jsonb\n    ),\n    (\n        'organization.create',\n        'organization_lifecycle',\n        'Organization creation confirmation and onboarding.',\n        'organization_created_email',\n        '[\"organization_name\"]'::jsonb,\n        '[\"app_name\",\"organization_url\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    ),\n    (\n        'organization.member.added',\n        'organization_lifecycle',\n        'Notify when a member is added without invite flow.',\n        'organization_member_added_email',\n        '[\"organization_name\",\"member_identity\"]'::jsonb,\n        '[\"app_name\",\"actor_identity\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    ),\n    (\n        'organization.member.removed',\n        'organization_lifecycle',\n        'Notify when a member is removed from an organization.',\n        'organization_member_removed_email',\n        '[\"organization_name\",\"member_identity\"]'::jsonb,\n        '[\"app_name\",\"actor_identity\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    ),\n    (\n        'organization.member.role.updated',\n        'organization_lifecycle',\n        'Notify when organization member role is changed.',\n        'organization_member_role_updated_email',\n        '[\"organization_name\",\"member_identity\",\"new_role\"]'::jsonb,\n        '[\"app_name\",\"previous_role\",\"actor_identity\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    ),\n    (\n        'organization.member.invite.reminder',\n        'organization_lifecycle',\n        'Reminder message for pending organization invitations.',\n        'organization_invitation_reminder_email',\n        '[\"organization_name\",\"invitation_url\"]'::jsonb,\n        '[\"app_name\",\"role\",\"inviter_identity\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    ),\n    (\n        'organization.member.invite.revoked',\n        'organization_lifecycle',\n        'Notification that an invitation has been revoked.',\n        'organization_invitation_revoked_email',\n        '[\"organization_name\",\"invited_email\"]'::jsonb,\n        '[\"app_name\",\"inviter_identity\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    )\nON CONFLICT (event_type) DO UPDATE\nSET\n    category = EXCLUDED.category,\n    description = EXCLUDED.description,\n    default_template_key = EXCLUDED.default_template_key,\n    required_variables = EXCLUDED.required_variables,\n    optional_variables = EXCLUDED.optional_variables,\n    is_active = EXCLUDED.is_active,\n    is_system = EXCLUDED.is_system,\n    metadata = EXCLUDED.metadata,\n    updated_at = NOW();\nUPDATE athena.email_templates AS t\nSET event_type = m.event_type\nFROM (\n    VALUES\n        ('magic_link_email', 'user.sign-in.email'),\n        ('welcome_email', 'user.sign-up.welcome'),\n        ('password_changed_email', 'user.password.changed'),\n        ('security_alert_email', 'user.security.alert'),\n        ('organization_created_email', 'organization.create'),\n        ('organization_member_added_email', 'organization.member.added'),\n        ('organization_member_removed_email', 'organization.member.removed'),\n        ('organization_member_role_updated_email', 'organization.member.role.updated'),\n        ('organization_invitation_reminder_email', 'organization.member.invite.reminder'),\n        ('organization_invitation_revoked_email', 'organization.member.invite.revoked')\n) AS m(template_key, event_type)\nWHERE t.template_key = m.template_key\n  AND (t.event_type IS NULL OR t.event_type IS DISTINCT FROM m.event_type);\n`,\n    version: 24,\n  },\n];\n\nfunction sqlLiteral(value: string | null): string {\n  if (value === null) {\n    return \"NULL\";\n  }\n  return `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n\nfunction emailEventTypeSeedSql(\n  catalog: ReadonlyArray<{\n    category: string;\n    default_template_key: string | null;\n    description: string;\n    event_type: string;\n    optional_variables: readonly string[];\n    required_variables: readonly string[];\n  }> = AUTH_EMAIL_EVENT_CATALOG,\n): string {\n  const values = catalog.map(\n    (entry) => `(\n        ${sqlLiteral(entry.event_type)},\n        ${sqlLiteral(entry.category)},\n        ${sqlLiteral(entry.description)},\n        ${sqlLiteral(entry.default_template_key)},\n        '${JSON.stringify(entry.required_variables)}'::jsonb,\n        '${JSON.stringify(entry.optional_variables)}'::jsonb,\n        TRUE,\n        TRUE,\n        '{}'::jsonb\n    )`\n  ).join(\",\\n    \");\n  return `\nINSERT INTO athena.email_event_types (\n    event_type, category, description, default_template_key,\n    required_variables, optional_variables, is_active, is_system, metadata\n)\nVALUES\n    ${values}\nON CONFLICT (event_type) DO UPDATE\nSET\n    category = EXCLUDED.category,\n    description = EXCLUDED.description,\n    default_template_key = EXCLUDED.default_template_key,\n    required_variables = EXCLUDED.required_variables,\n    optional_variables = EXCLUDED.optional_variables,\n    is_active = EXCLUDED.is_active,\n    is_system = EXCLUDED.is_system,\n    metadata = EXCLUDED.metadata,\n    updated_at = NOW();\n`;\n}\n","/**\n * Classify Embedded Auth ledger probe failures.\n *\n * A missing `athena.auth_schema_migrations` table is UNINITIALIZED.\n * Connection, privilege, and malformed-adapter failures are not.\n */\n\nexport type AthenaAuthLedgerHealth =\n\t| \"UNINITIALIZED\"\n\t| \"UNREACHABLE\"\n\t| \"PERMISSION_DENIED\"\n\t| \"INVALID_LEDGER\"\n\t| \"FUTURE_GENERATION\"\n\t| \"DRIFT\"\n\t| \"HEALTHY\";\n\nexport type AthenaAuthLedgerQueryFailure =\n\t| \"UNINITIALIZED\"\n\t| \"UNREACHABLE\"\n\t| \"PERMISSION_DENIED\"\n\t| \"INVALID_LEDGER\";\n\nconst NETWORK_NODE_CODES = new Set([\n\t\"ECONNREFUSED\",\n\t\"ECONNRESET\",\n\t\"ETIMEDOUT\",\n\t\"ENOTFOUND\",\n\t\"EAI_AGAIN\",\n\t\"EPIPE\",\n\t\"EHOSTUNREACH\",\n\t\"ENETUNREACH\",\n]);\n\nfunction codeOf(error: unknown): string {\n\tif (error && typeof error === \"object\" && \"code\" in error) {\n\t\tconst code = (error as { code?: unknown }).code;\n\t\tif (typeof code === \"string\" && code.trim()) {\n\t\t\treturn code.trim();\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction messageOf(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\treturn String(error);\n}\n\nfunction walkCauses(error: unknown): unknown[] {\n\tconst seen: unknown[] = [];\n\tlet current: unknown = error;\n\tfor (let depth = 0; depth < 6 && current; depth += 1) {\n\t\tseen.push(current);\n\t\tif (typeof current !== \"object\" || current === null || !(\"cause\" in current)) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrent = (current as { cause: unknown }).cause;\n\t}\n\treturn seen;\n}\n\n/**\n * Classify an error raised while reading `athena.auth_schema_migrations`.\n */\nexport function classifyAuthLedgerQueryError(\n\terror: unknown,\n): AthenaAuthLedgerQueryFailure {\n\tfor (const node of walkCauses(error)) {\n\t\tconst code = codeOf(node);\n\t\tif (code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\") {\n\t\t\treturn \"INVALID_LEDGER\";\n\t\t}\n\t\tif (code === \"ATHENA_AUTH_LEDGER_UNREACHABLE\") {\n\t\t\treturn \"UNREACHABLE\";\n\t\t}\n\t\tif (code === \"ATHENA_AUTH_LEDGER_PERMISSION_DENIED\") {\n\t\t\treturn \"PERMISSION_DENIED\";\n\t\t}\n\t\tconst sqlState = /^[0-9A-Z]{5}$/i.test(code) ? code.toUpperCase() : \"\";\n\t\tif (sqlState === \"42P01\" || sqlState === \"3F000\") {\n\t\t\treturn \"UNINITIALIZED\";\n\t\t}\n\t\tif (\n\t\t\tsqlState === \"42501\" ||\n\t\t\tsqlState === \"25006\" ||\n\t\t\tsqlState === \"28P01\" ||\n\t\t\tsqlState === \"28000\"\n\t\t) {\n\t\t\treturn \"PERMISSION_DENIED\";\n\t\t}\n\t\tif (\n\t\t\tsqlState.startsWith(\"08\") ||\n\t\t\tsqlState === \"57P03\" ||\n\t\t\tNETWORK_NODE_CODES.has(code)\n\t\t) {\n\t\t\treturn \"UNREACHABLE\";\n\t\t}\n\t}\n\n\tconst message = messageOf(error);\n\tif (\n\t\t/relation [\"']?athena\\.auth_schema_migrations[\"']? does not exist/i.test(\n\t\t\tmessage,\n\t\t) ||\n\t\t/relation [\"']?auth_schema_migrations[\"']? does not exist/i.test(message) ||\n\t\t/schema [\"']?athena[\"']? does not exist/i.test(message)\n\t) {\n\t\treturn \"UNINITIALIZED\";\n\t}\n\tif (\n\t\t/permission denied|insufficient privilege|password authentication failed|not authorized/i.test(\n\t\t\tmessage,\n\t\t)\n\t) {\n\t\treturn \"PERMISSION_DENIED\";\n\t}\n\tif (\n\t\t/econnrefused|enotfound|etimedout|eai_again|econnreset|connection refused|connection terminated|timeout expired/i.test(\n\t\t\tmessage,\n\t\t)\n\t) {\n\t\treturn \"UNREACHABLE\";\n\t}\n\n\treturn \"UNREACHABLE\";\n}\n\nexport function healthFromAuthPlan(input: {\n\tconflictCount: number;\n\thasBlockingDrift: boolean;\n\tentries: ReadonlyArray<{ ledgerState: string }>;\n}): AthenaAuthLedgerHealth {\n\tif (input.entries.some((entry) => entry.ledgerState === \"unknown\")) {\n\t\treturn \"FUTURE_GENERATION\";\n\t}\n\tif (input.hasBlockingDrift) {\n\t\treturn \"DRIFT\";\n\t}\n\tif (\n\t\tinput.entries.length > 0 &&\n\t\tinput.entries.every((entry) => entry.ledgerState === \"absent\")\n\t) {\n\t\treturn \"UNINITIALIZED\";\n\t}\n\tif (input.conflictCount > 0) {\n\t\treturn \"DRIFT\";\n\t}\n\treturn \"HEALTHY\";\n}\n","import type { AthenaAuthDatabase } from \"./database.ts\";\nimport { assertQueryResult } from \"./database.ts\";\nimport type { SchemaExpectation } from \"./schema-manifest.ts\";\n\nexport type AthenaAuthSchemaDriftKind =\n  | \"missing-schema\"\n  | \"missing-table\"\n  | \"missing-column\"\n  | \"column-mismatch\"\n  | \"missing-index\"\n  | \"missing-constraint\";\n\nexport interface AthenaAuthSchemaDrift {\n  kind: AthenaAuthSchemaDriftKind;\n  object: string;\n  expected?: unknown;\n  actual?: unknown;\n}\n\ninterface CatalogSnapshot {\n  schemas: Set<string>;\n  tables: Set<string>;\n  columns: Set<string>;\n  indexes: Set<string>;\n  constraints: Set<string>;\n}\n\nasync function loadCatalogSnapshot(\n  db: AthenaAuthDatabase\n): Promise<CatalogSnapshot> {\n  const schemasResult = assertQueryResult<{ nspname: string }>(\n    await db.query<{ nspname: string }>(\n      `SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname = 'athena'`\n    ),\n    \"schema-inspect schemas\"\n  );\n\n  const tablesResult = assertQueryResult<{\n    table_schema: string;\n    table_name: string;\n  }>(\n    await db.query<{ table_schema: string; table_name: string }>(\n      `SELECT table_schema, table_name\n       FROM information_schema.tables\n       WHERE table_schema = 'athena'\n         AND table_type = 'BASE TABLE'`\n    ),\n    \"schema-inspect tables\"\n  );\n\n  const columnsResult = assertQueryResult<{\n    table_schema: string;\n    table_name: string;\n    column_name: string;\n  }>(\n    await db.query<{\n      table_schema: string;\n      table_name: string;\n      column_name: string;\n    }>(\n      `SELECT table_schema, table_name, column_name\n       FROM information_schema.columns\n       WHERE table_schema = 'athena'`\n    ),\n    \"schema-inspect columns\"\n  );\n\n  const indexesResult = assertQueryResult<{\n    schemaname: string;\n    indexname: string;\n  }>(\n    await db.query<{ schemaname: string; indexname: string }>(\n      `SELECT schemaname, indexname\n       FROM pg_catalog.pg_indexes\n       WHERE schemaname = 'athena'`\n    ),\n    \"schema-inspect indexes\"\n  );\n\n  const constraintsResult = assertQueryResult<{\n    table_schema: string;\n    table_name: string;\n    constraint_name: string;\n  }>(\n    await db.query<{\n      table_schema: string;\n      table_name: string;\n      constraint_name: string;\n    }>(\n      `SELECT table_schema, table_name, constraint_name\n       FROM information_schema.table_constraints\n       WHERE table_schema = 'athena'`\n    ),\n    \"schema-inspect constraints\"\n  );\n\n  return {\n    schemas: new Set(schemasResult.rows.map((row) => row.nspname)),\n    tables: new Set(\n      tablesResult.rows.map((row) => `${row.table_schema}.${row.table_name}`)\n    ),\n    columns: new Set(\n      columnsResult.rows.map(\n        (row) => `${row.table_schema}.${row.table_name}.${row.column_name}`\n      )\n    ),\n    indexes: new Set(\n      indexesResult.rows.map((row) => `${row.schemaname}.${row.indexname}`)\n    ),\n    constraints: new Set(\n      constraintsResult.rows.map(\n        (row) =>\n          `${row.table_schema}.${row.table_name}.${row.constraint_name}`\n      )\n    ),\n  };\n}\n\nfunction evaluateExpectation(\n  expectation: SchemaExpectation,\n  catalog: CatalogSnapshot\n): AthenaAuthSchemaDrift | undefined {\n  switch (expectation.kind) {\n    case \"schema\": {\n      const name = expectation.schema ?? expectation.name ?? \"\";\n      if (!catalog.schemas.has(name)) {\n        return {\n          kind: \"missing-schema\",\n          object: expectation.object,\n          expected: name,\n        };\n      }\n      return undefined;\n    }\n    case \"table\": {\n      if (!catalog.tables.has(expectation.object)) {\n        return {\n          kind: \"missing-table\",\n          object: expectation.object,\n          expected: expectation.object,\n        };\n      }\n      return undefined;\n    }\n    case \"column\": {\n      if (!catalog.columns.has(expectation.object)) {\n        return {\n          kind: \"missing-column\",\n          object: expectation.object,\n          expected: expectation.object,\n        };\n      }\n      return undefined;\n    }\n    case \"index\": {\n      if (!catalog.indexes.has(expectation.object)) {\n        return {\n          kind: \"missing-index\",\n          object: expectation.object,\n          expected: expectation.object,\n        };\n      }\n      return undefined;\n    }\n    case \"constraint\": {\n      if (!catalog.constraints.has(expectation.object)) {\n        return {\n          kind: \"missing-constraint\",\n          object: expectation.object,\n          expected: expectation.object,\n        };\n      }\n      return undefined;\n    }\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Compare structural expectations against live PostgreSQL catalogs.\n */\nexport async function inspectAthenaAuthExpectations(\n  db: AthenaAuthDatabase,\n  expectations: readonly SchemaExpectation[]\n): Promise<AthenaAuthSchemaDrift[]> {\n  if (expectations.length === 0) {\n    return [];\n  }\n  const catalog = await loadCatalogSnapshot(db);\n  const drift: AthenaAuthSchemaDrift[] = [];\n  for (const expectation of expectations) {\n    const item = evaluateExpectation(expectation, catalog);\n    if (item) {\n      drift.push(item);\n    }\n  }\n  return drift;\n}\n","/**\n * Structural expectations for embedded Athena Auth migrations.\n * Used for ledger/schema drift detection — not full DDL equivalence.\n */\n\nexport type MigrationRepairability = \"idempotent\" | \"inspect-only\" | \"manual\";\n\nexport type SchemaExpectationKind =\n  | \"schema\"\n  | \"table\"\n  | \"column\"\n  | \"index\"\n  | \"constraint\";\n\nexport interface SchemaExpectation {\n  kind: SchemaExpectationKind;\n  /** Fully-qualified display name, e.g. athena.users or athena.idx_users_email */\n  object: string;\n  schema?: string;\n  table?: string;\n  name?: string;\n  column?: string;\n}\n\nexport interface AthenaAuthMigrationDefinition {\n  version: number;\n  name: string;\n  sql: string;\n  expectations?: readonly SchemaExpectation[];\n  repairability?: MigrationRepairability;\n}\n\nexport function schema(name: string): SchemaExpectation {\n  return { kind: \"schema\", name, object: name, schema: name };\n}\n\nexport function table(schemaName: string, tableName: string): SchemaExpectation {\n  return {\n    kind: \"table\",\n    schema: schemaName,\n    table: tableName,\n    name: tableName,\n    object: `${schemaName}.${tableName}`,\n  };\n}\n\nexport function column(\n  schemaName: string,\n  tableName: string,\n  columnName: string\n): SchemaExpectation {\n  return {\n    kind: \"column\",\n    schema: schemaName,\n    table: tableName,\n    column: columnName,\n    name: columnName,\n    object: `${schemaName}.${tableName}.${columnName}`,\n  };\n}\n\nexport function index(schemaName: string, indexName: string): SchemaExpectation {\n  return {\n    kind: \"index\",\n    schema: schemaName,\n    name: indexName,\n    object: `${schemaName}.${indexName}`,\n  };\n}\n\nexport function constraint(\n  schemaName: string,\n  tableName: string,\n  constraintName: string\n): SchemaExpectation {\n  return {\n    kind: \"constraint\",\n    schema: schemaName,\n    table: tableName,\n    name: constraintName,\n    object: `${schemaName}.${tableName}.${constraintName}`,\n  };\n}\n\n/** Core structural invariants keyed by migration version. */\nexport const ATHENA_AUTH_MIGRATION_EXPECTATIONS: Readonly<\n  Record<number, readonly SchemaExpectation[]>\n> = {\n  1: [\n    table(\"athena\", \"users\"),\n    table(\"athena\", \"sessions\"),\n    table(\"athena\", \"accounts\"),\n    table(\"athena\", \"verifications\"),\n    index(\"athena\", \"idx_users_email\"),\n    index(\"athena\", \"idx_sessions_token\"),\n  ],\n  2: [\n    table(\"athena\", \"organization\"),\n    table(\"athena\", \"member\"),\n    table(\"athena\", \"invitation\"),\n    index(\"athena\", \"idx_organization_slug\"),\n  ],\n  3: [table(\"athena\", \"two_factor\"), index(\"athena\", \"idx_two_factor_user_id\")],\n  4: [table(\"athena\", \"api_keys\"), index(\"athena\", \"idx_api_keys_user_id\")],\n  5: [table(\"athena\", \"passkeys\"), index(\"athena\", \"idx_passkeys_user_id\")],\n  6: [table(\"athena\", \"email_send_failures\")],\n  7: [table(\"athena\", \"emails\")],\n  9: [column(\"athena\", \"users\", \"last_sign_in_at\")],\n  11: [table(\"athena\", \"email_templates\")],\n  12: [\n    column(\"athena\", \"email_send_failures\", \"resolved\"),\n    column(\"athena\", \"emails\", \"flow\"),\n  ],\n  14: [table(\"athena\", \"email_event_types\")],\n  15: [column(\"athena\", \"email_templates\", \"attachments\")],\n  21: [\n    table(\"athena\", \"auth_schema_migrations\"),\n    table(\"athena\", \"runtime_key\"),\n  ],\n  22: [\n    column(\"athena\", \"passkeys\", \"updated_at\"),\n    index(\"athena\", \"idx_passkeys_user_id\"),\n    index(\"athena\", \"idx_passkeys_credential_id\"),\n  ],\n  23: [\n    table(\"athena\", \"audit_log_auth\"),\n    table(\"athena\", \"traces_auth\"),\n    index(\"athena\", \"audit_log_auth_event_id_idx\"),\n    index(\"athena\", \"traces_auth_trace_id_idx\"),\n    index(\"athena\", \"traces_auth_event_id_idx\"),\n  ],\n  24: [table(\"athena\", \"email_event_types\")],\n  25: [column(\"athena\", \"passkeys\", \"aaguid\")],\n  26: [\n    column(\"athena\", \"passkeys\", \"resident_key\"),\n    table(\"athena\", \"passkey_registration_transactions\"),\n    index(\"athena\", \"idx_passkey_reg_tx_challenge_hash\"),\n  ],\n  27: [\n    table(\"athena\", \"auth_bridge_codes\"),\n    index(\"athena\", \"idx_auth_bridge_codes_expires_at\"),\n    index(\"athena\", \"idx_auth_bridge_codes_session_id\"),\n    index(\"athena\", \"idx_auth_bridge_codes_user_id\"),\n    index(\"athena\", \"idx_auth_bridge_codes_outstanding_session\"),\n  ],\n  28: [\n    table(\"athena\", \"oauth_transactions\"),\n    index(\"athena\", \"idx_oauth_transactions_expires_at\"),\n  ],\n  29: [\n    table(\"athena\", \"notification_preferences\"),\n    index(\"athena\", \"uq_notification_preferences_user_channel_topic\"),\n    index(\"athena\", \"uq_notification_preferences_user_org_channel_topic\"),\n  ],\n  30: [\n    column(\"athena\", \"organization\", \"created_by_user_id\"),\n    index(\"athena\", \"idx_organization_created_by_user_id\"),\n  ],\n  31: [\n    table(\"athena\", \"authorization_rights\"),\n    table(\"athena\", \"authorization_roles\"),\n    table(\"athena\", \"authorization_role_rights\"),\n    table(\"athena\", \"authorization_user_roles\"),\n    table(\"athena\", \"authorization_member_roles\"),\n    table(\"athena\", \"authorization_revisions\"),\n    table(\"athena\", \"authorization_audit_log\"),\n  ],\n  32: [\n    constraint(\"athena\", \"authorization_roles\", \"authorization_roles_scope_organization_id\"),\n    constraint(\"athena\", \"authorization_revisions\", \"authorization_revisions_scope_nullability\"),\n  ],\n};\n\n/**\n * Auth migrations use IF NOT EXISTS / ADD COLUMN IF NOT EXISTS and are\n * generally safe to re-apply for structural repair.\n */\nexport function repairabilityForAuthMigration(): MigrationRepairability {\n  return \"idempotent\";\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface EnsureApplicationMigrationsDirectoryOptions {\n\t/** Absolute migrations directory path. */\n\tdirectory: string;\n\t/** When true, report would-be creation without writing. */\n\tdryRun?: boolean;\n\t/** Write `.gitkeep` so an empty folder is committable. Defaults to true. */\n\tkeepFile?: boolean;\n}\n\nexport interface EnsureApplicationMigrationsDirectoryResult {\n\tcreated: boolean;\n\tdirectory: string;\n\tkeepFileWritten: boolean;\n}\n\n/**\n * Creates the application SQL migrations directory when missing.\n *\n * Migrate used to print `Directory athena/migrations` even when the folder\n * did not exist. Init and migrate both call this so the advertised layout\n * is a real path (`athena/migrations/.gitkeep`).\n */\nexport async function ensureApplicationMigrationsDirectory(\n\toptions: EnsureApplicationMigrationsDirectoryOptions,\n): Promise<EnsureApplicationMigrationsDirectoryResult> {\n\tconst keepFile = options.keepFile !== false;\n\tconst keepPath = join(options.directory, \".gitkeep\");\n\tconst directoryMissing = !existsSync(options.directory);\n\tconst keepMissing = keepFile && !existsSync(keepPath);\n\n\tif (!directoryMissing && !keepMissing) {\n\t\treturn {\n\t\t\tcreated: false,\n\t\t\tdirectory: options.directory,\n\t\t\tkeepFileWritten: false,\n\t\t};\n\t}\n\n\tif (options.dryRun) {\n\t\treturn {\n\t\t\tcreated: directoryMissing,\n\t\t\tdirectory: options.directory,\n\t\t\tkeepFileWritten: keepMissing,\n\t\t};\n\t}\n\n\tif (directoryMissing) {\n\t\tawait mkdir(options.directory, { recursive: true });\n\t}\n\tif (keepMissing) {\n\t\tawait writeFile(keepPath, \"\", \"utf8\");\n\t}\n\n\treturn {\n\t\tcreated: directoryMissing,\n\t\tdirectory: options.directory,\n\t\tkeepFileWritten: keepMissing,\n\t};\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\n\nimport { listAthenaAuthCanonicalMigrations } from \"../auth/local/schema.ts\";\nimport {\n\tDEFAULT_MANAGED_AUTH_MIGRATIONS_DIRECTORY,\n\tDEFAULT_MIGRATIONS_DIRECTORY,\n} from \"./constants.ts\";\nimport { ensureApplicationMigrationsDirectory } from \"./ensure-directory.ts\";\n\nexport const MANAGED_AUTH_MIGRATION_HEADER = [\n\t\"-- AUTO-GENERATED BY @xylex-group/athena\",\n\t\"-- Embedded Athena Auth managed migration.\",\n\t\"-- Do not edit. The package-owned migration definition is authoritative.\",\n].join(\"\\n\");\n\nexport type ManagedAuthFileStatus =\n\t| \"ok\"\n\t| \"missing\"\n\t| \"modified\"\n\t| \"unexpected\";\n\nexport interface ManagedAuthMigrationArtifact {\n\tcontents: string;\n\tfilename: string;\n\tname: string;\n\tversion: number;\n}\n\nexport interface ManagedAuthFileInspection {\n\tfilename: string;\n\tstatus: ManagedAuthFileStatus;\n}\n\nexport interface ManagedAuthInspection {\n\tdirectory: string;\n\tdrifted: boolean;\n\tfiles: ManagedAuthFileInspection[];\n}\n\nexport interface MaterializeManagedAuthMigrationsOptions {\n\tcwd?: string;\n\tdirectory?: string;\n\tdryRun?: boolean;\n\t/** When true, overwrite locally edited managed files. Default true. */\n\toverwrite?: boolean;\n}\n\nexport interface MaterializeManagedAuthMigrationsResult {\n\tdirectory: string;\n\trestored: string[];\n\tunchanged: string[];\n\tunexpected: string[];\n\twritten: string[];\n}\n\nexport interface EnsureAthenaProjectLayoutOptions {\n\tapplicationDirectory?: string;\n\tcwd?: string;\n\tdryRun?: boolean;\n\tmanagedDirectory?: string;\n}\n\nexport interface EnsureAthenaProjectLayoutResult {\n\tapplicationDirectory: string;\n\tcreatedApplicationMigrations: boolean;\n\tcreatedManagedAuthMigrations: boolean;\n\tmanagedDirectory: string;\n}\n\nexport function managedAuthMigrationFilename(name: string): string {\n\treturn name.endsWith(\".sql\") ? name : `${name}.sql`;\n}\n\nexport function renderManagedAuthMigrationFile(sql: string): string {\n\tconst body = sql.trim();\n\treturn `${MANAGED_AUTH_MIGRATION_HEADER}\\n\\n${body}\\n`;\n}\n\nexport function listManagedAuthMigrationArtifacts(): ManagedAuthMigrationArtifact[] {\n\treturn listAthenaAuthCanonicalMigrations().map((entry) => ({\n\t\tcontents: renderManagedAuthMigrationFile(entry.sql),\n\t\tfilename: managedAuthMigrationFilename(entry.name),\n\t\tname: entry.name,\n\t\tversion: entry.version,\n\t}));\n}\n\nexport function resolveManagedAuthMigrationsDirectory(\n\tcwd: string,\n\tdirectory = DEFAULT_MANAGED_AUTH_MIGRATIONS_DIRECTORY,\n): string {\n\treturn resolve(cwd, directory);\n}\n\nexport async function ensureAthenaProjectLayout(\n\toptions: EnsureAthenaProjectLayoutOptions = {},\n): Promise<EnsureAthenaProjectLayoutResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst applicationDirectory = resolve(\n\t\tcwd,\n\t\toptions.applicationDirectory ?? DEFAULT_MIGRATIONS_DIRECTORY,\n\t);\n\tconst managedDirectory = resolveManagedAuthMigrationsDirectory(\n\t\tcwd,\n\t\toptions.managedDirectory,\n\t);\n\tconst application = await ensureApplicationMigrationsDirectory({\n\t\tdirectory: applicationDirectory,\n\t\tdryRun: options.dryRun,\n\t});\n\tconst managedMissing = !existsSync(managedDirectory);\n\tif (managedMissing && !options.dryRun) {\n\t\tawait mkdir(managedDirectory, { recursive: true });\n\t}\n\treturn {\n\t\tapplicationDirectory,\n\t\tcreatedApplicationMigrations: application.created,\n\t\tcreatedManagedAuthMigrations: managedMissing,\n\t\tmanagedDirectory,\n\t};\n}\n\nfunction ignoreManagedName(name: string): boolean {\n\treturn name.startsWith(\".\") || name === \"README.md\";\n}\n\nexport async function inspectManagedAuthMigrations(\n\toptions: MaterializeManagedAuthMigrationsOptions = {},\n): Promise<ManagedAuthInspection> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst directory = resolveManagedAuthMigrationsDirectory(cwd, options.directory);\n\tconst expected = listManagedAuthMigrationArtifacts();\n\tconst expectedByName = new Map(\n\t\texpected.map((item) => [item.filename, item.contents]),\n\t);\n\tconst files: ManagedAuthFileInspection[] = [];\n\n\tif (!existsSync(directory)) {\n\t\tfor (const artifact of expected) {\n\t\t\tfiles.push({ filename: artifact.filename, status: \"missing\" });\n\t\t}\n\t\treturn { directory, drifted: files.length > 0, files };\n\t}\n\n\tconst listed = await readdir(directory);\n\tconst seen = new Set<string>();\n\tfor (const name of listed) {\n\t\tif (ignoreManagedName(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(name);\n\t\tconst expectedContents = expectedByName.get(name);\n\t\tif (expectedContents === undefined) {\n\t\t\tfiles.push({ filename: name, status: \"unexpected\" });\n\t\t\tcontinue;\n\t\t}\n\t\tconst actual = await readFile(join(directory, name), \"utf8\");\n\t\tfiles.push({\n\t\t\tfilename: name,\n\t\t\tstatus: actual === expectedContents ? \"ok\" : \"modified\",\n\t\t});\n\t}\n\tfor (const artifact of expected) {\n\t\tif (!seen.has(artifact.filename)) {\n\t\t\tfiles.push({ filename: artifact.filename, status: \"missing\" });\n\t\t}\n\t}\n\tfiles.sort((left, right) => left.filename.localeCompare(right.filename));\n\tconst drifted = files.some((file) => file.status !== \"ok\");\n\treturn { directory, drifted, files };\n}\n\nexport function formatManagedAuthDrift(inspection: ManagedAuthInspection): string {\n\tconst drifted = inspection.files.filter((file) => file.status !== \"ok\");\n\tif (drifted.length === 0) {\n\t\treturn \"\";\n\t}\n\tconst lines = [\n\t\t\"Managed Embedded Auth migration files drifted from the package-owned definitions.\",\n\t\t\"Local files are a read-only view. Athena will not execute edited copies.\",\n\t\t\"\",\n\t\t...drifted.map((file) => `  ${file.status}: ${file.filename}`),\n\t\t\"\",\n\t\t\"Restore with:\",\n\t\t\"\",\n\t\t\"  athena-js migrate auth sync\",\n\t];\n\treturn lines.join(\"\\n\");\n}\n\nexport async function materializeManagedAuthMigrations(\n\toptions: MaterializeManagedAuthMigrationsOptions = {},\n): Promise<MaterializeManagedAuthMigrationsResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst overwrite = options.overwrite !== false;\n\tconst directory = resolveManagedAuthMigrationsDirectory(cwd, options.directory);\n\tconst expected = listManagedAuthMigrationArtifacts();\n\tconst written: string[] = [];\n\tconst unchanged: string[] = [];\n\tconst restored: string[] = [];\n\tconst unexpected: string[] = [];\n\n\tif (!options.dryRun) {\n\t\tawait mkdir(directory, { recursive: true });\n\t}\n\n\tconst existing = existsSync(directory) ? await readdir(directory) : [];\n\tconst existingSet = new Set(\n\t\texisting.filter((name) => !ignoreManagedName(name)),\n\t);\n\tconst expectedNames = new Set(expected.map((item) => item.filename));\n\tfor (const name of existingSet) {\n\t\tif (!expectedNames.has(name)) {\n\t\t\tunexpected.push(name);\n\t\t}\n\t}\n\n\tfor (const artifact of expected) {\n\t\tconst path = join(directory, artifact.filename);\n\t\tconst present = existingSet.has(artifact.filename);\n\t\tif (!present) {\n\t\t\tif (!options.dryRun) {\n\t\t\t\tawait writeFile(path, artifact.contents, \"utf8\");\n\t\t\t}\n\t\t\twritten.push(artifact.filename);\n\t\t\tcontinue;\n\t\t}\n\t\tconst actual = await readFile(path, \"utf8\");\n\t\tif (actual === artifact.contents) {\n\t\t\tunchanged.push(artifact.filename);\n\t\t\tcontinue;\n\t\t}\n\t\tif (overwrite) {\n\t\t\tif (!options.dryRun) {\n\t\t\t\tawait writeFile(path, artifact.contents, \"utf8\");\n\t\t\t}\n\t\t\trestored.push(artifact.filename);\n\t\t\tcontinue;\n\t\t}\n\t}\n\n\treturn { directory, restored, unchanged, unexpected, written };\n}\n","import {\n\tapplyGeneratorProjectEnv,\n\tnormalizeGeneratorConfig,\n} from \"./config.ts\";\nimport type {\n\tAthenaGeneratorConfig,\n\tGeneratorProviderConfig,\n\tLoadedGeneratorConfig,\n} from \"./types.ts\";\n\nexport type GeneratorDatabaseAuthorityMode = \"direct\" | \"gateway\" | \"auto\";\n\nexport type GeneratorDatabaseAuthoritySource =\n\t| \"explicit-provider\"\n\t| \"loaded-config\"\n\t| \"environment-probe\";\n\n/**\n * Where a schema list written into config came from.\n *\n * - `discovered` — live catalog introspection\n * - `configured` — existing loaded/config schemas (no live discovery)\n * - `explicit` — caller-supplied schemas option\n * - `fallback` — `DEFAULT_POSTGRES_SCHEMAS` because discovery was unavailable\n */\nexport type GeneratorSchemaProvenance =\n\t| \"discovered\"\n\t| \"configured\"\n\t| \"explicit\"\n\t| \"fallback\";\n\nexport interface ResolvedGeneratorDatabaseAuthority {\n\tmode: \"direct\" | \"gateway\";\n\tprovider: GeneratorProviderConfig;\n\trestoreEnv: () => void;\n\tsource: GeneratorDatabaseAuthoritySource;\n}\n\nexport interface ResolveGeneratorDatabaseAuthorityOptions {\n\t/**\n\t * When false, skip loading project `.env*` into `process.env`.\n\t * Defaults to true. Pass false when the caller already applied project env\n\t * (for example inside `loadGeneratorConfig`).\n\t */\n\tapplyProjectEnv?: boolean;\n\tcwd?: string;\n\tloaded?: LoadedGeneratorConfig;\n\t/** Preferred provider mode when probing from environment. */\n\tmode?: GeneratorDatabaseAuthorityMode;\n\t/** Pre-resolved provider (skips probe / loaded lookup). */\n\tprovider?: GeneratorProviderConfig;\n}\n\nfunction hasNonEmptyEnv(keys: readonly string[]): boolean {\n\tfor (const key of keys) {\n\t\tconst value = process.env[key];\n\t\tif (typeof value === \"string\" && value.trim().length > 0) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nconst DIRECT_CONNECTION_KEYS = [\n\t\"ATHENA_GENERATOR_PG_URL\",\n\t\"DATABASE_URL\",\n\t\"PG_URL\",\n\t\"POSTGRES_URL\",\n\t\"POSTGRESQL_URL\",\n] as const;\n\nconst GATEWAY_URL_KEYS = [\n\t\"ATHENA_URL\",\n\t\"ATHENA_GATEWAY_URL\",\n\t\"ATHENA_GENERATOR_URL\",\n] as const;\n\nconst GATEWAY_KEY_KEYS = [\n\t\"ATHENA_API_KEY\",\n\t\"ATHENA_GATEWAY_API_KEY\",\n\t\"ATHENA_GENERATOR_API_KEY\",\n] as const;\n\n/**\n * Picks direct vs gateway from env after project `.env*` has been applied.\n * Prefers direct when a connection string is present.\n */\nexport function detectAuthorityMode(\n\tpreferred: GeneratorDatabaseAuthorityMode = \"auto\",\n): \"direct\" | \"gateway\" {\n\tif (preferred === \"direct\" || preferred === \"gateway\") {\n\t\treturn preferred;\n\t}\n\n\tconst hasDirect = hasNonEmptyEnv(DIRECT_CONNECTION_KEYS);\n\tconst hasGateway =\n\t\thasNonEmptyEnv(GATEWAY_URL_KEYS) && hasNonEmptyEnv(GATEWAY_KEY_KEYS);\n\n\tif (hasDirect) {\n\t\treturn \"direct\";\n\t}\n\tif (hasGateway) {\n\t\treturn \"gateway\";\n\t}\n\n\treturn \"direct\";\n}\n\nfunction providerModeOf(\n\tprovider: GeneratorProviderConfig | undefined,\n\tpreferred: GeneratorDatabaseAuthorityMode,\n): \"direct\" | \"gateway\" {\n\tif (provider && provider.kind === \"postgres\") {\n\t\tif (provider.mode === \"gateway\") {\n\t\t\treturn \"gateway\";\n\t\t}\n\t\tif (provider.mode === \"direct\") {\n\t\t\treturn \"direct\";\n\t\t}\n\t}\n\treturn detectAuthorityMode(preferred);\n}\n\n/**\n * Resolves the canonical generator database authority used by migrate, init\n * schema discovery, generate, diff, and introspection.\n *\n * Always prefers an explicit provider, then a loaded normalized config, then an\n * environment probe — after optionally applying project `.env*` files the same\n * way `loadGeneratorConfig` / migrate do.\n */\nexport function resolveGeneratorDatabaseAuthority(\n\toptions: ResolveGeneratorDatabaseAuthorityOptions = {},\n): ResolvedGeneratorDatabaseAuthority {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst preferredMode = options.mode ?? \"auto\";\n\tconst restoreEnv =\n\t\toptions.applyProjectEnv === false\n\t\t\t? () => {}\n\t\t\t: applyGeneratorProjectEnv(cwd);\n\n\ttry {\n\t\tif (options.provider) {\n\t\t\treturn {\n\t\t\t\tmode: providerModeOf(options.provider, preferredMode),\n\t\t\t\tprovider: options.provider,\n\t\t\t\trestoreEnv,\n\t\t\t\tsource: \"explicit-provider\",\n\t\t\t};\n\t\t}\n\n\t\tif (options.loaded) {\n\t\t\treturn {\n\t\t\t\tmode: providerModeOf(options.loaded.config.provider, preferredMode),\n\t\t\t\tprovider: options.loaded.config.provider,\n\t\t\t\trestoreEnv,\n\t\t\t\tsource: \"loaded-config\",\n\t\t\t};\n\t\t}\n\n\t\tconst mode = detectAuthorityMode(preferredMode);\n\t\tconst probeConfig: AthenaGeneratorConfig = {\n\t\t\tprovider:\n\t\t\t\tmode === \"gateway\"\n\t\t\t\t\t? { kind: \"postgres\", mode: \"gateway\" }\n\t\t\t\t\t: { kind: \"postgres\", mode: \"direct\" },\n\t\t};\n\t\tconst normalized = normalizeGeneratorConfig(probeConfig);\n\t\treturn {\n\t\t\tmode,\n\t\t\tprovider: normalized.provider,\n\t\t\trestoreEnv,\n\t\t\tsource: \"environment-probe\",\n\t\t};\n\t} catch (error) {\n\t\trestoreEnv();\n\t\tthrow error;\n\t}\n}\n\n/**\n * Human-readable explanation when schema discovery could not run and the CLI\n * fell back to `DEFAULT_POSTGRES_SCHEMAS` (typically `public`).\n */\nexport function formatSchemaFallbackMessages(options: {\n\tdiscoveryError?: string;\n\tschemas: readonly string[];\n\t/** Optional hint of schemas that often exist after migrate (e.g. athena). */\n\texpectedLiveSchemas?: readonly string[];\n}): string[] {\n\tconst reason =\n\t\toptions.discoveryError?.trim() ||\n\t\t\"no PostgreSQL connection could be resolved.\";\n\tconst schemaList = options.schemas.join(\", \") || \"public\";\n\tconst lines = [\n\t\t`Schema discovery unavailable: ${reason}`,\n\t\t`Config created with fallback schemas: ${schemaList}.`,\n\t\t\"These schemas were NOT discovered from the database.\",\n\t\t\"\",\n\t\t\"To discover schemas, provide DATABASE_URL or another supported\",\n\t\t\"connection source and rerun:\",\n\t\t\"\",\n\t\t\"  athena-js init\",\n\t];\n\n\tconst hints = options.expectedLiveSchemas?.filter((value) => value.trim());\n\tif (hints && hints.length > 0) {\n\t\tlines.push(\"\", \"Expected live schemas may include:\");\n\t\tfor (const schema of hints) {\n\t\t\tlines.push(`  ${schema}`);\n\t\t}\n\t}\n\n\treturn lines;\n}\n","/**\n * Browser-safe Athena client core.\n *\n * This module must never import Node-only modules (pg, dns, net, tls, fs, …).\n * Direct PostgreSQL materialization lives in the Node-only wrapper\n * `./v3-client.ts`; browser and edge-restricted entries consume this core.\n */\n\nimport {\n\ttype AthenaAuthEmailAndPasswordOptions,\n\ttype AthenaAuthPasskeyOptions,\n\ttype AthenaAuthSecurityOptions,\n\ttype AthenaAuthSessionOptions,\n\ttype AthenaAuthSocialOptions,\n\ttype AthenaAuthSocialProviderOptions,\n\tathenaAuthConfig,\n\tisDisabledAthenaAuthConfig,\n\tisLocalAthenaAuthConfig,\n} from \"./auth/config.ts\";\nimport { assertLocalAuthHooks } from \"./auth/hooks/assert-local.ts\";\nimport type { AthenaAuthHooks } from \"./auth/hooks/types.ts\";\nimport { assertLocalAuthObservability } from \"./auth/observability/config.ts\";\nimport type { AthenaAuthObservabilityConfig } from \"./auth/observability/types.ts\";\nimport {\n\ttype AthenaAuthDiagnostics,\n\tattachAthenaAuthRouting,\n\tgetAttachedAthenaAuthRouting,\n\ttype ResolvedAthenaAuthRouting,\n\tresolveAthenaAuthRouting,\n\ttoAthenaAuthDiagnostics,\n} from \"./auth/resolve-routing.ts\";\nimport type {\n\tAthenaAuthBindings,\n\tAthenaAuthClientConfig,\n} from \"./auth/types.ts\";\nimport type { AthenaBillingConfig } from \"./billing/create-client-config.ts\";\nimport {\n\ttype AthenaBillingModule,\n\tcreateBillingModule,\n} from \"./billing/module.ts\";\nimport { createBrowserBillingTransport } from \"./billing/runtime/browser-transport.ts\";\nimport { assertBillingProviderRuntimeEnvironment } from \"./billing/runtime/local/providers/config.ts\";\nimport { assertLocalBillingRuntimeEnvironment } from \"./billing/runtime/resolve-mode.ts\";\nimport type {\n\tAthenaChatModule,\n\tAthenaChatWebSocketFactory,\n} from \"./chat/types.ts\";\nimport {\n\tcreateInternalClientCore,\n\tcreateInternalClientView,\n\ttype InternalAthenaClient,\n\ttype InternalAthenaClientCore,\n} from \"./client/context.ts\";\nimport type { AthenaRequestClient } from \"./client-brands.ts\";\nimport type {\n\tAthenaFromOptions,\n\tAthenaQueryTraceOptions,\n\tRpcQueryBuilder,\n\tTableQueryBuilder,\n} from \"./client-fluent.ts\";\nimport type {\n\tAthenaRequestOptions,\n\tAthenaRequestResponse,\n} from \"./client-request.ts\";\nimport type { AthenaResult } from \"./client-result.ts\";\nimport {\n\tcreateCloudflareEdgeCapabilities,\n\tcreateGatewayCapabilities,\n} from \"./cloudflare/capabilities.ts\";\nimport { createCloudflareD1GatewayTransport } from \"./cloudflare/d1/transport.ts\";\nimport {\n\ttype AthenaExecutionMode,\n\ttype AthenaExecutionModeInput,\n\ttype AthenaExecutionPreferInput,\n\tresolveAthenaExecutionMode,\n} from \"./cloudflare/execution-mode.ts\";\nimport {\n\ttype CloudflareR2StorageModule,\n\tcomposeHttpAndR2Storage,\n\tcreateCloudflareR2StorageModule,\n} from \"./cloudflare/r2/storage.ts\";\nimport type {\n\tAthenaClientCapabilities,\n\tD1DatabaseLike,\n\tR2BucketLike,\n} from \"./cloudflare/types.ts\";\nimport {\n\tCLOUDFLARE_EDGE_API_KEY,\n\tCLOUDFLARE_EDGE_BASE_URL,\n} from \"./cloudflare/types.ts\";\nimport {\n\tAthenaConfigurationError,\n\ttype AthenaService,\n} from \"./config/errors.ts\";\nimport { mergeAthenaRequestContexts } from \"./context/merge.ts\";\nimport type { AthenaDbModule } from \"./db/module.ts\";\nimport { registerTransactionCacheObserver } from \"./db/transaction/cache.ts\";\nimport {\n\ttype AthenaDiagnosticsMode,\n\tresolveAthenaClientDiagnostics,\n} from \"./diagnostics.ts\";\nimport { createEmailModule } from \"./email/module.ts\";\nimport type { AthenaEmailConfig, AthenaEmailModule } from \"./email/types.ts\";\nimport {\n\tATHENA_ENV_API_KEY_KEYS,\n\tATHENA_ENV_CLIENT_KEYS,\n\tATHENA_ENV_DB_URL_KEYS,\n\tATHENA_ENV_URL_KEYS,\n} from \"./env/index.ts\";\nimport type { AthenaGatewayClient } from \"./gateway/client.ts\";\nimport type {\n\tAthenaGatewayCallOptions,\n\tAthenaGatewayConnectionOptions,\n\tAthenaGatewayConnectionResult,\n\tAthenaJsonObject,\n\tAthenaRpcCallOptions,\n\tBackendConfig,\n\tBackendType,\n} from \"./gateway/types.ts\";\nimport type { AthenaNotificationEventStore } from \"./notifications/events-store.ts\";\nimport { createMemoryNotificationEventStore } from \"./notifications/events-store.ts\";\nimport { createMemoryNotificationPreferenceStore } from \"./notifications/memory-store.ts\";\nimport {\n\tcreateNotificationsModule,\n\tunwrapNotificationsGatewayResult,\n} from \"./notifications/module.ts\";\nimport type { NotificationPreferenceStore } from \"./notifications/store.ts\";\nimport type {\n\tAthenaNotificationsConfig,\n\tAthenaNotificationsModule,\n} from \"./notifications/types.ts\";\nimport type { AthenaExecutable } from \"./query/descriptor.ts\";\nimport { catalogFromModels } from \"./query/engine/index.ts\";\nimport { explainAthenaQuery } from \"./query/explain.ts\";\nimport {\n\ttype AthenaQueryClient,\n\tcreateAthenaQueryClient,\n} from \"./react/query-client.ts\";\nimport {\n\tattachAthenaClientInternals,\n\tattachRequestAuthLifecycleGuards,\n\tcreateViewClientInternals,\n\tgetAthenaClientInternals,\n\tisAthenaRequestRuntime,\n\tthrowAthenaRuntimeOwnershipInvalid,\n} from \"./runtime/client-internals.ts\";\nimport { assertDataLifecycleConfig } from \"./runtime/data/lifecycle/assert.ts\";\nimport type { AthenaDataLifecycleConfig } from \"./runtime/data/lifecycle/types.ts\";\nimport type { AthenaPrincipalRightsProjection } from \"./runtime/data/principal.ts\";\nimport {\n\tdetectAthenaRuntimeEnvironment,\n\tresolveAthenaRuntime,\n\ttoAthenaRuntimeDiagnostics,\n} from \"./runtime/resolve.ts\";\nimport type { AthenaRuntimeTopologyIR } from \"./runtime/transport/topology.ts\";\nimport type {\n\tAthenaClientModelForTableName,\n\tAthenaClientModelsInput,\n\tAthenaClientTableName,\n\tAthenaModelTarget,\n\tInsertOf,\n\tRowOf,\n\tUpdateOf,\n} from \"./schema/types.ts\";\nimport type {\n\tAthenaStorageClientConfig,\n\tAthenaStorageDirectUploadConfig,\n\tAthenaStorageModule,\n} from \"./storage/module.ts\";\nimport {\n\tadvertiseSafeStorageCapabilities,\n\tcreateBrowserStorageTransport,\n\tcreateEmbeddedStorageFacade,\n\tcreateStorageRuntime,\n\tgetStorageProvider,\n\tgetStorageRuntime,\n\twrapStorageModuleWithRuntime,\n} from \"./storage/runtime/index.ts\";\nimport {\n\tATHENA_STORAGE_PROVIDER,\n\tATHENA_STORAGE_RUNTIME,\n\ttype AthenaStorageLifecycleHooks,\n\ttype StorageObjectProvider,\n\ttype StorageRuntime,\n} from \"./storage/runtime/types.ts\";\nimport {\n\tgetLocalObjectStore,\n\tisLocalStorageConfig,\n\tisS3StorageConfig,\n} from \"./storage/runtime.ts\";\nimport type { AthenaRequestHeaderOverrideFields } from \"./utils/athena-request-headers.ts\";\n\ntype MaybePromise<T> = T | Promise<T>;\ntype ResolvedModels<TModels> = TModels extends AthenaClientModelsInput\n\t? TModels\n\t: never;\n\n/** Service-specific URL keys (not shared gateway root/db/key/client SSOT). */\nconst ENV_AUTH_URL_KEYS = [\n\t\"ATHENA_AUTH_URL\",\n\t\"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n] as const;\nconst ENV_CHAT_URL_KEYS = [\n\t\"ATHENA_CHAT_URL\",\n\t\"NEXT_PUBLIC_ATHENA_CHAT_URL\",\n] as const;\nconst ENV_CHAT_WS_URL_KEYS = [\n\t\"ATHENA_CHAT_WS_URL\",\n\t\"NEXT_PUBLIC_ATHENA_CHAT_WS_URL\",\n] as const;\nconst ENV_STORAGE_URL_KEYS = [\n\t\"ATHENA_STORAGE_URL\",\n\t\"NEXT_PUBLIC_ATHENA_STORAGE_URL\",\n] as const;\nconst MISSING_DB_SENTINEL = \"https://athena.invalid/db\";\n\nexport {\n\tAthenaConfigurationError,\n\ttype AthenaConfigurationErrorCode,\n\ttype AthenaService,\n} from \"./config/errors.ts\";\n\nexport interface AthenaRequestContext {\n\t/** Opaque, non-secret access-envelope fingerprint from Auth/Gateway. */\n\taccessScope?: string | null;\n\tbearerToken?: string | null;\n\tcookie?: string | null;\n\tforceNoCache?: boolean;\n\theaders?: Record<string, string>;\n\torganizationId?: string | null;\n\tpolicyRevision?: string | null;\n\tsessionToken?: string | null;\n\tuserId?: string | null;\n}\n\nexport type AthenaRequestContextProvider = () => MaybePromise<\n\tAthenaRequestContext | undefined\n>;\n\nexport interface AthenaDbConfig {\n\t/**\n\t * Cloudflare D1 binding (e.g. `env.DB`).\n\t * Drop-in local DB execution for `from` / `query` / flat CRUD — same fluent API as HTTP gateway.\n\t * When set, `createClient` wires a D1 transport automatically (ADR 0015).\n\t */\n\td1?: D1DatabaseLike | null;\n\tjdbcUrl?: string | null;\n\t/**\n\t * Direct PostgreSQL connection URI for Node server runtimes (ADR 0022).\n\t * When set (and mode is not explicit `gateway`), `createClient` wires a PG\n\t * direct transport — no Athena Gateway required for DB ops.\n\t * On Gateway HTTP mode, still forwarded as `x-pg-uri` for server-side routing.\n\t */\n\tpgUri?: string | null;\n\t/**\n\t * Borrowed Node `pg` Pool. Athena never calls `end()` on this handle.\n\t * Node/server only — ignored by browser entries.\n\t */\n\tpool?: { end(): Promise<void> } | null;\n\t/** Default D1 session mode when using `d1` (`first-unconstrained`, `first-primary`, …). */\n\tsessionMode?: string | null;\n\turl?: string | null;\n}\n\n/**\n * Auth service config on {@link createClient}.\n *\n * Prefer intent modes for Next apps:\n * - `routing: \"same-origin\"` → browser `/api/auth`, proxy upstream via `upstreamUrl` / env\n * - `routing: \"direct\"` → absolute `url` to Athena Auth\n * - omit `routing` → legacy `url` / env / `${root}/auth` precedence\n *\n * Flat additive fields (no large discriminated union) to avoid TS2589/DTS risk.\n */\nexport interface AthenaAuthConfig\n\textends Omit<\n\t\tAthenaAuthClientConfig,\n\t\t\"baseUrl\" | \"apiKey\" | \"bearerToken\" | \"cookie\" | \"sessionToken\"\n\t> {\n\t/**\n\t * Execution runtime. `\"local\"` runs Athena Auth inside this process\n\t * against `db.pgUri` / `databaseUrl`. `\"remote\"` talks to an Auth HTTP\n\t * service. Omitted mode is inferred: Node + database URI + no `auth.url`\n\t * → embedded; `auth.url` or browser → remote. Explicit mode always wins.\n\t */\n\tmode?: \"local\" | \"remote\";\n\t/**\n\t * Explicit opt-in only. `createClient()` never applies Auth DDL unless\n\t * this is `true`. Runtime default remains `false` when omitted.\n\t */\n\tautoMigrate?: boolean;\n\t/**\n\t * Optional signing secret for local mode. When omitted, the runtime\n\t * bootstraps a database-backed keyring.\n\t */\n\tsecret?: string;\n\t/**\n\t * Local handler base path. Defaults to `/api/auth`.\n\t */\n\tbasePath?: string;\n\t/**\n\t * Local email/password policy. Normalized at the auth config boundary.\n\t * Email *transport* belongs on `createClient({ email: { provider } })`, not on `auth`.\n\t */\n\temailAndPassword?: AthenaAuthEmailAndPasswordOptions;\n\t/**\n\t * Local organization plugin. `enabled` defaults to true when omitted.\n\t */\n\torganizations?: { enabled?: boolean };\n\t/**\n\t * Embedded passkey (WebAuthn) options. Runtime enablement is\n\t * `auth.passkey.enabled`; construct keys `passkeys` / `webauthn` stay invalid.\n\t */\n\tpasskey?: boolean | AthenaAuthPasskeyOptions;\n\t/**\n\t * Local cookie / body / origin policy.\n\t */\n\tsecurity?: AthenaAuthSecurityOptions;\n\t/**\n\t * Local session cookie lifetime and name.\n\t */\n\tsession?: AthenaAuthSessionOptions;\n\t/**\n\t * Auth routing intent. When omitted, legacy URL/env resolution is preserved.\n\t */\n\trouting?: \"same-origin\" | \"direct\" | \"custom\";\n\t/**\n\t * Same-origin proxy upstream (origin or full auth base). Preferred over stuffing\n\t * the upstream into `url` when `routing` is `\"same-origin\"`.\n\t */\n\tupstreamUrl?: string | null;\n\t/**\n\t * Auth base URL or path.\n\t * - direct/custom: browser-facing auth base\n\t * - same-origin + absolute off-origin: treated as upstream (compat + deprecation warning)\n\t * - legacy: explicit override of env / root derivation\n\t */\n\turl?: string | null;\n\t/**\n\t * Embedded Auth domain lifecycle hooks (`auth.mode: \"local\"` only).\n\t * Remote Auth throws `ATHENA_AUTH_HOOKS_REQUIRE_LOCAL_RUNTIME`.\n\t * Callbacks are not copied onto `NormalizedAthenaAuthConfig`.\n\t */\n\thooks?: AthenaAuthHooks;\n\t/**\n\t * Project Auth `user.role` (and optional store/metadata rights) onto\n\t * `AthenaPrincipal.rights` at session lookup. Grants stay provenance-only.\n\t */\n\tauthorization?: AthenaPrincipalRightsProjection;\n\t/**\n\t * Embedded Auth audit/trace tables (`auth.mode: \"local\"` only).\n\t * Remote Auth throws `ATHENA_AUTH_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME`.\n\t */\n\tobservability?: AthenaAuthObservabilityConfig;\n\t/**\n\t * Canonical social OAuth provider map (`createClient({ auth: { social } })`).\n\t * Provider secrets stay on the Node process; browser entries must not retain them.\n\t */\n\tsocial?: AthenaAuthSocialOptions;\n\t/** Alias of {@link AthenaAuthConfig.social} provider bags. */\n\toauth?: Record<string, AthenaAuthSocialProviderOptions>;\n\t/** Alias of {@link AthenaAuthConfig.social} provider bags. */\n\tsocialProviders?: Record<string, AthenaAuthSocialProviderOptions>;\n}\n\n/**\n * Transport/runtime selection on {@link AthenaChatConfig}.\n * Disabling Chat is `chat: false` / omitted — never `mode: \"disabled\"`.\n * Matches {@link AthenaAuthConfig.mode}.\n */\nexport type AthenaChatMode = \"local\" | \"remote\";\n\nexport interface AthenaChatConfig\n\textends Pick<\n\t\tAthenaRequestHeaderOverrideFields,\n\t\t\"bearerToken\" | \"cookie\" | \"forceNoCache\" | \"headers\" | \"sessionToken\"\n\t> {\n\t/**\n\t * Runtime selection. Omitted mode is inferred: `chat.url` → remote,\n\t * `chat: true` + `databaseUrl` → local.\n\t * Use `chat: false` to disable; `mode` is never `\"disabled\"`.\n\t */\n\tmode?: AthenaChatMode;\n\t/**\n\t * Root principal resolver consumed by Local Chat (INV-CHAT-011).\n\t * User-supplied Chat payload fields never override actor identity.\n\t */\n\tresolvePrincipal?: import(\"./runtime/data/principal.ts\").AthenaPrincipalResolver;\n\turl?: string | null;\n\twebSocketFactory?: AthenaChatWebSocketFactory | null;\n\twsUrl?: string | null;\n}\n\nexport function athenaChatConfig(\n\tchat: boolean | AthenaChatConfig | undefined,\n): AthenaChatConfig | undefined {\n\tif (chat === undefined || chat === false || chat === true) {\n\t\treturn undefined;\n\t}\n\treturn chat;\n}\n\nexport interface AthenaStorageConfig\n\textends Omit<AthenaStorageClientConfig, \"baseUrl\" | \"directUpload\"> {\n\tdirectUpload?: AthenaStorageDirectUploadConfig;\n\t/** Key prefix for R2 object ops (trailing slash normalized). */\n\tprefix?: string | null;\n\t/**\n\t * Trusted-Node filesystem ObjectStore. Catalog-optional; requires `root`.\n\t * Browser / React Native entries fail closed.\n\t */\n\tprovider?: \"local\" | \"s3\" | (string & {});\n\t/**\n\t * Cloudflare R2 binding (e.g. `env.FILES`).\n\t * Drop-in local object I/O (`putObject` / `getObject` / `listObjects` / `deleteObject`).\n\t * When set with a remote storage URL (or unified root), HTTP storage.* ports are\n\t * preserved and composed with L3a helpers. R2-only keeps L3a + clear unsupported.\n\t */\n\tr2?: R2BucketLike | null;\n\t/**\n\t * Injected S3 object client for `provider: \"s3\"` (Node only).\n\t * Duck-typed `getObject` / `putObject` / `headObject` / `deleteObject` / `listObjectsV2`.\n\t * Athena does not construct an AWS SDK client or read global AWS credentials.\n\t */\n\ts3?: {\n\t\tdeleteObject: (input: { Bucket: string; Key: string }) => Promise<unknown>;\n\t\tgetObject: (input: { Bucket: string; Key: string }) => Promise<unknown>;\n\t\theadObject: (input: { Bucket: string; Key: string }) => Promise<unknown>;\n\t\tlistObjectsV2: (input: {\n\t\t\tBucket: string;\n\t\t\tContinuationToken?: string;\n\t\t\tMaxKeys?: number;\n\t\t\tPrefix?: string;\n\t\t}) => Promise<unknown>;\n\t\tputObject: (input: {\n\t\t\tBody?: Uint8Array;\n\t\t\tBucket: string;\n\t\t\tContentType?: string;\n\t\t\tKey: string;\n\t\t\tMetadata?: Record<string, string>;\n\t\t}) => Promise<unknown>;\n\t} | null;\n\t/** Bucket name for `provider: \"s3\"`. */\n\tbucket?: string | null;\n\t/** Absolute or process-local directory for `provider: \"local\"`. */\n\troot?: string | null;\n\turl?: string | null;\n\t/**\n\t * Same-origin Embedded Storage HTTP path for browser/RN `createClient()`.\n\t * Defaults to `/api/athena/storage`. Discovery `endpoints.storage` overrides\n\t * when this is omitted.\n\t */\n\tendpoint?: string | null;\n\t[ATHENA_STORAGE_PROVIDER]?: StorageObjectProvider;\n\t[ATHENA_STORAGE_RUNTIME]?: StorageRuntime;\n}\n\nexport type { AthenaBillingConfig, AthenaDiagnosticsMode };\n\n/**\n * Host / transport fields on {@link createClient}.\n * Kept distinct from {@link AthenaClientServicesConfig} and `models` so\n * constructor contextual typing does not re-instantiate the full client graph.\n */\nexport interface AthenaClientRuntimeConfig {\n\t/**\n\t * Public application identity (origin + optional display name).\n\t * `APP_URL` / documented aliases are enough when this is omitted.\n\t * Never derived from Host.\n\t */\n\tapp?: {\n\t\t/** Durable installation id. Used for webhook ownership; never a display name. */\n\t\tid?: string | null;\n\t\tname?: string | null;\n\t\turl?: string | null;\n\t};\n\tbackend?: BackendConfig | BackendType;\n\t/** Optional capability bag; defaults from gateway vs `db.d1` / `storage.r2` bindings. */\n\tcapabilities?: AthenaClientCapabilities;\n\tclient?: string | null;\n\tcontext?: AthenaRequestContext | AthenaRequestContextProvider;\n\t/**\n\t * Top-level D1 alias for `db.d1` (Worker DX). Prefer nested `db: { d1 }` in shared code.\n\t * All paths still materialize through {@link createClient}.\n\t */\n\td1?: D1DatabaseLike | null;\n\t/**\n\t * Top-level alias of `db.pgUri` (typically `DATABASE_URL`).\n\t * Same value, same Node-only PostgreSQL transport. Browser/RN fail-closed.\n\t */\n\tdatabaseUrl?: string | null;\n\tdb?: AthenaDbConfig;\n\tdebugAst?: boolean;\n\t/**\n\t * Query diagnostics mode. Prefer `'auto'` in Next/OpenNext apps so production\n\t * builds stay quiet without app-local OPENNEXT_BUILD branching.\n\t * Per-flag `debugAst` / `findManyAst` / `traceQueries` always win when set.\n\t */\n\tdiagnostics?: AthenaDiagnosticsMode;\n\tenv?: Record<string, string | undefined>;\n\tfindManyAst?: boolean;\n\t/**\n\t * Optional prebuilt gateway transport (tests / advanced injection).\n\t * Prefer `db.d1` for Cloudflare edge-local — `createClient` wires D1 automatically.\n\t * @see ADR 0015\n\t */\n\tgatewayTransport?: AthenaGatewayClient;\n\theaders?: Record<string, string>;\n\tkey?: string | null;\n\t/**\n\t * Edge vs gateway selection when both bindings and HTTP URLs may be present.\n\t * Default `auto` (env `ATHENA_EXECUTION_MODE`). Prefer nested service fields for backends.\n\t * Canonical: `gateway` | `edge` | `auto`. Aliases: `server`, `remote`, `http`,\n\t * `d1`, `cloudflare`, `local`. Empty / unknown strings are not assignable.\n\t */\n\tmode?: AthenaExecutionModeInput | null;\n\t/**\n\t * Optional policy definitions owned by this root client.\n\t * Local HTTP handlers read them so apps do not re-pass the same bag.\n\t */\n\tpolicies?: {\n\t\tdefinitions?: unknown;\n\t\tenforce?: boolean;\n\t\tmode?: \"disabled\" | \"observe\" | \"enforce\";\n\t};\n\t/**\n\t * Native data-runtime cache owned by this client.\n\t * SQL remains `athena.query(sql)` — use `athena.cache` for the entity graph.\n\t */\n\tquery?: {\n\t\tcache?: \"memory\" | \"none\";\n\t\tgcTime?: number;\n\t\tstaleTime?: number;\n\t};\n\t/**\n\t * When `mode` is `auto` and both D1 and a gateway URL exist, which wins.\n\t * Default `edge` (env `ATHENA_EXECUTION_PREFER`).\n\t */\n\tprefer?: AthenaExecutionPreferInput | null;\n\t/**\n\t * Top-level R2 alias for `storage.r2`. Prefer nested `storage: { r2 }` in shared code.\n\t */\n\tr2?: R2BucketLike | null;\n\tretryReads?: boolean;\n\t/** Top-level alias for `db.sessionMode` when using `d1`. */\n\tsessionMode?: string | null;\n\t/** Top-level alias for `storage.prefix` when using `r2`. */\n\tstoragePrefix?: string | null;\n\ttraceQueries?: boolean | AthenaQueryTraceOptions;\n\turl?: string | null;\n}\n\n/**\n * Domain capability fields on {@link createClient}.\n * Auth / billing / storage / email stay on this bag so `models` inference\n * does not participate in the same object as nested service IntelliSense.\n */\nexport interface AthenaClientServicesConfig {\n\t/**\n\t * Auth service config. Pass `false` to keep Athena DB without Athena Auth.\n\t * Object config is normalized once (`local` | `remote`); omitted mode is inferred.\n\t */\n\tauth?: false | AthenaAuthConfig;\n\tbilling?: AthenaBillingConfig;\n\tchat?: boolean | AthenaChatConfig;\n\t/**\n\t * @internal Planted local/remote Chat runtime before the client view freezes.\n\t */\n\tchatRuntime?: import(\"./chat/runtime.ts\").AthenaChatRuntime;\n\t/**\n\t * Root email capability. Independent of Auth: transport lives here;\n\t * Auth may consume `athena.email` but must not own provider config.\n\t * Omitted config still materializes `athena.email` (unconfigured send fails).\n\t */\n\temail?: AthenaEmailConfig;\n\t/**\n\t * Notifications capability. Catalog is required to materialize the module.\n\t * Omitting `notifications.catalog` fail-closes to unavailable (no kernel default).\n\t */\n\tnotifications?: AthenaNotificationsConfig;\n\t/**\n\t * Server-owned mutation Data Lifecycle. Local/mutation-owning runtimes only.\n\t * Remote/browser throws `ATHENA_DATA_LIFECYCLE_REQUIRES_LOCAL_RUNTIME`.\n\t */\n\tlifecycle?: {\n\t\tdata?: AthenaDataLifecycleConfig;\n\t\tstorage?: AthenaStorageLifecycleHooks;\n\t};\n\tstorage?: AthenaStorageConfig;\n}\n\nexport interface AthenaClientConfig<\n\tTModels extends AthenaClientModelsInput | undefined = undefined,\n> extends AthenaClientRuntimeConfig,\n\tAthenaClientServicesConfig {\n\tmodels?: TModels;\n}\n\n/**\n * Next discovery handoff into browser storage/billing HTTP. Not on public\n * {@link AthenaClientConfig} — no stripInternal, so a public member would leak\n * {@link AthenaRuntimeTopologyIR} from root and browser entrypoints.\n */\ntype AthenaInternalClientConfig<\n\tTModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaClientConfig<TModels> & {\n\tresolveRuntimeTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n};\n\n/** Config with a required R2 binding — narrows `client.storage` to L3a object methods. */\nexport type AthenaClientConfigWithR2<\n\tTModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaClientConfig<TModels> & {\n\tstorage: AthenaStorageConfig & { r2: R2BucketLike };\n};\n\n/** Client with L3a R2 object methods typed on `storage`. */\nexport type AthenaClientWithR2Storage<\n\tTModels extends AthenaClientModelsInput | undefined = undefined,\n> = Omit<AthenaClient<TModels>, \"storage\" | \"withContext\"> & {\n\treadonly storage: CloudflareR2StorageModule;\n\twithContext: (\n\t\tcontext: AthenaRequestContext,\n\t) => AthenaRequestClient<AthenaClientWithR2Storage<TModels>>;\n};\n\ntype V3TableBuilder<\n\tRow,\n\tInsert = Partial<Row>,\n\tUpdate = Partial<Insert>,\n\tResult = unknown,\n> = TableQueryBuilder<Row, Insert, Update, Result>;\n\nexport interface AthenaClient<\n\tTModels extends AthenaClientModelsInput | undefined =\n\t| AthenaClientModelsInput\n\t| undefined,\n> {\n\treadonly admin: import(\"./client.ts\").AthenaClientAdminModule;\n\treadonly auth: AthenaAuthBindings;\n\treadonly billing: AthenaBillingModule;\n\t/** Native entity/query cache. Distinct from SQL `query()`. */\n\treadonly cache: AthenaQueryClient;\n\t/** Runtime feature detection for gateway vs edge-local backends (ADR 0015). */\n\treadonly capabilities: AthenaClientCapabilities;\n\texplain: (\n\t\texecutable: AthenaExecutable<unknown>,\n\t) => ReturnType<typeof explainAthenaQuery>;\n\treadonly models: TModels;\n\treadonly chat: AthenaChatModule;\n\treadonly db: AthenaDbModule<ResolvedModels<TModels>>;\n\treadonly email: AthenaEmailModule;\n\treadonly notifications: AthenaNotificationsModule;\n\tfrom<TModel extends AthenaModelTarget>(\n\t\tmodel: TModel,\n\t): V3TableBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>;\n\tfrom<TTableName extends AthenaClientTableName<ResolvedModels<TModels>>>(\n\t\ttable: TTableName,\n\t\toptions?: AthenaFromOptions,\n\t): V3TableBuilder<\n\t\tRowOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>,\n\t\tInsertOf<\n\t\t\tAthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>\n\t\t>,\n\t\tUpdateOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>\n\t>;\n\tfrom<\n\t\tRow = Record<string, unknown>,\n\t\tInsert = Partial<Row>,\n\t\tUpdate = Partial<Insert>,\n\t>(\n\t\ttable: string,\n\t\toptions?: AthenaFromOptions,\n\t): V3TableBuilder<Row, Insert, Update>;\n\thealth: () => Promise<import(\"./release/identity.ts\").AthenaNormalizedHealth>;\n\t/**\n\t * Executes raw SQL through Athena's compatibility query surface.\n\t *\n\t * @deprecated Prefer `admin.query()` with explicit `operation` and `expectedShape`.\n\t */\n\tquery: <Row = unknown>(\n\t\tquery: string,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<Row[]>>;\n\trequest: <T = unknown>(\n\t\toptions: AthenaRequestOptions,\n\t) => Promise<AthenaRequestResponse<T>>;\n\trpc: <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n\t\tfn: string,\n\t\targs?: Args,\n\t\toptions?: AthenaRpcCallOptions,\n\t) => RpcQueryBuilder<Row>;\n\treadonly storage: AthenaStorageModule;\n\treadonly system: import(\"./client.ts\").AthenaClientSystemModule;\n\tverifyConnection: (\n\t\toptions?: AthenaGatewayConnectionOptions,\n\t) => Promise<AthenaGatewayConnectionResult>;\n\twithContext: (\n\t\tcontext: AthenaRequestContext,\n\t) => AthenaRequestClient<AthenaClient<TModels>>;\n\t/**\n\t * Dispose Athena-owned resources (PostgreSQL pool, embedded Auth).\n\t * Safe to call twice. Does not destroy borrowed pools, D1, or R2.\n\t */\n\tclose: () => Promise<void>;\n}\n\ninterface ResolvedServiceUrls {\n\tauth?: string;\n\tbilling?: string;\n\tchat?: string;\n\tchatWs?: string;\n\tdb?: string;\n\tstorage?: string;\n}\n\ninterface AthenaClientCoreBase<\n\tTModels extends AthenaClientModelsInput | undefined,\n> {\n\treadonly authRouting?: ResolvedAthenaAuthRouting;\n\treadonly client?: string;\n\treadonly config: AthenaInternalClientConfig<TModels>;\n\treadonly key: string;\n\treadonly urls: ResolvedServiceUrls;\n}\n\ninterface AthenaClientCore<TModels extends AthenaClientModelsInput | undefined>\n\textends AthenaClientCoreBase<TModels> {\n\treadonly internalCore: InternalAthenaClientCore<ResolvedModels<TModels>>;\n}\n\nfunction readFirstEnv(\n\tenv: Record<string, string | undefined> | undefined,\n\tkeys: readonly string[],\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = env?.[key]?.trim();\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn;\n}\n\n/**\n * First env value that looks like an absolute http(s) URL.\n * Skips unexpanded placeholders (e.g. `${ATHENA_URL}`) and other non-URLs so\n * ambient shell pollution cannot crash createClient during service resolution.\n */\nfunction readFirstEnvHttpUrl(\n\tenv: Record<string, string | undefined> | undefined,\n\tkeys: readonly string[],\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = env?.[key]?.trim();\n\t\tif (value && isAbsoluteHttpUrl(value)) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn;\n}\n\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function normalizeOptional(\n\tvalue: string | null | undefined,\n): string | undefined {\n\tconst normalized = value?.trim();\n\treturn normalized || undefined;\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n\ttry {\n\t\tconst url = new URL(value);\n\t\treturn url.protocol === \"http:\" || url.protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction appendPath(baseUrl: string, path: string): string {\n\treturn `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n\nfunction toWebSocketUrl(baseUrl: string): string | undefined {\n\tif (!isAbsoluteHttpUrl(baseUrl)) {\n\t\treturn;\n\t}\n\tconst url = new URL(baseUrl);\n\turl.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n\turl.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/wss/gateway`;\n\turl.search = \"\";\n\turl.hash = \"\";\n\treturn url.toString();\n}\n\nfunction isRemoteAuthOnlyClient<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\tconst authObject = athenaAuthConfig(config.auth);\n\tif (\n\t\tisDisabledAthenaAuthConfig(config.auth) ||\n\t\tisLocalAthenaAuthConfig(config.auth) ||\n\t\t!normalizeOptional(authObject?.url)\n\t) {\n\t\treturn false;\n\t}\n\tif (config.gatewayTransport) {\n\t\treturn false;\n\t}\n\tif (\n\t\tnormalizeOptional(config.url) ||\n\t\tnormalizeOptional(config.db?.url) ||\n\t\tnormalizeOptional(config.db?.pgUri) ||\n\t\tnormalizeOptional(config.databaseUrl)\n\t) {\n\t\treturn false;\n\t}\n\tif (\n\t\tnormalizeOptional(config.storage?.url) ||\n\t\t(isLocalStorageConfig(config.storage) &&\n\t\t\tBoolean(\n\t\t\t\tgetLocalObjectStore(config.storage) ||\n\t\t\t\tnormalizeOptional(config.storage.root),\n\t\t\t))\n\t) {\n\t\treturn false;\n\t}\n\tif (normalizeOptional(athenaChatConfig(config.chat)?.url)) {\n\t\treturn false;\n\t}\n\tif (normalizeOptional(config.billing?.url)) {\n\t\treturn false;\n\t}\n\tif (\n\t\treadFirstEnvHttpUrl(config.env, ATHENA_ENV_URL_KEYS) ||\n\t\treadFirstEnvHttpUrl(config.env, ATHENA_ENV_DB_URL_KEYS) ||\n\t\treadFirstEnvHttpUrl(config.env, ENV_STORAGE_URL_KEYS) ||\n\t\treadFirstEnvHttpUrl(config.env, ENV_CHAT_URL_KEYS)\n\t) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction hasChatSessionCredentials(chat?: boolean | AthenaChatConfig): boolean {\n\tconst options = athenaChatConfig(chat);\n\treturn Boolean(\n\t\tnormalizeOptional(options?.bearerToken) ??\n\t\tnormalizeOptional(options?.cookie) ??\n\t\tnormalizeOptional(options?.sessionToken),\n\t);\n}\n\nfunction resolveCore<TModels extends AthenaClientModelsInput | undefined>(\n\tconfig: AthenaClientConfig<TModels>,\n): AthenaClientCore<TModels> {\n\tconst env = config.env;\n\tconst explicitRoot = normalizeOptional(config.url);\n\tconst envRoot = readFirstEnvHttpUrl(env, ATHENA_ENV_URL_KEYS);\n\tconst root =\n\t\texplicitRoot && isAbsoluteHttpUrl(explicitRoot)\n\t\t\t? explicitRoot\n\t\t\t: explicitRoot\n\t\t\t\t? undefined\n\t\t\t\t: envRoot;\n\tconst explicitRootWinsOverEnvServices = Boolean(\n\t\troot && explicitRoot && isAbsoluteHttpUrl(explicitRoot),\n\t);\n\tconst resolveService = (\n\t\texplicit: string | null | undefined,\n\t\tenvKeys: readonly string[],\n\t\tpath: string,\n\t): string | undefined =>\n\t\tnormalizeOptional(explicit) ??\n\t\t(explicitRootWinsOverEnvServices && root\n\t\t\t? appendPath(root, path)\n\t\t\t: undefined) ??\n\t\treadFirstEnvHttpUrl(env, envKeys) ??\n\t\t(root ? appendPath(root, path) : undefined);\n\n\tconst dbUrl = resolveService(config.db?.url, ATHENA_ENV_DB_URL_KEYS, \"db\");\n\tconst authObject = athenaAuthConfig(config.auth);\n\tconst authDisabled = isDisabledAthenaAuthConfig(config.auth);\n\n\t// Auth routing policy (SSOT). Legacy configs (no routing) keep historical\n\t// resolveService outcomes; same-origin enables relative `/api/auth`.\n\t// `auth: false` skips env/root Auth URL inference so DB-only clients stay DB-only.\n\tconst authRouting = authDisabled\n\t\t? undefined\n\t\t: resolveAthenaAuthRouting({\n\t\t\tcredentials: authObject?.credentials,\n\t\t\temitWarnings: true,\n\t\t\tenv,\n\t\t\texecution: isLocalAthenaAuthConfig(config.auth) ? \"local\" : \"remote\",\n\t\t\texplicitRootWinsOverEnvServices,\n\t\t\trootUrl: root,\n\t\t\trouting: authObject?.routing,\n\t\t\tupstreamUrl: authObject?.upstreamUrl,\n\t\t\turl: authObject?.url,\n\t\t});\n\n\tconst authUrl = authDisabled\n\t\t? undefined\n\t\t: authRouting?.mode === \"legacy\"\n\t\t\t? authRouting.browserRequestBaseUrl ||\n\t\t\tresolveService(authObject?.url, ENV_AUTH_URL_KEYS, \"auth\")\n\t\t\t: authRouting?.browserRequestBaseUrl || undefined;\n\n\tconst urls: ResolvedServiceUrls = {\n\t\tauth: authUrl || undefined,\n\t\t// Billing lives on the main Athena HTTP surface.\n\t\tbilling:\n\t\t\tnormalizeOptional(config.billing?.url) ?? dbUrl ?? root ?? undefined,\n\t\tchat:\n\t\t\tconfig.chat === true || athenaChatConfig(config.chat)?.mode === \"local\"\n\t\t\t\t? undefined\n\t\t\t\t: resolveService(\n\t\t\t\t\tathenaChatConfig(config.chat)?.url,\n\t\t\t\t\tENV_CHAT_URL_KEYS,\n\t\t\t\t\t\"chat\",\n\t\t\t\t),\n\t\tchatWs:\n\t\t\tnormalizeOptional(athenaChatConfig(config.chat)?.wsUrl) ??\n\t\t\t(explicitRootWinsOverEnvServices && root\n\t\t\t\t? toWebSocketUrl(root)\n\t\t\t\t: undefined) ??\n\t\t\treadFirstEnvHttpUrl(env, ENV_CHAT_WS_URL_KEYS) ??\n\t\t\t(root ? toWebSocketUrl(root) : undefined),\n\t\tdb: dbUrl,\n\t\tstorage: resolveService(\n\t\t\tconfig.storage?.url,\n\t\t\tENV_STORAGE_URL_KEYS,\n\t\t\t\"storage\",\n\t\t),\n\t};\n\n\tconst localStorageConfigured =\n\t\tisLocalStorageConfig(config.storage) &&\n\t\tBoolean(\n\t\t\tgetLocalObjectStore(config.storage) ||\n\t\t\tnormalizeOptional(config.storage.root),\n\t\t);\n\tconst s3StorageConfigured = isS3StorageConfig(config.storage);\n\tconst runtimeEnv = detectAthenaRuntimeEnvironment();\n\tconst browserEmbeddedStorage =\n\t\t(runtimeEnv === \"browser\" || runtimeEnv === \"react-native\") &&\n\t\t!localStorageConfigured &&\n\t\t!s3StorageConfigured &&\n\t\t!isR2Binding(config.storage?.r2 ?? config.r2) &&\n\t\t!normalizeOptional(config.storage?.url) &&\n\t\t!readFirstEnvHttpUrl(env, ENV_STORAGE_URL_KEYS);\n\n\tif (\n\t\t!(\n\t\t\turls.db ||\n\t\t\turls.auth ||\n\t\t\turls.chat ||\n\t\t\turls.storage ||\n\t\t\turls.billing ||\n\t\t\tconfig.gatewayTransport ||\n\t\t\tconfig.chatRuntime ||\n\t\t\tlocalStorageConfigured ||\n\t\t\ts3StorageConfigured ||\n\t\t\tbrowserEmbeddedStorage\n\t\t)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_NO_SERVICE_CONFIGURED\",\n\t\t\t\"Athena requires a unified URL or at least one configured service URL.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n\n\tconst key =\n\t\tnormalizeOptional(config.key) ?? readFirstEnv(env, ATHENA_ENV_API_KEY_KEYS);\n\tif (\n\t\t!(\n\t\t\tkey ||\n\t\t\thasChatSessionCredentials(config.chat) ||\n\t\t\tconfig.gatewayTransport ||\n\t\t\tlocalStorageConfigured ||\n\t\t\ts3StorageConfigured ||\n\t\t\tisRemoteAuthOnlyClient(config)\n\t\t)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_API_KEY_REQUIRED\",\n\t\t\t\"Athena API key is required unless chat session credentials are configured.\",\n\t\t);\n\t}\n\tif (\n\t\t!key &&\n\t\t!hasChatSessionCredentials(config.chat) &&\n\t\thasExplicitRemoteHttpApiKeyNeed(config) &&\n\t\t!isRemoteAuthOnlyClient(config)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_API_KEY_REQUIRED\",\n\t\t\t\"Athena API key is required unless chat session credentials are configured.\",\n\t\t);\n\t}\n\n\t// Default credentials for same-origin when not explicitly set on auth options.\n\tconst authWithCredentials =\n\t\tauthObject &&\n\t\t\tauthObject.credentials === undefined &&\n\t\t\tauthRouting?.credentials\n\t\t\t? { ...authObject, credentials: authRouting.credentials }\n\t\t\t: config.auth;\n\n\tconst resolvedConfig: AthenaInternalClientConfig<TModels> =\n\t\tauthWithCredentials ? { ...config, auth: authWithCredentials } : config;\n\n\tconst base: AthenaClientCoreBase<TModels> = {\n\t\tauthRouting:\n\t\t\tauthRouting &&\n\t\t\t\t(authRouting.browserRequestBaseUrl || authRouting.mode !== \"legacy\")\n\t\t\t\t? authRouting\n\t\t\t\t: undefined,\n\t\tclient:\n\t\t\tnormalizeOptional(config.client) ??\n\t\t\treadFirstEnv(env, ATHENA_ENV_CLIENT_KEYS),\n\t\tconfig: resolvedConfig,\n\t\tkey: key ?? \"\",\n\t\turls,\n\t};\n\treturn {\n\t\t...base,\n\t\tinternalCore: createInternalClientCore(createInternalConfig(base)),\n\t};\n}\n\nasync function resolveConfiguredContext<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(\n\tcore: AthenaClientCore<TModels>,\n\tviewContext: AthenaRequestContext | undefined,\n): Promise<AthenaRequestContext | undefined> {\n\tconst configured = core.config.context;\n\tconst base =\n\t\ttypeof configured === \"function\" ? await configured() : configured;\n\treturn mergeAthenaRequestContexts(base, viewContext);\n}\n\nfunction createInternalConfig<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(core: AthenaClientCoreBase<TModels>) {\n\tconst { config, urls } = core;\n\tconst {\n\t\turl: _authUrl,\n\t\trouting: _authRouting,\n\t\tupstreamUrl: _authUpstreamUrl,\n\t\t...authOptions\n\t} = athenaAuthConfig(config.auth) ?? {};\n\tconst {\n\t\turl: _storageUrl,\n\t\tdirectUpload,\n\t\tr2: _r2,\n\t\tprefix: _r2Prefix,\n\t\t...storageOptions\n\t} = config.storage ?? {};\n\tvoid _authUrl;\n\tvoid _authRouting;\n\tvoid _authUpstreamUrl;\n\tvoid _storageUrl;\n\tvoid _r2;\n\tvoid _r2Prefix;\n\n\tconst diagnostics = resolveAthenaClientDiagnostics({\n\t\tdebugAst: config.debugAst,\n\t\tdiagnostics: config.diagnostics,\n\t\tenv: config.env,\n\t\tfindManyAst: config.findManyAst,\n\t\ttraceQueries: config.traceQueries,\n\t});\n\n\treturn {\n\t\tapiKey: core.key,\n\t\tauth: authOptions,\n\t\tauthUrl: urls.auth,\n\t\tbackend:\n\t\t\ttypeof config.backend === \"string\"\n\t\t\t\t? { type: config.backend }\n\t\t\t\t: config.backend,\n\t\tbaseUrl: urls.db ?? MISSING_DB_SENTINEL,\n\t\tbehavior: {\n\t\t\tdebugAst: diagnostics.debugAst,\n\t\t\tfindManyAst: diagnostics.findManyAst,\n\t\t\tfindManyAstRelationSchema: Boolean(config.db?.pgUri),\n\t\t\tretryReads: config.retryReads,\n\t\t\ttraceQueries: diagnostics.traceQueries,\n\t\t},\n\t\tchat: athenaChatConfig(config.chat),\n\t\tchatUrl: urls.chat,\n\t\tchatWsUrl: urls.chatWs,\n\t\tclient: core.client,\n\t\tgatewayTransport: config.gatewayTransport,\n\t\theaders: config.headers,\n\t\tjdbcUrl: config.db?.jdbcUrl,\n\t\tmodels: config.models as ResolvedModels<TModels>,\n\t\tpgUri: config.db?.pgUri,\n\t\tstorage: {\n\t\t\t...storageOptions,\n\t\t\t...(directUpload ? { directUpload } : {}),\n\t\t},\n\t\tstorageUrl: urls.storage,\n\t};\n}\n\nfunction serviceGuard(urls: ResolvedServiceUrls, service: AthenaService): void {\n\tif (!urls[service]) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_SERVICE_NOT_CONFIGURED\",\n\t\t\t`Athena ${service} is not configured.`,\n\t\t\tservice,\n\t\t);\n\t}\n}\n\nfunction createUnavailableNamespace(\n\tservice: AthenaService,\n\turls: ResolvedServiceUrls,\n\tpath: readonly PropertyKey[] = [],\n): unknown {\n\treturn new Proxy(() => undefined, {\n\t\tapply() {\n\t\t\tserviceGuard(urls, service);\n\t\t\tthrow new TypeError(\n\t\t\t\t`Athena service property ${path.map(String).join(\".\")} is not callable.`,\n\t\t\t);\n\t\t},\n\t\tget(_target, property) {\n\t\t\treturn createUnavailableNamespace(service, urls, [...path, property]);\n\t\t},\n\t});\n}\n\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function isD1Binding(value: unknown): value is D1DatabaseLike {\n\treturn Boolean(\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as D1DatabaseLike).prepare === \"function\",\n\t);\n}\n\nfunction isR2Binding(value: unknown): value is R2BucketLike {\n\treturn Boolean(\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as R2BucketLike).put === \"function\" &&\n\t\ttypeof (value as R2BucketLike).get === \"function\",\n\t);\n}\n\n/**\n * Fold top-level Worker aliases into nested service config, then resolve\n * edge vs gateway so every path materializes through {@link createClient}.\n */\nfunction foldBindingAliases<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n\tconst d1 = config.db?.d1 ?? config.d1;\n\tconst r2 = config.storage?.r2 ?? config.r2;\n\tconst sessionMode = config.db?.sessionMode ?? config.sessionMode;\n\tconst prefix = config.storage?.prefix ?? config.storagePrefix;\n\tconst aliasPgUri = normalizeOptional(config.databaseUrl);\n\tconst nestedPgUri = normalizeOptional(config.db?.pgUri);\n\tconst envPgUri = config.env\n\t\t? normalizeOptional(config.env.DATABASE_URL)\n\t\t: undefined;\n\tif (aliasPgUri && nestedPgUri && aliasPgUri !== nestedPgUri) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_DATABASE_URL_CONFLICT\",\n\t\t\t\"databaseUrl and db.pgUri must be the same connection string when both are set.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n\tconst pgUri = nestedPgUri ?? aliasPgUri ?? envPgUri;\n\n\tlet next: AthenaClientConfig<TModels> = { ...config };\n\tif (d1 !== undefined || sessionMode !== undefined || pgUri !== undefined) {\n\t\tnext = {\n\t\t\t...next,\n\t\t\tdb: {\n\t\t\t\t...next.db,\n\t\t\t\t...(d1 === undefined ? {} : { d1 }),\n\t\t\t\t...(sessionMode === undefined ? {} : { sessionMode }),\n\t\t\t\t...(pgUri === undefined ? {} : { pgUri }),\n\t\t\t},\n\t\t};\n\t}\n\tif (r2 !== undefined || prefix !== undefined) {\n\t\tnext = {\n\t\t\t...next,\n\t\t\tstorage: {\n\t\t\t\t...next.storage,\n\t\t\t\t...(r2 === undefined ? {} : { r2 }),\n\t\t\t\t...(prefix === undefined ? {} : { prefix }),\n\t\t\t},\n\t\t};\n\t}\n\t// Strip top-level aliases so they are not mistaken for service modules later.\n\tconst {\n\t\td1: _d1,\n\t\tr2: _r2,\n\t\tstoragePrefix: _storagePrefix,\n\t\tsessionMode: _sessionMode,\n\t\tdatabaseUrl: _databaseUrl,\n\t\t...rest\n\t} = next;\n\tvoid _d1;\n\tvoid _r2;\n\tvoid _storagePrefix;\n\tvoid _sessionMode;\n\tvoid _databaseUrl;\n\treturn rest;\n}\n\n/**\n * When execution resolves to gateway, drop D1 so HTTP db routing wins.\n * R2 may still attach for hybrid local objects + remote gateway DB.\n */\nfunction applyExecutionMode<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n\tconst d1 = config.db?.d1;\n\tconst hasD1 = isD1Binding(d1);\n\tconst hasUrl = Boolean(\n\t\tnormalizeOptional(config.url) ??\n\t\tnormalizeOptional(config.db?.url) ??\n\t\t(config.env\n\t\t\t? (normalizeOptional(config.env.ATHENA_URL) ??\n\t\t\t\tnormalizeOptional(config.env.NEXT_PUBLIC_ATHENA_URL))\n\t\t\t: undefined),\n\t);\n\n\t// Only resolve when there is something to choose between (or explicit mode).\n\t// Use != null so omitted mode/prefer (undefined) are not treated as hints —\n\t// `undefined !== null` is true and previously forced every createClient\n\t// without D1 through resolveAthenaExecutionMode, breaking storage-only clients.\n\tconst hasModeHint =\n\t\tconfig.mode != null ||\n\t\tconfig.prefer != null ||\n\t\tBoolean(config.env?.ATHENA_EXECUTION_MODE) ||\n\t\tBoolean(config.env?.ATHENA_EXECUTION_PREFER);\n\n\tif (!(hasD1 || hasModeHint)) {\n\t\treturn config;\n\t}\n\n\t// Pure edge (only d1, no url) or pure gateway without mode hints: keep default behavior.\n\tif (hasD1 && !hasUrl && !hasModeHint) {\n\t\treturn config;\n\t}\n\n\tlet resolved: AthenaExecutionMode | \"edge\" | \"gateway\";\n\ttry {\n\t\tresolved = resolveAthenaExecutionMode({\n\t\t\td1: hasD1 ? d1 : null,\n\t\t\tenv: config.env,\n\t\t\tmode: config.mode,\n\t\t\tprefer: config.prefer,\n\t\t\turl: config.url ?? config.db?.url,\n\t\t});\n\t} catch (error) {\n\t\t// No mode/prefer and incomplete config: fall through to default materialize.\n\t\tif (!hasModeHint) {\n\t\t\treturn config;\n\t\t}\n\t\t// pgUri-only + auto: D1/HTTP resolver cannot see PostgreSQL yet.\n\t\t// Defer to materializePostgresBinding (gateway mode stays header-only).\n\t\tconst pgUri = normalizeOptional(config.db?.pgUri);\n\t\tif (pgUri && !hasD1) {\n\t\t\tconst modeRaw =\n\t\t\t\tnormalizeOptional(\n\t\t\t\t\ttypeof config.mode === \"string\" ? config.mode : undefined,\n\t\t\t\t) ?? normalizeOptional(config.env?.ATHENA_EXECUTION_MODE);\n\t\t\tconst modeKey = modeRaw?.trim().toLowerCase();\n\t\t\tif (!modeKey || modeKey === \"auto\") {\n\t\t\t\treturn config;\n\t\t\t}\n\t\t}\n\t\tthrow error;\n\t}\n\n\tif (resolved === \"gateway\" && hasD1) {\n\t\tconst { d1: _drop, sessionMode: _sm, ...dbRest } = config.db ?? {};\n\t\tvoid _drop;\n\t\tvoid _sm;\n\t\treturn {\n\t\t\t...config,\n\t\t\tdb: Object.keys(dbRest).length > 0 ? dbRest : undefined,\n\t\t\tgatewayTransport: undefined,\n\t\t};\n\t}\n\n\treturn config;\n}\n\n/**\n * Unified remote root (top-level `url` or env ATHENA_URL / NEXT_PUBLIC_ATHENA_URL).\n * Used for billing hybrid routing and default service derivation.\n */\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function resolveUnifiedRemoteRoot<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): string | undefined {\n\treturn (\n\t\tnormalizeOptional(config.url) ??\n\t\treadFirstEnv(config.env, ATHENA_ENV_URL_KEYS)\n\t);\n}\n\n/**\n * Remote Auth/storage/chat/billing URLs need a publishable key even when a\n * local gatewayTransport already satisfies DB construction.\n * Does not treat top-level `url` / discovery same-origin as a key requirement.\n */\nfunction hasExplicitRemoteHttpApiKeyNeed<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\tconst authDisabled = isDisabledAthenaAuthConfig(config.auth);\n\tconst authLocal = isLocalAthenaAuthConfig(config.auth);\n\tconst authObject = athenaAuthConfig(config.auth);\n\treturn Boolean(\n\t\t(!authDisabled &&\n\t\t\t!authLocal &&\n\t\t\t(normalizeOptional(authObject?.url) ||\n\t\t\t\treadFirstEnv(config.env, ENV_AUTH_URL_KEYS))) ||\n\t\tnormalizeOptional(config.storage?.url) ||\n\t\treadFirstEnv(config.env, ENV_STORAGE_URL_KEYS) ||\n\t\tnormalizeOptional(athenaChatConfig(config.chat)?.url) ||\n\t\treadFirstEnv(config.env, ENV_CHAT_URL_KEYS) ||\n\t\tnormalizeOptional(config.billing?.url),\n\t);\n}\n\nfunction isEdgeLocalSentinelUrl(url: string | undefined): boolean {\n\tif (!url) {\n\t\treturn false;\n\t}\n\treturn (\n\t\turl === CLOUDFLARE_EDGE_BASE_URL ||\n\t\turl.startsWith(\"https://athena.local/\") ||\n\t\turl.startsWith(\"http://athena.local/\")\n\t);\n}\n\n/**\n * True when a non-edge DB HTTP gateway is configured (nested `db.url` or env DB/gateway URL).\n * Important for hybrid `db: { d1, url: remoteGateway }` where top-level `url` may be unset.\n */\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function hasRemoteDbGatewayUrl<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\tconst dbUrl =\n\t\tnormalizeOptional(config.db?.url) ??\n\t\treadFirstEnv(config.env, ATHENA_ENV_DB_URL_KEYS);\n\treturn Boolean(dbUrl && !isEdgeLocalSentinelUrl(dbUrl));\n}\n\n/**\n * True when any remote HTTP service is configured (explicit or via env).\n * Used to decide whether the edge-local API-key sentinel is safe to inject.\n */\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function hasRemoteHttpServices<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\tconst authObject = athenaAuthConfig(config.auth);\n\tconst authDisabled = isDisabledAthenaAuthConfig(config.auth);\n\treturn Boolean(\n\t\tresolveUnifiedRemoteRoot(config) ||\n\t\thasRemoteDbGatewayUrl(config) ||\n\t\t(!authDisabled &&\n\t\t\t(normalizeOptional(authObject?.url) ||\n\t\t\t\treadFirstEnv(config.env, ENV_AUTH_URL_KEYS))) ||\n\t\tnormalizeOptional(config.storage?.url) ||\n\t\treadFirstEnv(config.env, ENV_STORAGE_URL_KEYS) ||\n\t\tnormalizeOptional(athenaChatConfig(config.chat)?.url) ||\n\t\treadFirstEnv(config.env, ENV_CHAT_URL_KEYS) ||\n\t\tnormalizeOptional(config.billing?.url),\n\t);\n}\n\n/**\n * True when HTTP object storage is configured (explicit `storage.url`, env, or\n * a unified remote root that resolveCore can turn into `/storage`).\n */\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function hasRemoteHttpStorage<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\treturn Boolean(\n\t\tnormalizeOptional(config.storage?.url) ||\n\t\treadFirstEnv(config.env, ENV_STORAGE_URL_KEYS) ||\n\t\tresolveUnifiedRemoteRoot(config),\n\t);\n}\n\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function hasRemoteAuthService<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\tif (\n\t\tisDisabledAthenaAuthConfig(config.auth) ||\n\t\tisLocalAthenaAuthConfig(config.auth)\n\t) {\n\t\treturn false;\n\t}\n\tconst authObject = athenaAuthConfig(config.auth);\n\treturn Boolean(\n\t\tnormalizeOptional(authObject?.url) ||\n\t\treadFirstEnv(config.env, ENV_AUTH_URL_KEYS) ||\n\t\tresolveUnifiedRemoteRoot(config),\n\t);\n}\n\n/**\n * Wire Cloudflare D1/R2 bindings into the shared `createClient` config spine.\n * Drop-in: `createClient({ db: { d1 }, storage: { r2 } })` uses the same fluent\n * DB/storage call sites as gateway HTTP mode.\n */\nfunction materializeEdgeBindings<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n\tconst d1 = config.db?.d1;\n\tconst r2 = config.storage?.r2;\n\tconst hasD1 = isD1Binding(d1);\n\tconst hasR2 = isR2Binding(r2);\n\tif (!(hasD1 || hasR2)) {\n\t\treturn config;\n\t}\n\n\tif (hasD1 && d1 && typeof d1.prepare !== \"function\") {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_NO_SERVICE_CONFIGURED\",\n\t\t\t\"db.d1 must be a D1 binding with prepare().\",\n\t\t\t\"db\",\n\t\t);\n\t}\n\n\tconst remoteRoot = resolveUnifiedRemoteRoot(config);\n\tconst remoteServices = hasRemoteHttpServices(config);\n\tconst remoteStorage = hasRemoteHttpStorage(config);\n\tconst remoteAuth = hasRemoteAuthService(config);\n\tconst next: AthenaClientConfig<TModels> = { ...config };\n\n\tif (hasD1 && d1) {\n\t\tif (!config.gatewayTransport) {\n\t\t\tnext.gatewayTransport = createCloudflareD1GatewayTransport({\n\t\t\t\td1,\n\t\t\t\tdefaultSessionMode: config.db?.sessionMode,\n\t\t\t\trelationCatalog: catalogFromModels(config.models),\n\t\t\t});\n\t\t}\n\t\t// Local D1 sentinel — not a real HTTP endpoint. Hybrid services must not inherit this for billing.\n\t\t// Do not plant the sentinel when env (or explicit) remote DB gateway URLs exist:\n\t\t// resolveCore prefers explicit `db.url` over ATHENA_DB_URL / ATHENA_GATEWAY_URL, so a\n\t\t// sentinel would shadow those env gateways after remote key selection already succeeded.\n\t\tconst explicitDbUrl = normalizeOptional(config.db?.url);\n\t\tconst remoteDbGateway = hasRemoteDbGatewayUrl(config);\n\t\tnext.db = {\n\t\t\t...config.db,\n\t\t\td1,\n\t\t\turl:\n\t\t\t\texplicitDbUrl ??\n\t\t\t\t(remoteDbGateway ? undefined : CLOUDFLARE_EDGE_BASE_URL),\n\t\t};\n\t\t// Pure edge-local needs a placeholder key for resolveCore. Hybrid clients\n\t\t// (top-level url, env ATHENA_URL, or any explicit/env remote service URL)\n\t\t// must not pre-fill the sentinel — leave key unset so resolveCore can use\n\t\t// ATHENA_API_KEY / ATHENA_GATEWAY_API_KEY (etc.) from the env object.\n\t\tconst explicitKey = normalizeOptional(config.key);\n\t\tif (explicitKey) {\n\t\t\tnext.key = explicitKey;\n\t\t} else if (remoteServices) {\n\t\t\t// Hybrid without top-level key: strip accidental empty key so env keys apply.\n\t\t\tnext.key = undefined;\n\t\t} else {\n\t\t\tnext.key = CLOUDFLARE_EDGE_API_KEY;\n\t\t}\n\t\tif (remoteRoot) {\n\t\t\tnext.billing = {\n\t\t\t\t...(config.billing ?? {}),\n\t\t\t\turl: normalizeOptional(config.billing?.url) ?? remoteRoot,\n\t\t\t};\n\t\t}\n\t\tif (!config.capabilities) {\n\t\t\tnext.capabilities = createCloudflareEdgeCapabilities({\n\t\t\t\tauthRemote: remoteAuth,\n\t\t\t\tfindManyAst: true,\n\t\t\t\tflatCrud: true,\n\t\t\t\tquery: true,\n\t\t\t\trelations: true,\n\t\t\t\trpc: false,\n\t\t\t\thasR2,\n\t\t\t\t// Explicit storage.url / env storage URL / unified remote root all count.\n\t\t\t\thasRemoteStorage: remoteStorage,\n\t\t\t});\n\t\t}\n\t} else if (hasR2 && r2) {\n\t\t// R2 without D1: storage-only edge, or gateway HTTP DB + local R2 objects.\n\t\t// ADR 0016: presence of storage.r2 alone is sufficient to configure object storage.\n\t\tif (\n\t\t\t!(\n\t\t\t\tremoteRoot ||\n\t\t\t\tnormalizeOptional(config.db?.url) ||\n\t\t\t\tnormalizeOptional(config.storage?.url) ||\n\t\t\t\treadFirstEnv(config.env, ENV_STORAGE_URL_KEYS)\n\t\t\t)\n\t\t) {\n\t\t\tnext.storage = {\n\t\t\t\t...config.storage,\n\t\t\t\tr2,\n\t\t\t\t// Local sentinel so resolveCore accepts a storage-only binding client.\n\t\t\t\turl: CLOUDFLARE_EDGE_BASE_URL,\n\t\t\t};\n\t\t\tif (!remoteServices) {\n\t\t\t\tnext.key = normalizeOptional(config.key) ?? CLOUDFLARE_EDGE_API_KEY;\n\t\t\t} else if (normalizeOptional(config.key)) {\n\t\t\t\tnext.key = normalizeOptional(config.key);\n\t\t\t} else {\n\t\t\t\tnext.key = undefined;\n\t\t\t}\n\t\t}\n\t\tif (!config.capabilities) {\n\t\t\tif (\n\t\t\t\tremoteRoot ||\n\t\t\t\tnormalizeOptional(config.db?.url) ||\n\t\t\t\treadFirstEnv(config.env, ATHENA_ENV_DB_URL_KEYS)\n\t\t\t) {\n\t\t\t\t// Gateway (or other remote) DB + local R2: keep gateway mode.\n\t\t\t\t// Catalogs/backups only when remote HTTP storage is also wired.\n\t\t\t\tconst base = createGatewayCapabilities({\n\t\t\t\t\tauthRemote: remoteAuth,\n\t\t\t\t\tstorageBackups: remoteStorage,\n\t\t\t\t\tstorageCatalogs: remoteStorage,\n\t\t\t\t\tstorageConfigured: remoteStorage || hasR2,\n\t\t\t\t});\n\t\t\t\tnext.capabilities = {\n\t\t\t\t\t...base,\n\t\t\t\t\tstorage: {\n\t\t\t\t\t\t...base.storage,\n\t\t\t\t\t\tlocal: true,\n\t\t\t\t\t\tobjects: true,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t// Storage-only edge client — no DB binding or remote root.\n\t\t\t\t// Explicit storage.url / env still enables HTTP catalogs/backups alongside R2.\n\t\t\t\tnext.capabilities = {\n\t\t\t\t\tauth: {\n\t\t\t\t\t\tremote: remoteAuth,\n\t\t\t\t\t},\n\t\t\t\t\tdb: {\n\t\t\t\t\t\tengine: \"unknown\",\n\t\t\t\t\t\tlayers: {\n\t\t\t\t\t\t\tfindManyAst: false,\n\t\t\t\t\t\t\tflatCrud: false,\n\t\t\t\t\t\t\tquery: false,\n\t\t\t\t\t\t\trelations: false,\n\t\t\t\t\t\t\trpc: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlocal: false,\n\t\t\t\t\t\ttransactions: {\n\t\t\t\t\t\t\tatomic: false,\n\t\t\t\t\t\t\tbackend: \"unsupported\",\n\t\t\t\t\t\t\tdeferrable: false,\n\t\t\t\t\t\t\tinteractive: false,\n\t\t\t\t\t\t\tisolationLevels: [],\n\t\t\t\t\t\t\treadOnly: false,\n\t\t\t\t\t\t\tsavepoints: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmode: \"cloudflare-edge\",\n\t\t\t\t\tstorage: {\n\t\t\t\t\t\tbackups: remoteStorage,\n\t\t\t\t\t\tcatalogs: remoteStorage,\n\t\t\t\t\t\tlocal: true,\n\t\t\t\t\t\tobjects: true,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\treturn next;\n}\n\n/**\n * Universal createClient normalization pipeline: aliases → mode → edge.\n *\n * Browser-safe: direct PostgreSQL (`db.pgUri`) materialization is applied only\n * by the Node/server entry (`./v3-client.ts`) on top of this pipeline.\n */\nexport function normalizeUniversalCreateClientConfig<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n\treturn materializeEdgeBindings(\n\t\tapplyExecutionMode(foldBindingAliases(config)),\n\t);\n}\n\n/**\n * Fail fast when a non-Node runtime (browser / RN) is handed `db.pgUri`.\n *\n * Direct PostgreSQL execution requires the Node-only `pg` driver; silently\n * ignoring `pgUri` would both break queries and risk shipping a database URI\n * (a secret) inside a client bundle. The URI is never included in the error.\n *\n * @internal Used by browser/React Native façades; not public API.\n */\nexport function assertDirectPostgresRequiresNodeRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n\tif (\n\t\tnormalizeOptional(config.db?.pgUri) ||\n\t\tnormalizeOptional(config.databaseUrl) ||\n\t\tnormalizeOptional(config.env?.DATABASE_URL) ||\n\t\tconfig.db?.pool\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_POSTGRES_DIRECT_NODE_REQUIRED\",\n\t\t\t\"databaseUrl / db.pgUri / db.pool direct PostgreSQL execution is not available in browser runtimes. Use an Athena HTTP gateway from the browser, or construct this client in a Node.js/server runtime.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n}\n\n/**\n * Fail fast when a browser runtime is handed `auth.mode: \"local\"`.\n * The local TypeScript auth runtime is Node-only and must never ship\n * DATABASE_URL processing into a client bundle.\n *\n * @internal Used by browser/React Native façades; not public API.\n */\nexport function assertLocalAuthRequiresNodeRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n\tif (isLocalAthenaAuthConfig(config.auth)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_LOCAL_NODE_REQUIRED\",\n\t\t\t'auth.mode \"local\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module, or use auth.mode \"remote\".',\n\t\t\t\"auth\",\n\t\t);\n\t}\n}\n\n/**\n * Fail fast when a non-Node runtime is handed `storage.provider: \"local\"`.\n * The filesystem adapter is Node-only and must never enter browser/RN graphs.\n *\n * @internal Used by browser/React Native façades; not public API.\n */\nexport function assertLocalStorageRequiresNodeRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n\tif (isLocalStorageConfig(config.storage)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_STORAGE_LOCAL_NODE_REQUIRED\",\n\t\t\t'storage.provider \"local\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module.',\n\t\t\t\"storage\",\n\t\t);\n\t}\n}\n\n/**\n * Fail fast when a non-Node runtime is handed `storage.provider: \"s3\"`.\n * Direct S3 execution is Node-only; the injected client must not enter browser graphs.\n *\n * @internal Used by browser/React Native façades; not public API.\n */\nexport function assertS3StorageRequiresNodeRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n\tif (isS3StorageConfig(config.storage)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_STORAGE_S3_NODE_REQUIRED\",\n\t\t\t'storage.provider \"s3\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module.',\n\t\t\t\"storage\",\n\t\t);\n\t}\n}\n\nexport function assertLocalChatRequiresNodeRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n\tconst chat = config.chat;\n\tconst wantsLocal =\n\t\tchat === true ||\n\t\t(typeof chat === \"object\" && chat !== null && chat.mode === \"local\");\n\tif (wantsLocal || config.chatRuntime) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_CHAT_LOCAL_NODE_REQUIRED\",\n\t\t\t'Local Chat requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module, or use chat.mode \"remote\".',\n\t\t\t\"chat\",\n\t\t);\n\t}\n}\n\nconst clientQueryCaches = new WeakMap<object, AthenaQueryClient>();\ntype NotificationStoreHolder = {\n\teventStore: AthenaNotificationEventStore;\n\tpreferenceStore: NotificationPreferenceStore;\n};\n\nconst clientNotificationStores = new WeakMap<object, NotificationStoreHolder>();\nconst notificationStoreHoldersByClient = new WeakMap<\n\tobject,\n\tNotificationStoreHolder\n>();\n\nfunction getOrCreateNotificationStores(core: object): NotificationStoreHolder {\n\tconst existing = clientNotificationStores.get(core);\n\tif (existing) {\n\t\treturn existing;\n\t}\n\tconst holder: NotificationStoreHolder = {\n\t\teventStore: createMemoryNotificationEventStore(),\n\t\tpreferenceStore: createMemoryNotificationPreferenceStore(),\n\t};\n\tclientNotificationStores.set(core, holder);\n\treturn holder;\n}\n\nfunction authSessionRecord(client: { auth?: unknown }): {\n\tsession?: { id?: unknown; token?: unknown; userId?: unknown };\n\tuser?: { id?: unknown };\n} | null {\n\ttry {\n\t\tconst sessionApi = (\n\t\t\tclient.auth as { session?: { get?: () => unknown } } | undefined\n\t\t)?.session;\n\t\t// Root Auth UI clients have no viewContext.userId; read client.auth.session.\n\t\tconst payload = sessionApi?.get?.();\n\t\tif (!payload || typeof payload !== \"object\") {\n\t\t\treturn null;\n\t\t}\n\t\treturn payload as {\n\t\t\tsession?: { id?: unknown; token?: unknown; userId?: unknown };\n\t\t\tuser?: { id?: unknown };\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction userIdFromAuthSession(client: { auth?: unknown }): string | null {\n\tconst record = authSessionRecord(client);\n\tif (!record) {\n\t\treturn null;\n\t}\n\tconst userId =\n\t\ttypeof record.user?.id === \"string\" ? record.user.id.trim() : \"\";\n\tif (userId) {\n\t\treturn userId;\n\t}\n\tconst sessionUserId =\n\t\ttypeof record.session?.userId === \"string\"\n\t\t\t? record.session.userId.trim()\n\t\t\t: \"\";\n\treturn sessionUserId || null;\n}\n\nfunction requestContextFromAuthSession(client: {\n\tauth?: unknown;\n}): AthenaRequestContext | undefined {\n\tconst record = authSessionRecord(client);\n\tif (!record) {\n\t\treturn undefined;\n\t}\n\tconst userId = userIdFromAuthSession(client);\n\tconst token =\n\t\ttypeof record.session?.token === \"string\"\n\t\t\t? record.session.token.trim()\n\t\t\t: \"\";\n\tconst sessionId =\n\t\ttypeof record.session?.id === \"string\" ? record.session.id.trim() : \"\";\n\tconst sessionToken = token || sessionId;\n\tif (!userId && !sessionToken) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tsessionToken: sessionToken || undefined,\n\t\tuserId: userId || undefined,\n\t};\n}\n\nexport function replaceClientNotificationPreferenceStore(\n\tclient: object,\n\tstore: NotificationPreferenceStore,\n): void {\n\tconst holder = notificationStoreHoldersByClient.get(client);\n\tif (holder) {\n\t\tholder.preferenceStore = store;\n\t}\n}\n\nfunction getOrCreateClientQueryCache(core: {\n\tconfig: AthenaClientConfig<AthenaClientModelsInput | undefined>;\n}): AthenaQueryClient {\n\tconst existing = clientQueryCaches.get(core);\n\tif (existing) {\n\t\treturn existing;\n\t}\n\tconst created = createAthenaQueryClient({\n\t\tcache: {\n\t\t\tgcTime: core.config.query?.gcTime,\n\t\t\tmode: core.config.query?.cache ?? \"memory\",\n\t\t\tstaleTime: core.config.query?.staleTime,\n\t\t},\n\t});\n\tclientQueryCaches.set(core, created);\n\treturn created;\n}\n\nfunction createClientView<TModels extends AthenaClientModelsInput | undefined>(\n\tcore: AthenaClientCore<TModels>,\n\tviewContext?: AthenaRequestContext,\n): AthenaClient<TModels> {\n\t// Bypass generic expansion during dts emit (TS2589).\n\tconst createView = createInternalClientView as unknown as (\n\t\tinternalCore: AthenaClientCore<TModels>[\"internalCore\"],\n\t\tresolveContext: () => ReturnType<typeof resolveConfiguredContext<TModels>>,\n\t\tcacheContext?: {\n\t\t\taccessScope?: string;\n\t\t\torganizationId?: string;\n\t\t\tpolicyRevision?: string;\n\t\t\tuserId?: string;\n\t\t},\n\t) => InternalAthenaClient<ResolvedModels<TModels>>;\n\tconst organizationId = viewContext?.organizationId?.trim();\n\tconst userId = viewContext?.userId?.trim();\n\tconst accessScope = viewContext?.accessScope?.trim();\n\tconst policyRevision = viewContext?.policyRevision?.trim();\n\tconst resolved = createView(\n\t\tcore.internalCore,\n\t\t() => resolveConfiguredContext(core, viewContext),\n\t\torganizationId || userId || accessScope || policyRevision\n\t\t\t? {\n\t\t\t\taccessScope: accessScope || undefined,\n\t\t\t\torganizationId: organizationId || undefined,\n\t\t\t\tpolicyRevision: policyRevision || undefined,\n\t\t\t\tuserId: userId || undefined,\n\t\t\t}\n\t\t\t: undefined,\n\t);\n\tconst requireDb = (): void => serviceGuard(core.urls, \"db\");\n\n\tconst {\n\t\tproviders: _billingProviders,\n\t\turl: _billingUrl,\n\t\ttestMode: _billingTestMode,\n\t\tmode: _billingMode,\n\t\t...billingOptions\n\t} = core.config.billing ?? {};\n\tvoid _billingProviders;\n\tvoid _billingUrl;\n\tvoid _billingTestMode;\n\tvoid _billingMode;\n\tconst explicitBillingUrl = normalizeOptional(_billingUrl);\n\tconst billingRuntimeEnv = detectAthenaRuntimeEnvironment();\n\tconst attachEmbeddedHttpBilling =\n\t\t(billingRuntimeEnv === \"browser\" || billingRuntimeEnv === \"react-native\") &&\n\t\t!explicitBillingUrl &&\n\t\tcore.config.billing?.mode !== \"remote\";\n\tconst hasLocalBillingProviders = Boolean(\n\t\tcore.config.billing?.providers?.mollie ||\n\t\tcore.config.billing?.providers?.stripe,\n\t);\n\tconst billingModule: AthenaBillingModule | unknown = attachEmbeddedHttpBilling\n\t\t? (createBrowserBillingTransport({\n\t\t\t...(core.config.billing?.endpoint\n\t\t\t\t? { endpoints: { billing: core.config.billing.endpoint } }\n\t\t\t\t: {}),\n\t\t\theaders: core.config.headers,\n\t\t\t...(core.config.resolveRuntimeTopology\n\t\t\t\t? { resolveTopology: core.config.resolveRuntimeTopology }\n\t\t\t\t: {}),\n\t\t}) as unknown as AthenaBillingModule)\n\t\t: hasLocalBillingProviders\n\t\t\t? ({\n\t\t\t\tcustomers: {},\n\t\t\t\tgetCapabilities: async () => {\n\t\t\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\t\t\"ATHENA_SERVICE_NOT_CONFIGURED\",\n\t\t\t\t\t\t\"Athena billing local runtime is not attached.\",\n\t\t\t\t\t\t\"billing\",\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tinvoices: {},\n\t\t\t\tpaymentLinks: {},\n\t\t\t\tpayments: {},\n\t\t\t\trefunds: {},\n\t\t\t\tsubscriptions: {},\n\t\t\t\twebhooks: {},\n\t\t\t\tcatalog: { prices: {}, products: {} },\n\t\t\t\tcheckout: {},\n\t\t\t\tself: {},\n\t\t\t\tadmin: {},\n\t\t\t} as unknown as AthenaBillingModule)\n\t\t\t: core.urls.billing\n\t\t\t\t? createBillingModule({\n\t\t\t\t\tapiKey: core.key,\n\t\t\t\t\tbaseUrl: core.urls.billing,\n\t\t\t\t\tclient: core.client,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t...(core.config.headers ?? {}),\n\t\t\t\t\t\t...(billingOptions.headers ?? {}),\n\t\t\t\t\t},\n\t\t\t\t\t...billingOptions,\n\t\t\t\t})\n\t\t\t\t: createUnavailableNamespace(\"billing\", core.urls);\n\n\tconst r2 = core.config.storage?.r2;\n\tconst hasR2Binding = isR2Binding(r2);\n\t// Edge-local sentinel URLs are not real HTTP storage ports.\n\tconst hasHttpStorage = Boolean(\n\t\tcore.urls.storage && !isEdgeLocalSentinelUrl(core.urls.storage),\n\t);\n\tconst localObjectStore = getLocalObjectStore<AthenaStorageModule>(\n\t\tcore.config.storage,\n\t);\n\tconst runtimeEnv = detectAthenaRuntimeEnvironment();\n\tconst hasS3Storage = isS3StorageConfig(core.config.storage);\n\tconst attachEmbeddedHttpStorage =\n\t\t(runtimeEnv === \"browser\" || runtimeEnv === \"react-native\") &&\n\t\t!localObjectStore &&\n\t\t!hasR2Binding &&\n\t\t!hasS3Storage &&\n\t\t!normalizeOptional(core.config.storage?.url);\n\n\tconst capabilities =\n\t\tcore.config.capabilities ??\n\t\tcreateGatewayCapabilities({\n\t\t\tauthRemote: Boolean(core.urls.auth),\n\t\t\t// Match callable surface: catalogs/backups need real remote HTTP storage.\n\t\t\tstorageBackups: hasHttpStorage,\n\t\t\tstorageCatalogs: hasHttpStorage,\n\t\t\tstorageConfigured:\n\t\t\t\thasHttpStorage ||\n\t\t\t\thasR2Binding ||\n\t\t\t\tBoolean(localObjectStore) ||\n\t\t\t\thasS3Storage ||\n\t\t\t\tattachEmbeddedHttpStorage,\n\t\t});\n\tif (localObjectStore && !core.config.capabilities) {\n\t\tcapabilities.storage.local = true;\n\t}\n\tif (\n\t\t(attachEmbeddedHttpStorage || hasS3Storage) &&\n\t\t!core.config.capabilities\n\t) {\n\t\tcapabilities.storage.objects = true;\n\t}\n\n\t// Hybrid: preserve HTTP storage.* (file/catalog/multipart/backup) and attach L3a R2.\n\t// R2-only: L3a helpers + clear unsupported for managed ports.\n\t// Local Node ObjectStore: catalog-optional file.* (ADR 0027).\n\tconst storageModule:\n\t\t| AthenaStorageModule\n\t\t| CloudflareR2StorageModule\n\t\t| unknown = localObjectStore\n\t\t\t? localObjectStore\n\t\t\t: hasR2Binding && hasHttpStorage\n\t\t\t\t? composeHttpAndR2Storage(resolved.storage as AthenaStorageModule, {\n\t\t\t\t\tprefix: core.config.storage?.prefix ?? undefined,\n\t\t\t\t\tr2,\n\t\t\t\t})\n\t\t\t\t: hasR2Binding\n\t\t\t\t\t? createCloudflareR2StorageModule({\n\t\t\t\t\t\tprefix: core.config.storage?.prefix ?? undefined,\n\t\t\t\t\t\tr2,\n\t\t\t\t\t})\n\t\t\t\t\t: hasS3Storage || attachEmbeddedHttpStorage\n\t\t\t\t\t\t? createEmbeddedStorageFacade()\n\t\t\t\t\t\t: core.urls.storage\n\t\t\t\t\t\t\t? resolved.storage\n\t\t\t\t\t\t\t: createUnavailableNamespace(\"storage\", core.urls);\n\n\tconst storageProvider = getStorageProvider(core.config.storage);\n\tconst embeddedHttpProvider = attachEmbeddedHttpStorage\n\t\t? createBrowserStorageTransport({\n\t\t\t...(core.config.storage?.endpoint\n\t\t\t\t? { endpoints: { storage: core.config.storage.endpoint } }\n\t\t\t\t: {}),\n\t\t\theaders: core.config.headers,\n\t\t\t...(core.config.resolveRuntimeTopology\n\t\t\t\t? { resolveTopology: core.config.resolveRuntimeTopology }\n\t\t\t\t: {}),\n\t\t})\n\t\t: undefined;\n\tconst storageRuntime =\n\t\tgetStorageRuntime(core.config.storage) ??\n\t\t(storageProvider\n\t\t\t? createStorageRuntime({\n\t\t\t\tlifecycle: core.config.lifecycle?.storage,\n\t\t\t\tprovider: storageProvider,\n\t\t\t})\n\t\t\t: undefined) ??\n\t\t(embeddedHttpProvider\n\t\t\t? createStorageRuntime({\n\t\t\t\tlifecycle: core.config.lifecycle?.storage,\n\t\t\t\tprovider: embeddedHttpProvider,\n\t\t\t})\n\t\t\t: undefined);\n\tconst boundStorage =\n\t\tstorageRuntime &&\n\t\t\t(localObjectStore || attachEmbeddedHttpStorage || hasS3Storage)\n\t\t\t? wrapStorageModuleWithRuntime(storageModule as object, storageRuntime)\n\t\t\t: storageModule;\n\tif (storageRuntime && boundStorage && typeof boundStorage === \"object\") {\n\t\tadvertiseSafeStorageCapabilities(\n\t\t\tboundStorage as object,\n\t\t\tcore.config.storage,\n\t\t);\n\t}\n\n\tconst useRemoteNotifications =\n\t\t!isLocalAthenaAuthConfig(core.config.auth) &&\n\t\t!core.config.db?.pgUri &&\n\t\t!core.config.gatewayTransport &&\n\t\tBoolean(core.urls.db || core.urls.auth);\n\tconst notificationStores = getOrCreateNotificationStores(core);\n\n\tconst queryCache = getOrCreateClientQueryCache(core);\n\tregisterTransactionCacheObserver(core.internalCore.gatewayTransport, {\n\t\treconcileCommitted(operations, results) {\n\t\t\tfor (const [index, operation] of operations.entries()) {\n\t\t\t\tconst result = results[index];\n\t\t\t\tif (!result || result.error) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tqueryCache.reconcileExecutable(operation.descriptor, result);\n\t\t\t}\n\t\t},\n\t});\n\n\tconst client: AthenaClient<TModels> = {\n\t\tadmin: {\n\t\t\tquery: ((...args: unknown[]) => {\n\t\t\t\trequireDb();\n\t\t\t\treturn Reflect.apply(resolved.admin.query, resolved.admin, args);\n\t\t\t}) as AthenaClient<TModels>[\"admin\"][\"query\"],\n\t\t},\n\t\tauth: (core.urls.auth\n\t\t\t? resolved.auth\n\t\t\t: createUnavailableNamespace(\"auth\", core.urls)) as AthenaAuthBindings,\n\t\tbilling: billingModule as AthenaBillingModule,\n\t\tcache: queryCache,\n\t\tcapabilities,\n\t\texplain: (executable) => explainAthenaQuery(executable),\n\t\tmodels: core.config.models as TModels,\n\t\tchat: (core.config.chatRuntime\n\t\t\t? core.config.chatRuntime\n\t\t\t: core.urls.chat\n\t\t\t\t? resolved.chat\n\t\t\t\t: createUnavailableNamespace(\"chat\", core.urls)) as AthenaChatModule,\n\t\tdb: (core.urls.db\n\t\t\t? resolved.db\n\t\t\t: createUnavailableNamespace(\n\t\t\t\t\"db\",\n\t\t\t\tcore.urls,\n\t\t\t)) as AthenaClient<TModels>[\"db\"],\n\t\temail: createEmailModule(core.config.email),\n\t\tnotifications: createNotificationsModule({\n\t\t\tcatalog: core.config.notifications?.catalog,\n\t\t\teventStore: notificationStores.eventStore,\n\t\t\tgetUserId: () => {\n\t\t\t\tconst scoped = viewContext?.userId?.trim();\n\t\t\t\tif (scoped) {\n\t\t\t\t\treturn scoped;\n\t\t\t\t}\n\t\t\t\treturn userIdFromAuthSession(client);\n\t\t\t},\n\t\t\tpreferenceStore: notificationStores.preferenceStore,\n\t\t\tremoteRequest: useRemoteNotifications\n\t\t\t\t? async (input) => {\n\t\t\t\t\tconst forwarded = mergeAthenaRequestContexts(\n\t\t\t\t\t\trequestContextFromAuthSession(client),\n\t\t\t\t\t\tviewContext,\n\t\t\t\t\t);\n\t\t\t\t\tconst requester =\n\t\t\t\t\t\tforwarded && !isEmptyAthenaRequestContext(forwarded)\n\t\t\t\t\t\t\t? client.withContext(forwarded)\n\t\t\t\t\t\t\t: client;\n\t\t\t\t\tconst result = await requester.request({\n\t\t\t\t\t\tbody:\n\t\t\t\t\t\t\tinput.method === \"GET\" || input.method === \"DELETE\"\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: input.body,\n\t\t\t\t\t\tcredentials: athenaAuthConfig(core.config.auth)?.credentials,\n\t\t\t\t\t\tmethod: input.method,\n\t\t\t\t\t\tpath: input.path,\n\t\t\t\t\t\tquery: input.query,\n\t\t\t\t\t\tservice: core.urls.db ? \"db\" : \"auth\",\n\t\t\t\t\t});\n\t\t\t\t\treturn unwrapNotificationsGatewayResult(result);\n\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\ttransport: useRemoteNotifications ? \"remote\" : \"embedded\",\n\t\t}),\n\t\tfrom: ((...args: unknown[]) => {\n\t\t\trequireDb();\n\t\t\treturn Reflect.apply(resolved.from, resolved, args);\n\t\t}) as AthenaClient<TModels>[\"from\"],\n\t\thealth: () => {\n\t\t\trequireDb();\n\t\t\treturn resolved.health();\n\t\t},\n\t\tquery<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\n\t\t\trequireDb();\n\t\t\treturn resolved.query<Row>(query, options);\n\t\t},\n\t\trequest<T = unknown>(options: AthenaRequestOptions) {\n\t\t\t// Absolute URLs do not need a configured service base URL.\n\t\t\tif (!options.url?.trim()) {\n\t\t\t\tserviceGuard(core.urls, options.service ?? \"db\");\n\t\t\t}\n\t\t\treturn resolved.request<T>(options);\n\t\t},\n\t\trpc: ((...args: unknown[]) => {\n\t\t\trequireDb();\n\t\t\treturn Reflect.apply(resolved.rpc, resolved, args);\n\t\t}) as AthenaClient<TModels>[\"rpc\"],\n\t\tstorage: boundStorage as AthenaStorageModule,\n\t\tsystem: {\n\t\t\tcompatibility: () => {\n\t\t\t\trequireDb();\n\t\t\t\treturn resolved.system.compatibility();\n\t\t\t},\n\t\t\truntime: () =>\n\t\t\t\ttoAthenaRuntimeDiagnostics(\n\t\t\t\t\tresolveAthenaRuntime(core.config, {\n\t\t\t\t\t\tenvironment: detectAthenaRuntimeEnvironment(),\n\t\t\t\t\t\ttrustedNode: detectAthenaRuntimeEnvironment() === \"node\",\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t/**\n\t\t\t * Safe auth routing snapshot (no secrets). Does not require db.\n\t\t\t */\n\t\t\tinspectAuth(options?: {\n\t\t\t\trequestOrigin?: string | null;\n\t\t\t}): AthenaAuthDiagnostics {\n\t\t\t\tconst ctx = viewContext;\n\t\t\t\tconst attached = getAttachedAthenaAuthRouting(client);\n\t\t\t\tconst baseRouting = attached ?? core.authRouting;\n\t\t\t\t// Recompute server base when caller provides request origin.\n\t\t\t\tconst routing =\n\t\t\t\t\toptions?.requestOrigin && baseRouting\n\t\t\t\t\t\t? resolveAthenaAuthRouting({\n\t\t\t\t\t\t\tcredentials: athenaAuthConfig(core.config.auth)?.credentials,\n\t\t\t\t\t\t\temitWarnings: false,\n\t\t\t\t\t\t\tenv: core.config.env,\n\t\t\t\t\t\t\trequestOrigin: options.requestOrigin,\n\t\t\t\t\t\t\trouting: athenaAuthConfig(core.config.auth)?.routing,\n\t\t\t\t\t\t\tupstreamUrl: athenaAuthConfig(core.config.auth)?.upstreamUrl,\n\t\t\t\t\t\t\turl:\n\t\t\t\t\t\t\t\tathenaAuthConfig(core.config.auth)?.url ??\n\t\t\t\t\t\t\t\tbaseRouting.browserRequestBaseUrl,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: baseRouting;\n\t\t\t\treturn toAthenaAuthDiagnostics(routing, {\n\t\t\t\t\tbearerToken: ctx?.bearerToken,\n\t\t\t\t\tcookie: ctx?.cookie,\n\t\t\t\t\trequestOrigin: options?.requestOrigin,\n\t\t\t\t\tsessionToken: ctx?.sessionToken,\n\t\t\t\t});\n\t\t\t},\n\t\t\trelease: () => {\n\t\t\t\trequireDb();\n\t\t\t\treturn resolved.system.release();\n\t\t\t},\n\t\t},\n\t\tverifyConnection(options?: AthenaGatewayConnectionOptions) {\n\t\t\trequireDb();\n\t\t\treturn resolved.verifyConnection(options);\n\t\t},\n\t\tasync close() {\n\t\t\tconst internals = getAthenaClientInternals(client);\n\t\t\tif (isAthenaRequestRuntime(internals)) {\n\t\t\t\tthrowAthenaRuntimeOwnershipInvalid(\"close\");\n\t\t\t}\n\t\t\tif (internals?.close) {\n\t\t\t\tawait internals.close();\n\t\t\t}\n\t\t},\n\t\twithContext(\n\t\t\tcontext: AthenaRequestContext,\n\t\t): AthenaRequestClient<AthenaClient<TModels>> {\n\t\t\twarnIfEmptyRequestContext(context);\n\t\t\t// Recursive view construction hits TS2589 under dts emit.\n\t\t\tconst next = (\n\t\t\t\tcreateClientView as (c: unknown, ctx?: AthenaRequestContext) => unknown\n\t\t\t)(core, mergeAthenaRequestContexts(viewContext, context));\n\t\t\tif (core.authRouting) {\n\t\t\t\tattachAthenaAuthRouting(next as object, core.authRouting);\n\t\t\t}\n\t\t\tconst internals = getAthenaClientInternals(client);\n\t\t\tif (internals) {\n\t\t\t\tattachAthenaClientInternals(\n\t\t\t\t\tnext as object,\n\t\t\t\t\tcreateViewClientInternals(client, internals),\n\t\t\t\t);\n\t\t\t}\n\t\t\tattachRequestAuthLifecycleGuards(next as object, client);\n\t\t\tnotificationStoreHoldersByClient.set(next as object, notificationStores);\n\t\t\treturn next as AthenaRequestClient<AthenaClient<TModels>>;\n\t\t},\n\t} as AthenaClient<TModels>;\n\n\tnotificationStoreHoldersByClient.set(client, notificationStores);\n\n\tif (core.authRouting) {\n\t\tattachAthenaAuthRouting(client, core.authRouting);\n\t}\n\n\treturn Object.freeze(client);\n}\n\n/**\n * True when a context object carries no identity, auth, cache, or header signal.\n * Used to catch the common footgun `withContext({})` in development.\n */\nexport function isEmptyAthenaRequestContext(\n\tcontext: AthenaRequestContext | undefined | null,\n): boolean {\n\tif (!context) {\n\t\treturn true;\n\t}\n\tconst hasHeaders =\n\t\tcontext.headers !== undefined &&\n\t\tcontext.headers !== null &&\n\t\tObject.keys(context.headers).length > 0;\n\t// Treat omitted fields (undefined) the same as explicit null so `{}` is empty.\n\n\treturn (\n\t\t(context.userId === undefined || context.userId === null) &&\n\t\t(context.organizationId === undefined || context.organizationId === null) &&\n\t\t!normalizeOptionalContextString(context.accessScope) &&\n\t\t!normalizeOptionalContextString(context.policyRevision) &&\n\t\t!normalizeOptionalContextString(context.cookie) &&\n\t\t!normalizeOptionalContextString(context.bearerToken) &&\n\t\t!normalizeOptionalContextString(context.sessionToken) &&\n\t\t!context.forceNoCache &&\n\t\t!hasHeaders\n\t);\n}\n\nfunction normalizeOptionalContextString(\n\tvalue: string | null | undefined,\n): string | undefined {\n\tconst trimmed = value?.trim();\n\treturn trimmed || undefined;\n}\n\nfunction warnIfEmptyRequestContext(context: AthenaRequestContext): void {\n\tif (!isEmptyAthenaRequestContext(context)) {\n\t\treturn;\n\t}\n\t// globalThis.process avoids DTS failures without @types/node (Workers CI).\n\tconst nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } })\n\t\t.process?.env?.NODE_ENV;\n\tif (nodeEnv === \"production\") {\n\t\treturn;\n\t}\n\tconsole.warn(\n\t\t\"[athena] withContext({}) has no userId, organizationId, cookie, bearerToken, sessionToken, headers, or forceNoCache. \" +\n\t\t\"Gateway scope headers will not change. Pass identity fields, or use createAthenaServerClient({ session, scope }).\",\n\t);\n}\n\n/**\n * Shared client-construction spine with an injectable normalization pipeline.\n *\n * The browser-safe universal pipeline is {@link normalizeUniversalCreateClientConfig};\n * the Node/server entry (`./v3-client.ts`) passes a pipeline that additionally\n * materializes direct PostgreSQL (`db.pgUri`). Keeping the pipeline injectable\n * is what keeps `pg` / Node built-ins out of the browser dependency graph.\n *\n * @internal Not part of the public API surface.\n */\nexport function createClientWithNormalizer<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(\n\tconfig: AthenaClientConfig<TModels>,\n\tnormalize: (\n\t\tinput: AthenaClientConfig<TModels>,\n\t) => AthenaClientConfig<TModels>,\n): AthenaClient<TModels> | AthenaClientWithR2Storage<TModels> {\n\t// Nuclear casts: createClientView/resolveCore generics overflow TS depth\n\t// during declaration emit (TS2589). Keep the public overload return types;\n\t// never re-instantiate AthenaClient<TModels> in the body expression tree.\n\tconst pipeline = normalize as (c: unknown) => unknown;\n\tconst coreOf = resolveCore as (c: unknown) => unknown;\n\tconst viewOf = createClientView as (c: unknown) => unknown;\n\tconst client: unknown = viewOf(coreOf(pipeline(config)));\n\treturn client as AthenaClientWithR2Storage<TModels>;\n}\n\n/**\n * Materialize an Athena client (single public constructor).\n *\n * All backends and modes go through this API:\n * - Gateway HTTP: `createClient({ url, key })`\n * - Edge D1/R2: `createClient({ db: { d1 }, storage: { r2 } })` or top-level `{ d1, r2 }`\n * - Hybrid: edge D1 + `url` for remote auth/billing\n * - Switch: `mode: 'auto' | 'edge' | 'gateway'` and `prefer` when both D1 and URL exist\n *\n * Fluent `from` / `query` / `storage.*` call sites are identical across modes (ADR 0001 / 0015 / 0016).\n * `createCloudflareClient` / `createAthenaRuntime` are thin façades that only map config into this function.\n */\nexport function createClient<\n\tconst TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n\tconfig:\n\t\t| (AthenaClientConfig<TModels> & { r2: R2BucketLike })\n\t\t| AthenaClientConfigWithR2<TModels>,\n): AthenaClientWithR2Storage<TModels>;\nexport function createClient<\n\tconst TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClient<TModels>;\nexport function createClient<\n\tconst TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n\tconfig: AthenaClientConfig<TModels>,\n): AthenaClient<TModels> | AthenaClientWithR2Storage<TModels> {\n\t// Nuclear cast: passing the generic normalizer re-instantiates the config\n\t// graph (TS2589); the spine already erases generics internally.\n\tconst factory = createClientWithNormalizer as unknown as (\n\t\tinput: unknown,\n\t\tnormalizer: (c: unknown) => unknown,\n\t) => unknown;\n\tconst normalize = normalizeUniversalCreateClientConfig as unknown as (\n\t\tc: unknown,\n\t) => unknown;\n\tassertDataLifecycleConfig(config);\n\tassertLocalBillingRuntimeEnvironment({\n\t\tconfiguredProviders: config.billing?.providers,\n\t\tmode: config.billing?.mode,\n\t});\n\tassertBillingProviderRuntimeEnvironment(config.billing?.providers);\n\tconst client: unknown = factory(config, normalize);\n\tassertLocalAuthHooks(athenaAuthConfig(config.auth));\n\tassertLocalAuthObservability(athenaAuthConfig(config.auth));\n\treturn client as AthenaClient<TModels> | AthenaClientWithR2Storage<TModels>;\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport {\n\tisDisabledAthenaAuthConfig,\n\tisLocalAthenaAuthConfig,\n} from \"../config.ts\";\n\nexport function assertLocalAuthHooks(auth: unknown): void {\n\tif (!auth || typeof auth !== \"object\") {\n\t\treturn;\n\t}\n\tconst raw = auth as Record<string, unknown>;\n\tif (!(\"hooks\" in raw) || raw.hooks === undefined) {\n\t\treturn;\n\t}\n\tif (isDisabledAthenaAuthConfig(auth) || !isLocalAthenaAuthConfig(auth)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_HOOKS_REQUIRE_LOCAL_RUNTIME\",\n\t\t\t'auth.hooks is an embedded-auth capability. Set auth.mode to \"local\" or omit hooks for remote Auth.',\n\t\t\t\"auth\",\n\t\t);\n\t}\n}\n","/**\n * Athena Auth routing policy (single authority).\n *\n * Dependency direction (do not invert):\n *   primitive URL helpers (athena-auth-url.ts)\n *           ↓\n *   this module (mode / upstream / browser base policy)\n *           ↓\n *   createClient / Next proxy / inspectAuth\n */\n\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { isNodeProductionEnv } from \"../node-env.ts\";\nimport {\n  ATHENA_AUTH_PATH,\n  DEFAULT_ATHENA_AUTH_ORIGIN,\n  type EnvLike,\n  isAbsoluteUrl,\n  normalizeAthenaAuthBaseUrl,\n  readAthenaAuthUpstreamUrlFromEnv,\n} from \"../utils/athena-auth-url.ts\";\nimport type { AthenaAuthCredentials } from \"./types.ts\";\n\nexport type AthenaAuthRoutingMode =\n  | \"same-origin\"\n  | \"direct\"\n  | \"custom\"\n  | \"legacy\";\n\nexport type AthenaAuthRoutingIntent = \"same-origin\" | \"direct\" | \"custom\";\n\n/**\n * Normalized auth routing for one createClient config.\n * Names are consumer-oriented to avoid \"client\" ambiguity.\n */\nexport interface ResolvedAthenaAuthRouting {\n  mode: AthenaAuthRoutingMode;\n  /** Browser auth module base (e.g. `/api/auth` or absolute direct host). */\n  browserRequestBaseUrl: string;\n  /** Absolute app-origin auth base when request origin is known. */\n  serverRequestBaseUrl?: string;\n  /** Upstream origin for the same-origin proxy (no trailing slash). */\n  proxyUpstreamBaseUrl?: string;\n  credentials: AthenaAuthCredentials;\n  warnings: string[];\n}\n\nexport interface ResolveAthenaAuthRoutingInput {\n  /** Execution runtime. Local mode is same-origin without a remote upstream. */\n  execution?: \"local\" | \"remote\";\n  /** Explicit auth.url from createClient config. */\n  url?: string | null;\n  /** Explicit same-origin proxy upstream. */\n  upstreamUrl?: string | null;\n  routing?: AthenaAuthRoutingIntent;\n  credentials?: AthenaAuthCredentials;\n  env?: EnvLike;\n  /**\n   * Unified gateway root used by legacy resolveService path\n   * (`${root}/auth` when no explicit auth url/env).\n   */\n  rootUrl?: string | null;\n  /**\n   * When true, explicit absolute root wins over env service URLs\n   * (matches createClient resolveCore).\n   */\n  explicitRootWinsOverEnvServices?: boolean;\n  /** Public app origin for serverRequestBaseUrl (e.g. https://app.example.com). */\n  requestOrigin?: string | null;\n  /** Emit console warnings for deprecations (default: non-production). */\n  emitWarnings?: boolean;\n}\n\nconst DUPLICATE_AUTH_PATH = /(?:\\/api\\/auth){2,}|\\/auth\\/auth(?:\\/|$)/i;\nconst LEADING_SLASHES = /^\\/+/;\n\nfunction stripTrailingSlashes(value: string): string {\n  return value.replace(/\\/+$/g, \"\");\n}\n\nfunction normalizeOptional(\n  value: string | null | undefined,\n): string | undefined {\n  const normalized = value?.trim();\n  return normalized || undefined;\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n  try {\n    const url = new URL(value);\n    return url.protocol === \"http:\" || url.protocol === \"https:\";\n  } catch {\n    return false;\n  }\n}\n\nfunction appendPath(baseUrl: string, path: string): string {\n  return `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n\nfunction readFirstEnvHttpUrl(\n  env: EnvLike | undefined,\n  keys: readonly string[],\n): string | undefined {\n  if (!env) {\n    return undefined;\n  }\n  for (const key of keys) {\n    const value = env[key]?.trim();\n    if (value && isAbsoluteHttpUrl(value)) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\n/** createClient legacy auth env keys (absolute only). */\nexport const LEGACY_CREATE_CLIENT_AUTH_ENV_KEYS = [\n  \"ATHENA_AUTH_URL\",\n  \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n] as const;\n\n/**\n * Detect doubled auth path segments that would produce `/api/auth/api/auth`.\n */\nexport function hasDuplicateAthenaAuthPath(urlOrPath: string): boolean {\n  const trimmed = urlOrPath.trim();\n  if (!trimmed) {\n    return false;\n  }\n  if (DUPLICATE_AUTH_PATH.test(trimmed)) {\n    return true;\n  }\n  try {\n    if (isAbsoluteUrl(trimmed)) {\n      const path = new URL(trimmed).pathname;\n      return (\n        DUPLICATE_AUTH_PATH.test(path) || /(?:\\/api\\/auth){2,}/i.test(path)\n      );\n    }\n  } catch {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Assert a user-supplied auth URL/path is structurally valid.\n * Throws {@link AthenaConfigurationError} with ATHENA_AUTH_INVALID_URL or DUPLICATE_PATH.\n */\nexport function assertValidAthenaAuthUrlShape(\n  value: string,\n  label = \"Athena auth URL\",\n): void {\n  const trimmed = value.trim();\n  if (!trimmed || trimmed === \"undefined\" || trimmed === \"null\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_INVALID_URL\",\n      `${label} is empty or invalid. Received ${JSON.stringify(value)}.`,\n      \"auth\",\n    );\n  }\n  if (\n    trimmed === \"http://\" ||\n    trimmed === \"https://\" ||\n    trimmed.startsWith(\"undefined/\") ||\n    trimmed.startsWith(\"null/\")\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_INVALID_URL\",\n      `${label} is not a usable URL. Received ${JSON.stringify(value)}.`,\n      \"auth\",\n    );\n  }\n  if (hasDuplicateAthenaAuthPath(trimmed)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_DUPLICATE_PATH\",\n      `${label} contains a duplicated auth path segment (e.g. /api/auth/api/auth). Received ${JSON.stringify(value)}.`,\n      \"auth\",\n    );\n  }\n  if (isAbsoluteUrl(trimmed) && !isAbsoluteHttpUrl(trimmed)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_INVALID_URL\",\n      `${label} must use http or https. Received ${JSON.stringify(value)}.`,\n      \"auth\",\n    );\n  }\n  if (isAbsoluteUrl(trimmed)) {\n    try {\n      // eslint-disable-next-line no-new\n      new URL(trimmed);\n    } catch {\n      throw new AthenaConfigurationError(\n        \"ATHENA_AUTH_INVALID_URL\",\n        `${label} is not a valid absolute URL. Received ${JSON.stringify(value)}.`,\n        \"auth\",\n      );\n    }\n  }\n}\n\n/**\n * Strip trailing `/api/auth` from an absolute upstream URL → origin (+ optional base path).\n * Relative paths return as-is after slash normalize.\n */\nexport function toProxyUpstreamBaseUrl(raw: string): string {\n  const trimmed = raw.trim();\n  if (!trimmed) {\n    return DEFAULT_ATHENA_AUTH_ORIGIN;\n  }\n  if (isAbsoluteHttpUrl(trimmed)) {\n    const url = new URL(trimmed);\n    const path = stripTrailingSlashes(url.pathname || \"/\");\n    if (path === ATHENA_AUTH_PATH || path.endsWith(ATHENA_AUTH_PATH)) {\n      url.pathname =\n        path === ATHENA_AUTH_PATH\n          ? \"/\"\n          : path.slice(0, -ATHENA_AUTH_PATH.length) || \"/\";\n    }\n    url.search = \"\";\n    url.hash = \"\";\n    return stripTrailingSlashes(url.toString());\n  }\n  return stripTrailingSlashes(\n    trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`,\n  );\n}\n\n/**\n * Legacy createClient auth base (matches resolveService before routing modes).\n *\n * Precedence:\n * 1. explicit `auth.url` (any non-empty string, including relative — historically\n *    only absolute survived gateway normalize; relative now rejected later or accepted for same-origin)\n * 2. when explicit absolute root wins: `${root}/auth`\n * 3. env `ATHENA_AUTH_URL` | `NEXT_PUBLIC_ATHENA_AUTH_URL` (absolute http(s) only)\n * 4. `${root}/auth` when root is set\n */\nexport function resolveLegacyCreateClientAuthUrl(input: {\n  explicitUrl?: string | null;\n  env?: EnvLike;\n  rootUrl?: string | null;\n  explicitRootWinsOverEnvServices?: boolean;\n}): string | undefined {\n  const explicit = normalizeOptional(input.explicitUrl);\n  if (explicit) {\n    return explicit;\n  }\n  const root = normalizeOptional(input.rootUrl);\n  if (\n    input.explicitRootWinsOverEnvServices &&\n    root &&\n    isAbsoluteHttpUrl(root)\n  ) {\n    return appendPath(root, \"auth\");\n  }\n  const fromEnv = readFirstEnvHttpUrl(\n    input.env,\n    LEGACY_CREATE_CLIENT_AUTH_ENV_KEYS,\n  );\n  if (fromEnv) {\n    return fromEnv;\n  }\n  if (root && isAbsoluteHttpUrl(root)) {\n    return appendPath(root, \"auth\");\n  }\n  return undefined;\n}\n\nfunction resolveUpstreamCandidate(input: ResolveAthenaAuthRoutingInput): {\n  value?: string;\n  source: \"upstreamUrl\" | \"url-compat\" | \"env\" | \"default\" | \"none\";\n} {\n  const explicitUpstream = normalizeOptional(input.upstreamUrl);\n  if (explicitUpstream) {\n    return { source: \"upstreamUrl\", value: explicitUpstream };\n  }\n\n  const explicitUrl = normalizeOptional(input.url);\n  if (explicitUrl && isAbsoluteHttpUrl(explicitUrl)) {\n    return { source: \"url-compat\", value: explicitUrl };\n  }\n\n  if (input.env) {\n    const fromEnv = readAthenaAuthUpstreamUrlFromEnv(input.env);\n    if (fromEnv) {\n      return { source: \"env\", value: fromEnv };\n    }\n  }\n\n  return { source: \"none\" };\n}\n\nfunction buildServerRequestBaseUrl(\n  browserRequestBaseUrl: string,\n  requestOrigin?: string | null,\n): string | undefined {\n  const origin = normalizeOptional(requestOrigin);\n  if (!origin) {\n    return undefined;\n  }\n  if (isAbsoluteHttpUrl(browserRequestBaseUrl)) {\n    return stripTrailingSlashes(browserRequestBaseUrl);\n  }\n  const path = browserRequestBaseUrl.startsWith(\"/\")\n    ? browserRequestBaseUrl\n    : `/${browserRequestBaseUrl}`;\n  return stripTrailingSlashes(new URL(path, `${origin}/`).toString());\n}\n\nfunction defaultCredentials(\n  explicit?: AthenaAuthCredentials,\n): AthenaAuthCredentials {\n  // Cookie sessions are the default for all routing modes (matches callAuthEndpoint).\n  // Mode-specific defaults can be layered here later if needed.\n  return explicit ?? \"include\";\n}\n\nfunction emitWarning(message: string, enabled: boolean): void {\n  if (!enabled) {\n    return;\n  }\n  console.warn(`[athena] ${message}`);\n}\n\n/**\n * Resolve auth routing policy for createClient and Next adapters.\n *\n * Policy lives only here — URL string helpers remain policy-free.\n */\nexport function resolveAthenaAuthRouting(\n  input: ResolveAthenaAuthRoutingInput = {},\n): ResolvedAthenaAuthRouting {\n  const warnings: string[] = [];\n  const emit = input.emitWarnings ?? !isNodeProductionEnv();\n  const credentials = defaultCredentials(input.credentials);\n\n  if (input.execution === \"local\") {\n    const browserRequestBaseUrl = ATHENA_AUTH_PATH;\n    return {\n      browserRequestBaseUrl,\n      credentials,\n      mode: \"same-origin\",\n      serverRequestBaseUrl: buildServerRequestBaseUrl(\n        browserRequestBaseUrl,\n        input.requestOrigin,\n      ),\n      warnings,\n    };\n  }\n\n  const routing = input.routing;\n  const mode: AthenaAuthRoutingMode = routing ?? \"legacy\";\n\n  if (mode === \"same-origin\") {\n    const browserRequestBaseUrl = ATHENA_AUTH_PATH;\n    assertValidAthenaAuthUrlShape(\n      browserRequestBaseUrl,\n      \"Same-origin auth base\",\n    );\n\n    const upstream = resolveUpstreamCandidate(input);\n    let proxyUpstreamBaseUrl: string | undefined;\n\n    if (upstream.value) {\n      assertValidAthenaAuthUrlShape(upstream.value, \"Athena auth upstream URL\");\n      proxyUpstreamBaseUrl = toProxyUpstreamBaseUrl(upstream.value);\n\n      if (upstream.source === \"url-compat\") {\n        const message =\n          \"Deprecated interpretation: auth.url is being treated as auth.upstreamUrl under same-origin routing. \" +\n          'Use auth: { routing: \"same-origin\", upstreamUrl: \"https://auth.example.com\" } instead.';\n        warnings.push(message);\n        emitWarning(message, emit);\n      }\n    } else {\n      // Same-origin `/api/auth` is valid without a remote proxy (embedded Auth /\n      // Next discovery). Keep the gap on `warnings` for inspectAuth; do not\n      // console.warn on every createClient — proxy handlers fail closed with\n      // ATHENA_AUTH_UPSTREAM_REQUIRED if they are actually mounted.\n      warnings.push(\n        'auth.routing \"same-origin\" has no proxy upstream. Set auth.upstreamUrl ' +\n          \"or ATHENA_AUTH_UPSTREAM_URL (or aliases) before mounting createAthenaAuthProxyHandlers.\",\n      );\n    }\n\n    const serverRequestBaseUrl = buildServerRequestBaseUrl(\n      browserRequestBaseUrl,\n      input.requestOrigin,\n    );\n\n    return {\n      browserRequestBaseUrl,\n      credentials,\n      mode: \"same-origin\",\n      proxyUpstreamBaseUrl,\n      serverRequestBaseUrl,\n      warnings,\n    };\n  }\n\n  if (mode === \"direct\") {\n    const explicitUrl = normalizeOptional(input.url);\n    if (!explicitUrl) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_AUTH_INVALID_URL\",\n        'auth.routing \"direct\" requires auth.url (absolute Athena Auth base).',\n        \"auth\",\n      );\n    }\n    assertValidAthenaAuthUrlShape(explicitUrl, \"auth.url\");\n    // Guaranteed by policy (not only by normalize): direct never accepts relative bases.\n    if (!isAbsoluteHttpUrl(explicitUrl)) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_AUTH_INVALID_URL\",\n        'auth.routing \"direct\" requires an absolute http(s) auth.url. ' +\n        `Received ${JSON.stringify(explicitUrl)}. Use routing: \"same-origin\" for relative /api/auth.`,\n        \"auth\",\n      );\n    }\n    const browserRequestBaseUrl = normalizeAthenaAuthBaseUrl(explicitUrl);\n    assertValidAthenaAuthUrlShape(\n      browserRequestBaseUrl,\n      \"Resolved direct auth base\",\n    );\n\n    return {\n      browserRequestBaseUrl,\n      credentials,\n      mode: \"direct\",\n      serverRequestBaseUrl: buildServerRequestBaseUrl(\n        browserRequestBaseUrl,\n        input.requestOrigin,\n      ),\n      warnings,\n    };\n  }\n\n  if (mode === \"custom\") {\n    const explicitUrl = normalizeOptional(input.url);\n    const browserRequestBaseUrl = explicitUrl\n      ? explicitUrl.replace(/\\/+$/, \"\") || ATHENA_AUTH_PATH\n      : ATHENA_AUTH_PATH;\n    if (explicitUrl) {\n      assertValidAthenaAuthUrlShape(explicitUrl, \"auth.url\");\n    }\n    const upstream = normalizeOptional(input.upstreamUrl);\n    return {\n      browserRequestBaseUrl,\n      credentials,\n      mode: \"custom\",\n      proxyUpstreamBaseUrl: upstream\n        ? toProxyUpstreamBaseUrl(upstream)\n        : undefined,\n      serverRequestBaseUrl: buildServerRequestBaseUrl(\n        browserRequestBaseUrl,\n        input.requestOrigin,\n      ),\n      warnings,\n    };\n  }\n\n  // --- legacy (routing omitted) ---\n  const legacyUrl = resolveLegacyCreateClientAuthUrl({\n    env: input.env,\n    explicitRootWinsOverEnvServices: input.explicitRootWinsOverEnvServices,\n    explicitUrl: input.url,\n    rootUrl: input.rootUrl,\n  });\n\n  if (!legacyUrl) {\n    // No auth configured — callers decide whether auth is required.\n    return {\n      browserRequestBaseUrl: \"\",\n      credentials,\n      mode: \"legacy\",\n      warnings,\n    };\n  }\n\n  if (legacyUrl && (legacyUrl.includes(\"undefined\") || legacyUrl === \"null\")) {\n    assertValidAthenaAuthUrlShape(legacyUrl, \"auth.url\");\n  }\n  // Relative legacy bases were historically rejected later by gateway normalize;\n  // still validate absolute shapes and duplicate paths when absolute.\n  if (isAbsoluteUrl(legacyUrl) || legacyUrl.startsWith(\"/\")) {\n    try {\n      assertValidAthenaAuthUrlShape(legacyUrl, \"auth.url\");\n    } catch (error) {\n      // Preserve legacy: empty/invalid relative strings that never reached auth\n      // still throw on use; only hard-fail clear absolute garbage.\n      if (\n        error instanceof AthenaConfigurationError &&\n        (error.code === \"ATHENA_AUTH_DUPLICATE_PATH\" ||\n          (isAbsoluteUrl(legacyUrl) &&\n            error.code === \"ATHENA_AUTH_INVALID_URL\"))\n      ) {\n        throw error;\n      }\n    }\n  }\n\n  return {\n    browserRequestBaseUrl: legacyUrl,\n    credentials,\n    mode: \"legacy\",\n    serverRequestBaseUrl: buildServerRequestBaseUrl(\n      legacyUrl,\n      input.requestOrigin,\n    ),\n    warnings,\n  };\n}\n\n/** WeakMap so request views / proxies can read routing without public config leaks. */\nconst authRoutingByClient = new WeakMap<object, ResolvedAthenaAuthRouting>();\n\n/** Survives duplicate `@xylex-group/athena` copies (root vs `next/server` webpack graphs). */\nconst AUTH_ROUTING = Symbol.for(\"@xylex-group/athena.authRouting\");\n\ntype ClientWithRouting = object & {\n  [AUTH_ROUTING]?: ResolvedAthenaAuthRouting;\n};\n\nexport function attachAthenaAuthRouting(\n  client: object,\n  routing: ResolvedAthenaAuthRouting,\n): void {\n  authRoutingByClient.set(client, routing);\n  try {\n    Object.defineProperty(client, AUTH_ROUTING, {\n      configurable: true,\n      enumerable: false,\n      value: routing,\n      writable: true,\n    });\n  } catch {\n    // Frozen withContext() views still keep routing on the WeakMap.\n  }\n}\n\nexport function getAttachedAthenaAuthRouting(\n  client: object,\n): ResolvedAthenaAuthRouting | undefined {\n  return (\n    authRoutingByClient.get(client) ??\n    (client as ClientWithRouting)[AUTH_ROUTING]\n  );\n}\n\n/**\n * Safe public diagnostics snapshot (no secrets).\n */\nexport interface AthenaAuthDiagnostics {\n  authConfigured: boolean;\n  browserRequestBaseUrl: string | null;\n  credentials: AthenaAuthCredentials | null;\n  mode: AthenaAuthRoutingMode | null;\n  proxyUpstreamBaseUrl: string | null;\n  requestOrigin: string | null;\n  serverRequestBaseUrl: string | null;\n  bearerDetected: boolean;\n  cookieDetected: boolean;\n  sessionTokenDetected: boolean;\n  warnings: string[];\n}\n\nexport function toAthenaAuthDiagnostics(\n  routing: ResolvedAthenaAuthRouting | undefined,\n  context?: {\n    requestOrigin?: string | null;\n    cookie?: string | null;\n    bearerToken?: string | null;\n    sessionToken?: string | null;\n  },\n): AthenaAuthDiagnostics {\n  const requestOrigin = normalizeOptional(context?.requestOrigin) ?? null;\n  const browser = routing?.browserRequestBaseUrl\n    ? routing.browserRequestBaseUrl\n    : null;\n  const server =\n    routing && requestOrigin\n      ? (buildServerRequestBaseUrl(\n        routing.browserRequestBaseUrl,\n        requestOrigin,\n      ) ??\n        routing.serverRequestBaseUrl ??\n        null)\n      : (routing?.serverRequestBaseUrl ?? null);\n\n  return {\n    authConfigured: Boolean(browser),\n    bearerDetected: Boolean(normalizeOptional(context?.bearerToken)),\n    browserRequestBaseUrl: browser,\n    cookieDetected: Boolean(normalizeOptional(context?.cookie)),\n    credentials: routing?.credentials ?? null,\n    mode: routing?.mode ?? null,\n    proxyUpstreamBaseUrl: routing?.proxyUpstreamBaseUrl ?? null,\n    requestOrigin,\n    serverRequestBaseUrl: server,\n    sessionTokenDetected: Boolean(normalizeOptional(context?.sessionToken)),\n    warnings: routing?.warnings ? [...routing.warnings] : [],\n  };\n}\n\n/**\n * Thin extract of explicit `auth.routing` / `auth.url` / `auth: false`.\n * Does not infer embedded Auth or invent Next discovery endpoints.\n */\nexport function resolveExplicitAuthRouting(\n  auth?:\n    | false\n    | {\n      credentials?: AthenaAuthCredentials;\n      routing?: AthenaAuthRoutingIntent;\n      upstreamUrl?: string | null;\n      url?: string | null;\n    }\n    | null,\n): ResolvedAthenaAuthRouting | undefined {\n  if (auth === false || auth == null || typeof auth !== \"object\") {\n    return undefined;\n  }\n  if (\n    auth.routing === \"same-origin\" ||\n    auth.routing === \"direct\" ||\n    auth.routing === \"custom\"\n  ) {\n    return resolveAthenaAuthRouting({\n      credentials: auth.credentials,\n      emitWarnings: false,\n      routing: auth.routing,\n      upstreamUrl: auth.upstreamUrl,\n      url: auth.url,\n    });\n  }\n  const explicitUrl = normalizeOptional(auth.url);\n  if (!explicitUrl) {\n    return undefined;\n  }\n  return resolveAthenaAuthRouting({\n    credentials: auth.credentials,\n    emitWarnings: false,\n    routing: \"custom\",\n    upstreamUrl: auth.upstreamUrl,\n    url: explicitUrl,\n  });\n}\n\n/** @internal re-export helper for path joins without policy */\nexport function joinAuthPath(base: string, segment: string): string {\n  const path = segment.replace(LEADING_SLASHES, \"\");\n  if (isAbsoluteHttpUrl(base) || base.startsWith(\"http\")) {\n    return new URL(path, `${stripTrailingSlashes(base)}/`).toString();\n  }\n  const root = base.startsWith(\"/\") ? base : `/${base}`;\n  return `${stripTrailingSlashes(root)}/${path}`;\n}\n","/**\n * Access Node env without referencing the bare `process` global name.\n * Keeps DTS/tsup builds green when `@types/node` is not on the type path\n * (Cloudflare Workers Builds for consumers that compile monorepo athena-js).\n */\n\ntype ProcessEnvLike = Record<string, string | undefined>;\n\nfunction getProcess(): { env?: ProcessEnvLike } | undefined {\n  return (globalThis as { process?: { env?: ProcessEnvLike } }).process;\n}\n\nexport function getProcessEnv(): ProcessEnvLike | undefined {\n  return getProcess()?.env;\n}\n\nexport function getNodeEnv(): string | undefined {\n  return getProcessEnv()?.NODE_ENV;\n}\n\nexport function isNodeProductionEnv(): boolean {\n  return getNodeEnv() === \"production\";\n}\n\nexport function getProcessEnvVar(key: string): string | undefined {\n  return getProcessEnv()?.[key];\n}\n","/**\n * Resolve Athena Auth base / upstream URLs from env or explicit config.\n *\n * Mirrors the Athena Auth UI base-url contract so apps and the SDK share one\n * precedence order for `ATHENA_AUTH_*` environment variables.\n */\n\n/** Default browser/proxy path for same-origin auth routing. */\nexport const ATHENA_AUTH_PATH = \"/api/auth\";\n\n/** Fallback origin when no absolute upstream is configured (server-side). */\nexport const LOCAL_DEV_ORIGIN = \"http://localhost:3000\";\n\n/**\n * Hosted Athena Auth origin used when no upstream override is supplied.\n * Origin only — no `/api/auth` suffix.\n */\nexport const DEFAULT_ATHENA_AUTH_ORIGIN = \"https://auth.athena-auth.com\";\n\n/**\n * @deprecated Prefer {@link DEFAULT_ATHENA_AUTH_ORIGIN}.\n * Kept for callers that used the older name.\n */\nexport const DEFAULT_ATHENA_AUTH_UPSTREAM_URL = DEFAULT_ATHENA_AUTH_ORIGIN;\n\n/**\n * Environment keys checked (in order) for the Athena Auth upstream URL.\n *\n * Prefer server-only keys first so private upstream hosts are not forced to\n * rely on `NEXT_PUBLIC_*` values.\n */\nexport const ATHENA_AUTH_UPSTREAM_ENV_KEYS = [\n\t\"ATHENA_AUTH_UPSTREAM_URL\",\n\t\"ATHENA_AUTH_URL\",\n\t\"NEXT_PUBLIC_ATHENA_AUTH_UPSTREAM_URL\",\n\t\"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n] as const;\n\n/**\n * Auth UI naming parity (`base-url.ts`).\n * Same ordered list as {@link ATHENA_AUTH_UPSTREAM_ENV_KEYS}.\n */\nexport const ATHENA_AUTH_UPSTREAM_URL_ENV_NAMES = ATHENA_AUTH_UPSTREAM_ENV_KEYS;\n\nexport type AthenaAuthUpstreamEnvKey =\n\t(typeof ATHENA_AUTH_UPSTREAM_ENV_KEYS)[number];\n\n/** Loose env map (Node `process.env` or a test fixture). */\nexport type EnvLike = Record<string, string | undefined>;\n\nexport type AthenaAuthUpstreamEnv = Partial<\n\tRecord<AthenaAuthUpstreamEnvKey, string | undefined>\n> &\n\tEnvLike;\n\nexport interface AthenaAuthClientBaseUrlOptions {\n\t/**\n\t * When `true` (default), ensure the client base ends with `/api/auth`.\n\t * Set `false` when the auth server is mounted at a custom path or root.\n\t */\n\tappendAuthPath?: boolean;\n}\n\nconst LEADING_SLASHES_REGEX = /^\\/+/;\n\nfunction stripTrailingSlashes(value: string): string {\n\treturn value.replace(/\\/+$/g, \"\");\n}\n\nfunction ensureLeadingSlash(value: string): string {\n\treturn value.startsWith(\"/\") ? value : `/${value}`;\n}\n\nfunction ensureAthenaAuthPath(pathname: string): string {\n\tconst normalizedPath = stripTrailingSlashes(\n\t\tensureLeadingSlash(pathname.trim()),\n\t);\n\n\tif (!normalizedPath || normalizedPath === \"/\") {\n\t\treturn ATHENA_AUTH_PATH;\n\t}\n\n\tif (normalizedPath.endsWith(ATHENA_AUTH_PATH)) {\n\t\treturn normalizedPath;\n\t}\n\n\treturn `${normalizedPath}${ATHENA_AUTH_PATH}`;\n}\n\nfunction stripAthenaAuthPath(pathname: string): string {\n\tconst normalizedPath = stripTrailingSlashes(\n\t\tensureLeadingSlash(pathname.trim()),\n\t);\n\n\tif (!normalizedPath || normalizedPath === \"/\") {\n\t\treturn \"/\";\n\t}\n\n\tif (normalizedPath === ATHENA_AUTH_PATH) {\n\t\treturn \"/\";\n\t}\n\n\tif (normalizedPath.endsWith(ATHENA_AUTH_PATH)) {\n\t\tconst withoutAuthPath = normalizedPath.slice(0, -ATHENA_AUTH_PATH.length);\n\t\treturn withoutAuthPath ? ensureLeadingSlash(withoutAuthPath) : \"/\";\n\t}\n\n\treturn normalizedPath;\n}\n\nfunction readProcessEnv(): EnvLike | undefined {\n\ttry {\n\t\tconst maybeProcess = (globalThis as { process?: { env?: EnvLike } })\n\t\t\t.process;\n\t\treturn maybeProcess?.env;\n\t} catch {\n\t\t// Restricted runtimes may throw when reading process.\n\t}\n\treturn undefined;\n}\n\nfunction getBrowserOrigin(): string | undefined {\n\ttry {\n\t\tconst origin = (\n\t\t\tglobalThis as { window?: { location?: { origin?: string } } }\n\t\t).window?.location?.origin;\n\t\treturn typeof origin === \"string\" && origin.length > 0 ? origin : undefined;\n\t} catch {\n\t\t// Non-browser or restricted runtimes may throw on window access.\n\t}\n\treturn undefined;\n}\n\n/**\n * Returns `true` when the value is an absolute `http://` or `https://` URL.\n */\nexport function isAbsoluteUrl(value: string): boolean {\n\tconst trimmed = value.trim();\n\treturn trimmed.startsWith(\"http://\") || trimmed.startsWith(\"https://\");\n}\n\n/**\n * Read the first non-empty Athena Auth upstream URL from an env-like map.\n *\n * @returns Trimmed URL string, or `undefined` when none of the keys are set\n */\nexport function readAthenaAuthUpstreamUrlFromEnv(\n\tenv: EnvLike,\n): string | undefined {\n\tfor (const key of ATHENA_AUTH_UPSTREAM_ENV_KEYS) {\n\t\tconst value = env[key]?.trim();\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction resolveConfiguredAthenaAuthUpstreamUrl(\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string | undefined {\n\tif (typeof rawUpstreamUrl === \"string\") {\n\t\tconst trimmed = rawUpstreamUrl.trim();\n\t\treturn trimmed || undefined;\n\t}\n\n\tif (rawUpstreamUrl) {\n\t\treturn readAthenaAuthUpstreamUrlFromEnv(rawUpstreamUrl);\n\t}\n\n\tconst processEnv = readProcessEnv();\n\treturn processEnv ? readAthenaAuthUpstreamUrlFromEnv(processEnv) : undefined;\n}\n\n/**\n * Normalize a consumer-supplied auth base URL so it targets `/api/auth`\n * (unless the path already ends with that segment).\n *\n * Absolute URLs keep origin and rewrite pathname; relative paths are ensured\n * to end with `/api/auth`.\n *\n * @example\n * ```ts\n * normalizeAthenaAuthBaseUrl('https://auth.example.com')\n * // => 'https://auth.example.com/api/auth'\n *\n * normalizeAthenaAuthBaseUrl('/api/auth')\n * // => '/api/auth'\n * ```\n */\nexport function normalizeAthenaAuthBaseUrl(urlOrPath: string): string {\n\tconst trimmed = urlOrPath.trim();\n\n\tif (!trimmed) {\n\t\treturn ATHENA_AUTH_PATH;\n\t}\n\n\tif (isAbsoluteUrl(trimmed)) {\n\t\tconst url = new URL(trimmed);\n\t\turl.pathname = ensureAthenaAuthPath(url.pathname);\n\t\turl.search = \"\";\n\t\turl.hash = \"\";\n\t\treturn stripTrailingSlashes(url.toString());\n\t}\n\n\treturn ensureAthenaAuthPath(trimmed);\n}\n\n/**\n * Resolve the **server-side** Athena Auth upstream origin (no `/api/auth` suffix).\n *\n * Used when proxying or calling the auth host directly from Node / edge.\n *\n * @param rawUpstreamUrl - Explicit URL, env map, or omit to read `process.env`\n * @returns Origin like `https://auth.example.com` (no trailing slash)\n */\nexport function resolveAthenaAuthUpstreamUrl(\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string {\n\tconst configuredUpstream =\n\t\tresolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl) ||\n\t\tDEFAULT_ATHENA_AUTH_ORIGIN;\n\n\tif (isAbsoluteUrl(configuredUpstream)) {\n\t\tconst upstreamUrl = new URL(configuredUpstream);\n\t\tupstreamUrl.pathname = stripAthenaAuthPath(upstreamUrl.pathname);\n\t\tupstreamUrl.search = \"\";\n\t\tupstreamUrl.hash = \"\";\n\t\treturn stripTrailingSlashes(upstreamUrl.toString());\n\t}\n\n\tconst normalizedPath = stripAthenaAuthPath(configuredUpstream);\n\treturn stripTrailingSlashes(\n\t\tnew URL(normalizedPath, LOCAL_DEV_ORIGIN).toString(),\n\t);\n}\n\nfunction resolveBrowserFacingOrigin(\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string {\n\tif (resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl)) {\n\t\treturn `${resolveAthenaAuthUpstreamUrl(rawUpstreamUrl)}/`;\n\t}\n\n\tconst browserOrigin = getBrowserOrigin();\n\tif (browserOrigin) {\n\t\treturn `${browserOrigin}/`;\n\t}\n\n\treturn `${LOCAL_DEV_ORIGIN}/`;\n}\n\nfunction resolvePreservedAthenaAuthBaseUrl(\n\tconfiguredAuthBaseUrl: string,\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string {\n\tconst trimmed = configuredAuthBaseUrl.trim();\n\tconst preservedConfiguredBaseUrl = trimmed || ATHENA_AUTH_PATH;\n\n\tif (isAbsoluteUrl(preservedConfiguredBaseUrl)) {\n\t\treturn stripTrailingSlashes(preservedConfiguredBaseUrl);\n\t}\n\n\treturn stripTrailingSlashes(\n\t\tnew URL(\n\t\t\tensureLeadingSlash(preservedConfiguredBaseUrl),\n\t\t\tresolveBrowserFacingOrigin(rawUpstreamUrl),\n\t\t).toString(),\n\t);\n}\n\n/**\n * Resolve the **browser-facing** auth client base URL.\n *\n * Default behavior appends `/api/auth` for same-origin proxying. Pass\n * `{ appendAuthPath: false }` to keep a custom path or root mount.\n *\n * Overloads match common call styles from Athena Auth UI and app code:\n * - `resolveAthenaAuthClientBaseUrl(\"https://auth.example.com\")`\n * - `resolveAthenaAuthClientBaseUrl(process.env)`\n * - `resolveAthenaAuthClientBaseUrl(undefined)` → env + defaults\n * - `resolveAthenaAuthClientBaseUrl(path, upstream, { appendAuthPath: false })`\n */\nexport function resolveAthenaAuthClientBaseUrl(\n\tconfiguredAuthBaseUrl?: string | EnvLike,\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n\toptions?: AthenaAuthClientBaseUrlOptions,\n): string;\nexport function resolveAthenaAuthClientBaseUrl(\n\tconfiguredAuthBaseUrl: string,\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n\toptions?: AthenaAuthClientBaseUrlOptions,\n): string;\nexport function resolveAthenaAuthClientBaseUrl(\n\tconfiguredAuthBaseUrl?: string | EnvLike,\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n\toptions: AthenaAuthClientBaseUrlOptions = {},\n): string {\n\tlet baseInput: string;\n\n\tif (typeof configuredAuthBaseUrl === \"string\") {\n\t\tbaseInput = configuredAuthBaseUrl;\n\t} else if (configuredAuthBaseUrl) {\n\t\tbaseInput =\n\t\t\treadAthenaAuthUpstreamUrlFromEnv(configuredAuthBaseUrl) ??\n\t\t\tATHENA_AUTH_PATH;\n\t} else {\n\t\tconst fromEnv = resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl);\n\t\tbaseInput = fromEnv ?? ATHENA_AUTH_PATH;\n\t}\n\n\tif (options.appendAuthPath === false) {\n\t\treturn resolvePreservedAthenaAuthBaseUrl(baseInput, rawUpstreamUrl);\n\t}\n\n\tconst normalizedConfiguredBaseUrl = normalizeAthenaAuthBaseUrl(baseInput);\n\n\tif (isAbsoluteUrl(normalizedConfiguredBaseUrl)) {\n\t\treturn normalizedConfiguredBaseUrl;\n\t}\n\n\tconst browserOrigin = getBrowserOrigin();\n\tif (browserOrigin) {\n\t\treturn stripTrailingSlashes(\n\t\t\tnew URL(normalizedConfiguredBaseUrl, browserOrigin).toString(),\n\t\t);\n\t}\n\n\tif (resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl)) {\n\t\t// Direct upstream without proxy path: origin only (no /api/auth) when\n\t\t// the configured base was relative — server-side absolute upstream.\n\t\tconst upstream = resolveAthenaAuthUpstreamUrl(rawUpstreamUrl);\n\t\treturn stripTrailingSlashes(\n\t\t\tnew URL(ATHENA_AUTH_PATH, `${upstream}/`).toString(),\n\t\t);\n\t}\n\n\treturn stripTrailingSlashes(\n\t\tnew URL(normalizedConfiguredBaseUrl, LOCAL_DEV_ORIGIN).toString(),\n\t);\n}\n\n/**\n * Build an absolute Athena Auth request URL for a path under the client base.\n *\n * Resolves at **call time** (reads env when `rawBaseUrl` is omitted) so module\n * load order does not freeze a stale URL.\n *\n * @param path - Path relative to the auth base (leading slashes stripped)\n * @param rawBaseUrl - Optional base string or env map\n *\n * @example\n * ```ts\n * resolveAthenaAuthRequestUrl('get-session', 'https://auth.example.com')\n * // => 'https://auth.example.com/api/auth/get-session'\n * ```\n */\nexport function resolveAthenaAuthRequestUrl(\n\tpath: string,\n\trawBaseUrl?: string | EnvLike,\n): string {\n\tconst normalizedPath = path.replace(LEADING_SLASHES_REGEX, \"\");\n\tconst base = resolveAthenaAuthClientBaseUrl(rawBaseUrl);\n\treturn new URL(normalizedPath, `${base}/`).toString();\n}\n\n/** Relative auth path for email verification (`GET /verify-email`). */\nexport const ATHENA_AUTH_VERIFY_EMAIL_PATH = \"verify-email\";\n\n/**\n * Relative segment for session lookup (`GET /get-session`).\n * Prefer with {@link resolveAthenaAuthRequestUrl} when `base` already ends in `/api/auth`.\n */\nexport const ATHENA_AUTH_GET_SESSION_PATH = \"get-session\";\n\n/**\n * Absolute app/proxy path for session lookup.\n * Use with `new URL(ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH, appOrigin)` when\n * `baseUrl` is the **app origin** (e.g. `https://app.example.com`), not the auth client base.\n */\nexport const ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH = `${ATHENA_AUTH_PATH}/get-session`;\n\n/**\n * @deprecated Alias of {@link ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH} for drop-in\n * replacement of app-local `AUTH_SESSION_PATH` constants. Prefer the `ATHENA_` name.\n */\nexport const AUTH_SESSION_PATH = ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH;\n\n/**\n * Query param that forces Athena Auth / Better Auth style session handlers to\n * skip cookie cache and re-read the live session cookie.\n */\nexport const ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM =\n\t\"disableCookieCache\";\n\n/**\n * @deprecated Alias of {@link ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM}.\n */\nexport const DISABLE_COOKIE_CACHE_QUERY_PARAM =\n\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM;\n\n/** Value paired with {@link ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM}. */\nexport const ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE = \"true\";\n\n/**\n * @deprecated Alias of {@link ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE}.\n */\nexport const DISABLE_COOKIE_CACHE_QUERY_VALUE =\n\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE;\n\n/**\n * Optional request/response header some apps use to pass serialized session\n * payload between edge middleware and the app (not set by the SDK itself).\n */\nexport const ATHENA_SESSION_DATA_HEADER = \"x-session-data\";\n\n/**\n * @deprecated Alias of {@link ATHENA_SESSION_DATA_HEADER}.\n */\nexport const SESSION_DATA_HEADER = ATHENA_SESSION_DATA_HEADER;\n\n/**\n * Absolute callback URL for email verification.\n *\n * Equivalent to `resolveAthenaAuthRequestUrl(\"verify-email\")` — use this in\n * sign-up / send-verification payloads as `callbackURL` instead of a local\n * wrapper around Auth UI `base-url` helpers.\n *\n * @param rawBaseUrl - Optional base string or env map (defaults to process env)\n * @returns e.g. `https://auth.example.com/api/auth/verify-email`\n *\n * @example\n * ```ts\n * import { resolveEmailVerificationCallbackUrl } from \"@xylex-group/athena/utils\"\n *\n * await client.auth.signUp.email({\n *   email,\n *   password,\n *   name,\n *   callbackURL: resolveEmailVerificationCallbackUrl(),\n * })\n * ```\n */\nexport function resolveEmailVerificationCallbackUrl(\n\trawBaseUrl?: string | EnvLike,\n): string {\n\treturn resolveAthenaAuthRequestUrl(ATHENA_AUTH_VERIFY_EMAIL_PATH, rawBaseUrl);\n}\n\n/**\n * Build a same-origin (or absolute) **fresh** get-session URL.\n *\n * Appends `disableCookieCache=true` so middleware / RSC session probes do not\n * reuse a stale cookie-cache entry.\n *\n * @param baseUrl - App origin (`https://app.example.com`) or any base accepted by\n *   the `URL` constructor. Resolves {@link ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH}\n *   (`/api/auth/get-session`) against that base.\n * @returns URL such as `https://app.example.com/api/auth/get-session?disableCookieCache=true`\n *\n * @example\n * ```ts\n * import { createFreshSessionLookupUrl } from \"@xylex-group/athena/utils\"\n *\n * const url = createFreshSessionLookupUrl(\"https://app.example.com\")\n * await fetch(url, { headers: { cookie: requestHeaders.get(\"cookie\") ?? \"\" } })\n * ```\n *\n * For auth-client base URLs that already include `/api/auth`, prefer:\n * `resolveAthenaAuthRequestUrl(\"get-session\", authBase) + \"?disableCookieCache=true\"`\n * or pass the **app** origin into this helper when you proxy `/api/auth/*` locally.\n */\nexport function createFreshSessionLookupUrl(baseUrl: string | URL): URL {\n\tconst url = new URL(ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH, baseUrl);\n\turl.searchParams.set(\n\t\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM,\n\t\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE,\n\t);\n\treturn url;\n}\n","import type {\n  AthenaRuntimeDiscoveryAuthAvailability,\n  AthenaRuntimeDiscoveryDocument,\n} from \"../../gateway/discovery-types.ts\";\nimport {\n  ATHENA_NEXT_RUNTIME_PROTOCOL,\n  ATHENA_RUNTIME_PROTOCOL,\n} from \"../../gateway/protocol.ts\";\nimport type { AthenaServerRuntime } from \"./types.ts\";\n\nexport function serializeAthenaRuntimeDiscoveryDocument(\n  runtime: AthenaServerRuntime,\n): AthenaRuntimeDiscoveryDocument {\n  const caps = runtime.capabilities;\n  return {\n    athena: true,\n    capabilities: {\n      auth: caps.auth,\n      delete: true,\n      fetch: true,\n      insert: true,\n      models: caps.modelEnforcement,\n      nestedRelations: caps.nestedRelations,\n      policy: caps.policies,\n      rawSql: caps.rawSql,\n      rpc: caps.rpc,\n      update: true,\n    },\n    protocol: {\n      major: ATHENA_RUNTIME_PROTOCOL.major,\n      minor: ATHENA_RUNTIME_PROTOCOL.minor,\n    },\n    runtime: \"local\",\n    runtimeImplementation: \"athena-js\",\n  };\n}\n\n/** The default Athena Next data endpoint. */\nexport const DEFAULT_ATHENA_NEXT_DATA_ENDPOINT = \"/api/athena\";\n\n/** The default Athena Next auth endpoint. */\nexport const DEFAULT_ATHENA_NEXT_AUTH_ENDPOINT = \"/api/auth\";\n\n/** The default Athena Next storage endpoint. */\nexport const DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT = \"/api/athena/storage\";\n\n/** The default Athena Next billing endpoint. */\nexport const DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT = \"/api/athena/billing\";\nexport const DEFAULT_ATHENA_NEXT_BILLING_WEBHOOK_ENDPOINT =\n  \"/api/athena/billing/webhook\";\n\nfunction advertiseHttpTransport(\n  path: string,\n  origin?: \"same-origin\" | \"remote\",\n): {\n  credentials: \"none\" | \"same-origin\";\n  kind: \"http\";\n  origin: \"same-origin\" | \"remote\";\n  path: string;\n} {\n  const resolvedOrigin =\n    origin ?? (/^https?:\\/\\//i.test(path) ? \"remote\" : \"same-origin\");\n  return {\n    credentials: resolvedOrigin === \"remote\" ? \"none\" : \"same-origin\",\n    kind: \"http\",\n    origin: resolvedOrigin,\n    path,\n  };\n}\n\nexport function serializeAthenaNextRuntimeDiscoveryDocument(input: {\n  auth: AthenaRuntimeDiscoveryAuthAvailability;\n  dataRuntime: AthenaServerRuntime;\n  endpoints: {\n    auth?: string;\n    billing?: string;\n    data?: string;\n    storage?: string;\n  };\n}): AthenaRuntimeDiscoveryDocument {\n  const base = serializeAthenaRuntimeDiscoveryDocument(input.dataRuntime);\n  const dataPath = input.endpoints.data ?? DEFAULT_ATHENA_NEXT_DATA_ENDPOINT;\n  const authPath =\n    input.auth.available && input.endpoints.auth\n      ? input.endpoints.auth\n      : undefined;\n  return {\n    ...base,\n    capabilities: {\n      ...base.capabilities,\n      auth: input.auth.available\n        ? {\n          available: true,\n          ...(input.auth.transport\n            ? { transport: input.auth.transport }\n            : {}),\n        }\n        : { available: false },\n      billing: Boolean(input.endpoints.billing),\n      billingIngress: input.endpoints.billing ? { webhook: true } : undefined,\n      data: true,\n      storage: Boolean(input.endpoints.storage),\n    },\n    endpoints: {\n      data: dataPath,\n      ...(input.endpoints.storage ? { storage: input.endpoints.storage } : {}),\n      ...(input.endpoints.billing ? { billing: input.endpoints.billing } : {}),\n      ...(authPath ? { auth: authPath } : {}),\n    },\n    protocol: {\n      major: ATHENA_NEXT_RUNTIME_PROTOCOL.major,\n      minor: ATHENA_NEXT_RUNTIME_PROTOCOL.minor,\n    },\n    runtime: \"next-local\",\n    transports: {\n      data: advertiseHttpTransport(dataPath),\n      ...(authPath\n        ? {\n          auth: advertiseHttpTransport(authPath, input.auth.transport),\n        }\n        : {}),\n      ...(input.endpoints.storage\n        ? { storage: advertiseHttpTransport(input.endpoints.storage) }\n        : {}),\n      ...(input.endpoints.billing\n        ? { billing: advertiseHttpTransport(input.endpoints.billing) }\n        : {}),\n    },\n  };\n}\n","export function resolveAthenaHttpUrl(input: {\n\tbasePath: string;\n\troot?: string;\n}): string {\n\tconst value = input.basePath.trim();\n\tif (/^https?:\\/\\//i.test(value)) {\n\t\treturn value;\n\t}\n\tconst prefixed = value.startsWith(\"/\") ? value : `/${value}`;\n\tconst root = input.root?.replace(/\\/+$/, \"\") ?? \"\";\n\tif (root) {\n\t\tif (/^https?:\\/\\//i.test(root)) {\n\t\t\treturn `${root}${prefixed}`;\n\t\t}\n\t\treturn `${root}${prefixed}`;\n\t}\n\tconst origin =\n\t\t(globalThis as { location?: { origin?: string } }).location?.origin ??\n\t\t(globalThis as { window?: { location?: { origin?: string } } }).window\n\t\t\t?.location?.origin;\n\tif (origin) {\n\t\treturn `${origin.replace(/\\/+$/, \"\")}${prefixed}`;\n\t}\n\treturn `http://localhost${prefixed}`;\n}\n","import type { AthenaTransportInvocationIR } from \"../invocation.ts\";\nimport type { AthenaHttpRequestIR, AthenaHttpTransportIR } from \"./ir.ts\";\nimport { resolveAthenaHttpUrl } from \"./url.ts\";\n\n/** Storage/Billing RPC envelope. Auth and Data keep domain HTTP compilers. */\nexport function compileAthenaRpcHttpRequest(input: {\n\theaders?: Record<string, string>;\n\tinvocation: AthenaTransportInvocationIR;\n\troot?: string;\n\ttransport: AthenaHttpTransportIR;\n}): AthenaHttpRequestIR {\n\tconst url = resolveAthenaHttpUrl({\n\t\tbasePath: input.transport.basePath,\n\t\troot: input.root,\n\t});\n\tconst credentials: RequestCredentials =\n\t\tinput.transport.credentials === \"same-origin\" ? \"same-origin\" : \"omit\";\n\treturn {\n\t\tbody: JSON.stringify({\n\t\t\toperation: input.invocation.operation,\n\t\t\tpayload: input.invocation.payload,\n\t\t}),\n\t\tcredentials,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t...input.headers,\n\t\t},\n\t\tmethod: \"POST\",\n\t\turl,\n\t};\n}\n\nexport function compileAthenaHttpRequest(\n\tinput: Parameters<typeof compileAthenaRpcHttpRequest>[0],\n): AthenaHttpRequestIR {\n\treturn compileAthenaRpcHttpRequest(input);\n}\n","import type {\n\tAthenaTransportErrorEnvelope,\n\tAthenaTransportResult,\n} from \"../error-envelope.ts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\tif (value && typeof value === \"object\") {\n\t\treturn value as Record<string, unknown>;\n\t}\n\treturn undefined;\n}\n\nfunction unwrapSuccessData<T>(\n\trecord: Record<string, unknown> | undefined,\n\tjson: unknown,\n): T {\n\tif (record && typeof record.ok === \"boolean\") {\n\t\treturn record.data as T;\n\t}\n\treturn json as T;\n}\n\nfunction readHeader(\n\theaders: Headers | undefined,\n\tname: string,\n): string | undefined {\n\tconst value = headers?.get(name)?.trim();\n\treturn value ? value : undefined;\n}\n\nexport function parseAthenaHttpTransportResponse<T>(input: {\n\theaders?: Headers;\n\tjson: unknown;\n\tstatus: number;\n\tstatusText: string;\n}): AthenaTransportResult<T> {\n\tconst record = asRecord(input.json);\n\tconst errorRecord = asRecord(record?.error);\n\tconst ok = record?.ok !== false && input.status >= 200 && input.status < 300;\n\tif (ok) {\n\t\tconst enveloped = typeof record?.ok === \"boolean\";\n\t\treturn {\n\t\t\tdata: unwrapSuccessData<T>(record, input.json),\n\t\t\tenveloped,\n\t\t\tok: true,\n\t\t};\n\t}\n\tconst status =\n\t\ttypeof record?.status === \"number\"\n\t\t\t? record.status\n\t\t\t: typeof errorRecord?.status === \"number\"\n\t\t\t\t? errorRecord.status\n\t\t\t\t: input.status;\n\tconst code =\n\t\ttypeof errorRecord?.code === \"string\" && errorRecord.code.trim()\n\t\t\t? errorRecord.code\n\t\t\t: `ATHENA_TRANSPORT_HTTP_${status}`;\n\tconst message =\n\t\ttypeof errorRecord?.message === \"string\" && errorRecord.message.trim()\n\t\t\t? errorRecord.message\n\t\t\t: input.statusText || `transport request failed (${status})`;\n\tconst errorNumber =\n\t\ttypeof errorRecord?.errorNumber === \"number\"\n\t\t\t? errorRecord.errorNumber\n\t\t\t: undefined;\n\tconst requestId =\n\t\t(typeof errorRecord?.requestId === \"string\" && errorRecord.requestId.trim()\n\t\t\t? errorRecord.requestId.trim()\n\t\t\t: undefined) ?? readHeader(input.headers, \"x-athena-request-id\");\n\tconst retryable =\n\t\ttypeof errorRecord?.retryable === \"boolean\"\n\t\t\t? errorRecord.retryable\n\t\t\t: undefined;\n\tconst envelope: AthenaTransportErrorEnvelope = {\n\t\tcode,\n\t\tdetails: errorRecord ?? record ?? input.json,\n\t\t...(errorNumber !== undefined ? { errorNumber } : {}),\n\t\tmessage,\n\t\t...(requestId !== undefined ? { requestId } : {}),\n\t\t...(retryable !== undefined ? { retryable } : {}),\n\t\tstatus,\n\t};\n\treturn { error: envelope, ok: false };\n}\n","import type { AthenaTransportResult } from \"../error-envelope.ts\";\nimport type { AthenaTransportInvocationIR } from \"../invocation.ts\";\nimport type { AthenaHttpTransportIR } from \"./ir.ts\";\nimport { compileAthenaRpcHttpRequest } from \"./request-compiler.ts\";\nimport { parseAthenaHttpTransportResponse } from \"./response-parser.ts\";\n\nexport async function executeAthenaHttpTransport<T>(input: {\n\tfetch?: typeof fetch;\n\theaders?: Record<string, string>;\n\tinvocation: AthenaTransportInvocationIR;\n\troot?: string;\n\ttransport: AthenaHttpTransportIR;\n}): Promise<AthenaTransportResult<T>> {\n\tconst fetchImpl = input.fetch ?? fetch;\n\tconst request = compileAthenaRpcHttpRequest({\n\t\theaders: input.headers,\n\t\tinvocation: input.invocation,\n\t\troot: input.root,\n\t\ttransport: input.transport,\n\t});\n\tconst response = await fetchImpl(request.url, {\n\t\tbody: request.body,\n\t\tcredentials: request.credentials,\n\t\theaders: request.headers,\n\t\tmethod: request.method,\n\t});\n\tconst json = await response.json().catch(() => undefined);\n\treturn parseAthenaHttpTransportResponse<T>({\n\t\theaders: response.headers,\n\t\tjson,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t});\n}\n\nexport function createAthenaHttpTransportExecutor(options?: {\n\tfetch?: typeof fetch;\n\theaders?: Record<string, string>;\n\troot?: string;\n}): {\n\texecute<T>(input: {\n\t\tinvocation: AthenaTransportInvocationIR;\n\t\ttransport: AthenaHttpTransportIR;\n\t}): Promise<AthenaTransportResult<T>>;\n} {\n\treturn {\n\t\texecute<T>(input: {\n\t\t\tinvocation: AthenaTransportInvocationIR;\n\t\t\ttransport: AthenaHttpTransportIR;\n\t\t}) {\n\t\t\treturn executeAthenaHttpTransport<T>({\n\t\t\t\tfetch: options?.fetch,\n\t\t\t\theaders: options?.headers,\n\t\t\t\tinvocation: input.invocation,\n\t\t\t\troot: options?.root,\n\t\t\t\ttransport: input.transport,\n\t\t\t});\n\t\t},\n\t};\n}\n","export type AthenaHttpTransportDomain = \"storage\" | \"billing\" | \"data\" | \"auth\";\n\nexport type AthenaHttpTransportOrigin = \"same-origin\" | \"remote\" | \"absolute\";\n\nexport type AthenaHttpTransportCredentials = \"same-origin\" | \"none\";\n\nexport interface AthenaHttpTransportIR {\n\tbasePath: string;\n\tcredentials: AthenaHttpTransportCredentials;\n\tdomain: AthenaHttpTransportDomain;\n\tencoding: \"json\";\n\tkind: \"http\";\n\torigin: AthenaHttpTransportOrigin;\n\tversion: 1;\n}\n\nconst HTTP_TRANSPORT_DOMAINS: readonly AthenaHttpTransportDomain[] = [\n\t\"storage\",\n\t\"billing\",\n\t\"data\",\n\t\"auth\",\n];\n\nconst TOPOLOGY_SLOTS: readonly AthenaHttpTransportDomain[] = [\n\t\"data\",\n\t\"auth\",\n\t\"storage\",\n\t\"billing\",\n];\n\nexport function isAthenaHttpTransportDomain(\n\tvalue: string,\n): value is AthenaHttpTransportDomain {\n\treturn (HTTP_TRANSPORT_DOMAINS as readonly string[]).includes(value);\n}\n\nexport function createAthenaHttpTransportIR(input: {\n\tbasePath: string;\n\tcredentials?: AthenaHttpTransportCredentials;\n\tdomain: string;\n\torigin?: string;\n}): AthenaHttpTransportIR {\n\tif (typeof input.basePath !== \"string\" || !input.basePath.trim()) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.basePath is required\");\n\t}\n\tif (!isAthenaHttpTransportDomain(input.domain)) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.domain is invalid\");\n\t}\n\tconst scheme = schemeOf(input.basePath);\n\tif (scheme && scheme !== \"http\" && scheme !== \"https\") {\n\t\tthrow new Error(\"AthenaHttpTransportIR.basePath scheme is unsupported\");\n\t}\n\tif (isMalformedHttpUrl(input.basePath)) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.basePath is not a valid HTTP URL\");\n\t}\n\tconst origin = originClass(input.origin, input.basePath);\n\tif (\n\t\torigin === \"same-origin\" &&\n\t\tisAbsoluteHttpUrl(input.basePath) &&\n\t\tisMalformedHttpUrl(input.basePath)\n\t) {\n\t\tthrow new Error(\n\t\t\t\"AthenaHttpTransportIR.origin same-origin cannot use a malformed absolute URL\",\n\t\t);\n\t}\n\tconst credentials = credentialsFor(input.credentials, origin);\n\treturn {\n\t\tbasePath: input.basePath,\n\t\tcredentials,\n\t\tdomain: input.domain,\n\t\tencoding: \"json\",\n\t\tkind: \"http\",\n\t\torigin,\n\t\tversion: 1,\n\t};\n}\n\nexport function validateAthenaTransportIR(ir: unknown): AthenaHttpTransportIR {\n\tif (!ir || typeof ir !== \"object\") {\n\t\tthrow new Error(\"AthenaHttpTransportIR is required\");\n\t}\n\tconst record = ir as Record<string, unknown>;\n\tif (record.kind !== \"http\") {\n\t\tthrow new Error(\"AthenaHttpTransportIR.kind must be http\");\n\t}\n\tif (record.version !== 1) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.version must be 1\");\n\t}\n\tif (\n\t\ttypeof record.domain !== \"string\" ||\n\t\t!isAthenaHttpTransportDomain(record.domain)\n\t) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.domain is invalid\");\n\t}\n\tif (typeof record.basePath !== \"string\" || !record.basePath) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.basePath is required\");\n\t}\n\tif (\n\t\trecord.origin !== \"same-origin\" &&\n\t\trecord.origin !== \"remote\" &&\n\t\trecord.origin !== \"absolute\"\n\t) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.origin is invalid\");\n\t}\n\tif (record.credentials !== \"same-origin\" && record.credentials !== \"none\") {\n\t\tthrow new Error(\"AthenaHttpTransportIR.credentials is invalid\");\n\t}\n\tif (record.encoding !== \"json\") {\n\t\tthrow new Error(\"AthenaHttpTransportIR.encoding is invalid\");\n\t}\n\tif (record.origin !== \"same-origin\" && record.credentials === \"same-origin\") {\n\t\tthrow new Error(\n\t\t\t\"AthenaHttpTransportIR.credentials same-origin requires same-origin\",\n\t\t);\n\t}\n\tconst slot = slotFromBasePath(record.basePath);\n\tif (slot && slot !== record.domain) {\n\t\tthrow new Error(\n\t\t\t\"AthenaHttpTransportIR.domain does not match topology slot\",\n\t\t);\n\t}\n\treturn record as unknown as AthenaHttpTransportIR;\n}\n\nexport function validateAthenaRuntimeTopologyIR(value: unknown): void {\n\tif (value == null) {\n\t\treturn;\n\t}\n\tif (typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow new Error(\"AthenaRuntimeTopologyIR is invalid\");\n\t}\n\tconst transports = (value as { transports?: unknown }).transports;\n\tif (transports == null) {\n\t\treturn;\n\t}\n\tif (typeof transports !== \"object\" || Array.isArray(transports)) {\n\t\tthrow new Error(\"AthenaRuntimeTopologyIR.transports is invalid\");\n\t}\n\tconst slots = transports as Record<string, unknown>;\n\tfor (const slot of TOPOLOGY_SLOTS) {\n\t\tconst entry = slots[slot];\n\t\tif (entry == null) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof entry !== \"object\" || Array.isArray(entry)) {\n\t\t\tthrow new Error(`${slot} transport descriptor is invalid`);\n\t\t}\n\t\tconst domain = (entry as { domain?: unknown }).domain;\n\t\tif (typeof domain === \"string\" && domain !== slot) {\n\t\t\tthrow new Error(`${slot} transport domain does not match topology slot`);\n\t\t}\n\t}\n}\n\nexport {\n\ttype AthenaHttpExecutorOptions,\n\tcreateAthenaHttpExecutor,\n} from \"../execution/http-executor.ts\";\nexport { joinAthenaHttpPath } from \"./join-path.ts\";\n\nfunction originClass(\n\torigin: string | undefined,\n\tbasePath: string,\n): AthenaHttpTransportOrigin {\n\tif (origin === \"same-origin\") {\n\t\tif (isMalformedHttpUrl(basePath)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"AthenaHttpTransportIR.origin same-origin cannot use a malformed absolute URL\",\n\t\t\t);\n\t\t}\n\t\treturn \"same-origin\";\n\t}\n\tif (origin === \"remote\" || origin === \"absolute\") {\n\t\treturn origin;\n\t}\n\tif (isAbsoluteHttpUrl(basePath)) {\n\t\treturn \"remote\";\n\t}\n\tif (origin && /^https?:\\/\\//i.test(origin)) {\n\t\treturn \"absolute\";\n\t}\n\treturn \"same-origin\";\n}\n\nfunction credentialsFor(\n\tcredentials: AthenaHttpTransportCredentials | undefined,\n\torigin: AthenaHttpTransportOrigin,\n): AthenaHttpTransportCredentials {\n\tif (credentials === \"same-origin\" || credentials === \"none\") {\n\t\tif (origin !== \"same-origin\" && credentials === \"same-origin\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"AthenaHttpTransportIR.credentials same-origin requires same-origin\",\n\t\t\t);\n\t\t}\n\t\treturn credentials;\n\t}\n\tif (credentials != null) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.credentials is invalid\");\n\t}\n\treturn origin === \"same-origin\" ? \"same-origin\" : \"none\";\n}\n\nfunction schemeOf(basePath: string): string | undefined {\n\tconst match = /^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(basePath);\n\treturn match?.[1]?.toLowerCase();\n}\n\nfunction isAbsoluteHttpUrl(basePath: string): boolean {\n\treturn /^https?:\\/\\//i.test(basePath);\n}\n\nfunction isMalformedHttpUrl(basePath: string): boolean {\n\tif (!isAbsoluteHttpUrl(basePath)) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst url = new URL(basePath);\n\t\treturn !url.hostname;\n\t} catch {\n\t\treturn true;\n\t}\n}\n\nfunction slotFromBasePath(\n\tbasePath: string,\n): AthenaHttpTransportDomain | undefined {\n\tlet path = basePath;\n\tif (isAbsoluteHttpUrl(basePath)) {\n\t\ttry {\n\t\t\tpath = new URL(basePath).pathname;\n\t\t} catch {\n\t\t\tpath = basePath;\n\t\t}\n\t}\n\tif (path.includes(\"/storage\")) {\n\t\treturn \"storage\";\n\t}\n\tif (path.includes(\"/billing\")) {\n\t\treturn \"billing\";\n\t}\n\tif (path.includes(\"/auth\")) {\n\t\treturn \"auth\";\n\t}\n\treturn undefined;\n}\n","import { DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT } from \"../../runtime/data/discovery-document.ts\";\nimport { executeAthenaHttpTransport } from \"../../runtime/transport/http/client.ts\";\nimport type { AthenaHttpTransportIR } from \"../../runtime/transport/http/ir.ts\";\nimport { createAthenaHttpTransportIR } from \"../../runtime/transport/http.ts\";\nimport type { AthenaRuntimeTopologyIR } from \"../../runtime/transport/topology.ts\";\nimport { AthenaBillingError } from \"../errors.ts\";\nimport type { BillingExecutionTarget } from \"../types.ts\";\nimport type { BillingCapabilities } from \"./capabilities.ts\";\nimport { billingErrorFromTransport } from \"./http-error.ts\";\nimport type {\n\tBillingCatalogPort,\n\tBillingPricePort,\n\tBillingProductPort,\n\tBillingSelfPort,\n} from \"./types.ts\";\n\nexport function resolveBrowserBillingEndpoint(endpoints?: {\n\tbilling?: string;\n}): string {\n\tconst advertised = endpoints?.billing?.trim();\n\tif (!advertised) {\n\t\treturn DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT;\n\t}\n\tif (/^https?:\\/\\//i.test(advertised)) {\n\t\treturn DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT;\n\t}\n\treturn advertised.startsWith(\"/\")\n\t\t? advertised\n\t\t: DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT;\n}\n\nfunction billingHttpSuccessData(\n\tbody: unknown,\n\tenveloped: boolean | undefined,\n): unknown {\n\tif (enveloped === false) {\n\t\treturn undefined;\n\t}\n\tif (body === null || Array.isArray(body)) {\n\t\treturn body;\n\t}\n\tif (body && typeof body === \"object\") {\n\t\tconst leftover = body as { data?: unknown; ok?: unknown };\n\t\tif (typeof leftover.ok === \"boolean\") {\n\t\t\treturn \"data\" in leftover ? leftover.data : undefined;\n\t\t}\n\t}\n\treturn body;\n}\n\nfunction asExecutorTransport(\n\tir: ReturnType<typeof createAthenaHttpTransportIR>,\n): AthenaHttpTransportIR {\n\treturn {\n\t\tbasePath: ir.basePath,\n\t\tcredentials: ir.credentials,\n\t\tdomain: ir.domain,\n\t\tencoding: \"json\",\n\t\tkind: \"http\",\n\t\torigin: ir.origin === \"absolute\" ? \"remote\" : ir.origin,\n\t};\n}\n\nfunction sameOriginBillingTransport(\n\tadvertised: AthenaHttpTransportIR,\n): AthenaHttpTransportIR | undefined {\n\tif (advertised.origin !== \"same-origin\") {\n\t\treturn undefined;\n\t}\n\tif (/^https?:\\/\\//i.test(advertised.basePath)) {\n\t\treturn undefined;\n\t}\n\treturn advertised;\n}\n\ntype BrowserBillingTransportOptions = {\n\tendpoints?: { billing?: string };\n\tresolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n\ttopology?: AthenaRuntimeTopologyIR;\n};\n\nasync function resolveBillingTransport(\n\toptions?: BrowserBillingTransportOptions,\n): Promise<AthenaHttpTransportIR | undefined> {\n\tconst explicit = options?.endpoints?.billing?.trim();\n\tif (explicit) {\n\t\treturn asExecutorTransport(\n\t\t\tcreateAthenaHttpTransportIR({\n\t\t\t\tbasePath: resolveBrowserBillingEndpoint({ billing: explicit }),\n\t\t\t\tdomain: \"billing\",\n\t\t\t\torigin: \"same-origin\",\n\t\t\t}),\n\t\t);\n\t}\n\tconst topology =\n\t\toptions?.topology ??\n\t\t(options?.resolveTopology ? await options.resolveTopology() : undefined);\n\tif (topology) {\n\t\tconst advertised = topology.transports.billing;\n\t\tif (advertised?.kind === \"http\") {\n\t\t\treturn (\n\t\t\t\tsameOriginBillingTransport(advertised) ??\n\t\t\t\tasExecutorTransport(\n\t\t\t\t\tcreateAthenaHttpTransportIR({\n\t\t\t\t\t\tbasePath: DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT,\n\t\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\t\torigin: \"same-origin\",\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t}\n\treturn asExecutorTransport(\n\t\tcreateAthenaHttpTransportIR({\n\t\t\tbasePath: DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT,\n\t\t\tdomain: \"billing\",\n\t\t\torigin: \"same-origin\",\n\t\t}),\n\t);\n}\n\n/** Browser billing client: catalog, subject-self, and capability probe only. */\nexport type AthenaBrowserBillingTransport = {\n\tcatalog: BillingCatalogPort;\n\tgetCapabilities: (\n\t\tinput: BillingExecutionTarget,\n\t) => Promise<BillingCapabilities>;\n\tself: BillingSelfPort;\n};\n\nexport function createBrowserBillingTransport(options?: {\n\tbaseUrl?: string;\n\tendpoints?: { billing?: string };\n\tfetch?: typeof fetch;\n\theaders?: Record<string, string>;\n\tresolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n\ttopology?: AthenaRuntimeTopologyIR;\n}): AthenaBrowserBillingTransport {\n\tlet pending: Promise<AthenaHttpTransportIR | undefined> | undefined;\n\tconst loadTransport = () => {\n\t\tpending ??= resolveBillingTransport(options);\n\t\treturn pending;\n\t};\n\n\tasync function call(operation: string, payload: unknown): Promise<unknown> {\n\t\tconst transport = await loadTransport();\n\t\tif (!transport) {\n\t\t\tthrow new AthenaBillingError({\n\t\t\t\tbody: undefined,\n\t\t\t\tcode: \"ATHENA_BILLING_PROVIDER_NOT_CONFIGURED\",\n\t\t\t\tendpoint: \"\",\n\t\t\t\tmessage: \"billing runtime is not configured\",\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tstatus: 503,\n\t\t\t});\n\t\t}\n\t\tconst result = await executeAthenaHttpTransport({\n\t\t\tfetch: options?.fetch ?? fetch,\n\t\t\theaders: options?.headers,\n\t\t\tinvocation: {\n\t\t\t\tdomain: \"billing\",\n\t\t\t\toperation,\n\t\t\t\tpayload,\n\t\t\t},\n\t\t\troot: options?.baseUrl,\n\t\t\ttransport,\n\t\t});\n\t\tif (!result.ok) {\n\t\t\tconst details = result.error.details;\n\t\t\tconst envelope =\n\t\t\t\tdetails && typeof details === \"object\"\n\t\t\t\t\t? (details as Record<string, unknown>)\n\t\t\t\t\t: {};\n\t\t\tconst envelopeStatus =\n\t\t\t\ttypeof envelope.status === \"number\" ? envelope.status : undefined;\n\t\t\tconst nested =\n\t\t\t\tenvelope.error && typeof envelope.error === \"object\"\n\t\t\t\t\t? (envelope.error as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\t\t\tconst rawWire =\n\t\t\t\ttypeof envelope.code === \"string\"\n\t\t\t\t\t? envelope.code\n\t\t\t\t\t: typeof nested?.code === \"string\"\n\t\t\t\t\t\t? nested.code\n\t\t\t\t\t\t: undefined;\n\t\t\tconst wireCode =\n\t\t\t\trawWire && !rawWire.startsWith(\"ATHENA_TRANSPORT_HTTP_\")\n\t\t\t\t\t? rawWire\n\t\t\t\t\t: undefined;\n\t\t\tconst transportCode = result.error.code;\n\t\t\tconst code =\n\t\t\t\twireCode ??\n\t\t\t\t(typeof transportCode === \"string\" &&\n\t\t\t\t\t!transportCode.startsWith(\"ATHENA_TRANSPORT_HTTP_\")\n\t\t\t\t\t? transportCode\n\t\t\t\t\t: undefined);\n\t\t\tthrow billingErrorFromTransport({\n\t\t\t\t...envelope,\n\t\t\t\t...(nested ?? {}),\n\t\t\t\t...(code !== undefined ? { code } : {}),\n\t\t\t\terrorNumber:\n\t\t\t\t\ttypeof nested?.errorNumber === \"number\"\n\t\t\t\t\t\t? nested.errorNumber\n\t\t\t\t\t\t: result.error.errorNumber,\n\t\t\t\tmessage: result.error.message,\n\t\t\t\tmissing: nested?.missing ?? envelope.missing,\n\t\t\t\toperation:\n\t\t\t\t\ttypeof nested?.operation === \"string\"\n\t\t\t\t\t\t? nested.operation\n\t\t\t\t\t\t: envelope.operation,\n\t\t\t\t...(envelopeStatus !== undefined ? { status: envelopeStatus } : {}),\n\t\t\t});\n\t\t}\n\t\treturn billingHttpSuccessData(result.data, result.enveloped);\n\t}\n\n\tconst self: BillingSelfPort = {\n\t\tcheckout: {\n\t\t\tcreate: (input) => call(\"self.checkout.create\", input) as never,\n\t\t\tresume: (input) => call(\"self.checkout.resume\", input) as never,\n\t\t},\n\t\tinvoices: {\n\t\t\tget: (input) => call(\"self.invoices.get\", input) as never,\n\t\t\tlist: (input) => call(\"self.invoices.list\", input) as never,\n\t\t},\n\t\tpayments: {\n\t\t\tget: (input) => call(\"self.payments.get\", input) as never,\n\t\t\tlist: (input) => call(\"self.payments.list\", input) as never,\n\t\t},\n\t\tsubscription: {\n\t\t\tcancel: (input) => call(\"self.subscription.cancel\", input) as never,\n\t\t\tenroll: (input) => call(\"self.subscription.enroll\", input) as never,\n\t\t\tget: (input) => call(\"self.subscription.get\", input) as never,\n\t\t},\n\t};\n\tconst products: BillingProductPort = {\n\t\tlist: (input) => call(\"products.list\", input) as never,\n\t};\n\tconst prices: BillingPricePort = {\n\t\tlist: (input) => call(\"prices.list\", input) as never,\n\t};\n\n\treturn {\n\t\tcatalog: { prices, products },\n\t\tgetCapabilities: (input) =>\n\t\t\tcall(\"getCapabilities\", input) as Promise<BillingCapabilities>,\n\t\tself,\n\t};\n}\n","import {\n\tATHENA_BILLING_AUTHORIZATION_DENIED,\n\tATHENA_BILLING_OPERATION_UNAVAILABLE,\n\tATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\tAthenaBillingAuthorizationError,\n\tAthenaBillingCapabilityError,\n\tAthenaBillingError,\n\tAthenaBillingProviderError,\n\tAthenaBillingProviderRequestError,\n\ttype BillingProviderErrorKind,\n\ttype BillingRetryDisposition,\n} from \"../errors.ts\";\nimport { AthenaBillingSubjectError } from \"../subject/errors.ts\";\n\nexport interface AthenaTransportErrorEnvelope {\n\tcode?: string;\n\terrorNumber?: number;\n\tkind?: string;\n\tmessage?: string;\n\tmissing?: readonly unknown[];\n\toperation?: string;\n\tprovider?: string;\n\treason?: string;\n\tretry?: string;\n\tstatus?: number;\n}\n\nconst PROVIDER_KINDS = new Set<BillingProviderErrorKind>([\n\t\"authentication\",\n\t\"authorization\",\n\t\"invalid_request\",\n\t\"not_found\",\n\t\"conflict\",\n\t\"idempotency_conflict\",\n\t\"rate_limited\",\n\t\"provider_unavailable\",\n\t\"network\",\n\t\"timeout\",\n\t\"signature_invalid\",\n\t\"unsupported_operation\",\n\t\"unsupported_currency\",\n\t\"unsupported_payment_method\",\n\t\"customer_action_required\",\n\t\"payment_declined\",\n\t\"resource_state_conflict\",\n\t\"serialization\",\n\t\"unknown\",\n]);\n\nexport function billingErrorFromTransport(\n\tenvelope: AthenaTransportErrorEnvelope | Record<string, unknown>,\n): Error {\n\tconst record = envelope as AthenaTransportErrorEnvelope;\n\tconst code = typeof record.code === \"string\" ? record.code : undefined;\n\tconst message =\n\t\ttypeof record.message === \"string\" && record.message\n\t\t\t? record.message\n\t\t\t: \"billing request failed\";\n\tconst operation =\n\t\ttypeof record.operation === \"string\" && record.operation\n\t\t\t? record.operation\n\t\t\t: \"billing\";\n\tconst status = typeof record.status === \"number\" ? record.status : undefined;\n\tconst kind = asProviderKind(record.kind);\n\n\tif (code === \"ATHENA_BILLING_NOT_FOUND\") {\n\t\treturn new AthenaBillingSubjectError({\n\t\t\tcode: \"ATHENA_BILLING_NOT_FOUND\",\n\t\t\tmessage,\n\t\t\tstatus: status ?? 404,\n\t\t});\n\t}\n\n\tif (code === ATHENA_BILLING_AUTHORIZATION_DENIED) {\n\t\tconst missing = Array.isArray(record.missing)\n\t\t\t? record.missing.map((entry) => String(entry))\n\t\t\t: [];\n\t\treturn new AthenaBillingAuthorizationError({\n\t\t\tmissing,\n\t\t\toperation,\n\t\t});\n\t}\n\n\tif (code === ATHENA_BILLING_OPERATION_UNAVAILABLE) {\n\t\treturn new AthenaBillingCapabilityError({\n\t\t\tmessage,\n\t\t\toperation,\n\t\t\treason:\n\t\t\t\ttypeof record.reason === \"string\" && record.reason\n\t\t\t\t\t? record.reason\n\t\t\t\t\t: \"unsupported_operation\",\n\t\t});\n\t}\n\n\tif (code === ATHENA_BILLING_PROVIDER_NOT_CONFIGURED) {\n\t\treturn new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage,\n\t\t});\n\t}\n\n\tif (\n\t\tcode === \"ATHENA_BILLING_WEBHOOK_SIGNATURE_INVALID\" ||\n\t\tkind === \"signature_invalid\"\n\t) {\n\t\treturn new AthenaBillingProviderRequestError({\n\t\t\tkind: \"signature_invalid\",\n\t\t\tmessage,\n\t\t\tprovider: typeof record.provider === \"string\" ? record.provider : \"mollie\",\n\t\t\tretry: asRetry(record.retry) ?? \"never\",\n\t\t\tstatus: status ?? 400,\n\t\t});\n\t}\n\n\tif (code === \"ATHENA_BILLING_PROVIDER_REQUEST\" || kind) {\n\t\treturn new AthenaBillingProviderRequestError({\n\t\t\tkind: kind ?? \"unknown\",\n\t\t\tmessage,\n\t\t\tprovider: typeof record.provider === \"string\" ? record.provider : \"mollie\",\n\t\t\tretry: asRetry(record.retry) ?? \"never\",\n\t\t\tstatus: status ?? defaultProviderRequestStatus(kind ?? \"unknown\"),\n\t\t});\n\t}\n\n\tif (\n\t\tcode === \"ATHENA_BILLING_INVALID_REQUEST\" ||\n\t\t(code && /ATHENA_BILLING_MONEY_|ATHENA_BILLING_IDEMPOTENCY/.test(code))\n\t) {\n\t\tconst error = new AthenaBillingError({\n\t\t\tbody: record,\n\t\t\tendpoint: \"\",\n\t\t\tmessage,\n\t\t\tmethod: \"POST\",\n\t\t\tstatus: status ?? 400,\n\t\t});\n\t\tObject.assign(error, { code, errorNumber: record.errorNumber });\n\t\treturn error;\n\t}\n\n\tif (!code && status === undefined) {\n\t\treturn new Error(message);\n\t}\n\n\tconst error = new AthenaBillingError({\n\t\tbody: record,\n\t\tendpoint: \"\",\n\t\tmessage,\n\t\tmethod: \"POST\",\n\t\tstatus: status ?? 500,\n\t});\n\tObject.assign(error, { code, errorNumber: record.errorNumber });\n\treturn error;\n}\n\nfunction defaultProviderRequestStatus(\n\tkind: BillingProviderErrorKind,\n): number {\n\tswitch (kind) {\n\t\tcase \"not_found\":\n\t\t\treturn 404;\n\t\tcase \"rate_limited\":\n\t\t\treturn 429;\n\t\tcase \"provider_unavailable\":\n\t\tcase \"network\":\n\t\tcase \"timeout\":\n\t\t\treturn 503;\n\t\tcase \"unknown\":\n\t\t\treturn 500;\n\t\tdefault:\n\t\t\treturn 400;\n\t}\n}\n\nfunction asProviderKind(value: unknown): BillingProviderErrorKind | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\treturn PROVIDER_KINDS.has(value as BillingProviderErrorKind)\n\t\t? (value as BillingProviderErrorKind)\n\t\t: undefined;\n}\n\nfunction asRetry(value: unknown): BillingRetryDisposition | undefined {\n\tif (\n\t\tvalue === \"never\" ||\n\t\tvalue === \"safe\" ||\n\t\tvalue === \"reconcile_first\" ||\n\t\tvalue === \"customer_action_required\"\n\t) {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n","export class AthenaBillingSubjectError extends Error {\n\treadonly code: string;\n\treadonly status: number;\n\n\tconstructor(input: { code: string; message: string; status: number }) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingSubjectError\";\n\t\tthis.code = input.code;\n\t\tthis.status = input.status;\n\t}\n}\n\nexport function billingSubjectNotFound(message = \"Billing document not found.\"): AthenaBillingSubjectError {\n\treturn new AthenaBillingSubjectError({\n\t\tcode: \"ATHENA_BILLING_NOT_FOUND\",\n\t\tmessage,\n\t\tstatus: 404,\n\t});\n}\n\nexport function isAthenaBillingSubjectError(\n\terror: unknown,\n): error is AthenaBillingSubjectError {\n\tif (error instanceof AthenaBillingSubjectError) {\n\t\treturn true;\n\t}\n\tif (error == null || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst record = error as { code?: unknown; name?: unknown; status?: unknown };\n\treturn (\n\t\trecord.code === \"ATHENA_BILLING_NOT_FOUND\" ||\n\t\trecord.name === \"AthenaBillingSubjectError\" ||\n\t\t(typeof record.code === \"string\" &&\n\t\t\trecord.code.startsWith(\"ATHENA_BILLING_SUBJECT_\") &&\n\t\t\ttypeof record.status === \"number\")\n\t);\n}\n\nexport function billingSubjectConflict(\n\tmessage = \"Billing subject binding is in conflict.\",\n): AthenaBillingSubjectError {\n\treturn new AthenaBillingSubjectError({\n\t\tcode: \"ATHENA_BILLING_SUBJECT_CONFLICT\",\n\t\tmessage,\n\t\tstatus: 409,\n\t});\n}\n","import {\n\tATHENA_BILLING_CONFIG_CONFLICT,\n\tATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n\tAthenaBillingProviderError,\n} from \"../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport type { BillingRuntimeMode } from \"../types.ts\";\nimport {\n\tdetectAthenaRuntimeEnvironment,\n\ttype AthenaRuntimeEnvironment,\n} from \"../../runtime/resolve.ts\";\n\nexport type BillingRuntimeModePreference = \"auto\" | \"local\" | \"remote\";\n\nfunction configuredProviderCount(\n\tconfigured?: BillingProviderConfigMap,\n): number {\n\tif (configured == null) {\n\t\treturn 0;\n\t}\n\treturn Object.keys(configured).filter((name) => configured[name] != null)\n\t\t.length;\n}\n\n/**\n * Auto + a configured provider selects local, even when a billing URL exists.\n * Explicit local never remotes. Explicit remote + providers is invalid.\n */\nexport function resolveBillingRuntimeMode(input: {\n\tmode?: BillingRuntimeModePreference;\n\tconfiguredProviders?: BillingProviderConfigMap;\n}): BillingRuntimeMode {\nconst hasProviders = configuredProviderCount(input.configuredProviders) > 0;\nif (input.mode === \"remote\" && hasProviders) {\n\tthrow new AthenaBillingProviderError({\n\t\tcode: ATHENA_BILLING_CONFIG_CONFLICT,\n\t\tmessage:\n\t\t\t'billing.mode=\"remote\" cannot be combined with billing.providers. Provider bindings belong to the runtime executing Billing locally.',\n\t});\n}\nif (input.mode === \"local\") {\n\treturn \"local\";\n}\nif (input.mode === \"remote\") {\n\treturn \"remote\";\n}\nreturn hasProviders ? \"local\" : \"remote\";\n}\n\nexport function assertLocalBillingRuntimeEnvironment(input?: {\nmode?: BillingRuntimeModePreference;\nconfiguredProviders?: BillingProviderConfigMap;\nenvironment?: AthenaRuntimeEnvironment;\nlocalMaterialized?: boolean;\n}): void {\nconst environment =\n\tinput?.environment ?? detectAthenaRuntimeEnvironment();\nconst resolved = resolveBillingRuntimeMode({\n\tconfiguredProviders: input?.configuredProviders,\n\tmode: input?.mode,\n});\nif (resolved !== \"local\") {\n\treturn;\n}\nif (environment === \"browser\" || environment === \"react-native\") {\n\tthrow new AthenaBillingProviderError({\n\t\tcode: ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n\t\tmessage:\n\t\t\t\"Local Billing requires a trusted server runtime and cannot run in the browser or React Native.\",\n\t});\n}\nif (!input?.localMaterialized) {\n\tthrow new AthenaBillingProviderError({\n\t\tcode: ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n\t\tmessage:\n\t\t\t\"Local Billing requires a trusted server runtime that materializes provider execution. This createClient path cannot retain remote ports.\",\n\t});\n}\n}\n","/**\n * Detect Cloudflare / HTML error pages that leak through auth proxies.\n * Auth endpoints must return JSON; HTML here is never a valid session payload.\n */\n\nexport const UPSTREAM_UNAVAILABLE_CODE = \"UPSTREAM_UNAVAILABLE\" as const;\n\nexport const UPSTREAM_UNAVAILABLE_MESSAGE =\n  \"Auth service is temporarily unavailable. Please try again.\";\n\nexport const UPSTREAM_UNAVAILABLE_HINT =\n  \"The auth worker returned an HTML error page (often Cloudflare 1101). Retry, then check Workers Logs.\";\n\nexport function isHtmlErrorPage(body: string, contentType?: string | null): boolean {\n  const type = (contentType ?? \"\").toLowerCase();\n  const sample = body.slice(0, 12_000);\n  const lower = sample.toLowerCase();\n\n  if (\n    lower.includes(\"worker threw exception\") ||\n    lower.includes(\"cf-error-code\") ||\n    lower.includes(\"error 1101\") ||\n    (lower.includes(\"cloudflare\") &&\n      (lower.includes(\"cf-error\") || lower.includes(\"ray id\")))\n  ) {\n    return true;\n  }\n\n  if (type.includes(\"text/html\") || type.includes(\"application/xhtml\")) {\n    return true;\n  }\n\n  const trimmed = sample.trimStart().slice(0, 64).toLowerCase();\n  return trimmed.startsWith(\"<!doctype html\") || trimmed.startsWith(\"<html\");\n}\n\nexport function sanitizeAuthErrorMessage(\n  message: string,\n  fallback = UPSTREAM_UNAVAILABLE_MESSAGE\n): string {\n  const trimmed = message.trim();\n  if (!trimmed) {\n    return fallback;\n  }\n\n  if (isHtmlErrorPage(trimmed)) {\n    return fallback;\n  }\n\n  return trimmed;\n}\n","/**\n * Sanitized WebAuthn ceremony diagnostics. Never include challenges,\n * credential IDs, attestation, or assertion payloads.\n */\n\nexport const PASSKEY_DISCOVERABILITY_UNKNOWN_DIAGNOSTIC =\n  \"registration: discoverability unknown → authentication: allowCredentials=[] → browser returned no assertion\";\n\nexport type PasskeyCeremonyStage =\n  | \"idle\"\n  | \"generate-register-options\"\n  | \"credentials-create\"\n  | \"verify-registration\"\n  | \"generate-authenticate-options\"\n  | \"credentials-get\"\n  | \"verify-authentication\";\n\nexport interface PasskeyDiscoverabilityDiagnosticInput {\n  allowCredentialsCount: number;\n  assertionPresent: boolean;\n  residentKey: boolean | null | undefined;\n}\n\nexport function formatPasskeyDiscoverabilityDiagnostic(\n  input: PasskeyDiscoverabilityDiagnosticInput\n): string | null {\n  const discoverabilityUnknown =\n    input.residentKey !== true && input.residentKey !== false;\n  if (\n    discoverabilityUnknown &&\n    input.allowCredentialsCount === 0 &&\n    !input.assertionPresent\n  ) {\n    return PASSKEY_DISCOVERABILITY_UNKNOWN_DIAGNOSTIC;\n  }\n  return null;\n}\n","import type { AthenaPasskeyOptionsResponse } from \"../../types.ts\";\n\n/** Internal adapter input: public wire DTO plus optional extra JSON `rpId`. */\nexport type PasskeyBrowserOptionsInput = AthenaPasskeyOptionsResponse & {\n  hints?: string[];\n  rpId?: string;\n};\n\nexport interface PasskeyBrowserRpIdFallback {\n  rpId?: string;\n}\n\ntype RecordLike = Record<string, unknown>;\n\nfunction asRecord(value: unknown): RecordLike | null {\n  return value && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as RecordLike)\n    : null;\n}\n\nfunction fromBase64Url(value: string): Uint8Array {\n  const normalized = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, \"=\");\n  const binary = atob(padded);\n  const bytes = new Uint8Array(binary.length);\n  for (let index = 0; index < binary.length; index++) {\n    bytes[index] = binary.charCodeAt(index);\n  }\n  return bytes;\n}\n\nfunction toExactArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n  const buffer = new ArrayBuffer(bytes.byteLength);\n  new Uint8Array(buffer).set(bytes);\n  return buffer;\n}\n\nfunction decodeBufferSource(value: unknown): ArrayBuffer {\n  if (typeof value !== \"string\" || !value.trim()) {\n    return new ArrayBuffer(0);\n  }\n  try {\n    return toExactArrayBuffer(fromBase64Url(value));\n  } catch {\n    return toExactArrayBuffer(new TextEncoder().encode(value));\n  }\n}\n\nfunction trimmedString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\n/**\n * Server RP ID precedence (PASSKEY-I5): options.rpId → options.rp.id → explicit fallback.\n * Never invent `window.location.hostname` as an RP ID.\n */\nexport function resolvePasskeyRpId(\n  options: PasskeyBrowserOptionsInput | RecordLike,\n  fallback?: PasskeyBrowserRpIdFallback\n): string | undefined {\n  const topLevel = trimmedString(options.rpId);\n  if (topLevel) {\n    return topLevel;\n  }\n  const rp = asRecord(options.rp);\n  const fromRp = trimmedString(rp?.id);\n  if (fromRp) {\n    return fromRp;\n  }\n  return trimmedString(fallback?.rpId);\n}\n\nfunction fallbackRpDisplayName(): string {\n  if (\n    typeof globalThis !== \"undefined\" &&\n    \"window\" in globalThis &&\n    globalThis.window &&\n    typeof globalThis.window.location?.hostname === \"string\" &&\n    globalThis.window.location.hostname\n  ) {\n    return globalThis.window.location.hostname;\n  }\n  return \"Athena Auth\";\n}\n\nfunction mapDescriptors(\n  value: unknown\n): PublicKeyCredentialDescriptor[] | undefined {\n  if (!Array.isArray(value)) {\n    return undefined;\n  }\n  return value\n    .map((entry) => asRecord(entry))\n    .filter((entry): entry is RecordLike => !!entry)\n    .map((entry) => ({\n      ...entry,\n      id: decodeBufferSource(entry.id),\n      type:\n        typeof entry.type === \"string\"\n          ? (entry.type as PublicKeyCredentialType)\n          : \"public-key\",\n    })) as PublicKeyCredentialDescriptor[];\n}\n\nexport function toPublicKeyCredentialCreationOptions(\n  options: PasskeyBrowserOptionsInput | RecordLike,\n  fallback?: PasskeyBrowserRpIdFallback\n): PublicKeyCredentialCreationOptions {\n  const user = asRecord(options.user);\n  const rpSource = asRecord(options.rp);\n  const userId = decodeBufferSource(user?.id);\n  const challenge = decodeBufferSource(options.challenge);\n  const rpId = resolvePasskeyRpId(options, fallback);\n\n  const mapped: PublicKeyCredentialCreationOptions & { hints?: string[] } = {\n    attestation:\n      typeof options.attestation === \"string\"\n        ? (options.attestation as AttestationConveyancePreference)\n        : undefined,\n    authenticatorSelection: asRecord(options.authenticatorSelection) as\n      | AuthenticatorSelectionCriteria\n      | undefined,\n    challenge,\n    excludeCredentials: mapDescriptors(options.excludeCredentials),\n    extensions: asRecord(options.extensions) as\n      | AuthenticationExtensionsClientInputs\n      | undefined,\n    pubKeyCredParams: Array.isArray(options.pubKeyCredParams)\n      ? (options.pubKeyCredParams as PublicKeyCredentialParameters[])\n      : [],\n    rp: {\n      id: rpId,\n      name: trimmedString(rpSource?.name) ?? fallbackRpDisplayName(),\n    },\n    timeout: typeof options.timeout === \"number\" ? options.timeout : undefined,\n    user: {\n      displayName:\n        trimmedString(user?.displayName) ??\n        trimmedString(user?.name) ??\n        \"User\",\n      id: userId,\n      name: trimmedString(user?.name) ?? \"user\",\n    },\n  };\n  const hints = Array.isArray(options.hints)\n    ? options.hints.filter((entry): entry is string => typeof entry === \"string\")\n    : undefined;\n  if (hints && hints.length > 0) {\n    mapped.hints = hints;\n  }\n  return mapped;\n}\n\nexport function toPublicKeyCredentialRequestOptions(\n  options: PasskeyBrowserOptionsInput | RecordLike,\n  fallback?: PasskeyBrowserRpIdFallback\n): PublicKeyCredentialRequestOptions {\n  return {\n    allowCredentials: mapDescriptors(options.allowCredentials),\n    challenge: decodeBufferSource(options.challenge),\n    extensions: asRecord(options.extensions) as\n      | AuthenticationExtensionsClientInputs\n      | undefined,\n    rpId: resolvePasskeyRpId(options, fallback),\n    timeout: typeof options.timeout === \"number\" ? options.timeout : undefined,\n    userVerification:\n      typeof options.userVerification === \"string\"\n        ? (options.userVerification as UserVerificationRequirement)\n        : undefined,\n  };\n}\n","export interface AthenaPasskeyAuthenticationWire {\n  id: string;\n  rawId: string;\n  type: \"public-key\";\n  authenticatorAttachment?: AuthenticatorAttachment;\n  response: {\n    authenticatorData: string;\n    clientDataJSON: string;\n    signature: string;\n    userHandle: string | null;\n  };\n}\n\nexport interface AthenaPasskeyRegistrationWire {\n  id: string;\n  rawId: string;\n  type: \"public-key\";\n  authenticatorAttachment?: AuthenticatorAttachment;\n  response: {\n    attestationObject: string;\n    clientDataJSON: string;\n    transports?: string[];\n  };\n  clientExtensionResults: {\n    credProps?: { rk: boolean };\n  };\n}\n\ntype GlobalWebAuthn = typeof globalThis & {\n  AuthenticatorAssertionResponse?: typeof AuthenticatorAssertionResponse;\n  AuthenticatorAttestationResponse?: typeof AuthenticatorAttestationResponse;\n  PublicKeyCredential?: typeof PublicKeyCredential;\n};\n\nfunction toBase64Url(value: ArrayBuffer | ArrayBufferView): string {\n  const bytes =\n    value instanceof ArrayBuffer\n      ? new Uint8Array(value)\n      : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\n  let binary = \"\";\n  for (const byte of bytes) {\n    binary += String.fromCharCode(byte);\n  }\n\n  return btoa(binary)\n    .replace(/\\+/g, \"-\")\n    .replace(/\\//g, \"_\")\n    .replace(/=+$/g, \"\");\n}\n\nfunction requirePublicKeyCredential(value: unknown): PublicKeyCredential {\n  const CredentialCtor = (globalThis as GlobalWebAuthn).PublicKeyCredential;\n  if (!CredentialCtor || !(value instanceof CredentialCtor)) {\n    throw new TypeError(\"Expected a PublicKeyCredential returned by WebAuthn\");\n  }\n  return value;\n}\n\nfunction authenticatorAttachmentOf(\n  credential: PublicKeyCredential\n): AuthenticatorAttachment | undefined {\n  const attachment = credential.authenticatorAttachment;\n  if (attachment === \"platform\" || attachment === \"cross-platform\") {\n    return attachment;\n  }\n  return undefined;\n}\n\nfunction registrationExtensionResults(\n  credential: PublicKeyCredential\n): AthenaPasskeyRegistrationWire[\"clientExtensionResults\"] {\n  const results = credential.getClientExtensionResults();\n  const credProps = results.credProps;\n  if (!credProps || typeof credProps !== \"object\") {\n    return {};\n  }\n  const rk = (credProps as { rk?: unknown }).rk;\n  if (typeof rk !== \"boolean\") {\n    return {};\n  }\n  return { credProps: { rk } };\n}\n\nexport function serializeRegistrationCredential(\n  value: unknown\n): AthenaPasskeyRegistrationWire {\n  const credential = requirePublicKeyCredential(value);\n  const AttestationCtor = (globalThis as GlobalWebAuthn)\n    .AuthenticatorAttestationResponse;\n  if (\n    !AttestationCtor ||\n    !(credential.response instanceof AttestationCtor)\n  ) {\n    throw new TypeError(\"Expected AuthenticatorAttestationResponse\");\n  }\n\n  const response = credential.response;\n  const transports =\n    typeof response.getTransports === \"function\"\n      ? response.getTransports()\n      : undefined;\n\n  return {\n    id: credential.id,\n    rawId: toBase64Url(credential.rawId),\n    type: \"public-key\",\n    authenticatorAttachment: authenticatorAttachmentOf(credential),\n    response: {\n      clientDataJSON: toBase64Url(response.clientDataJSON),\n      attestationObject: toBase64Url(response.attestationObject),\n      ...(Array.isArray(transports) ? { transports } : {}),\n    },\n    clientExtensionResults: registrationExtensionResults(credential),\n  };\n}\n\nexport function serializeAuthenticationCredential(\n  value: unknown\n): AthenaPasskeyAuthenticationWire {\n  const credential = requirePublicKeyCredential(value);\n  const AssertionCtor = (globalThis as GlobalWebAuthn)\n    .AuthenticatorAssertionResponse;\n  if (!AssertionCtor || !(credential.response instanceof AssertionCtor)) {\n    throw new TypeError(\"Expected AuthenticatorAssertionResponse\");\n  }\n\n  const response = credential.response;\n  return {\n    id: credential.id,\n    rawId: toBase64Url(credential.rawId),\n    type: \"public-key\",\n    authenticatorAttachment: authenticatorAttachmentOf(credential),\n    response: {\n      authenticatorData: toBase64Url(response.authenticatorData),\n      clientDataJSON: toBase64Url(response.clientDataJSON),\n      signature: toBase64Url(response.signature),\n      userHandle: response.userHandle ? toBase64Url(response.userHandle) : null,\n    },\n  };\n}\n\nexport function serializeCreatedPasskey(credential: unknown): string {\n  return JSON.stringify(serializeRegistrationCredential(credential));\n}\n\nexport function serializeAssertedPasskey(credential: unknown): string {\n  return JSON.stringify(serializeAuthenticationCredential(credential));\n}\n","import type { AthenaPasskeyHint } from \"../../types.ts\";\nimport { formatPasskeyDiscoverabilityDiagnostic } from \"./diagnostic.ts\";\nimport {\n  type PasskeyBrowserOptionsInput,\n  type PasskeyBrowserRpIdFallback,\n  toPublicKeyCredentialCreationOptions,\n  toPublicKeyCredentialRequestOptions,\n} from \"./options.ts\";\n\nexport {\n  serializeAssertedPasskey,\n  serializeCreatedPasskey,\n} from \"./serialize.ts\";\n\nexport type PasskeyCreationOptionsWithHints =\n  PublicKeyCredentialCreationOptions & {\n    hints?: string[];\n  };\n\ntype RecordLike = Record<string, unknown>;\n\nfunction asRecord(value: unknown): RecordLike | null {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return null;\n  }\n  return value as RecordLike;\n}\n\nfunction ensureBrowserWebAuthn(flow: string): void {\n  const nav =\n    typeof globalThis === \"object\"\n      ? (globalThis as { navigator?: { credentials?: unknown } }).navigator\n      : undefined;\n  const hasPublicKey =\n    typeof globalThis === \"object\" &&\n    \"PublicKeyCredential\" in globalThis &&\n    typeof (globalThis as { PublicKeyCredential?: unknown })\n      .PublicKeyCredential !== \"undefined\";\n  const hasWindow =\n    typeof globalThis === \"object\" &&\n    \"window\" in globalThis &&\n    (globalThis as { window?: unknown }).window != null;\n  if (!(hasWindow && nav?.credentials && hasPublicKey)) {\n    throw new Error(`${flow} requires a browser with WebAuthn support`);\n  }\n}\n\nfunction asHints(value: unknown): AthenaPasskeyHint[] | undefined {\n  if (!Array.isArray(value)) {\n    return undefined;\n  }\n  const hints = value.filter(\n    (entry): entry is AthenaPasskeyHint =>\n      entry === \"client-device\" ||\n      entry === \"security-key\" ||\n      entry === \"hybrid\",\n  );\n  return hints.length > 0 ? hints : undefined;\n}\n\n/**\n * Apply caller preferences. Hints are a UI steer. authenticatorAttachment is\n * only copied when the caller opted into an eligibility filter.\n */\nexport function applyPasskeyRegistrationOverrides(\n  options: PasskeyCreationOptionsWithHints,\n  payload: RecordLike | undefined,\n): PasskeyCreationOptionsWithHints {\n  if (!payload) {\n    return options;\n  }\n  const authenticatorAttachment = payload.authenticatorAttachment;\n  const hints = asHints(payload.hints);\n  const extensions = asRecord(\n    payload.extensions,\n  ) as AuthenticationExtensionsClientInputs | null;\n  const next: PasskeyCreationOptionsWithHints = {\n    ...options,\n    extensions: extensions\n      ? {\n        ...(options.extensions ?? {}),\n        ...extensions,\n      }\n      : options.extensions,\n  };\n  if (hints) {\n    next.hints = hints;\n  }\n  if (\n    authenticatorAttachment === \"platform\" ||\n    authenticatorAttachment === \"cross-platform\"\n  ) {\n    next.authenticatorSelection = {\n      ...(options.authenticatorSelection ?? {}),\n      authenticatorAttachment,\n    };\n  }\n  return next;\n}\n\nlet activeCredentialRequest:\n  | {\n    controller: AbortController;\n    settled: Promise<void>;\n  }\n  | undefined;\n\nfunction createAbortError(cause?: unknown): Error {\n  const error = new Error(\"The operation was aborted.\");\n  error.name = \"AbortError\";\n  if (cause !== undefined) {\n    Object.assign(error, { cause });\n  }\n  return error;\n}\n\nexport function isAlreadyPendingWebAuthnError(error: unknown): boolean {\n  if (!error || typeof error !== \"object\") {\n    return false;\n  }\n  const name = \"name\" in error ? String(error.name) : \"\";\n  const message =\n    \"message\" in error ? String(error.message).toLowerCase() : \"\";\n  return (\n    message.includes(\"request is already pending\") ||\n    (name === \"InvalidStateError\" && message.includes(\"pending\"))\n  );\n}\n\nexport function resetWebAuthnCeremonyLockForTests(): void {\n  activeCredentialRequest = undefined;\n}\n\n/**\n * At most one navigator.credentials.create/get may be owned in this browsing\n * context. Aborting the prior signal is not enough; the previous promise must\n * settle before the next native ceremony starts.\n */\nasync function withExclusiveWebAuthnCeremony<T>(\n  callerSignal: AbortSignal | undefined,\n  operate: (signal: AbortSignal) => Promise<T>,\n): Promise<T> {\n  const previous = activeCredentialRequest;\n  previous?.controller.abort();\n  if (previous) {\n    await previous.settled;\n  }\n\n  if (callerSignal?.aborted) {\n    throw createAbortError();\n  }\n\n  const controller = new AbortController();\n  const onCallerAbort = (): void => {\n    controller.abort();\n  };\n  callerSignal?.addEventListener(\"abort\", onCallerAbort);\n\n  let settle = (): void => undefined;\n  const settled = new Promise<void>((resolve) => {\n    settle = resolve;\n  });\n  const owned = { controller, settled };\n  activeCredentialRequest = owned;\n\n  try {\n    return await operate(controller.signal);\n  } catch (error) {\n    if (isAlreadyPendingWebAuthnError(error)) {\n      throw createAbortError(error);\n    }\n    throw error;\n  } finally {\n    callerSignal?.removeEventListener(\"abort\", onCallerAbort);\n    settle();\n    if (activeCredentialRequest === owned) {\n      activeCredentialRequest = undefined;\n    }\n  }\n}\n\nexport async function createPasskeyCredential(\n  publicKey: PasskeyCreationOptionsWithHints,\n  signal?: AbortSignal,\n): Promise<Credential | null> {\n  ensureBrowserWebAuthn(\"passkey.register\");\n  return withExclusiveWebAuthnCeremony(signal, (ownedSignal) =>\n    navigator.credentials.create({\n      publicKey,\n      signal: ownedSignal,\n    }),\n  );\n}\n\nexport async function getPasskeyCredential(\n  publicKey: PublicKeyCredentialRequestOptions,\n  mediation?: CredentialMediationRequirement,\n  signal?: AbortSignal,\n): Promise<Credential | null> {\n  ensureBrowserWebAuthn(\"passkey.signIn\");\n  return withExclusiveWebAuthnCeremony(signal, (ownedSignal) =>\n    navigator.credentials.get({\n      ...(mediation ? { mediation } : {}),\n      publicKey,\n      signal: ownedSignal,\n    }),\n  );\n}\n\nexport function creationOptionsFromWire(\n  options: PasskeyBrowserOptionsInput | RecordLike,\n  payload?: RecordLike,\n  fallback?: PasskeyBrowserRpIdFallback,\n): PasskeyCreationOptionsWithHints {\n  const mapped = toPublicKeyCredentialCreationOptions(\n    options,\n    fallback,\n  ) as PasskeyCreationOptionsWithHints;\n  const hints = asHints((options as RecordLike).hints);\n  if (hints) {\n    mapped.hints = hints;\n  }\n  return applyPasskeyRegistrationOverrides(mapped, payload);\n}\n\nexport function requestOptionsFromWire(\n  options: PasskeyBrowserOptionsInput | RecordLike,\n  fallback?: PasskeyBrowserRpIdFallback,\n): PublicKeyCredentialRequestOptions {\n  return toPublicKeyCredentialRequestOptions(options, fallback);\n}\n\nexport function noAssertionDiagnostic(input: {\n  allowCredentialsCount: number;\n  residentKey: boolean | null | undefined;\n}): string {\n  return (\n    formatPasskeyDiscoverabilityDiagnostic({\n      allowCredentialsCount: input.allowCredentialsCount,\n      assertionPresent: false,\n      residentKey: input.residentKey,\n    }) ?? \"browser returned no assertion\"\n  );\n}\n","import type { AthenaAuthenticatorMetadata } from \"./types.ts\";\n\n/**\n * Bundled, replaceable AAGUID catalog. Not a network Metadata Service client.\n * Keys are canonical lowercase UUID text from `normalizePasskeyAaguid`.\n */\nexport const ATHENA_AUTHENTICATOR_METADATA_CATALOG: readonly AthenaAuthenticatorMetadata[] =\n\t[\n\t\t{\n\t\t\taaguid: \"adce0002-35bc-c60a-648b-0b25b34bb543\",\n\t\t\tdisplayName: \"Chrome on Mac\",\n\t\t\tvendor: \"Google\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4\",\n\t\t\tdisplayName: \"Google Password Manager\",\n\t\t\tvendor: \"Google\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"08987058-cadc-4b81-b6e1-30de50dcbe96\",\n\t\t\tdisplayName: \"Windows Hello\",\n\t\t\tvendor: \"Microsoft\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"9ddd1817-af5a-4672-a2b9-3e3dd95000a9\",\n\t\t\tdisplayName: \"Windows Hello\",\n\t\t\tvendor: \"Microsoft\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"dd4ec289-e01d-41c9-bb89-70fa845d4bf2\",\n\t\t\tdisplayName: \"iCloud Keychain\",\n\t\t\tvendor: \"Apple\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"fbfc3007-154e-4ecc-8c0b-6e020557d7bd\",\n\t\t\tdisplayName: \"iCloud Keychain\",\n\t\t\tvendor: \"Apple\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"cc4fb84c-2424-4c94-87ba-6767112e9012\",\n\t\t\tdisplayName: \"MacBook Touch ID\",\n\t\t\tmodel: \"Touch ID\",\n\t\t\tvendor: \"Apple\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"002ebc4f-5700-4f6b-b3d1-967ae1d7eab6\",\n\t\t\tdisplayName: \"YubiKey\",\n\t\t\tvendor: \"Yubico\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"2fc0579f-8113-47ea-b116-bb5a8db9202a\",\n\t\t\tdisplayName: \"YubiKey\",\n\t\t\tvendor: \"Yubico\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"bada5566-a7aa-401f-ad96-45686a11f038\",\n\t\t\tdisplayName: \"1Password\",\n\t\t\tvendor: \"1Password\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"d548826e-79b4-db40-a3d8-11116f7e8349\",\n\t\t\tdisplayName: \"Bitwarden\",\n\t\t\tvendor: \"Bitwarden\",\n\t\t},\n\t];\n\nconst BY_AAGUID = new Map(\n\tATHENA_AUTHENTICATOR_METADATA_CATALOG.map((entry) => [entry.aaguid, entry]),\n);\n\nexport function lookupAuthenticatorMetadata(\n\taaguid: string | null | undefined,\n): AthenaAuthenticatorMetadata | undefined {\n\tif (!aaguid) {\n\t\treturn undefined;\n\t}\n\treturn BY_AAGUID.get(aaguid);\n}\n","import { lookupAuthenticatorMetadata } from \"./catalog.ts\";\nimport type {\n\tAthenaPasskeyDisplayName,\n\tAthenaPasskeyDisplayNameInput,\n} from \"./types.ts\";\n\nfunction hasText(value: string | null | undefined): value is string {\n\treturn typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction isUuidLike(value: string): boolean {\n\treturn /^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/i.test(\n\t\tvalue.trim(),\n\t);\n}\n\nfunction looksLikeCredentialId(value: string): boolean {\n\tconst trimmed = value.trim();\n\tif (isUuidLike(trimmed) && trimmed.length === 36) {\n\t\treturn true;\n\t}\n\treturn trimmed.length >= 24 && /^[A-Za-z0-9_-]+$/.test(trimmed);\n}\n\nfunction discoverabilityFromResidentKey(\n\tresidentKey: boolean | null | undefined,\n): AthenaPasskeyDisplayName[\"discoverability\"] {\n\tif (residentKey === true) {\n\t\treturn \"discoverable\";\n\t}\n\tif (residentKey === false) {\n\t\treturn \"non-discoverable\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction platformOrSecurityKey(\n\tinput: AthenaPasskeyDisplayNameInput,\n): string {\n\tconst transports = input.transports ?? [];\n\tconst hasInternal = transports.includes(\"internal\");\n\tconst hasHybrid = transports.includes(\"hybrid\");\n\tconst hasUsb = transports.includes(\"usb\") || transports.includes(\"nfc\") || transports.includes(\"ble\");\n\tif (hasInternal && !hasUsb) {\n\t\treturn \"Platform passkey\";\n\t}\n\tif (hasUsb && !hasInternal) {\n\t\treturn \"Security key\";\n\t}\n\tif (hasHybrid) {\n\t\treturn \"Synced passkey\";\n\t}\n\tif (input.deviceType === \"multiDevice\" || input.backedUp) {\n\t\treturn \"Synced passkey\";\n\t}\n\treturn \"Passkey\";\n}\n\n/**\n * Resolve a user-facing passkey title.\n *\n * Order: explicit user name (when it is not a credential/AAGUID/UUID) →\n * known AAGUID friendly name → platform/security-key class → \"Passkey\".\n * Never returns a credential ID, AAGUID, or database id.\n */\nexport function resolvePasskeyAuthenticatorDisplay(\n\tinput: AthenaPasskeyDisplayNameInput,\n): AthenaPasskeyDisplayName {\n\tconst known = lookupAuthenticatorMetadata(input.aaguid ?? null);\n\tconst discoverability = discoverabilityFromResidentKey(input.residentKey);\n\tif (hasText(input.name) && !looksLikeCredentialId(input.name)) {\n\t\treturn {\n\t\t\tdiscoverability,\n\t\t\tdisplayName: input.name.trim(),\n\t\t\tmodel: known?.model,\n\t\t\tvendor: known?.vendor,\n\t\t};\n\t}\n\tif (known?.displayName) {\n\t\treturn {\n\t\t\tdiscoverability,\n\t\t\tdisplayName: known.displayName,\n\t\t\tmodel: known.model,\n\t\t\tvendor: known.vendor,\n\t\t};\n\t}\n\tconst className = platformOrSecurityKey(input);\n\treturn {\n\t\tdiscoverability,\n\t\tdisplayName: className,\n\t\tmodel: known?.model,\n\t\tvendor: known?.vendor,\n\t};\n}\n","import { resolvePasskeyAuthenticatorDisplay } from \"./metadata/index.ts\";\nimport type {\n  AthenaAuthCallOptions,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthQueryValue,\n  AthenaAuthResult,\n  AthenaPasskeyAuthenticationOptions,\n  AthenaPasskeyDeviceType,\n  AthenaPasskeyRecord,\n  AthenaPasskeyRegistrationOptions,\n} from \"../types.ts\";\n\nexport function extractPasskeyFetchOptions<\n  T extends AthenaAuthFetchCompatibleInput | undefined,\n>(input: T) {\n  if (!input) {\n    return {\n      fetchOptions: undefined,\n      payload: undefined,\n    };\n  }\n\n  const { fetchOptions, ...rest } = input;\n  const hasPayloadKeys = Object.keys(rest).length > 0;\n  return {\n    fetchOptions,\n    payload: hasPayloadKeys ? rest : undefined,\n  };\n}\n\nexport function extractPasskeyQuery(\n  input?: AthenaAuthFetchCompatibleInput\n): Record<string, AthenaAuthQueryValue> | undefined {\n  const { payload } = extractPasskeyFetchOptions(input);\n  const query = (payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined)\n    ?.query;\n  if (!query || typeof query !== \"object\") {\n    return undefined;\n  }\n  return query;\n}\n\n/** Wire-shape identity — registration options stay `AthenaPasskeyOptionsResponse`. */\nexport function normalizePasskeyRegistrationOptions(\n  value: AthenaPasskeyRegistrationOptions\n): AthenaPasskeyRegistrationOptions {\n  return value;\n}\n\n/** Wire-shape identity — authentication options share the same DTO. */\nexport function normalizePasskeyAuthenticationOptions(\n  value: AthenaPasskeyAuthenticationOptions\n): AthenaPasskeyAuthenticationOptions {\n  return value;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return undefined;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction asTransportList(value: unknown): string[] {\n  if (Array.isArray(value)) {\n    return value.filter(\n      (entry): entry is string => typeof entry === \"string\" && entry.length > 0,\n    );\n  }\n  if (typeof value === \"string\" && value.trim()) {\n    try {\n      const parsed: unknown = JSON.parse(value);\n      if (Array.isArray(parsed)) {\n        return parsed.filter(\n          (entry): entry is string =>\n            typeof entry === \"string\" && entry.length > 0,\n        );\n      }\n    } catch {\n      return [value];\n    }\n  }\n  return [];\n}\n\n/**\n * Map embedded or remote wire into the public passkey DTO.\n * Drops publicKey / credentialID / challenge / attestation.\n */\nexport function normalizePasskeyRecord(\n  value: AthenaPasskeyRecord | Record<string, unknown>,\n): AthenaPasskeyRecord {\n  const record = asRecord(value) ?? {};\n  const nested = asRecord(record.authenticator);\n  const deviceType: AthenaPasskeyDeviceType =\n    nested?.deviceType === \"multiDevice\" || record.deviceType === \"multiDevice\"\n      ? \"multiDevice\"\n      : \"singleDevice\";\n  const backedUp = Boolean(nested?.backedUp ?? record.backedUp);\n  const transports = asTransportList(\n    nested?.transports ?? record.transports,\n  );\n  const name =\n    typeof record.name === \"string\" && record.name.trim()\n      ? record.name\n      : record.name === null\n        ? null\n        : null;\n  const residentKey =\n    nested?.residentKey === true\n      ? true\n      : nested?.residentKey === false\n        ? false\n        : null;\n  const resolved = resolvePasskeyAuthenticatorDisplay({\n    aaguid: typeof nested?.aaguid === \"string\" ? nested.aaguid : null,\n    backedUp,\n    deviceType,\n    name,\n    residentKey,\n    transports,\n  });\n  const authenticator: AthenaPasskeyRecord[\"authenticator\"] = {\n    backedUp,\n    deviceType,\n    displayName:\n      typeof nested?.displayName === \"string\"\n        ? nested.displayName\n        : resolved.displayName,\n    residentKey,\n    transports,\n  };\n  if (typeof nested?.vendor === \"string\") {\n    authenticator.vendor = nested.vendor;\n  } else if (resolved.vendor) {\n    authenticator.vendor = resolved.vendor;\n  }\n  if (typeof nested?.model === \"string\") {\n    authenticator.model = nested.model;\n  } else if (resolved.model) {\n    authenticator.model = resolved.model;\n  }\n  const createdAt =\n    typeof record.createdAt === \"string\"\n      ? record.createdAt\n      : new Date().toISOString();\n  const view: AthenaPasskeyRecord = {\n    authenticator,\n    createdAt,\n    id: typeof record.id === \"string\" ? record.id : \"\",\n    name,\n    userId: typeof record.userId === \"string\" ? record.userId : \"\",\n  };\n  if (typeof record.updatedAt === \"string\") {\n    view.updatedAt = record.updatedAt;\n  }\n  return view;\n}\n\nexport function normalizePasskeyResult<T>(\n  result: AthenaAuthResult<T>\n): AthenaAuthResult<T> {\n  return result;\n}\n\nexport function mergePasskeyCallOptions(\n  fetchOptions?: AthenaAuthCallOptions,\n  options?: AthenaAuthCallOptions\n): AthenaAuthCallOptions | undefined {\n  if (!fetchOptions) {\n    return options;\n  }\n  if (!options) {\n    return fetchOptions;\n  }\n  return { ...fetchOptions, ...options };\n}\n","import type { AthenaAuthEndpointPath, AthenaAuthMethod } from \"../types.ts\";\nimport type { CanonicalPasskeyMethod } from \"./contract.ts\";\n\nexport interface PasskeyRequestSpec {\n  gated: boolean;\n  method: AthenaAuthMethod;\n  path: AthenaAuthEndpointPath;\n}\n\n/**\n * HTTP map for `athena.auth.passkey.*`.\n * Seven `/passkey/*` routes are capability-gated; `/.well-known/webauthn` is not.\n */\nexport const PASSKEY_REQUESTS = {\n  deletePasskey: {\n    gated: true,\n    method: \"POST\",\n    path: \"/passkey/delete-passkey\",\n  },\n  generateAuthenticateOptions: {\n    gated: true,\n    method: \"POST\",\n    path: \"/passkey/generate-authenticate-options\",\n  },\n  generateRegisterOptions: {\n    gated: true,\n    method: \"GET\",\n    path: \"/passkey/generate-register-options\",\n  },\n  getRelatedOrigins: {\n    gated: false,\n    method: \"GET\",\n    path: \"/.well-known/webauthn\",\n  },\n  listUserPasskeys: {\n    gated: true,\n    method: \"GET\",\n    path: \"/passkey/list-user-passkeys\",\n  },\n  updatePasskey: {\n    gated: true,\n    method: \"POST\",\n    path: \"/passkey/update-passkey\",\n  },\n  verifyAuthentication: {\n    gated: true,\n    method: \"POST\",\n    path: \"/passkey/verify-authentication\",\n  },\n  verifyRegistration: {\n    gated: true,\n    method: \"POST\",\n    path: \"/passkey/verify-registration\",\n  },\n} as const satisfies Record<CanonicalPasskeyMethod, PasskeyRequestSpec>;\n","import {\n\ttype AthenaAuthCapabilitiesResult,\n\tisCapabilityEnabled,\n} from \"../capabilities.ts\";\nimport type {\n\tAthenaAuthCallOptions,\n\tAthenaAuthEndpointPath,\n\tAthenaAuthFetchCompatibleInput,\n\tAthenaAuthMethod,\n\tAthenaAuthQueryPrimitive,\n\tAthenaAuthQueryValue,\n\tAthenaAuthResult,\n\tAthenaAuthSessionResponse,\n\tAthenaPasskeyOptionsResponse,\n\tAthenaPasskeyRecord,\n\tAthenaPasskeyRegisterRequest,\n\tAthenaPasskeySignInRequest,\n\tAthenaPasskeyVerifyAuthenticationResponse,\n} from \"../types.ts\";\nimport {\n\tcreatePasskeyCredential,\n\tcreationOptionsFromWire,\n\tgetPasskeyCredential,\n\tnoAssertionDiagnostic,\n\trequestOptionsFromWire,\n\tserializeAssertedPasskey,\n\tserializeCreatedPasskey,\n} from \"./browser/ceremony.ts\";\nimport type {\n\tAthenaPasskeyBindings,\n\tCreatePasskeyModuleDeps,\n\tPasskeyModuleCapabilities,\n} from \"./contract.ts\";\nimport {\n\textractPasskeyFetchOptions,\n\textractPasskeyQuery,\n\tmergePasskeyCallOptions,\n\tnormalizePasskeyRecord,\n\tnormalizePasskeyResult,\n} from \"./normalize.ts\";\nimport { PASSKEY_REQUESTS } from \"./requests.ts\";\n\nfunction resolveCapabilitiesSnapshot(\n\tcapabilities: PasskeyModuleCapabilities,\n): AthenaAuthCapabilitiesResult {\n\tif (\"getSnapshot\" in capabilities) {\n\t\treturn capabilities.getSnapshot();\n\t}\n\treturn capabilities;\n}\n\nfunction capabilityDisabled(\n\tfeature: string,\n\tendpoint: AthenaAuthEndpointPath,\n\tmethod: AthenaAuthMethod = \"POST\",\n): AthenaAuthResult<never> {\n\treturn {\n\t\tdata: null,\n\t\terror: `${feature} is not enabled on this Athena Auth runtime`,\n\t\terrorDetails: {\n\t\t\tcode: \"ATHENA_AUTH_CAPABILITY_DISABLED\",\n\t\t\tendpoint,\n\t\t\thint: feature,\n\t\t\tmessage: `${feature} is not enabled on this Athena Auth runtime`,\n\t\t\tmethod,\n\t\t\tstatus: 501,\n\t\t},\n\t\tok: false,\n\t\traw: {\n\t\t\terror: {\n\t\t\t\tcode: \"ATHENA_AUTH_CAPABILITY_DISABLED\",\n\t\t\t\tfeature,\n\t\t\t\tstatus: 501,\n\t\t\t},\n\t\t},\n\t\tstatus: 501,\n\t};\n}\n\nfunction denyPasskeys(\n\tcapabilities: PasskeyModuleCapabilities,\n\tendpoint: AthenaAuthEndpointPath,\n\tmethod: AthenaAuthMethod = \"POST\",\n): AthenaAuthResult<never> | null {\n\tconst snap = resolveCapabilitiesSnapshot(capabilities);\n\tif (snap.status !== \"known\" || isCapabilityEnabled(snap, \"passkeys\")) {\n\t\treturn null;\n\t}\n\treturn capabilityDisabled(\"passkeys\", endpoint, method);\n}\n\nfunction gateCapability<T>(\n\tdenied: AthenaAuthResult<never> | null,\n\trun: () => Promise<AthenaAuthResult<T>>,\n): Promise<AthenaAuthResult<T>> {\n\treturn denied ? Promise.resolve(denied as AthenaAuthResult<T>) : run();\n}\n\nfunction asSessionResponse(value: unknown): AthenaAuthSessionResponse | null {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn null;\n\t}\n\tconst record = value as Record<string, unknown>;\n\tconst session = record.session;\n\tconst user = record.user;\n\tif (\n\t\t!(\n\t\t\tsession &&\n\t\t\ttypeof session === \"object\" &&\n\t\t\ttypeof (session as { id?: unknown }).id === \"string\" &&\n\t\t\tuser &&\n\t\t\ttypeof user === \"object\" &&\n\t\t\ttypeof (user as { id?: unknown }).id === \"string\"\n\t\t)\n\t) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tsession: session as AthenaAuthSessionResponse[\"session\"],\n\t\tuser: user as AthenaAuthSessionResponse[\"user\"],\n\t};\n}\n\nfunction ceremonyFailed(\n\tmessage: string,\n\tendpoint: AthenaAuthEndpointPath,\n\tmethod: AthenaAuthMethod = \"POST\",\n): AthenaAuthResult<never> {\n\treturn {\n\t\tdata: null,\n\t\terror: message,\n\t\terrorDetails: {\n\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\tendpoint,\n\t\t\tmessage,\n\t\t\tmethod,\n\t\t\tstatus: 400,\n\t\t},\n\t\tok: false,\n\t\traw: { error: { message, status: 400 } },\n\t\tstatus: 400,\n\t};\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction trimmedField(\n\trecord: Record<string, unknown> | undefined,\n\tkey: string,\n): string | undefined {\n\tconst value = record?.[key];\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction isQueryPrimitive(value: unknown): value is AthenaAuthQueryPrimitive {\n\treturn (\n\t\ttypeof value === \"string\" ||\n\t\ttypeof value === \"number\" ||\n\t\ttypeof value === \"boolean\"\n\t);\n}\n\nfunction asQueryRecord(value: unknown): Record<string, AthenaAuthQueryValue> {\n\tconst record = asRecord(value);\n\tif (!record) {\n\t\treturn {};\n\t}\n\tconst query: Record<string, AthenaAuthQueryValue> = {};\n\tfor (const [key, entry] of Object.entries(record)) {\n\t\tif (entry === null || entry === undefined) {\n\t\t\tquery[key] = entry;\n\t\t\tcontinue;\n\t\t}\n\t\tif (isQueryPrimitive(entry)) {\n\t\t\tquery[key] = entry;\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(entry) && entry.every(isQueryPrimitive)) {\n\t\t\tquery[key] = entry;\n\t\t}\n\t}\n\treturn query;\n}\n\n/**\n * Internal passkey bindings (eight HTTP methods + register/signIn ceremony).\n * Successful `verifyAuthentication` accepts into the canonical session store.\n */\nexport function createPasskeyModule(\n\tdeps: CreatePasskeyModuleDeps,\n): AthenaPasskeyBindings {\n\tconst { capabilities, request, sessionController } = deps;\n\n\tconst getPasskey = <T>(\n\t\tpath: AthenaAuthEndpointPath,\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { fetchOptions } = extractPasskeyFetchOptions(input);\n\t\treturn request<T>(\n\t\t\t{\n\t\t\t\tendpoint: path,\n\t\t\t\tfetchOptions,\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: extractPasskeyQuery(input),\n\t\t\t},\n\t\t\toptions,\n\t\t).then(normalizePasskeyResult);\n\t};\n\n\tconst postPasskey = <T>(\n\t\tpath: AthenaAuthEndpointPath,\n\t\tinput?: AthenaAuthFetchCompatibleInput & {\n\t\t\tautoFill?: unknown;\n\t\t\temail?: unknown;\n\t\t\tname?: unknown;\n\t\t\tquery?: unknown;\n\t\t\tresponse?: unknown;\n\t\t\tuserId?: unknown;\n\t\t},\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractPasskeyFetchOptions(input);\n\t\treturn request<T>(\n\t\t\t{\n\t\t\t\tbody: payload ?? {},\n\t\t\t\tendpoint: path,\n\t\t\t\tfetchOptions,\n\t\t\t\tmethod: \"POST\",\n\t\t\t},\n\t\t\tmergePasskeyCallOptions(undefined, options),\n\t\t).then(normalizePasskeyResult);\n\t};\n\n\tconst registerPasskey = async (\n\t\tinput?: AthenaPasskeyRegisterRequest & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t): Promise<AthenaAuthResult<AthenaPasskeyRecord>> => {\n\t\tconst denied = denyPasskeys(\n\t\t\tcapabilities,\n\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.path,\n\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.method,\n\t\t);\n\t\tif (denied) {\n\t\t\treturn denied as AthenaAuthResult<AthenaPasskeyRecord>;\n\t\t}\n\t\tconst { payload, fetchOptions } = extractPasskeyFetchOptions(input);\n\t\tconst record = asRecord(payload);\n\t\tconst email = trimmedField(record, \"email\");\n\t\tconst name = trimmedField(record, \"name\");\n\t\tconst query: Record<string, AthenaAuthQueryValue> = asQueryRecord(\n\t\t\trecord?.query,\n\t\t);\n\t\tif (email) {\n\t\t\tquery.email = email;\n\t\t}\n\t\tif (name) {\n\t\t\tquery.name = name;\n\t\t}\n\t\tconst optionsResult = await getPasskey<AthenaPasskeyOptionsResponse>(\n\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.path,\n\t\t\t{\n\t\t\t\t...(fetchOptions ? { fetchOptions } : {}),\n\t\t\t\t...(Object.keys(query).length > 0 ? { query } : {}),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t\tif (!optionsResult.ok || !optionsResult.data) {\n\t\t\treturn optionsResult as AthenaAuthResult<AthenaPasskeyRecord>;\n\t\t}\n\t\tlet credential: Credential | null;\n\t\ttry {\n\t\t\tconst publicKey = creationOptionsFromWire(optionsResult.data, record);\n\t\t\tcredential = await createPasskeyCredential(\n\t\t\t\tpublicKey,\n\t\t\t\tfetchOptions?.signal,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: \"browser returned no assertion\";\n\t\t\treturn ceremonyFailed(\n\t\t\t\tmessage,\n\t\t\t\tPASSKEY_REQUESTS.verifyRegistration.path,\n\t\t\t) as AthenaAuthResult<AthenaPasskeyRecord>;\n\t\t}\n\t\tif (!credential) {\n\t\t\treturn ceremonyFailed(\n\t\t\t\t\"browser returned no assertion\",\n\t\t\t\tPASSKEY_REQUESTS.verifyRegistration.path,\n\t\t\t) as AthenaAuthResult<AthenaPasskeyRecord>;\n\t\t}\n\t\treturn postPasskey<AthenaPasskeyRecord>(\n\t\t\tPASSKEY_REQUESTS.verifyRegistration.path,\n\t\t\t{\n\t\t\t\t...(email ? { email } : {}),\n\t\t\t\t...(fetchOptions ? { fetchOptions } : {}),\n\t\t\t\t...(name ? { name } : {}),\n\t\t\t\tresponse: serializeCreatedPasskey(credential),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst signInPasskey = async (\n\t\tinput?: AthenaPasskeySignInRequest & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t): Promise<AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>> => {\n\t\tconst denied = denyPasskeys(\n\t\t\tcapabilities,\n\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.path,\n\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.method,\n\t\t);\n\t\tif (denied) {\n\t\t\treturn denied as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n\t\t}\n\t\tconst { payload, fetchOptions } = extractPasskeyFetchOptions(input);\n\t\tconst record = asRecord(payload);\n\t\tconst email = trimmedField(record, \"email\");\n\t\tconst userId = trimmedField(record, \"userId\");\n\t\tconst autoFill = record?.autoFill === true;\n\t\tconst optionsResult = await postPasskey<AthenaPasskeyOptionsResponse>(\n\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.path,\n\t\t\t{\n\t\t\t\t...(email ? { email } : {}),\n\t\t\t\t...(fetchOptions ? { fetchOptions } : {}),\n\t\t\t\t...(userId ? { userId } : {}),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t\tif (!optionsResult.ok || !optionsResult.data) {\n\t\t\treturn optionsResult as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n\t\t}\n\t\tconst allowCredentials = optionsResult.data.allowCredentials ?? [];\n\t\tlet credential: Credential | null;\n\t\ttry {\n\t\t\tcredential = await getPasskeyCredential(\n\t\t\t\trequestOptionsFromWire(optionsResult.data),\n\t\t\t\tautoFill ? \"conditional\" : \"optional\",\n\t\t\t\tfetchOptions?.signal,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: noAssertionDiagnostic({\n\t\t\t\t\t\t\tallowCredentialsCount: allowCredentials.length,\n\t\t\t\t\t\t\tresidentKey: null,\n\t\t\t\t\t\t});\n\t\t\treturn ceremonyFailed(\n\t\t\t\tmessage,\n\t\t\t\tPASSKEY_REQUESTS.verifyAuthentication.path,\n\t\t\t) as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n\t\t}\n\t\tif (!credential) {\n\t\t\treturn ceremonyFailed(\n\t\t\t\tnoAssertionDiagnostic({\n\t\t\t\t\tallowCredentialsCount: allowCredentials.length,\n\t\t\t\t\tresidentKey: null,\n\t\t\t\t}),\n\t\t\t\tPASSKEY_REQUESTS.verifyAuthentication.path,\n\t\t\t) as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n\t\t}\n\t\tconst result = await postPasskey<AthenaPasskeyVerifyAuthenticationResponse>(\n\t\t\tPASSKEY_REQUESTS.verifyAuthentication.path,\n\t\t\t{\n\t\t\t\t...(fetchOptions ? { fetchOptions } : {}),\n\t\t\t\tresponse: serializeAssertedPasskey(credential),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t\tif (result.ok) {\n\t\t\tconst session = asSessionResponse(result.data);\n\t\t\tif (session) {\n\t\t\t\tsessionController.accept(session);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\n\treturn {\n\t\tdeletePasskey: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.deletePasskey.path,\n\t\t\t\t\tPASSKEY_REQUESTS.deletePasskey.method,\n\t\t\t\t),\n\t\t\t\t() => postPasskey(PASSKEY_REQUESTS.deletePasskey.path, input, options),\n\t\t\t),\n\t\tgenerateAuthenticateOptions: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.path,\n\t\t\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.method,\n\t\t\t\t),\n\t\t\t\t() =>\n\t\t\t\t\tpostPasskey(\n\t\t\t\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.path,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t),\n\t\tgenerateRegisterOptions: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.path,\n\t\t\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.method,\n\t\t\t\t),\n\t\t\t\t() =>\n\t\t\t\t\tgetPasskey(\n\t\t\t\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.path,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t),\n\t\tgetRelatedOrigins: (input, options) =>\n\t\t\tgetPasskey(PASSKEY_REQUESTS.getRelatedOrigins.path, input, options),\n\t\tregister: (input, options) => registerPasskey(input, options),\n\t\tsignIn: (input, options) => signInPasskey(input, options),\n\t\tlistUserPasskeys: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.listUserPasskeys.path,\n\t\t\t\t\tPASSKEY_REQUESTS.listUserPasskeys.method,\n\t\t\t\t),\n\t\t\t\t() =>\n\t\t\t\t\tgetPasskey<AthenaPasskeyRecord[]>(\n\t\t\t\t\t\tPASSKEY_REQUESTS.listUserPasskeys.path,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t).then((result) => {\n\t\t\t\t\t\tif (result.ok && Array.isArray(result.data)) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...result,\n\t\t\t\t\t\t\t\tdata: result.data.map((row) =>\n\t\t\t\t\t\t\t\t\tnormalizePasskeyRecord(row as AthenaPasskeyRecord),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}),\n\t\t\t),\n\t\tupdatePasskey: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.updatePasskey.path,\n\t\t\t\t\tPASSKEY_REQUESTS.updatePasskey.method,\n\t\t\t\t),\n\t\t\t\t() => postPasskey(PASSKEY_REQUESTS.updatePasskey.path, input, options),\n\t\t\t),\n\t\tverifyAuthentication: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.verifyAuthentication.path,\n\t\t\t\t\tPASSKEY_REQUESTS.verifyAuthentication.method,\n\t\t\t\t),\n\t\t\t\tasync () => {\n\t\t\t\t\tconst result =\n\t\t\t\t\t\tawait postPasskey<AthenaPasskeyVerifyAuthenticationResponse>(\n\t\t\t\t\t\t\tPASSKEY_REQUESTS.verifyAuthentication.path,\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (result.ok) {\n\t\t\t\t\t\tconst session = asSessionResponse(result.data);\n\t\t\t\t\t\tif (session) {\n\t\t\t\t\t\t\tsessionController.accept(session);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t),\n\t\tverifyRegistration: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.verifyRegistration.path,\n\t\t\t\t\tPASSKEY_REQUESTS.verifyRegistration.method,\n\t\t\t\t),\n\t\t\t\t() =>\n\t\t\t\t\tpostPasskey(PASSKEY_REQUESTS.verifyRegistration.path, input, options),\n\t\t\t),\n\t};\n}\n","import { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport {\n\tisHtmlErrorPage,\n\tsanitizeAuthErrorMessage,\n\tUPSTREAM_UNAVAILABLE_CODE,\n\tUPSTREAM_UNAVAILABLE_HINT,\n\tUPSTREAM_UNAVAILABLE_MESSAGE,\n} from \"../http/upstream-html-error.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\nimport {\n\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM,\n\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE,\n} from \"../utils/athena-auth-url.ts\";\nimport { buildServiceRequestHeaders } from \"../utils/athena-request-headers.ts\";\nimport {\n\tcreateAthenaAuthCapabilitiesStore,\n\tisSocialCapabilityEnabled,\n} from \"./capabilities.ts\";\nimport { assertAthenaAuthTemplateVariables } from \"./limits.ts\";\nimport { createPasskeyModule } from \"./passkey/client-module.ts\";\nimport { resolveReactEmailPayloadFields } from \"./react-email.ts\";\nimport { createAthenaAuthSessionController } from \"./session-controller.ts\";\nimport { createAthenaAuthTokenProvider } from \"./token-provider.ts\";\nimport type {\n\tAthenaAdminHasPermissionRequest,\n\tAthenaAdminHasPermissionResponse,\n\tAthenaAdminRevokeUserSessionRequest,\n\tAthenaAdminRevokeUserSessionsRequest,\n\tAthenaAdminSuccessResponse,\n\tAthenaApiKeyDeleteAllExpiredResponse,\n\tAthenaAuthBindings,\n\tAthenaAuthCallOptions,\n\tAthenaAuthClientConfig,\n\tAthenaAuthEmailListQuery,\n\tAthenaAuthEmailListResponse,\n\tAthenaAuthEndpointPath,\n\tAthenaAuthErrorCode,\n\tAthenaAuthErrorDetails,\n\tAthenaAuthFetchCompatibleInput,\n\tAthenaAuthGenericInput,\n\tAthenaAuthGenericQueryInput,\n\tAthenaAuthGetTokenRequest,\n\tAthenaAuthGetUserResponse,\n\tAthenaAuthGuardResult,\n\tAthenaAuthHealthResponse,\n\tAthenaAuthLinkedAccount,\n\tAthenaAuthMethod,\n\tAthenaAuthOkResponse,\n\tAthenaAuthOrganization,\n\tAthenaAuthOrganizationBindings,\n\tAthenaAuthOrganizationCheckSlugRequest,\n\tAthenaAuthOrganizationCreateRequest,\n\tAthenaAuthOrganizationDeleteRequest,\n\tAthenaAuthOrganizationGetFullQuery,\n\tAthenaAuthOrganizationGetInvitationQuery,\n\tAthenaAuthOrganizationInvitation,\n\tAthenaAuthOrganizationInvitationActionRequest,\n\tAthenaAuthOrganizationInviteMemberRequest,\n\tAthenaAuthOrganizationLeaveRequest,\n\tAthenaAuthOrganizationListInvitationsQuery,\n\tAthenaAuthOrganizationListMembersQuery,\n\tAthenaAuthOrganizationListUserInvitationsQuery,\n\tAthenaAuthOrganizationMember,\n\tAthenaAuthOrganizationRemoveMemberRequest,\n\tAthenaAuthOrganizationSetActiveRequest,\n\tAthenaAuthOrganizationUpdateMemberRoleRequest,\n\tAthenaAuthOrganizationUpdateRequest,\n\tAthenaAuthQueryValue,\n\tAthenaAuthReactEmailRenderInput,\n\tAthenaAuthRequestInput,\n\tAthenaAuthResult,\n\tAthenaAuthSession,\n\tAthenaAuthSessionResponse,\n\tAthenaAuthSignInResponse,\n\tAthenaAuthSignOutResponse,\n\tAthenaAuthSocialRedirectResponse,\n\tAthenaAuthStatusResponse,\n\tAthenaAuthToken,\n\tAthenaAuthUser,\n\tAthenaChangeEmailRequest,\n\tAthenaChangePasswordRequest,\n\tAthenaDeleteUserCallbackRequest,\n\tAthenaDeleteUserRequest,\n\tAthenaDeleteUserResponse,\n\tAthenaEmailSignInRequest,\n\tAthenaEmailSignUpRequest,\n\tAthenaForgetPasswordRequest,\n\tAthenaLinkSocialRequest,\n\tAthenaOAuthAccountTokenRequest,\n\tAthenaOAuthTokenBundle,\n\tAthenaResetPasswordRequest,\n\tAthenaSendVerificationEmailRequest,\n\tAthenaSocialSignInRequest,\n\tAthenaTwoFactorGenerateBackupCodesRequest,\n\tAthenaTwoFactorGenerateBackupCodesResponse,\n\tAthenaUnlinkAccountRequest,\n\tAthenaUpdateUserRequest,\n\tAthenaUsernameSignInRequest,\n\tAthenaVerifyEmailRequest,\n\tInternalAthenaAuthModule,\n} from \"./types.ts\";\n\nconst DEFAULT_AUTH_BASE_URL = \"http://localhost:3001/api/auth\";\nconst SDK_NAME = \"@xylex-group/athena-auth\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\n\ninterface AuthRequestContext {\n\tendpoint: AthenaAuthEndpointPath;\n\tmethod: AthenaAuthMethod;\n}\n\nexport interface InternalAuthModuleRuntimeOptions {\n\tresolveCallOptions?: () =>\n\t\t| AthenaAuthCallOptions\n\t\t| undefined\n\t\t| Promise<AthenaAuthCallOptions | undefined>;\n}\n\nconst ATHENA_AUTH_BIND_BASE_URL = Symbol.for(\n\t\"@xylex-group/athena.auth.bindBaseUrl\",\n);\n\ntype AuthClientWithBindableBaseUrl = {\n\t[ATHENA_AUTH_BIND_BASE_URL]?: (baseUrl: string) => void;\n};\n\n/**\n * Update the Auth module request base after Next discovery resolves.\n * No-ops when the surface was not created by {@link createAuthModule}.\n */\nexport function bindAthenaAuthClientBaseUrl(\n\tauth: object,\n\tbaseUrl: string,\n): void {\n\tconst bind = (auth as AuthClientWithBindableBaseUrl)[\n\t\tATHENA_AUTH_BIND_BASE_URL\n\t];\n\tbind?.(baseUrl);\n}\n\ntype InternalErrorInput = AuthRequestContext & {\n\tcode: AthenaAuthErrorCode;\n\tstatus: number;\n\tmessage: string;\n\trequestId?: string;\n\thint?: string;\n\tcause?: string;\n};\n\nfunction normalizeBaseUrl(baseUrl?: string): string {\n\treturn (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, \"\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n\treturn (\n\t\theaders.get(\"x-request-id\") ??\n\t\theaders.get(\"x-correlation-id\") ??\n\t\theaders.get(\"x-athena-request-id\") ??\n\t\tundefined\n\t);\n}\n\nfunction looksLikeUnsafeAuthTransportBody(value: string): boolean {\n\tconst trimmed = value.trimStart();\n\treturn (\n\t\t/^<!doctype\\s+html/i.test(trimmed) ||\n\t\t/^<\\?xml/i.test(trimmed) ||\n\t\t/^<html(?:\\s|>)/i.test(trimmed) ||\n\t\t/<(?:head|body|script|style)(?:\\s|>)/i.test(value) ||\n\t\tvalue.length > 2000\n\t);\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n\tif (isRecord(payload)) {\n\t\tconst messageCandidates = [payload.error, payload.message, payload.details];\n\t\tfor (const candidate of messageCandidates) {\n\t\t\tif (typeof candidate === \"string\" && candidate.trim().length > 0) {\n\t\t\t\tconst text = candidate.trim();\n\t\t\t\tif (!looksLikeUnsafeAuthTransportBody(text)) {\n\t\t\t\t\treturn text;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof payload === \"string\" && payload.trim().length > 0) {\n\t\tconst text = payload.trim();\n\t\tif (looksLikeUnsafeAuthTransportBody(text)) {\n\t\t\treturn fallback;\n\t\t}\n\t\treturn sanitizeAuthErrorMessage(text, fallback);\n\t}\n\n\treturn fallback;\n}\n\nfunction resolveErrorCode(payload: unknown): AthenaAuthErrorCode {\n\tif (!isRecord(payload)) {\n\t\treturn \"HTTP_ERROR\";\n\t}\n\tif (typeof payload.code === \"string\" && payload.code.trim()) {\n\t\treturn payload.code.trim();\n\t}\n\tconst nested = isRecord(payload.error) ? payload.error : undefined;\n\tif (nested && typeof nested.code === \"string\" && nested.code.trim()) {\n\t\treturn nested.code.trim();\n\t}\n\treturn \"HTTP_ERROR\";\n}\n\nfunction toErrorDetails(input: InternalErrorInput): AthenaAuthErrorDetails {\n\treturn {\n\t\tcause: input.cause,\n\t\tcode: input.code,\n\t\tendpoint: input.endpoint,\n\t\thint: input.hint,\n\t\tmessage: input.message,\n\t\tmethod: input.method,\n\t\trequestId: input.requestId,\n\t\tstatus: input.status,\n\t};\n}\n\nfunction mergeCallOptions(\n\tbase?: AthenaAuthCallOptions,\n\toverride?: AthenaAuthCallOptions,\n): AthenaAuthCallOptions | undefined {\n\tif (!(base || override)) {\n\t\treturn;\n\t}\n\treturn {\n\t\t...base,\n\t\t...override,\n\t\theaders: {\n\t\t\t...(base?.headers ?? {}),\n\t\t\t...(override?.headers ?? {}),\n\t\t},\n\t};\n}\n\nfunction copyDefinedField(\n\ttarget: Record<string, unknown>,\n\tsource: Record<string, unknown>,\n\ttargetKey: string,\n\tsourceKey: string,\n): void {\n\tif (!(sourceKey in source)) {\n\t\treturn;\n\t}\n\tconst value = source[sourceKey];\n\tif (value !== undefined) {\n\t\ttarget[targetKey] = value;\n\t}\n}\n\nfunction normalizeEmailTemplateAttachmentsValue(value: unknown): unknown {\n\tif (typeof value === \"string\" || value === null) {\n\t\treturn value;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) => normalizeEmailTemplateAttachmentsValue(item));\n\t}\n\n\tif (typeof value !== \"object\") {\n\t\treturn value;\n\t}\n\n\tconst attachment = { ...(value as Record<string, unknown>) };\n\tcopyDefinedField(attachment, attachment, \"file_url\", \"fileUrl\");\n\tattachment.fileUrl = undefined;\n\treturn attachment;\n}\n\nfunction normalizeAdminEmailTemplatePayload(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst normalized = { ...payload };\n\n\tcopyDefinedField(normalized, payload, \"template_key\", \"templateKey\");\n\tcopyDefinedField(normalized, payload, \"event_type\", \"eventType\");\n\tcopyDefinedField(normalized, payload, \"subject_template\", \"subjectTemplate\");\n\tcopyDefinedField(normalized, payload, \"text_template\", \"textTemplate\");\n\tcopyDefinedField(normalized, payload, \"html_template\", \"htmlTemplate\");\n\tcopyDefinedField(\n\t\tnormalized,\n\t\tpayload,\n\t\t\"variable_bindings\",\n\t\t\"variableBindings\",\n\t);\n\tcopyDefinedField(\n\t\tnormalized,\n\t\tpayload,\n\t\t\"attachment_failure_mode\",\n\t\t\"attachmentFailureMode\",\n\t);\n\tcopyDefinedField(normalized, payload, \"is_active\", \"isActive\");\n\n\tif (Object.hasOwn(payload, \"attachments\")) {\n\t\tnormalized.attachments = normalizeEmailTemplateAttachmentsValue(\n\t\t\tpayload.attachments,\n\t\t);\n\t}\n\n\tnormalized.templateKey = undefined;\n\tnormalized.eventType = undefined;\n\tnormalized.subjectTemplate = undefined;\n\tnormalized.textTemplate = undefined;\n\tnormalized.htmlTemplate = undefined;\n\tnormalized.variableBindings = undefined;\n\tnormalized.attachmentFailureMode = undefined;\n\tnormalized.isActive = undefined;\n\n\treturn normalized;\n}\n\nfunction toReactEmailTemplateCompatibilityInput<\n\tTInput extends AthenaAuthFetchCompatibleInput & {\n\t\treact?: AthenaAuthReactEmailRenderInput;\n\t},\n>(input: TInput): TInput {\n\tconst payload = input as Record<string, unknown>;\n\tconst compatibility = { ...payload };\n\n\tcopyDefinedField(compatibility, payload, \"templateKey\", \"template_key\");\n\tcopyDefinedField(compatibility, payload, \"eventType\", \"event_type\");\n\tcopyDefinedField(\n\t\tcompatibility,\n\t\tpayload,\n\t\t\"subjectTemplate\",\n\t\t\"subject_template\",\n\t);\n\tcopyDefinedField(compatibility, payload, \"textTemplate\", \"text_template\");\n\tcopyDefinedField(compatibility, payload, \"htmlTemplate\", \"html_template\");\n\tcopyDefinedField(\n\t\tcompatibility,\n\t\tpayload,\n\t\t\"variableBindings\",\n\t\t\"variable_bindings\",\n\t);\n\tcopyDefinedField(\n\t\tcompatibility,\n\t\tpayload,\n\t\t\"attachmentFailureMode\",\n\t\t\"attachment_failure_mode\",\n\t);\n\tcopyDefinedField(compatibility, payload, \"isActive\", \"is_active\");\n\n\treturn compatibility as unknown as TInput;\n}\n\nfunction normalizeAdminEmailTemplateSendPayload(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst normalized = { ...payload };\n\n\tcopyDefinedField(normalized, payload, \"template_id\", \"templateId\");\n\tcopyDefinedField(normalized, payload, \"recipient_email\", \"recipientEmail\");\n\tcopyDefinedField(normalized, payload, \"render_variables\", \"renderVariables\");\n\tcopyDefinedField(normalized, payload, \"user_id\", \"userId\");\n\tcopyDefinedField(normalized, payload, \"organization_id\", \"organizationId\");\n\tcopyDefinedField(normalized, payload, \"session_token\", \"sessionToken\");\n\tcopyDefinedField(\n\t\tnormalized,\n\t\tpayload,\n\t\t\"attachment_failure_mode\",\n\t\t\"attachmentFailureMode\",\n\t);\n\n\tif (Object.hasOwn(payload, \"attachments\")) {\n\t\tnormalized.attachments = normalizeEmailTemplateAttachmentsValue(\n\t\t\tpayload.attachments,\n\t\t);\n\t}\n\n\tnormalized.templateId = undefined;\n\tnormalized.recipientEmail = undefined;\n\tnormalized.renderVariables = undefined;\n\tnormalized.userId = undefined;\n\tnormalized.organizationId = undefined;\n\tnormalized.sessionToken = undefined;\n\tnormalized.attachmentFailureMode = undefined;\n\n\treturn normalized;\n}\n\nfunction toSessionGuardFailure(\n\tsessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n\tif (sessionResult.status === 401 || sessionResult.data === null) {\n\t\treturn {\n\t\t\terror: sessionResult.error ?? \"Unauthorized\",\n\t\t\tok: false,\n\t\t\treason: \"unauthorized\",\n\t\t\tsessionResult,\n\t\t\tstatus: 401,\n\t\t};\n\t}\n\n\treturn {\n\t\terror: sessionResult.error ?? \"Failed to resolve current session\",\n\t\tok: false,\n\t\treason: \"upstream_error\",\n\t\tsessionResult,\n\t\tstatus: sessionResult.status,\n\t};\n}\n\nfunction toPermissionGuardFailure(\n\tpermissionResult: AthenaAuthResult<AthenaAdminHasPermissionResponse>,\n\tsessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n\tif (permissionResult.status === 401) {\n\t\treturn {\n\t\t\terror: permissionResult.error ?? \"Unauthorized\",\n\t\t\tok: false,\n\t\t\tpermissionResult,\n\t\t\treason: \"unauthorized\",\n\t\t\tsessionResult,\n\t\t\tstatus: 401,\n\t\t};\n\t}\n\n\tif (permissionResult.status === 403) {\n\t\treturn {\n\t\t\terror: permissionResult.error ?? \"Forbidden\",\n\t\t\tok: false,\n\t\t\tpermissionResult,\n\t\t\treason: \"forbidden\",\n\t\t\tsessionResult,\n\t\t\tstatus: 403,\n\t\t};\n\t}\n\n\treturn {\n\t\terror: permissionResult.error ?? \"Failed to resolve permission check\",\n\t\tok: false,\n\t\tpermissionResult,\n\t\treason: \"upstream_error\",\n\t\tsessionResult,\n\t\tstatus: permissionResult.status,\n\t};\n}\n\nfunction extractQueryFromInput(\n\tinput?: AthenaAuthFetchCompatibleInput,\n): Record<string, AthenaAuthQueryValue> | undefined {\n\tconst { payload } = extractFetchOptions(input);\n\tconst query = (\n\t\tpayload as { query?: Record<string, AthenaAuthQueryValue> } | undefined\n\t)?.query;\n\tif (!query || typeof query !== \"object\") {\n\t\treturn undefined;\n\t}\n\treturn query;\n}\n\nfunction withFreshSessionLookupQuery(\n\tinput?: AthenaAuthFetchCompatibleInput,\n): Record<string, AthenaAuthQueryValue> {\n\tconst query = extractQueryFromInput(input) ?? {};\n\tconst explicit = query[ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM];\n\tif (explicit === false || explicit === \"false\") {\n\t\tconst next = { ...query };\n\t\tdelete next[ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM];\n\t\treturn next;\n\t}\n\treturn {\n\t\t...query,\n\t\t[ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM]:\n\t\t\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE,\n\t};\n}\n\nfunction extractFetchOptions<\n\tT extends AthenaAuthFetchCompatibleInput | undefined,\n>(input: T) {\n\tif (!input) {\n\t\treturn {\n\t\t\tfetchOptions: undefined,\n\t\t\tpayload: undefined,\n\t\t};\n\t}\n\n\tconst { fetchOptions, ...rest } = input;\n\tconst hasPayloadKeys = Object.keys(rest).length > 0;\n\treturn {\n\t\tfetchOptions,\n\t\tpayload: hasPayloadKeys ? rest : undefined,\n\t};\n}\n\nfunction buildHeaders(\n\tconfig: AthenaAuthClientConfig,\n\toptions?: AthenaAuthCallOptions,\n): Record<string, string> {\n\treturn buildServiceRequestHeaders(\"auth\", SDK_HEADER_VALUE, config, options);\n}\n\nfunction appendQueryParam(\n\tsearchParams: URLSearchParams,\n\tkey: string,\n\tvalue: AthenaAuthQueryValue,\n) {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\tif (Array.isArray(value)) {\n\t\tvalue.forEach((item) => {\n\t\t\tsearchParams.append(key, String(item));\n\t\t});\n\t\treturn;\n\t}\n\tsearchParams.append(key, String(value));\n}\n\nfunction buildRequestUrl(\n\tbaseUrl: string,\n\tendpoint: AthenaAuthEndpointPath,\n\tquery?: Record<string, AthenaAuthQueryValue>,\n) {\n\tconst url = `${baseUrl}${endpoint}`;\n\tif (!query || Object.keys(query).length === 0) {\n\t\treturn url;\n\t}\n\tconst searchParams = new URLSearchParams();\n\tfor (const [key, value] of Object.entries(query)) {\n\t\tappendQueryParam(searchParams, key, value);\n\t}\n\tconst queryText = searchParams.toString();\n\treturn queryText ? `${url}?${queryText}` : url;\n}\n\nfunction inferDefaultMethod(\n\tendpoint: AthenaAuthEndpointPath,\n): AthenaAuthMethod {\n\tif (endpoint.startsWith(\"/reset-password/\")) {\n\t\treturn \"GET\";\n\t}\n\tif (\n\t\tendpoint.startsWith(\"/authorization/roles/\") &&\n\t\t!endpoint.endsWith(\"/clone\") &&\n\t\t!endpoint.endsWith(\"/rights\")\n\t) {\n\t\treturn \"GET\";\n\t}\n\n\tswitch (endpoint) {\n\t\tcase \"/get-session\":\n\t\tcase \"/admin/get-user\":\n\t\tcase \"/list-sessions\":\n\t\tcase \"/verify-email\":\n\t\tcase \"/change-email/verify\":\n\t\tcase \"/delete-user/verify\":\n\t\tcase \"/email-list\":\n\t\tcase \"/email/list\":\n\t\tcase \"/delete-user/callback\":\n\t\tcase \"/list-accounts\":\n\t\tcase \"/passkey/generate-register-options\":\n\t\tcase \"/passkey/list-user-passkeys\":\n\t\tcase \"/.well-known/webauthn\":\n\t\tcase \"/.well-known/jwks.json\":\n\t\tcase \"/.well-known/openid-configuration\":\n\t\tcase \"/admin/list-users\":\n\t\tcase \"/admin/athena-client/list\":\n\t\tcase \"/admin/audit-log/list\":\n\t\tcase \"/admin/email/get\":\n\t\tcase \"/admin/email-failure/list\":\n\t\tcase \"/admin/email-failure/get\":\n\t\tcase \"/admin/email-template/get\":\n\t\tcase \"/admin/email-template/list\":\n\t\tcase \"/admin/email/list\":\n\t\tcase \"/api-key/get\":\n\t\tcase \"/api-key/list\":\n\t\tcase \"/organization/get-full-organization\":\n\t\tcase \"/organization/list\":\n\t\tcase \"/organization/get-invitation\":\n\t\tcase \"/organization/list-invitations\":\n\t\tcase \"/organization/list-user-invitations\":\n\t\tcase \"/organization/list-members\":\n\t\tcase \"/organization/get-active-member\":\n\t\tcase \"/authorization/snapshot\":\n\t\tcase \"/authorization/rights\":\n\t\tcase \"/authorization/roles\":\n\t\tcase \"/authorization/audit\":\n\t\tcase \"/health\":\n\t\tcase \"/ok\":\n\t\tcase \"/error\":\n\t\t\treturn \"GET\";\n\t\tdefault:\n\t\t\treturn \"POST\";\n\t}\n}\n\nasync function callAuthEndpoint<T>(\n\tconfig: AthenaAuthClientConfig,\n\tcontext: AuthRequestContext,\n\tbody?: unknown,\n\tquery?: Record<string, AthenaAuthQueryValue>,\n\toptions?: AthenaAuthCallOptions,\n): Promise<AthenaAuthResult<T>> {\n\tconst baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl);\n\tconst url = buildRequestUrl(baseUrl, context.endpoint, query);\n\tconst headers = buildHeaders(config, options);\n\tconst credentials = options?.credentials ?? config.credentials ?? \"include\";\n\tconst requestInit: RequestInit = {\n\t\tcache: \"no-store\",\n\t\tcredentials,\n\t\theaders,\n\t\tmethod: context.method,\n\t\tsignal: options?.signal,\n\t};\n\n\tif (context.method !== \"GET\") {\n\t\trequestInit.body = JSON.stringify(body ?? {});\n\t}\n\n\tconst fetcher = config.fetch ?? globalThis.fetch;\n\tif (!fetcher) {\n\t\tconst details = toErrorDetails({\n\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\tendpoint: context.endpoint,\n\t\t\thint: \"Use Node 18+ or provide `fetch` through createClient({ auth: { fetch } })\",\n\t\t\tmessage: \"No fetch implementation available for auth client\",\n\t\t\tmethod: context.method,\n\t\t\tstatus: 0,\n\t\t});\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: details.message,\n\t\t\terrorDetails: details,\n\t\t\tok: false,\n\t\t\traw: null,\n\t\t\tstatus: 0,\n\t\t};\n\t}\n\n\ttry {\n\t\tconst response = await fetcher(url, requestInit);\n\t\tconst rawText = await response.text();\n\t\tconst requestId = resolveRequestId(response.headers);\n\t\tconst parsedBody = parseResponseBody(\n\t\t\trawText ?? \"\",\n\t\t\tresponse.headers.get(\"content-type\"),\n\t\t);\n\n\t\tif (isHtmlErrorPage(rawText ?? \"\", response.headers.get(\"content-type\"))) {\n\t\t\tconst details = toErrorDetails({\n\t\t\t\tcause: (rawText ?? \"\").slice(0, 200),\n\t\t\t\tcode: UPSTREAM_UNAVAILABLE_CODE,\n\t\t\t\tendpoint: context.endpoint,\n\t\t\t\thint: UPSTREAM_UNAVAILABLE_HINT,\n\t\t\t\tmessage: UPSTREAM_UNAVAILABLE_MESSAGE,\n\t\t\t\tmethod: context.method,\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status || 503,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: details.message,\n\t\t\t\terrorDetails: details,\n\t\t\t\tok: false,\n\t\t\t\traw: null,\n\t\t\t\tstatus: details.status,\n\t\t\t};\n\t\t}\n\n\t\tif (parsedBody.parseFailed) {\n\t\t\tconst details = toErrorDetails({\n\t\t\t\tcause: rawText.slice(0, 300),\n\t\t\t\tcode: \"INVALID_JSON\",\n\t\t\t\tendpoint: context.endpoint,\n\t\t\t\thint: \"Verify the auth endpoint response body is valid JSON.\",\n\t\t\t\tmessage: \"Auth server returned malformed JSON\",\n\t\t\t\tmethod: context.method,\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: details.message,\n\t\t\t\terrorDetails: details,\n\t\t\t\tok: false,\n\t\t\t\traw: parsedBody.parsed,\n\t\t\t\tstatus: response.status,\n\t\t\t};\n\t\t}\n\n\t\tconst parsed = parsedBody.parsed;\n\n\t\tif (!response.ok) {\n\t\t\tconst details = toErrorDetails({\n\t\t\t\tcode: resolveErrorCode(parsed),\n\t\t\t\tendpoint: context.endpoint,\n\t\t\t\tmessage: resolveErrorMessage(\n\t\t\t\t\tparsed,\n\t\t\t\t\t`Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`,\n\t\t\t\t),\n\t\t\t\tmethod: context.method,\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: details.message,\n\t\t\t\terrorDetails: details,\n\t\t\t\tok: false,\n\t\t\t\traw: parsed,\n\t\t\t\tstatus: response.status,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tdata: (parsed as T) ?? null,\n\t\t\terror: null,\n\t\t\terrorDetails: null,\n\t\t\tok: true,\n\t\t\traw: parsed,\n\t\t\tstatus: response.status,\n\t\t};\n\t} catch (callError) {\n\t\tconst message =\n\t\t\tcallError instanceof Error ? callError.message : String(callError);\n\t\tconst details = toErrorDetails({\n\t\t\tcause: message,\n\t\t\tcode: \"NETWORK_ERROR\",\n\t\t\tendpoint: context.endpoint,\n\t\t\thint: \"Check auth server URL, DNS, and network reachability.\",\n\t\t\tmessage: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\n\t\t\tmethod: context.method,\n\t\t\tstatus: 0,\n\t\t});\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: details.message,\n\t\t\terrorDetails: details,\n\t\t\tok: false,\n\t\t\traw: null,\n\t\t\tstatus: 0,\n\t\t};\n\t}\n}\n\nfunction executePostWithCompatibleInput<\n\tTPayload extends AthenaAuthFetchCompatibleInput,\n\tTResult,\n>(\n\tconfig: AthenaAuthClientConfig,\n\tcontext: AuthRequestContext,\n\tinput: TPayload,\n\toptions?: AthenaAuthCallOptions,\n) {\n\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\treturn callAuthEndpoint<TResult>(\n\t\tconfig,\n\t\tcontext,\n\t\tpayload ?? {},\n\t\tundefined,\n\t\tmergedOptions,\n\t);\n}\n\nfunction executePostWithOptionalInput<TResult>(\n\tconfig: AthenaAuthClientConfig,\n\tcontext: AuthRequestContext,\n\tinput?: AthenaAuthFetchCompatibleInput,\n\toptions?: AthenaAuthCallOptions,\n) {\n\tconst { fetchOptions } = extractFetchOptions(input);\n\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\treturn callAuthEndpoint<TResult>(\n\t\tconfig,\n\t\tcontext,\n\t\t{},\n\t\tundefined,\n\t\tmergedOptions,\n\t);\n}\n\nfunction executeGetWithCompatibleInput<TResult>(\n\tconfig: AthenaAuthClientConfig,\n\tcontext: AuthRequestContext,\n\tinput?: AthenaAuthFetchCompatibleInput,\n\toptions?: AthenaAuthCallOptions,\n) {\n\tconst { fetchOptions } = extractFetchOptions(input);\n\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\treturn callAuthEndpoint<TResult>(\n\t\tconfig,\n\t\tcontext,\n\t\tundefined,\n\t\tundefined,\n\t\tmergedOptions,\n\t);\n}\n\nfunction executeGetWithQueryCompatibleInput<TQuery extends object, TResult>(\n\tconfig: AthenaAuthClientConfig,\n\tcontext: AuthRequestContext,\n\tinput?: { query?: TQuery } & AthenaAuthFetchCompatibleInput,\n\toptions?: AthenaAuthCallOptions,\n) {\n\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\tconst query = (\n\t\tpayload as { query?: Record<string, AthenaAuthQueryValue> } | undefined\n\t)?.query;\n\treturn callAuthEndpoint<TResult>(\n\t\tconfig,\n\t\tcontext,\n\t\tundefined,\n\t\tquery,\n\t\tmergedOptions,\n\t);\n}\n\n/**\n * Internal auth-module assembly used by the root client factory.\n */\nexport function createAuthModule(\n\tconfig: AthenaAuthClientConfig = {},\n\truntimeOptions: InternalAuthModuleRuntimeOptions = {},\n): InternalAthenaAuthModule {\n\tconst normalizedBaseUrl = normalizeBaseUrl(config.baseUrl);\n\tconst resolvedConfig: AthenaAuthClientConfig = {\n\t\t...config,\n\t\tbaseUrl: normalizedBaseUrl,\n\t};\n\n\tconst request = async <T = unknown>(\n\t\tinput: AthenaAuthRequestInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t): Promise<AthenaAuthResult<T>> => {\n\t\tconst method =\n\t\t\tinput.method ??\n\t\t\t(input.body === undefined ? inferDefaultMethod(input.endpoint) : \"POST\");\n\t\tconst contextOptions = await runtimeOptions.resolveCallOptions?.();\n\t\tconst mergedOptions = mergeCallOptions(\n\t\t\tmergeCallOptions(contextOptions, input.fetchOptions),\n\t\t\toptions,\n\t\t);\n\t\treturn await callAuthEndpoint<T>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: input.endpoint, method },\n\t\t\tinput.body,\n\t\t\tinput.query,\n\t\t\tmergedOptions,\n\t\t);\n\t};\n\n\tconst postGeneric = <T = unknown>(\n\t\tendpoint: AthenaAuthEndpointPath,\n\t\tinput?: AthenaAuthFetchCompatibleInput & object,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\treturn request<T>(\n\t\t\t{\n\t\t\t\tbody: payload ?? {},\n\t\t\t\tendpoint,\n\t\t\t\tfetchOptions,\n\t\t\t\tmethod: \"POST\",\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst getGeneric = <T = unknown>(\n\t\tendpoint: AthenaAuthEndpointPath,\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { fetchOptions } = extractFetchOptions(input);\n\t\treturn request<T>(\n\t\t\t{\n\t\t\t\tendpoint,\n\t\t\t\tfetchOptions,\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery:\n\t\t\t\t\tendpoint === \"/get-session\"\n\t\t\t\t\t\t? withFreshSessionLookupQuery(input)\n\t\t\t\t\t\t: extractQueryFromInput(input),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst getWithQuery = <\n\t\tT = unknown,\n\t\tTQuery extends object = Record<string, AthenaAuthQueryValue>,\n\t>(\n\t\tendpoint: AthenaAuthEndpointPath,\n\t\tinput?: AthenaAuthFetchCompatibleInput & {\n\t\t\tquery?: TQuery;\n\t\t},\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\tconst query = (payload as { query?: TQuery } | undefined)?.query as\n\t\t\t| Record<string, AthenaAuthQueryValue>\n\t\t\t| undefined;\n\t\treturn request<T>(\n\t\t\t{\n\t\t\t\tendpoint,\n\t\t\t\tfetchOptions,\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery,\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst withReactEmailRoute = (route: AthenaAuthEndpointPath) => ({\n\t\t...resolvedConfig.reactEmail,\n\t\troute,\n\t});\n\n\tconst resolveAdminEmailPayload = <\n\t\tTInput extends AthenaAuthFetchCompatibleInput & {\n\t\t\treact?: AthenaAuthReactEmailRenderInput;\n\t\t},\n\t>(\n\t\troute: \"/admin/email/create\" | \"/admin/email/update\",\n\t\tinput: TInput,\n\t) =>\n\t\tresolveReactEmailPayloadFields(\n\t\t\tinput,\n\t\t\t{\n\t\t\t\thtmlField: \"htmlBody\",\n\t\t\t\ttextField: \"textBody\",\n\t\t\t},\n\t\t\twithReactEmailRoute(route),\n\t\t);\n\n\tconst resolveAdminEmailTemplatePayload = <\n\t\tTInput extends AthenaAuthFetchCompatibleInput & {\n\t\t\treact?: AthenaAuthReactEmailRenderInput;\n\t\t},\n\t>(\n\t\troute: \"/admin/email-template/create\" | \"/admin/email-template/update\",\n\t\tinput: TInput,\n\t) =>\n\t\tresolveReactEmailPayloadFields(\n\t\t\ttoReactEmailTemplateCompatibilityInput(input),\n\t\t\t{\n\t\t\t\thtmlField: \"htmlTemplate\",\n\t\t\t\ttextField: \"textTemplate\",\n\t\t\t\tvariablesField: \"variables\",\n\t\t\t},\n\t\t\twithReactEmailRoute(route),\n\t\t).then((payload) => {\n\t\t\tconst normalizedPayload = normalizeAdminEmailTemplatePayload(\n\t\t\t\tpayload as Record<string, unknown>,\n\t\t\t);\n\t\t\tif (\n\t\t\t\t\"variables\" in payload &&\n\t\t\t\tpayload.variables !== undefined &&\n\t\t\t\tpayload.variables !== null\n\t\t\t) {\n\t\t\t\tassertAthenaAuthTemplateVariables(\n\t\t\t\t\tpayload.variables,\n\t\t\t\t\t`${route} variables`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn normalizedPayload;\n\t\t});\n\n\tconst requireSession: AthenaAuthBindings[\"requireSession\"] = async (\n\t\tinput,\n\t\toptions,\n\t) => {\n\t\tconst sessionInput = input?.fetchOptions\n\t\t\t? { fetchOptions: input.fetchOptions }\n\t\t\t: undefined;\n\t\tconst sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n\t\t\t\"/get-session\",\n\t\t\tsessionInput,\n\t\t\toptions,\n\t\t);\n\n\t\tif (!sessionResult.ok || sessionResult.data === null) {\n\t\t\treturn toSessionGuardFailure(sessionResult);\n\t\t}\n\n\t\treturn {\n\t\t\tok: true,\n\t\t\tsession: sessionResult.data,\n\t\t};\n\t};\n\n\tconst getUser: AthenaAuthBindings[\"getUser\"] = async (input, options) => {\n\t\tconst sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n\t\t\t\"/get-session\",\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\n\t\tif (!sessionResult.ok) {\n\t\t\treturn {\n\t\t\t\t...sessionResult,\n\t\t\t\tdata: null,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t...sessionResult,\n\t\t\tdata: {\n\t\t\t\tuser: sessionResult.data?.user ?? null,\n\t\t\t} satisfies AthenaAuthGetUserResponse,\n\t\t};\n\t};\n\n\tconst requirePermission = async (\n\t\tendpoint: \"/admin/has-permission\" | \"/organization/has-permission\",\n\t\tinput: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t): Promise<AthenaAuthGuardResult> => {\n\t\tconst sessionGuard = await requireSession(\n\t\t\tinput?.fetchOptions ? { fetchOptions: input.fetchOptions } : undefined,\n\t\t\toptions,\n\t\t);\n\n\t\tif (!sessionGuard.ok) {\n\t\t\treturn sessionGuard;\n\t\t}\n\n\t\tconst permissionResult =\n\t\t\tawait postGeneric<AthenaAdminHasPermissionResponse>(\n\t\t\t\tendpoint,\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t);\n\n\t\tif (!permissionResult.ok) {\n\t\t\treturn toPermissionGuardFailure(permissionResult, {\n\t\t\t\tdata: sessionGuard.session,\n\t\t\t\terror: null,\n\t\t\t\terrorDetails: null,\n\t\t\t\tok: true,\n\t\t\t\traw: sessionGuard.session,\n\t\t\t\tstatus: 200,\n\t\t\t});\n\t\t}\n\n\t\tif (!permissionResult.data?.success) {\n\t\t\treturn {\n\t\t\t\terror: permissionResult.data?.error ?? \"Forbidden\",\n\t\t\t\tok: false,\n\t\t\t\tpermissionResult,\n\t\t\t\treason: \"forbidden\",\n\t\t\t\tsessionResult: {\n\t\t\t\t\tdata: sessionGuard.session,\n\t\t\t\t\terror: null,\n\t\t\t\t\terrorDetails: null,\n\t\t\t\t\tok: true,\n\t\t\t\t\traw: sessionGuard.session,\n\t\t\t\t\tstatus: 200,\n\t\t\t\t},\n\t\t\t\tstatus: 403,\n\t\t\t};\n\t\t}\n\n\t\treturn sessionGuard;\n\t};\n\n\tconst listUserEmailsWithFallback: AthenaAuthBindings[\"user\"][\"email\"][\"list\"] =\n\t\tasync (input, options) => {\n\t\t\tconst primary = await getWithQuery<\n\t\t\t\tAthenaAuthEmailListResponse,\n\t\t\t\tAthenaAuthEmailListQuery\n\t\t\t>(\"/email/list\", input, options);\n\t\t\tif (\n\t\t\t\tprimary.ok ||\n\t\t\t\tprimary.status !== 404 ||\n\t\t\t\tprimary.errorDetails?.code !== \"HTTP_ERROR\"\n\t\t\t) {\n\t\t\t\treturn primary;\n\t\t\t}\n\t\t\treturn getWithQuery<\n\t\t\t\tAthenaAuthEmailListResponse,\n\t\t\t\tAthenaAuthEmailListQuery\n\t\t\t>(\"/email-list\", input, options);\n\t\t};\n\n\tconst healthWithFallback: AthenaAuthBindings[\"health\"] = async (\n\t\tinput,\n\t\toptions,\n\t) => {\n\t\tconst primary = await getGeneric<AthenaAuthHealthResponse>(\n\t\t\t\"/health\",\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\t\tif (\n\t\t\tprimary.ok ||\n\t\t\tprimary.status !== 404 ||\n\t\t\tprimary.errorDetails?.code !== \"HTTP_ERROR\"\n\t\t) {\n\t\t\treturn primary;\n\t\t}\n\n\t\tconst fallback = await getGeneric<AthenaAuthOkResponse>(\n\t\t\t\"/ok\",\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\t\tif (!fallback.ok) {\n\t\t\treturn {\n\t\t\t\t...fallback,\n\t\t\t\tdata: null,\n\t\t\t};\n\t\t}\n\n\t\tconst fallbackStatus =\n\t\t\tisRecord(fallback.data) && typeof fallback.data.ok === \"boolean\"\n\t\t\t\t? fallback.data.ok\n\t\t\t\t\t? \"ok\"\n\t\t\t\t\t: \"error\"\n\t\t\t\t: \"ok\";\n\n\t\treturn {\n\t\t\t...fallback,\n\t\t\tdata: {\n\t\t\t\tstatus: fallbackStatus,\n\t\t\t},\n\t\t};\n\t};\n\n\tconst sessionStore =\n\t\tcreateAthenaAuthSessionController<AthenaAuthSessionResponse>();\n\tconst capabilitiesStore = createAthenaAuthCapabilitiesStore(\n\t\tconfig.capabilities,\n\t);\n\n\tconst capabilityDisabled = (\n\t\tfeature: string,\n\t\tendpoint: AthenaAuthEndpointPath,\n\t\tmethod: AthenaAuthMethod = \"POST\",\n\t): AthenaAuthResult<never> => ({\n\t\tdata: null,\n\t\terror: `${feature} is not enabled on this Athena Auth runtime`,\n\t\terrorDetails: {\n\t\t\tcode: \"ATHENA_AUTH_CAPABILITY_DISABLED\",\n\t\t\tendpoint,\n\t\t\thint: feature,\n\t\t\tmessage: `${feature} is not enabled on this Athena Auth runtime`,\n\t\t\tmethod,\n\t\t\tstatus: 501,\n\t\t},\n\t\tok: false,\n\t\traw: {\n\t\t\terror: {\n\t\t\t\tcode: \"ATHENA_AUTH_CAPABILITY_DISABLED\",\n\t\t\t\tfeature,\n\t\t\t\tstatus: 501,\n\t\t\t},\n\t\t},\n\t\tstatus: 501,\n\t});\n\n\tconst denySocial = (\n\t\tendpoint: AthenaAuthEndpointPath,\n\t): AthenaAuthResult<never> | null => {\n\t\tif (isSocialCapabilityEnabled(capabilitiesStore.getSnapshot())) {\n\t\t\treturn null;\n\t\t}\n\t\tif (capabilitiesStore.getSnapshot().status !== \"known\") {\n\t\t\treturn null;\n\t\t}\n\t\treturn capabilityDisabled(\"social\", endpoint);\n\t};\n\n\tconst gateCapability = <T>(\n\t\tdenied: AthenaAuthResult<never> | null,\n\t\trun: () => Promise<AthenaAuthResult<T>>,\n\t): Promise<AthenaAuthResult<T>> =>\n\t\tdenied ? Promise.resolve(denied as AthenaAuthResult<T>) : run();\n\n\tconst isSessionResponse = (\n\t\tvalue: unknown,\n\t): value is AthenaAuthSessionResponse => {\n\t\tif (!value || typeof value !== \"object\") {\n\t\t\treturn false;\n\t\t}\n\t\tconst record = value as Record<string, unknown>;\n\t\tconst session = record.session;\n\t\tconst user = record.user;\n\t\treturn (\n\t\t\t!!session &&\n\t\t\ttypeof session === \"object\" &&\n\t\t\ttypeof (session as { id?: unknown }).id === \"string\" &&\n\t\t\t!!user &&\n\t\t\ttypeof user === \"object\" &&\n\t\t\ttypeof (user as { id?: unknown }).id === \"string\"\n\t\t);\n\t};\n\n\tconst sessionFromSignIn = (\n\t\tvalue: unknown,\n\t): AthenaAuthSessionResponse | null => {\n\t\tif (!value || typeof value !== \"object\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst record = value as Record<string, unknown>;\n\t\tif (record.redirect === true) {\n\t\t\treturn null;\n\t\t}\n\t\tconst user = record.user;\n\t\tconst token = record.token;\n\t\tif (\n\t\t\t!user ||\n\t\t\ttypeof user !== \"object\" ||\n\t\t\ttypeof (user as { id?: unknown }).id !== \"string\"\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tconst userId = (user as { id: string }).id;\n\t\tconst sessionToken = typeof token === \"string\" ? token : undefined;\n\t\treturn {\n\t\t\tuser: user as AthenaAuthUser,\n\t\t\tsession: {\n\t\t\t\tid: sessionToken ?? `local:${userId}`,\n\t\t\t\ttoken: sessionToken,\n\t\t\t\tuserId,\n\t\t\t},\n\t\t};\n\t};\n\n\tconst fetchSessionResult = (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => getGeneric<AthenaAuthSessionResponse>(\"/get-session\", input, options);\n\n\tconst refreshSessionStore = async (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { epoch, skipped } = sessionStore.beginRefresh();\n\t\tif (skipped) {\n\t\t\treturn sessionStore.getSnapshot();\n\t\t}\n\t\ttry {\n\t\t\tconst result = await fetchSessionResult(input, options);\n\t\t\tif (result.ok) {\n\t\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\t\tok: true,\n\t\t\t\t\tsession: result.data ?? null,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst status = typeof result.status === \"number\" ? result.status : 0;\n\t\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: result.error ?? result,\n\t\t\t\t\tclearSession: status === 401,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\tok: false,\n\t\t\t\terror,\n\t\t\t\tclearSession: false,\n\t\t\t});\n\t\t}\n\t\treturn sessionStore.getSnapshot();\n\t};\n\n\t/**\n\t * After auth mutations, keep SSOT store current without bespoke app bridges.\n\t * Prefer embedded session payloads; otherwise refresh once.\n\t */\n\tconst applyAuthMutationToSessionStore = async <T>(\n\t\tresult: AthenaAuthResult<T>,\n\t\toptions?: { refreshIfMissing?: boolean },\n\t): Promise<AthenaAuthResult<T>> => {\n\t\tif (!result.ok) {\n\t\t\treturn result;\n\t\t}\n\t\tif (isSessionResponse(result.data)) {\n\t\t\tsessionStore.accept(result.data);\n\t\t\treturn result;\n\t\t}\n\t\tconst fromSignIn = sessionFromSignIn(result.data);\n\t\tif (fromSignIn) {\n\t\t\tsessionStore.accept(fromSignIn);\n\t\t\treturn result;\n\t\t}\n\t\tif (options?.refreshIfMissing !== false) {\n\t\t\tawait refreshSessionStore();\n\t\t}\n\t\treturn result;\n\t};\n\n\tconst patchActiveOrganization = (\n\t\torganizationId: string | null | undefined,\n\t) => {\n\t\tconst current = sessionStore.getSnapshot().session;\n\t\tif (!current?.session) {\n\t\t\treturn false;\n\t\t}\n\t\tsessionStore.accept({\n\t\t\t...current,\n\t\t\tsession: {\n\t\t\t\t...current.session,\n\t\t\t\tactiveOrganizationId:\n\t\t\t\t\torganizationId === undefined ? null : organizationId,\n\t\t\t},\n\t\t});\n\t\treturn true;\n\t};\n\n\tconst signOut = async (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\t// Cancel in-flight refresh immediately (INV-Q).\n\t\tsessionStore.invalidate(\"signOut\");\n\t\treturn executePostWithOptionalInput<AthenaAuthSignOutResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/sign-out\", method: \"POST\" },\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst snapshotToGetSessionResult = (\n\t\tsnap: ReturnType<typeof sessionStore.getSnapshot>,\n\t): AthenaAuthResult<AthenaAuthSessionResponse> => {\n\t\tif (snap.status === \"error\") {\n\t\t\treturn {\n\t\t\t\tdata: snap.session,\n\t\t\t\terror: String(\n\t\t\t\t\tsnap.error instanceof Error ? snap.error.message : snap.error,\n\t\t\t\t),\n\t\t\t\tok: false,\n\t\t\t\traw: snap.session,\n\t\t\t\tstatus: 502,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tdata: snap.session,\n\t\t\terror: null,\n\t\t\tok: true,\n\t\t\traw: snap.session,\n\t\t\tstatus: 200,\n\t\t};\n\t};\n\n\tconst waitForInFlightSession = () =>\n\t\tnew Promise<AthenaAuthResult<AthenaAuthSessionResponse>>((resolve) => {\n\t\t\tconst current = sessionStore.getSnapshot();\n\t\t\tif (current.status !== \"loading\" && current.status !== \"unknown\") {\n\t\t\t\tresolve(snapshotToGetSessionResult(current));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst unsub = sessionStore.subscribe((next) => {\n\t\t\t\tif (next.status !== \"loading\" && next.status !== \"unknown\") {\n\t\t\t\t\tunsub();\n\t\t\t\t\tresolve(snapshotToGetSessionResult(next));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\tconst getSession = async (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t): Promise<AthenaAuthResult<AthenaAuthSessionResponse>> => {\n\t\t// Epoch-gated via beginRefresh so setActive/signOut win over stale reads.\n\t\tconst { epoch, skipped } = sessionStore.beginRefresh();\n\t\tif (skipped) {\n\t\t\tconst snap = sessionStore.getSnapshot();\n\t\t\tif (snap.status === \"loading\" || snap.status === \"unknown\") {\n\t\t\t\t// Wait for the in-flight refresh. Returning ok:true + data:null\n\t\t\t\t// made Better Auth UI cache an empty session and skipToken\n\t\t\t\t// list-sessions / api-key/list forever.\n\t\t\t\treturn waitForInFlightSession();\n\t\t\t}\n\t\t\treturn snapshotToGetSessionResult(snap);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await fetchSessionResult(input, options);\n\t\t\tif (result.ok) {\n\t\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\t\tok: true,\n\t\t\t\t\tsession: result.data ?? null,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst status = typeof result.status === \"number\" ? result.status : 0;\n\t\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: result.error ?? result,\n\t\t\t\t\tclearSession: status === 401,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\tok: false,\n\t\t\t\terror,\n\t\t\t\tclearSession: false,\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t};\n\tconst revokeSessions = (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) =>\n\t\texecutePostWithOptionalInput<AthenaAuthStatusResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/revoke-sessions\", method: \"POST\" },\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\n\tconst revokeOtherSessions = (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) =>\n\t\texecutePostWithOptionalInput<AthenaAuthStatusResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/revoke-other-sessions\", method: \"POST\" },\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\n\tconst revokeSession = (\n\t\tinput: { token: string } & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) =>\n\t\texecutePostWithCompatibleInput<typeof input, AthenaAuthStatusResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/revoke-session\", method: \"POST\" },\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\n\tconst deleteUser = async (\n\t\tinput?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\t\tconst result = await callAuthEndpoint<AthenaDeleteUserResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/delete-user\", method: \"POST\" },\n\t\t\tpayload ?? {},\n\t\t\tundefined,\n\t\t\tmergedOptions,\n\t\t);\n\t\tif (result.ok) {\n\t\t\tsessionStore.invalidate(\"revoke\");\n\t\t}\n\t\treturn result;\n\t};\n\n\tconst deleteUserCallback = (\n\t\tinput?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\t\tconst query = (payload ?? {}) as AthenaDeleteUserCallbackRequest;\n\t\treturn callAuthEndpoint<AthenaDeleteUserResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/delete-user/callback\", method: \"GET\" },\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tcallbackURL: query.callbackURL,\n\t\t\t\ttoken: query.token,\n\t\t\t},\n\t\t\tmergedOptions,\n\t\t);\n\t};\n\n\tconst resolveResetPasswordToken = (\n\t\tinput: {\n\t\t\ttoken: string;\n\t\t\tcallbackURL?: string;\n\t\t} & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\t\tconst query = payload as\n\t\t\t| { token?: string; callbackURL?: string }\n\t\t\t| undefined;\n\t\tconst token = query?.token?.trim();\n\t\tif (!token) {\n\t\t\tthrow new Error(\"resolveResetPasswordToken requires a non-empty token\");\n\t\t}\n\t\tconst endpoint =\n\t\t\t`/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath;\n\t\treturn callAuthEndpoint<{ token?: string }>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint, method: \"GET\" },\n\t\t\tundefined,\n\t\t\tquery?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\n\t\t\tmergedOptions,\n\t\t);\n\t};\n\n\tconst organization: AthenaAuthOrganizationBindings = {\n\t\tcheckSlug: (input, options) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationCheckSlugRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t{ available: boolean }\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/check-slug\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tcreate: (input, options) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationCreateRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthOrganization\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/create\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tdelete: (input, options) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationDeleteRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/delete\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tgetFull: (input, options) =>\n\t\t\texecuteGetWithQueryCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationGetFullQuery,\n\t\t\t\t{\n\t\t\t\t\torganization: AthenaAuthOrganization;\n\t\t\t\t\tmembers?: AthenaAuthOrganizationMember[];\n\t\t\t\t\tinvitations?: AthenaAuthOrganizationInvitation[];\n\t\t\t\t}\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/get-full-organization\", method: \"GET\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\thasPermission: (input, options) =>\n\t\t\tpostGeneric<AthenaAdminHasPermissionResponse>(\n\t\t\t\t\"/organization/has-permission\",\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tinvitation: {\n\t\t\taccept: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationInvitationActionRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/accept-invitation\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tcancel: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationInvitationActionRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/cancel-invitation\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tget: (input, options) =>\n\t\t\t\texecuteGetWithQueryCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationGetInvitationQuery,\n\t\t\t\t\tAthenaAuthOrganizationInvitation\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/get-invitation\", method: \"GET\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tlist: (input, options) =>\n\t\t\t\texecuteGetWithQueryCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationListInvitationsQuery,\n\t\t\t\t\tAthenaAuthOrganizationInvitation[]\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/list-invitations\", method: \"GET\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\treject: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationInvitationActionRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/reject-invitation\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t},\n\t\tleave: (input, options) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationLeaveRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/leave\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tlist: (input, options) =>\n\t\t\tgetGeneric<AthenaAuthOrganization[]>(\n\t\t\t\t\"/organization/list\",\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tlistUserInvitations: (input, options) =>\n\t\t\texecuteGetWithQueryCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationListUserInvitationsQuery,\n\t\t\t\tAthenaAuthOrganizationInvitation[]\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/list-user-invitations\", method: \"GET\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tmember: {\n\t\t\tgetActive: (input, options) =>\n\t\t\t\texecuteGetWithCompatibleInput<AthenaAuthOrganizationMember>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/get-active-member\", method: \"GET\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tinvite: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationInviteMemberRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthOrganizationInvitation\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/invite-member\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tlist: (input, options) =>\n\t\t\t\texecuteGetWithQueryCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationListMembersQuery,\n\t\t\t\t\tAthenaAuthOrganizationMember[]\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/list-members\", method: \"GET\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tremove: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationRemoveMemberRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/remove-member\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tupdateRole: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationUpdateMemberRoleRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/update-member-role\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t},\n\t\trequirePermission: (input, options) =>\n\t\t\trequirePermission(\"/organization/has-permission\", input, options),\n\t\tsetActive: async (input, options) => {\n\t\t\tconst result = await executePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationSetActiveRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/set-active\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\tif (!result.ok) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tconst organizationId =\n\t\t\t\tinput && typeof input === \"object\" && \"organizationId\" in input\n\t\t\t\t\t? (input as AthenaAuthOrganizationSetActiveRequest).organizationId\n\t\t\t\t\t: undefined;\n\t\t\tif (isSessionResponse(result.data)) {\n\t\t\t\tsessionStore.accept(result.data);\n\t\t\t}\n\t\t\t// Optimistic patch cancels in-flight getSession (INV-Q stale org).\n\t\t\tpatchActiveOrganization(organizationId ?? null);\n\t\t\t// Always re-read live session. Cookie-cache get-session would snap\n\t\t\t// the store back to the previous organization.\n\t\t\tawait refreshSessionStore();\n\t\t\treturn result;\n\t\t},\n\t\tupdate: (input, options) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationUpdateRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthOrganization\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/update\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t};\n\n\tconst authResetPassword = Object.assign(\n\t\t(\n\t\t\tinput: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/reset-password\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\t{\n\t\t\ttoken: resolveResetPasswordToken,\n\t\t},\n\t);\n\n\tconst collectRevokeTokens = (\n\t\tinput: Parameters<AthenaAuthBindings[\"session\"][\"revoke\"]>[0],\n\t): string[] => {\n\t\tif (Array.isArray(input)) {\n\t\t\treturn input\n\t\t\t\t.map((item) =>\n\t\t\t\t\ttypeof item === \"string\"\n\t\t\t\t\t\t? item\n\t\t\t\t\t\t: typeof (item as { token?: string })?.token === \"string\"\n\t\t\t\t\t\t\t? (item as { token: string }).token\n\t\t\t\t\t\t\t: \"\",\n\t\t\t\t)\n\t\t\t\t.filter((token) => token.trim().length > 0);\n\t\t}\n\t\tif (!input || typeof input !== \"object\") {\n\t\t\treturn [];\n\t\t}\n\t\tconst parsed = input as { token?: string; tokens?: string[] };\n\t\tif (Array.isArray(parsed.tokens)) {\n\t\t\treturn parsed.tokens.filter((token) => token.trim().length > 0);\n\t\t}\n\t\tif (typeof parsed.token === \"string\" && parsed.token.trim().length > 0) {\n\t\t\treturn [parsed.token];\n\t\t}\n\t\treturn [];\n\t};\n\n\tconst executeSessionRevoke: AthenaAuthBindings[\"session\"][\"revoke\"] = (\n\t\tinput,\n\t\toptions,\n\t) => {\n\t\tif (Array.isArray(input)) {\n\t\t\tif (input.length === 0) {\n\t\t\t\tthrow new Error(\"session.revoke requires at least one session token\");\n\t\t\t}\n\t\t\tif (input.length === 1) {\n\t\t\t\treturn revokeSession(input[0], options);\n\t\t\t}\n\t\t\treturn revokeSessions(undefined, options);\n\t\t}\n\n\t\tconst parsed = input as AthenaAuthGenericInput & {\n\t\t\ttoken?: string;\n\t\t\ttokens?: string[];\n\t\t};\n\t\tconst tokens = Array.isArray(parsed.tokens)\n\t\t\t? parsed.tokens.filter((token) => token.trim().length > 0)\n\t\t\t: undefined;\n\n\t\tif (tokens && tokens.length > 1) {\n\t\t\treturn revokeSessions(\n\t\t\t\tparsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : undefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t}\n\n\t\tif (tokens && tokens.length === 1) {\n\t\t\treturn revokeSession(\n\t\t\t\t{ fetchOptions: parsed.fetchOptions, token: tokens[0] },\n\t\t\t\toptions,\n\t\t\t);\n\t\t}\n\n\t\tconst token = parsed.token?.trim();\n\t\tif (!token) {\n\t\t\tthrow new Error(\n\t\t\t\t\"session.revoke requires a non-empty token or a non-empty token list\",\n\t\t\t);\n\t\t}\n\n\t\treturn revokeSession(\n\t\t\t{\n\t\t\t\tfetchOptions: parsed.fetchOptions,\n\t\t\t\ttoken,\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst sessionRevokeBinding: AthenaAuthBindings[\"session\"][\"revoke\"] = async (\n\t\tinput,\n\t\toptions,\n\t) => {\n\t\tconst tokens = collectRevokeTokens(input);\n\t\tconst result = await executeSessionRevoke(input, options);\n\t\tconst revokedAll =\n\t\t\t(Array.isArray(input) && input.length > 1) || tokens.length > 1;\n\t\tif (\n\t\t\tresult.ok &&\n\t\t\t(revokedAll || sessionStore.shouldInvalidateForRevokedTokens(tokens))\n\t\t) {\n\t\t\tsessionStore.invalidate(\"revoke\");\n\t\t}\n\t\treturn result;\n\t};\n\n\tconst adminUserSessionRevokeBinding: AthenaAuthBindings[\"admin\"][\"user\"][\"session\"][\"revoke\"] =\n\t\t(input, options) => {\n\t\t\tconst requireUserId = (userId: string | undefined): string => {\n\t\t\t\tconst trimmed = String(userId ?? \"\").trim();\n\t\t\t\tif (!trimmed) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"admin.user.session.revoke requires a non-empty userId\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn trimmed;\n\t\t\t};\n\n\t\t\tconst requireSinglePluralUserId = (\n\t\t\t\tsessions: AthenaAdminRevokeUserSessionRequest[],\n\t\t\t): AthenaAdminRevokeUserSessionsRequest => {\n\t\t\t\tconst uniqueUserIds = [\n\t\t\t\t\t...new Set(sessions.map((session) => requireUserId(session.userId))),\n\t\t\t\t];\n\t\t\t\tif (uniqueUserIds.length !== 1) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"admin.user.session.revoke requires the same userId across plural payloads\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn { userId: uniqueUserIds[0] };\n\t\t\t};\n\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tif (input.length === 0) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"admin.user.session.revoke requires at least one payload item\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (input.length === 1) {\n\t\t\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\t\t\"/admin/revoke-user-session\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...input[0],\n\t\t\t\t\t\t\tuserId: requireUserId(input[0].userId),\n\t\t\t\t\t\t} as AthenaAuthGenericInput,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\t\"/admin/revoke-user-sessions\",\n\t\t\t\t\trequireSinglePluralUserId(input),\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst parsed = input as AthenaAuthGenericInput & {\n\t\t\t\tsessions?: AthenaAdminRevokeUserSessionRequest[];\n\t\t\t\tsessionToken?: string;\n\t\t\t\tuserId?: string;\n\t\t\t};\n\t\t\tconst sessions = parsed.sessions;\n\n\t\t\tif (sessions && sessions.length === 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"admin.user.session.revoke requires at least one payload item\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (sessions && sessions.length === 1) {\n\t\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\t\"/admin/revoke-user-session\",\n\t\t\t\t\t{\n\t\t\t\t\t\t...sessions[0],\n\t\t\t\t\t\tfetchOptions: parsed.fetchOptions,\n\t\t\t\t\t\tuserId: requireUserId(sessions[0].userId),\n\t\t\t\t\t} as AthenaAuthGenericInput,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (sessions && sessions.length > 1) {\n\t\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\t\"/admin/revoke-user-sessions\",\n\t\t\t\t\t{\n\t\t\t\t\t\t...requireSinglePluralUserId(sessions),\n\t\t\t\t\t\tfetchOptions: parsed.fetchOptions,\n\t\t\t\t\t} as AthenaAuthGenericInput,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst normalizedUserId = requireUserId(parsed.userId);\n\n\t\t\tif (!parsed.sessionToken) {\n\t\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\t\"/admin/revoke-user-sessions\",\n\t\t\t\t\t{\n\t\t\t\t\t\tfetchOptions: parsed.fetchOptions,\n\t\t\t\t\t\tuserId: normalizedUserId,\n\t\t\t\t\t} as AthenaAuthGenericInput,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\"/admin/revoke-user-session\",\n\t\t\t\t{\n\t\t\t\t\t...parsed,\n\t\t\t\t\tuserId: normalizedUserId,\n\t\t\t\t} as AthenaAuthGenericInput,\n\t\t\t\toptions,\n\t\t\t);\n\t\t};\n\n\tconst auth: AthenaAuthBindings = {\n\t\taccount: {\n\t\t\tlist: (input, options) => getGeneric(\"/list-accounts\", input, options),\n\t\t\tunlink: (input, options) =>\n\t\t\t\tpostGeneric(\"/unlink-account\", input, options),\n\t\t},\n\t\tadmin: {\n\t\t\tapiKey: {\n\t\t\t\tcreate: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/api-key/create\", input, options),\n\t\t\t},\n\t\t\tathenaClient: {\n\t\t\t\tcreate: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/athena-client/create\", input, options),\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/athena-client/list\", input, options),\n\t\t\t},\n\t\t\tauditLog: {\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/audit-log/list\", input, options),\n\t\t\t},\n\t\t\temail: {\n\t\t\t\tcreate: async (input, options) =>\n\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\"/admin/email/create\",\n\t\t\t\t\t\tawait resolveAdminEmailPayload(\"/admin/email/create\", input),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t\tdelete: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/email/delete\", input, options),\n\t\t\t\teventType: {\n\t\t\t\t\tlist: (input, options) =>\n\t\t\t\t\t\tgetWithQuery(\"/admin/email-event-type/list\", input, options),\n\t\t\t\t},\n\t\t\t\tfailure: {\n\t\t\t\t\tcreate: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\"/admin/email-failure/create\", input, options),\n\t\t\t\t\tdelete: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\"/admin/email-failure/delete\", input, options),\n\t\t\t\t\tget: (input, options) =>\n\t\t\t\t\t\tgetWithQuery(\"/admin/email-failure/get\", input, options),\n\t\t\t\t\tlist: (input, options) =>\n\t\t\t\t\t\tgetWithQuery(\"/admin/email-failure/list\", input, options),\n\t\t\t\t\tupdate: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\"/admin/email-failure/update\", input, options),\n\t\t\t\t},\n\t\t\t\tget: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/email/get\", input, options),\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/email/list\", input, options),\n\t\t\t\ttemplate: {\n\t\t\t\t\tcreate: async (input, options) =>\n\t\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\t\"/admin/email-template/create\",\n\t\t\t\t\t\t\tawait resolveAdminEmailTemplatePayload(\n\t\t\t\t\t\t\t\t\"/admin/email-template/create\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t),\n\t\t\t\t\tdelete: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\"/admin/email-template/delete\", input, options),\n\t\t\t\t\tget: (input, options) =>\n\t\t\t\t\t\tgetWithQuery(\"/admin/email-template/get\", input, options),\n\t\t\t\t\tlist: (input, options) =>\n\t\t\t\t\t\tgetWithQuery(\"/admin/email-template/list\", input, options),\n\t\t\t\t\tsend: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\t\"/admin/email-template/send\",\n\t\t\t\t\t\t\tnormalizeAdminEmailTemplateSendPayload(\n\t\t\t\t\t\t\t\textractFetchOptions(input).payload as Record<string, unknown>,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t),\n\t\t\t\t\tupdate: async (input, options) =>\n\t\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\t\"/admin/email-template/update\",\n\t\t\t\t\t\t\tawait resolveAdminEmailTemplatePayload(\n\t\t\t\t\t\t\t\t\"/admin/email-template/update\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tupdate: async (input, options) =>\n\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\"/admin/email/update\",\n\t\t\t\t\t\tawait resolveAdminEmailPayload(\"/admin/email/update\", input),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t},\n\t\t\temailEventType: {\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/email-event-type/list\", input, options),\n\t\t\t},\n\t\t\temailTemplate: {\n\t\t\t\tcreate: async (input, options) =>\n\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\"/admin/email-template/create\",\n\t\t\t\t\t\tawait resolveAdminEmailTemplatePayload(\n\t\t\t\t\t\t\t\"/admin/email-template/create\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t\tdelete: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/email-template/delete\", input, options),\n\t\t\t\tget: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/email-template/get\", input, options),\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/email-template/list\", input, options),\n\t\t\t\tsend: (input, options) =>\n\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\"/admin/email-template/send\",\n\t\t\t\t\t\tnormalizeAdminEmailTemplateSendPayload(\n\t\t\t\t\t\t\textractFetchOptions(input).payload as Record<string, unknown>,\n\t\t\t\t\t\t),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t\tupdate: async (input, options) =>\n\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\"/admin/email-template/update\",\n\t\t\t\t\t\tawait resolveAdminEmailTemplatePayload(\n\t\t\t\t\t\t\t\"/admin/email-template/update\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t},\n\t\t\thasPermission: (input, options) =>\n\t\t\t\tpostGeneric<AthenaAdminHasPermissionResponse>(\n\t\t\t\t\t\"/admin/has-permission\",\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\trequirePermission: (input, options) =>\n\t\t\t\trequirePermission(\"/admin/has-permission\", input, options),\n\t\t\tlistUsers: (input, options) =>\n\t\t\t\tgetWithQuery(\"/admin/list-users\", input, options),\n\t\t\tgetUser: (input, options) =>\n\t\t\t\tgetWithQuery(\"/admin/get-user\", input, options),\n\t\t\tcreateUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/create-user\", input, options),\n\t\t\tupdateUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/update-user\", input, options),\n\t\t\tsetRole: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/set-role\", input, options),\n\t\t\tbanUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/ban-user\", input, options),\n\t\t\tunbanUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/unban-user\", input, options),\n\t\t\trevokeUserSessions: adminUserSessionRevokeBinding,\n\t\t\tremoveUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/remove-user\", input, options),\n\t\t\timpersonateUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/impersonate-user\", input, options),\n\t\t\tstopImpersonating: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/stop-impersonating\", input, options),\n\t\t\trole: {\n\t\t\t\tset: (input, options) => postGeneric(\"/admin/set-role\", input, options),\n\t\t\t},\n\t\t\tuser: {\n\t\t\t\tget: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/get-user\", input, options),\n\t\t\t\tupdate: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/update-user\", input, options),\n\t\t\t\tban: (input, options) => postGeneric(\"/admin/ban-user\", input, options),\n\t\t\t\tcreate: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/create-user\", input, options),\n\t\t\t\timpersonate: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/impersonate-user\", input, options),\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/list-users\", input, options),\n\t\t\t\tremove: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/remove-user\", input, options),\n\t\t\t\tsession: {\n\t\t\t\t\tlist: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\"/admin/list-user-sessions\", input, options),\n\t\t\t\t\trevoke: adminUserSessionRevokeBinding,\n\t\t\t\t},\n\t\t\t\tsetPassword: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/set-user-password\", input, options),\n\t\t\t\tstopImpersonating: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/stop-impersonating\", input, options),\n\t\t\t\tunban: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/unban-user\", input, options),\n\t\t\t},\n\t\t},\n\t\tapiKey: {\n\t\t\tcreate: (input, options) =>\n\t\t\t\tpostGeneric(\"/api-key/create\", input, options),\n\t\t\tdelete: (input, options) =>\n\t\t\t\tpostGeneric(\"/api-key/delete\", input, options),\n\t\t\tdeleteAllExpired: (input, options) =>\n\t\t\t\texecutePostWithOptionalInput<AthenaApiKeyDeleteAllExpiredResponse>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/api-key/delete-all-expired-api-keys\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tget: (input, options) => getWithQuery(\"/api-key/get\", input, options),\n\t\t\tlist: (input, options) => getWithQuery(\"/api-key/list\", input, options),\n\t\t\tupdate: (input, options) =>\n\t\t\t\tpostGeneric(\"/api-key/update\", input, options),\n\t\t\tverify: (input, options) =>\n\t\t\t\tpostGeneric(\"/api-key/verify\", input, options),\n\t\t},\n\t\tcallback: {\n\t\t\tprovider: (input, options) => {\n\t\t\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\t\t\tconst parsed = payload as\n\t\t\t\t\t| {\n\t\t\t\t\t\t\tprovider?: string;\n\t\t\t\t\t\t\tcode?: string;\n\t\t\t\t\t\t\tstate?: string;\n\t\t\t\t\t\t}\n\t\t\t\t\t| undefined;\n\t\t\t\tconst provider = String(parsed?.provider ?? \"\").trim();\n\t\t\t\tif (!provider) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"callback.provider requires a non-empty provider value\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst code = String(parsed?.code ?? \"\").trim();\n\t\t\t\tconst state = String(parsed?.state ?? \"\").trim();\n\t\t\t\tif (!(code && state)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"callback.provider requires non-empty code and state values\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst endpoint =\n\t\t\t\t\t`/callback/${encodeURIComponent(provider)}` as AthenaAuthEndpointPath;\n\t\t\t\treturn request(\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint,\n\t\t\t\t\t\tfetchOptions,\n\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tchangeEmail: (input, options) =>\n\t\t\tpostGeneric(\"/change-email\", input, options),\n\t\tchangeEmailVerify: (input, options) =>\n\t\t\tgetWithQuery(\"/change-email/verify\", input, options),\n\t\tchangePassword: (input, options) =>\n\t\t\tpostGeneric(\"/change-password\", input, options),\n\t\tdeleteUser: {\n\t\t\tcallback: deleteUserCallback,\n\t\t},\n\t\tdeleteUserVerify: (input, options) =>\n\t\t\tgetWithQuery(\"/delete-user/verify\", input, options),\n\t\terror: (input, options) => getGeneric(\"/error\", input, options),\n\t\tforgetPassword: (input, options) =>\n\t\t\tpostGeneric(\"/forget-password\", input, options),\n\t\tgetAccessToken: (input, options) =>\n\t\t\tpostGeneric(\"/get-access-token\", input, options),\n\t\tgetToken: (input, options) => postGeneric(\"/token\", input, options),\n\t\ttokenProvider: (options) =>\n\t\t\tcreateAthenaAuthTokenProvider(\n\t\t\t\t(input, callOptions) => postGeneric(\"/token\", input, callOptions),\n\t\t\t\toptions,\n\t\t\t),\n\t\tgetSession,\n\t\tgetUser,\n\t\thealth: healthWithFallback,\n\t\tlinkSocial: (input, options) =>\n\t\t\tgateCapability(denySocial(\"/link-social\"), () =>\n\t\t\t\tpostGeneric(\"/link-social\", input, options),\n\t\t\t),\n\t\tlistAccounts: (input, options) =>\n\t\t\tgetGeneric(\"/list-accounts\", input, options),\n\t\t// Better Auth UI flat method aliases (also nested under session/account/social/user).\n\t\tlistSessions: (input, options) =>\n\t\t\tgetGeneric(\"/list-sessions\", input, options),\n\t\tok: (input, options) => getGeneric(\"/ok\", input, options),\n\t\torganization,\n\t\tpasskey: createPasskeyModule({\n\t\t\tcapabilities: capabilitiesStore,\n\t\t\trequest,\n\t\t\tsessionController: sessionStore,\n\t\t}),\n\t\trefreshToken: (input, options) =>\n\t\t\tpostGeneric(\"/refresh-token\", input, options),\n\t\trequireSession,\n\t\tresetPassword: authResetPassword,\n\t\trevokeOtherSessions,\n\t\trevokeSession: sessionRevokeBinding,\n\t\tsendVerificationEmail: (input, options) =>\n\t\t\tpostGeneric(\"/send-verification-email\", input, options),\n\t\tsession: {\n\t\t\tlist: (input, options) => getGeneric(\"/list-sessions\", input, options),\n\t\t\trevoke: sessionRevokeBinding,\n\t\t\trevokeOther: revokeOtherSessions,\n\t\t\t// SSOT snapshot store (H7)\n\t\t\tgetSnapshot: () => sessionStore.getSnapshot(),\n\t\t\tget: () => sessionStore.getSnapshot().session,\n\t\t\t/**\n\t\t\t * Authoritative local write (org switch, sign-in payload apply).\n\t\t\t * Cancels in-flight refresh (INV-Q). Prefer mutation helpers that\n\t\t\t * already call this; advanced UI adapters may use it directly.\n\t\t\t */\n\t\t\tsetSession: (\n\t\t\t\tsession: Parameters<typeof sessionStore.setSession>[0],\n\t\t\t\tstatus?: Parameters<typeof sessionStore.setSession>[1],\n\t\t\t) => sessionStore.setSession(session, status),\n\t\t\t/**\n\t\t\t * Cold-start seed only. No-ops unless status is `unknown`.\n\t\t\t * Does not start a refresh or override a newer client mutation.\n\t\t\t */\n\t\t\thydrate: (state: Parameters<typeof sessionStore.hydrate>[0]) =>\n\t\t\t\tsessionStore.hydrate(state),\n\t\t\tinvalidate: (reason?: \"signOut\" | \"revoke\" | \"manual\") =>\n\t\t\t\tsessionStore.invalidate(reason),\n\t\t\trefresh: refreshSessionStore,\n\t\t\tsubscribe: (\n\t\t\t\tlistener: (\n\t\t\t\t\tsnapshot: ReturnType<typeof sessionStore.getSnapshot>,\n\t\t\t\t) => void,\n\t\t\t) => sessionStore.subscribe(listener),\n\t\t},\n\t\tcapabilities: {\n\t\t\tget: capabilitiesStore.get,\n\t\t\tgetSnapshot: capabilitiesStore.getSnapshot,\n\t\t\tset: (next: Parameters<typeof capabilitiesStore.set>[0]) =>\n\t\t\t\tcapabilitiesStore.set(next),\n\t\t\tmerge: (\n\t\t\t\tpatch: Parameters<typeof capabilitiesStore.merge>[0],\n\t\t\t\tmeta?: Parameters<typeof capabilitiesStore.merge>[1],\n\t\t\t) => capabilitiesStore.merge(patch, meta),\n\t\t\tmarkUnknown: (\n\t\t\t\tsource?: Parameters<typeof capabilitiesStore.markUnknown>[0],\n\t\t\t) => capabilitiesStore.markUnknown(source),\n\t\t\tsubscribe: (\n\t\t\t\tlistener: (value: ReturnType<typeof capabilitiesStore.get>) => void,\n\t\t\t) => capabilitiesStore.subscribe(listener),\n\t\t},\n\t\tsetPassword: (input, options) =>\n\t\t\tpostGeneric(\"/set-password\", input, options),\n\t\tsignIn: {\n\t\t\temail: async (input, options) =>\n\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\tawait postGeneric(\"/sign-in/email\", input, options),\n\t\t\t\t),\n\t\t\tsocial: (input, options) =>\n\t\t\t\tgateCapability(denySocial(\"/sign-in/social\"), async () =>\n\t\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\t\tawait postGeneric(\"/sign-in/social\", input, options),\n\t\t\t\t\t\t// Redirect-only social starts leave session unchanged.\n\t\t\t\t\t\t{ refreshIfMissing: false },\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\tusername: async (input, options) =>\n\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\tawait postGeneric(\"/sign-in/username\", input, options),\n\t\t\t\t),\n\t\t},\n\t\tsignOut,\n\t\tsignUp: {\n\t\t\temail: async (input, options) =>\n\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\tawait postGeneric(\"/sign-up/email\", input, options),\n\t\t\t\t),\n\t\t},\n\t\tsocial: {\n\t\t\tlink: (input, options) =>\n\t\t\t\tgateCapability(denySocial(\"/link-social\"), () =>\n\t\t\t\t\tpostGeneric(\"/link-social\", input, options),\n\t\t\t\t),\n\t\t\tsignIn: (\n\t\t\t\tinput: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\toptions?: AthenaAuthCallOptions,\n\t\t\t) =>\n\t\t\t\tgateCapability(denySocial(\"/sign-in/social\"), async () =>\n\t\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\t\tawait postGeneric(\"/sign-in/social\", input, options),\n\t\t\t\t\t\t{ refreshIfMissing: false },\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t},\n\t\ttwoFactor: {\n\t\t\tdisable: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/disable\", input, options),\n\t\t\tenable: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/enable\", input, options),\n\t\t\tgenerateBackupCodes: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaTwoFactorGenerateBackupCodesRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaTwoFactorGenerateBackupCodesResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/two-factor/generate-backup-codes\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tgetTotpUri: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/get-totp-uri\", input, options),\n\t\t\tsendOtp: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/send-otp\", input, options),\n\t\t\tverifyBackupCode: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/verify-backup-code\", input, options),\n\t\t\tverifyOtp: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/verify-otp\", input, options),\n\t\t\tverifyTotp: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/verify-totp\", input, options),\n\t\t},\n\t\tunlinkAccount: (input, options) =>\n\t\t\tgateCapability(denySocial(\"/unlink-account\"), () =>\n\t\t\t\tpostGeneric(\"/unlink-account\", input, options),\n\t\t\t),\n\t\tupdateUser: async (input, options) =>\n\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\tawait postGeneric(\"/update-user\", input, options),\n\t\t\t\t{ refreshIfMissing: true },\n\t\t\t),\n\t\tuser: {\n\t\t\tdelete: deleteUser,\n\t\t\temail: {\n\t\t\t\tlist: listUserEmailsWithFallback,\n\t\t\t},\n\t\t\tupdate: async (input, options) =>\n\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\tawait postGeneric(\"/update-user\", input, options),\n\t\t\t\t\t{ refreshIfMissing: true },\n\t\t\t\t),\n\t\t},\n\t\tverifyEmail: (input, options) => {\n\t\t\tconst queryInput: AthenaAuthGenericQueryInput = {\n\t\t\t\tfetchOptions: input.fetchOptions,\n\t\t\t\tquery: {\n\t\t\t\t\tcallbackURL: input.callbackURL,\n\t\t\t\t\ttoken: input.token,\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn getWithQuery<{ user: AthenaAuthUser; status: boolean }>(\n\t\t\t\t\"/verify-email\",\n\t\t\t\tqueryInput,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t};\n\n\tObject.defineProperty(auth, ATHENA_AUTH_BIND_BASE_URL, {\n\t\tconfigurable: true,\n\t\tenumerable: false,\n\t\tvalue: (baseUrl: string) => {\n\t\t\tresolvedConfig.baseUrl = normalizeBaseUrl(baseUrl);\n\t\t},\n\t});\n\n\treturn {\n\t\tauth,\n\t\tbaseUrl: normalizedBaseUrl,\n\t\tchangeEmail: (\n\t\t\tinput: AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t{ status: boolean; message?: string | null }\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/change-email\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tchangePassword: (\n\t\t\tinput: AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t{ token?: string | null; user: AthenaAuthUser }\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/change-password\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tclearOtherSessions: revokeOtherSessions,\n\t\tclearSession: revokeSession,\n\t\tclearSessions: revokeSessions,\n\t\tdeleteUser,\n\t\tdeleteUserCallback,\n\t\tforgetPassword: (\n\t\t\tinput: AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/forget-password\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tgetAccessToken: (\n\t\t\tinput: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaOAuthTokenBundle\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/get-access-token\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tgetToken: (\n\t\t\tinput?: AthenaAuthGetTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthGetTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthToken\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/token\", method: \"POST\" },\n\t\t\t\tinput ??\n\t\t\t\t\t({} as AthenaAuthGetTokenRequest & AthenaAuthFetchCompatibleInput),\n\t\t\t\toptions,\n\t\t\t),\n\t\ttokenProvider: (options) =>\n\t\t\tcreateAthenaAuthTokenProvider(\n\t\t\t\t(input, callOptions) =>\n\t\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\t\tAthenaAuthGetTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\t\tAthenaAuthToken\n\t\t\t\t\t>(\n\t\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t\t{ endpoint: \"/token\", method: \"POST\" },\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tcallOptions,\n\t\t\t\t\t),\n\t\t\t\toptions,\n\t\t\t),\n\t\tgetSession,\n\t\tgetUser,\n\t\tlinkSocial: (\n\t\t\tinput: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\tgateCapability(denySocial(\"/link-social\"), () =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthSocialRedirectResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/link-social\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t),\n\t\tlistAccounts: (\n\t\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecuteGetWithCompatibleInput<AthenaAuthLinkedAccount[]>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/list-accounts\", method: \"GET\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tlistSessions: (\n\t\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecuteGetWithCompatibleInput<AthenaAuthSession[]>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/list-sessions\", method: \"GET\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tlogout: signOut,\n\t\torganization,\n\t\trefreshToken: (\n\t\t\tinput: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaOAuthTokenBundle\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/refresh-token\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\trequest,\n\t\trequireSession,\n\t\tresetPassword: (\n\t\t\tinput: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/reset-password\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tresolveResetPasswordToken,\n\t\trevokeOtherSessions,\n\t\trevokeSession,\n\t\trevokeSessions,\n\t\tsendVerificationEmail: (\n\t\t\tinput: AthenaSendVerificationEmailRequest &\n\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/send-verification-email\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tsignIn: {\n\t\t\temail: (\n\t\t\t\tinput: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\toptions?: AthenaAuthCallOptions,\n\t\t\t) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthSignInResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/sign-in/email\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tsocial: (\n\t\t\t\tinput: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\toptions?: AthenaAuthCallOptions,\n\t\t\t) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/sign-in/social\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tusername: (\n\t\t\t\tinput: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\toptions?: AthenaAuthCallOptions,\n\t\t\t) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthSignInResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/sign-in/username\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t},\n\t\tsignOut,\n\t\tsignUp: {\n\t\t\temail: (\n\t\t\t\tinput: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\toptions?: AthenaAuthCallOptions,\n\t\t\t) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthSignInResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/sign-up/email\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t},\n\t\tunlinkAccount: (\n\t\t\tinput: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\tgateCapability(denySocial(\"/unlink-account\"), () =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/unlink-account\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t),\n\t\tupdateUser: (\n\t\t\tinput: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/update-user\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tverifyEmail: (\n\t\t\tinput: AthenaVerifyEmailRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) => {\n\t\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\t\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\t\t\tconst query = payload as AthenaVerifyEmailRequest | undefined;\n\t\t\treturn callAuthEndpoint<{ user: AthenaAuthUser; status: boolean }>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/verify-email\", method: \"GET\" },\n\t\t\t\tundefined,\n\t\t\t\tquery\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcallbackURL: query.callbackURL,\n\t\t\t\t\t\t\ttoken: query.token,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t\tmergedOptions,\n\t\t\t);\n\t\t},\n\t};\n}\n","import type { BackendConfig } from \"./gateway/types.ts\";\nimport { normalizeAthenaGatewayBaseUrl } from \"./gateway/url.ts\";\nimport { buildSdkHeaderValue } from \"./sdk-version.ts\";\nimport {\n\tbuildAthenaRequestHeaders,\n\thasHeaderIgnoreCase,\n} from \"./utils/athena-request-headers.ts\";\n\nconst SDK_NAME = \"xylex-group/athena\";\n\nexport type AthenaRequestService = \"db\" | \"auth\" | \"chat\" | \"storage\";\nexport type AthenaRequestMethod =\n\t| \"GET\"\n\t| \"POST\"\n\t| \"PUT\"\n\t| \"PATCH\"\n\t| \"DELETE\"\n\t| \"HEAD\"\n\t| \"OPTIONS\";\n\nexport interface AthenaRequestQueryValueMap {\n\t[key: string]:\n\t\t| string\n\t\t| number\n\t\t| boolean\n\t\t| null\n\t\t| undefined\n\t\t| Array<string | number | boolean | null | undefined>;\n}\n\nexport interface AthenaRequestOptions {\n\t/** Per-request override for the canonical `X-Athena-Key` header. */\n\tapiKey?: string | null;\n\tbody?: RequestInit[\"body\"] | Record<string, unknown> | unknown[] | null;\n\tcredentials?: RequestInit[\"credentials\"];\n\theaders?: Record<string, string>;\n\tmethod?: AthenaRequestMethod;\n\tpath?: string;\n\tquery?: AthenaRequestQueryValueMap;\n\tresponseType?: \"json\" | \"text\" | \"response\";\n\tservice?: AthenaRequestService;\n\tsignal?: AbortSignal;\n\turl?: string;\n}\n\nexport interface AthenaRequestResponse<T = unknown> {\n\tdata: T | string | null;\n\theaders: Headers;\n\tok: boolean;\n\traw: Response;\n\tstatus: number;\n\tstatusText: string;\n}\n\nexport interface AthenaRawRequestConfig {\n\tapiKey?: string;\n\tauthUrl?: string;\n\tbackend?: BackendConfig;\n\tbaseUrl?: string;\n\tchatUrl?: string;\n\tclient?: string | null;\n\theaders?: Record<string, string>;\n\tjdbcUrl?: string | null;\n\tpgUri?: string | null;\n\tstorageUrl?: string;\n}\n\nexport interface AthenaRawRequestContext {\n\tbearerToken?: string | null;\n\tcookie?: string | null;\n\tforceNoCache?: boolean;\n\theaders?: Record<string, string>;\n\torganizationId?: string | null;\n\tsessionToken?: string | null;\n\tuserId?: string | null;\n}\n\nfunction parseArbitraryResponseBody(\n\trawText: string,\n\tcontentType: string | null,\n): unknown {\n\tif (!rawText) {\n\t\treturn null;\n\t}\n\tif (contentType?.toLowerCase().includes(\"application/json\")) {\n\t\ttry {\n\t\t\treturn JSON.parse(rawText);\n\t\t} catch {\n\t\t\treturn rawText;\n\t\t}\n\t}\n\tconst trimmed = rawText.trim();\n\tif (\n\t\t(trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n\t\t(trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n\t) {\n\t\ttry {\n\t\t\treturn JSON.parse(trimmed);\n\t\t} catch {\n\t\t\treturn rawText;\n\t\t}\n\t}\n\treturn rawText;\n}\n\nfunction toRequestQueryString(query?: AthenaRequestQueryValueMap): string {\n\tif (!query) {\n\t\treturn \"\";\n\t}\n\tconst params = new URLSearchParams();\n\tfor (const [key, rawValue] of Object.entries(query)) {\n\t\tconst values = Array.isArray(rawValue) ? rawValue : [rawValue];\n\t\tfor (const value of values) {\n\t\t\tif (value === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparams.append(key, value === null ? \"\" : String(value));\n\t\t}\n\t}\n\tconst serialized = params.toString();\n\treturn serialized ? `?${serialized}` : \"\";\n}\n\nfunction isJsonBody(body: AthenaRequestOptions[\"body\"]): boolean {\n\treturn (\n\t\tbody !== undefined &&\n\t\tbody !== null &&\n\t\t!(body instanceof FormData) &&\n\t\t!(body instanceof Blob) &&\n\t\t!(body instanceof URLSearchParams) &&\n\t\t!(body instanceof ArrayBuffer) &&\n\t\t!ArrayBuffer.isView(body) &&\n\t\ttypeof body !== \"string\"\n\t);\n}\n\nexport function createAthenaRequest(\n\tconfig: AthenaRawRequestConfig,\n\tresolveContext: () =>\n\t\t| AthenaRawRequestContext\n\t\t| undefined\n\t\t| Promise<AthenaRawRequestContext | undefined>,\n): <T = unknown>(\n\toptions: AthenaRequestOptions,\n) => Promise<AthenaRequestResponse<T>> {\n\treturn async <T = unknown>(\n\t\toptions: AthenaRequestOptions,\n\t): Promise<AthenaRequestResponse<T>> => {\n\t\tconst context = await resolveContext();\n\t\tconst method = options.method ?? \"GET\";\n\t\tconst responseType = options.responseType ?? \"json\";\n\t\tconst service = options.service ?? \"db\";\n\t\tconst absoluteUrl = options.url?.trim();\n\t\tconst baseUrlByService: Record<AthenaRequestService, string | undefined> = {\n\t\t\tauth: config.authUrl,\n\t\t\tchat: config.chatUrl,\n\t\t\tdb: config.baseUrl,\n\t\t\tstorage: config.storageUrl,\n\t\t};\n\n\t\tconst queryString = toRequestQueryString(options.query);\n\t\tlet targetUrl: string;\n\t\tif (absoluteUrl) {\n\t\t\t// Absolute URLs bypass gateway base-url normalization so query/hash are preserved\n\t\t\t// and auth-only / storage-only clients can still call arbitrary endpoints.\n\t\t\ttry {\n\t\t\t\tconst parsed = new URL(absoluteUrl);\n\t\t\t\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\t\t\t\tthrow new Error(\"not http(s)\");\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`client.request(...) url must be an absolute http(s) URL. Received ${JSON.stringify(options.url)}.`,\n\t\t\t\t\t{ cause: error },\n\t\t\t\t);\n\t\t\t}\n\t\t\ttargetUrl = `${absoluteUrl}${queryString}`;\n\t\t} else {\n\t\t\tconst resolvedBaseUrl = baseUrlByService[service];\n\t\t\tif (!resolvedBaseUrl) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Athena ${service} base URL is not configured. Pass createClient({ url }) for unified routing or set the service-specific URL first.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(resolvedBaseUrl, {\n\t\t\t\tlabel: `Athena ${service} base URL`,\n\t\t\t});\n\t\t\tconst path = options.path?.trim();\n\t\t\tif (!path) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"client.request(...) requires either an absolute url or a non-empty path.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n\t\t\ttargetUrl = `${normalizedBaseUrl}${normalizedPath}${queryString}`;\n\t\t}\n\n\t\tconst requestProfile =\n\t\t\tservice === \"auth\"\n\t\t\t\t? \"auth\"\n\t\t\t\t: service === \"chat\"\n\t\t\t\t\t? \"chat\"\n\t\t\t\t\t: service === \"storage\"\n\t\t\t\t\t\t? \"storage\"\n\t\t\t\t\t\t: \"gateway\";\n\t\tconst headers = buildAthenaRequestHeaders({\n\t\t\taccept: service === \"chat\" ? \"application/json\" : undefined,\n\t\t\tapiKey: options.apiKey ?? config.apiKey,\n\t\t\tbackend: config.backend,\n\t\t\tbearerToken: context?.bearerToken,\n\t\t\tcallHeaders: options.headers,\n\t\t\tclient: config.client,\n\t\t\tconfigHeaders: {\n\t\t\t\t...(config.headers ?? {}),\n\t\t\t\t...(context?.headers ?? {}),\n\t\t\t},\n\t\t\tcontentType:\n\t\t\t\tservice === \"auth\" || service === \"db\" || service === \"storage\"\n\t\t\t\t\t? \"application/json\"\n\t\t\t\t\t: undefined,\n\t\t\tcookie: context?.cookie,\n\t\t\tforceNoCache: context?.forceNoCache,\n\t\t\tjdbcUrl: config.jdbcUrl,\n\t\t\torganizationId: context?.organizationId,\n\t\t\tpgUri: config.pgUri,\n\t\t\tprofile: requestProfile,\n\t\t\tsdkHeaderValue: buildSdkHeaderValue(SDK_NAME),\n\t\t\tsessionToken: context?.sessionToken,\n\t\t\tstripNulls: service === \"db\" ? true : undefined,\n\t\t\tuserId: context?.userId,\n\t\t});\n\n\t\tconst shouldSendJsonBody = isJsonBody(options.body);\n\t\tif (shouldSendJsonBody && !hasHeaderIgnoreCase(headers, \"Content-Type\")) {\n\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tconst response = await fetch(targetUrl, {\n\t\t\tbody:\n\t\t\t\toptions.body === undefined || options.body === null\n\t\t\t\t\t? undefined\n\t\t\t\t\t: shouldSendJsonBody\n\t\t\t\t\t\t? JSON.stringify(options.body)\n\t\t\t\t\t\t: (options.body as RequestInit[\"body\"]),\n\t\t\tcredentials: options.credentials,\n\t\t\theaders,\n\t\t\tmethod,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\tif (responseType === \"response\") {\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\theaders: response.headers,\n\t\t\t\tok: response.ok,\n\t\t\t\traw: response,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t};\n\t\t}\n\n\t\tconst rawText = await response.text();\n\t\tconst parsed =\n\t\t\tresponseType === \"text\"\n\t\t\t\t? rawText\n\t\t\t\t: parseArbitraryResponseBody(\n\t\t\t\t\t\trawText,\n\t\t\t\t\t\tresponse.headers.get(\"content-type\"),\n\t\t\t\t\t);\n\n\t\treturn {\n\t\t\tdata: parsed as T | string | null,\n\t\t\theaders: response.headers,\n\t\t\tok: response.ok,\n\t\t\traw: response,\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t};\n\t};\n}\n","import type {\n  AthenaOperationContext,\n  NormalizedAthenaError,\n  RetryConfig,\n} from \"./auxiliaries.ts\";\nimport { normalizeAthenaError, withRetry } from \"./auxiliaries.ts\";\nimport type {\n  AthenaGatewayErrorDetails,\n  AthenaGatewayResponse,\n} from \"./gateway/types.ts\";\n\nconst ATHENA_NORMALIZED_ERROR_KEY = \"__athenaNormalizedError\" as const;\n\nconst READ_RETRY_CONFIG: RetryConfig = {\n  backoff: \"exponential\",\n  baseDelayMs: 100,\n  jitter: true,\n  maxDelayMs: 1000,\n  retries: 2,\n};\n\nexport interface AthenaResult<T> {\n  /**\n   * Mutation affected-row count (insert/update/delete/upsert).\n   * Omitted on reads. `null` means the backend did not provide honest meta —\n   * never fabricated from returned-row length.\n   */\n  affectedRows?: number | null;\n  count?: number | null;\n  data: T | null;\n  error: AthenaResultError | null;\n  /**\n   * @deprecated Prefer `error?.gatewayCode`, `error?.hint`, and related fields on `error`.\n   */\n  errorDetails?: AthenaGatewayErrorDetails | null;\n  raw: unknown;\n  status: number;\n  statusText?: string | null;\n}\n\nexport interface AthenaResultError {\n  athenaCode: NormalizedAthenaError[\"code\"];\n  category: NormalizedAthenaError[\"category\"];\n  cause?: string;\n  code: string | null;\n  constraint?: string;\n  details: unknown | null;\n  endpoint?: AthenaGatewayErrorDetails[\"endpoint\"];\n  gatewayCode?: AthenaGatewayErrorDetails[\"code\"] | null;\n  hint: string | null;\n  kind: NormalizedAthenaError[\"kind\"];\n  message: string;\n  method?: AthenaGatewayErrorDetails[\"method\"];\n  operation?: string;\n  raw: unknown;\n  requestId?: string;\n  retryable: boolean;\n  status: number;\n  statusText: string | null;\n  table?: string;\n}\n\nexport type AthenaResultFormatter = <T>(\n  response: AthenaGatewayResponse<T>,\n  context?: AthenaOperationContext\n) => AthenaResult<T>;\n\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): AthenaResult<T> {\n  const result: AthenaResult<T> = {\n    data: response.data ?? null,\n    error: null,\n    errorDetails: response.errorDetails ?? null,\n    raw: response.raw,\n    status: response.status,\n    statusText: response.statusText ?? null,\n  };\n  if (response.count !== undefined) {\n    result.count = response.count;\n  }\n  if (response.affectedRows !== undefined) {\n    result.affectedRows = response.affectedRows;\n  }\n  return result;\n}\n\nfunction attachNormalizedError<T>(\n  result: AthenaResult<T>,\n  normalizedError: NormalizedAthenaError\n): void {\n  Object.defineProperty(result, ATHENA_NORMALIZED_ERROR_KEY, {\n    configurable: true,\n    enumerable: false,\n    value: normalizedError,\n    writable: false,\n  });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n  for (const value of values) {\n    if (typeof value === \"string\" && value.trim().length > 0) {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\nfunction resolveStructuredErrorPayload(\n  raw: unknown\n): Record<string, unknown> | null {\n  if (!isRecord(raw)) {\n    return null;\n  }\n  return isRecord(raw.error) ? raw.error : raw;\n}\n\nfunction resolveStructuredErrorDetails(\n  payload: Record<string, unknown> | null,\n  message: string\n): unknown | null {\n  if (!(payload && \"details\" in payload)) {\n    return null;\n  }\n  const details = payload.details;\n  if (details === null) {\n    return null;\n  }\n  if (typeof details === \"string\" && details.trim() === message.trim()) {\n    return null;\n  }\n  return details;\n}\n\nfunction createResultError<T>(\n  response: AthenaGatewayResponse<T>,\n  result: AthenaResult<T>,\n  normalized: NormalizedAthenaError\n): AthenaResultError {\n  const rawRecord = isRecord(response.raw) ? response.raw : null;\n  const payload = resolveStructuredErrorPayload(response.raw);\n  const message =\n    firstNonEmptyString(\n      response.error,\n      payload?.message,\n      payload?.error,\n      payload?.details,\n      response.errorDetails?.message,\n      normalized.message\n    ) ?? normalized.message;\n  const statusText =\n    firstNonEmptyString(response.statusText, rawRecord?.statusText) ?? null;\n  const hint =\n    firstNonEmptyString(payload?.hint, response.errorDetails?.hint) ?? null;\n  const code = firstNonEmptyString(payload?.code) ?? normalized.code;\n  const details =\n    resolveStructuredErrorDetails(payload, message) ??\n    response.errorDetails?.cause ??\n    null;\n\n  return {\n    athenaCode: normalized.code,\n    category: normalized.category,\n    cause: response.errorDetails?.cause,\n    code,\n    constraint: normalized.constraint,\n    details,\n    endpoint: response.errorDetails?.endpoint,\n    gatewayCode: response.errorDetails?.code ?? null,\n    hint,\n    kind: normalized.kind,\n    message,\n    method: response.errorDetails?.method,\n    operation: normalized.operation,\n    raw: result.raw,\n    requestId: response.errorDetails?.requestId,\n    retryable: normalized.retryable,\n    status: result.status,\n    statusText,\n    table: normalized.table,\n  };\n}\n\nexport function createResultFormatter(): AthenaResultFormatter {\n  return <T>(\n    response: AthenaGatewayResponse<T>,\n    context?: AthenaOperationContext\n  ): AthenaResult<T> => {\n    const result = formatResult(response);\n    // D1 and some transports use `error: undefined` on success; only treat\n    // non-nullish error / errorDetails as failures.\n    if (response.error == null && response.errorDetails == null) {\n      return result;\n    }\n    const normalizedError = normalizeAthenaError(\n      {\n        ...result,\n        error: response.error ?? response.errorDetails?.message ?? null,\n      },\n      context\n    );\n    result.error = createResultError(response, result, normalizedError);\n    attachNormalizedError(result, normalizedError);\n    return result;\n  };\n}\n\nexport async function executeRead<T>(\n  behavior: { retryReads?: boolean } | undefined,\n  runner: () => Promise<AthenaResult<T>>\n): Promise<AthenaResult<T>> {\n  if (!behavior?.retryReads) {\n    return runner();\n  }\n\n  let lastRetryableResult: AthenaResult<T> | undefined;\n  let lastRetrySignal: AthenaResultError | null = null;\n  try {\n    return await withRetry(\n      {\n        ...READ_RETRY_CONFIG,\n        shouldRetry: (error) =>\n          error === lastRetrySignal || normalizeAthenaError(error).retryable,\n      },\n      async () => {\n        const result = await runner();\n        if (result.error?.retryable) {\n          lastRetryableResult = result;\n          lastRetrySignal = result.error;\n          throw lastRetrySignal;\n        }\n        return result;\n      }\n    );\n  } catch (error) {\n    if (lastRetryableResult && error === lastRetrySignal) {\n      return lastRetryableResult;\n    }\n    throw error;\n  }\n}\n\nexport function toSingleResult<Result>(\n  response: AthenaResult<Result>\n): AthenaResult<\n  Result extends Array<infer Item> ? Item | null : Result | null\n> {\n  const payload = response.data;\n  const singleData = Array.isArray(payload)\n    ? payload.length\n      ? payload[0]\n      : null\n    : (payload ?? null);\n  return {\n    ...response,\n    data: singleData as Result extends Array<infer Item>\n      ? Item | null\n      : Result | null,\n  };\n}\n\nexport type AthenaCardinalityMode = \"single\" | \"maybeSingle\";\n\n/**\n * `.single()` / `.maybeSingle()` projection — same as `toSingleResult`\n * (first row or `null`). Reads and mutations share this contract.\n * Tightening 0 / 2+ into errors is a follow-up ADR, not this surface.\n */\nexport function applyCardinality<Result>(\n  response: AthenaResult<Result>,\n  _mode: AthenaCardinalityMode\n): AthenaResult<\n  Result extends Array<infer Item> ? Item | null : Result | null\n> {\n  return toSingleResult(response);\n}\n","import type {\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaJsonArray,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from \"./types.ts\";\n\nconst IDENTIFIER_SEGMENT_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nfunction isIdentifierPath(value: string): boolean {\n  const segments = value.split(\".\").map((segment) => segment.trim());\n  return (\n    segments.length > 1 &&\n    segments.every((segment) => IDENTIFIER_SEGMENT_PATTERN.test(segment))\n  );\n}\n\nfunction extractRelationHead(raw: string): string {\n  const trimmed = raw.trim();\n  if (!trimmed) {\n    return \"\";\n  }\n\n  const aliasIndex = trimmed.indexOf(\":\");\n  const withoutAlias =\n    aliasIndex >= 0 ? trimmed.slice(aliasIndex + 1).trim() : trimmed;\n  const modifierIndex = withoutAlias.indexOf(\"!\");\n  return (\n    modifierIndex >= 0 ? withoutAlias.slice(0, modifierIndex) : withoutAlias\n  ).trim();\n}\n\nfunction hasSchemaQualifiedRelationToken(select: string): boolean {\n  let singleQuoted = false;\n  let doubleQuoted = false;\n  let tokenStart = 0;\n\n  for (let index = 0; index < select.length; index += 1) {\n    const char = select[index];\n    const next = index + 1 < select.length ? select[index + 1] : \"\";\n\n    if (singleQuoted) {\n      if (char === \"'\" && next === \"'\") {\n        index += 1;\n        continue;\n      }\n      if (char === \"'\") {\n        singleQuoted = false;\n      }\n      continue;\n    }\n\n    if (doubleQuoted) {\n      if (char === '\"' && next === '\"') {\n        index += 1;\n        continue;\n      }\n      if (char === '\"') {\n        doubleQuoted = false;\n      }\n      continue;\n    }\n\n    if (char === \"'\") {\n      singleQuoted = true;\n      continue;\n    }\n\n    if (char === '\"') {\n      doubleQuoted = true;\n      continue;\n    }\n\n    if (char === \"(\") {\n      const relationHead = extractRelationHead(select.slice(tokenStart, index));\n      if (isIdentifierPath(relationHead)) {\n        return true;\n      }\n      tokenStart = index + 1;\n      continue;\n    }\n\n    if (char === \",\" || char === \")\") {\n      tokenStart = index + 1;\n    }\n  }\n\n  return false;\n}\n\nfunction toStructuredSelectString(columns: string | string[]): string {\n  return Array.isArray(columns) ? columns.join(\",\") : columns;\n}\n\ntype StructuredWhereOperand =\n  | AthenaJsonValue\n  | AthenaJsonArray\n  | AthenaJsonObject;\n\nfunction buildStructuredWhere(\n  conditions: AthenaGatewayCondition[] | undefined\n): AthenaJsonObject | null | undefined {\n  if (!conditions?.length) {\n    return;\n  }\n\n  const where: AthenaJsonObject = {};\n\n  for (const condition of conditions) {\n    if (!condition.column) {\n      return null;\n    }\n    if (condition.value_cast !== undefined) {\n      return null;\n    }\n\n    const operand = condition.value as StructuredWhereOperand | undefined;\n    const operator = condition.operator;\n    if (operator === \"eq\") {\n      if (operand === undefined) {\n        return null;\n      }\n    } else if (operator === \"neq\" || operator === \"gt\" || operator === \"lt\") {\n      if (operand === undefined) {\n        return null;\n      }\n    } else if (operator === \"in\") {\n      if (!Array.isArray(operand)) {\n        return null;\n      }\n    } else {\n      return null;\n    }\n\n    const existing = where[condition.column];\n    if (\n      existing !== undefined &&\n      (typeof existing !== \"object\" ||\n        existing === null ||\n        Array.isArray(existing))\n    ) {\n      return null;\n    }\n\n    const next = (existing as AthenaJsonObject | undefined) ?? {};\n    if (Object.hasOwn(next, operator)) {\n      return null;\n    }\n    next[operator] = operand as AthenaJsonValue | AthenaJsonArray;\n    where[condition.column] = next;\n  }\n\n  return where;\n}\n\nfunction buildStructuredOrderBy(\n  order: AthenaSortBy | undefined\n): AthenaJsonObject | undefined {\n  if (!order?.field) {\n    return;\n  }\n  return {\n    [order.field]: order.direction === \"descending\" ? \"desc\" : \"asc\",\n  };\n}\n\nexport interface StructuredSelectTransportInput {\n  columns: string | string[];\n  conditions?: AthenaGatewayCondition[];\n  count?: \"exact\" | \"planned\" | \"estimated\";\n  head?: boolean;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  stripNulls: boolean;\n  tableName: string;\n}\n\nexport interface StructuredSelectTransportResult {\n  payload: AthenaFetchPayload;\n  select: string;\n}\n\nexport function buildStructuredSelectTransport(\n  input: StructuredSelectTransportInput\n): StructuredSelectTransportResult | null | { error: string } {\n  const select = toStructuredSelectString(input.columns).trim();\n  if (!select || select === \"*\") {\n    return null;\n  }\n\n  if (!hasSchemaQualifiedRelationToken(select)) {\n    return null;\n  }\n\n  if (input.count !== undefined || input.head !== undefined) {\n    return {\n      error:\n        \"Schema-qualified nested select strings require structured select transport, which does not support count/head options in athena-js yet.\",\n    };\n  }\n\n  const where = buildStructuredWhere(input.conditions);\n  if (where === null) {\n    return {\n      error:\n        \"Schema-qualified nested select strings only support eq, neq, gt, lt, and in filters in athena-js structured select transport.\",\n    };\n  }\n\n  return {\n    payload: {\n      limit: input.limit,\n      offset: input.offset,\n      orderBy: buildStructuredOrderBy(input.order),\n      select,\n      strip_nulls: input.stripNulls,\n      table_name: input.tableName,\n      where,\n    },\n    select,\n  };\n}\n","import type { AthenaSelectShape } from \"../query-ast.ts\";\nimport { compileSelectShape } from \"../query-ast.ts\";\nimport type { AthenaRelationDescriptor } from \"./descriptor.ts\";\n\nfunction relationEmbedToken(relation: AthenaRelationDescriptor): string {\n  const table =\n    relation.via?.trim() || relation.targetModel?.trim() || relation.name;\n  const schema = relation.targetSchema?.trim();\n  return schema ? `${schema}.${table}` : table;\n}\n\nfunction relationSelectShape(\n  relation: AthenaRelationDescriptor,\n): AthenaSelectShape {\n  if (relation.star || !relation.columns?.length) {\n    return { \"*\": true };\n  }\n  return Object.fromEntries(relation.columns.map((column) => [column, true]));\n}\n\n/**\n * Merge root projection + consumed `.include()` relations into a gateway\n * nested-select string (`id,name,organization:public.orgs(id,name)`).\n */\nexport function compileIncludeSelectString(\n  columns: string | string[],\n  relations: readonly AthenaRelationDescriptor[] | undefined,\n): string {\n  if (!relations?.length) {\n    return Array.isArray(columns) ? columns.join(\",\") : columns;\n  }\n\n  const shape: AthenaSelectShape = {};\n  const rawColumns = (Array.isArray(columns) ? columns : [columns])\n    .map((column) => column.trim())\n    .filter(Boolean);\n  const isStar =\n    rawColumns.length === 0 || rawColumns.some((column) => column === \"*\");\n\n  if (isStar) {\n    shape[\"*\"] = true;\n  } else {\n    for (const column of rawColumns) {\n      shape[column] = true;\n    }\n  }\n\n  for (const relation of relations) {\n    const embed = relationEmbedToken(relation);\n    shape[relation.name] = {\n      as: relation.name === embed ? undefined : relation.name,\n      select: relationSelectShape(relation),\n      via: embed,\n    };\n  }\n\n  return compileSelectShape(shape);\n}\n\nexport function selectStringHasRelationEmbed(select: string): boolean {\n  return /[A-Za-z_][\\w.]*\\s*\\([^)]*\\)/.test(select);\n}\n","import { buildStructuredSelectTransport } from \"./gateway/structured-select.ts\";\nimport type { AthenaRelationDescriptor } from \"./query/descriptor.ts\";\nimport { compileIncludeSelectString } from \"./query/include-select.ts\";\nimport type {\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayCondition,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from \"./gateway/types.ts\";\nimport type {\n  AthenaOrderBy,\n  AthenaSelectShape,\n  AthenaWhere,\n  AthenaWhereBooleanOperand,\n  AthenaWhereOperatorInput,\n} from \"./query-ast.ts\";\nimport { shouldUseUuidTextComparison } from \"./query-ast.ts\";\n\ntype AthenaFindManyAstOrderColumn<Row> = [\n  Extract<keyof NonNullable<Row>, string>,\n] extends [never]\n  ? string\n  : Extract<keyof NonNullable<Row>, string>;\n\nexport interface AthenaSelectExecutionState {\n  conditions: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  relations?: AthenaRelationDescriptor[];\n  totalPages?: number;\n}\n\nexport interface AthenaFindManyAstPayload<\n  Row,\n  TSelect extends AthenaSelectShape,\n> {\n  limit?: number;\n  orderBy?: AthenaOrderBy<Row>;\n  select: TSelect;\n  table_name: string;\n  where?: AthenaWhere<Row>;\n}\n\nexport interface AthenaResolvedPagination {\n  limit?: number;\n  offset?: number;\n}\n\nexport interface AthenaTypedSelectQueryInput {\n  columns: string | string[];\n  conditions: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  tableName: string;\n}\n\nexport interface AthenaSelectDebugPlan {\n  columns: string | string[];\n  conditions?: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n}\n\nexport type AthenaSelectTransportPlan =\n  | {\n      kind: \"query\";\n      query: string;\n      payload: {\n        query: string;\n      };\n    }\n  | {\n      kind: \"fetch\";\n      payload: AthenaFetchPayload;\n      debug: AthenaSelectDebugPlan;\n    };\n\nexport function canUseFindManyAstTransport(\n  state: AthenaSelectExecutionState\n): boolean {\n  return (\n    state.conditions.length === 0 &&\n    state.offset === undefined &&\n    state.currentPage === undefined &&\n    state.pageSize === undefined &&\n    state.totalPages === undefined\n  );\n}\n\nexport function toFindManyAstOrder<Row>(\n  order?: AthenaSortBy\n): AthenaOrderBy<Row> | undefined {\n  if (!order) {\n    return;\n  }\n  return {\n    ascending: order.direction !== \"descending\",\n    column: order.field as AthenaFindManyAstOrderColumn<Row>,\n  };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeFindManyAstColumnPredicate(\n  value: unknown\n): AthenaWhereOperatorInput {\n  if (!isRecord(value)) {\n    return {\n      eq: value as AthenaWhereOperatorInput[\"eq\"],\n    };\n  }\n\n  const normalized: AthenaWhereOperatorInput = {};\n  for (const [key, operand] of Object.entries(value)) {\n    if (operand !== undefined) {\n      normalized[key as keyof AthenaWhereOperatorInput] = operand as never;\n    }\n  }\n  return normalized;\n}\n\nfunction normalizeFindManyAstBooleanOperand<Row>(\n  clause: AthenaWhereBooleanOperand<Row>\n): AthenaWhereBooleanOperand<Row> {\n  const normalized: Record<string, unknown> = {};\n  for (const [column, value] of Object.entries(\n    clause as Record<string, unknown>\n  )) {\n    if (value === undefined) {\n      continue;\n    }\n    normalized[column] = normalizeFindManyAstColumnPredicate(value);\n  }\n  return normalized as AthenaWhereBooleanOperand<Row>;\n}\n\nexport function normalizeFindManyAstWhere<Row>(\n  where?: AthenaWhere<Row>\n): AthenaWhere<Row> | undefined {\n  if (!(where && isRecord(where))) {\n    return where;\n  }\n\n  const normalized: AthenaJsonObject = {};\n  for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue;\n    }\n    if (key === \"or\" && Array.isArray(value)) {\n      normalized.or = value.map((clause) =>\n        normalizeFindManyAstBooleanOperand(\n          clause as AthenaWhereBooleanOperand<Row>\n        )\n      ) as unknown as AthenaJsonObject[\"or\"];\n      continue;\n    }\n    if (key === \"not\" && isRecord(value)) {\n      normalized.not = normalizeFindManyAstBooleanOperand(\n        value as AthenaWhereBooleanOperand<Row>\n      ) as unknown as AthenaJsonObject[\"not\"];\n      continue;\n    }\n    normalized[key] = normalizeFindManyAstColumnPredicate(\n      value\n    ) as AthenaJsonValue;\n  }\n\n  return normalized as AthenaWhere<Row>;\n}\n\nfunction predicateRequiresUuidQueryFallback(\n  column: string,\n  value: unknown\n): boolean {\n  if (!isRecord(value)) {\n    return shouldUseUuidTextComparison(\n      column,\n      value as Parameters<typeof shouldUseUuidTextComparison>[1]\n    );\n  }\n\n  const eqValue = value.eq;\n  return (\n    eqValue !== undefined &&\n    shouldUseUuidTextComparison(\n      column,\n      eqValue as Parameters<typeof shouldUseUuidTextComparison>[1]\n    )\n  );\n}\n\nfunction booleanOperandRequiresUuidQueryFallback<Row>(\n  clause: AthenaWhereBooleanOperand<Row>\n): boolean {\n  for (const [column, value] of Object.entries(\n    clause as Record<string, unknown>\n  )) {\n    if (value === undefined) {\n      continue;\n    }\n    if (predicateRequiresUuidQueryFallback(column, value)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function findManyAstWhereRequiresLegacyTransport<Row>(\n  where?: AthenaWhere<Row>\n): boolean {\n  if (!(where && isRecord(where))) {\n    return false;\n  }\n\n  for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue;\n    }\n    if (key === \"or\" && Array.isArray(value)) {\n      if (\n        value.some((clause) =>\n          booleanOperandRequiresUuidQueryFallback(\n            clause as AthenaWhereBooleanOperand<Row>\n          )\n        )\n      ) {\n        return true;\n      }\n      continue;\n    }\n    if (key === \"not\" && isRecord(value)) {\n      if (\n        booleanOperandRequiresUuidQueryFallback(\n          value as AthenaWhereBooleanOperand<Row>\n        )\n      ) {\n        return true;\n      }\n      continue;\n    }\n    if (predicateRequiresUuidQueryFallback(key, value)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexport function resolvePagination(input: {\n  limit?: number;\n  offset?: number;\n  currentPage?: number;\n  pageSize?: number;\n}): AthenaResolvedPagination {\n  let limit = input.limit;\n  let offset = input.offset;\n\n  if (limit === undefined && input.pageSize !== undefined) {\n    limit = Math.max(0, Math.trunc(input.pageSize));\n  }\n  if (\n    offset === undefined &&\n    input.pageSize !== undefined &&\n    input.currentPage !== undefined &&\n    input.currentPage > 0\n  ) {\n    offset =\n      (Math.trunc(input.currentPage) - 1) *\n      Math.max(0, Math.trunc(input.pageSize));\n  }\n\n  return { limit, offset };\n}\n\nfunction hasTypedEqualityComparison(\n  conditions: AthenaGatewayCondition[] | undefined\n): boolean {\n  return (\n    conditions?.some(\n      (condition) =>\n        condition.operator === \"eq\" &&\n        (condition.value_cast !== undefined ||\n          condition.column_cast !== undefined)\n    ) ?? false\n  );\n}\n\nexport function createSelectTransportPlan(input: {\n  tableName: string;\n  columns: string | string[];\n  state: AthenaSelectExecutionState;\n  options?: AthenaGatewayCallOptions;\n  buildTypedSelectQuery: (input: AthenaTypedSelectQueryInput) => string | null;\n}): AthenaSelectTransportPlan {\n  const conditions = input.state.conditions.length\n    ? input.state.conditions.map((condition) => ({ ...condition }))\n    : undefined;\n\n  const pagination = resolvePagination({\n    currentPage: input.state.currentPage,\n    limit: input.state.limit,\n    offset: input.state.offset,\n    pageSize: input.state.pageSize,\n  });\n  const stripNulls = input.options?.stripNulls ?? true;\n  const includeSelect =\n    input.state.relations && input.state.relations.length > 0\n      ? compileIncludeSelectString(input.columns, input.state.relations)\n      : undefined;\n  if (includeSelect) {\n    const where = conditions\n      ? Object.fromEntries(\n          conditions\n            .filter((condition) => condition.column && condition.operator === \"eq\")\n            .map((condition) => [\n              condition.column as string,\n              { eq: condition.value ?? null },\n            ])\n        )\n      : undefined;\n    return {\n      debug: {\n        columns: includeSelect,\n        conditions,\n        limit: pagination.limit,\n        offset: pagination.offset,\n        order: input.state.order,\n      },\n      kind: \"fetch\",\n      payload: {\n        limit: pagination.limit,\n        offset: pagination.offset,\n        orderBy: input.state.order\n          ? {\n              [input.state.order.field]:\n                input.state.order.direction === \"descending\" ? \"desc\" : \"asc\",\n            }\n          : undefined,\n        select: includeSelect,\n        strip_nulls: stripNulls,\n        table_name: input.tableName,\n        where,\n      },\n    };\n  }\n  const structuredSelectTransport = buildStructuredSelectTransport({\n    columns: input.columns,\n    conditions,\n    count: input.options?.count,\n    head: input.options?.head,\n    limit: pagination.limit,\n    offset: pagination.offset,\n    order: input.state.order,\n    stripNulls,\n    tableName: input.tableName,\n  });\n  if (structuredSelectTransport && \"error\" in structuredSelectTransport) {\n    throw new Error(structuredSelectTransport.error);\n  }\n  if (structuredSelectTransport) {\n    const { payload, select } = structuredSelectTransport;\n    return {\n      debug: {\n        columns: select,\n        conditions,\n        limit: pagination.limit,\n        offset: pagination.offset,\n        order: input.state.order,\n      },\n      kind: \"fetch\",\n      payload,\n    };\n  }\n\n  if (\n    hasTypedEqualityComparison(conditions) &&\n    !input.options?.head &&\n    !input.options?.count &&\n    conditions\n  ) {\n    const query = input.buildTypedSelectQuery({\n      columns: input.columns,\n      conditions,\n      currentPage: input.state.currentPage,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      order: input.state.order,\n      pageSize: input.state.pageSize,\n      tableName: input.tableName,\n    });\n    if (query) {\n      return {\n        kind: \"query\",\n        payload: { query },\n        query,\n      };\n    }\n  }\n\n  return {\n    debug: {\n      columns: input.columns,\n      conditions,\n      currentPage: input.state.currentPage,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      order: input.state.order,\n      pageSize: input.state.pageSize,\n    },\n    kind: \"fetch\",\n    payload: {\n      columns: input.columns,\n      conditions,\n      count: input.options?.count,\n      current_page: input.state.currentPage,\n      head: input.options?.head,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      page_size: input.state.pageSize,\n      sort_by: input.state.order,\n      strip_nulls: stripNulls,\n      table_name: input.tableName,\n      total_pages: input.state.totalPages,\n    },\n  };\n}\n","const SIMPLE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst COMPOSITE_IDENTIFIER_PATTERN =\n  /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/;\nconst SQL_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_.]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i;\nconst RESPONSE_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/i;\n\nfunction quoteIdentifierSegment(identifier: string): string {\n  return `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction parseAliasedIdentifierToken(\n  token: string\n): { baseIdentifier: string; aliasIdentifier: string } | null {\n  const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(token);\n  if (responseAliasMatch) {\n    const [, aliasIdentifier, baseIdentifier] = responseAliasMatch;\n    if (\n      COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) &&\n      SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)\n    ) {\n      return { aliasIdentifier, baseIdentifier };\n    }\n  }\n\n  const sqlAliasMatch = SQL_ALIAS_PATTERN.exec(token);\n  if (!sqlAliasMatch) {\n    return null;\n  }\n\n  const [, baseIdentifier, aliasIdentifier] = sqlAliasMatch;\n  if (\n    !(\n      COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) &&\n      SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)\n    )\n  ) {\n    return null;\n  }\n\n  return { aliasIdentifier, baseIdentifier };\n}\n\n/**\n * Quotes a `schema.table.column`-style identifier path safely for SQL.\n */\nexport function quoteQualifiedIdentifier(identifier: string): string {\n  return identifier\n    .split(\".\")\n    .map((segment) => quoteIdentifierSegment(segment))\n    .join(\".\");\n}\n\nfunction quoteSelectToken(token: string): string {\n  if (token === \"*\") {\n    return token;\n  }\n  if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n    return quoteQualifiedIdentifier(token);\n  }\n\n  const aliasedIdentifier = parseAliasedIdentifierToken(token);\n  if (!aliasedIdentifier) {\n    return token;\n  }\n  const { baseIdentifier, aliasIdentifier } = aliasedIdentifier;\n  return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`;\n}\n\nexport function quoteSelectColumnToken(token: string): string {\n  const trimmed = token.trim();\n  if (!trimmed || trimmed === \"*\") {\n    return trimmed || \"*\";\n  }\n\n  const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(trimmed);\n  if (responseAliasMatch) {\n    const [, aliasIdentifier, baseIdentifier] = responseAliasMatch;\n    return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`;\n  }\n\n  return quoteQualifiedIdentifier(trimmed);\n}\n\nfunction canAutoQuoteToken(token: string): boolean {\n  if (token === \"*\") {\n    return true;\n  }\n  if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n    return true;\n  }\n  return parseAliasedIdentifierToken(token) !== null;\n}\n\nfunction splitTopLevelCommaSeparated(input: string): string[] | null {\n  const parts: string[] = [];\n  let buffer = \"\";\n  let singleQuoted = false;\n  let doubleQuoted = false;\n  let depth = 0;\n\n  for (let index = 0; index < input.length; index += 1) {\n    const char = input[index];\n    const next = index + 1 < input.length ? input[index + 1] : \"\";\n\n    if (singleQuoted) {\n      buffer += char;\n      if (char === \"'\" && next === \"'\") {\n        buffer += next;\n        index += 1;\n        continue;\n      }\n      if (char === \"'\") {\n        singleQuoted = false;\n      }\n      continue;\n    }\n\n    if (doubleQuoted) {\n      buffer += char;\n      if (char === '\"' && next === '\"') {\n        buffer += next;\n        index += 1;\n        continue;\n      }\n      if (char === '\"') {\n        doubleQuoted = false;\n      }\n      continue;\n    }\n\n    if (char === \"'\") {\n      singleQuoted = true;\n      buffer += char;\n      continue;\n    }\n    if (char === '\"') {\n      doubleQuoted = true;\n      buffer += char;\n      continue;\n    }\n\n    if (char === \"(\") {\n      depth += 1;\n      buffer += char;\n      continue;\n    }\n    if (char === \")\") {\n      depth -= 1;\n      if (depth < 0) {\n        return null;\n      }\n      buffer += char;\n      continue;\n    }\n\n    if (char === \",\" && depth === 0) {\n      parts.push(buffer.trim());\n      buffer = \"\";\n      continue;\n    }\n\n    buffer += char;\n  }\n\n  if (singleQuoted || doubleQuoted || depth !== 0) {\n    return null;\n  }\n\n  if (buffer.trim().length > 0) {\n    parts.push(buffer.trim());\n  }\n\n  return parts;\n}\n\n/**\n * Quotes identifier lists while preserving raw SQL expressions.\n *\n * Examples:\n * - `\"table, user\"` -> `\"\\\"table\\\", \\\"user\\\"\"`\n * - `concat(name, ',') as label, id` -> unchanged\n */\nexport function quoteSelectColumnsExpression(columns: string): string {\n  const trimmed = columns.trim();\n  if (!trimmed || trimmed === \"*\") {\n    return trimmed || \"*\";\n  }\n\n  const tokens = splitTopLevelCommaSeparated(trimmed);\n  if (!tokens || tokens.length === 0) {\n    return trimmed;\n  }\n\n  if (!tokens.every(canAutoQuoteToken)) {\n    return trimmed;\n  }\n\n  return tokens.map(quoteSelectToken).join(\", \");\n}\n\n/**\n * Immutable identifier object with consistent SQL rendering.\n */\nexport interface SqlIdentifier {\n  readonly segments: string[];\n  toSql: () => string;\n  toString: () => string;\n}\n\nclass SqlIdentifierPath implements SqlIdentifier {\n  readonly segments: string[];\n\n  constructor(segments: string[]) {\n    this.segments = segments;\n  }\n\n  toSql(): string {\n    return this.segments.map(quoteIdentifierSegment).join(\".\");\n  }\n\n  toString(): string {\n    return this.toSql();\n  }\n}\n\n/**\n * Creates a quoted identifier object from segment or dotted inputs.\n */\nexport function identifier(...segments: string[]): SqlIdentifier {\n  const expandedSegments = segments\n    .flatMap((segment) => segment.split(\".\"))\n    .map((segment) => segment.trim())\n    .filter((segment) => segment.length > 0);\n\n  return new SqlIdentifierPath(expandedSegments);\n}\n","import type {\n\tAthenaConditionCastType,\n\tAthenaConditionValue,\n\tAthenaDeletePayload,\n\tAthenaGatewayCondition,\n\tAthenaInsertPayload,\n\tAthenaJsonValue,\n\tAthenaRpcFilter,\n\tAthenaRpcPayload,\n\tAthenaSortBy,\n\tAthenaUpdatePayload,\n} from \"./gateway/types.ts\";\nimport { resolvePagination } from \"./query-transport.ts\";\nimport {\n\tquoteQualifiedIdentifier,\n\tquoteSelectColumnsExpression,\n\tquoteSelectColumnToken,\n} from \"./sql-identifiers.ts\";\n\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i;\n\nfunction normalizeCast(cast: AthenaConditionCastType): string {\n\tconst normalized = cast.trim().toLowerCase();\n\tif (!SAFE_CAST_PATTERN.test(normalized)) {\n\t\tthrow new Error(`Invalid cast type \"${cast}\"`);\n\t}\n\treturn normalized;\n}\n\nfunction escapeSqlStringLiteral(value: string): string {\n\treturn value.replace(/'/g, \"''\");\n}\n\nfunction toSqlLiteral(value: AthenaConditionValue): string {\n\tif (value === null) {\n\t\treturn \"NULL\";\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn Number.isFinite(value) ? String(value) : \"NULL\";\n\t}\n\tif (typeof value === \"boolean\") {\n\t\treturn value ? \"TRUE\" : \"FALSE\";\n\t}\n\treturn `'${escapeSqlStringLiteral(value)}'`;\n}\n\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\n\tif (!cast) {\n\t\treturn expression;\n\t}\n\treturn `${expression}::${normalizeCast(cast)}`;\n}\n\nfunction buildSelectColumnsClause(columns: string | string[]): string {\n\tif (Array.isArray(columns)) {\n\t\treturn columns.map((column) => quoteSelectColumnToken(column)).join(\", \");\n\t}\n\treturn quoteSelectColumnsExpression(columns);\n}\n\ninterface ParsedIdentifierSegment {\n\tnormalizedValue: string;\n}\n\nfunction parseIdentifierSegment(input: string): ParsedIdentifierSegment | null {\n\tconst trimmed = input.trim();\n\tif (!trimmed) {\n\t\treturn null;\n\t}\n\n\tif (!trimmed.startsWith('\"')) {\n\t\treturn {\n\t\t\tnormalizedValue: trimmed.toLowerCase(),\n\t\t};\n\t}\n\n\tlet value = \"\";\n\tlet index = 1;\n\tlet closed = false;\n\twhile (index < trimmed.length) {\n\t\tconst char = trimmed[index];\n\t\tconst next = index + 1 < trimmed.length ? trimmed[index + 1] : \"\";\n\t\tif (char === '\"' && next === '\"') {\n\t\t\tvalue += '\"';\n\t\t\tindex += 2;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === '\"') {\n\t\t\tclosed = true;\n\t\t\tindex += 1;\n\t\t\tbreak;\n\t\t}\n\t\tvalue += char;\n\t\tindex += 1;\n\t}\n\n\tif (!closed || trimmed.slice(index).trim().length > 0 || !value.trim()) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tnormalizedValue: value,\n\t};\n}\n\nfunction splitQualifiedTableName(\n\ttableName: string,\n): { schemaSegment: string } | null {\n\tconst trimmed = tableName.trim();\n\tlet inQuotes = false;\n\tfor (let index = 0; index < trimmed.length; index += 1) {\n\t\tconst char = trimmed[index];\n\t\tconst next = index + 1 < trimmed.length ? trimmed[index + 1] : \"\";\n\t\tif (char === '\"') {\n\t\t\tif (inQuotes && next === '\"') {\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tinQuotes = !inQuotes;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \".\" && !inQuotes) {\n\t\t\tconst schemaSegment = trimmed.slice(0, index).trim();\n\t\t\tconst tableSegment = trimmed.slice(index + 1).trim();\n\t\t\tif (!(schemaSegment && tableSegment)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn { schemaSegment };\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function resolveTableNameForCall(\n\ttableName: string,\n\tschema: string | undefined,\n): string {\n\tif (!schema) {\n\t\treturn tableName;\n\t}\n\tconst normalizedSchema = schema.trim();\n\tif (!normalizedSchema) {\n\t\tthrow new Error(\"schema option must be a non-empty string\");\n\t}\n\tconst normalizedTableName = tableName.trim();\n\tconst parsedSchema = parseIdentifierSegment(normalizedSchema);\n\tif (!parsedSchema) {\n\t\tthrow new Error(\"schema option must be a non-empty string\");\n\t}\n\tconst qualified = splitQualifiedTableName(normalizedTableName);\n\tif (qualified) {\n\t\tconst parsedTableSchema = parseIdentifierSegment(qualified.schemaSegment);\n\t\tconst sameSchema = parsedTableSchema\n\t\t\t? parsedTableSchema.normalizedValue === parsedSchema.normalizedValue\n\t\t\t: normalizedTableName.startsWith(`${normalizedSchema}.`);\n\t\tif (sameSchema) {\n\t\t\treturn normalizedTableName;\n\t\t}\n\t\tthrow new Error(\n\t\t\t`schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${normalizedTableName}\"`,\n\t\t);\n\t}\n\treturn `${normalizedSchema}.${normalizedTableName}`;\n}\n\nfunction conditionToSqlClause(\n\tcondition: AthenaGatewayCondition,\n): string | null {\n\tif (!condition.column) {\n\t\treturn null;\n\t}\n\tconst column = withCast(\n\t\tquoteQualifiedIdentifier(condition.column),\n\t\tcondition.column_cast,\n\t);\n\tconst value = condition.value;\n\tconst sqlOperator = {\n\t\teq: \"=\",\n\t\tgt: \">\",\n\t\tgte: \">=\",\n\t\tilike: \"ILIKE\",\n\t\tlike: \"LIKE\",\n\t\tlt: \"<\",\n\t\tlte: \"<=\",\n\t\tneq: \"!=\",\n\t} as const;\n\n\tswitch (condition.operator) {\n\t\tcase \"eq\":\n\t\tcase \"neq\":\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"like\":\n\t\tcase \"ilike\": {\n\t\t\tif (Array.isArray(value) || value === undefined) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst rhs = withCast(toSqlLiteral(value), condition.value_cast);\n\t\t\treturn `${column} ${sqlOperator[condition.operator]} ${rhs}`;\n\t\t}\n\t\tcase \"is\": {\n\t\t\tif (value === null) {\n\t\t\t\treturn `${column} IS NULL`;\n\t\t\t}\n\t\t\tif (value === true) {\n\t\t\t\treturn `${column} IS TRUE`;\n\t\t\t}\n\t\t\tif (value === false) {\n\t\t\t\treturn `${column} IS FALSE`;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\tcase \"in\": {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (value.length === 0) {\n\t\t\t\treturn \"FALSE\";\n\t\t\t}\n\t\t\tconst values = value.map((item) =>\n\t\t\t\twithCast(toSqlLiteral(item), condition.value_cast),\n\t\t\t);\n\t\t\treturn `${column} IN (${values.join(\", \")})`;\n\t\t}\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nexport function buildTypedSelectQuery(input: {\n\ttableName: string;\n\tcolumns: string | string[];\n\tconditions: AthenaGatewayCondition[];\n\tlimit?: number;\n\toffset?: number;\n\tcurrentPage?: number;\n\tpageSize?: number;\n\torder?: AthenaSortBy;\n}): string | null {\n\tconst whereClauses: string[] = [];\n\tfor (const condition of input.conditions) {\n\t\tconst clause = conditionToSqlClause(condition);\n\t\tif (!clause) {\n\t\t\treturn null;\n\t\t}\n\t\twhereClauses.push(clause);\n\t}\n\n\tlet limit = input.limit;\n\tlet offset = input.offset;\n\tif (limit === undefined && input.pageSize !== undefined) {\n\t\tlimit = input.pageSize;\n\t}\n\tif (\n\t\toffset === undefined &&\n\t\tinput.pageSize !== undefined &&\n\t\tinput.currentPage !== undefined &&\n\t\tinput.currentPage > 0\n\t) {\n\t\toffset = (input.currentPage - 1) * input.pageSize;\n\t}\n\n\tconst sqlParts = [\n\t\t`SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n\t];\n\n\tif (whereClauses.length > 0) {\n\t\tsqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n\t}\n\n\tif (input.order?.field) {\n\t\tconst direction = input.order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n\t\tsqlParts.push(\n\t\t\t`ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`,\n\t\t);\n\t}\n\n\tif (limit !== undefined) {\n\t\tsqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n\t}\n\n\tif (offset !== undefined) {\n\t\tsqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n\t}\n\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nexport function buildIncludeJoinSelectQuery(input: {\n\ttableName: string;\n\tcolumns: string | string[];\n\tconditions: AthenaGatewayCondition[];\n\trelations: readonly {\n\t\tcolumns?: readonly string[];\n\t\tname: string;\n\t\tsourceColumns?: readonly string[];\n\t\tstar?: boolean;\n\t\ttargetColumns?: readonly string[];\n\t\ttargetModel?: string;\n\t\ttargetSchema?: string;\n\t\tvia?: string;\n\t}[];\n\tlimit?: number;\n\toffset?: number;\n\torder?: AthenaSortBy;\n}): string | null {\n\tif (input.relations.length === 0) {\n\t\treturn null;\n\t}\n\tconst rootAlias = \"root\";\n\tconst rootTable = quoteQualifiedIdentifier(input.tableName);\n\tconst rawColumns = (\n\t\tArray.isArray(input.columns) ? input.columns : [input.columns]\n\t)\n\t\t.map((column) => column.trim())\n\t\t.filter(Boolean);\n\tconst isStar = rawColumns.length === 0 || rawColumns.includes(\"*\");\n\tconst selectParts = isStar\n\t\t? [`${rootAlias}.*`]\n\t\t: rawColumns.map(\n\t\t\t\t(column) =>\n\t\t\t\t\t`${rootAlias}.${quoteQualifiedIdentifier(column)} AS ${quoteQualifiedIdentifier(column)}`,\n\t\t\t);\n\n\tconst joinParts: string[] = [];\n\tfor (const relation of input.relations) {\n\t\tconst targetTable = [\n\t\t\trelation.targetSchema,\n\t\t\trelation.via ?? relation.targetModel,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\".\");\n\t\tif (!targetTable) {\n\t\t\treturn null;\n\t\t}\n\t\tconst source = relation.sourceColumns ?? [];\n\t\tconst target = relation.targetColumns ?? [];\n\t\tif (source.length === 0 || source.length !== target.length) {\n\t\t\treturn null;\n\t\t}\n\t\tconst alias = quoteQualifiedIdentifier(relation.name);\n\t\tconst ons = source.map(\n\t\t\t(column, index) =>\n\t\t\t\t`${rootAlias}.${quoteQualifiedIdentifier(column)} = ${alias}.${quoteQualifiedIdentifier(target[index] as string)}`,\n\t\t);\n\t\tjoinParts.push(\n\t\t\t`LEFT JOIN ${quoteQualifiedIdentifier(targetTable)} AS ${alias} ON ${ons.join(\" AND \")}`,\n\t\t);\n\t\tif (relation.star || !relation.columns?.length) {\n\t\t\tselectParts.push(`${alias}.*`);\n\t\t} else {\n\t\t\tfor (const column of relation.columns) {\n\t\t\t\tselectParts.push(\n\t\t\t\t\t`${alias}.${quoteQualifiedIdentifier(column)} AS ${quoteQualifiedIdentifier(`${relation.name}.${column}`)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst whereClauses: string[] = [];\n\tfor (const condition of input.conditions) {\n\t\tconst clause = conditionToSqlClause(condition);\n\t\tif (!clause) {\n\t\t\treturn null;\n\t\t}\n\t\twhereClauses.push(clause.replace(/^\"([^\"]+)\"/, `${rootAlias}.\"$1\"`));\n\t}\n\n\tconst sqlParts = [\n\t\t`SELECT ${selectParts.join(\", \")} FROM ${rootTable} AS ${rootAlias}`,\n\t\t...joinParts,\n\t];\n\tif (whereClauses.length > 0) {\n\t\tsqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n\t}\n\tif (input.order?.field) {\n\t\tconst direction = input.order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n\t\tsqlParts.push(\n\t\t\t`ORDER BY ${rootAlias}.${quoteQualifiedIdentifier(input.order.field)} ${direction}`,\n\t\t);\n\t}\n\tif (input.limit !== undefined) {\n\t\tsqlParts.push(`LIMIT ${Math.max(0, Math.trunc(input.limit))}`);\n\t}\n\tif (input.offset !== undefined) {\n\t\tsqlParts.push(`OFFSET ${Math.max(0, Math.trunc(input.offset))}`);\n\t}\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nfunction sanitizeSqlComment(comment: string): string {\n\treturn comment.replace(/\\*\\//g, \"* /\");\n}\n\nfunction toSqlJsonLiteral(value: AthenaJsonValue | undefined): string {\n\tif (value === undefined) {\n\t\treturn \"DEFAULT\";\n\t}\n\tif (\n\t\tvalue === null ||\n\t\ttypeof value === \"string\" ||\n\t\ttypeof value === \"number\" ||\n\t\ttypeof value === \"boolean\"\n\t) {\n\t\treturn toSqlLiteral(value);\n\t}\n\treturn `'${escapeSqlStringLiteral(JSON.stringify(value))}'::jsonb`;\n}\n\nfunction conditionToDebugSqlClause(condition: AthenaGatewayCondition): string {\n\tconst exact = conditionToSqlClause(condition);\n\tif (exact) {\n\t\treturn exact;\n\t}\n\n\tconst rawCondition = sanitizeSqlComment(JSON.stringify(condition));\n\tif (!condition.column) {\n\t\treturn `TRUE /* unsupported condition: ${rawCondition} */`;\n\t}\n\n\tconst column = withCast(\n\t\tquoteQualifiedIdentifier(condition.column),\n\t\tcondition.column_cast,\n\t);\n\tconst value = condition.value;\n\tconst rhs = withCast(\n\t\ttoSqlJsonLiteral(value as AthenaJsonValue | undefined),\n\t\tcondition.value_cast,\n\t);\n\n\tswitch (condition.operator) {\n\t\tcase \"contains\":\n\t\t\treturn `${column} @> ${rhs}`;\n\t\tcase \"containedBy\":\n\t\t\treturn `${column} <@ ${rhs}`;\n\t\tcase \"not\":\n\t\t\treturn `TRUE /* NOT expression passthrough: ${rawCondition} */`;\n\t\tcase \"or\":\n\t\t\treturn `TRUE /* OR expression passthrough: ${rawCondition} */`;\n\t\tdefault:\n\t\t\treturn `TRUE /* unsupported condition: ${rawCondition} */`;\n\t}\n}\n\nfunction appendOrderLimitOffset(\n\tsqlParts: string[],\n\torder?: AthenaSortBy,\n\tlimit?: number,\n\toffset?: number,\n) {\n\tif (order?.field) {\n\t\tconst direction = order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n\t\tsqlParts.push(\n\t\t\t`ORDER BY ${quoteQualifiedIdentifier(order.field)} ${direction}`,\n\t\t);\n\t}\n\tif (limit !== undefined) {\n\t\tsqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n\t}\n\tif (offset !== undefined) {\n\t\tsqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n\t}\n}\n\nexport function buildDebugSelectQuery(input: {\n\ttableName: string;\n\tcolumns: string | string[];\n\tconditions?: AthenaGatewayCondition[];\n\tlimit?: number;\n\toffset?: number;\n\tcurrentPage?: number;\n\tpageSize?: number;\n\torder?: AthenaSortBy;\n}): string {\n\tconst sqlParts = [\n\t\t`SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n\t];\n\tif (input.conditions?.length) {\n\t\tconst whereClauses = input.conditions.map(conditionToDebugSqlClause);\n\t\tsqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n\t}\n\tconst pagination = resolvePagination(input);\n\tappendOrderLimitOffset(\n\t\tsqlParts,\n\t\tinput.order,\n\t\tpagination.limit,\n\t\tpagination.offset,\n\t);\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nfunction resolveDebugTableIdentifier(tableName: string | undefined): string {\n\tif (!tableName?.trim()) {\n\t\treturn '\"__unknown_table__\"';\n\t}\n\treturn quoteQualifiedIdentifier(tableName);\n}\n\nexport function buildInsertDebugSql(payload: AthenaInsertPayload): string {\n\tconst rows = Array.isArray(payload.insert_body)\n\t\t? payload.insert_body\n\t\t: [payload.insert_body];\n\tconst columns: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const row of rows) {\n\t\tfor (const column of Object.keys(row)) {\n\t\t\tif (seen.has(column)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tseen.add(column);\n\t\t\tcolumns.push(column);\n\t\t}\n\t}\n\n\tconst sqlParts = [\n\t\t`INSERT INTO ${quoteQualifiedIdentifier(payload.table_name)}`,\n\t];\n\n\tif (rows.length && columns.length) {\n\t\tconst valuesClause = rows\n\t\t\t.map((row) => {\n\t\t\t\tconst values = columns.map((column) => {\n\t\t\t\t\tconst hasColumn = Object.hasOwn(row, column);\n\t\t\t\t\tif (!hasColumn) {\n\t\t\t\t\t\treturn payload.default_to_null ? \"NULL\" : \"DEFAULT\";\n\t\t\t\t\t}\n\t\t\t\t\tconst rowValue = (row as Record<string, AthenaJsonValue | undefined>)[\n\t\t\t\t\t\tcolumn\n\t\t\t\t\t];\n\t\t\t\t\treturn toSqlJsonLiteral(rowValue);\n\t\t\t\t});\n\t\t\t\treturn `(${values.join(\", \")})`;\n\t\t\t})\n\t\t\t.join(\", \");\n\t\tconst columnClause = columns\n\t\t\t.map((column) => quoteQualifiedIdentifier(column))\n\t\t\t.join(\", \");\n\t\tsqlParts.push(`(${columnClause})`);\n\t\tsqlParts.push(`VALUES ${valuesClause}`);\n\t} else {\n\t\tsqlParts.push(\"DEFAULT VALUES\");\n\t\tif (rows.length > 1) {\n\t\t\tsqlParts.push(\n\t\t\t\t`/* trace: ${rows.length} rows collapsed to DEFAULT VALUES */`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (payload.on_conflict) {\n\t\tconst conflictColumns = Array.isArray(payload.on_conflict)\n\t\t\t? payload.on_conflict\n\t\t\t\t\t.map((column) => quoteQualifiedIdentifier(column))\n\t\t\t\t\t.join(\", \")\n\t\t\t: payload.on_conflict;\n\t\tif (payload.update_body && Object.keys(payload.update_body).length > 0) {\n\t\t\tconst assignments = Object.entries(payload.update_body).map(\n\t\t\t\t([column, value]) =>\n\t\t\t\t\t`${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n\t\t\t);\n\t\t\tsqlParts.push(\n\t\t\t\t`ON CONFLICT (${conflictColumns}) DO UPDATE SET ${assignments.join(\", \")}`,\n\t\t\t);\n\t\t} else {\n\t\t\tsqlParts.push(`ON CONFLICT (${conflictColumns}) DO NOTHING`);\n\t\t}\n\t}\n\n\tif (payload.columns) {\n\t\tsqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n\t}\n\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nexport function buildUpdateDebugSql(payload: AthenaUpdatePayload): string {\n\tconst assignments = Object.entries(payload.update_body).map(\n\t\t([column, value]) =>\n\t\t\t`${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n\t);\n\tconst sqlParts = [\n\t\t`UPDATE ${resolveDebugTableIdentifier(payload.table_name)} SET ${assignments.length ? assignments.join(\", \") : \"/* empty set */\"}`,\n\t];\n\tif (payload.conditions?.length) {\n\t\tconst whereClauses = payload.conditions.map(conditionToDebugSqlClause);\n\t\tsqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n\t}\n\tconst pagination = resolvePagination({\n\t\tcurrentPage: payload.current_page,\n\t\tlimit: payload.limit,\n\t\toffset: payload.offset,\n\t\tpageSize: payload.page_size,\n\t});\n\tappendOrderLimitOffset(\n\t\tsqlParts,\n\t\tpayload.sort_by,\n\t\tpagination.limit,\n\t\tpagination.offset,\n\t);\n\tif (payload.columns) {\n\t\tsqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n\t}\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nexport function buildDeleteDebugSql(payload: AthenaDeletePayload): string {\n\tconst sqlParts = [\n\t\t`DELETE FROM ${quoteQualifiedIdentifier(payload.table_name)}`,\n\t];\n\tconst whereClauses: string[] = [];\n\tif (payload.resource_id) {\n\t\twhereClauses.push(`\"resource_id\" = ${toSqlLiteral(payload.resource_id)}`);\n\t}\n\tif (payload.conditions?.length) {\n\t\twhereClauses.push(...payload.conditions.map(conditionToDebugSqlClause));\n\t}\n\tif (whereClauses.length) {\n\t\tsqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n\t}\n\tconst pagination = resolvePagination({\n\t\tcurrentPage: payload.current_page,\n\t\tlimit: payload.limit,\n\t\toffset: payload.offset,\n\t\tpageSize: payload.page_size,\n\t});\n\tappendOrderLimitOffset(\n\t\tsqlParts,\n\t\tpayload.sort_by,\n\t\tpagination.limit,\n\t\tpagination.offset,\n\t);\n\tif (payload.columns) {\n\t\tsqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n\t}\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nfunction rpcFilterToSqlClause(filter: AthenaRpcFilter): string {\n\tconst column = quoteQualifiedIdentifier(filter.column);\n\tconst value = filter.value;\n\tswitch (filter.operator) {\n\t\tcase \"eq\":\n\t\tcase \"neq\":\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"like\":\n\t\tcase \"ilike\": {\n\t\t\tif (value === undefined || Array.isArray(value)) {\n\t\t\t\treturn `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n\t\t\t}\n\t\t\tconst operatorMap = {\n\t\t\t\teq: \"=\",\n\t\t\t\tgt: \">\",\n\t\t\t\tgte: \">=\",\n\t\t\t\tilike: \"ILIKE\",\n\t\t\t\tlike: \"LIKE\",\n\t\t\t\tlt: \"<\",\n\t\t\t\tlte: \"<=\",\n\t\t\t\tneq: \"!=\",\n\t\t\t} as const;\n\t\t\treturn `${column} ${operatorMap[filter.operator]} ${toSqlLiteral(value)}`;\n\t\t}\n\t\tcase \"is\":\n\t\t\tif (value === null) {\n\t\t\t\treturn `${column} IS NULL`;\n\t\t\t}\n\t\t\tif (value === true) {\n\t\t\t\treturn `${column} IS TRUE`;\n\t\t\t}\n\t\t\tif (value === false) {\n\t\t\t\treturn `${column} IS FALSE`;\n\t\t\t}\n\t\t\treturn `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n\t\tcase \"in\":\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\treturn `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n\t\t\t}\n\t\t\tif (value.length === 0) {\n\t\t\t\treturn \"FALSE\";\n\t\t\t}\n\t\t\treturn `${column} IN (${value.map((item) => toSqlLiteral(item)).join(\", \")})`;\n\t\tdefault:\n\t\t\treturn `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n\t}\n}\n\nexport function buildRpcDebugSql(payload: AthenaRpcPayload): string {\n\tconst argsEntries = payload.args ? Object.entries(payload.args) : [];\n\tconst argsClause = argsEntries\n\t\t.map(\n\t\t\t([key, value]) =>\n\t\t\t\t`${quoteQualifiedIdentifier(key)} => ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n\t\t)\n\t\t.join(\", \");\n\tconst functionRef = payload.schema\n\t\t? `${quoteQualifiedIdentifier(payload.schema)}.${quoteQualifiedIdentifier(payload.function)}`\n\t\t: quoteQualifiedIdentifier(payload.function);\n\tconst sqlParts = [\n\t\t`SELECT ${payload.select ? quoteSelectColumnsExpression(payload.select) : \"*\"} FROM ${functionRef}(${argsClause})`,\n\t];\n\tif (payload.filters?.length) {\n\t\tsqlParts.push(\n\t\t\t`WHERE ${payload.filters.map(rpcFilterToSqlClause).join(\" AND \")}`,\n\t\t);\n\t}\n\tif (payload.order?.column) {\n\t\tconst direction = payload.order.ascending === false ? \"DESC\" : \"ASC\";\n\t\tsqlParts.push(\n\t\t\t`ORDER BY ${quoteQualifiedIdentifier(payload.order.column)} ${direction}`,\n\t\t);\n\t}\n\tif (payload.limit !== undefined) {\n\t\tsqlParts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`);\n\t}\n\tif (payload.offset !== undefined) {\n\t\tsqlParts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`);\n\t}\n\treturn `${sqlParts.join(\" \")};`;\n}\n","/**\n * Shared physical resource identity for Schema IR, Policy IR, the runtime\n * model index, and Data Nucleus. `model` is Schema IR identity, not a table alias.\n */\n\nexport type AthenaResourceKind =\n  | \"relation\"\n  | \"storage-object\"\n  | \"auth\"\n  | \"service\";\n\nexport type AthenaResourceInput = {\n  table: string;\n  schema?: string;\n  database?: string;\n};\n\nexport type AthenaResourceRef =\n  | { table: string; schema?: never; database?: never }\n  | { schema: string; table: string; database?: string };\n\nexport type AthenaResourceIdentity =\n  | {\n      kind: \"relation\";\n      ref: AthenaResourceRef;\n      canonicalResource: string;\n      model?: string;\n    }\n  | {\n      kind: \"storage-object\";\n      bucket?: string;\n      key: string;\n      canonicalResource: string;\n    }\n  | {\n      kind: \"auth\";\n      resource: string;\n      canonicalResource: string;\n    }\n  | {\n      kind: \"service\";\n      service: string;\n      canonicalResource: string;\n    };\n\nexport interface AthenaResolvedResource {\n  table: string;\n  schema?: string;\n  database?: string;\n  canonicalResource: string;\n  model?: string;\n}\n\nexport type AthenaResourceLookup = {\n  get(resource: string): AthenaResolvedResource | undefined;\n};\n\nfunction trimOptional(value: string | undefined): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed ? trimmed : undefined;\n}\n\nexport function parseAthenaResourceRef(value: string): AthenaResourceRef {\n  const parts = value\n    .trim()\n    .split(\".\")\n    .map((part) => part.trim())\n    .filter(Boolean);\n  if (parts.length >= 3) {\n    return {\n      database: parts[0],\n      schema: parts[1],\n      table: parts[parts.length - 1] as string,\n    };\n  }\n  if (parts.length === 2) {\n    return {\n      schema: parts[0],\n      table: parts[1] as string,\n    };\n  }\n  return { table: parts[0] ?? \"\" };\n}\n\nexport function normalizeAthenaResourceRef(\n  ref: AthenaResourceInput,\n): AthenaResourceRef {\n  const table = ref.table.trim();\n  const schema = trimOptional(ref.schema);\n  const database = schema ? trimOptional(ref.database) : undefined;\n  if (schema) {\n    return database ? { database, schema, table } : { schema, table };\n  }\n  return { table };\n}\n\nexport function canonicalAthenaResource(ref: AthenaResourceInput): string {\n  const normalized = normalizeAthenaResourceRef(ref);\n  if (\"schema\" in normalized && normalized.schema) {\n    return normalized.database\n      ? `${normalized.database}.${normalized.schema}.${normalized.table}`\n      : `${normalized.schema}.${normalized.table}`;\n  }\n  return normalized.table;\n}\n\nexport function athenaResourceKeys(ref: AthenaResourceInput): string[] {\n  const normalized = normalizeAthenaResourceRef(ref);\n  const keys = new Set<string>();\n  if (normalized.table) {\n    keys.add(normalized.table);\n  }\n  if (\"schema\" in normalized && normalized.schema && normalized.table) {\n    keys.add(`${normalized.schema}.${normalized.table}`);\n    if (normalized.database) {\n      keys.add(\n        `${normalized.database}.${normalized.schema}.${normalized.table}`,\n      );\n    }\n  }\n  return [...keys];\n}\n\nexport function resolvedAthenaResource(\n  ref: AthenaResourceInput & { model?: string },\n): AthenaResolvedResource {\n  const normalized = normalizeAthenaResourceRef(ref);\n  const model = trimOptional(ref.model);\n  return {\n    ...normalized,\n    canonicalResource: canonicalAthenaResource(normalized),\n    ...(model ? { model } : {}),\n  };\n}\n\nfunction pickResolved(\n  value: AthenaResolvedResource,\n): AthenaResolvedResource {\n  return resolvedAthenaResource(value);\n}\n\nfunction rawResourceToken(payload: unknown): string | undefined {\n  if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n    return undefined;\n  }\n  const record = payload as Record<string, unknown>;\n  const table =\n    typeof record.table_name === \"string\" ? record.table_name.trim() : \"\";\n  const view =\n    typeof record.view_name === \"string\" ? record.view_name.trim() : \"\";\n  return table || view || undefined;\n}\n\nexport function resolveAthenaResourceFromPayload(\n  payload: unknown,\n  modelIndex?: AthenaResourceLookup,\n): AthenaResolvedResource | undefined {\n  const token = rawResourceToken(payload);\n  if (!token) {\n    return undefined;\n  }\n  const parsed = parseAthenaResourceRef(token);\n  const candidates = [\n    token,\n    canonicalAthenaResource(parsed),\n    ...athenaResourceKeys(parsed),\n  ];\n  if (modelIndex) {\n    for (const candidate of candidates) {\n      const found = modelIndex.get(candidate);\n      if (found) {\n        return pickResolved(found);\n      }\n    }\n  }\n  if (!parsed.table) {\n    return undefined;\n  }\n  return resolvedAthenaResource(parsed);\n}\n\nexport function relationResourceIdentity(\n  ref: AthenaResourceInput & { model?: string },\n): AthenaResourceIdentity {\n  const resolved = resolvedAthenaResource(ref);\n  return {\n    kind: \"relation\",\n    ref: normalizeAthenaResourceRef(ref),\n    canonicalResource: resolved.canonicalResource,\n    ...(resolved.model ? { model: resolved.model } : {}),\n  };\n}\n\nexport function storageObjectResourceIdentity(input: {\n  bucket?: string;\n  key: string;\n}): AthenaResourceIdentity {\n  const key = input.key.trim();\n  const bucket = trimOptional(input.bucket);\n  return {\n    kind: \"storage-object\",\n    ...(bucket ? { bucket } : {}),\n    key,\n    canonicalResource: bucket ? `${bucket}/${key}` : key,\n  };\n}\n\nexport function authResourceIdentity(resource: string): AthenaResourceIdentity {\n  const token = resource.trim();\n  return {\n    kind: \"auth\",\n    resource: token,\n    canonicalResource: token,\n  };\n}\n\nexport function serviceResourceIdentity(service: string): AthenaResourceIdentity {\n  const token = service.trim();\n  return {\n    kind: \"service\",\n    service: token,\n    canonicalResource: token,\n  };\n}\n\nexport function canonicalAthenaResourceIdentity(\n  identity: AthenaResourceIdentity,\n): string {\n  return identity.canonicalResource;\n}\n\nexport function matchAthenaResource(\n  scope: AthenaResourceInput | string,\n  resolved: AthenaResolvedResource,\n): boolean {\n  const ref = normalizeAthenaResourceRef(\n    typeof scope === \"string\" ? parseAthenaResourceRef(scope) : scope,\n  );\n  if (!ref.table.trim() || ref.table.trim() !== resolved.table) {\n    return false;\n  }\n  const scopeSchema = ref.schema;\n  if (scopeSchema && scopeSchema !== resolved.schema) {\n    return false;\n  }\n  const scopeDatabase = ref.database;\n  if (scopeDatabase && scopeDatabase !== resolved.database) {\n    return false;\n  }\n  return true;\n}\n","/**\n * Single Athena identity protocol for query keys, entity IDs, fingerprints,\n * mutation keys, SSR snapshots, and MCP descriptors.\n */\n\nconst TYPE_NULL = \"null\";\nconst TYPE_UNDEFINED = \"undefined\";\nconst TYPE_STRING = \"s\";\nconst TYPE_NUMBER = \"n\";\nconst TYPE_BOOLEAN = \"b\";\nconst TYPE_BIGINT = \"bi\";\nconst TYPE_DATE = \"date\";\nconst TYPE_ARRAY = \"array\";\nconst TYPE_OBJECT = \"object\";\nconst TYPE_MAP = \"map\";\nconst TYPE_SET = \"set\";\nconst TYPE_BYTES = \"bytes\";\nconst TYPE_CIRCULAR = \"circular\";\n\nfunction escapeTag(value: string): string {\n  return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\nexport function canonicalizeAthenaValue(\n  value: unknown,\n  seen = new WeakSet<object>(),\n): string {\n  if (value === null) {\n    return TYPE_NULL;\n  }\n  if (value === undefined) {\n    return TYPE_UNDEFINED;\n  }\n\n  const valueType = typeof value;\n  if (valueType === \"string\") {\n    return `${TYPE_STRING}:\"${escapeTag(value as string)}\"`;\n  }\n  if (valueType === \"boolean\") {\n    return `${TYPE_BOOLEAN}:${value ? \"true\" : \"false\"}`;\n  }\n  if (valueType === \"number\") {\n    if (Number.isNaN(value)) {\n      return `${TYPE_NUMBER}:NaN`;\n    }\n    if (value === Number.POSITIVE_INFINITY) {\n      return `${TYPE_NUMBER}:Infinity`;\n    }\n    if (value === Number.NEGATIVE_INFINITY) {\n      return `${TYPE_NUMBER}:-Infinity`;\n    }\n    return `${TYPE_NUMBER}:${value}`;\n  }\n  if (valueType === \"bigint\") {\n    return `${TYPE_BIGINT}:${value.toString()}`;\n  }\n  if (valueType === \"symbol\") {\n    return `symbol:${escapeTag(String((value as symbol).description ?? \"\"))}`;\n  }\n  if (valueType === \"function\") {\n    const named = value as { name?: string };\n    return `function:${escapeTag(named.name || \"anonymous\")}`;\n  }\n\n  if (value instanceof Date) {\n    const time = value.getTime();\n    return Number.isNaN(time)\n      ? `${TYPE_DATE}:Invalid`\n      : `${TYPE_DATE}:${value.toISOString()}`;\n  }\n\n  if (typeof ArrayBuffer !== \"undefined\" && value instanceof ArrayBuffer) {\n    return `${TYPE_BYTES}:${arrayBufferToHex(value)}`;\n  }\n  if (ArrayBuffer.isView(value)) {\n    const view = value as ArrayBufferView;\n    const copy = new Uint8Array(view.byteLength);\n    copy.set(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));\n    return `${TYPE_BYTES}:${[...copy].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")}`;\n  }\n\n  const objectValue = value as object;\n  if (seen.has(objectValue)) {\n    return TYPE_CIRCULAR;\n  }\n  seen.add(objectValue);\n\n  try {\n    if (value instanceof Map) {\n      const entries = [...value.entries()]\n        .map(\n          ([key, item]) =>\n            `[${canonicalizeAthenaValue(key, seen)},${canonicalizeAthenaValue(item, seen)}]`,\n        )\n        .sort((left, right) => left.localeCompare(right));\n      return `${TYPE_MAP}:[${entries.join(\",\")}]`;\n    }\n    if (value instanceof Set) {\n      const items = [...value]\n        .map((item) => canonicalizeAthenaValue(item, seen))\n        .sort((left, right) => left.localeCompare(right));\n      return `${TYPE_SET}:[${items.join(\",\")}]`;\n    }\n    if (Array.isArray(value)) {\n      return `${TYPE_ARRAY}:[${value\n        .map((item) => canonicalizeAthenaValue(item, seen))\n        .join(\",\")}]`;\n    }\n\n    const record = value as Record<string, unknown>;\n    const keys = Object.keys(record).sort((left, right) =>\n      left.localeCompare(right),\n    );\n    const fields = keys.map(\n      (key) =>\n        `${TYPE_STRING}:\"${escapeTag(key)}\":${canonicalizeAthenaValue(record[key], seen)}`,\n    );\n    return `${TYPE_OBJECT}:{${fields.join(\",\")}}`;\n  } finally {\n    seen.delete(objectValue);\n  }\n}\n\nfunction arrayBufferToHex(buffer: ArrayBuffer): string {\n  return [...new Uint8Array(buffer)]\n    .map((byte) => byte.toString(16).padStart(2, \"0\"))\n    .join(\"\");\n}\n\n/** FNV-1a 32-bit over the canonical form. Deterministic across runtimes. */\nexport function hashAthenaValue(value: unknown): string {\n  const canonical = canonicalizeAthenaValue(value);\n  let hash = 2_166_136_261;\n  for (let index = 0; index < canonical.length; index += 1) {\n    hash ^= canonical.charCodeAt(index);\n    hash = Math.imul(hash, 16_777_619);\n  }\n  return (hash >>> 0).toString(16).padStart(8, \"0\");\n}\n","import type { AthenaGatewayCondition, AthenaSortBy } from \"../gateway/types.ts\";\nimport { parseAthenaResourceRef } from \"../schema/resource.ts\";\nimport type { AthenaModelTarget } from \"../schema/types.ts\";\nimport { hashAthenaValue } from \"./canonicalize.ts\";\n\nexport const ATHENA_EXECUTABLE = Symbol.for(\"@xylex-group/athena/executable\");\n\nexport type AthenaQueryOperation =\n  | \"select\"\n  | \"findMany\"\n  | \"single\"\n  | \"maybeSingle\"\n  | \"count\"\n  | \"insert\"\n  | \"update\"\n  | \"upsert\"\n  | \"delete\";\n\nexport type AthenaProjectionKind =\n  | \"full-model\"\n  | \"partial-model\"\n  | \"aggregate\"\n  | \"expression\"\n  | \"unknown\";\n\nexport type AthenaQueryFieldDependencyKind =\n  | \"filter\"\n  | \"order\"\n  | \"projection\"\n  | \"identity\";\n\nexport interface AthenaQueryTarget {\n  database?: string;\n  model?: string;\n  schema?: string;\n  table: string;\n}\n\n/**\n * Access-envelope identity for cache / entity graph isolation.\n * `accessScope` should be an opaque, non-secret fingerprint from Auth/Gateway.\n */\nexport interface AthenaCacheScope {\n  accessScope?: string;\n  organizationId?: string;\n  policyRevision?: string;\n  userId?: string;\n}\n\n/** @deprecated Use {@link AthenaCacheScope}. */\nexport type AthenaCacheContextDescriptor = AthenaCacheScope;\n\nexport type AthenaPredicateNode =\n  | AthenaComparePredicateNode\n  | AthenaLogicalPredicateNode\n  | AthenaNotPredicateNode;\n\nexport interface AthenaComparePredicateNode {\n  kind: \"compare\";\n  column?: string;\n  operator: string;\n  value?: unknown;\n}\n\nexport interface AthenaLogicalPredicateNode {\n  kind: \"and\" | \"or\";\n  nodes: readonly AthenaPredicateNode[];\n}\n\nexport interface AthenaNotPredicateNode {\n  kind: \"not\";\n  node: AthenaPredicateNode;\n}\n\nexport interface AthenaSelectionNode {\n  columns?: readonly string[];\n  name: string;\n  star?: boolean;\n  targetModel?: string;\n  targetSchema?: string;\n}\n\nexport interface AthenaPagination {\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  pageSize?: number;\n}\n\nexport interface AthenaProjectionDescriptor {\n  columns?: readonly string[];\n  kind: AthenaProjectionKind;\n  star?: boolean;\n}\n\nexport interface AthenaFilterDescriptor {\n  column?: string;\n  operator: string;\n  value?: unknown;\n}\n\nexport interface AthenaOrderDescriptor {\n  ascending: boolean;\n  column: string;\n}\n\nexport interface AthenaRangeDescriptor {\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  pageSize?: number;\n}\n\nexport interface AthenaRelationDescriptor {\n  columns?: readonly string[];\n  name: string;\n  sourceColumns?: readonly string[];\n  star?: boolean;\n  targetColumns?: readonly string[];\n  targetModel?: string;\n  targetSchema?: string;\n  via?: string;\n}\n\nexport interface AthenaModelDependency {\n  database?: string;\n  model?: string;\n  schema?: string;\n  table: string;\n}\n\nexport interface AthenaFieldDependency {\n  column: string;\n  roles: readonly AthenaQueryFieldDependencyKind[];\n  table: string;\n}\n\nexport interface AthenaQueryDependencyDescriptor {\n  fields: readonly AthenaFieldDependency[];\n  models: readonly AthenaModelDependency[];\n  relations: readonly AthenaRelationDependency[];\n}\n\nexport interface AthenaRelationDependency {\n  name: string;\n  targetModel?: string;\n  targetSchema?: string;\n}\n\nexport interface AthenaQueryDescriptor {\n  changedFields?: readonly string[];\n  context?: AthenaCacheScope;\n  dependency: AthenaQueryDependencyDescriptor;\n  filters?: readonly AthenaFilterDescriptor[];\n  modelFingerprint?: string;\n  modelScopeKey: readonly unknown[];\n  operation: AthenaQueryOperation;\n  order?: readonly AthenaOrderDescriptor[];\n  pagination?: AthenaPagination;\n  predicate?: AthenaPredicateNode;\n  projection?: AthenaProjectionDescriptor;\n  queryKey: readonly unknown[];\n  range?: AthenaRangeDescriptor;\n  relations?: readonly AthenaRelationDescriptor[];\n  schemaRevision?: string;\n  scope?: AthenaCacheScope;\n  selection?: readonly AthenaSelectionNode[];\n  target: AthenaQueryTarget;\n  version: 1 | 2;\n}\n\nexport interface AthenaExecuteOptions {\n  signal?: AbortSignal;\n}\n\nexport interface AthenaExecutable<TResult> {\n  capture(): AthenaExecutable<TResult>;\n  execute(options?: AthenaExecuteOptions): Promise<TResult>;\n  getDescriptor(): AthenaQueryDescriptor;\n  readonly model?: AthenaModelTarget;\n}\n\nexport interface AthenaQueryDescriptorCompileInput {\n  changedFields?: readonly string[];\n  conditions?: readonly AthenaGatewayCondition[];\n  context?: AthenaCacheScope;\n  currentPage?: number;\n  limit?: number;\n  model?: AthenaModelTarget;\n  offset?: number;\n  operation: AthenaQueryOperation;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  projection?: string | readonly string[] | null;\n  /** Relations actually consumed by this query — not the model's full graph. */\n  relations?: readonly AthenaRelationDescriptor[];\n  schemaRevision?: string;\n  tableName: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction stableHash(value: unknown): string {\n  return hashAthenaValue(value);\n}\n\nfunction normalizeOptional(value: string | undefined): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed ? trimmed : undefined;\n}\n\nexport function resolveAthenaQueryTarget(\n  tableName: string,\n  model?: AthenaModelTarget,\n): AthenaQueryTarget {\n  const parsed = parseAthenaResourceRef(tableName);\n  const meta = model?.meta;\n  const schema = parsed.schema ?? normalizeOptional(meta?.schema);\n  const table =\n    parsed.table ||\n    normalizeOptional(meta?.tableName)?.split(\".\").at(-1) ||\n    \"\";\n  return {\n    database: parsed.database ?? normalizeOptional(meta?.database),\n    model: normalizeOptional(meta?.model),\n    schema,\n    table,\n  };\n}\n\nfunction looksAggregate(column: string): boolean {\n  return /\\b(?:avg|count|max|min|sum)\\s*\\(/i.test(column);\n}\n\nfunction looksExpression(column: string): boolean {\n  return /[(:]| as /i.test(column);\n}\n\nfunction compileProjection(\n  projection: string | readonly string[] | null | undefined,\n  model?: AthenaModelTarget,\n): AthenaProjectionDescriptor {\n  const modelColumns = model?.meta.columns\n    ? Object.keys(model.meta.columns)\n    : [];\n\n  const classifyColumns = (\n    columns: readonly string[],\n  ): AthenaProjectionKind => {\n    if (columns.some((column) => looksAggregate(column))) {\n      return \"aggregate\";\n    }\n    if (columns.some((column) => looksExpression(column))) {\n      return \"expression\";\n    }\n    if (!model) {\n      return \"unknown\";\n    }\n    const known = new Set([...modelColumns, ...(model.meta.primaryKey ?? [])]);\n    if (columns.every((column) => known.has(column))) {\n      return columns.length === modelColumns.length &&\n        modelColumns.every((column) => columns.includes(column))\n        ? \"full-model\"\n        : \"partial-model\";\n    }\n    return \"unknown\";\n  };\n\n  if (projection === undefined || projection === null) {\n    return { kind: model ? \"full-model\" : \"unknown\", star: true };\n  }\n  if (typeof projection === \"string\") {\n    const trimmed = projection.trim();\n    if (!trimmed || trimmed === \"*\") {\n      return { kind: model ? \"full-model\" : \"unknown\", star: true };\n    }\n    return { columns: [trimmed], kind: classifyColumns([trimmed]) };\n  }\n  const columns = projection.map((column) => column.trim()).filter(Boolean);\n  if (columns.length === 0 || columns.includes(\"*\")) {\n    return { kind: model ? \"full-model\" : \"unknown\", star: true };\n  }\n  const sorted = [...columns].sort((left, right) => left.localeCompare(right));\n  return { columns: sorted, kind: classifyColumns(sorted) };\n}\n\nfunction compileFilters(\n  conditions: readonly AthenaGatewayCondition[] | undefined,\n): AthenaFilterDescriptor[] {\n  if (!conditions?.length) {\n    return [];\n  }\n  return conditions\n    .map((condition) => ({\n      column: condition.column ?? condition.eq_column,\n      operator: condition.operator,\n      value: condition.value ?? condition.eq_value,\n    }))\n    .sort((left, right) => {\n      const columnCompare = (left.column ?? \"\").localeCompare(\n        right.column ?? \"\",\n      );\n      if (columnCompare !== 0) {\n        return columnCompare;\n      }\n      const operatorCompare = left.operator.localeCompare(right.operator);\n      if (operatorCompare !== 0) {\n        return operatorCompare;\n      }\n      return stableHash(left.value).localeCompare(stableHash(right.value));\n    });\n}\n\nfunction compileOrder(\n  order: AthenaSortBy | undefined,\n): AthenaOrderDescriptor[] {\n  if (!order?.field) {\n    return [];\n  }\n  return [\n    {\n      ascending: order.direction !== \"descending\",\n      column: order.field,\n    },\n  ];\n}\n\nfunction compileRange(\n  input: AthenaQueryDescriptorCompileInput,\n): AthenaRangeDescriptor | undefined {\n  if (\n    input.limit === undefined &&\n    input.offset === undefined &&\n    input.currentPage === undefined &&\n    input.pageSize === undefined\n  ) {\n    return;\n  }\n  return {\n    currentPage: input.currentPage,\n    limit: input.limit,\n    offset: input.offset,\n    pageSize: input.pageSize,\n  };\n}\n\nfunction compileRelations(\n  input: AthenaQueryDescriptorCompileInput,\n): AthenaRelationDescriptor[] {\n  const requested = input.relations;\n  if (!requested?.length) {\n    return [];\n  }\n  const modelRelations = input.model?.meta.relations;\n  return [...requested]\n    .map((relation) => {\n      const meta = modelRelations?.[relation.name];\n      return {\n        columns: relation.columns,\n        name: relation.name,\n        sourceColumns: relation.sourceColumns ?? meta?.sourceColumns,\n        star: relation.star ?? !relation.columns?.length,\n        targetColumns: relation.targetColumns ?? meta?.targetColumns,\n        targetModel: relation.targetModel ?? meta?.targetModel,\n        targetSchema: relation.targetSchema ?? meta?.targetSchema,\n        via: relation.via ?? meta?.targetModel,\n      };\n    })\n    .sort((left, right) => left.name.localeCompare(right.name));\n}\n\nfunction compileContext(\n  context: AthenaCacheScope | undefined,\n): AthenaCacheScope | undefined {\n  if (!context) {\n    return;\n  }\n  const organizationId = normalizeOptional(context.organizationId);\n  const userId = normalizeOptional(context.userId);\n  const accessScope = normalizeOptional(context.accessScope);\n  const policyRevision = normalizeOptional(context.policyRevision);\n  if (!(organizationId || userId || accessScope || policyRevision)) {\n    return;\n  }\n  return {\n    ...(accessScope ? { accessScope } : {}),\n    ...(organizationId ? { organizationId } : {}),\n    ...(policyRevision ? { policyRevision } : {}),\n    ...(userId ? { userId } : {}),\n  };\n}\n\nfunction compilePredicate(\n  filters: readonly AthenaFilterDescriptor[],\n): AthenaPredicateNode | undefined {\n  if (filters.length === 0) {\n    return;\n  }\n  const nodes: AthenaPredicateNode[] = filters.map((filter) => ({\n    column: filter.column,\n    kind: \"compare\",\n    operator: filter.operator,\n    value: filter.value,\n  }));\n  if (nodes.length === 1) {\n    return nodes[0];\n  }\n  return { kind: \"and\", nodes };\n}\n\nfunction compileSelection(\n  target: AthenaQueryTarget,\n  projection: AthenaProjectionDescriptor,\n  relations: readonly AthenaRelationDescriptor[],\n): AthenaSelectionNode[] {\n  const root: AthenaSelectionNode = {\n    columns: projection.columns,\n    name: target.model ?? target.table,\n    star: projection.star,\n    targetModel: target.model,\n    targetSchema: target.schema,\n  };\n  const nested = relations.map((relation) => ({\n    columns: relation.columns,\n    name: relation.name,\n    star: relation.star,\n    targetModel: relation.targetModel,\n    targetSchema: relation.targetSchema,\n  }));\n  return [root, ...nested];\n}\n\nfunction compileDependencies(\n  target: AthenaQueryTarget,\n  filters: readonly AthenaFilterDescriptor[],\n  order: readonly AthenaOrderDescriptor[],\n  projection: AthenaProjectionDescriptor,\n  relations: readonly AthenaRelationDescriptor[],\n  model?: AthenaModelTarget,\n): AthenaQueryDependencyDescriptor {\n  const fields = new Map<string, AthenaFieldDependency>();\n  const addField = (\n    column: string | undefined,\n    role: AthenaQueryFieldDependencyKind,\n  ) => {\n    if (!column) {\n      return;\n    }\n    const key = `${target.table}.${column}`;\n    const existing = fields.get(key);\n    if (existing) {\n      if (!existing.roles.includes(role)) {\n        fields.set(key, {\n          column,\n          roles: [...existing.roles, role],\n          table: target.table,\n        });\n      }\n      return;\n    }\n    fields.set(key, { column, roles: [role], table: target.table });\n  };\n\n  for (const filter of filters) {\n    addField(filter.column, \"filter\");\n  }\n  for (const entry of order) {\n    addField(entry.column, \"order\");\n  }\n  if (!projection.star) {\n    for (const column of projection.columns ?? []) {\n      addField(column, \"projection\");\n    }\n  }\n  for (const column of model?.meta.primaryKey ?? []) {\n    addField(column, \"identity\");\n  }\n\n  const models: AthenaModelDependency[] = [\n    {\n      database: target.database,\n      model: target.model,\n      schema: target.schema,\n      table: target.table,\n    },\n  ];\n  for (const relation of relations) {\n    if (relation.targetModel) {\n      models.push({\n        model: relation.targetModel,\n        schema: relation.targetSchema,\n        table: relation.targetModel,\n      });\n    }\n  }\n\n  return {\n    fields: [...fields.values()].sort((left, right) =>\n      `${left.table}.${left.column}`.localeCompare(\n        `${right.table}.${right.column}`,\n      ),\n    ),\n    models,\n    relations: relations.map((relation) => ({\n      name: relation.name,\n      targetModel: relation.targetModel,\n      targetSchema: relation.targetSchema,\n    })),\n  };\n}\n\nexport function buildAthenaModelScopeKey(\n  target: AthenaQueryTarget,\n  context?: AthenaCacheContextDescriptor,\n): readonly unknown[] {\n  const qualified = target.schema\n    ? `${target.schema}.${target.table}`\n    : target.table;\n  return [\"athena\", \"model\", context ?? null, qualified];\n}\n\nexport function buildAthenaQueryKey(\n  modelScopeKey: readonly unknown[],\n  operation: AthenaQueryOperation,\n  hashes: {\n    filters: string;\n    order: string;\n    projection: string;\n    range: string;\n    relations: string;\n  },\n): readonly unknown[] {\n  return [\n    ...modelScopeKey,\n    operation,\n    hashes.projection,\n    hashes.filters,\n    hashes.relations,\n    hashes.order,\n    hashes.range,\n  ];\n}\n\nexport function compileAthenaQueryDescriptor(\n  input: AthenaQueryDescriptorCompileInput,\n): AthenaQueryDescriptor {\n  const target = resolveAthenaQueryTarget(input.tableName, input.model);\n  const context = compileContext(input.context);\n  const projection = compileProjection(input.projection, input.model);\n  const filters = compileFilters(input.conditions);\n  const order = compileOrder(input.order);\n  const range = compileRange(input);\n  const relations = compileRelations(input);\n  const dependency = compileDependencies(\n    target,\n    filters,\n    order,\n    projection,\n    relations,\n    input.model,\n  );\n  const predicate = compilePredicate(filters);\n  const selection = compileSelection(target, projection, relations);\n  const modelScopeKey = buildAthenaModelScopeKey(target, context);\n  const modelFingerprint = hashAthenaValue({\n    model: target.model ?? null,\n    schema: target.schema ?? null,\n    table: target.table,\n  });\n  const queryKey = buildAthenaQueryKey(modelScopeKey, input.operation, {\n    filters: stableHash(filters),\n    order: stableHash(order),\n    projection: stableHash({\n      columns: projection.columns ?? null,\n      star: Boolean(projection.star),\n    }),\n    range: stableHash(range ?? null),\n    relations: stableHash(relations),\n  });\n\n  return freezeAthenaQueryDescriptor({\n    changedFields: input.changedFields?.length\n      ? [...input.changedFields].sort((left, right) =>\n          left.localeCompare(right),\n        )\n      : undefined,\n    context,\n    dependency,\n    filters: filters.length > 0 ? filters : undefined,\n    modelFingerprint,\n    modelScopeKey,\n    operation: input.operation,\n    order: order.length > 0 ? order : undefined,\n    pagination: range,\n    predicate,\n    projection,\n    queryKey,\n    range,\n    relations: relations.length > 0 ? relations : undefined,\n    schemaRevision: input.schemaRevision,\n    scope: context,\n    selection,\n    target,\n    version: 2,\n  });\n}\n\nfunction freezeAthenaQueryDescriptor(\n  descriptor: AthenaQueryDescriptor,\n): AthenaQueryDescriptor {\n  freezeDeep(descriptor.dependency.fields);\n  freezeDeep(descriptor.dependency.models);\n  freezeDeep(descriptor.dependency.relations);\n  freezeDeep(descriptor.dependency);\n  if (descriptor.filters) {\n    freezeDeep(descriptor.filters);\n  }\n  if (descriptor.order) {\n    freezeDeep(descriptor.order);\n  }\n  if (descriptor.projection) {\n    freezeDeep(descriptor.projection);\n  }\n  if (descriptor.range) {\n    freezeDeep(descriptor.range);\n  }\n  if (descriptor.relations) {\n    freezeDeep(descriptor.relations);\n  }\n  if (descriptor.context) {\n    freezeDeep(descriptor.context);\n  }\n  if (descriptor.scope) {\n    freezeDeep(descriptor.scope);\n  }\n  if (descriptor.selection) {\n    freezeDeep(descriptor.selection);\n  }\n  if (descriptor.predicate) {\n    freezeDeep(descriptor.predicate);\n  }\n  freezeDeep(descriptor.target);\n  freezeDeep(descriptor.modelScopeKey);\n  freezeDeep(descriptor.queryKey);\n  if (descriptor.changedFields) {\n    freezeDeep(descriptor.changedFields);\n  }\n  return Object.freeze(descriptor);\n}\n\nfunction freezeDeep<T>(value: T): T {\n  if (value === null || typeof value !== \"object\") {\n    return value;\n  }\n  if (Object.isFrozen(value)) {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    for (const item of value) {\n      freezeDeep(item);\n    }\n  } else {\n    for (const key of Object.keys(value as object)) {\n      freezeDeep((value as Record<string, unknown>)[key]);\n    }\n  }\n  return Object.freeze(value);\n}\n\nexport function createCapturedAthenaExecutable<TResult>(input: {\n  descriptor: AthenaQueryDescriptor;\n  execute: (options?: AthenaExecuteOptions) => Promise<TResult>;\n  model?: AthenaModelTarget;\n}): AthenaExecutable<TResult> {\n  const captured: AthenaExecutable<TResult> = {\n    capture() {\n      return captured;\n    },\n    execute: (options) => input.execute(options),\n    getDescriptor() {\n      return input.descriptor;\n    },\n    model: input.model,\n  };\n  return captured;\n}\n\nexport function isAthenaExecutable(\n  value: unknown,\n): value is AthenaExecutable<unknown> {\n  if (!isRecord(value)) {\n    return false;\n  }\n  return (\n    typeof value.getDescriptor === \"function\" &&\n    typeof value.execute === \"function\" &&\n    typeof value.capture === \"function\"\n  );\n}\n\nexport function peekSyncCacheContext(\n  resolve:\n    | (() =>\n        | AthenaCacheScope\n        | {\n            accessScope?: string | null;\n            organizationId?: string | null;\n            policyRevision?: string | null;\n            userId?: string | null;\n          }\n        | undefined\n        | Promise<unknown>)\n    | undefined\n): AthenaCacheScope | undefined {\n  if (!resolve) {\n    return;\n  }\n  const resolved = resolve();\n  if (\n    resolved &&\n    typeof resolved === \"object\" &&\n    \"then\" in resolved &&\n    typeof resolved.then === \"function\"\n  ) {\n    return;\n  }\n  if (!resolved || typeof resolved !== \"object\") {\n    return;\n  }\n  const record = resolved as {\n    accessScope?: string | null;\n    organizationId?: string | null;\n    policyRevision?: string | null;\n    userId?: string | null;\n  };\n  return compileContext({\n    accessScope: record.accessScope ?? undefined,\n    organizationId: record.organizationId ?? undefined,\n    policyRevision: record.policyRevision ?? undefined,\n    userId: record.userId ?? undefined,\n  });\n}\n","import type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from \"./gateway/types.ts\";\nimport type {\n  AthenaFindManyOptions,\n  AthenaOrderBy,\n  AthenaSelectShape,\n  AthenaWhere,\n} from \"./query-ast.ts\";\nimport type {\n  AthenaFindManyAstPayload,\n  AthenaSelectTransportPlan,\n} from \"./query-transport.ts\";\n\nconst ATHENA_DEBUG_AST_KEY = \"__athenaDebugAst\" as const;\n\nexport interface AthenaTableBuilderStateAst {\n  conditions: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  totalPages?: number;\n}\n\nexport interface AthenaRpcBuilderStateAst {\n  filters: AthenaRpcFilter[];\n  limit?: number;\n  offset?: number;\n  order?: {\n    column: string;\n    ascending?: boolean;\n  };\n}\n\nexport type AthenaDebugQueryEndpoint =\n  | \"/gateway/fetch\"\n  | \"/gateway/insert\"\n  | \"/gateway/update\"\n  | \"/gateway/delete\"\n  | \"/gateway/rpc\"\n  | \"/gateway/query\"\n  | `/rpc/${string}`;\n\ninterface AthenaDebugAstBase<TKind extends string> {\n  kind: TKind;\n  version: 1;\n}\n\nexport type AthenaSelectDebugTransport =\n  | {\n      mode: \"compiled-fetch\" | \"structured-fetch\";\n      endpoint: \"/gateway/fetch\";\n      payload: AthenaFetchPayload;\n    }\n  | {\n      mode: \"typed-query\";\n      endpoint: \"/gateway/query\";\n      payload: {\n        query: string;\n      };\n    };\n\nexport interface AthenaSelectDebugAst extends AthenaDebugAstBase<\"select\"> {\n  input: {\n    columns: string | string[];\n    state: AthenaTableBuilderStateAst;\n  };\n  tableName: string;\n  transport: AthenaSelectDebugTransport;\n}\n\nexport type AthenaFindManyDebugTransport<\n  Row = Record<string, unknown>,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> =\n  | {\n      mode: \"direct-ast-fetch\";\n      endpoint: \"/gateway/fetch\";\n      payload: AthenaFindManyAstPayload<Row, TSelect>;\n    }\n  | {\n      mode: \"compiled-fetch\" | \"structured-fetch\";\n      endpoint: \"/gateway/fetch\";\n      payload: AthenaFetchPayload;\n    }\n  | {\n      mode: \"compiled-query\";\n      endpoint: \"/gateway/query\";\n      payload: {\n        query: string;\n      };\n    };\n\nexport interface AthenaFindManyDebugAst<\n  Row = Record<string, unknown>,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> extends AthenaDebugAstBase<\"findMany\"> {\n  compiled: {\n    columns: string;\n    baseState: AthenaTableBuilderStateAst;\n    executionState: AthenaTableBuilderStateAst;\n  };\n  input: {\n    select: TSelect;\n    where?: AthenaWhere<Row>;\n    orderBy?: AthenaOrderBy<Row>;\n    limit?: number;\n  };\n  tableName: string;\n  transport: AthenaFindManyDebugTransport<Row, TSelect>;\n}\n\nexport interface AthenaInsertDebugAst extends AthenaDebugAstBase<\"insert\"> {\n  input: {\n    values: AthenaInsertPayload[\"insert_body\"];\n    returning?: AthenaInsertPayload[\"columns\"];\n    count?: AthenaInsertPayload[\"count\"];\n    head?: boolean;\n    defaultToNull?: boolean;\n  };\n  tableName: string;\n  transport: {\n    mode: \"insert\";\n    endpoint: \"/gateway/insert\";\n    payload: AthenaInsertPayload;\n  };\n}\n\nexport interface AthenaUpsertDebugAst extends AthenaDebugAstBase<\"upsert\"> {\n  input: {\n    values: AthenaInsertPayload[\"insert_body\"];\n    updateBody?: AthenaInsertPayload[\"update_body\"];\n    onConflict?: AthenaInsertPayload[\"on_conflict\"];\n    returning?: AthenaInsertPayload[\"columns\"];\n    count?: AthenaInsertPayload[\"count\"];\n    head?: boolean;\n    defaultToNull?: boolean;\n  };\n  tableName: string;\n  transport: {\n    mode: \"upsert\";\n    endpoint: \"/gateway/insert\";\n    payload: AthenaInsertPayload;\n  };\n}\n\nexport interface AthenaUpdateDebugAst extends AthenaDebugAstBase<\"update\"> {\n  input: {\n    values: AthenaUpdatePayload[\"update_body\"];\n    state: AthenaTableBuilderStateAst;\n    returning?: AthenaUpdatePayload[\"columns\"];\n  };\n  tableName: string;\n  transport: {\n    mode: \"update\";\n    endpoint: \"/gateway/update\";\n    payload: AthenaUpdatePayload;\n  };\n}\n\nexport interface AthenaDeleteDebugAst extends AthenaDebugAstBase<\"delete\"> {\n  input: {\n    resourceId?: AthenaDeletePayload[\"resource_id\"];\n    state: AthenaTableBuilderStateAst;\n    returning?: AthenaDeletePayload[\"columns\"];\n  };\n  tableName: string;\n  transport: {\n    mode: \"delete\";\n    endpoint: \"/gateway/delete\";\n    payload: AthenaDeletePayload;\n  };\n}\n\nexport interface AthenaRpcDebugAst extends AthenaDebugAstBase<\"rpc\"> {\n  functionName: string;\n  input: {\n    args?: AthenaJsonObject;\n    select?: string | string[];\n    state: AthenaRpcBuilderStateAst;\n  };\n  transport: {\n    mode: \"rpc-post\" | \"rpc-get\";\n    endpoint: \"/gateway/rpc\" | `/rpc/${string}`;\n    payload: AthenaRpcPayload;\n  };\n}\n\nexport interface AthenaRawQueryDebugAst extends AthenaDebugAstBase<\"query\"> {\n  input: {\n    query: string;\n  };\n  transport: {\n    mode: \"raw-query\";\n    endpoint: \"/gateway/query\";\n    payload: {\n      query: string;\n    };\n  };\n}\n\nexport type AthenaQueryDebugAst =\n  | AthenaSelectDebugAst\n  | AthenaFindManyDebugAst\n  | AthenaInsertDebugAst\n  | AthenaUpsertDebugAst\n  | AthenaUpdateDebugAst\n  | AthenaDeleteDebugAst\n  | AthenaRpcDebugAst\n  | AthenaRawQueryDebugAst;\n\nfunction cloneConditions(\n  conditions: AthenaGatewayCondition[]\n): AthenaGatewayCondition[] {\n  return conditions.map((condition) => ({ ...condition }));\n}\n\nexport function cloneTableBuilderStateAst(\n  state: AthenaTableBuilderStateAst\n): AthenaTableBuilderStateAst {\n  return {\n    conditions: cloneConditions(state.conditions),\n    currentPage: state.currentPage,\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n    pageSize: state.pageSize,\n    totalPages: state.totalPages,\n  };\n}\n\nexport function cloneRpcBuilderStateAst(\n  state: AthenaRpcBuilderStateAst\n): AthenaRpcBuilderStateAst {\n  return {\n    filters: state.filters.map((filter) => ({ ...filter })),\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n  };\n}\n\nfunction toSelectTransportAst(\n  plan: AthenaSelectTransportPlan\n): AthenaSelectDebugTransport {\n  if (plan.kind === \"query\") {\n    return {\n      endpoint: \"/gateway/query\",\n      mode: \"typed-query\",\n      payload: plan.payload,\n    };\n  }\n\n  return {\n    endpoint: \"/gateway/fetch\",\n    mode:\n      plan.payload.select === undefined ? \"compiled-fetch\" : \"structured-fetch\",\n    payload: plan.payload,\n  };\n}\n\nfunction resolveDebugTableName(tableName: string | undefined): string {\n  return tableName ?? \"__unknown_table__\";\n}\n\nexport function buildSelectDebugAst(input: {\n  tableName: string;\n  columns: string | string[];\n  state: AthenaTableBuilderStateAst;\n  plan: AthenaSelectTransportPlan;\n}): AthenaSelectDebugAst {\n  return {\n    input: {\n      columns: input.columns,\n      state: cloneTableBuilderStateAst(input.state),\n    },\n    kind: \"select\",\n    tableName: input.tableName,\n    transport: toSelectTransportAst(input.plan),\n    version: 1,\n  };\n}\n\nexport function buildFindManyCompiledDebugAst<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(input: {\n  tableName: string;\n  /** Already validated at the public `findMany` callsite. */\n  options: AthenaFindManyOptions<Row, TSelect>;\n  compiledColumns: string;\n  baseState: AthenaTableBuilderStateAst;\n  executionState: AthenaTableBuilderStateAst;\n  plan: AthenaSelectTransportPlan;\n}): AthenaFindManyDebugAst<Row, TSelect> {\n  return {\n    compiled: {\n      baseState: cloneTableBuilderStateAst(input.baseState),\n      columns: input.compiledColumns,\n      executionState: cloneTableBuilderStateAst(input.executionState),\n    },\n    input: {\n      limit: input.options.limit,\n      orderBy: input.options.orderBy,\n      select: input.options.select,\n      where: input.options.where,\n    },\n    kind: \"findMany\",\n    tableName: input.tableName,\n    transport: planToFindManyTransport<Row, TSelect>(input.plan),\n    version: 1,\n  };\n}\n\nexport function buildFindManyDirectDebugAst<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(input: {\n  tableName: string;\n  /** Already validated at the public `findMany` callsite. */\n  options: AthenaFindManyOptions<Row, TSelect>;\n  compiledColumns: string;\n  baseState: AthenaTableBuilderStateAst;\n  executionState: AthenaTableBuilderStateAst;\n  payload: AthenaFindManyAstPayload<Row, TSelect>;\n}): AthenaFindManyDebugAst<Row, TSelect> {\n  return {\n    compiled: {\n      baseState: cloneTableBuilderStateAst(input.baseState),\n      columns: input.compiledColumns,\n      executionState: cloneTableBuilderStateAst(input.executionState),\n    },\n    input: {\n      limit: input.options.limit,\n      orderBy: input.options.orderBy,\n      select: input.options.select,\n      where: input.options.where,\n    },\n    kind: \"findMany\",\n    tableName: input.tableName,\n    transport: {\n      endpoint: \"/gateway/fetch\",\n      mode: \"direct-ast-fetch\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nfunction planToFindManyTransport<Row, TSelect extends AthenaSelectShape>(\n  plan: AthenaSelectTransportPlan\n): AthenaFindManyDebugTransport<Row, TSelect> {\n  if (plan.kind === \"query\") {\n    return {\n      endpoint: \"/gateway/query\",\n      mode: \"compiled-query\",\n      payload: plan.payload,\n    };\n  }\n\n  return {\n    endpoint: \"/gateway/fetch\",\n    mode:\n      plan.payload.select === undefined ? \"compiled-fetch\" : \"structured-fetch\",\n    payload: plan.payload,\n  };\n}\n\nexport function buildInsertDebugAst(\n  payload: AthenaInsertPayload\n): AthenaInsertDebugAst {\n  return {\n    input: {\n      count: payload.count,\n      defaultToNull: payload.default_to_null,\n      head: payload.head,\n      returning: payload.columns,\n      values: payload.insert_body,\n    },\n    kind: \"insert\",\n    tableName: payload.table_name,\n    transport: {\n      endpoint: \"/gateway/insert\",\n      mode: \"insert\",\n      payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildUpsertDebugAst(\n  payload: AthenaInsertPayload\n): AthenaUpsertDebugAst {\n  return {\n    input: {\n      count: payload.count,\n      defaultToNull: payload.default_to_null,\n      head: payload.head,\n      onConflict: payload.on_conflict,\n      returning: payload.columns,\n      updateBody: payload.update_body,\n      values: payload.insert_body,\n    },\n    kind: \"upsert\",\n    tableName: payload.table_name,\n    transport: {\n      endpoint: \"/gateway/insert\",\n      mode: \"upsert\",\n      payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildUpdateDebugAst(input: {\n  state: AthenaTableBuilderStateAst;\n  payload: AthenaUpdatePayload;\n}): AthenaUpdateDebugAst {\n  return {\n    input: {\n      returning: input.payload.columns,\n      state: cloneTableBuilderStateAst(input.state),\n      values: input.payload.update_body,\n    },\n    kind: \"update\",\n    tableName: resolveDebugTableName(input.payload.table_name),\n    transport: {\n      endpoint: \"/gateway/update\",\n      mode: \"update\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildDeleteDebugAst(input: {\n  state: AthenaTableBuilderStateAst;\n  payload: AthenaDeletePayload;\n}): AthenaDeleteDebugAst {\n  return {\n    input: {\n      resourceId: input.payload.resource_id,\n      returning: input.payload.columns,\n      state: cloneTableBuilderStateAst(input.state),\n    },\n    kind: \"delete\",\n    tableName: input.payload.table_name,\n    transport: {\n      endpoint: \"/gateway/delete\",\n      mode: \"delete\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildRpcDebugAst(input: {\n  functionName: string;\n  args?: AthenaJsonObject;\n  selectedColumns?: string | string[];\n  state: AthenaRpcBuilderStateAst;\n  payload: AthenaRpcPayload;\n  endpoint: \"/gateway/rpc\" | `/rpc/${string}`;\n}): AthenaRpcDebugAst {\n  return {\n    functionName: input.functionName,\n    input: {\n      args: input.args,\n      select: input.selectedColumns,\n      state: cloneRpcBuilderStateAst(input.state),\n    },\n    kind: \"rpc\",\n    transport: {\n      endpoint: input.endpoint,\n      mode: input.endpoint === \"/gateway/rpc\" ? \"rpc-post\" : \"rpc-get\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildRawQueryDebugAst(query: string): AthenaRawQueryDebugAst {\n  return {\n    input: {\n      query,\n    },\n    kind: \"query\",\n    transport: {\n      endpoint: \"/gateway/query\",\n      mode: \"raw-query\",\n      payload: {\n        query,\n      },\n    },\n    version: 1,\n  };\n}\n\nexport function attachAthenaDebugAst(\n  target: unknown,\n  ast: AthenaQueryDebugAst | undefined\n): void {\n  if (!ast) {\n    return;\n  }\n  if (!target || (typeof target !== \"object\" && typeof target !== \"function\")) {\n    return;\n  }\n  Object.defineProperty(target, ATHENA_DEBUG_AST_KEY, {\n    configurable: true,\n    enumerable: false,\n    value: ast,\n    writable: false,\n  });\n}\n\nexport function getAthenaDebugAst(value: unknown): AthenaQueryDebugAst | null {\n  if (!value || (typeof value !== \"object\" && typeof value !== \"function\")) {\n    return null;\n  }\n  return (\n    ((value as Record<string, unknown>)[ATHENA_DEBUG_AST_KEY] as\n      | AthenaQueryDebugAst\n      | undefined) ?? null\n  );\n}\n","import type {\n  AthenaQueryTraceCallsite,\n  AthenaQueryTraceEvent,\n  InternalClientBehaviorOptions,\n} from \"./client-fluent.ts\";\nimport type { AthenaResult } from \"./client-result.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaRpcCallOptions,\n} from \"./gateway/types.ts\";\nimport type { AthenaQueryDebugAst } from \"./query-debug-ast.ts\";\nimport { attachAthenaDebugAst } from \"./query-debug-ast.ts\";\n\nconst QUERY_TRACE_STACK_SKIP_PATTERNS = [\n  \"src\\\\client.ts\",\n  \"src/client.ts\",\n  \"src\\\\client-fluent.ts\",\n  \"src/client-fluent.ts\",\n  \"src\\\\client\\\\context.ts\",\n  \"src/client/context.ts\",\n  \"src\\\\client\\\\create-client.ts\",\n  \"src/client/create-client.ts\",\n  \"src\\\\query-tracing.ts\",\n  \"src/query-tracing.ts\",\n  \"src\\\\v3-client.ts\",\n  \"src/v3-client.ts\",\n  \"src\\\\v3-client-core.ts\",\n  \"src/v3-client-core.ts\",\n  \"dist\\\\client.\",\n  \"dist/client.\",\n  \"dist\\\\query-tracing.\",\n  \"dist/query-tracing.\",\n  \"dist\\\\v3-client.\",\n  \"dist/v3-client.\",\n  \"node_modules\\\\@xylex-group\\\\athena\",\n  \"node_modules/@xylex-group/athena\",\n  \"node:internal\",\n  \"internal/process\",\n] as const;\n\ntype AthenaTraceOperation = AthenaQueryTraceEvent[\"operation\"];\ntype AthenaTraceEndpoint = AthenaQueryTraceEvent[\"endpoint\"];\n\nexport interface AthenaTraceContext {\n  ast?: AthenaQueryDebugAst;\n  endpoint: AthenaTraceEndpoint;\n  functionName?: string;\n  operation: AthenaTraceOperation;\n  options?: AthenaGatewayCallOptions | AthenaRpcCallOptions;\n  payload: unknown;\n  /** Non-authoritative intent. Fluent upsert traces this; Policy still sees insert. */\n  semanticOperation?: \"upsert\";\n  sql: string;\n  table?: string;\n}\n\nexport interface AthenaQueryTracer {\n  captureCallsite: () => AthenaQueryTraceCallsite | null;\n  publishFailure: (\n    context: AthenaTraceContext,\n    error: unknown,\n    durationMs: number,\n    callsite: AthenaQueryTraceCallsite | null\n  ) => void;\n  publishSuccess: <T>(\n    context: AthenaTraceContext,\n    result: AthenaResult<T>,\n    durationMs: number,\n    callsite: AthenaQueryTraceCallsite | null\n  ) => void;\n}\n\nexport interface AthenaTraceCallsiteStore {\n  resolve: (\n    callsite?: AthenaQueryTraceCallsite | null\n  ) => AthenaQueryTraceCallsite | null;\n}\n\nfunction parseQueryTraceCallsiteFrame(\n  frame: string\n): AthenaQueryTraceCallsite | null {\n  const trimmed = frame.trim();\n  if (!trimmed) {\n    return null;\n  }\n\n  let body = trimmed.replace(/^at\\s+/, \"\");\n  if (body.startsWith(\"async \")) {\n    body = body.slice(6);\n  }\n\n  let functionName: string | undefined;\n  let location = body;\n  const wrappedMatch = body.match(/^(.*?)\\s+\\((.*)\\)$/);\n  if (wrappedMatch) {\n    functionName = wrappedMatch[1].trim() || undefined;\n    location = wrappedMatch[2].trim();\n  }\n\n  const locationMatch = location.match(/^(.*):(\\d+):(\\d+)$/);\n  if (!locationMatch) {\n    return null;\n  }\n\n  const filePath = locationMatch[1].replace(/^file:\\/\\//, \"\");\n  const line = Number(locationMatch[2]);\n  const column = Number(locationMatch[3]);\n  if (!(Number.isFinite(line) && Number.isFinite(column))) {\n    return null;\n  }\n\n  const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n  const fileName = normalizedPath.split(\"/\").at(-1) ?? filePath;\n  return {\n    column,\n    fileName,\n    filePath,\n    frame: trimmed,\n    functionName,\n    line,\n  };\n}\n\nfunction captureQueryTraceCallsite(): AthenaQueryTraceCallsite | null {\n  const stack = new Error(\"query trace stack capture\").stack;\n  if (!stack) {\n    return null;\n  }\n  const frames = stack\n    .split(\"\\n\")\n    .slice(2)\n    .map((frame) => frame.trim())\n    .filter(Boolean);\n\n  for (const frame of frames) {\n    if (\n      QUERY_TRACE_STACK_SKIP_PATTERNS.some((pattern) => frame.includes(pattern))\n    ) {\n      continue;\n    }\n    const callsite = parseQueryTraceCallsiteFrame(frame);\n    if (callsite) {\n      return callsite;\n    }\n  }\n\n  const fallback = frames.find(\n    (frame) => !frame.includes(\"captureQueryTraceCallsite\")\n  );\n  return fallback ? parseQueryTraceCallsiteFrame(fallback) : null;\n}\n\nfunction defaultQueryTraceLogger(event: AthenaQueryTraceEvent): void {\n  const target = event.table ?? event.functionName ?? \"gateway\";\n  const outcomeState = event.outcome?.error ? \"error\" : \"ok\";\n  const banner = `[athena-js][trace] ${event.operation.toUpperCase()} ${event.endpoint} ${target} ${event.durationMs}ms ${outcomeState}`;\n  console.info(banner, event);\n}\n\nexport function captureTraceCallsite(\n  tracer?: AthenaQueryTracer\n): AthenaQueryTraceCallsite | null {\n  return tracer?.captureCallsite() ?? null;\n}\n\nexport function createTraceCallsiteStore(\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null\n): AthenaTraceCallsiteStore {\n  let storedCallsite = initialCallsite ?? undefined;\n\n  return {\n    resolve(callsite) {\n      if (callsite) {\n        storedCallsite = callsite;\n        return callsite;\n      }\n      if (storedCallsite !== undefined) {\n        return storedCallsite;\n      }\n      const capturedCallsite = captureTraceCallsite(tracer);\n      if (capturedCallsite) {\n        storedCallsite = capturedCallsite;\n      }\n      return capturedCallsite;\n    },\n  };\n}\n\nexport function createQueryTracer(\n  behavior?: InternalClientBehaviorOptions\n): AthenaQueryTracer | undefined {\n  const traceOption = behavior?.traceQueries;\n  if (!traceOption) {\n    return;\n  }\n\n  const logger =\n    typeof traceOption === \"object\" && traceOption.logger\n      ? traceOption.logger\n      : defaultQueryTraceLogger;\n\n  const emit = (event: AthenaQueryTraceEvent) => {\n    try {\n      logger(event);\n    } catch (error) {\n      console.warn(\"[athena-js][trace] logger failed\", error);\n    }\n  };\n\n  return {\n    captureCallsite: captureQueryTraceCallsite,\n    publishFailure(\n      context: AthenaTraceContext,\n      error: unknown,\n      durationMs: number,\n      callsite: AthenaQueryTraceCallsite | null\n    ) {\n      emit({\n        ast: context.ast,\n        callsite,\n        durationMs,\n        endpoint: context.endpoint,\n        functionName: context.functionName,\n        operation: context.operation,\n        options: context.options,\n        payload: context.payload,\n        sql: context.sql,\n        table: context.table,\n        thrownError: error,\n        timestamp: new Date().toISOString(),\n      });\n    },\n    publishSuccess<T>(\n      context: AthenaTraceContext,\n      result: AthenaResult<T>,\n      durationMs: number,\n      callsite: AthenaQueryTraceCallsite | null\n    ) {\n      emit({\n        ast: context.ast,\n        callsite,\n        durationMs,\n        endpoint: context.endpoint,\n        functionName: context.functionName,\n        operation: context.operation,\n        options: context.options,\n        outcome: {\n          count: result.count ?? null,\n          data: result.data,\n          error: result.error,\n          errorDetails: result.errorDetails ?? null,\n          raw: result.raw,\n          status: result.status,\n        },\n        payload: context.payload,\n        sql: context.sql,\n        table: context.table,\n        timestamp: new Date().toISOString(),\n      });\n    },\n  };\n}\n\nexport async function executeWithQueryTrace<T>(\n  tracer: AthenaQueryTracer | undefined,\n  context: AthenaTraceContext,\n  runner: () => Promise<AthenaResult<T>>,\n  callsiteOverride?: AthenaQueryTraceCallsite | null\n): Promise<AthenaResult<T>> {\n  const callsite = tracer\n    ? (callsiteOverride ?? tracer.captureCallsite())\n    : null;\n  const startedAt = tracer ? Date.now() : 0;\n  try {\n    const result = await runner();\n    attachAthenaDebugAst(result, context.ast);\n    if (tracer) {\n      tracer.publishSuccess(context, result, Date.now() - startedAt, callsite);\n    }\n    return result;\n  } catch (error) {\n    attachAthenaDebugAst(error, context.ast);\n    if (tracer) {\n      tracer.publishFailure(context, error, Date.now() - startedAt, callsite);\n    }\n    throw error;\n  }\n}\n","import type {\n\tAthenaResult,\n\tAthenaResultError,\n\tAthenaResultFormatter,\n} from \"./client-result.ts\";\nimport {\n\tapplyCardinality,\n\texecuteRead,\n\ttoSingleResult,\n} from \"./client-result.ts\";\nimport {\n\tbuildDebugSelectQuery,\n\tbuildDeleteDebugSql,\n\tbuildIncludeJoinSelectQuery,\n\tbuildInsertDebugSql,\n\tbuildRpcDebugSql,\n\tbuildTypedSelectQuery,\n\tbuildUpdateDebugSql,\n\tresolveTableNameForCall,\n} from \"./client-sql.ts\";\nimport type {\n\tAthenaConditionArrayValue,\n\tAthenaConditionCastType,\n\tAthenaConditionOperator,\n\tAthenaConditionValue,\n\tAthenaDeletePayload,\n\tAthenaGatewayCallOptions,\n\tAthenaGatewayCondition,\n\tAthenaGatewayErrorDetails,\n\tAthenaInsertPayload,\n\tAthenaJsonObject,\n\tAthenaJsonValue,\n\tAthenaRpcCallOptions,\n\tAthenaRpcFilter,\n\tAthenaRpcFilterOperator,\n\tAthenaRpcPayload,\n\tAthenaSortBy,\n\tAthenaUpdatePayload,\n} from \"./gateway/types.ts\";\n\nexport type {\n\tAthenaRequestMethod,\n\tAthenaRequestOptions,\n\tAthenaRequestQueryValueMap,\n\tAthenaRequestResponse,\n\tAthenaRequestService,\n} from \"./client-request.ts\";\nexport type { AthenaResult, AthenaResultError } from \"./client-result.ts\";\n\nimport {\n\tclassifyRawSqlOperation,\n\tcreateAdminQuery,\n\tdefaultExpectedShapeForOperation,\n\tmaybeWarnRawQueryDeprecated,\n} from \"./admin/query.ts\";\nimport { requireAffected } from \"./auxiliaries.ts\";\nimport { AthenaTransactionError } from \"./db/transaction/errors.ts\";\nimport {\n\tattachTransactionCompiler,\n\tnextTransactionOperationId,\n} from \"./db/transaction/index.ts\";\nimport type { createAthenaGatewayClient } from \"./gateway/client.ts\";\nimport type {\n\tAthenaCacheContextDescriptor,\n\tAthenaExecutable,\n\tAthenaExecuteOptions,\n\tAthenaQueryDescriptor,\n\tAthenaQueryOperation,\n\tAthenaRelationDescriptor,\n} from \"./query/descriptor.ts\";\nimport {\n\tcompileAthenaQueryDescriptor,\n\tcreateCapturedAthenaExecutable,\n} from \"./query/descriptor.ts\";\nimport type {\n\tAthenaFindManyOptions,\n\tAthenaFindManyResult,\n\tAthenaSelectShape,\n\tAthenaValidatedSelectShape,\n} from \"./query-ast.ts\";\nimport {\n\tcompileOrderBy,\n\tcompileSelectShape,\n\tcompileWhere,\n\tselectShapeHasNestedQueryModifiers,\n\tselectShapeUsesRelationSchema,\n\tshouldUseUuidTextComparison,\n} from \"./query-ast.ts\";\nimport type { AthenaQueryDebugAst } from \"./query-debug-ast.ts\";\nimport {\n\tbuildDeleteDebugAst,\n\tbuildFindManyCompiledDebugAst,\n\tbuildFindManyDirectDebugAst,\n\tbuildInsertDebugAst,\n\tbuildRawQueryDebugAst,\n\tbuildRpcDebugAst,\n\tbuildSelectDebugAst,\n\tbuildUpdateDebugAst,\n\tbuildUpsertDebugAst,\n} from \"./query-debug-ast.ts\";\nimport type { AthenaQueryTracer } from \"./query-tracing.ts\";\nimport {\n\tcaptureTraceCallsite,\n\tcreateTraceCallsiteStore,\n\texecuteWithQueryTrace,\n} from \"./query-tracing.ts\";\nimport type { AthenaFindManyAstPayload } from \"./query-transport.ts\";\nimport {\n\tcanUseFindManyAstTransport,\n\tcreateSelectTransportPlan,\n\tfindManyAstWhereRequiresLegacyTransport,\n\tnormalizeFindManyAstWhere,\n\ttoFindManyAstOrder,\n} from \"./query-transport.ts\";\nimport type {\n\tAthenaSelectInput,\n\tAthenaTypecheckedColumnKey,\n\tAthenaValidatedSelectInput,\n} from \"./select-column-types.ts\";\n\nexport type {\n\tAthenaColumnKey,\n\tAthenaColumnKeyWithAutocomplete,\n\tAthenaResolvedColumnKey,\n\tAthenaSelectArrayElement,\n\tAthenaSelectColumnsFor,\n\tAthenaSelectInput,\n\tAthenaSelectInputHints,\n\tAthenaTypecheckedColumnKey,\n\tAthenaValidatedSelectInput,\n\tHasKnownSelectColumns,\n} from \"./select-column-types.ts\";\n\nimport type {\n\tAthenaClientModelForTableName,\n\tAthenaClientTableName,\n\tAthenaModelTarget,\n\tInsertOf,\n\tRowOf,\n\tUpdateOf,\n} from \"./schema/types.ts\";\n\nexport interface InternalClientBehaviorOptions {\n\t/**\n\t * Build and attach a normalized operation AST for runtime debugging.\n\t *\n\t * When enabled, successful Athena results expose a non-enumerable debug AST\n\t * that can be read with `getAthenaDebugAst(...)`. If tracing is also enabled,\n\t * the same AST is included on emitted trace events.\n\t */\n\tdebugAst?: boolean;\n\t/**\n\t * Send the original `findMany(...)` AST body for clean object-select reads.\n\t * This requires gateway support and falls back to legacy compiled transport\n\t * when a chain carries filter/pagination state that the AST payload cannot\n\t * represent losslessly yet.\n\t */\n\tfindManyAst?: boolean;\n\t/**\n\t * Allow schema-qualified relation nodes on the findMany AST payload.\n\t * Hosted Gateway still falls back to PostgREST embed strings.\n\t */\n\tfindManyAstRelationSchema?: boolean;\n\t/**\n\t * Control deprecation warnings for root `query()` (ATHENA_RAW_SQL_COMPAT_DEPRECATED).\n\t * - `false`: never warn\n\t * - `true`: always warn (once per client)\n\t * - `auto` / omitted: warn in non-production only (once per client)\n\t */\n\trawQueryDiagnostics?: boolean | \"auto\";\n\t/**\n\t * Retry retryable read failures (`select`, `findMany`, `query`) with a fixed internal policy.\n\t *\n\t * Applies two additional attempts with exponential backoff and jitter.\n\t */\n\tretryReads?: boolean;\n\t/**\n\t * Emit execution diagnostics for every query/mutation/RPC invocation.\n\t * Includes payload, synthesized SQL, full outcome, and best-effort callsite metadata.\n\t */\n\ttraceQueries?: boolean | AthenaQueryTraceOptions;\n}\n\nexport interface AthenaQueryTraceOptions {\n\t/**\n\t * When false, tracing is off even if diagnostics mode would enable it.\n\t * When true, tracing stays on even in quiet (`diagnostics: 'auto'`) environments.\n\t * When omitted, quiet environments disable object-form trace options.\n\t */\n\tenabled?: boolean;\n\t/**\n\t * Custom sink for trace events. Defaults to console.info.\n\t */\n\tlogger?: (event: AthenaQueryTraceEvent) => void;\n}\n\nexport interface AthenaQueryTraceCallsite {\n\tcolumn: number;\n\tfileName: string;\n\tfilePath: string;\n\tframe?: string;\n\tfunctionName?: string;\n\tline: number;\n}\n\nexport interface AthenaQueryTraceEvent {\n\tast?: AthenaQueryDebugAst;\n\tcallsite: AthenaQueryTraceCallsite | null;\n\tdurationMs: number;\n\tendpoint:\n\t\t| \"/gateway/fetch\"\n\t\t| \"/gateway/insert\"\n\t\t| \"/gateway/update\"\n\t\t| \"/gateway/delete\"\n\t\t| \"/gateway/rpc\"\n\t\t| \"/gateway/query\"\n\t\t| `/rpc/${string}`;\n\tfunctionName?: string;\n\toperation:\n\t\t| \"select\"\n\t\t| \"insert\"\n\t\t| \"upsert\"\n\t\t| \"update\"\n\t\t| \"delete\"\n\t\t| \"rpc\"\n\t\t| \"query\";\n\toptions?: AthenaGatewayCallOptions | AthenaRpcCallOptions;\n\toutcome?: {\n\t\tstatus: number;\n\t\terror: AthenaResultError | null;\n\t\terrorDetails?: AthenaGatewayErrorDetails | null;\n\t\tcount?: number | null;\n\t\tdata: unknown;\n\t\traw: unknown;\n\t};\n\tpayload: unknown;\n\tsql: string;\n\ttable?: string;\n\tthrownError?: unknown;\n\ttimestamp: string;\n}\n\ninterface TableBuilderState {\n\tcacheContext?: AthenaCacheContextDescriptor;\n\tconditions: AthenaGatewayCondition[];\n\tcurrentPage?: number;\n\tlimit?: number;\n\tmodel?: AthenaModelTarget;\n\toffset?: number;\n\torder?: AthenaSortBy;\n\tpageSize?: number;\n\trelations?: AthenaRelationDescriptor[];\n\ttotalPages?: number;\n}\n\ninterface ConditionCastHints {\n\tcolumnCast?: AthenaConditionCastType;\n\tvalueCast?: AthenaConditionCastType;\n}\n\ntype MutationSingleResult<Result> =\n\tResult extends Array<infer Item> ? Item | null : Result | null;\ntype MutationResultRow<Result> =\n\tResult extends Array<infer Item> ? Item : Result;\nexport type AthenaRowShape = Record<string, AthenaJsonValue | undefined>;\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>;\n/** Known keys when the row shape is concrete; `string` when untyped / index signature. */\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never]\n\t? string\n\t: string extends FilterColumnKey<Row>\n\t\t? string\n\t\t: FilterColumnKey<Row>;\n/**\n * Table-name argument for free-form `from<Row>(table)`.\n * - No client `models` → `string` (nothing to complete).\n * - With `models` → known bare/qualified names (IntelliSense + reject unknowns).\n *   Prefer `.from(\"users\")` without a row generic so the row type is inferred from the model.\n */\nexport type UntypedTableName<TModels> = [TModels] extends [never]\n\t? string\n\t: [AthenaClientTableName<TModels>] extends [never]\n\t\t? string\n\t\t: AthenaClientTableName<TModels>;\ntype ResolvedClientTableModel<TModels, TTableName extends string> = Extract<\n\tAthenaClientModelForTableName<TModels, TTableName>,\n\tAthenaModelTarget\n>;\nexport type ClientTableQueryBuilder<\n\tTModels,\n\tTTableName extends string,\n> = TableQueryBuilder<\n\tRowOf<ResolvedClientTableModel<TModels, TTableName>>,\n\tInsertOf<ResolvedClientTableModel<TModels, TTableName>>,\n\tUpdateOf<ResolvedClientTableModel<TModels, TTableName>>\n>;\n/**\n * Select/returning/single column input.\n *\n * - Typed row: validates string lists; arrays use the model-key union.\n * - Untyped row: plain `TValue` (`string | string[]`).\n */\ntype SelectColumnsFor<\n\tRow,\n\tTValue extends AthenaSelectInput,\n> = AthenaValidatedSelectInput<Row, TValue>;\nconst DEFAULT_COLUMNS = \"*\";\n\ntype SelectDebugAstFactory = (input: {\n\ttableName: string;\n\tcolumns: string | string[];\n\texecutionState: TableBuilderState;\n\tplan: ReturnType<typeof createSelectTransportPlan>;\n}) => AthenaQueryDebugAst;\n\nexport interface MutationQuery<Result, Row = MutationResultRow<Result>>\n\textends PromiseLike<AthenaResult<Result>>,\n\t\tAthenaExecutable<AthenaResult<Result>> {\n\tcatch: <TResult = never>(\n\t\tonrejected?:\n\t\t\t| ((reason: unknown) => TResult | PromiseLike<TResult>)\n\t\t\t| undefined\n\t\t\t| null,\n\t) => Promise<AthenaResult<Result> | TResult>;\n\tfinally: (\n\t\tonfinally?: (() => void) | undefined | null,\n\t) => Promise<AthenaResult<Result>>;\n\trequireAffected: (options?: {\n\t\tmin?: number;\n\t}) => Promise<AthenaResult<Result>>;\n\tmaybeSingle: <const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<MutationSingleResult<Result>>>;\n\treturning: <const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<Result>>;\n\tselect: <const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<Result>>;\n\tsingle: <const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<MutationSingleResult<Result>>>;\n\tthen: <TResult1 = AthenaResult<Result>, TResult2 = never>(\n\t\tonfulfilled?:\n\t\t\t| ((value: AthenaResult<Result>) => TResult1 | PromiseLike<TResult1>)\n\t\t\t| undefined\n\t\t\t| null,\n\t\tonrejected?:\n\t\t\t| ((reason: unknown) => TResult2 | PromiseLike<TResult2>)\n\t\t\t| undefined\n\t\t\t| null,\n\t) => Promise<TResult1 | TResult2>;\n}\n\nfunction mergeOptions<T extends { headers?: Record<string, string> }>(\n\t...options: Array<T | undefined>\n): T | undefined {\n\treturn options.reduce<T | undefined>((acc, next) => {\n\t\tif (!next) {\n\t\t\treturn acc;\n\t\t}\n\t\tconst merged = { ...(acc ?? {}), ...next } as T;\n\t\tif (acc?.headers || next.headers) {\n\t\t\tmerged.headers = {\n\t\t\t\t...(acc?.headers ?? {}),\n\t\t\t\t...(next.headers ?? {}),\n\t\t\t};\n\t\t}\n\t\treturn merged;\n\t}, undefined);\n}\n\nfunction collectChangedFields(values: unknown): string[] {\n\tif (Array.isArray(values)) {\n\t\tconst keys = new Set<string>();\n\t\tfor (const value of values) {\n\t\t\tif (value && typeof value === \"object\") {\n\t\t\t\tfor (const key of Object.keys(value as object)) {\n\t\t\t\t\tkeys.add(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...keys];\n\t}\n\tif (values && typeof values === \"object\") {\n\t\treturn Object.keys(values as object);\n\t}\n\treturn [];\n}\n\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\n\treturn value as unknown as AthenaJsonObject;\n}\n\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\n\treturn values as unknown as AthenaJsonObject[];\n}\n\nfunction normalizeSelectColumnsInput(\n\tcolumns?: AthenaSelectInput,\n): string | string[] | undefined {\n\tif (columns === undefined) {\n\t\treturn;\n\t}\n\tif (typeof columns === \"string\") {\n\t\treturn columns;\n\t}\n\treturn [...columns];\n}\n\nfunction createMutationQuery<Result, Row = MutationResultRow<Result>>(\n\texecutor: (\n\t\tcolumns?: string | string[],\n\t\toptions?: AthenaGatewayCallOptions,\n\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t) => Promise<AthenaResult<Result>>,\n\tdefaultColumns: AthenaSelectInput | null = DEFAULT_COLUMNS,\n\ttracer?: AthenaQueryTracer,\n\tinitialCallsite?: AthenaQueryTraceCallsite | null,\n\texecutable?: {\n\t\tgetDescriptor: (\n\t\t\tprojection: AthenaSelectInput | undefined,\n\t\t) => AthenaQueryDescriptor;\n\t\tmodel?: AthenaModelTarget;\n\t},\n\tcompileTransaction?: (\n\t\tcolumns: string | string[] | undefined,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => {\n\t\tkind: \"fetch\" | \"insert\" | \"update\" | \"delete\";\n\t\tpayload:\n\t\t\t| import(\"./gateway/types.ts\").AthenaFetchPayload\n\t\t\t| import(\"./gateway/types.ts\").AthenaInsertPayload\n\t\t\t| import(\"./gateway/types.ts\").AthenaUpdatePayload\n\t\t\t| import(\"./gateway/types.ts\").AthenaDeletePayload;\n\t},\n): MutationQuery<Result, Row> {\n\tlet selectedColumns: AthenaSelectInput | undefined =\n\t\tdefaultColumns === null ? undefined : defaultColumns;\n\tlet selectedOptions: AthenaGatewayCallOptions | undefined;\n\tlet promise: Promise<AthenaResult<Result>> | null = null;\n\tconst callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n\n\tconst run = (\n\t\tcolumns?: AthenaSelectInput,\n\t\toptions?: AthenaGatewayCallOptions,\n\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t) => {\n\t\tconst payloadColumns = columns ?? selectedColumns;\n\t\tconst payloadOptions = options ?? selectedOptions;\n\t\tif (!promise) {\n\t\t\tpromise = executor(\n\t\t\t\tnormalizeSelectColumnsInput(payloadColumns),\n\t\t\t\tpayloadOptions,\n\t\t\t\tcallsiteStore.resolve(callsite),\n\t\t\t);\n\t\t}\n\t\treturn promise;\n\t};\n\n\tconst mutationQuery: MutationQuery<Result, Row> = {\n\t\tcapture() {\n\t\t\tconst capturedColumns = selectedColumns;\n\t\t\tconst capturedOptions = selectedOptions;\n\t\t\treturn createCapturedAthenaExecutable({\n\t\t\t\tdescriptor: mutationQuery.getDescriptor(),\n\t\t\t\texecute: (executeOptions) =>\n\t\t\t\t\trun(capturedColumns, {\n\t\t\t\t\t\t...capturedOptions,\n\t\t\t\t\t\tsignal: executeOptions?.signal ?? capturedOptions?.signal,\n\t\t\t\t\t}),\n\t\t\t\tmodel: executable?.model,\n\t\t\t});\n\t\t},\n\t\tcatch(onrejected) {\n\t\t\treturn run(selectedColumns, selectedOptions).catch(onrejected);\n\t\t},\n\t\texecute(executeOptions?: AthenaExecuteOptions) {\n\t\t\treturn run(selectedColumns, {\n\t\t\t\t...selectedOptions,\n\t\t\t\tsignal: executeOptions?.signal ?? selectedOptions?.signal,\n\t\t\t});\n\t\t},\n\t\tfinally(onfinally) {\n\t\t\treturn run(selectedColumns, selectedOptions).finally(onfinally);\n\t\t},\n\t\tgetDescriptor() {\n\t\t\tif (!executable) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Mutation query is missing a descriptor compiler. Pass getDescriptor when constructing the mutation.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn executable.getDescriptor(selectedColumns);\n\t\t},\n\t\tasync requireAffected(options?: { min?: number }) {\n\t\t\tconst result = await run(selectedColumns, selectedOptions);\n\t\t\trequireAffected(result, options, {\n\t\t\t\toperation: executable ? \"mutation\" : undefined,\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\tmaybeSingle(\n\t\t\tcolumns?: AthenaSelectInput,\n\t\t\toptions?: AthenaGatewayCallOptions,\n\t\t) {\n\t\t\t// Omit args keep the mutation default projection (\"*\") so PG/D1 emit RETURNING.\n\t\t\tif (columns !== undefined) {\n\t\t\t\tselectedColumns = columns;\n\t\t\t}\n\t\t\tselectedOptions = options ?? selectedOptions;\n\t\t\treturn run(\n\t\t\t\tcolumns ?? selectedColumns,\n\t\t\t\toptions ?? selectedOptions,\n\t\t\t\tcaptureTraceCallsite(tracer),\n\t\t\t).then((result) => applyCardinality(result, \"maybeSingle\"));\n\t\t},\n\t\treturning(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n\t\t\treturn mutationQuery.select(columns, options);\n\t\t},\n\t\tselect(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n\t\t\tselectedColumns = columns;\n\t\t\tselectedOptions = options ?? selectedOptions;\n\t\t\treturn run(columns, options, captureTraceCallsite(tracer));\n\t\t},\n\t\tsingle(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n\t\t\t// Omit args keep the mutation default projection (\"*\") so PG/D1 emit RETURNING.\n\t\t\tif (columns !== undefined) {\n\t\t\t\tselectedColumns = columns;\n\t\t\t}\n\t\t\tselectedOptions = options ?? selectedOptions;\n\t\t\treturn run(\n\t\t\t\tcolumns ?? selectedColumns,\n\t\t\t\toptions ?? selectedOptions,\n\t\t\t\tcaptureTraceCallsite(tracer),\n\t\t\t).then((result) => applyCardinality(result, \"single\"));\n\t\t},\n\t\t// Thenable so `await query` resolves the deferred run without an extra API.\n\t\t// biome-ignore lint/suspicious/noThenProperty: intentional thenable query builder\n\t\tthen(onfulfilled, onrejected) {\n\t\t\treturn run(selectedColumns, selectedOptions).then(\n\t\t\t\tonfulfilled,\n\t\t\t\tonrejected,\n\t\t\t);\n\t\t},\n\t};\n\n\tif (executable?.model) {\n\t\tObject.defineProperty(mutationQuery, \"model\", {\n\t\t\tenumerable: true,\n\t\t\tvalue: executable.model,\n\t\t});\n\t}\n\n\tif (compileTransaction) {\n\t\tattachTransactionCompiler(mutationQuery, () => {\n\t\t\tconst compiled = compileTransaction(\n\t\t\t\tnormalizeSelectColumnsInput(selectedColumns),\n\t\t\t\tselectedOptions,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tdescriptor: mutationQuery.getDescriptor(),\n\t\t\t\tid: nextTransactionOperationId(),\n\t\t\t\tindex: 0,\n\t\t\t\tkind: compiled.kind,\n\t\t\t\tpayload: compiled.payload,\n\t\t\t} as import(\"./db/transaction/types.ts\").AthenaTransactionOperation;\n\t\t});\n\t}\n\n\treturn mutationQuery;\n}\n\nexport interface OrderOptions {\n\tascending?: boolean;\n}\n\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\ninterface FilterChain<Self, Row> {\n\tcontainedBy: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalues: AthenaConditionArrayValue,\n\t) => Self;\n\tcontains: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalues: AthenaConditionArrayValue,\n\t) => Self;\n\tcurrentPage: (value: number) => Self;\n\teq: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\teqCast: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t\tcast: AthenaConditionCastType,\n\t) => Self;\n\teqUuid: (column: ResolvedFilterColumnKey<Row>, value: string) => Self;\n\tgt: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tgte: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tilike: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tin: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalues: AthenaConditionArrayValue,\n\t) => Self;\n\tis: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlike: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlimit: (count: number) => Self;\n\tlt: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlte: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tmatch: (\n\t\tfilters: Partial<\n\t\t\tRecord<ResolvedFilterColumnKey<Row>, AthenaConditionValue>\n\t\t>,\n\t) => Self;\n\tneq: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tnot: (\n\t\tcolumnOrExpression: ResolvedFilterColumnKey<Row> | string,\n\t\toperator?: AthenaConditionOperator,\n\t\tvalue?: AthenaConditionValue,\n\t) => Self;\n\toffset: (count: number) => Self;\n\tor: (expression: string) => Self;\n\torder: (column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) => Self;\n\tpageSize: (value: number) => Self;\n\trange: (from: number, to: number) => Self;\n\ttotalPages: (value: number) => Self;\n}\n\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\nexport interface SelectChain<Row, SelectedRow = Row>\n\textends FilterChain<SelectChain<Row, SelectedRow>, Row>,\n\t\tPromiseLike<AthenaResult<SelectedRow[]>>,\n\t\tAthenaExecutable<AthenaResult<SelectedRow[]>> {\n\tmaybeSingle: <\n\t\tT = SelectedRow,\n\t\tconst TColumns extends AthenaSelectInput = string,\n\t>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n\tsingle: <T = SelectedRow, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n}\n\n/** Chain returned by update() - supports filters before execution, plus select/returning */\nexport interface UpdateChain<Row>\n\textends FilterChain<UpdateChain<Row>, Row>,\n\t\tMutationQuery<Row[], Row> {}\n\ninterface RpcFilterChain<Self, Row> {\n\teq: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tgt: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tgte: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tilike: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tin: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalues: AthenaConditionArrayValue,\n\t) => Self;\n\tis: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlike: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlt: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlte: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tneq: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n}\n\nexport interface RpcOrderOptions {\n\tascending?: boolean;\n}\n\nexport interface RpcQueryBuilder<Row>\n\textends RpcFilterChain<RpcQueryBuilder<Row>, Row>,\n\t\tPromiseLike<AthenaResult<Row[]>> {\n\tlimit: (count: number) => RpcQueryBuilder<Row>;\n\tmaybeSingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaRpcCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n\toffset: (count: number) => RpcQueryBuilder<Row>;\n\torder: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\toptions?: RpcOrderOptions,\n\t) => RpcQueryBuilder<Row>;\n\trange: (from: number, to: number) => RpcQueryBuilder<Row>;\n\tselect: <const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaRpcCallOptions,\n\t) => Promise<AthenaResult<Row[]>>;\n\tsingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaRpcCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n}\n\nexport interface AthenaFromOptions {\n\tschema?: string;\n}\n\nexport interface TableQueryIncludeSpec {\n\tschema?: string;\n\tselect?: readonly string[];\n\ttargetModel?: string;\n}\n\nexport type TableQueryIncludeRelations = Record<\n\tstring,\n\tTableQueryIncludeSpec | true\n>;\n\nexport interface TableQueryBuilder<\n\tRow,\n\tInsert = Partial<Row>,\n\tUpdate = Partial<Insert>,\n\tTContext = unknown,\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update, TContext>, Row> {\n\tdelete: (\n\t\toptions?: AthenaGatewayCallOptions & { resourceId?: string },\n\t) => MutationQuery<Row | null, Row>;\n\tfindMany: <const TSelect extends AthenaSelectShape>(\n\t\toptions: AthenaFindManyOptions<Row, TSelect> & {\n\t\t\tselect: AthenaValidatedSelectShape<Row, TSelect>;\n\t\t},\n\t) => Promise<AthenaResult<AthenaFindManyResult<Row, TSelect, TContext>[]>>;\n\tinsert(\n\t\tvalues: Insert,\n\t\toptions?: AthenaGatewayCallOptions,\n\t): MutationQuery<Row, Row>;\n\tinsert(\n\t\tvalues: Insert[],\n\t\toptions?: AthenaGatewayCallOptions,\n\t): MutationQuery<Row[], Row>;\n\tmaybeSingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n\tinclude: (\n\t\trelations: TableQueryIncludeRelations,\n\t) => TableQueryBuilder<Row, Insert, Update, TContext>;\n\treadonly model?: AthenaModelTarget;\n\treset: () => TableQueryBuilder<Row, Insert, Update, TContext>;\n\tselect: <T = Row, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => SelectChain<Row, T>;\n\tsingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n\tupdate: (\n\t\tvalues: Update,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => UpdateChain<Row>;\n\tupsert(\n\t\tvalues: Insert,\n\t\toptions?: AthenaGatewayCallOptions & {\n\t\t\tupdateBody?: Update;\n\t\t\tonConflict?:\n\t\t\t\t| ResolvedFilterColumnKey<Row>\n\t\t\t\t| ResolvedFilterColumnKey<Row>[]\n\t\t\t\t| (string & {})\n\t\t\t\t| Array<string & {}>;\n\t\t},\n\t): MutationQuery<Row, Row>;\n\tupsert(\n\t\tvalues: Insert[],\n\t\toptions?: AthenaGatewayCallOptions & {\n\t\t\tupdateBody?: Update;\n\t\t\tonConflict?:\n\t\t\t\t| ResolvedFilterColumnKey<Row>\n\t\t\t\t| ResolvedFilterColumnKey<Row>[]\n\t\t\t\t| (string & {})\n\t\t\t\t| Array<string & {}>;\n\t\t},\n\t): MutationQuery<Row[], Row>;\n}\n\nfunction getResourceId(state: TableBuilderState): string | undefined {\n\tconst candidate = state.conditions.find(\n\t\t(condition) =>\n\t\t\tcondition.operator === \"eq\" &&\n\t\t\t(condition.column === \"resource_id\" || condition.column === \"id\"),\n\t);\n\treturn candidate?.value?.toString();\n}\n\nfunction stringifyFilterValue(\n\tvalue: AthenaConditionValue | AthenaConditionArrayValue | string,\n): string {\n\tif (Array.isArray(value)) {\n\t\treturn value.join(\",\");\n\t}\n\treturn String(value);\n}\n\nfunction createFilterMethods<Self, Row>(\n\tstate: TableBuilderState,\n\taddCondition: (\n\t\toperator: AthenaConditionOperator,\n\t\tcolumn?: string,\n\t\tvalue?: AthenaConditionValue | AthenaConditionArrayValue | string,\n\t\thints?: ConditionCastHints,\n\t) => void,\n\tself: Self,\n): FilterChain<Self, Row> {\n\treturn {\n\t\tcontainedBy(\n\t\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\t\tvalues: AthenaConditionArrayValue,\n\t\t) {\n\t\t\taddCondition(\"containedBy\", String(column), values);\n\t\t\treturn self;\n\t\t},\n\t\tcontains(\n\t\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\t\tvalues: AthenaConditionArrayValue,\n\t\t) {\n\t\t\taddCondition(\"contains\", String(column), values);\n\t\t\treturn self;\n\t\t},\n\t\tcurrentPage(value: number) {\n\t\t\tstate.currentPage = value;\n\t\t\treturn self;\n\t\t},\n\t\teq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\tconst columnName = String(column);\n\t\t\tif (shouldUseUuidTextComparison(columnName, value)) {\n\t\t\t\taddCondition(\"eq\", columnName, value, { columnCast: \"text\" });\n\t\t\t} else {\n\t\t\t\taddCondition(\"eq\", columnName, value);\n\t\t\t}\n\t\t\treturn self;\n\t\t},\n\t\teqCast(\n\t\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\t\tvalue: AthenaConditionValue,\n\t\t\tcast: AthenaConditionCastType,\n\t\t) {\n\t\t\taddCondition(\"eq\", String(column), value, { valueCast: cast });\n\t\t\treturn self;\n\t\t},\n\t\teqUuid(column: ResolvedFilterColumnKey<Row>, value: string) {\n\t\t\taddCondition(\"eq\", String(column), value, { valueCast: \"uuid\" });\n\t\t\treturn self;\n\t\t},\n\t\tgt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"gt\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tgte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"gte\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"ilike\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tin(\n\t\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\t\tvalues: AthenaConditionArrayValue,\n\t\t) {\n\t\t\taddCondition(\"in\", String(column), values);\n\t\t\treturn self;\n\t\t},\n\t\tis(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"is\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tlike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"like\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tlimit(count: number) {\n\t\t\tstate.limit = count;\n\t\t\treturn self;\n\t\t},\n\t\tlt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"lt\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tlte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"lte\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tmatch(\n\t\t\tfilters: Partial<\n\t\t\t\tRecord<ResolvedFilterColumnKey<Row>, AthenaConditionValue>\n\t\t\t>,\n\t\t) {\n\t\t\tObject.entries(\n\t\t\t\tfilters as Record<string, AthenaConditionValue | undefined>,\n\t\t\t).forEach(([column, value]) => {\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (shouldUseUuidTextComparison(column, value)) {\n\t\t\t\t\taddCondition(\"eq\", column, value, { columnCast: \"text\" });\n\t\t\t\t} else {\n\t\t\t\t\taddCondition(\"eq\", column, value);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn self;\n\t\t},\n\t\tneq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"neq\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tnot(\n\t\t\tcolumnOrExpression: ResolvedFilterColumnKey<Row> | string,\n\t\t\toperator?: AthenaConditionOperator,\n\t\t\tvalue?: AthenaConditionValue,\n\t\t) {\n\t\t\tconst expression = String(columnOrExpression);\n\t\t\tif (operator !== null && value !== undefined) {\n\t\t\t\taddCondition(\n\t\t\t\t\t\"not\",\n\t\t\t\t\tundefined,\n\t\t\t\t\t`${expression}.${operator}.${stringifyFilterValue(value)}`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\taddCondition(\"not\", undefined, expression);\n\t\t\t}\n\t\t\treturn self;\n\t\t},\n\t\toffset(count: number) {\n\t\t\tstate.offset = count;\n\t\t\treturn self;\n\t\t},\n\t\tor(expression: string) {\n\t\t\taddCondition(\"or\", undefined, expression);\n\t\t\treturn self;\n\t\t},\n\t\torder(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) {\n\t\t\tstate.order = {\n\t\t\t\tdirection: options?.ascending === false ? \"descending\" : \"ascending\",\n\t\t\t\tfield: String(column),\n\t\t\t};\n\t\t\treturn self;\n\t\t},\n\t\tpageSize(value: number) {\n\t\t\tstate.pageSize = value;\n\t\t\treturn self;\n\t\t},\n\t\trange(from: number, to: number) {\n\t\t\tstate.offset = from;\n\t\t\tstate.limit = to - from + 1;\n\t\t\treturn self;\n\t\t},\n\t\ttotalPages(value: number) {\n\t\t\tstate.totalPages = value;\n\t\t\treturn self;\n\t\t},\n\t};\n}\n\nfunction toRpcSelect(columns?: AthenaSelectInput) {\n\tif (!columns) {\n\t\treturn;\n\t}\n\tif (typeof columns === \"string\") {\n\t\treturn columns;\n\t}\n\treturn columns.join(\",\");\n}\n\nfunction createRpcFilterMethods<Self>(filters: AthenaRpcFilter[], self: Self) {\n\tconst addFilter = (\n\t\toperator: AthenaRpcFilterOperator,\n\t\tcolumn: string,\n\t\tvalue: AthenaConditionValue | AthenaConditionArrayValue | string,\n\t) => {\n\t\tfilters.push({ column, operator, value });\n\t};\n\n\treturn {\n\t\teq(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"eq\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tgt(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"gt\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tgte(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"gte\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tilike(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"ilike\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tin(column: string, values: AthenaConditionArrayValue) {\n\t\t\taddFilter(\"in\", column, values);\n\t\t\treturn self;\n\t\t},\n\t\tis(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"is\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tlike(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"like\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tlt(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"lt\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tlte(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"lte\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tneq(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"neq\", column, value);\n\t\t\treturn self;\n\t\t},\n\t};\n}\n\nexport function createRpcBuilder<Row>(\n\tfunctionName: string,\n\targs: AthenaJsonObject | undefined,\n\tbaseOptions: AthenaRpcCallOptions | undefined,\n\tclient: ReturnType<typeof createAthenaGatewayClient>,\n\tformatGatewayResult: AthenaResultFormatter,\n\ttracer?: AthenaQueryTracer,\n\tinitialCallsite?: AthenaQueryTraceCallsite | null,\n\tdebugAstEnabled = false,\n): RpcQueryBuilder<Row> {\n\tconst state: {\n\t\tfilters: AthenaRpcFilter[];\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\torder?: { column: string; ascending?: boolean };\n\t} = {\n\t\tfilters: [],\n\t};\n\n\tlet selectedColumns: AthenaSelectInput | undefined;\n\tlet selectedOptions: AthenaRpcCallOptions | undefined;\n\tlet promise: Promise<AthenaResult<Row[]>> | null = null;\n\tconst callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n\n\tconst executeRpc = async <SelectedRow = Row>(\n\t\tcolumns?: AthenaSelectInput,\n\t\toptions?: AthenaRpcCallOptions,\n\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t): Promise<AthenaResult<SelectedRow[]>> => {\n\t\tconst mergedOptions = mergeOptions(baseOptions, options);\n\t\tconst normalizedSelectedColumns = normalizeSelectColumnsInput(columns);\n\t\tconst payload: AthenaRpcPayload = {\n\t\t\targs,\n\t\t\tcount: mergedOptions?.count,\n\t\t\tfilters: state.filters.length ? [...state.filters] : undefined,\n\t\t\tfunction: functionName,\n\t\t\thead: mergedOptions?.head,\n\t\t\tlimit: state.limit,\n\t\t\toffset: state.offset,\n\t\t\torder: state.order,\n\t\t\tschema: mergedOptions?.schema,\n\t\t\tselect: toRpcSelect(columns),\n\t\t};\n\t\tconst endpoint: AthenaQueryTraceEvent[\"endpoint\"] = mergedOptions?.get\n\t\t\t? `/rpc/${functionName}`\n\t\t\t: \"/gateway/rpc\";\n\t\tconst sql = buildRpcDebugSql(payload);\n\t\tconst debugAst = debugAstEnabled\n\t\t\t? buildRpcDebugAst({\n\t\t\t\t\targs,\n\t\t\t\t\tendpoint,\n\t\t\t\t\tfunctionName,\n\t\t\t\t\tpayload,\n\t\t\t\t\tselectedColumns: normalizedSelectedColumns,\n\t\t\t\t\tstate,\n\t\t\t\t})\n\t\t\t: undefined;\n\t\treturn executeWithQueryTrace(\n\t\t\ttracer,\n\t\t\t{\n\t\t\t\tast: debugAst,\n\t\t\t\tendpoint,\n\t\t\t\tfunctionName,\n\t\t\t\toperation: \"rpc\",\n\t\t\t\toptions: mergedOptions,\n\t\t\t\tpayload,\n\t\t\t\tsql,\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tconst response = await client.rpcGateway<SelectedRow[]>(\n\t\t\t\t\tpayload,\n\t\t\t\t\tmergedOptions,\n\t\t\t\t);\n\t\t\t\treturn formatGatewayResult(response, { operation: \"rpc\" });\n\t\t\t},\n\t\t\tcallsite,\n\t\t);\n\t};\n\n\tconst run = (\n\t\tcolumns?: AthenaSelectInput,\n\t\toptions?: AthenaRpcCallOptions,\n\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t) => {\n\t\tconst payloadColumns = columns ?? selectedColumns;\n\t\tconst payloadOptions = options ?? selectedOptions;\n\t\tif (!promise) {\n\t\t\tpromise = executeRpc<Row>(\n\t\t\t\tpayloadColumns,\n\t\t\t\tpayloadOptions,\n\t\t\t\tcallsiteStore.resolve(callsite),\n\t\t\t);\n\t\t}\n\t\treturn promise;\n\t};\n\n\tconst builder = {} as RpcQueryBuilder<Row>;\n\tconst filterMethods = createRpcFilterMethods(state.filters, builder);\n\n\tObject.assign(builder, filterMethods, {\n\t\tcatch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n\t\t\treturn run(selectedColumns, selectedOptions).catch(onrejected);\n\t\t},\n\t\tfinally(onfinally?: () => void) {\n\t\t\treturn run(selectedColumns, selectedOptions).finally(onfinally);\n\t\t},\n\t\tlimit(count: number) {\n\t\t\tstate.limit = count;\n\t\t\treturn builder;\n\t\t},\n\t\tmaybeSingle<T = Row>(\n\t\t\tcolumns?: AthenaSelectInput,\n\t\t\toptions?: AthenaRpcCallOptions,\n\t\t) {\n\t\t\treturn builder.single<T, AthenaSelectInput>(columns, options);\n\t\t},\n\t\toffset(count: number) {\n\t\t\tstate.offset = count;\n\t\t\treturn builder;\n\t\t},\n\t\torder(column: string, options?: RpcOrderOptions) {\n\t\t\tstate.order = { ascending: options?.ascending ?? true, column };\n\t\t\treturn builder;\n\t\t},\n\t\trange(from: number, to: number) {\n\t\t\tstate.offset = from;\n\t\t\tstate.limit = to - from + 1;\n\t\t\treturn builder;\n\t\t},\n\t\tselect(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n\t\t\tselectedColumns = columns;\n\t\t\tselectedOptions = options ?? selectedOptions;\n\t\t\treturn run(columns, options, captureTraceCallsite(tracer));\n\t\t},\n\t\tasync single<T = Row>(\n\t\t\tcolumns?: AthenaSelectInput,\n\t\t\toptions?: AthenaRpcCallOptions,\n\t\t) {\n\t\t\tconst result = await run(columns, options, captureTraceCallsite(tracer));\n\t\t\treturn toSingleResult(result) as unknown as AthenaResult<T | null>;\n\t\t},\n\t\t// Thenable so `await query` resolves the deferred run without an extra API.\n\t\t// biome-ignore lint/suspicious/noThenProperty: intentional thenable query builder\n\t\tthen<T1 = AthenaResult<Row[]>, T2 = never>(\n\t\t\tonfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\n\t\t\tonrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\n\t\t) {\n\t\t\treturn run(selectedColumns, selectedOptions).then(\n\t\t\t\tonfulfilled,\n\t\t\t\tonrejected,\n\t\t\t);\n\t\t},\n\t});\n\n\treturn builder;\n}\n\nexport function createTableBuilder<\n\tRow,\n\tInsert = Partial<Row>,\n\tUpdate = Partial<Insert>,\n\tTContext = unknown,\n>(\n\ttableName: string,\n\tclient: ReturnType<typeof createAthenaGatewayClient>,\n\tformatGatewayResult: AthenaResultFormatter,\n\ttracer?: AthenaQueryTracer,\n\tbehavior?: InternalClientBehaviorOptions,\n\tbuilderOptions?: {\n\t\tcacheContext?: AthenaCacheContextDescriptor;\n\t\tmodel?: AthenaModelTarget;\n\t},\n): TableQueryBuilder<Row, Insert, Update, TContext> {\n\tconst state: TableBuilderState = {\n\t\tcacheContext: builderOptions?.cacheContext,\n\t\tconditions: [],\n\t\tmodel: builderOptions?.model,\n\t};\n\tconst debugAstEnabled = Boolean(behavior?.debugAst);\n\n\tconst addCondition = (\n\t\toperator: AthenaConditionOperator,\n\t\tcolumn?: string,\n\t\tvalue?: AthenaConditionValue | AthenaConditionArrayValue | string,\n\t\thints?: ConditionCastHints,\n\t) => {\n\t\tconst condition: AthenaGatewayCondition = { operator };\n\t\tif (column) {\n\t\t\tcondition.column = column;\n\t\t\tif (operator === \"eq\") {\n\t\t\t\t// include legacy gateway shape for compatibility\n\t\t\t\tcondition.eq_column = column;\n\t\t\t}\n\t\t}\n\t\tif (value !== undefined) {\n\t\t\tcondition.value = value;\n\t\t\tif (operator === \"eq\") {\n\t\t\t\tcondition.eq_value = value;\n\t\t\t}\n\t\t}\n\t\tif (hints?.valueCast) {\n\t\t\tcondition.value_cast = hints.valueCast;\n\t\t\tif (operator === \"eq\") {\n\t\t\t\tcondition.eq_value_cast = hints.valueCast;\n\t\t\t}\n\t\t}\n\t\tif (hints?.columnCast) {\n\t\t\tcondition.column_cast = hints.columnCast;\n\t\t\tif (operator === \"eq\") {\n\t\t\t\tcondition.eq_column_cast = hints.columnCast;\n\t\t\t}\n\t\t}\n\t\tstate.conditions.push(condition);\n\t};\n\n\tconst snapshotState = (): TableBuilderState => ({\n\t\tcacheContext: state.cacheContext,\n\t\tconditions: state.conditions.map((condition) => ({ ...condition })),\n\t\tcurrentPage: state.currentPage,\n\t\tlimit: state.limit,\n\t\tmodel: state.model,\n\t\toffset: state.offset,\n\t\torder: state.order ? { ...state.order } : undefined,\n\t\tpageSize: state.pageSize,\n\t\trelations: state.relations ? [...state.relations] : undefined,\n\t\ttotalPages: state.totalPages,\n\t});\n\n\tconst compileDescriptor = (\n\t\toperation: AthenaQueryOperation,\n\t\tprojection?: AthenaSelectInput | null,\n\t\tchangedFields?: readonly string[],\n\t): AthenaQueryDescriptor =>\n\t\tcompileAthenaQueryDescriptor({\n\t\t\tchangedFields,\n\t\t\tconditions: state.conditions,\n\t\t\tcontext: state.cacheContext,\n\t\t\tcurrentPage: state.currentPage,\n\t\t\tlimit: state.limit,\n\t\t\tmodel: state.model,\n\t\t\toffset: state.offset,\n\t\t\toperation,\n\t\t\torder: state.order,\n\t\t\tpageSize: state.pageSize,\n\t\t\tprojection:\n\t\t\t\tprojection === null\n\t\t\t\t\t? null\n\t\t\t\t\t: (normalizeSelectColumnsInput(projection) ?? \"*\"),\n\t\t\trelations: state.relations,\n\t\t\ttableName,\n\t\t});\n\n\tconst mutationExecutable = (\n\t\toperation: AthenaQueryOperation,\n\t\tchangedFields?: readonly string[],\n\t) => ({\n\t\tgetDescriptor: (projection: AthenaSelectInput | undefined) =>\n\t\t\tcompileDescriptor(operation, projection ?? null, changedFields),\n\t\tmodel: state.model,\n\t});\n\n\tconst builder = {} as TableQueryBuilder<Row, Insert, Update, TContext>;\n\n\tconst filterMethods = createFilterMethods<\n\t\tTableQueryBuilder<Row, Insert, Update, TContext>,\n\t\tRow\n\t>(state, addCondition, builder);\n\n\tconst runSelect = async <T = Row>(\n\t\tcolumns: AthenaSelectInput = DEFAULT_COLUMNS,\n\t\toptions?: AthenaGatewayCallOptions,\n\t\texecutionState: TableBuilderState = snapshotState(),\n\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\tdebugAstFactory?: SelectDebugAstFactory,\n\t) => {\n\t\tconst runtimeColumns =\n\t\t\tnormalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS;\n\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\ttableName,\n\t\t\toptions?.schema,\n\t\t);\n\t\tconst plan = createSelectTransportPlan({\n\t\t\tbuildTypedSelectQuery,\n\t\t\tcolumns: runtimeColumns,\n\t\t\toptions,\n\t\t\tstate: executionState,\n\t\t\ttableName: resolvedTableName,\n\t\t});\n\t\tconst debugAst = debugAstEnabled\n\t\t\t? (debugAstFactory?.({\n\t\t\t\t\tcolumns: runtimeColumns,\n\t\t\t\t\texecutionState,\n\t\t\t\t\tplan,\n\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t}) ??\n\t\t\t\tbuildSelectDebugAst({\n\t\t\t\t\tcolumns: runtimeColumns,\n\t\t\t\t\tplan,\n\t\t\t\t\tstate: executionState,\n\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t}))\n\t\t\t: undefined;\n\n\t\tconst includeSql =\n\t\t\texecutionState.relations && executionState.relations.length > 0\n\t\t\t\t? buildIncludeJoinSelectQuery({\n\t\t\t\t\t\tcolumns: runtimeColumns,\n\t\t\t\t\t\tconditions: executionState.conditions,\n\t\t\t\t\t\tlimit: executionState.limit,\n\t\t\t\t\t\toffset: executionState.offset,\n\t\t\t\t\t\torder: executionState.order,\n\t\t\t\t\t\trelations: executionState.relations,\n\t\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t\t})\n\t\t\t\t: null;\n\n\t\tif (plan.kind === \"query\") {\n\t\t\treturn executeRead(behavior, () =>\n\t\t\t\texecuteWithQueryTrace(\n\t\t\t\t\ttracer,\n\t\t\t\t\t{\n\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\tendpoint: \"/gateway/query\",\n\t\t\t\t\t\toperation: \"select\",\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tpayload: plan.payload,\n\t\t\t\t\t\tsql: includeSql ?? plan.query,\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t},\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst queryResponse = await client.queryGateway<T>(\n\t\t\t\t\t\t\tplan.payload,\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn formatGatewayResult(queryResponse, {\n\t\t\t\t\t\t\toperation: \"select\",\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcallsite,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tconst sql =\n\t\t\tincludeSql ??\n\t\t\tbuildDebugSelectQuery({\n\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t...plan.debug,\n\t\t\t});\n\t\treturn executeRead(behavior, () =>\n\t\t\texecuteWithQueryTrace(\n\t\t\t\ttracer,\n\t\t\t\t{\n\t\t\t\t\tast: debugAst,\n\t\t\t\t\tendpoint: \"/gateway/fetch\",\n\t\t\t\t\toperation: \"select\",\n\t\t\t\t\toptions,\n\t\t\t\t\tpayload: plan.payload,\n\t\t\t\t\tsql,\n\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t},\n\t\t\t\tasync () => {\n\t\t\t\t\tconst response = await client.fetchGateway<T>(plan.payload, options);\n\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\toperation: \"select\",\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tcallsite,\n\t\t\t),\n\t\t);\n\t};\n\n\tconst createSelectChain = <SelectedRow>(\n\t\tcolumns: AthenaSelectInput,\n\t\toptions?: AthenaGatewayCallOptions,\n\t\tinitialCallsite?: AthenaQueryTraceCallsite | null,\n\t): SelectChain<Row, SelectedRow> => {\n\t\tconst chain = {} as SelectChain<Row, SelectedRow>;\n\t\tconst callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n\t\tconst filterMethods = createFilterMethods<\n\t\t\tSelectChain<Row, SelectedRow>,\n\t\t\tRow\n\t\t>(state, addCondition, chain);\n\t\tObject.assign(chain, filterMethods, {\n\t\t\tcapture() {\n\t\t\t\tconst frozenState = snapshotState();\n\t\t\t\treturn createCapturedAthenaExecutable({\n\t\t\t\t\tdescriptor: compileDescriptor(\"select\", columns),\n\t\t\t\t\texecute: (executeOptions) =>\n\t\t\t\t\t\trunSelect<SelectedRow[]>(\n\t\t\t\t\t\t\tcolumns,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\t\tsignal: executeOptions?.signal ?? options?.signal,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfrozenState,\n\t\t\t\t\t\t\tcallsiteStore.resolve(),\n\t\t\t\t\t\t),\n\t\t\t\t\tmodel: state.model,\n\t\t\t\t});\n\t\t\t},\n\t\t\tcatch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n\t\t\t\treturn runSelect<SelectedRow[]>(\n\t\t\t\t\tcolumns,\n\t\t\t\t\toptions,\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(),\n\t\t\t\t).catch(onrejected);\n\t\t\t},\n\t\t\texecute(executeOptions?: AthenaExecuteOptions) {\n\t\t\t\treturn runSelect<SelectedRow[]>(\n\t\t\t\t\tcolumns,\n\t\t\t\t\t{\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tsignal: executeOptions?.signal ?? options?.signal,\n\t\t\t\t\t},\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(),\n\t\t\t\t);\n\t\t\t},\n\t\t\tfinally(onfinally?: () => void) {\n\t\t\t\treturn runSelect<SelectedRow[]>(\n\t\t\t\t\tcolumns,\n\t\t\t\t\toptions,\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(),\n\t\t\t\t).finally(onfinally);\n\t\t\t},\n\t\t\tgetDescriptor() {\n\t\t\t\treturn compileDescriptor(\"select\", columns);\n\t\t\t},\n\t\t\tmaybeSingle<T = SelectedRow>(\n\t\t\t\tcols?: AthenaSelectInput,\n\t\t\t\topts?: AthenaGatewayCallOptions,\n\t\t\t) {\n\t\t\t\treturn runSelect<T[]>(\n\t\t\t\t\tcols ?? columns,\n\t\t\t\t\topts ?? options,\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(captureTraceCallsite(tracer)),\n\t\t\t\t).then((r) => applyCardinality(r, \"maybeSingle\"));\n\t\t\t},\n\t\t\tmodel: state.model,\n\t\t\tasync single<T = SelectedRow>(\n\t\t\t\tcols?: AthenaSelectInput,\n\t\t\t\topts?: AthenaGatewayCallOptions,\n\t\t\t) {\n\t\t\t\tconst r = await runSelect<T[]>(\n\t\t\t\t\tcols ?? columns,\n\t\t\t\t\topts ?? options,\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(captureTraceCallsite(tracer)),\n\t\t\t\t);\n\t\t\t\treturn applyCardinality(r, \"single\");\n\t\t\t},\n\t\t\t// Thenable so `await query` resolves the deferred run without an extra API.\n\t\t\t// biome-ignore lint/suspicious/noThenProperty: intentional thenable query builder\n\t\t\tthen<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\n\t\t\t\tonfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\n\t\t\t\tonrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\n\t\t\t) {\n\t\t\t\treturn runSelect<SelectedRow[]>(\n\t\t\t\t\tcolumns,\n\t\t\t\t\toptions,\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(),\n\t\t\t\t).then(onfulfilled, onrejected);\n\t\t\t},\n\t\t});\n\t\tattachTransactionCompiler(chain, () => {\n\t\t\tconst executionState = snapshotState();\n\t\t\tconst runtimeColumns =\n\t\t\t\tnormalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS;\n\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\ttableName,\n\t\t\t\toptions?.schema,\n\t\t\t);\n\t\t\tconst plan = createSelectTransportPlan({\n\t\t\t\tbuildTypedSelectQuery,\n\t\t\t\tcolumns: runtimeColumns,\n\t\t\t\toptions,\n\t\t\t\tstate: executionState,\n\t\t\t\ttableName: resolvedTableName,\n\t\t\t});\n\t\t\tif (plan.kind !== \"fetch\") {\n\t\t\t\tthrow new AthenaTransactionError(\n\t\t\t\t\t\"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n\t\t\t\t\t\"This select cannot be compiled into a portable transaction fetch (raw SQL fallback is not transaction IR)\",\n\t\t\t\t\t{ table: resolvedTableName },\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tdescriptor: compileDescriptor(\"select\", columns),\n\t\t\t\tid: nextTransactionOperationId(),\n\t\t\t\tindex: 0,\n\t\t\t\tkind: \"fetch\",\n\t\t\t\tpayload: plan.payload,\n\t\t\t};\n\t\t});\n\t\treturn chain;\n\t};\n\n\tObject.assign(builder, filterMethods, {\n\t\tinclude(relations: TableQueryIncludeRelations) {\n\t\t\tconst meta = state.model?.meta.relations;\n\t\t\tstate.relations = Object.keys(relations)\n\t\t\t\t.sort((left, right) => left.localeCompare(right))\n\t\t\t\t.map((name) => {\n\t\t\t\t\tconst spec = relations[name];\n\t\t\t\t\tconst relMeta = meta?.[name];\n\t\t\t\t\tconst selected = spec === true ? undefined : spec?.select;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcolumns: selected,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tsourceColumns: relMeta?.sourceColumns,\n\t\t\t\t\t\tstar: spec === true || !selected?.length,\n\t\t\t\t\t\ttargetColumns: relMeta?.targetColumns,\n\t\t\t\t\t\ttargetModel:\n\t\t\t\t\t\t\tspec === true\n\t\t\t\t\t\t\t\t? relMeta?.targetModel\n\t\t\t\t\t\t\t\t: (spec?.targetModel ?? relMeta?.targetModel),\n\t\t\t\t\t\ttargetSchema:\n\t\t\t\t\t\t\tspec === true\n\t\t\t\t\t\t\t\t? relMeta?.targetSchema\n\t\t\t\t\t\t\t\t: (spec?.schema ?? relMeta?.targetSchema),\n\t\t\t\t\t\tvia: relMeta?.targetModel,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\treturn builder;\n\t\t},\n\t\tdelete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\n\t\t\tconst filters = state.conditions.length\n\t\t\t\t? [...state.conditions]\n\t\t\t\t: undefined;\n\t\t\tconst resourceId = options?.resourceId ?? getResourceId(state);\n\t\t\tif (!(resourceId || filters?.length)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId',\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst mutationCallsite = captureTraceCallsite(tracer);\n\t\t\tconst executeDelete = async (\n\t\t\t\tcolumns?: string | string[],\n\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t) => {\n\t\t\t\tconst executionState = snapshotState();\n\t\t\t\tconst debugState: TableBuilderState = {\n\t\t\t\t\t...executionState,\n\t\t\t\t\tconditions: filters\n\t\t\t\t\t\t? filters.map((condition) => ({ ...condition }))\n\t\t\t\t\t\t: [],\n\t\t\t\t};\n\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\ttableName,\n\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t);\n\t\t\t\tconst payload: AthenaDeletePayload = {\n\t\t\t\t\tconditions: filters,\n\t\t\t\t\tresource_id: resourceId,\n\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t};\n\t\t\t\tif (executionState.order) {\n\t\t\t\t\tpayload.sort_by = executionState.order;\n\t\t\t\t}\n\t\t\t\tif (executionState.limit !== undefined) {\n\t\t\t\t\tpayload.limit = executionState.limit;\n\t\t\t\t}\n\t\t\t\tif (executionState.offset !== undefined) {\n\t\t\t\t\tpayload.offset = executionState.offset;\n\t\t\t\t}\n\t\t\t\tif (executionState.currentPage !== undefined) {\n\t\t\t\t\tpayload.current_page = executionState.currentPage;\n\t\t\t\t}\n\t\t\t\tif (executionState.pageSize !== undefined) {\n\t\t\t\t\tpayload.page_size = executionState.pageSize;\n\t\t\t\t}\n\t\t\t\tif (executionState.totalPages !== undefined) {\n\t\t\t\t\tpayload.total_pages = executionState.totalPages;\n\t\t\t\t}\n\t\t\t\tif (columns) {\n\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t}\n\t\t\t\tconst sql = buildDeleteDebugSql(payload);\n\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t? buildDeleteDebugAst({\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tstate: debugState,\n\t\t\t\t\t\t})\n\t\t\t\t\t: undefined;\n\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\ttracer,\n\t\t\t\t\t{\n\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\tendpoint: \"/gateway/delete\",\n\t\t\t\t\t\toperation: \"delete\",\n\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t},\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst response = await client.deleteGateway<Row | null>(\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\toperation: \"delete\",\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcallsite,\n\t\t\t\t);\n\t\t\t};\n\t\t\treturn createMutationQuery<Row | null>(\n\t\t\t\texecuteDelete,\n\t\t\t\tnull,\n\t\t\t\ttracer,\n\t\t\t\tmutationCallsite,\n\t\t\t\tmutationExecutable(\"delete\"),\n\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\tconst executionState = snapshotState();\n\t\t\t\t\tconst filters = executionState.conditions.length\n\t\t\t\t\t\t? [...executionState.conditions]\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaDeletePayload = {\n\t\t\t\t\t\tconditions: filters,\n\t\t\t\t\t\tresource_id: resourceId,\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t};\n\t\t\t\t\tif (executionState.order) {\n\t\t\t\t\t\tpayload.sort_by = executionState.order;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.limit !== undefined) {\n\t\t\t\t\t\tpayload.limit = executionState.limit;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.offset !== undefined) {\n\t\t\t\t\t\tpayload.offset = executionState.offset;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.currentPage !== undefined) {\n\t\t\t\t\t\tpayload.current_page = executionState.currentPage;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.pageSize !== undefined) {\n\t\t\t\t\t\tpayload.page_size = executionState.pageSize;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.totalPages !== undefined) {\n\t\t\t\t\t\tpayload.total_pages = executionState.totalPages;\n\t\t\t\t\t}\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"delete\", payload };\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tasync findMany<const TSelect extends AthenaSelectShape>(\n\t\t\toptions: AthenaFindManyOptions<Row, TSelect> & {\n\t\t\t\tselect: AthenaValidatedSelectShape<Row, TSelect>;\n\t\t\t},\n\t\t) {\n\t\t\tconst columns = compileSelectShape(options.select);\n\t\t\tconst baseState = snapshotState();\n\t\t\tconst executionState = snapshotState();\n\t\t\tconst callsite = captureTraceCallsite(tracer);\n\t\t\tif (options.orderBy !== undefined) {\n\t\t\t\texecutionState.order = compileOrderBy<Row>(options.orderBy);\n\t\t\t}\n\t\t\tif (options.limit !== undefined) {\n\t\t\t\texecutionState.limit = options.limit;\n\t\t\t}\n\t\t\tconst nestedQueryModifiers = selectShapeHasNestedQueryModifiers(\n\t\t\t\toptions.select,\n\t\t\t);\n\t\t\tconst schemaQualifiedRelation = selectShapeUsesRelationSchema(\n\t\t\t\toptions.select,\n\t\t\t);\n\t\t\tconst useFindManyAst =\n\t\t\t\tBoolean(behavior?.findManyAst) &&\n\t\t\t\tcanUseFindManyAstTransport(baseState) &&\n\t\t\t\t!findManyAstWhereRequiresLegacyTransport(options.where) &&\n\t\t\t\t(!schemaQualifiedRelation ||\n\t\t\t\t\tBoolean(behavior?.findManyAstRelationSchema));\n\t\t\tif (!useFindManyAst) {\n\t\t\t\tconst compiledWhere = compileWhere(options.where);\n\t\t\t\tif (compiledWhere?.length) {\n\t\t\t\t\texecutionState.conditions.push(...compiledWhere);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!useFindManyAst && nestedQueryModifiers) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY: nested relation where/order/limit require the findMany AST path\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (useFindManyAst) {\n\t\t\t\tconst resolvedTableName = resolveTableNameForCall(tableName, undefined);\n\t\t\t\tconst payload: AthenaFindManyAstPayload<Row, TSelect> = {\n\t\t\t\t\tselect: options.select,\n\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t};\n\t\t\t\tif (options.where !== undefined) {\n\t\t\t\t\tpayload.where = normalizeFindManyAstWhere(options.where);\n\t\t\t\t}\n\t\t\t\tconst astOrder = toFindManyAstOrder<Row>(executionState.order);\n\t\t\t\tif (astOrder !== undefined) {\n\t\t\t\t\tpayload.orderBy = astOrder;\n\t\t\t\t}\n\t\t\t\tif (executionState.limit !== undefined) {\n\t\t\t\t\tpayload.limit = executionState.limit;\n\t\t\t\t}\n\t\t\t\tconst sql = buildDebugSelectQuery({\n\t\t\t\t\tcolumns,\n\t\t\t\t\tconditions: executionState.conditions,\n\t\t\t\t\tlimit: executionState.limit,\n\t\t\t\t\torder: executionState.order,\n\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t});\n\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t? buildFindManyDirectDebugAst({\n\t\t\t\t\t\t\tbaseState,\n\t\t\t\t\t\t\tcompiledColumns: columns,\n\t\t\t\t\t\t\texecutionState,\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t\t\t})\n\t\t\t\t\t: undefined;\n\t\t\t\treturn executeRead(behavior, () =>\n\t\t\t\t\texecuteWithQueryTrace(\n\t\t\t\t\t\ttracer,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\t\tendpoint: \"/gateway/fetch\",\n\t\t\t\t\t\t\toperation: \"select\",\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tsql,\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tconst response =\n\t\t\t\t\t\t\t\tawait client.fetchGateway<\n\t\t\t\t\t\t\t\t\tAthenaFindManyResult<Row, TSelect, TContext>[]\n\t\t\t\t\t\t\t\t>(payload);\n\t\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\t\toperation: \"select\",\n\t\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcallsite,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn runSelect<AthenaFindManyResult<Row, TSelect, TContext>[]>(\n\t\t\t\tcolumns,\n\t\t\t\tundefined,\n\t\t\t\texecutionState,\n\t\t\t\tcallsite,\n\t\t\t\tdebugAstEnabled\n\t\t\t\t\t? ({\n\t\t\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t\t\t\texecutionState: tracedState,\n\t\t\t\t\t\t\tplan,\n\t\t\t\t\t\t}) =>\n\t\t\t\t\t\t\tbuildFindManyCompiledDebugAst({\n\t\t\t\t\t\t\t\tbaseState,\n\t\t\t\t\t\t\t\tcompiledColumns: columns,\n\t\t\t\t\t\t\t\texecutionState: tracedState,\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t\tplan,\n\t\t\t\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t: undefined,\n\t\t\t);\n\t\t},\n\t\tinsert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\n\t\t\tconst insertChangedFields = collectChangedFields(values);\n\t\t\tconst mutationCallsite = captureTraceCallsite(tracer);\n\t\t\tif (Array.isArray(values)) {\n\t\t\t\tconst executeInsertMany = async (\n\t\t\t\t\tcolumns?: string | string[],\n\t\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t\t) => {\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\tinsert_body: asAthenaJsonObjectArray(values),\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t};\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t\t}\n\t\t\t\t\tconst sql = buildInsertDebugSql(payload);\n\t\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t\t? buildInsertDebugAst(payload)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\t\ttracer,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\t\tendpoint: \"/gateway/insert\",\n\t\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tsql,\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tconst response = await client.insertGateway<Row[]>(\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcallsite,\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\treturn createMutationQuery<Row[]>(\n\t\t\t\t\texecuteInsertMany,\n\t\t\t\t\tDEFAULT_COLUMNS,\n\t\t\t\t\ttracer,\n\t\t\t\t\tmutationCallsite,\n\t\t\t\t\tmutationExecutable(\"insert\", insertChangedFields),\n\t\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\t\tinsert_body: asAthenaJsonObjectArray(values),\n\t\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst payloadColumns = normalizeSelectColumnsInput(columns);\n\t\t\t\t\t\tif (payloadColumns) {\n\t\t\t\t\t\t\tpayload.columns = payloadColumns;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { kind: \"insert\", payload };\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst executeInsertOne = async (\n\t\t\t\tcolumns?: string | string[],\n\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t) => {\n\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\ttableName,\n\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t);\n\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\tinsert_body: asAthenaJsonObject(values),\n\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t};\n\t\t\t\tif (columns) {\n\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t}\n\t\t\t\tconst sql = buildInsertDebugSql(payload);\n\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t? buildInsertDebugAst(payload)\n\t\t\t\t\t: undefined;\n\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\ttracer,\n\t\t\t\t\t{\n\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\tendpoint: \"/gateway/insert\",\n\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t},\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst response = await client.insertGateway<Row>(\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcallsite,\n\t\t\t\t);\n\t\t\t};\n\t\t\treturn createMutationQuery<Row>(\n\t\t\t\texecuteInsertOne,\n\t\t\t\tDEFAULT_COLUMNS,\n\t\t\t\ttracer,\n\t\t\t\tmutationCallsite,\n\t\t\t\tmutationExecutable(\"insert\", insertChangedFields),\n\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\tinsert_body: asAthenaJsonObject(values),\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t};\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"insert\", payload };\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tasync maybeSingle<T = Row>(\n\t\t\tcolumns?: AthenaSelectInput,\n\t\t\toptions?: AthenaGatewayCallOptions,\n\t\t) {\n\t\t\tconst response = await runSelect<T[]>(\n\t\t\t\tcolumns ?? DEFAULT_COLUMNS,\n\t\t\t\toptions,\n\t\t\t\tsnapshotState(),\n\t\t\t\tcaptureTraceCallsite(tracer),\n\t\t\t);\n\t\t\treturn applyCardinality(response, \"maybeSingle\");\n\t\t},\n\t\tmodel: state.model,\n\t\treset() {\n\t\t\tstate.conditions = [];\n\t\t\tstate.limit = undefined;\n\t\t\tstate.offset = undefined;\n\t\t\tstate.order = undefined;\n\t\t\tstate.currentPage = undefined;\n\t\t\tstate.pageSize = undefined;\n\t\t\tstate.totalPages = undefined;\n\t\t\treturn builder;\n\t\t},\n\t\tselect<T = Row>(\n\t\t\tcolumns: AthenaSelectInput = DEFAULT_COLUMNS,\n\t\t\toptions?: AthenaGatewayCallOptions,\n\t\t) {\n\t\t\treturn createSelectChain<T>(\n\t\t\t\tcolumns,\n\t\t\t\toptions,\n\t\t\t\tcaptureTraceCallsite(tracer),\n\t\t\t);\n\t\t},\n\t\tasync single<T = Row>(\n\t\t\tcolumns?: AthenaSelectInput,\n\t\t\toptions?: AthenaGatewayCallOptions,\n\t\t) {\n\t\t\tconst response = await runSelect<T[]>(\n\t\t\t\tcolumns ?? DEFAULT_COLUMNS,\n\t\t\t\toptions,\n\t\t\t\tsnapshotState(),\n\t\t\t\tcaptureTraceCallsite(tracer),\n\t\t\t);\n\t\t\treturn applyCardinality(response, \"single\");\n\t\t},\n\t\tupdate(values: Update, options?: AthenaGatewayCallOptions) {\n\t\t\tconst updateChangedFields = collectChangedFields(values);\n\t\t\tconst mutationCallsite = captureTraceCallsite(tracer);\n\t\t\tconst executeUpdate = async (\n\t\t\t\tcolumns?: string | string[],\n\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t) => {\n\t\t\t\tconst executionState = snapshotState();\n\t\t\t\tconst filters = executionState.conditions.length\n\t\t\t\t\t? [...executionState.conditions]\n\t\t\t\t\t: undefined;\n\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\ttableName,\n\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t);\n\t\t\t\tconst payload: AthenaUpdatePayload = {\n\t\t\t\t\tconditions: filters,\n\t\t\t\t\tstrip_nulls: mergedOptions?.stripNulls ?? true,\n\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\tupdate_body: asAthenaJsonObject(values),\n\t\t\t\t};\n\t\t\t\tif (executionState.order) {\n\t\t\t\t\tpayload.sort_by = executionState.order;\n\t\t\t\t}\n\t\t\t\tif (executionState.limit !== undefined) {\n\t\t\t\t\tpayload.limit = executionState.limit;\n\t\t\t\t}\n\t\t\t\tif (executionState.offset !== undefined) {\n\t\t\t\t\tpayload.offset = executionState.offset;\n\t\t\t\t}\n\t\t\t\tif (executionState.currentPage !== undefined) {\n\t\t\t\t\tpayload.current_page = executionState.currentPage;\n\t\t\t\t}\n\t\t\t\tif (executionState.pageSize !== undefined) {\n\t\t\t\t\tpayload.page_size = executionState.pageSize;\n\t\t\t\t}\n\t\t\t\tif (executionState.totalPages !== undefined) {\n\t\t\t\t\tpayload.total_pages = executionState.totalPages;\n\t\t\t\t}\n\t\t\t\tif (columns) {\n\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t}\n\t\t\t\tconst sql = buildUpdateDebugSql(payload);\n\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t? buildUpdateDebugAst({\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tstate: executionState,\n\t\t\t\t\t\t})\n\t\t\t\t\t: undefined;\n\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\ttracer,\n\t\t\t\t\t{\n\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\tendpoint: \"/gateway/update\",\n\t\t\t\t\t\toperation: \"update\",\n\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t},\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst response = await client.updateGateway<Row[]>(\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\toperation: \"update\",\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcallsite,\n\t\t\t\t);\n\t\t\t};\n\t\t\tconst mutation = createMutationQuery<Row[]>(\n\t\t\t\texecuteUpdate,\n\t\t\t\tnull,\n\t\t\t\ttracer,\n\t\t\t\tmutationCallsite,\n\t\t\t\tmutationExecutable(\"update\", updateChangedFields),\n\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\tconst executionState = snapshotState();\n\t\t\t\t\tconst filters = executionState.conditions.length\n\t\t\t\t\t\t? [...executionState.conditions]\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaUpdatePayload = {\n\t\t\t\t\t\tconditions: filters,\n\t\t\t\t\t\tstrip_nulls: mergedOptions?.stripNulls ?? true,\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t\tupdate_body: asAthenaJsonObject(values),\n\t\t\t\t\t};\n\t\t\t\t\tif (executionState.order) {\n\t\t\t\t\t\tpayload.sort_by = executionState.order;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.limit !== undefined) {\n\t\t\t\t\t\tpayload.limit = executionState.limit;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.offset !== undefined) {\n\t\t\t\t\t\tpayload.offset = executionState.offset;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.currentPage !== undefined) {\n\t\t\t\t\t\tpayload.current_page = executionState.currentPage;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.pageSize !== undefined) {\n\t\t\t\t\t\tpayload.page_size = executionState.pageSize;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.totalPages !== undefined) {\n\t\t\t\t\t\tpayload.total_pages = executionState.totalPages;\n\t\t\t\t\t}\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"update\", payload };\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst updateChain = {} as UpdateChain<Row>;\n\t\t\tconst filterMethods = createFilterMethods<UpdateChain<Row>, Row>(\n\t\t\t\tstate,\n\t\t\t\taddCondition,\n\t\t\t\tupdateChain,\n\t\t\t);\n\t\t\tObject.assign(updateChain, filterMethods, mutation);\n\t\t\treturn updateChain;\n\t\t},\n\t\tupsert(\n\t\t\tvalues: Insert | Insert[],\n\t\t\toptions?: AthenaGatewayCallOptions & {\n\t\t\t\tupdateBody?: Update;\n\t\t\t\tonConflict?: string | string[];\n\t\t\t},\n\t\t) {\n\t\t\tconst upsertChangedFields = collectChangedFields(values);\n\t\t\tconst mutationCallsite = captureTraceCallsite(tracer);\n\t\t\tif (Array.isArray(values)) {\n\t\t\t\tconst executeUpsertMany = async (\n\t\t\t\t\tcolumns?: string | string[],\n\t\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t\t) => {\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\tinsert_body: asAthenaJsonObjectArray(values),\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t\tupdate_body: options?.updateBody\n\t\t\t\t\t\t\t? asAthenaJsonObject(options.updateBody)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t};\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.onConflict) {\n\t\t\t\t\t\tpayload.on_conflict = options.onConflict;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t\t}\n\t\t\t\t\tconst sql = buildInsertDebugSql(payload);\n\t\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t\t? buildUpsertDebugAst(payload)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\t\ttracer,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\t\tendpoint: \"/gateway/insert\",\n\t\t\t\t\t\t\toperation: \"upsert\",\n\t\t\t\t\t\t\tsemanticOperation: \"upsert\",\n\t\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tsql,\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tconst response = await client.insertGateway<Row[]>(\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcallsite,\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\treturn createMutationQuery<Row[]>(\n\t\t\t\t\texecuteUpsertMany,\n\t\t\t\t\tDEFAULT_COLUMNS,\n\t\t\t\t\ttracer,\n\t\t\t\t\tmutationCallsite,\n\t\t\t\t\tmutationExecutable(\"upsert\", upsertChangedFields),\n\t\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\t\tinsert_body: asAthenaJsonObjectArray(values as Insert[]),\n\t\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t\t\tupdate_body: options?.updateBody\n\t\t\t\t\t\t\t\t? asAthenaJsonObject(options.updateBody)\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst payloadColumns = normalizeSelectColumnsInput(columns);\n\t\t\t\t\t\tif (payloadColumns) {\n\t\t\t\t\t\t\tpayload.columns = payloadColumns;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options?.onConflict) {\n\t\t\t\t\t\t\tpayload.on_conflict = options.onConflict;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { kind: \"insert\", payload };\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst executeUpsertOne = async (\n\t\t\t\tcolumns?: string | string[],\n\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t) => {\n\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\ttableName,\n\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t);\n\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\tinsert_body: asAthenaJsonObject(values),\n\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\tupdate_body: options?.updateBody\n\t\t\t\t\t\t? asAthenaJsonObject(options.updateBody)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t};\n\t\t\t\tif (columns) {\n\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t}\n\t\t\t\tif (options?.onConflict) {\n\t\t\t\t\tpayload.on_conflict = options.onConflict;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t}\n\t\t\t\tconst sql = buildInsertDebugSql(payload);\n\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t? buildUpsertDebugAst(payload)\n\t\t\t\t\t: undefined;\n\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\ttracer,\n\t\t\t\t\t{\n\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\tendpoint: \"/gateway/insert\",\n\t\t\t\t\t\toperation: \"upsert\",\n\t\t\t\t\t\tsemanticOperation: \"upsert\",\n\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t},\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst response = await client.insertGateway<Row>(\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcallsite,\n\t\t\t\t);\n\t\t\t};\n\t\t\treturn createMutationQuery<Row>(\n\t\t\t\texecuteUpsertOne,\n\t\t\t\tDEFAULT_COLUMNS,\n\t\t\t\ttracer,\n\t\t\t\tmutationCallsite,\n\t\t\t\tmutationExecutable(\"upsert\", upsertChangedFields),\n\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\tinsert_body: asAthenaJsonObject(values),\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t\tupdate_body: options?.updateBody\n\t\t\t\t\t\t\t? asAthenaJsonObject(options.updateBody)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t};\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.onConflict) {\n\t\t\t\t\t\tpayload.on_conflict = options.onConflict;\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"insert\", payload };\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t});\n\n\treturn builder;\n}\n\nexport function createQueryBuilder(\n\tclient: ReturnType<typeof createAthenaGatewayClient>,\n\tformatGatewayResult: AthenaResultFormatter,\n\tbehavior?: InternalClientBehaviorOptions,\n\ttracer?: AthenaQueryTracer,\n\tdeprecationOwner?: object,\n) {\n\tconst debugAstEnabled = Boolean(behavior?.debugAst);\n\t// Legacy root query() historically forwarded multi-statement scripts to the\n\t// gateway (migration/seed). Keep that behavior; only explicit admin.query rejects.\n\tconst adminQuery = createAdminQuery({\n\t\tallowMultiStatement: true,\n\t\tclient,\n\t\tformatGatewayResult,\n\t});\n\t/**\n\t * Executes raw SQL through Athena's compatibility query surface.\n\t *\n\t * @deprecated Prefer `athena.admin.query()` with explicit `operation`\n\t * and `expectedShape`.\n\t */\n\treturn async function query<Row = unknown>(\n\t\tsql: string,\n\t\toptions?: AthenaGatewayCallOptions,\n\t): Promise<AthenaResult<Row[]>> {\n\t\tif (deprecationOwner) {\n\t\t\tmaybeWarnRawQueryDeprecated(\n\t\t\t\tdeprecationOwner,\n\t\t\t\tbehavior?.rawQueryDiagnostics,\n\t\t\t);\n\t\t}\n\t\tconst normalizedQuery = sql.trim();\n\t\tif (!normalizedQuery) {\n\t\t\tthrow new Error(\"query requires a non-empty string\");\n\t\t}\n\t\tconst operation = classifyRawSqlOperation(normalizedQuery);\n\t\tconst expectedShape = defaultExpectedShapeForOperation(operation);\n\t\tconst params = options?.params;\n\t\tconst payload = {\n\t\t\tquery: normalizedQuery,\n\t\t\t...(Array.isArray(params) ? { params } : {}),\n\t\t\texpectedShape,\n\t\t\toperation,\n\t\t};\n\t\tconst callsite = captureTraceCallsite(tracer);\n\t\treturn executeRead(behavior, () =>\n\t\t\texecuteWithQueryTrace(\n\t\t\t\ttracer,\n\t\t\t\t{\n\t\t\t\t\tast: debugAstEnabled\n\t\t\t\t\t\t? buildRawQueryDebugAst(normalizedQuery)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tendpoint: \"/gateway/query\",\n\t\t\t\t\toperation: \"query\",\n\t\t\t\t\toptions,\n\t\t\t\t\tpayload,\n\t\t\t\t\tsql: normalizedQuery,\n\t\t\t\t},\n\t\t\t\tasync () => {\n\t\t\t\t\tconst result = await adminQuery<Row[]>(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsql: normalizedQuery,\n\t\t\t\t\t\t\t...(Array.isArray(params) ? { params } : {}),\n\t\t\t\t\t\t\texpectedShape: \"rows\",\n\t\t\t\t\t\t\toperation,\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t\t// Preserve legacy AthenaResult shape (no required metadata on root query).\n\t\t\t\t\tconst { metadata: _metadata, ...legacy } = result;\n\t\t\t\t\tvoid _metadata;\n\t\t\t\t\treturn legacy;\n\t\t\t\t},\n\t\t\t\tcallsite,\n\t\t\t),\n\t\t);\n\t};\n}\n","import type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaQueryPayload,\n  AthenaRpcCallOptions,\n  AthenaRpcPayload,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport { AthenaTransactionError } from \"./errors.ts\";\nimport { nextTransactionOperationId } from \"./compile.ts\";\nimport type { InteractiveTransactionSession } from \"./coordinator.ts\";\nimport type { AthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport { compileAthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport type { AthenaTransactionOperation } from \"./types.ts\";\n\nfunction descriptorFor(\n  operation: \"select\" | \"insert\" | \"update\" | \"delete\",\n  tableName: string\n): AthenaQueryDescriptor {\n  return compileAthenaQueryDescriptor({\n    operation,\n    tableName,\n  });\n}\n\nfunction tableNameOf(payload: { table_name?: string }): string {\n  return payload.table_name?.trim() || \"unknown\";\n}\n\nexport function createInteractiveGatewayClient(\n  base: AthenaGatewayClient,\n  session: InteractiveTransactionSession\n): AthenaGatewayClient {\n  const execute = async (\n    kind: AthenaTransactionOperation[\"kind\"],\n    payload:\n      | AthenaFetchPayload\n      | AthenaInsertPayload\n      | AthenaUpdatePayload\n      | AthenaDeletePayload\n  ): Promise<AthenaGatewayResponse<unknown>> => {\n    const table = tableNameOf(payload);\n    const descriptorKind = kind === \"fetch\" ? \"select\" : kind;\n    const operation: AthenaTransactionOperation = {\n      descriptor: descriptorFor(descriptorKind, table),\n      id: nextTransactionOperationId(),\n      index: 0,\n      kind,\n      payload,\n    } as AthenaTransactionOperation;\n    return session.execute(operation);\n  };\n\n  return {\n    baseUrl: base.baseUrl,\n    buildHeaders(options) {\n      return base.buildHeaders(options);\n    },\n    deleteGateway(payload: AthenaDeletePayload, _options?: AthenaGatewayCallOptions) {\n      return execute(\"delete\", payload) as Promise<AthenaGatewayResponse<never>>;\n    },\n    fetchGateway(payload, _options?: AthenaGatewayCallOptions) {\n      return execute(\"fetch\", payload as AthenaFetchPayload) as Promise<\n        AthenaGatewayResponse<never>\n      >;\n    },\n    insertGateway(payload: AthenaInsertPayload, _options?: AthenaGatewayCallOptions) {\n      return execute(\"insert\", payload) as Promise<AthenaGatewayResponse<never>>;\n    },\n    async queryGateway(\n      _payload: AthenaQueryPayload,\n      _options?: AthenaGatewayCallOptions\n    ) {\n      void _payload;\n      void _options;\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n        \"Raw SQL is not part of v1 interactive transactions\",\n        { backend: session.capabilities.backend }\n      );\n    },\n    resolveCallOptions(options) {\n      return base.resolveCallOptions(options);\n    },\n    async rpcGateway(\n      _payload: AthenaRpcPayload,\n      _options?: AthenaRpcCallOptions\n    ) {\n      void _payload;\n      void _options;\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n        \"RPC is not part of v1 interactive transactions\",\n        { backend: session.capabilities.backend }\n      );\n    },\n    updateGateway(payload: AthenaUpdatePayload, _options?: AthenaGatewayCallOptions) {\n      return execute(\"update\", payload) as Promise<AthenaGatewayResponse<never>>;\n    },\n    transactions: base.transactions,\n    verifyConnection(options) {\n      return base.verifyConnection(options);\n    },\n  };\n}\n","import type { AthenaModelTarget } from \"./types.ts\";\n\ninterface ResolveAthenaModelTargetTableNameOptions {\n  fallbackModel?: string;\n  fallbackSchema?: string;\n}\n\nfunction normalizeOptionalName(value: string | undefined): string | undefined {\n  const normalized = value?.trim();\n  return normalized ? normalized : undefined;\n}\n\nexport function isAthenaModelTarget(\n  value: unknown\n): value is AthenaModelTarget {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n\n  const candidate = value as { meta?: { primaryKey?: unknown } };\n  return Boolean(candidate.meta && Array.isArray(candidate.meta.primaryKey));\n}\n\nexport function resolveAthenaModelTargetTableName(\n  target: AthenaModelTarget,\n  options: ResolveAthenaModelTargetTableNameOptions = {}\n): string {\n  const explicitTableName = normalizeOptionalName(target.meta.tableName);\n  const schemaName = normalizeOptionalName(\n    target.meta.schema ?? options.fallbackSchema\n  );\n  if (explicitTableName) {\n    if (explicitTableName.includes(\".\")) {\n      return explicitTableName;\n    }\n    return schemaName ? `${schemaName}.${explicitTableName}` : explicitTableName;\n  }\n  const modelName = normalizeOptionalName(\n    target.meta.model ?? options.fallbackModel\n  );\n\n  if (!modelName) {\n    throw new Error(\n      \"Athena model target is missing meta.model or meta.tableName. Provide one of those before calling from(model).\"\n    );\n  }\n\n  return schemaName ? `${schemaName}.${modelName}` : modelName;\n}\n","/**\n * Shared query-string builder for path + optional object of primitives.\n */\n\nexport interface AppendHttpQueryOptions {\n  /**\n   * When true, skip empty-string values (admin/backup style).\n   * Default: only skip null/undefined.\n   */\n  skipEmptyString?: boolean;\n}\n\n/**\n * Append `query` object as `?k=v` on `path`. Omits null/undefined (and empty\n * strings when `skipEmptyString` is set).\n */\nexport function appendHttpQuery(\n  path: string,\n  query?: object,\n  options?: AppendHttpQueryOptions\n): string {\n  if (!query) {\n    return path;\n  }\n  const params = new URLSearchParams();\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) {\n      continue;\n    }\n    if (options?.skipEmptyString && value === \"\") {\n      continue;\n    }\n    params.set(key, String(value));\n  }\n  const text = params.toString();\n  return text ? `${path}?${text}` : path;\n}\n","/**\n * Shared Athena storage error types and factory.\n *\n * Extracted from `module.ts` so `backup.ts` (and other storage submodules) can\n * throw real {@link AthenaStorageError} instances with `onError` observers\n * without a circular import against the storage module surface.\n */\n\nimport type {\n  AthenaErrorCategory,\n  AthenaErrorCode,\n  AthenaErrorKind,\n  NormalizedAthenaError,\n} from \"../auxiliaries.ts\";\nimport { normalizeAthenaError } from \"../auxiliaries.ts\";\nimport type {\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorCode,\n  AthenaGatewayMethod,\n} from \"../gateway/types.ts\";\n\nexport type AthenaStorageErrorHandler = (\n  error: AthenaStorageError\n) => void | Promise<void>;\n\n/** Local / adapter capability gap — never silently approximate the missing op. */\nexport const ATHENA_STORAGE_CAPABILITY_UNSUPPORTED =\n  \"ATHENA_STORAGE_CAPABILITY_UNSUPPORTED\" as const;\n\nexport type AthenaStorageCapabilityUnsupportedCode =\n  typeof ATHENA_STORAGE_CAPABILITY_UNSUPPORTED;\n\nexport class AthenaStorageCapabilityError extends Error {\n  readonly code: AthenaStorageCapabilityUnsupportedCode =\n    ATHENA_STORAGE_CAPABILITY_UNSUPPORTED;\n\n  constructor(operation: string) {\n    super(\n      `${ATHENA_STORAGE_CAPABILITY_UNSUPPORTED}: ${operation} is not supported on this storage adapter.`\n    );\n    this.name = \"AthenaStorageCapabilityError\";\n  }\n}\n\nexport type AthenaStorageErrorCode =\n  | \"INVALID_URL\"\n  | \"NETWORK_ERROR\"\n  | \"HTTP_ERROR\"\n  | \"INVALID_JSON\"\n  | \"INVALID_ATHENA_ENVELOPE\"\n  | \"UNKNOWN_ERROR\"\n  | AthenaStorageCapabilityUnsupportedCode;\n\nexport const AthenaStorageErrorCode = {\n  HttpError: \"HTTP_ERROR\",\n  InvalidAthenaEnvelope: \"INVALID_ATHENA_ENVELOPE\",\n  InvalidJson: \"INVALID_JSON\",\n  InvalidUrl: \"INVALID_URL\",\n  NetworkError: \"NETWORK_ERROR\",\n  UnknownError: \"UNKNOWN_ERROR\",\n} as const satisfies Record<string, AthenaStorageErrorCode>;\n\nexport interface AthenaStorageErrorDetails {\n  athenaCode: AthenaErrorCode;\n  category: AthenaErrorCategory;\n  cause?: string;\n  code: AthenaStorageErrorCode;\n  endpoint: AthenaGatewayEndpointPath;\n  hint?: string;\n  kind: AthenaErrorKind;\n  message: string;\n  method: AthenaGatewayMethod;\n  raw: unknown;\n  requestId?: string;\n  retryable: boolean;\n  status: number;\n}\n\nexport interface AthenaStorageErrorInput {\n  cause?: unknown;\n  code: AthenaStorageErrorCode;\n  endpoint: AthenaGatewayEndpointPath;\n  hint?: string;\n  message: string;\n  method: AthenaGatewayMethod;\n  raw?: unknown;\n  requestId?: string;\n  status: number;\n}\n\n/** Minimal runtime knobs needed to notify error observers. */\nexport interface AthenaStorageErrorRuntimeOptions {\n  onError?: AthenaStorageErrorHandler;\n}\n\n/** Route row used only for normalized-error `operation` labels. */\nexport interface StorageErrorRouteRef {\n  method: string;\n  name: string;\n  path: string;\n}\n\nlet storageErrorRoutes: readonly StorageErrorRouteRef[] = [];\n\n/**\n * Bind storage SDK route names so normalized errors can resolve\n * `operation` (e.g. `listStorageFiles`). Called once from `module.ts`\n * after `storageSdkManifest` is defined.\n */\nexport function bindStorageErrorRoutes(\n  routes: readonly StorageErrorRouteRef[]\n): void {\n  storageErrorRoutes = routes;\n}\n\nfunction causeToString(cause: unknown): string | undefined {\n  if (cause === undefined || cause === null) {\n    return;\n  }\n  if (typeof cause === \"string\") {\n    return cause;\n  }\n  if (cause instanceof Error && cause.message.trim()) {\n    return cause.message.trim();\n  }\n  try {\n    return JSON.stringify(cause);\n  } catch {\n    return String(cause);\n  }\n}\n\nfunction storageGatewayCode(\n  code: AthenaStorageErrorCode\n): AthenaGatewayErrorCode {\n  if (code === \"INVALID_URL\") {\n    return \"INVALID_URL\";\n  }\n  if (code === \"NETWORK_ERROR\") {\n    return \"NETWORK_ERROR\";\n  }\n  if (code === \"INVALID_JSON\" || code === \"INVALID_ATHENA_ENVELOPE\") {\n    return \"INVALID_JSON\";\n  }\n  if (code === \"HTTP_ERROR\") {\n    return \"HTTP_ERROR\";\n  }\n  return \"UNKNOWN_ERROR\";\n}\n\nfunction storageOperationFromEndpoint(\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod\n): string {\n  const endpointPath = String(endpoint).split(\"?\")[0];\n  for (const candidate of storageErrorRoutes) {\n    if (candidate.method !== method) {\n      continue;\n    }\n    const pattern = `^${candidate.path.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/\\\\\\{[^/]+\\\\\\}/g, \"[^/]+\")}$`;\n    if (new RegExp(pattern).test(endpointPath)) {\n      return candidate.name;\n    }\n  }\n  return `storage:${method.toLowerCase()}`;\n}\n\nfunction normalizeStorageErrorInput(\n  input: AthenaStorageErrorInput\n): NormalizedAthenaError {\n  return normalizeAthenaError(\n    {\n      data: null,\n      error: {\n        gatewayCode: storageGatewayCode(input.code),\n        message: input.message,\n        raw: input.raw ?? input.cause ?? null,\n        status: input.status,\n      },\n      errorDetails: {\n        cause: causeToString(input.cause),\n        code: storageGatewayCode(input.code),\n        endpoint: input.endpoint,\n        hint: input.hint,\n        message: input.message,\n        method: input.method,\n        requestId: input.requestId,\n        status: input.status,\n      },\n      raw: input.raw ?? input.cause ?? null,\n      status: input.status,\n    },\n    { operation: storageOperationFromEndpoint(input.endpoint, input.method) }\n  );\n}\n\nexport class AthenaStorageError extends Error {\n  readonly code: AthenaStorageErrorCode;\n  readonly athenaCode: AthenaErrorCode;\n  readonly kind: AthenaErrorKind;\n  readonly category: AthenaErrorCategory;\n  readonly retryable: boolean;\n  readonly status: number;\n  readonly endpoint: AthenaGatewayEndpointPath;\n  readonly method: AthenaGatewayMethod;\n  readonly requestId?: string;\n  readonly hint?: string;\n  readonly causeDetail?: string;\n  readonly raw: unknown;\n  readonly normalized: NormalizedAthenaError;\n  readonly __athenaNormalizedError: NormalizedAthenaError;\n\n  constructor(input: AthenaStorageErrorInput) {\n    super(input.message, { cause: input.cause });\n    this.name = \"AthenaStorageError\";\n    this.code = input.code;\n    this.status = input.status;\n    this.endpoint = input.endpoint;\n    this.method = input.method;\n    this.requestId = input.requestId;\n    this.hint = input.hint;\n    this.causeDetail = causeToString(input.cause);\n    this.raw = input.raw ?? null;\n    this.normalized = normalizeStorageErrorInput(input);\n    this.__athenaNormalizedError = this.normalized;\n    this.athenaCode = this.normalized.code;\n    this.kind = this.normalized.kind;\n    this.category = this.normalized.category;\n    this.retryable = this.normalized.retryable;\n    Object.defineProperty(this, \"__athenaNormalizedError\", {\n      configurable: false,\n      enumerable: false,\n      value: this.normalized,\n      writable: false,\n    });\n  }\n\n  toDetails(): AthenaStorageErrorDetails {\n    return {\n      athenaCode: this.athenaCode,\n      category: this.category,\n      cause: this.causeDetail,\n      code: this.code,\n      endpoint: this.endpoint,\n      hint: this.hint,\n      kind: this.kind,\n      message: this.message,\n      method: this.method,\n      raw: this.raw,\n      requestId: this.requestId,\n      retryable: this.retryable,\n      status: this.status,\n    };\n  }\n}\n\nexport function createAthenaStorageError(\n  input: AthenaStorageErrorInput\n): AthenaStorageError {\n  return new AthenaStorageError(input);\n}\n\nfunction readOnErrorHandler(\n  source: unknown\n): AthenaStorageErrorHandler | undefined {\n  if (!source || typeof source !== \"object\") {\n    return;\n  }\n  const handler = (source as { onError?: unknown }).onError;\n  return typeof handler === \"function\"\n    ? (handler as AthenaStorageErrorHandler)\n    : undefined;\n}\n\n/**\n * Notify runtime + per-call `onError` observers.\n * `options` is intentionally wide so gateway-resolved call options\n * (without `onError`) remain assignable at call sites.\n */\nexport async function notifyStorageError(\n  error: AthenaStorageError,\n  options: unknown,\n  runtimeOptions: AthenaStorageErrorRuntimeOptions | undefined\n): Promise<void> {\n  const handlers = [\n    runtimeOptions?.onError,\n    readOnErrorHandler(options),\n  ].filter(\n    (handler): handler is AthenaStorageErrorHandler =>\n      typeof handler === \"function\"\n  );\n  for (const handler of handlers) {\n    try {\n      await handler(error);\n    } catch {\n      // Error observers must not mask the original storage failure.\n    }\n  }\n}\n\nexport async function rejectStorageError(\n  input: AthenaStorageErrorInput,\n  options: unknown,\n  runtimeOptions: AthenaStorageErrorRuntimeOptions | undefined\n): Promise<never> {\n  const error = createAthenaStorageError(input);\n  await notifyStorageError(error, options, runtimeOptions);\n  throw error;\n}\n","/**\n * Admin backup surface exposed under `client.storage.backup.*`.\n *\n * Routes live at `/admin/backups*` (admin / elevated key). Archives land in the\n * server-configured S3 or R2 profile (`ATHENA_BACKUP_S3_*` including provider + account_id).\n *\n * HTTP transport is injected from `module.ts` (`callStorageEndpoint`) so backup\n * failures share real {@link AthenaStorageError}, request ids, and `onError`.\n */\n\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport type { AthenaGatewayMethod } from \"../gateway/types.ts\";\nimport { appendHttpQuery } from \"../http/append-query.ts\";\nimport { createAthenaStorageError } from \"./errors.ts\";\nimport type {\n  AthenaStorageCallOptions,\n  AthenaStorageClientConfig,\n} from \"./module.ts\";\n\nexport type BackupRecoveryStrategy = \"none\" | \"repair_missing_role_oids\";\n\nexport interface StorageBackupRecord {\n  client_name: string;\n  completed_at: string;\n  execution_daemon_id?: string | null;\n  job_id: number;\n  /** Alias of s3_key for convenience */\n  key: string;\n  label?: string | null;\n  s3_bucket: string;\n  s3_key: string;\n  size_bytes: number;\n}\n\nexport interface StorageBackupListPage {\n  backups: StorageBackupRecord[];\n  next_cursor: string | null;\n}\n\nexport interface StorageBackupListQuery {\n  client_name?: string;\n  cursor?: string | null;\n  limit?: number;\n}\n\nexport interface StorageBackupCreateRequest {\n  client_name: string;\n  label?: string;\n  pg_uri?: string;\n  recovery_strategy?: BackupRecoveryStrategy;\n}\n\nexport interface StorageBackupQueuedJob {\n  client_name: string;\n  job_id: number;\n  key?: string;\n  status: string;\n}\n\nexport interface StorageBackupRestoreRequest {\n  client_name: string;\n  pg_uri?: string;\n}\n\nexport interface StorageBackupJob {\n  client_name?: string | null;\n  completed_at?: string | null;\n  created_at?: string;\n  error_message?: string | null;\n  id: number;\n  job_type: string;\n  label?: string | null;\n  progress_pct?: number | null;\n  progress_stage?: string | null;\n  s3_bucket?: string | null;\n  s3_key?: string | null;\n  status: string;\n  updated_at?: string;\n  [key: string]: unknown;\n}\n\nexport interface StorageBackupSchedule {\n  client_name: string;\n  enabled?: boolean;\n  frequency?: string;\n  id: number;\n  label?: string | null;\n  [key: string]: unknown;\n}\n\nexport interface StorageBackupScheduleCreateRequest {\n  client_name: string;\n  day_of_month?: number;\n  day_of_week?: number;\n  enabled?: boolean;\n  execution_daemon_id?: string;\n  frequency: string;\n  label?: string;\n  time_of_day?: string;\n  [key: string]: unknown;\n}\n\nexport interface AthenaStorageBackupNamespace {\n  /** `POST /admin/backups` — queue a backup job */\n  create: (\n    input: StorageBackupCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBackupQueuedJob>;\n  /** `DELETE /admin/backups/{key}` */\n  delete: (key: string, options?: AthenaStorageCallOptions) => Promise<void>;\n  /** Build a browser download URL for `GET /admin/backups/{key}/download` */\n  downloadUrl: (key: string, options?: { apiKey?: string }) => string;\n  jobs: {\n    list: (\n      query?: { limit?: number; status?: string; client_name?: string },\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupJob[]>;\n    get: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupJob>;\n    cancel: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<void>;\n    /** Presigned/console open link for the job archive object (S3 or R2) */\n    openObjectUrl: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<string>;\n  };\n  /** `GET /admin/backups` */\n  list: (\n    query?: StorageBackupListQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBackupListPage>;\n  /** `POST /admin/backups/{key}/restore` */\n  restore: (\n    key: string,\n    input: StorageBackupRestoreRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBackupQueuedJob>;\n  schedules: {\n    list: (\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupSchedule[]>;\n    create: (\n      input: StorageBackupScheduleCreateRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupSchedule>;\n    update: (\n      id: number | string,\n      input: Partial<StorageBackupScheduleCreateRequest>,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupSchedule>;\n    delete: (\n      id: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<void>;\n  };\n}\n\n/**\n * Shared JSON caller injected by `createStorageModule` — typically\n * `callStorageEndpoint` with envelope `\"raw\"`. Avoids a parallel fetch stack\n * and circular imports with `module.ts`.\n */\nexport type StorageBackupJsonCaller = <T>(\n  path: string,\n  method: AthenaGatewayMethod,\n  payload: unknown | undefined,\n  options: AthenaStorageCallOptions | undefined\n) => Promise<T>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction appendQuery(path: string, query?: object): string {\n  return appendHttpQuery(path, query, { skipEmptyString: true });\n}\n\n/** Soft-unwrap Athena `{ data }` envelopes while accepting raw admin payloads. */\nfunction unwrapAthenaData<T>(payload: unknown): T {\n  if (isRecord(payload) && \"data\" in payload) {\n    return payload.data as T;\n  }\n  return payload as T;\n}\n\nfunction requireKey(key: string, method: AthenaGatewayMethod): string {\n  const trimmed = key.trim();\n  if (!trimmed || trimmed === \"undefined\" || trimmed === \"null\") {\n    throw createAthenaStorageError({\n      code: \"HTTP_ERROR\",\n      endpoint: \"/admin/backups/{key}\",\n      message: \"Backup object key is required\",\n      method,\n      status: 400,\n    });\n  }\n  return trimmed;\n}\n\n/**\n * Create the `storage.backup` namespace bound to an Athena gateway client.\n *\n * @param callJson - Shared storage JSON transport (from `callStorageEndpoint`).\n */\nexport function createStorageBackupModule(\n  gateway: AthenaGatewayClient,\n  _runtimeOptions: AthenaStorageClientConfig | undefined,\n  callJson: StorageBackupJsonCaller\n): AthenaStorageBackupNamespace {\n  const resolvedBaseUrl = () =>\n    String(gateway.baseUrl ?? \"\").replace(/\\/+$/, \"\");\n\n  /** Product-level unwrap only — HTTP/error path is the injected shared caller. */\n  async function callAdminJson<T>(\n    path: string,\n    method: AthenaGatewayMethod,\n    payload: unknown | undefined,\n    options: AthenaStorageCallOptions | undefined\n  ): Promise<T> {\n    const parsed = await callJson<unknown>(path, method, payload, options);\n    return unwrapAthenaData<T>(parsed);\n  }\n\n  return {\n    async create(input, options) {\n      const data = await callAdminJson<{\n        job_id?: number;\n        client_name?: string;\n        status?: string;\n      }>(\"/admin/backups\", \"POST\", input, options);\n      return {\n        client_name: String(data?.client_name ?? input.client_name),\n        job_id: Number(data?.job_id ?? 0),\n        status: String(data?.status ?? \"pending\"),\n      };\n    },\n\n    async delete(key, options) {\n      const backupKey = requireKey(key, \"DELETE\");\n      await callAdminJson(\n        `/admin/backups/${encodeURIComponent(backupKey)}`,\n        \"DELETE\",\n        undefined,\n        options\n      );\n    },\n\n    downloadUrl(key, options) {\n      const backupKey = requireKey(key, \"GET\");\n      const base = `${resolvedBaseUrl()}/admin/backups/${encodeURIComponent(backupKey)}/download`;\n      return options?.apiKey\n        ? `${base}?api_key=${encodeURIComponent(options.apiKey)}`\n        : base;\n    },\n\n    jobs: {\n      async cancel(jobId, options) {\n        return callAdminJson(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/cancel`,\n          \"POST\",\n          {},\n          options\n        );\n      },\n      async delete(jobId, options) {\n        await callAdminJson(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n          \"DELETE\",\n          undefined,\n          options\n        );\n      },\n      async get(jobId, options) {\n        return callAdminJson(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n          \"GET\",\n          undefined,\n          options\n        );\n      },\n      async list(query, options) {\n        const path = appendQuery(\"/admin/backups/jobs\", query ?? {});\n        const data = await callAdminJson<\n          StorageBackupJob[] | { jobs?: StorageBackupJob[] }\n        >(path, \"GET\", undefined, options);\n        if (Array.isArray(data)) {\n          return data;\n        }\n        if (isRecord(data) && Array.isArray(data.jobs)) {\n          return data.jobs;\n        }\n        return [];\n      },\n      async openObjectUrl(jobId, options) {\n        const data = await callAdminJson<{ url?: string }>(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/s3-open`,\n          \"GET\",\n          undefined,\n          options\n        );\n        return String(data?.url ?? \"\");\n      },\n    },\n    async list(query, options) {\n      const path = appendQuery(\"/admin/backups\", {\n        client_name: query?.client_name,\n        cursor: query?.cursor ?? undefined,\n        limit: query?.limit ?? 10,\n      });\n      const data = await callAdminJson<{\n        backups?: Array<Omit<StorageBackupRecord, \"key\"> & { key?: string }>;\n        next_cursor?: string | null;\n      }>(path, \"GET\", undefined, options);\n\n      const backups = (data?.backups ?? []).map((row) => ({\n        ...row,\n        key: row.key ?? row.s3_key,\n      }));\n      return {\n        backups,\n        next_cursor: data?.next_cursor ?? null,\n      };\n    },\n\n    async restore(key, input, options) {\n      const backupKey = requireKey(key, \"POST\");\n      const path = `/admin/backups/${encodeURIComponent(backupKey)}/restore`;\n      const data = await callAdminJson<{\n        job_id?: number;\n        key?: string;\n        client_name?: string;\n        status?: string;\n      }>(path, \"POST\", input, options);\n      return {\n        client_name: String(data?.client_name ?? input.client_name),\n        job_id: Number(data?.job_id ?? 0),\n        key: String(data?.key ?? backupKey),\n        status: String(data?.status ?? \"pending\"),\n      };\n    },\n\n    schedules: {\n      async create(input, options) {\n        return callAdminJson(\n          \"/admin/backups/schedules\",\n          \"POST\",\n          input,\n          options\n        );\n      },\n      async delete(id, options) {\n        await callAdminJson(\n          `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n          \"DELETE\",\n          undefined,\n          options\n        );\n      },\n      async list(options) {\n        const data = await callAdminJson<\n          StorageBackupSchedule[] | { schedules?: StorageBackupSchedule[] }\n        >(\"/admin/backups/schedules\", \"GET\", undefined, options);\n        if (Array.isArray(data)) {\n          return data;\n        }\n        if (isRecord(data) && Array.isArray(data.schedules)) {\n          return data.schedules;\n        }\n        return [];\n      },\n      async update(id, input, options) {\n        return callAdminJson(\n          `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n          \"PATCH\",\n          input,\n          options\n        );\n      },\n    },\n  };\n}\n","/**\n * Shared XHR PUT helper for browser uploads (presigned + direct SigV4).\n * Keeps progress/abort/status handling consistent across file and direct-upload.\n */\n\nexport type AthenaStorageXhrPutBody =\n  | Blob\n  | ArrayBuffer\n  | ArrayBufferView\n  | ReadableStream<Uint8Array>\n  | null\n  | undefined;\n\nexport interface AthenaStorageXhrPutOptions {\n  body: AthenaStorageXhrPutBody;\n  /** Final progress loaded value on success (defaults to 0 when unknown). */\n  completeLoaded?: number;\n  headers: Headers | Record<string, string>;\n  onProgress: (progress: { loaded: number }) => void;\n  /** Error message prefix for status/network failures. */\n  operationLabel?: string;\n  signal?: AbortSignal;\n  url: string;\n}\n\ninterface AthenaStorageXhrLike {\n  abort: () => void;\n  getAllResponseHeaders: () => string;\n  onabort: (() => void) | null;\n  onerror: (() => void) | null;\n  onload: (() => void) | null;\n  open: (method: string, url: string) => void;\n  readonly response: unknown;\n  send: (body: unknown) => void;\n  setRequestHeader: (key: string, value: string) => void;\n  readonly status: number;\n  readonly statusText: string;\n  readonly upload: {\n    onprogress: ((event: { loaded: number }) => void) | null;\n  };\n}\n\ndeclare const XMLHttpRequest: (new () => AthenaStorageXhrLike) | undefined;\n\n/**\n * True when the runtime exposes XMLHttpRequest (browsers).\n */\nexport function canUseStorageXhrPut(): boolean {\n  return typeof XMLHttpRequest !== \"undefined\";\n}\n\n/**\n * PUT `body` to `url` with XHR so `upload.onprogress` works.\n * Rejects with AbortError on abort; network/status errors include `operationLabel`.\n */\nexport function putStorageBodyWithXhr(\n  options: AthenaStorageXhrPutOptions\n): Promise<Response> {\n  const label = options.operationLabel ?? \"athena.storage.file.upload\";\n  const Xhr = XMLHttpRequest;\n  if (Xhr === undefined) {\n    return Promise.reject(\n      new Error(`${label} requires XMLHttpRequest in this runtime`)\n    );\n  }\n\n  return new Promise((resolve, reject) => {\n    const xhr = new Xhr();\n    const abort = () => xhr.abort();\n    xhr.open(\"PUT\", options.url);\n    if (options.headers instanceof Headers) {\n      options.headers.forEach((value, key) => {\n        xhr.setRequestHeader(key, value);\n      });\n    } else {\n      for (const [key, value] of Object.entries(options.headers)) {\n        xhr.setRequestHeader(key, value);\n      }\n    }\n    xhr.upload.onprogress = (event) => {\n      options.onProgress({ loaded: event.loaded });\n    };\n    xhr.onload = () => {\n      options.signal?.removeEventListener(\"abort\", abort);\n      if (xhr.status < 200 || xhr.status >= 300) {\n        reject(new Error(`${label} failed with status ${xhr.status}`));\n        return;\n      }\n      options.onProgress({\n        loaded: options.completeLoaded ?? 0,\n      });\n      resolve(\n        new Response(\n          xhr.response as ConstructorParameters<typeof Response>[0],\n          {\n            headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n            status: xhr.status,\n            statusText: xhr.statusText,\n          }\n        )\n      );\n    };\n    xhr.onerror = () => {\n      options.signal?.removeEventListener(\"abort\", abort);\n      reject(new Error(`${label} failed with a network error`));\n    };\n    xhr.onabort = () => {\n      options.signal?.removeEventListener(\"abort\", abort);\n      reject(new DOMException(\"Upload aborted\", \"AbortError\"));\n    };\n    if (options.signal) {\n      if (options.signal.aborted) {\n        abort();\n        return;\n      }\n      options.signal.addEventListener(\"abort\", abort, { once: true });\n    }\n    xhr.send(options.body);\n  });\n}\n\n/**\n * Parse `XMLHttpRequest#getAllResponseHeaders()` into a Headers object.\n */\nexport function parseXhrHeaders(rawHeaders: string): Headers {\n  const headers = new Headers();\n  for (const line of rawHeaders.trim().split(/[\\r\\n]+/)) {\n    const index = line.indexOf(\":\");\n    if (index === -1) {\n      continue;\n    }\n    headers.set(line.slice(0, index).trim(), line.slice(index + 1).trim());\n  }\n  return headers;\n}\n","import type {\n  AthenaStorageDirectUploadConfig,\n  AthenaStoragePutBody,\n} from \"./module.ts\";\nimport { canUseStorageXhrPut, putStorageBodyWithXhr } from \"./xhr-put.ts\";\n\ninterface DirectUploadProgress {\n  loaded: number;\n}\n\nconst SERVICE = \"s3\";\nconst TERMINATOR = \"aws4_request\";\n\nexport async function putDirectStorageUploadBody(\n  config: AthenaStorageDirectUploadConfig,\n  bucket: string | undefined,\n  storageKey: string,\n  body: AthenaStoragePutBody,\n  uploadHeaders: Record<string, string>,\n  signal: AbortSignal | undefined,\n  onProgress: (progress: DirectUploadProgress) => void\n): Promise<Response> {\n  if (config.bucket && bucket && config.bucket !== bucket) {\n    throw new Error(\n      `athena.storage.file.upload direct mode bucket mismatch: configured ${config.bucket} but Athena returned ${bucket}`\n    );\n  }\n  const target = createDirectUploadTarget(config, bucket, storageKey);\n  const bytes = await bodyToArrayBuffer(body);\n  const payloadHash = await sha256Hex(bytes);\n  const headers = new Headers(uploadHeaders);\n  if (isBlobBody(body) && body.type && !headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", body.type);\n  }\n\n  const signed = await signDirectUploadRequest(\n    config,\n    target,\n    headers,\n    payloadHash\n  );\n  if (canUseStorageXhrPut()) {\n    return putStorageBodyWithXhr({\n      body,\n      completeLoaded: bodySize(body),\n      headers: signed.requestHeaders,\n      onProgress,\n      operationLabel: \"athena.storage.file.upload\",\n      signal,\n      url: target.toString(),\n    });\n  }\n\n  onProgress({ loaded: 0 });\n  const response = await fetch(target, {\n    body: body as RequestInit[\"body\"],\n    headers: signed.requestHeaders,\n    method: \"PUT\",\n    signal,\n  });\n  if (!response.ok) {\n    throw new Error(\n      `athena.storage.file.upload failed with status ${response.status}`\n    );\n  }\n  onProgress({ loaded: bytes.byteLength });\n  return response;\n}\n\nfunction createDirectUploadTarget(\n  config: AthenaStorageDirectUploadConfig,\n  bucket: string | undefined,\n  storageKey: string\n): URL {\n  const resolvedBucket = config.bucket ?? bucket;\n  if (!resolvedBucket?.trim()) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode requires a bucket in storage.directUpload or the server upload response\"\n    );\n  }\n  if (!storageKey.trim()) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode requires a storage key\"\n    );\n  }\n\n  let endpoint: URL;\n  try {\n    endpoint = new URL(config.endpoint);\n  } catch (error) {\n    throw new Error(\n      `athena.storage.file.upload direct mode received an invalid endpoint: ${error instanceof Error ? error.message : String(error)}`,\n      { cause: error }\n    );\n  }\n  if (endpoint.search || endpoint.hash) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode endpoint must not contain a query or hash\"\n    );\n  }\n\n  const endpointPath = endpoint.pathname.replace(/\\/+$/, \"\");\n  const pathParts =\n    config.forcePathStyle === false\n      ? [endpointPath, storageKey]\n      : [endpointPath, resolvedBucket, storageKey];\n  if (config.forcePathStyle === false) {\n    endpoint.hostname = `${resolvedBucket}.${endpoint.hostname}`;\n  }\n  endpoint.pathname = pathParts\n    .filter(Boolean)\n    .flatMap((part) => part.split(\"/\"))\n    .map(awsEncode)\n    .join(\"/\")\n    .replace(/^([^/])/, \"/$1\");\n  return endpoint;\n}\n\nasync function signDirectUploadRequest(\n  config: AthenaStorageDirectUploadConfig,\n  target: URL,\n  inputHeaders: Headers,\n  payloadHash: string\n): Promise<{ requestHeaders: Record<string, string> }> {\n  const accessKeyId = config.accessKeyId.trim();\n  const secretAccessKey = config.secretAccessKey.trim();\n  if (!(accessKeyId && secretAccessKey)) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode requires accessKeyId and secretAccessKey\"\n    );\n  }\n\n  const now = new Date();\n  const amzDate = formatAmzDate(now);\n  const shortDate = amzDate.slice(0, 8);\n  const region = config.region?.trim() || \"auto\";\n  const headers: Record<string, string> = {};\n  inputHeaders.forEach((value, key) => {\n    if (key.toLowerCase() !== \"authorization\" && key.toLowerCase() !== \"host\") {\n      headers[key.toLowerCase()] = value.trim().replace(/\\s+/g, \" \");\n    }\n  });\n  headers[\"x-amz-content-sha256\"] = payloadHash;\n  headers[\"x-amz-date\"] = amzDate;\n  if (config.sessionToken?.trim()) {\n    headers[\"x-amz-security-token\"] = config.sessionToken.trim();\n  }\n\n  const canonicalHeaders = Object.keys(headers)\n    .sort()\n    .map((key) => `${key}:${headers[key]}\\n`)\n    .join(\"\");\n  const signedHeaders = Object.keys(headers).sort().join(\";\");\n  const canonicalRequest = [\n    \"PUT\",\n    target.pathname,\n    \"\",\n    `host:${target.host}\\n${canonicalHeaders}`,\n    `host;${signedHeaders}`,\n    payloadHash,\n  ].join(\"\\n\");\n  const credentialScope = `${shortDate}/${region}/${SERVICE}/${TERMINATOR}`;\n  const stringToSign = [\n    \"AWS4-HMAC-SHA256\",\n    amzDate,\n    credentialScope,\n    await sha256Hex(canonicalRequest),\n  ].join(\"\\n\");\n  const dateKey = await hmac(`AWS4${secretAccessKey}`, shortDate);\n  const regionKey = await hmac(dateKey, region);\n  const serviceKey = await hmac(regionKey, SERVICE);\n  const signingKey = await hmac(serviceKey, TERMINATOR);\n  const signature = await hmacHex(signingKey, stringToSign);\n  headers.authorization = `AWS4-HMAC-SHA256 Credential=${accessKeyId}/${credentialScope}, SignedHeaders=host;${signedHeaders}, Signature=${signature}`;\n\n  return { requestHeaders: headers };\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n  return typeof Blob !== \"undefined\" && body instanceof Blob;\n}\n\nasync function bodyToArrayBuffer(\n  body: AthenaStoragePutBody\n): Promise<ArrayBuffer> {\n  if (isBlobBody(body)) {\n    return body.arrayBuffer();\n  }\n  if (body instanceof ArrayBuffer) {\n    return body;\n  }\n  if (ArrayBuffer.isView(body)) {\n    return body.buffer.slice(\n      body.byteOffset,\n      body.byteOffset + body.byteLength\n    ) as ArrayBuffer;\n  }\n  throw new Error(\n    \"athena.storage.file.upload direct mode does not support ReadableStream bodies\"\n  );\n}\n\nfunction bodySize(body: AthenaStoragePutBody): number {\n  if (isBlobBody(body)) {\n    return body.size;\n  }\n  if (body instanceof ArrayBuffer) {\n    return body.byteLength;\n  }\n  if (ArrayBuffer.isView(body)) {\n    return body.byteLength;\n  }\n  return 0;\n}\n\nfunction awsEncode(value: string): string {\n  return encodeURIComponent(value).replace(\n    /[!'()*]/g,\n    (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`\n  );\n}\n\nfunction formatAmzDate(date: Date): string {\n  return date.toISOString().replace(/[:-]|\\.\\d{3}/g, \"\");\n}\n\nasync function sha256Hex(value: string | ArrayBuffer): Promise<string> {\n  const bytes =\n    typeof value === \"string\" ? new TextEncoder().encode(value) : value;\n  const digest = await crypto.subtle.digest(\"SHA-256\", bytes);\n  return toHex(new Uint8Array(digest));\n}\n\nasync function hmac(\n  key: string | ArrayBuffer,\n  value: string\n): Promise<ArrayBuffer> {\n  const keyBytes =\n    typeof key === \"string\" ? new TextEncoder().encode(key) : key;\n  const cryptoKey = await crypto.subtle.importKey(\n    \"raw\",\n    keyBytes,\n    { hash: \"SHA-256\", name: \"HMAC\" },\n    false,\n    [\"sign\"]\n  );\n  return crypto.subtle.sign(\"HMAC\", cryptoKey, new TextEncoder().encode(value));\n}\n\nasync function hmacHex(key: ArrayBuffer, value: string): Promise<string> {\n  return toHex(new Uint8Array(await hmac(key, value)));\n}\n\nfunction toHex(bytes: Uint8Array): string {\n  return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\n    \"\"\n  );\n}\n","import { putDirectStorageUploadBody } from \"./direct-upload.ts\";\nimport type {\n  AthenaStorageBinaryCallOptions,\n  AthenaStorageCallOptions,\n  AthenaStorageDirectUploadConfig,\n  CreateStorageUploadUrlRequest,\n  GetStorageFileUrlQuery,\n  ListStorageFilesRequest,\n  ManagedFileRecord,\n  StorageBatchUploadUrlResponse,\n  StorageFileMutationResponse,\n  StorageListFilesResponse,\n  StorageMultipartAbortRequest,\n  StorageMultipartCompleteRequest,\n  StorageMultipartCreateRequest,\n  StorageMultipartSignPartRequest,\n  StorageServerSideEncryptionOptions,\n  StorageUploadUrlResponse,\n} from \"./module.ts\";\nimport {\n  type AthenaStorageXhrPutBody,\n  canUseStorageXhrPut,\n  putStorageBodyWithXhr,\n} from \"./xhr-put.ts\";\n\n/** Files at or above this size use multipart unless `forceSinglePut` is set. */\nexport const DEFAULT_MULTIPART_THRESHOLD_BYTES = 32 * 1024 * 1024;\n/** Chunk size for multipart uploads (S3 requires >= 5 MiB except the last part). */\nexport const DEFAULT_MULTIPART_PART_SIZE_BYTES = 8 * 1024 * 1024;\nconst MIN_MULTIPART_PART_SIZE_BYTES = 5 * 1024 * 1024;\n\nexport type AthenaStorageTemplateValue =\n  | string\n  | number\n  | boolean\n  | null\n  | undefined;\nexport type AthenaStorageTemplateVars = Record<\n  string,\n  AthenaStorageTemplateValue\n>;\nexport type AthenaStorageEnv = Record<string, string | undefined>;\nexport type AthenaStorageUploadHeaders = ConstructorParameters<\n  typeof Headers\n>[0];\nexport type AthenaStoragePrefixPath =\n  | string\n  | ((context: AthenaStoragePathContext) => string | null | undefined);\n\nexport interface AthenaStoragePathContext {\n  env: AthenaStorageEnv;\n  organization_id?: string;\n  organizationId?: string;\n  resource_id?: string;\n  resourceId?: string;\n  user_id?: string;\n  userId?: string;\n  vars: AthenaStorageTemplateVars;\n}\n\nexport interface AthenaStorageFileConfig {\n  directUpload?: AthenaStorageDirectUploadConfig;\n  env?: AthenaStorageEnv;\n  /**\n   * Prefix applied by high-level file helpers before storage keys are sent to Athena.\n   * Supports tokens such as `{organization_id}`, `{organizationId}`, `{env.NODE_ENV}`,\n   * and `${ATHENA_STORAGE_PREFIX}`.\n   */\n  prefixPath?: AthenaStoragePrefixPath;\n  vars?: AthenaStorageTemplateVars;\n}\n\nexport type AthenaStorageUploadSource = Blob | ArrayBuffer | Uint8Array;\n\nexport interface AthenaStorageUploadConstraints {\n  allowedExtensions?: readonly string[];\n  extensions?: readonly string[];\n  maxFileSizeBytes?: number;\n  maxFileSizeMb?: number;\n  maxFiles?: number;\n}\n\nexport interface AthenaStorageUploadProgress {\n  aggregateLoaded: number;\n  aggregatePercent: number;\n  aggregateTotal: number;\n  fileCount: number;\n  fileIndex: number;\n  fileName: string;\n  loaded: number;\n  /** Present when the active file is uploading via multipart. */\n  multipart?: {\n    uploadId: string;\n    partNumber: number;\n    partCount: number;\n  };\n  percent: number;\n  phase: \"preparing\" | \"uploading\" | \"complete\";\n  total: number;\n}\n\nexport type AthenaStorageUploadProgressHandler = (\n  progress: AthenaStorageUploadProgress\n) => void;\n\nexport interface AthenaStorageFileUploadInput\n  extends AthenaStorageUploadConstraints,\n    StorageServerSideEncryptionOptions {\n  bucket?: string;\n  content_type?: string;\n  env?: AthenaStorageEnv;\n  fileName?: string;\n  files:\n    | AthenaStorageUploadSource\n    | ArrayLike<AthenaStorageUploadSource>\n    | readonly AthenaStorageUploadSource[];\n  /** Always use multipart even when the file is below the threshold. */\n  forceMultipart?: boolean;\n  /** Always use a single PUT even when the file exceeds the multipart threshold. */\n  forceSinglePut?: boolean;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  /** Override multipart chunk size (default 8 MiB, minimum 5 MiB). */\n  multipartPartSizeBytes?: number;\n  /** Override auto-multipart threshold (default 32 MiB). */\n  multipartThresholdBytes?: number;\n  name?: string;\n  onProgress?: AthenaStorageUploadProgressHandler;\n  organization_id?: string;\n  organizationId?: string;\n  original_name?: string;\n  prefixPath?: AthenaStoragePrefixPath;\n  public?: boolean;\n  resource_id?: string;\n  resourceId?: string;\n  s3_id?: string;\n  storage_key?: string;\n  storageKey?: string;\n  storageKeyTemplate?: string;\n  uploadHeaders?: AthenaStorageUploadHeaders;\n  user_id?: string;\n  userId?: string;\n  vars?: AthenaStorageTemplateVars;\n}\n\nexport interface AthenaStorageUploadedFile {\n  file: ManagedFileRecord;\n  fileName: string;\n  response: Response;\n  source: AthenaStorageUploadSource;\n  storage_key: string;\n  upload: StorageUploadUrlResponse[\"upload\"];\n}\n\nexport interface AthenaStorageFileUploadResult {\n  count: number;\n  files: AthenaStorageUploadedFile[];\n}\n\nexport interface AthenaStorageFileListInput\n  extends Omit<ListStorageFilesRequest, \"prefix\"> {\n  env?: AthenaStorageEnv;\n  organization_id?: string;\n  organizationId?: string;\n  prefix?: string;\n  prefixPath?: AthenaStoragePrefixPath;\n  resource_id?: string;\n  resourceId?: string;\n  user_id?: string;\n  userId?: string;\n  vars?: AthenaStorageTemplateVars;\n}\n\nexport interface AthenaStorageFileDownloadInput extends GetStorageFileUrlQuery {\n  fileId?: string;\n  fileIds?: readonly string[];\n}\n\nexport type AthenaStorageFileDeleteInput = string | readonly string[];\n\nexport interface AthenaStorageFileModule {\n  delete(\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageFileMutationResponse>;\n  delete(\n    fileIds: readonly string[],\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageFileMutationResponse[]>;\n  download(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ): Promise<Response>;\n  download(\n    fileIds: readonly string[],\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ): Promise<Response[]>;\n  download(\n    input: AthenaStorageFileDownloadInput,\n    options?: AthenaStorageBinaryCallOptions\n  ): Promise<Response | Response[]>;\n  list: (\n    input: AthenaStorageFileListInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n  upload: (\n    input: AthenaStorageFileUploadInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<AthenaStorageFileUploadResult>;\n  uploadMultipart: (\n    input: AthenaStorageFileUploadInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<AthenaStorageFileUploadResult>;\n}\n\nexport interface AthenaStorageFileBaseModule {\n  createStorageUploadUrl: (\n    input: CreateStorageUploadUrlRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageUploadUrlResponse>;\n  createStorageUploadUrls: (\n    input: { files: CreateStorageUploadUrlRequest[] },\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBatchUploadUrlResponse>;\n  deleteStorageFile: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  getStorageFileProxy: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ) => Promise<Response>;\n  listStorageFiles: (\n    input: ListStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n}\n\nexport interface AthenaStorageMultipartClient {\n  abort: (\n    input: StorageMultipartAbortRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  complete: (\n    input: StorageMultipartCompleteRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  create: (\n    input: StorageMultipartCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  signPart: (\n    input: StorageMultipartSignPartRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\ninterface NormalizedUploadSource {\n  contentType?: string;\n  fileName: string;\n  sizeBytes: number;\n  source: AthenaStorageUploadSource;\n}\n\ninterface ResolvedUploadRequest {\n  source: NormalizedUploadSource;\n  uploadRequest: CreateStorageUploadUrlRequest;\n}\n\nfunction mergeUploadHeaders(\n  serverHeaders: Record<string, string>,\n  inputHeaders: AthenaStorageUploadHeaders | undefined\n): Record<string, string> {\n  const headers: Record<string, string> = { ...serverHeaders };\n  new Headers(inputHeaders).forEach((value, key) => {\n    headers[key] = value;\n  });\n  return headers;\n}\n\nexport function createStorageFileModule(\n  base: AthenaStorageFileBaseModule,\n  config: AthenaStorageFileConfig = {},\n  multipart?: AthenaStorageMultipartClient\n): AthenaStorageFileModule {\n  const uploadSinglePut = async (\n    input: AthenaStorageFileUploadInput,\n    sources: NormalizedUploadSource[],\n    options?: AthenaStorageCallOptions\n  ): Promise<AthenaStorageFileUploadResult> => {\n    const uploadRequests = sources.map(\n      (source, index): ResolvedUploadRequest => {\n        const storageKey = resolveUploadStorageKey(\n          input,\n          source,\n          index,\n          options,\n          config\n        );\n        return {\n          source,\n          uploadRequest: {\n            bucket: input.bucket,\n            bucket_key_enabled: input.bucket_key_enabled,\n            content_type: input.content_type ?? source.contentType,\n            kms_key_id: input.kms_key_id,\n            metadata: input.metadata,\n            mime_type: input.mime_type ?? source.contentType,\n            name: input.name ?? source.fileName,\n            original_name: input.original_name ?? source.fileName,\n            public: input.public,\n            resource_id: input.resource_id ?? input.resourceId,\n            s3_id: input.s3_id ?? \"\",\n            server_side_encryption: input.server_side_encryption,\n            size_bytes: source.sizeBytes,\n            sse: input.sse,\n            ssekms_key_id: input.ssekms_key_id,\n            storage_key: storageKey,\n          },\n        };\n      }\n    );\n\n    input.onProgress?.(createProgressSnapshot(\"preparing\", sources, 0, 0, 0));\n\n    const uploadUrls =\n      uploadRequests.length === 1\n        ? [\n            await base.createStorageUploadUrl(\n              uploadRequests[0].uploadRequest,\n              options\n            ),\n          ]\n        : (\n            await base.createStorageUploadUrls(\n              { files: uploadRequests.map((request) => request.uploadRequest) },\n              options\n            )\n          ).files;\n\n    const aggregateLoaded = new Array(uploadRequests.length).fill(\n      0\n    ) as number[];\n    const uploaded: AthenaStorageUploadedFile[] = [];\n\n    for (let index = 0; index < uploadRequests.length; index += 1) {\n      const request = uploadRequests[index];\n      const uploadUrl = uploadUrls[index];\n      const aggregateProgress = (progress: { loaded: number }) => {\n        aggregateLoaded[index] = progress.loaded;\n        input.onProgress?.(\n          createProgressSnapshot(\n            \"uploading\",\n            sources,\n            index,\n            progress.loaded,\n            sum(aggregateLoaded)\n          )\n        );\n      };\n      const response = config.directUpload\n        ? await putDirectStorageUploadBody(\n            config.directUpload,\n            uploadUrl.upload.bucket,\n            uploadUrl.upload.storage_key,\n            request.source.source,\n            mergeUploadHeaders(\n              uploadUrl.upload.headers ?? {},\n              input.uploadHeaders\n            ),\n            options?.signal,\n            aggregateProgress\n          )\n        : await putUploadBody(\n            uploadUrl.upload.url,\n            uploadUrl.upload.headers ?? {},\n            request.source,\n            input,\n            options,\n            aggregateProgress\n          );\n      uploaded.push({\n        file: uploadUrl.file,\n        fileName: request.source.fileName,\n        response,\n        source: request.source.source,\n        storage_key: request.uploadRequest.storage_key,\n        upload: uploadUrl.upload,\n      });\n      aggregateLoaded[index] = request.source.sizeBytes;\n      input.onProgress?.(\n        createProgressSnapshot(\n          \"complete\",\n          sources,\n          index,\n          request.source.sizeBytes,\n          sum(aggregateLoaded)\n        )\n      );\n    }\n\n    return {\n      count: uploaded.length,\n      files: uploaded,\n    };\n  };\n\n  const uploadMultipart: AthenaStorageFileModule[\"uploadMultipart\"] = async (\n    input,\n    options\n  ) => {\n    if (!multipart) {\n      throw new Error(\n        \"athena.storage.file.uploadMultipart requires the multipart namespace\"\n      );\n    }\n    const sources = normalizeUploadSources(input);\n    validateUploadConstraints(sources, input);\n    const partSize = Math.max(\n      input.multipartPartSizeBytes ?? DEFAULT_MULTIPART_PART_SIZE_BYTES,\n      MIN_MULTIPART_PART_SIZE_BYTES\n    );\n\n    input.onProgress?.(createProgressSnapshot(\"preparing\", sources, 0, 0, 0));\n\n    const aggregateLoaded = new Array(sources.length).fill(0) as number[];\n    const uploaded: AthenaStorageUploadedFile[] = [];\n\n    for (let index = 0; index < sources.length; index += 1) {\n      const source = sources[index];\n      const storageKey = resolveUploadStorageKey(\n        input,\n        source,\n        index,\n        options,\n        config\n      );\n      const uploadUrl = await base.createStorageUploadUrl(\n        {\n          bucket: input.bucket,\n          bucket_key_enabled: input.bucket_key_enabled,\n          content_type: input.content_type ?? source.contentType,\n          kms_key_id: input.kms_key_id,\n          metadata: input.metadata,\n          mime_type: input.mime_type ?? source.contentType,\n          name: input.name ?? source.fileName,\n          original_name: input.original_name ?? source.fileName,\n          public: input.public,\n          resource_id: input.resource_id ?? input.resourceId,\n          s3_id: input.s3_id ?? \"\",\n          server_side_encryption: input.server_side_encryption,\n          size_bytes: source.sizeBytes,\n          sse: input.sse,\n          ssekms_key_id: input.ssekms_key_id,\n          storage_key: storageKey,\n        },\n        options\n      );\n\n      const fileId = uploadUrl.file.id;\n      let uploadId = \"\";\n      try {\n        const created = await multipart.create(\n          {\n            bucket_key_enabled: input.bucket_key_enabled,\n            content_type: input.content_type ?? source.contentType,\n            file_id: fileId,\n            kms_key_id: input.kms_key_id,\n            server_side_encryption: input.server_side_encryption,\n            sse: input.sse,\n            ssekms_key_id: input.ssekms_key_id,\n          },\n          options\n        );\n        uploadId = readStringField(created, [\"upload_id\", \"uploadId\"]);\n        if (!uploadId) {\n          throw new Error(\n            \"athena.storage.file.uploadMultipart did not receive an upload_id\"\n          );\n        }\n\n        const partCount = Math.max(1, Math.ceil(source.sizeBytes / partSize));\n        const completedParts: Array<{ part_number: number; etag: string }> = [];\n        let fileLoaded = 0;\n\n        for (let partNumber = 1; partNumber <= partCount; partNumber += 1) {\n          const start = (partNumber - 1) * partSize;\n          const end = Math.min(start + partSize, source.sizeBytes);\n          const chunk = sliceUploadSource(source.source, start, end);\n          const signed = await multipart.signPart(\n            {\n              file_id: fileId,\n              part_number: partNumber,\n              upload_id: uploadId,\n            },\n            options\n          );\n          const partUrl = readStringField(signed, [\"url\"]);\n          if (!partUrl) {\n            throw new Error(\n              `athena.storage.file.uploadMultipart missing part URL for part ${partNumber}`\n            );\n          }\n          const partHeaders = readHeadersField(signed);\n          const response = await putUploadBody(\n            partUrl,\n            partHeaders,\n            {\n              contentType: source.contentType,\n              fileName: source.fileName,\n              sizeBytes: end - start,\n              source: chunk,\n            },\n            input,\n            options,\n            (progress) => {\n              const loaded = fileLoaded + progress.loaded;\n              aggregateLoaded[index] = loaded;\n              input.onProgress?.(\n                createProgressSnapshot(\n                  \"uploading\",\n                  sources,\n                  index,\n                  loaded,\n                  sum(aggregateLoaded),\n                  {\n                    partCount,\n                    partNumber,\n                    uploadId,\n                  }\n                )\n              );\n            }\n          );\n          const etag = extractEtag(response);\n          if (!etag) {\n            throw new Error(\n              `athena.storage.file.uploadMultipart missing ETag for part ${partNumber}`\n            );\n          }\n          completedParts.push({ etag, part_number: partNumber });\n          fileLoaded = end;\n          aggregateLoaded[index] = fileLoaded;\n          input.onProgress?.(\n            createProgressSnapshot(\n              \"uploading\",\n              sources,\n              index,\n              fileLoaded,\n              sum(aggregateLoaded),\n              {\n                partCount,\n                partNumber,\n                uploadId,\n              }\n            )\n          );\n        }\n\n        const completed = await multipart.complete(\n          {\n            file_id: fileId,\n            parts: completedParts,\n            upload_id: uploadId,\n          },\n          options\n        );\n\n        uploaded.push({\n          file: completed.file ?? uploadUrl.file,\n          fileName: source.fileName,\n          response: new Response(null, { status: 200 }),\n          source: source.source,\n          storage_key: storageKey,\n          upload: uploadUrl.upload,\n        });\n        aggregateLoaded[index] = source.sizeBytes;\n        input.onProgress?.(\n          createProgressSnapshot(\n            \"complete\",\n            sources,\n            index,\n            source.sizeBytes,\n            sum(aggregateLoaded),\n            {\n              partCount,\n              partNumber: partCount,\n              uploadId,\n            }\n          )\n        );\n      } catch (error) {\n        if (uploadId) {\n          try {\n            await multipart.abort(\n              { file_id: fileId, upload_id: uploadId },\n              options\n            );\n          } catch {\n            // Best-effort abort; surface the original upload error.\n          }\n        }\n        throw error;\n      }\n    }\n\n    return {\n      count: uploaded.length,\n      files: uploaded,\n    };\n  };\n\n  const upload: AthenaStorageFileModule[\"upload\"] = async (input, options) => {\n    const sources = normalizeUploadSources(input);\n    validateUploadConstraints(sources, input);\n\n    const threshold =\n      input.multipartThresholdBytes ?? DEFAULT_MULTIPART_THRESHOLD_BYTES;\n    const useMultipart =\n      Boolean(multipart) &&\n      !input.forceSinglePut &&\n      !config.directUpload &&\n      (input.forceMultipart ||\n        sources.some((source) => source.sizeBytes >= threshold));\n\n    if (useMultipart) {\n      const multipartSources = sources.filter(\n        (source) => input.forceMultipart || source.sizeBytes >= threshold\n      );\n      const singleSources = sources.filter(\n        (source) => !(input.forceMultipart || source.sizeBytes >= threshold)\n      );\n\n      if (multipartSources.length === sources.length) {\n        return uploadMultipart(input, options);\n      }\n\n      // Mixed batch: upload large files via multipart, small via single PUT.\n      const multipartResult =\n        multipartSources.length > 0\n          ? await uploadMultipart(\n              {\n                ...input,\n                files: multipartSources.map((source) => source.source),\n                maxFiles: multipartSources.length,\n              },\n              options\n            )\n          : { count: 0, files: [] };\n      const singleResult =\n        singleSources.length > 0\n          ? await uploadSinglePut(\n              {\n                ...input,\n                files: singleSources.map((source) => source.source),\n                maxFiles: singleSources.length,\n              },\n              singleSources,\n              options\n            )\n          : { count: 0, files: [] };\n      const files = [...multipartResult.files, ...singleResult.files];\n      return { count: files.length, files };\n    }\n\n    return uploadSinglePut(input, sources, options);\n  };\n\n  const download = ((\n    input: string | readonly string[] | AthenaStorageFileDownloadInput,\n    queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n    maybeOptions?: AthenaStorageBinaryCallOptions\n  ): Promise<Response | Response[]> => {\n    const { fileIds, query, options } = normalizeDownloadArgs(\n      input,\n      queryOrOptions,\n      maybeOptions\n    );\n    const downloads = fileIds.map((fileId) =>\n      base.getStorageFileProxy(fileId, query, options)\n    );\n    return Array.isArray(input) ||\n      (isRecord(input) && Array.isArray(input.fileIds))\n      ? Promise.all(downloads)\n      : downloads[0];\n  }) as AthenaStorageFileModule[\"download\"];\n\n  const deleteFile = ((\n    input: string | readonly string[],\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageFileMutationResponse | StorageFileMutationResponse[]> => {\n    if (Array.isArray(input)) {\n      return Promise.all(\n        input.map((fileId) => base.deleteStorageFile(fileId, options))\n      );\n    }\n    return base.deleteStorageFile(input as string, options);\n  }) as AthenaStorageFileModule[\"delete\"];\n\n  return {\n    delete: deleteFile,\n    download,\n\n    list(input, options) {\n      const prefix = resolveStoragePath(\n        input.prefix ?? \"\",\n        input,\n        options,\n        config\n      );\n      // Strip path-templating helpers; forward every ListStorageFilesRequest field.\n      const {\n        env: _env,\n        organization_id: _organization_id,\n        organizationId: _organizationId,\n        prefix: _prefix,\n        prefixPath: _prefixPath,\n        resourceId: _resourceId,\n        user_id: _user_id,\n        userId: _userId,\n        vars: _vars,\n        ...listRequest\n      } = input;\n      return base.listStorageFiles(\n        {\n          ...listRequest,\n          prefix,\n          s3_id: input.s3_id ?? \"\",\n        },\n        options\n      );\n    },\n    upload,\n    uploadMultipart,\n  };\n}\n\nexport function resolveStoragePath(\n  path: string,\n  input: {\n    prefixPath?: AthenaStoragePrefixPath;\n    vars?: AthenaStorageTemplateVars;\n    env?: AthenaStorageEnv;\n    organization_id?: string;\n    organizationId?: string;\n    user_id?: string;\n    userId?: string;\n    resource_id?: string;\n    resourceId?: string;\n  },\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig = {}\n): string {\n  const context = createPathContext(input, options, config);\n  const prefixPath = input.prefixPath ?? config.prefixPath;\n  const prefix =\n    typeof prefixPath === \"function\" ? prefixPath(context) : prefixPath;\n  return joinStoragePath(\n    renderStorageTemplate(prefix ?? \"\", context),\n    renderStorageTemplate(path, context)\n  );\n}\n\nfunction resolveUploadStorageKey(\n  input: AthenaStorageFileUploadInput,\n  source: NormalizedUploadSource,\n  index: number,\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig\n): string {\n  const explicitKey = input.storage_key ?? input.storageKey;\n  const keyTemplate = input.storageKeyTemplate;\n  const fallbackName = source.fileName;\n  const context = createPathContext(input, options, config);\n  const key = keyTemplate\n    ? renderStorageTemplate(keyTemplate, {\n        ...context,\n        vars: {\n          ...context.vars,\n          fileName: source.fileName,\n          index,\n          name: source.fileName,\n        },\n      })\n    : (explicitKey ?? fallbackName);\n  return resolveStoragePath(key, input, options, config);\n}\n\nfunction normalizeUploadSources(\n  input: AthenaStorageFileUploadInput\n): NormalizedUploadSource[] {\n  const files = toArray(input.files);\n  if (files.length === 0) {\n    throw new Error(\"athena.storage.file.upload requires at least one file\");\n  }\n  return files.map((source, index) => {\n    const fileName =\n      input.fileName ?? sourceName(source) ?? `file-${index + 1}`;\n    const sizeBytes = sourceSize(source);\n    const contentType =\n      input.content_type ?? input.mime_type ?? sourceContentType(source);\n    return {\n      contentType,\n      fileName,\n      sizeBytes,\n      source,\n    };\n  });\n}\n\nfunction validateUploadConstraints(\n  sources: readonly NormalizedUploadSource[],\n  input: AthenaStorageFileUploadInput\n): void {\n  const maxFiles = input.maxFiles ?? 1;\n  if (sources.length > maxFiles) {\n    throw new Error(\n      `athena.storage.file.upload accepts at most ${maxFiles} file${maxFiles === 1 ? \"\" : \"s\"} for this call`\n    );\n  }\n\n  const maxFileSizeBytes =\n    input.maxFileSizeBytes ??\n    (input.maxFileSizeMb === undefined\n      ? undefined\n      : Math.floor(input.maxFileSizeMb * 1024 * 1024));\n  if (maxFileSizeBytes !== undefined) {\n    const tooLarge = sources.find(\n      (source) => source.sizeBytes > maxFileSizeBytes\n    );\n    if (tooLarge) {\n      throw new Error(\n        `athena.storage.file.upload rejected ${tooLarge.fileName}: file exceeds ${maxFileSizeBytes} bytes`\n      );\n    }\n  }\n\n  const allowedExtensions = normalizeExtensions(\n    input.allowedExtensions ?? input.extensions\n  );\n  if (allowedExtensions.size > 0) {\n    const invalid = sources.find(\n      (source) => !allowedExtensions.has(fileExtension(source.fileName))\n    );\n    if (invalid) {\n      throw new Error(\n        `athena.storage.file.upload rejected ${invalid.fileName}: extension is not allowed`\n      );\n    }\n  }\n}\n\nasync function putUploadBody(\n  url: string,\n  uploadHeaders: Record<string, string>,\n  source: NormalizedUploadSource,\n  input: AthenaStorageFileUploadInput,\n  options: AthenaStorageCallOptions | undefined,\n  onProgress: (progress: { loaded: number }) => void\n): Promise<Response> {\n  const headers = new Headers(uploadHeaders);\n  new Headers(input.uploadHeaders).forEach((value, key) => {\n    headers.set(key, value);\n  });\n  if (source.contentType && !headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", source.contentType);\n  }\n  if (canUseStorageXhrPut()) {\n    return putStorageBodyWithXhr({\n      body: source.source as AthenaStorageXhrPutBody,\n      completeLoaded: source.sizeBytes,\n      headers,\n      onProgress,\n      operationLabel: \"athena.storage.file.upload\",\n      signal: options?.signal,\n      url,\n    });\n  }\n  onProgress({ loaded: 0 });\n  const response = await fetch(url, {\n    body: source.source as RequestInit[\"body\"],\n    headers,\n    method: \"PUT\",\n    signal: options?.signal,\n  });\n  if (!response.ok) {\n    throw new Error(\n      `athena.storage.file.upload failed with status ${response.status}`\n    );\n  }\n  onProgress({ loaded: source.sizeBytes });\n  return response;\n}\n\nfunction normalizeDownloadArgs(\n  input: string | readonly string[] | AthenaStorageFileDownloadInput,\n  queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n  maybeOptions?: AthenaStorageBinaryCallOptions\n): {\n  fileIds: string[];\n  query?: GetStorageFileUrlQuery;\n  options?: AthenaStorageBinaryCallOptions;\n} {\n  if (typeof input === \"string\") {\n    return {\n      fileIds: [input],\n      options: maybeOptions,\n      query: queryOrOptions as GetStorageFileUrlQuery | undefined,\n    };\n  }\n  if (Array.isArray(input)) {\n    return {\n      fileIds: [...input],\n      options: maybeOptions,\n      query: queryOrOptions as GetStorageFileUrlQuery | undefined,\n    };\n  }\n  const downloadInput = input as AthenaStorageFileDownloadInput;\n  const { fileId, fileIds, ...query } = downloadInput;\n  return {\n    fileIds: fileIds ? [...fileIds] : fileId ? [fileId] : [],\n    options: queryOrOptions as AthenaStorageBinaryCallOptions | undefined,\n    query,\n  };\n}\n\nfunction createPathContext(\n  input: {\n    vars?: AthenaStorageTemplateVars;\n    env?: AthenaStorageEnv;\n    organization_id?: string;\n    organizationId?: string;\n    user_id?: string;\n    userId?: string;\n    resource_id?: string;\n    resourceId?: string;\n  },\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig\n): AthenaStoragePathContext {\n  const organizationId =\n    input.organizationId ??\n    input.organization_id ??\n    options?.organizationId ??\n    undefined;\n  const userId = input.userId ?? input.user_id ?? options?.userId ?? undefined;\n  const resourceId = input.resourceId ?? input.resource_id ?? undefined;\n  const vars = {\n    ...(config.vars ?? {}),\n    ...(input.vars ?? {}),\n  };\n  if (organizationId !== undefined) {\n    vars.organizationId = organizationId;\n    vars.organization_id = organizationId;\n  }\n  if (userId !== undefined) {\n    vars.userId = userId;\n    vars.user_id = userId;\n  }\n  if (resourceId !== undefined) {\n    vars.resourceId = resourceId;\n    vars.resource_id = resourceId;\n  }\n  return {\n    env: {\n      ...readProcessEnv(),\n      ...(config.env ?? {}),\n      ...(input.env ?? {}),\n    },\n    organization_id: organizationId,\n    organizationId,\n    resource_id: resourceId,\n    resourceId,\n    user_id: userId,\n    userId,\n    vars,\n  };\n}\n\nfunction renderStorageTemplate(\n  template: string,\n  context: AthenaStoragePathContext\n): string {\n  return template.replace(\n    /\\$\\{([^}]+)\\}|\\{([^}]+)\\}/g,\n    (\n      _match,\n      shellToken: string | undefined,\n      braceToken: string | undefined\n    ) => {\n      const token = (shellToken ?? braceToken ?? \"\").trim();\n      if (!token) {\n        return \"\";\n      }\n      const value = resolveTemplateToken(token, context);\n      return value === undefined || value === null ? \"\" : String(value);\n    }\n  );\n}\n\nfunction resolveTemplateToken(\n  token: string,\n  context: AthenaStoragePathContext\n): AthenaStorageTemplateValue {\n  if (token.startsWith(\"env.\")) {\n    return context.env[token.slice(4)];\n  }\n  if (token in context.vars) {\n    return context.vars[token];\n  }\n  return context.env[token];\n}\n\nfunction joinStoragePath(...parts: readonly string[]): string {\n  return parts\n    .map((part) => part.trim().replace(/^\\/+|\\/+$/g, \"\"))\n    .filter(Boolean)\n    .join(\"/\");\n}\n\nfunction toArray(\n  files: AthenaStorageFileUploadInput[\"files\"]\n): AthenaStorageUploadSource[] {\n  if (isUploadSource(files)) {\n    return [files];\n  }\n  return Array.from(files);\n}\n\nfunction isUploadSource(value: unknown): value is AthenaStorageUploadSource {\n  return (\n    value instanceof Blob ||\n    value instanceof ArrayBuffer ||\n    value instanceof Uint8Array\n  );\n}\n\nfunction sourceName(source: AthenaStorageUploadSource): string | undefined {\n  return isRecord(source) &&\n    typeof source.name === \"string\" &&\n    source.name.trim()\n    ? source.name.trim()\n    : undefined;\n}\n\nfunction sourceSize(source: AthenaStorageUploadSource): number {\n  if (source instanceof Blob) {\n    return source.size;\n  }\n  return source.byteLength;\n}\n\nfunction sourceContentType(\n  source: AthenaStorageUploadSource\n): string | undefined {\n  return source instanceof Blob && source.type.trim()\n    ? source.type.trim()\n    : undefined;\n}\n\nfunction normalizeExtensions(\n  extensions: readonly string[] | undefined\n): Set<string> {\n  return new Set(\n    (extensions ?? [])\n      .map((extension) => extension.replace(/^\\./, \"\").toLowerCase())\n      .filter(Boolean)\n  );\n}\n\nfunction fileExtension(fileName: string): string {\n  const lastDot = fileName.lastIndexOf(\".\");\n  return lastDot === -1 ? \"\" : fileName.slice(lastDot + 1).toLowerCase();\n}\n\nfunction createProgressSnapshot(\n  phase: AthenaStorageUploadProgress[\"phase\"],\n  sources: readonly NormalizedUploadSource[],\n  fileIndex: number,\n  loaded: number,\n  aggregateLoaded: number,\n  multipartInfo?: AthenaStorageUploadProgress[\"multipart\"]\n): AthenaStorageUploadProgress {\n  const total = sources[fileIndex]?.sizeBytes ?? 0;\n  const aggregateTotal = sources.reduce(\n    (totalBytes, source) => totalBytes + source.sizeBytes,\n    0\n  );\n  return {\n    aggregateLoaded,\n    aggregatePercent:\n      aggregateTotal > 0\n        ? Math.round((aggregateLoaded / aggregateTotal) * 100)\n        : 100,\n    aggregateTotal,\n    fileCount: sources.length,\n    fileIndex,\n    fileName: sources[fileIndex]?.fileName ?? \"\",\n    loaded,\n    percent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n    phase,\n    total,\n    ...(multipartInfo ? { multipart: multipartInfo } : {}),\n  };\n}\n\nfunction sliceUploadSource(\n  source: AthenaStorageUploadSource,\n  start: number,\n  end: number\n): AthenaStorageUploadSource {\n  if (source instanceof Blob) {\n    return source.slice(start, end);\n  }\n  if (source instanceof ArrayBuffer) {\n    return source.slice(start, end);\n  }\n  return source.slice(start, end);\n}\n\nfunction readStringField(value: unknown, keys: readonly string[]): string {\n  if (!isRecord(value)) {\n    return \"\";\n  }\n  for (const key of keys) {\n    const candidate = value[key];\n    if (typeof candidate === \"string\" && candidate.trim()) {\n      return candidate.trim();\n    }\n  }\n  return \"\";\n}\n\nfunction readHeadersField(value: unknown): Record<string, string> {\n  if (!isRecord(value)) {\n    return {};\n  }\n  const headers = value.headers;\n  if (!isRecord(headers)) {\n    return {};\n  }\n  const result: Record<string, string> = {};\n  for (const [key, headerValue] of Object.entries(headers)) {\n    if (typeof headerValue === \"string\") {\n      result[key] = headerValue;\n    }\n  }\n  return result;\n}\n\nfunction extractEtag(response: Response): string {\n  const etag =\n    response.headers.get(\"etag\") ?? response.headers.get(\"ETag\") ?? \"\";\n  return etag.trim();\n}\n\nfunction sum(values: readonly number[]): number {\n  return values.reduce((total, value) => total + value, 0);\n}\n\nfunction readProcessEnv(): AthenaStorageEnv {\n  const processLike = (globalThis as { process?: { env?: AthenaStorageEnv } })\n    .process;\n  return processLike?.env ?? {};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\";\n}\n","{\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 type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport { isAthenaGatewayError } from \"../gateway/errors.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayEndpointPath,\n  AthenaGatewayMethod,\n} from \"../gateway/types.ts\";\nimport {\n  buildAthenaGatewayUrl,\n  normalizeAthenaGatewayBaseUrl,\n} from \"../gateway/url.ts\";\nimport { appendHttpQuery as appendQuery } from \"../http/append-query.ts\";\nimport { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport type { AthenaStorageBackupNamespace } from \"./backup.ts\";\nimport { createStorageBackupModule } from \"./backup.ts\";\nimport {\n  type AthenaStorageErrorCode,\n  type AthenaStorageErrorHandler,\n  bindStorageErrorRoutes,\n  rejectStorageError,\n} from \"./errors.ts\";\nimport type {\n  AthenaStorageFileConfig,\n  AthenaStorageFileModule,\n} from \"./file.ts\";\nimport { createStorageFileModule } from \"./file.ts\";\nimport storageLiveHttpRoutesDocument from \"./live-http-routes.json\";\n\nexport type {\n  AthenaStorageBackupNamespace,\n  BackupRecoveryStrategy,\n  StorageBackupCreateRequest,\n  StorageBackupJob,\n  StorageBackupListPage,\n  StorageBackupListQuery,\n  StorageBackupQueuedJob,\n  StorageBackupRecord,\n  StorageBackupRestoreRequest,\n  StorageBackupSchedule,\n  StorageBackupScheduleCreateRequest,\n} from \"./backup.ts\";\nexport type {\n  AthenaStorageErrorDetails,\n  AthenaStorageErrorHandler,\n  AthenaStorageErrorInput,\n} from \"./errors.ts\";\nexport {\n  AthenaStorageError,\n  AthenaStorageErrorCode,\n  createAthenaStorageError,\n} from \"./errors.ts\";\n\n/**\n * Live storage METHOD+path inventory (billing-style contract spine).\n * Exact-set parity with `storageSdkManifest` is enforced in\n * `test/storage-route-parity.test.ts`. Keep this JSON and the manifest table\n * in lockstep when adding routes — never shrink product routes to match a thin list.\n */\nexport const storageLiveHttpRoutes = storageLiveHttpRoutesDocument;\n\n/**\n * Storage SDK route table (SSOT for method names, METHOD+path, envelope).\n * Thin JSON routes in `createStorageModule` resolve path/method/envelope via\n * `requireStorageManifestRoute` / `callManifestRoute` so wrappers cannot drift.\n * Binary, multipart upload bodies, dual-visibility verbs, and admin backup\n * helpers keep specialized implementations.\n */\nexport const storageSdkManifest = {\n  basePath: \"/storage\",\n  envelopeKinds: {\n    athena: \"response body is { status, message, data }\",\n    raw: \"response body is the payload\",\n  },\n  methods: [\n    {\n      method: \"GET\",\n      name: \"listCanonicalStorageProviders\",\n      path: \"/storage/providers\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ providers: StorageProviderDescriptor[] }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listCanonicalStorageConnections\",\n      path: \"/storage/connections\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ connections: StorageConnection[] }\",\n    },\n    {\n      method: \"POST\",\n      name: \"createCanonicalStorageConnection\",\n      path: \"/storage/connections\",\n      requestType: \"CreateStorageConnectionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ connection: StorageConnection }\",\n    },\n    {\n      method: \"POST\",\n      name: \"testCanonicalStorageConnection\",\n      path: \"/storage/connections/test\",\n      requestType: \"TestStorageConnectionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ ok: boolean; config: PublicStorageConnectionConfig }\",\n    },\n    {\n      method: \"GET\",\n      name: \"getCanonicalStorageConnection\",\n      path: \"/storage/connections/{id}\",\n      pathParams: [\"id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ connection: StorageConnection }\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteCanonicalStorageConnection\",\n      path: \"/storage/connections/{id}\",\n      pathParams: [\"id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ connectionId: string }\",\n    },\n    {\n      method: \"POST\",\n      name: \"uploadCanonicalStorageFile\",\n      path: \"/storage/service/files\",\n      requestType: \"UploadManagedFileInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"POST\",\n      name: \"listCanonicalStorageFiles\",\n      path: \"/storage/service/files/list\",\n      requestType: \"ListManagedFilesInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ files: ManagedFile[] }\",\n    },\n    {\n      method: \"GET\",\n      name: \"getCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"POST\",\n      name: \"moveCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}/move\",\n      pathParams: [\"file_id\"],\n      requestType: \"MoveManagedFileInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}/restore\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"purgeCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}/purge\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ fileId: string }\",\n    },\n    {\n      method: \"POST\",\n      name: \"setCanonicalStorageFileVisibility\",\n      path: \"/storage/service/files/{file_id}/visibility\",\n      pathParams: [\"file_id\"],\n      requestType: \"SetManagedFileVisibilityInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listCanonicalStoragePermissions\",\n      path: \"/storage/service/files/{file_id}/permissions\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ permissions: FilePermission[] }\",\n    },\n    {\n      method: \"POST\",\n      name: \"grantCanonicalStoragePermission\",\n      path: \"/storage/service/files/{file_id}/permissions/grant\",\n      pathParams: [\"file_id\"],\n      requestType: \"GrantFilePermissionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ permission: FilePermission }\",\n    },\n    {\n      method: \"POST\",\n      name: \"revokeCanonicalStoragePermission\",\n      path: \"/storage/service/files/{file_id}/permissions/revoke\",\n      pathParams: [\"file_id\"],\n      requestType: \"RevokeFilePermissionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ fileId: string }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listStorageCatalogs\",\n      path: \"/storage/catalogs\",\n      responseEnvelope: \"raw\",\n      responseType: \"{ data: S3CatalogItem[] }\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageCatalog\",\n      path: \"/storage/catalogs\",\n      requestType: \"CreateStorageCatalogRequest\",\n      responseEnvelope: \"raw\",\n      responseType: \"S3CatalogItem\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateStorageCatalog\",\n      path: \"/storage/catalogs/{id}\",\n      pathParams: [\"id\"],\n      requestType: \"UpdateStorageCatalogRequest\",\n      responseEnvelope: \"raw\",\n      responseType: \"S3CatalogItem\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteStorageCatalog\",\n      path: \"/storage/catalogs/{id}\",\n      pathParams: [\"id\"],\n      responseEnvelope: \"raw\",\n      responseType: \"{ id: string; deleted: boolean }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listStorageCredentials\",\n      path: \"/storage/credentials\",\n      responseEnvelope: \"raw\",\n      responseType: \"{ data: S3CredentialListItem[] }\",\n    },\n    {\n      method: \"GET\",\n      name: \"backup.list\",\n      note: \"Admin backup archives on server S3/R2 profile\",\n      path: \"/admin/backups\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupListPage\",\n    },\n    {\n      method: \"POST\",\n      name: \"backup.create\",\n      path: \"/admin/backups\",\n      requestType: \"StorageBackupCreateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupQueuedJob\",\n    },\n    {\n      method: \"POST\",\n      name: \"backup.restore\",\n      path: \"/admin/backups/{key}/restore\",\n      pathParams: [\"key\"],\n      requestType: \"StorageBackupRestoreRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupQueuedJob\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"backup.delete\",\n      path: \"/admin/backups/{key}\",\n      pathParams: [\"key\"],\n      responseEnvelope: \"athena\",\n      responseType: \"void\",\n    },\n    {\n      method: \"GET\",\n      name: \"backup.jobs.list\",\n      path: \"/admin/backups/jobs\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupJob[]\",\n    },\n    {\n      method: \"GET\",\n      name: \"backup.schedules.list\",\n      path: \"/admin/backups/schedules\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupSchedule[]\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageUploadUrl\",\n      path: \"/storage/files/upload-url\",\n      requestType: \"CreateStorageUploadUrlRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageUploadUrlResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageUploadUrls\",\n      path: \"/storage/files/upload-urls\",\n      requestType: \"CreateStorageUploadUrlsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBatchUploadUrlResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageFiles\",\n      path: \"/storage/files/list\",\n      requestType: \"ListStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageListFilesResponse\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFile\",\n      path: \"/storage/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFileUrl\",\n      path: \"/storage/files/{file_id}/url\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"purpose\"],\n      responseEnvelope: \"athena\",\n      responseType: \"PresignedFileUrlResponse\",\n    },\n    {\n      binary: true,\n      method: \"GET\",\n      name: \"getStorageFileProxy\",\n      path: \"/storage/files/{file_id}/proxy\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"purpose\"],\n      responseEnvelope: \"raw\",\n      responseType: \"Response\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateStorageFile\",\n      path: \"/storage/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      requestType: \"UpdateStorageFileRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteStorageFile\",\n      path: \"/storage/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"setStorageFileVisibility\",\n      path: \"/storage/files/{file_id}/visibility\",\n      pathParams: [\"file_id\"],\n      requestType: \"SetStorageFileVisibilityRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"postStorageFileVisibility\",\n      path: \"/storage/files/{file_id}/visibility\",\n      pathParams: [\"file_id\"],\n      requestType: \"SetStorageFileVisibilityRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"setManyStorageFileVisibility\",\n      path: \"/storage/files/visibility-many\",\n      requestType: \"SetManyStorageFileVisibilityRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationManyResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageFolder\",\n      path: \"/storage/folders/delete\",\n      requestType: \"DeleteStorageFolderRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFolderMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"moveStorageFolder\",\n      path: \"/storage/folders/move\",\n      requestType: \"MoveStorageFolderRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFolderMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"searchStorageFiles\",\n      path: \"/storage/files/search\",\n      requestType: \"SearchStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageListFilesResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"confirmStorageUpload\",\n      path: \"/storage/files/{file_id}/confirm-upload\",\n      pathParams: [\"file_id\"],\n      requestType: \"ConfirmStorageUploadRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      binary: true,\n      method: \"PUT\",\n      name: \"uploadStorageFileBinary\",\n      path: \"/storage/files/{file_id}/upload\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"copyStorageFile\",\n      path: \"/storage/files/{file_id}/copy\",\n      pathParams: [\"file_id\"],\n      requestType: \"CopyStorageFileRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteManyStorageFiles\",\n      path: \"/storage/files/delete-many\",\n      requestType: \"DeleteManyStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationManyResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"updateManyStorageFiles\",\n      path: \"/storage/files/update-many\",\n      requestType: \"UpdateManyStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationManyResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreStorageFile\",\n      path: \"/storage/files/{file_id}/restore\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"purgeStorageFile\",\n      path: \"/storage/files/{file_id}/purge\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFilePublicUrl\",\n      path: \"/storage/files/{file_id}/public-url\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFileProxyUrl\",\n      path: \"/storage/files/{file_id}/proxy-url\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"purpose\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"GET\",\n      name: \"listStorageFileVersions\",\n      path: \"/storage/files/{file_id}/versions\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreStorageFileVersion\",\n      path: \"/storage/files/{file_id}/versions/{version_id}/restore\",\n      pathParams: [\"file_id\", \"version_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteStorageFileVersion\",\n      path: \"/storage/files/{file_id}/versions/{version_id}\",\n      pathParams: [\"file_id\", \"version_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFileRetention\",\n      path: \"/storage/files/{file_id}/retention\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"version_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageFileRetention\",\n      path: \"/storage/files/{file_id}/retention\",\n      pathParams: [\"file_id\"],\n      requestType: \"StorageFileRetentionRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageFolders\",\n      path: \"/storage/folders/list\",\n      requestType: \"ListStorageFoldersRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"treeStorageFolders\",\n      path: \"/storage/folders/tree\",\n      requestType: \"TreeStorageFoldersRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStoragePermissions\",\n      path: \"/storage/permissions/list\",\n      requestType: \"StoragePermissionListRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StoragePermissionListResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"grantStoragePermission\",\n      path: \"/storage/permissions/grant\",\n      requestType: \"StoragePermissionGrantRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"revokeStoragePermission\",\n      path: \"/storage/permissions/revoke\",\n      requestType: \"StoragePermissionRevokeRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"checkStoragePermission\",\n      path: \"/storage/permissions/check\",\n      requestType: \"StoragePermissionCheckRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StoragePermissionCheckResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageObjects\",\n      path: \"/storage/objects\",\n      requestType: \"StorageListObjectsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"headStorageObject\",\n      path: \"/storage/objects/head\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"existsStorageObject\",\n      path: \"/storage/objects/exists\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"validateStorageObject\",\n      path: \"/storage/objects/validate\",\n      requestType: \"StorageObjectValidateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"updateStorageObject\",\n      path: \"/storage/objects/update\",\n      requestType: \"StorageUpdateObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"copyStorageObject\",\n      path: \"/storage/objects/copy\",\n      requestType: \"StorageObjectCopyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageObjectUrl\",\n      path: \"/storage/objects/url\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageObjectPublicUrl\",\n      path: \"/storage/objects/public-url\",\n      requestType: \"StorageObjectPublicUrlRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageObject\",\n      path: \"/storage/objects/delete\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageObjectUploadUrl\",\n      path: \"/storage/objects/upload-url\",\n      requestType: \"StoragePresignUploadRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageObjectPostPolicy\",\n      path: \"/storage/objects/post-policy\",\n      requestType: \"StorageSignedPostPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageObjectVersions\",\n      path: \"/storage/objects/versions\",\n      requestType: \"StorageObjectVersionListRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreStorageObjectVersion\",\n      path: \"/storage/objects/versions/restore\",\n      requestType: \"StorageObjectVersionMutationRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageObjectVersion\",\n      path: \"/storage/objects/versions/delete\",\n      requestType: \"StorageObjectVersionMutationRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageObjectFolder\",\n      path: \"/storage/objects/folder\",\n      requestType: \"StorageObjectFolderCreateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageObjectFolder\",\n      path: \"/storage/objects/folder/delete\",\n      requestType: \"StorageObjectFolderDeleteRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"renameStorageObjectFolder\",\n      path: \"/storage/objects/folder/rename\",\n      requestType: \"StorageObjectFolderRenameRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageBuckets\",\n      path: \"/storage/buckets/list\",\n      requestType: \"Omit<StorageObjectBaseRequest, 'bucket'>\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageBucket\",\n      path: \"/storage/buckets/create\",\n      requestType: \"StorageObjectBaseRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucket\",\n      path: \"/storage/buckets/delete\",\n      requestType: \"StorageObjectBaseRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketLifecycle\",\n      path: \"/storage/buckets/lifecycle\",\n      requestType: \"StorageBucketLifecycleRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketLifecycle\",\n      path: \"/storage/buckets/lifecycle/set\",\n      requestType: \"StorageSetBucketLifecycleRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketLifecycle\",\n      path: \"/storage/buckets/lifecycle/delete\",\n      requestType: \"StorageBucketLifecycleRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketPolicy\",\n      path: \"/storage/buckets/policy\",\n      requestType: \"StorageBucketPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketPolicy\",\n      path: \"/storage/buckets/policy/set\",\n      requestType: \"StorageSetBucketPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketPolicy\",\n      path: \"/storage/buckets/policy/delete\",\n      requestType: \"StorageBucketPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketPublicAccess\",\n      path: \"/storage/buckets/public-access\",\n      requestType: \"StoragePublicAccessBlockRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketPublicAccess\",\n      path: \"/storage/buckets/public-access/set\",\n      requestType: \"StorageSetPublicAccessBlockRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketPublicAccess\",\n      path: \"/storage/buckets/public-access/delete\",\n      requestType: \"StoragePublicAccessBlockRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketCors\",\n      path: \"/storage/buckets/cors\",\n      requestType: \"StorageBucketCorsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketCors\",\n      path: \"/storage/buckets/cors/set\",\n      requestType: \"StorageSetBucketCorsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketCors\",\n      path: \"/storage/buckets/cors/delete\",\n      requestType: \"StorageBucketCorsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageMultipartUpload\",\n      path: \"/storage/multipart/create\",\n      requestType: \"StorageMultipartCreateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"signStorageMultipartPart\",\n      path: \"/storage/multipart/sign-part\",\n      requestType: \"StorageMultipartSignPartRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"completeStorageMultipartUpload\",\n      path: \"/storage/multipart/complete\",\n      requestType: \"StorageMultipartCompleteRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"abortStorageMultipartUpload\",\n      path: \"/storage/multipart/abort\",\n      requestType: \"StorageMultipartAbortRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageMultipartParts\",\n      path: \"/storage/multipart/list-parts\",\n      requestType: \"StorageMultipartListPartsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageAuditEvents\",\n      path: \"/storage/audit/list\",\n      requestType: \"StorageAuditQueryRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageAuditListResponse\",\n    },\n  ],\n  namespace: \"storage\",\n} as const;\n\n// Bind route names for AthenaStorageError normalized `operation` labels.\nbindStorageErrorRoutes(storageSdkManifest.methods);\n\nexport type StorageSdkManifestMethod =\n  (typeof storageSdkManifest.methods)[number];\nexport type StorageSdkManifestMethodName = StorageSdkManifestMethod[\"name\"];\n\n/** Resolve one storageSdkManifest entry by stable method name (throws if missing). */\nexport function requireStorageManifestRoute(\n  name: StorageSdkManifestMethodName\n): StorageSdkManifestMethod {\n  const route = storageSdkManifest.methods.find(\n    (candidate) => candidate.name === name\n  );\n  if (!route) {\n    throw new Error(`Unknown storageSdkManifest route: ${name}`);\n  }\n  return route;\n}\n\n/** Forward-compatible canonical provider identifier. */\nexport type StorageProviderId =\n  | \"aws_s3\"\n  | \"cloudflare_r2\"\n  | \"minio\"\n  | \"wasabi\"\n  | \"backblaze_b2\"\n  | \"digitalocean_spaces\"\n  | \"custom_s3\"\n  | (string & {});\n\nexport type StorageImplementationStatus =\n  | \"implemented\"\n  | \"stable\"\n  | \"beta\"\n  | \"experimental\"\n  | (string & {});\n\nexport interface StorageProviderConnectionField {\n  allowedValues?: string[];\n  defaultValue?: unknown;\n  description: string;\n  key: string;\n  required: boolean;\n  secret: boolean;\n  valueType: string;\n}\n\n/** Public provider metadata normalized from Athena's provider descriptor. */\nexport interface StorageProviderDescriptor {\n  connectionSchema: { fields: StorageProviderConnectionField[] };\n  defaultEndpointTemplate?: string;\n  defaultRegion: string;\n  forcePathStyleDefault: boolean;\n  id: StorageProviderId;\n  implementationStatus: StorageImplementationStatus;\n  integration?: Record<string, unknown>;\n  protocol: \"s3_compatible\" | (string & {});\n}\n\nexport interface PublicStorageConnectionConfig {\n  bucket: string;\n  defaultPrefix?: string;\n  endpoint: string;\n  forcePathStyle: boolean;\n  metadata: Record<string, unknown>;\n  publicBaseUrl?: string;\n  region: string;\n}\n\nexport interface StorageConnectionCredentialState {\n  activeCredentialId?: string;\n  configured: boolean;\n}\n\n/** Secret-safe connection representation returned by canonical HTTP routes. */\nexport interface StorageConnection {\n  config: PublicStorageConnectionConfig;\n  createdAt?: string;\n  credentialState: StorageConnectionCredentialState;\n  description?: string;\n  id: string;\n  isActive: boolean;\n  name: string;\n  protocol: string;\n  providerId: StorageProviderId;\n  updatedAt?: string;\n  vendor?: string;\n}\n\ninterface StorageConnectionConfigInput {\n  bucket: string;\n  defaultPrefix?: string;\n  endpoint?: string;\n  forcePathStyle?: boolean;\n  metadata?: Record<string, unknown>;\n  publicBaseUrl?: string;\n  region?: string;\n}\n\ninterface StorageConnectionCredentialsInput {\n  accessKeyId: string;\n  secretAccessKey: string;\n  sessionToken?: string;\n}\n\nexport interface CreateAwsS3ConnectionInput {\n  config: StorageConnectionConfigInput & { region: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"aws_s3\";\n}\n\nexport interface CreateCloudflareR2ConnectionInput {\n  config: StorageConnectionConfigInput & { accountId?: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"cloudflare_r2\";\n}\n\nexport interface CreateMinioConnectionInput {\n  config: StorageConnectionConfigInput & { endpoint: string; region: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"minio\";\n}\n\nexport interface CreateCustomS3ConnectionInput {\n  config: StorageConnectionConfigInput & { endpoint: string; region: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"custom_s3\" | (string & {});\n}\n\nexport type CreateStorageConnectionInput =\n  | CreateAwsS3ConnectionInput\n  | CreateCloudflareR2ConnectionInput\n  | CreateMinioConnectionInput\n  | CreateCustomS3ConnectionInput;\n\nexport type TestStorageConnectionInput = CreateStorageConnectionInput;\n\nexport type FileVisibility = \"private\" | \"organization\" | \"public\";\nexport type ManagedFileStatus =\n  | \"requested\"\n  | \"pending\"\n  | \"uploading\"\n  | \"presigned\"\n  | \"available\"\n  | \"failed\"\n  | \"abandoned\"\n  | \"soft_deleted\"\n  | \"purged\"\n  | (string & {});\n\n/** Public managed-file representation from canonical service routes. */\nexport interface ManagedFile {\n  bucket: string;\n  checksumSha256?: string;\n  connectionId?: string;\n  contentType?: string;\n  createdAt?: string;\n  createdByUserId?: string;\n  deletedAt?: string;\n  id: string;\n  key: string;\n  metadata: Record<string, unknown>;\n  name: string;\n  organizationId?: string;\n  sizeBytes?: number;\n  status: ManagedFileStatus;\n  updatedAt?: string;\n  visibility: FileVisibility;\n}\n\nexport interface UploadManagedFileInput {\n  body: Uint8Array;\n  bucket: string;\n  connectionId: string;\n  contentType?: string;\n  idempotencyKey?: string;\n  key: string;\n  organizationId?: string;\n}\n\nexport interface ListManagedFilesInput {\n  connectionId: string;\n  organizationId?: string;\n  prefix?: string;\n}\n\nexport interface MoveManagedFileInput {\n  destinationKey: string;\n}\n\nexport interface SetManagedFileVisibilityInput {\n  visibility: FileVisibility;\n}\n\nexport type FilePermissionAction =\n  | \"read\"\n  | \"write\"\n  | \"delete\"\n  | \"share\"\n  | \"owner\";\n\nexport interface FilePermission {\n  action: FilePermissionAction;\n  expiresAt?: string;\n  fileId: string;\n  grantedByUserId?: string;\n  id: string;\n  metadata: Record<string, unknown>;\n  principalId: string;\n  principalType: string;\n  revokedAt?: string;\n}\n\nexport interface GrantFilePermissionInput {\n  action: FilePermissionAction;\n  principalId: string;\n  principalType: string;\n}\n\nexport type RevokeFilePermissionInput = GrantFilePermissionInput;\n\nexport interface S3CatalogItem {\n  bucket: string;\n  created_at: string;\n  default_prefix?: string | null;\n  endpoint?: string | null;\n  force_path_style: boolean;\n  id: string;\n  is_active: boolean;\n  metadata: Record<string, unknown>;\n  name: string;\n  provider: string;\n  public_base_url?: string | null;\n  region?: string | null;\n  updated_at: string;\n}\n\nexport interface S3CredentialListItem {\n  access_key: string;\n  bucket: string;\n  created_at: string;\n  endpoint?: string | null;\n  id: string;\n  is_active: boolean;\n  name: string;\n  provider: string;\n  region?: string | null;\n  rotated_at?: string | null;\n  s3_id: string;\n}\n\nexport interface ManagedFileRecord {\n  bucket: string;\n  checksum_sha256?: string | null;\n  content_type?: string | null;\n  created_at: string;\n  created_by_user_id?: string | null;\n  deleted_at?: string | null;\n  extension?: string | null;\n  file_name?: string | null;\n  id: string;\n  is_public: boolean;\n  metadata: Record<string, unknown>;\n  mime_type?: string | null;\n  name: string;\n  organization_id?: string | null;\n  original_name?: string | null;\n  prefix_path?: string | null;\n  resource_id?: string | null;\n  s3_id?: string | null;\n  size_bytes?: number | null;\n  status: string;\n  storage_key: string;\n  updated_at: string;\n  uploaded_by_user_id?: string | null;\n  url?: string | null;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface PresignedFileUrlResponse {\n  bucket: string;\n  cache_hit: boolean;\n  cache_layer: string;\n  expires_at: string;\n  expires_at_epoch_seconds: number;\n  expires_in: number;\n  file_id: string;\n  headers?: Record<string, string>;\n  purpose: string;\n  storage_key: string;\n  url: string;\n}\n\nexport interface StorageServerSideEncryptionOptions {\n  bucket_key_enabled?: boolean;\n  kms_key_id?: string;\n  server_side_encryption?:\n    | \"AES256\"\n    | \"aws:kms\"\n    | \"aws:kms:dsse\"\n    | (string & {});\n  sse?: \"AES256\" | \"aws:kms\" | \"aws:kms:dsse\" | (string & {});\n  ssekms_key_id?: string;\n}\n\nexport interface CreateStorageCatalogRequest {\n  access_key_id: string;\n  /**\n   * Cloudflare account ID for R2 catalogs when endpoint is omitted.\n   * Also accepted under `metadata.account_id`.\n   */\n  account_id?: string;\n  bucket: string;\n  default_prefix?: string;\n  /**\n   * S3-compatible API endpoint.\n   * Optional when `provider` is R2 and `account_id` (or `metadata.account_id`) is set;\n   * the Athena server derives `https://{account_id}.r2.cloudflarestorage.com`.\n   */\n  endpoint?: string;\n  force_path_style?: boolean;\n  metadata?: Record<string, unknown>;\n  name: string;\n  /** Storage provider: `s3` or `r2`; aliases include `aws`, `aws_s3`, `cloudflare_r2`, and `cloudflare-r2`. */\n  provider?: string;\n  public_base_url?: string;\n  /**\n   * Region. Optional for R2 (server defaults to `auto` after normalize).\n   */\n  region?: string;\n  secret_key: string;\n  session_token?: string;\n}\n\nexport interface UpdateStorageCatalogRequest {\n  access_key_id?: string;\n  /** Cloudflare account ID for R2 (merged into metadata / endpoint derivation). */\n  account_id?: string;\n  bucket?: string;\n  default_prefix?: string | null;\n  endpoint?: string;\n  force_path_style?: boolean;\n  is_active?: boolean;\n  metadata?: Record<string, unknown>;\n  name?: string;\n  provider?: string;\n  public_base_url?: string | null;\n  region?: string;\n  secret_key?: string;\n  session_token?: string;\n}\n\nexport interface CreateStorageUploadUrlRequest\n  extends StorageServerSideEncryptionOptions {\n  bucket?: string;\n  content_type?: string;\n  file_id?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  original_name?: string;\n  public?: boolean;\n  resource_id?: string;\n  s3_id: string;\n  size_bytes?: number;\n  storage_key: string;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface CreateStorageUploadUrlsRequest {\n  files: CreateStorageUploadUrlRequest[];\n}\n\nexport interface StorageUploadUrlResponse {\n  file: ManagedFileRecord;\n  upload: PresignedFileUrlResponse;\n}\n\nexport interface StorageBatchUploadUrlResponse {\n  files: StorageUploadUrlResponse[];\n}\n\nexport interface ListStorageFilesRequest {\n  bucket?: string;\n  content_type?: string;\n  key_prefix?: string;\n  limit?: number;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  offset?: number;\n  prefix?: string;\n  resource_id?: string;\n  s3_id: string;\n  status?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface StorageListFilesResponse {\n  count: number;\n  files: ManagedFileRecord[];\n  has_more?: boolean;\n  limit?: number;\n  next_offset?: number | null;\n  offset?: number;\n  total?: number;\n}\n\nexport interface UpdateStorageFileRequest {\n  bucket?: string;\n  checksum_sha256?: string;\n  content_type?: string;\n  file_name?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  original_name?: string;\n  resource_id?: string;\n  size_bytes?: number;\n  status?: string;\n  storage_key?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface SetStorageFileVisibilityRequest {\n  public?: boolean;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface DeleteStorageFolderRequest {\n  prefix: string;\n  s3_id: string;\n}\n\nexport interface MoveStorageFolderRequest {\n  from_prefix: string;\n  s3_id: string;\n  to_prefix: string;\n}\n\nexport interface StorageFileMutationResponse {\n  file: ManagedFileRecord;\n}\n\nexport interface StorageFolderMutationResponse {\n  prefix: string;\n  processed_files: number;\n  s3_id: string;\n}\n\nexport interface StorageFileMutationManyResponse {\n  count: number;\n  files: ManagedFileRecord[];\n}\n\nexport interface StorageFilePermissionRecord {\n  created_at: string;\n  expires_at?: string | null;\n  file_id: string;\n  granted_by_user_id?: string | null;\n  id: string;\n  metadata: Record<string, unknown>;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n  principal_id: string;\n  principal_type: \"user\" | \"organization\" | \"team\" | \"role\";\n  revoked_at?: string | null;\n}\n\nexport interface StoragePermissionListResponse {\n  count: number;\n  permissions: StorageFilePermissionRecord[];\n}\n\nexport interface StoragePermissionCheckResponse {\n  allowed: boolean;\n  permission: string;\n}\n\nexport interface StorageAuditEventRecord {\n  actor_user_id?: string | null;\n  bucket?: string | null;\n  created_at: string;\n  error?: string | null;\n  file_id?: string | null;\n  id: string;\n  metadata: Record<string, unknown>;\n  operation: string;\n  organization_id?: string | null;\n  s3_id?: string | null;\n  status: \"success\" | \"error\";\n  storage_key?: string | null;\n}\n\nexport interface StorageAuditListResponse {\n  count: number;\n  events: StorageAuditEventRecord[];\n}\n\nexport interface ConfirmStorageUploadRequest {\n  checksum_sha256?: string;\n  content_type?: string;\n  metadata?: Record<string, unknown>;\n  size_bytes?: number;\n}\n\nexport interface SearchStorageFilesRequest {\n  bucket?: string;\n  content_type?: string;\n  key_prefix?: string;\n  limit?: number;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  offset?: number;\n  prefix?: string;\n  query?: string;\n  resource_id?: string;\n  s3_id?: string;\n  status?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface DeleteManyStorageFilesRequest {\n  file_ids: string[];\n}\n\nexport interface UpdateManyStorageFilesRequest {\n  bucket?: string;\n  checksum_sha256?: string;\n  content_type?: string;\n  file_ids: string[];\n  file_name?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  original_name?: string;\n  resource_id?: string;\n  size_bytes?: number;\n  status?: string;\n  storage_key?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface SetManyStorageFileVisibilityRequest {\n  file_ids: string[];\n  public?: boolean;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface CopyStorageFileRequest\n  extends StorageServerSideEncryptionOptions {\n  bucket?: string;\n  file_name?: string;\n  metadata?: Record<string, unknown>;\n  storage_key: string;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface ListStorageFoldersRequest {\n  prefix: string;\n  s3_id: string;\n}\n\nexport interface TreeStorageFoldersRequest {\n  prefix: string;\n  s3_id: string;\n}\n\nexport interface StoragePermissionListRequest {\n  file_id: string;\n}\n\nexport interface StoragePermissionGrantRequest {\n  expires_at?: string;\n  file_id: string;\n  metadata?: Record<string, unknown>;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n  principal_id: string;\n  principal_type: \"user\" | \"organization\" | \"team\" | \"role\";\n}\n\nexport interface StoragePermissionRevokeRequest {\n  file_id: string;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n  principal_id: string;\n  principal_type: \"user\" | \"organization\" | \"team\" | \"role\";\n}\n\nexport interface StoragePermissionCheckRequest {\n  file_id: string;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n}\n\nexport interface StorageMultipartCreateRequest\n  extends StorageServerSideEncryptionOptions {\n  content_type?: string;\n  file_id: string;\n}\n\nexport interface StorageMultipartSignPartRequest {\n  file_id: string;\n  part_number: number;\n  upload_id: string;\n}\n\nexport interface StorageMultipartCompletePartInput {\n  etag: string;\n  part_number: number;\n}\n\nexport interface StorageMultipartCompleteRequest {\n  file_id: string;\n  parts: StorageMultipartCompletePartInput[];\n  upload_id: string;\n}\n\nexport interface StorageMultipartAbortRequest {\n  file_id: string;\n  upload_id: string;\n}\n\nexport interface StorageMultipartListPartsRequest {\n  file_id: string;\n  upload_id: string;\n}\n\nexport interface DeprecatedInlineStorageConnectionFields {\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  access_key_id?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  endpoint?: string;\n  provider?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  region?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  secret_key?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  session_token?: string;\n}\n\ninterface StorageConnectionBySnakeS3Id\n  extends DeprecatedInlineStorageConnectionFields {\n  s3_id: string;\n  s3Id?: string;\n}\n\ninterface StorageConnectionByCamelS3Id\n  extends DeprecatedInlineStorageConnectionFields {\n  s3_id?: string;\n  s3Id: string;\n}\n\ninterface StorageConnectionByInlineCredentials\n  extends DeprecatedInlineStorageConnectionFields {\n  s3_id?: string;\n  s3Id?: string;\n  endpoint: string;\n  region: string;\n  access_key_id: string;\n  secret_key: string;\n}\n\nexport type StorageConnectionSelector =\n  | StorageConnectionBySnakeS3Id\n  | StorageConnectionByCamelS3Id\n  | StorageConnectionByInlineCredentials;\n\nexport type StorageObjectFolderCreateRequest = StorageConnectionSelector & {\n  bucket: string;\n  prefix: string;\n};\n\nexport type StorageObjectFolderDeleteRequest = StorageObjectFolderCreateRequest;\n\nexport interface StorageObjectFolderRenameRequest\n  extends Omit<StorageObjectFolderCreateRequest, \"prefix\"> {\n  from_prefix: string;\n  to_prefix: string;\n}\n\nexport type StorageObjectBaseRequest = StorageConnectionSelector & {\n  bucket: string;\n};\n\nexport type StorageObjectRequest = StorageObjectBaseRequest & {\n  key: string;\n};\n\nexport type StorageObjectValidateRequest = StorageObjectRequest & {\n  checksum_sha256?: string;\n  etag?: string;\n};\n\nexport type StorageObjectCopyRequest = StorageObjectBaseRequest &\n  StorageServerSideEncryptionOptions & {\n    source_key: string;\n    destination_key: string;\n    destination_bucket?: string;\n  };\n\nexport type StorageObjectPublicUrlRequest = StorageObjectRequest & {\n  public_base_url?: string;\n  force_path_style?: boolean;\n};\n\nexport type StorageListObjectsRequest = StorageObjectBaseRequest & {\n  prefix?: string;\n  delimiter?: string;\n  continuation_token?: string;\n  max_keys?: number;\n};\n\nexport type StorageUpdateObjectRequest = StorageObjectRequest & {\n  acl?: string;\n  content_type?: string;\n  cache_control?: string;\n  content_disposition?: string;\n  content_encoding?: string;\n  content_language?: string;\n  metadata?: Record<string, string>;\n};\n\nexport type StorageObjectVersionListRequest = StorageObjectBaseRequest & {\n  key?: string;\n  max_keys?: number;\n  key_marker?: string;\n  version_id_marker?: string;\n  delimiter?: string;\n};\n\nexport type StorageObjectVersionMutationRequest = StorageObjectRequest & {\n  version_id: string;\n};\n\nexport type StorageSignedPostPolicyRequest = StorageObjectRequest &\n  StorageServerSideEncryptionOptions & {\n    content_type?: string;\n    min_size?: number;\n    max_size?: number;\n    expires_in?: number;\n    public_base_url?: string;\n    force_path_style?: boolean;\n    success_action_status?: string;\n  };\n\nexport type StoragePresignUploadRequest = StorageObjectRequest &\n  StorageServerSideEncryptionOptions & {\n    content_type?: string;\n  };\n\nexport type StorageBucketCorsRequest = StorageObjectBaseRequest;\n\nexport interface StorageBucketCorsRuleInput {\n  allowed_headers?: string[];\n  allowed_methods: string[];\n  allowed_origins: string[];\n  expose_headers?: string[];\n  max_age_seconds?: number;\n}\n\nexport type StorageSetBucketCorsRequest = StorageBucketCorsRequest & {\n  rules: StorageBucketCorsRuleInput[];\n};\n\nexport type StorageBucketLifecycleRequest = StorageObjectBaseRequest;\n\nexport interface StorageBucketLifecycleRuleInput {\n  abort_incomplete_multipart_upload_days?: number;\n  expiration_days?: number;\n  expired_object_delete_marker?: boolean;\n  id?: string;\n  noncurrent_version_expiration_days?: number;\n  prefix?: string;\n  status?: \"Enabled\" | \"Disabled\" | \"enabled\" | \"disabled\" | (string & {});\n}\n\nexport type StorageSetBucketLifecycleRequest = StorageBucketLifecycleRequest & {\n  rules: StorageBucketLifecycleRuleInput[];\n};\n\nexport type StorageBucketPolicyRequest = StorageObjectBaseRequest;\n\nexport type StorageSetBucketPolicyRequest = StorageBucketPolicyRequest & {\n  policy: Record<string, unknown> | string;\n};\n\nexport type StoragePublicAccessBlockRequest = StorageObjectBaseRequest;\n\nexport type StorageSetPublicAccessBlockRequest =\n  StoragePublicAccessBlockRequest & {\n    block_public_acls?: boolean;\n    ignore_public_acls?: boolean;\n    block_public_policy?: boolean;\n    restrict_public_buckets?: boolean;\n  };\n\nexport interface StorageFileVersionPathRequest {\n  file_id: string;\n  version_id: string;\n}\n\nexport interface StorageFileRetentionRequest {\n  bypass_governance?: boolean;\n  mode?: \"GOVERNANCE\" | \"COMPLIANCE\" | (string & {});\n  retain_until?: string;\n  retain_until_date?: string;\n  version_id?: string;\n}\n\nexport interface StorageAuditQueryRequest {\n  file_id?: string;\n  limit?: number;\n  offset?: number;\n}\n\nexport interface AthenaEnvelope<T> {\n  data: T;\n  message: string;\n  status: string;\n}\n\nexport type StorageFileAccessPurpose = \"read\" | \"download\" | \"stream\";\n\nexport interface GetStorageFileUrlQuery {\n  purpose?: StorageFileAccessPurpose | (string & {});\n}\n\nexport interface AthenaStorageClientConfig extends AthenaStorageFileConfig {\n  onError?: AthenaStorageErrorHandler;\n}\n\n/**\n * Credentials for signing the direct upload PUT in the client.\n * The Athena API still creates managed-file metadata so the public upload\n * result remains unchanged; file bytes go directly to this S3-compatible endpoint.\n */\nexport interface AthenaStorageDirectUploadConfig {\n  accessKeyId: string;\n  bucket?: string;\n  endpoint: string;\n  /** R2 uses path-style addressing by default. */\n  forcePathStyle?: boolean;\n  region?: string;\n  secretAccessKey: string;\n  sessionToken?: string;\n}\n\nexport interface AthenaStorageCallOptions extends AthenaGatewayCallOptions {\n  onError?: AthenaStorageErrorHandler;\n  signal?: AbortSignal;\n}\n\nexport type AthenaStorageBinaryCallOptions = AthenaStorageCallOptions;\n\nexport interface AthenaCanonicalStorageProvidersNamespace {\n  list: (options?: AthenaStorageCallOptions) => Promise<StorageProviderDescriptor[]>;\n}\n\nexport interface AthenaCanonicalStorageConnectionsNamespace {\n  create: (\n    input: CreateStorageConnectionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageConnection>;\n  delete: (\n    id: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ connectionId: string }>;\n  get: (id: string, options?: AthenaStorageCallOptions) => Promise<StorageConnection>;\n  list: (options?: AthenaStorageCallOptions) => Promise<StorageConnection[]>;\n  test: (\n    input: TestStorageConnectionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ config: PublicStorageConnectionConfig; ok: boolean }>;\n}\n\nexport interface AthenaCanonicalStorageFilesNamespace {\n  delete: (fileId: string, options?: AthenaStorageCallOptions) => Promise<ManagedFile>;\n  get: (fileId: string, options?: AthenaStorageCallOptions) => Promise<ManagedFile>;\n  list: (\n    input: ListManagedFilesInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile[]>;\n  move: (\n    fileId: string,\n    input: MoveManagedFileInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile>;\n  purge: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ fileId: string }>;\n  restore: (fileId: string, options?: AthenaStorageCallOptions) => Promise<ManagedFile>;\n  setVisibility: (\n    fileId: string,\n    input: SetManagedFileVisibilityInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile>;\n  upload: (\n    input: UploadManagedFileInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile>;\n}\n\nexport interface AthenaCanonicalStoragePermissionsNamespace {\n  grant: (\n    fileId: string,\n    input: GrantFilePermissionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<FilePermission>;\n  list: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<FilePermission[]>;\n  revoke: (\n    fileId: string,\n    input: RevokeFilePermissionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ fileId: string }>;\n}\n\nexport interface AthenaStorageBaseModule {\n  createStorageCatalog: (\n    input: CreateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n  createStorageUploadUrl: (\n    input: CreateStorageUploadUrlRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageUploadUrlResponse>;\n  createStorageUploadUrls: (\n    input: CreateStorageUploadUrlsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBatchUploadUrlResponse>;\n  deleteStorageCatalog: (\n    id: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ id: string; deleted: boolean }>;\n  deleteStorageFile: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  deleteStorageFolder: (\n    input: DeleteStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  getStorageFile: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  getStorageFileProxy: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ) => Promise<Response>;\n  getStorageFileUrl: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<PresignedFileUrlResponse>;\n  listStorageCatalogs: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CatalogItem[] }>;\n  listStorageCredentials: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CredentialListItem[] }>;\n  listStorageFiles: (\n    input: ListStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n  moveStorageFolder: (\n    input: MoveStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  setStorageFileVisibility: (\n    fileId: string,\n    input: SetStorageFileVisibilityRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  updateStorageCatalog: (\n    id: string,\n    input: UpdateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n  updateStorageFile: (\n    fileId: string,\n    input: UpdateStorageFileRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n}\n\nexport type AthenaStoragePutBody =\n  | Blob\n  | ArrayBuffer\n  | Uint8Array\n  | ReadableStream<Uint8Array>;\n\nexport interface AthenaStoragePutOptions {\n  headers?: Record<string, string>;\n  signal?: AbortSignal;\n}\n\nexport interface AthenaStorageManagedUpload extends PresignedFileUrlResponse {\n  expiresAt: string;\n  headers: Record<string, string>;\n  method: \"PUT\";\n  put: (\n    body: AthenaStoragePutBody,\n    options?: AthenaStoragePutOptions\n  ) => Promise<Response>;\n}\n\nexport interface StorageUploadUrlResponseWithPut\n  extends Omit<StorageUploadUrlResponse, \"upload\"> {\n  upload: AthenaStorageManagedUpload;\n}\n\nexport interface StorageBatchUploadUrlResponseWithPut {\n  files: StorageUploadUrlResponseWithPut[];\n}\n\nexport interface AthenaStorageFileUploadRequest\n  extends StorageServerSideEncryptionOptions {\n  bucket?: string;\n  content_type?: string;\n  contentType?: string;\n  file_id?: string;\n  fileId?: string;\n  fileName?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  mimeType?: string;\n  name?: string;\n  original_name?: string;\n  originalName?: string;\n  public?: boolean;\n  resource_id?: string;\n  resourceId?: string;\n  s3_id?: string;\n  s3Id?: string;\n  size_bytes?: number;\n  sizeBytes?: number;\n  storage_key?: string;\n  storageKey?: string;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface AthenaStorageFileUploadManyRequest {\n  files: AthenaStorageFileUploadRequest[];\n}\n\nexport interface AthenaStorageFileNamespace extends AthenaStorageFileModule {\n  confirmUpload: (\n    fileId: string,\n    input?: ConfirmStorageUploadRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  copy: (\n    fileId: string,\n    input: CopyStorageFileRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  deleteMany: (\n    input: DeleteManyStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationManyResponse>;\n  deleteVersion: (\n    fileId: string,\n    versionId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  get: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  proxy: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ) => Promise<Response>;\n  proxyUrl: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  publicUrl: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  purge: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  restore: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  restoreVersion: (\n    fileId: string,\n    versionId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  retention: {\n    get: (\n      fileId: string,\n      query?: Pick<StorageFileRetentionRequest, \"version_id\">,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      fileId: string,\n      input: StorageFileRetentionRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n  search: (\n    input: SearchStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n  update: (\n    fileId: string,\n    input: UpdateStorageFileRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  updateMany: (\n    input: UpdateManyStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationManyResponse>;\n  upload(\n    input: AthenaStorageFileUploadRequest,\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageUploadUrlResponseWithPut>;\n  upload(\n    input: Parameters<AthenaStorageFileModule[\"upload\"]>[0],\n    options?: AthenaStorageCallOptions\n  ): ReturnType<AthenaStorageFileModule[\"upload\"]>;\n  uploadBinary: (\n    fileId: string,\n    body: AthenaStoragePutBody,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  uploadMany: (\n    input: AthenaStorageFileUploadManyRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBatchUploadUrlResponseWithPut>;\n  url: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<PresignedFileUrlResponse>;\n  versions: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  visibility: {\n    update: (\n      fileId: string,\n      input: SetStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageFileMutationResponse>;\n    set: (\n      fileId: string,\n      input: SetStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageFileMutationResponse>;\n    setMany: (\n      input: SetManyStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageFileMutationManyResponse>;\n  };\n}\n\nexport interface AthenaStorageCredentialsNamespace {\n  list: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CredentialListItem[] }>;\n}\n\nexport interface AthenaStorageCatalogNamespace {\n  create: (\n    input: CreateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n  delete: (\n    id: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ id: string; deleted: boolean }>;\n  list: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CatalogItem[] }>;\n  update: (\n    id: string,\n    input: UpdateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n}\n\nexport interface AthenaStorageFolderNamespace {\n  delete: (\n    input: DeleteStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  list: (\n    input: ListStorageFoldersRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  move: (\n    input: MoveStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  tree: (\n    input: TreeStorageFoldersRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStoragePermissionNamespace {\n  check: (\n    input: StoragePermissionCheckRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StoragePermissionCheckResponse>;\n  grant: (\n    input: StoragePermissionGrantRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  list: (\n    input: StoragePermissionListRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StoragePermissionListResponse>;\n  revoke: (\n    input: StoragePermissionRevokeRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageObjectFolderNamespace {\n  create: (\n    input: StorageObjectFolderCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  delete: (\n    input: StorageObjectFolderDeleteRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  rename: (\n    input: StorageObjectFolderRenameRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageObjectNamespace {\n  copy: (\n    input: StorageObjectCopyRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  delete: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  deleteVersion: (\n    input: StorageObjectVersionMutationRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  exists: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  folder: AthenaStorageObjectFolderNamespace;\n  head: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  list: (\n    input: StorageListObjectsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  postPolicy: (\n    input: StorageSignedPostPolicyRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  publicUrl: (\n    input: StorageObjectPublicUrlRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  restoreVersion: (\n    input: StorageObjectVersionMutationRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  update: (\n    input: StorageUpdateObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  uploadUrl: (\n    input: StoragePresignUploadRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  url: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  validate: (\n    input: StorageObjectValidateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  versions: (\n    input: StorageObjectVersionListRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageBucketCorsNamespace {\n  delete: (\n    input: StorageBucketCorsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  get: (\n    input: StorageBucketCorsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  set: (\n    input: StorageSetBucketCorsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageBucketNamespace {\n  cors: AthenaStorageBucketCorsNamespace;\n  create: (\n    input: StorageObjectBaseRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  delete: (\n    input: StorageObjectBaseRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  lifecycle: {\n    get: (\n      input: StorageBucketLifecycleRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      input: StorageSetBucketLifecycleRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      input: StorageBucketLifecycleRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n  list: (\n    input: Omit<StorageObjectBaseRequest, \"bucket\">,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  policy: {\n    get: (\n      input: StorageBucketPolicyRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      input: StorageSetBucketPolicyRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      input: StorageBucketPolicyRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n  publicAccess: {\n    get: (\n      input: StoragePublicAccessBlockRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      input: StorageSetPublicAccessBlockRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      input: StoragePublicAccessBlockRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n}\n\nexport interface AthenaStorageMultipartNamespace {\n  abort: (\n    input: StorageMultipartAbortRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  complete: (\n    input: StorageMultipartCompleteRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  create: (\n    input: StorageMultipartCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  listParts: (\n    input: StorageMultipartListPartsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  signPart: (\n    input: StorageMultipartSignPartRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageAuditNamespace {\n  list: (\n    input: StorageAuditQueryRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageAuditListResponse>;\n}\n\nexport interface AthenaStorageModule extends AthenaStorageBaseModule {\n  audit: AthenaStorageAuditNamespace;\n  /**\n   * Database backup / restore admin API (`/admin/backups*`).\n   * Archives are stored in the server S3 or R2 profile (`ATHENA_BACKUP_S3_*`).\n   */\n  backup: AthenaStorageBackupNamespace;\n  bucket: AthenaStorageBucketNamespace;\n  catalog: AthenaStorageCatalogNamespace;\n  /** Canonical service-backed connection API. */\n  connections: AthenaCanonicalStorageConnectionsNamespace;\n  credentials: AthenaStorageCredentialsNamespace;\n  delete: AthenaStorageFileModule[\"delete\"];\n  file: AthenaStorageFileNamespace;\n  /** Canonical service-backed managed-file API. */\n  files: AthenaCanonicalStorageFilesNamespace;\n  folder: AthenaStorageFolderNamespace;\n  multipart: AthenaStorageMultipartNamespace;\n  /** Canonical service-backed managed-file authorization API. */\n  permissions: AthenaCanonicalStoragePermissionsNamespace;\n  /** Canonical provider capability discovery API. */\n  providers: AthenaCanonicalStorageProvidersNamespace;\n  object: AthenaStorageObjectNamespace;\n  permission: AthenaStoragePermissionNamespace;\n}\n\ntype StorageEnvelopeKind = \"raw\" | \"athena\";\n\ninterface StorageModuleRuntimeOptions {\n  baseUrl?: string;\n  onError?: AthenaStorageErrorHandler;\n  stripBasePath?: boolean;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction headerValue(\n  headers: Headers,\n  names: readonly string[]\n): string | undefined {\n  for (const name of names) {\n    const value = headers.get(name);\n    if (value?.trim()) {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\nfunction storagePath(path: string): AthenaGatewayEndpointPath {\n  return path as AthenaGatewayEndpointPath;\n}\n\nfunction resolveStorageEndpointPath(\n  endpoint: AthenaGatewayEndpointPath,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): AthenaGatewayEndpointPath {\n  if (!runtimeOptions?.stripBasePath) {\n    return endpoint;\n  }\n\n  const [pathname, queryText] = String(endpoint).split(\"?\", 2);\n  const trimmedPathname = pathname.startsWith(\"/storage/\")\n    ? pathname.slice(\"/storage\".length)\n    : pathname === \"/storage\"\n      ? \"/\"\n      : pathname;\n  const resolvedPath = trimmedPathname.startsWith(\"/\")\n    ? trimmedPathname\n    : `/${trimmedPathname}`;\n  return storagePath(queryText ? `${resolvedPath}?${queryText}` : resolvedPath);\n}\n\nfunction withPathParam(path: string, name: string, value: string): string {\n  return path.replace(`{${name}}`, encodeURIComponent(value));\n}\n\nfunction fillManifestPath(\n  template: string,\n  pathParams?: Record<string, string>\n): string {\n  if (!pathParams) {\n    return template;\n  }\n  let path = template;\n  for (const [key, value] of Object.entries(pathParams)) {\n    path = withPathParam(path, key, value);\n  }\n  return path;\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    const message = payload.message ?? payload.error ?? payload.details;\n    if (typeof message === \"string\" && message.trim()) {\n      return message.trim();\n    }\n  }\n  if (typeof payload === \"string\" && payload.trim()) {\n    return payload.trim();\n  }\n  return fallback;\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n  if (!isRecord(payload)) {\n    return undefined;\n  }\n  const hint = payload.hint ?? payload.suggestion;\n  return typeof hint === \"string\" && hint.trim() ? hint.trim() : undefined;\n}\n\nfunction resolveErrorCause(payload: unknown): string | undefined {\n  if (!isRecord(payload)) {\n    return undefined;\n  }\n  const cause = payload.cause ?? payload.reason;\n  return typeof cause === \"string\" && cause.trim() ? cause.trim() : undefined;\n}\n\nfunction storageCodeFromUnknown(error: unknown): AthenaStorageErrorCode {\n  if (isAthenaGatewayError(error)) {\n    if (error.code === \"INVALID_URL\") {\n      return \"INVALID_URL\";\n    }\n    if (error.code === \"NETWORK_ERROR\") {\n      return \"NETWORK_ERROR\";\n    }\n    if (error.code === \"INVALID_JSON\") {\n      return \"INVALID_JSON\";\n    }\n    if (error.code === \"HTTP_ERROR\") {\n      return \"HTTP_ERROR\";\n    }\n  }\n  return \"UNKNOWN_ERROR\";\n}\n\nasync function callStorageEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  envelope: StorageEnvelopeKind,\n  payload?: unknown,\n  options?: AthenaStorageCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options);\n  let url: string;\n  let headers: Record<string, string>;\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl;\n    url = buildAthenaGatewayUrl(\n      baseUrl,\n      resolveStorageEndpointPath(endpoint, runtimeOptions)\n    );\n    headers = gateway.buildHeaders(resolvedOptions);\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: storageCodeFromUnknown(error),\n        endpoint,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        message:\n          error instanceof Error\n            ? error.message\n            : `Athena storage ${method} ${endpoint} failed before sending the request`,\n        method,\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  const requestInit: RequestInit = {\n    headers,\n    method,\n    signal: resolvedOptions?.signal,\n  };\n  if (payload !== undefined && method !== \"GET\") {\n    requestInit.body = JSON.stringify(payload);\n  }\n\n  let response: Response;\n  try {\n    response = await fetch(url, requestInit);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n        method,\n        status: 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  let rawText: string;\n  try {\n    rawText = await response.text();\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Athena storage ${method} ${endpoint} response body could not be read`,\n        method,\n        requestId: headerValue(response.headers, [\n          \"x-athena-request-id\",\n          \"x-request-id\",\n          \"request-id\",\n        ]),\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  const parsedBody = parseResponseBody(\n    rawText ?? \"\",\n    response.headers.get(\"content-type\")\n  );\n  const requestId = headerValue(response.headers, [\n    \"x-athena-request-id\",\n    \"x-request-id\",\n    \"request-id\",\n  ]);\n  if (parsedBody.parseFailed) {\n    return rejectStorageError(\n      {\n        code: \"INVALID_JSON\",\n        endpoint,\n        message: `Athena storage ${method} ${endpoint} returned malformed JSON`,\n        method,\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  if (!response.ok) {\n    return rejectStorageError(\n      {\n        cause: resolveErrorCause(parsedBody.parsed),\n        code: \"HTTP_ERROR\",\n        endpoint,\n        hint: resolveErrorHint(parsedBody.parsed),\n        message: resolveErrorMessage(\n          parsedBody.parsed,\n          `Athena storage ${method} ${endpoint} failed with status ${response.status}`\n        ),\n        method,\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  if (envelope === \"athena\") {\n    if (!(isRecord(parsedBody.parsed) && \"data\" in parsedBody.parsed)) {\n      return rejectStorageError(\n        {\n          code: \"INVALID_ATHENA_ENVELOPE\",\n          endpoint,\n          message: `Athena storage ${method} ${endpoint} returned an invalid Athena envelope`,\n          method,\n          raw: parsedBody.parsed,\n          requestId,\n          status: response.status,\n        },\n        resolvedOptions,\n        runtimeOptions\n      );\n    }\n    return parsedBody.parsed.data as T;\n  }\n\n  return parsedBody.parsed as T;\n}\n\nasync function callStorageBinaryEndpoint(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  options?: AthenaStorageBinaryCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): Promise<Response> {\n  const resolvedOptions = await gateway.resolveCallOptions(options);\n  let url: string;\n  let headers: Record<string, string>;\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl;\n    url = buildAthenaGatewayUrl(\n      baseUrl,\n      resolveStorageEndpointPath(endpoint, runtimeOptions)\n    );\n    headers = gateway.buildHeaders(resolvedOptions);\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: storageCodeFromUnknown(error),\n        endpoint,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        message:\n          error instanceof Error\n            ? error.message\n            : `Athena storage ${method} ${endpoint} failed before sending the request`,\n        method,\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  let response: Response;\n  try {\n    response = await fetch(url, {\n      headers,\n      method,\n      signal: resolvedOptions?.signal,\n    });\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n        method,\n        status: 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  if (response.ok) {\n    return response;\n  }\n\n  const requestId = headerValue(response.headers, [\n    \"x-athena-request-id\",\n    \"x-request-id\",\n    \"request-id\",\n  ]);\n  let rawErrorBody: unknown = null;\n  try {\n    const rawText = await response.text();\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\")\n    );\n    rawErrorBody = parsedBody.parsed;\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Athena storage ${method} ${endpoint} error response body could not be read`,\n        method,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  return rejectStorageError(\n    {\n      cause: resolveErrorCause(rawErrorBody),\n      code: \"HTTP_ERROR\",\n      endpoint,\n      hint: resolveErrorHint(rawErrorBody),\n      message: resolveErrorMessage(\n        rawErrorBody,\n        `Athena storage ${method} ${endpoint} failed with status ${response.status}`\n      ),\n      method,\n      raw: rawErrorBody,\n      requestId,\n      status: response.status,\n    },\n    resolvedOptions,\n    runtimeOptions\n  );\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n  return typeof Blob !== \"undefined\" && body instanceof Blob;\n}\n\nfunction isReadableStreamBody(\n  body: AthenaStoragePutBody\n): body is ReadableStream<Uint8Array> {\n  return (\n    typeof ReadableStream !== \"undefined\" && body instanceof ReadableStream\n  );\n}\n\nasync function putPresignedUploadBody(\n  uploadUrl: string,\n  uploadHeaders: Record<string, string>,\n  body: AthenaStoragePutBody,\n  options?: AthenaStoragePutOptions\n): Promise<Response> {\n  const headers = new Headers(uploadHeaders);\n  for (const [key, value] of Object.entries(options?.headers ?? {})) {\n    headers.set(key, value);\n  }\n  if (!headers.has(\"Content-Type\") && isBlobBody(body) && body.type) {\n    headers.set(\"Content-Type\", body.type);\n  }\n\n  const init: RequestInit & { duplex?: \"half\" } = {\n    body: body as RequestInit[\"body\"],\n    headers,\n    method: \"PUT\",\n    signal: options?.signal,\n  };\n  if (isReadableStreamBody(body)) {\n    init.duplex = \"half\";\n  }\n  return fetch(uploadUrl, init);\n}\n\nfunction attachManagedUpload(\n  upload: PresignedFileUrlResponse\n): AthenaStorageManagedUpload {\n  const headers: Record<string, string> = { ...(upload.headers ?? {}) };\n  return {\n    ...upload,\n    expiresAt: upload.expires_at,\n    headers,\n    method: \"PUT\",\n    put(body, options) {\n      return putPresignedUploadBody(upload.url, headers, body, options);\n    },\n  };\n}\n\nfunction attachUploadHelper(\n  response: StorageUploadUrlResponse\n): StorageUploadUrlResponseWithPut {\n  return {\n    ...response,\n    upload: attachManagedUpload(response.upload),\n  };\n}\n\nfunction attachUploadHelpers(\n  response: StorageBatchUploadUrlResponse\n): StorageBatchUploadUrlResponseWithPut {\n  return {\n    files: response.files.map(attachUploadHelper),\n  };\n}\n\nfunction normalizeUploadUrlRequest(\n  input: AthenaStorageFileUploadRequest\n): CreateStorageUploadUrlRequest {\n  const s3_id = input.s3_id ?? input.s3Id;\n  const storage_key = input.storage_key ?? input.storageKey;\n  if (!s3_id?.trim()) {\n    throw new Error(\"athena.storage.file.upload requires s3_id or s3Id\");\n  }\n  if (!storage_key?.trim()) {\n    throw new Error(\n      \"athena.storage.file.upload requires storage_key or storageKey\"\n    );\n  }\n  const fileName = input.fileName?.trim();\n  const originalName = input.originalName?.trim();\n  return {\n    bucket: input.bucket,\n    bucket_key_enabled: input.bucket_key_enabled,\n    content_type: input.content_type ?? input.contentType,\n    file_id: input.file_id ?? input.fileId,\n    kms_key_id: input.kms_key_id,\n    metadata: input.metadata,\n    mime_type: input.mime_type ?? input.mimeType,\n    name: input.name ?? fileName,\n    original_name: input.original_name ?? originalName ?? fileName,\n    public: input.public,\n    resource_id: input.resource_id ?? input.resourceId,\n    s3_id,\n    server_side_encryption: input.server_side_encryption,\n    size_bytes: input.size_bytes ?? input.sizeBytes,\n    sse: input.sse,\n    ssekms_key_id: input.ssekms_key_id,\n    storage_key,\n    visibility: input.visibility,\n  };\n}\n\nasync function callStorageUploadBinaryEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  body: AthenaStoragePutBody,\n  options?: AthenaStorageCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options);\n  let url: string;\n  let headers: Record<string, string>;\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl;\n    url = buildAthenaGatewayUrl(\n      baseUrl,\n      resolveStorageEndpointPath(endpoint, runtimeOptions)\n    );\n    headers = gateway.buildHeaders(resolvedOptions);\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: storageCodeFromUnknown(error),\n        endpoint,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        message:\n          error instanceof Error\n            ? error.message\n            : `Athena storage PUT ${endpoint} failed before sending the request`,\n        method: \"PUT\",\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  const nextHeaders: Record<string, string> = {};\n  for (const [key, value] of Object.entries(headers)) {\n    if (key.toLowerCase() !== \"content-type\") {\n      nextHeaders[key] = value;\n    }\n  }\n  if (isBlobBody(body) && body.type) {\n    nextHeaders[\"Content-Type\"] = body.type;\n  }\n\n  const requestInit: RequestInit & { duplex?: \"half\" } = {\n    body: body as RequestInit[\"body\"],\n    headers: nextHeaders,\n    method: \"PUT\",\n    signal: resolvedOptions?.signal,\n  };\n  if (isReadableStreamBody(body)) {\n    requestInit.duplex = \"half\";\n  }\n\n  let response: Response;\n  try {\n    response = await fetch(url, requestInit);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Network error while calling Athena storage PUT ${endpoint}: ${message}`,\n        method: \"PUT\",\n        status: 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  let rawText: string;\n  try {\n    rawText = await response.text();\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Athena storage PUT ${endpoint} response body could not be read`,\n        method: \"PUT\",\n        requestId: headerValue(response.headers, [\n          \"x-athena-request-id\",\n          \"x-request-id\",\n          \"request-id\",\n        ]),\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  const parsedBody = parseResponseBody(\n    rawText ?? \"\",\n    response.headers.get(\"content-type\")\n  );\n  const requestId = headerValue(response.headers, [\n    \"x-athena-request-id\",\n    \"x-request-id\",\n    \"request-id\",\n  ]);\n  if (parsedBody.parseFailed) {\n    return rejectStorageError(\n      {\n        code: \"INVALID_JSON\",\n        endpoint,\n        message: `Athena storage PUT ${endpoint} returned malformed JSON`,\n        method: \"PUT\",\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  if (!response.ok) {\n    return rejectStorageError(\n      {\n        cause: resolveErrorCause(parsedBody.parsed),\n        code: \"HTTP_ERROR\",\n        endpoint,\n        hint: resolveErrorHint(parsedBody.parsed),\n        message: resolveErrorMessage(\n          parsedBody.parsed,\n          `Athena storage PUT ${endpoint} failed with status ${response.status}`\n        ),\n        method: \"PUT\",\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  if (!(isRecord(parsedBody.parsed) && \"data\" in parsedBody.parsed)) {\n    return rejectStorageError(\n      {\n        code: \"INVALID_ATHENA_ENVELOPE\",\n        endpoint,\n        message: `Athena storage PUT ${endpoint} returned an invalid Athena envelope`,\n        method: \"PUT\",\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  return parsedBody.parsed.data as T;\n}\n\nexport function createStorageModule(\n  gateway: AthenaGatewayClient,\n  runtimeOptions?: AthenaStorageClientConfig\n): AthenaStorageModule {\n  const resolvedRuntimeOptions = runtimeOptions as\n    | StorageModuleRuntimeOptions\n    | undefined;\n  /**\n   * Thin JSON route binder: METHOD+path+envelope come only from storageSdkManifest.\n   * Hand bodies remain for binary, dual-visibility, and specialized upload helpers.\n   */\n  const callManifestRoute = <T>(\n    name: StorageSdkManifestMethodName,\n    args?: {\n      body?: unknown;\n      options?: AthenaStorageCallOptions;\n      pathParams?: Record<string, string>;\n      query?: object;\n    }\n  ): Promise<T> => {\n    const route = requireStorageManifestRoute(name);\n    if (\"binary\" in route && route.binary) {\n      throw new Error(\n        `Storage route ${name} is binary; use specialized binary helpers`\n      );\n    }\n    let path = fillManifestPath(route.path, args?.pathParams);\n    if (args?.query) {\n      path = appendQuery(path, args.query);\n    }\n    const method = route.method as AthenaGatewayMethod;\n    const routeRuntimeOptions = name.includes(\"CanonicalStorage\")\n      ? { ...resolvedRuntimeOptions, stripBasePath: false }\n      : resolvedRuntimeOptions;\n    return callStorageEndpoint<T>(\n      gateway,\n      storagePath(path),\n      method,\n      route.responseEnvelope,\n      args?.body,\n      args?.options,\n      routeRuntimeOptions\n    );\n  };\n\n  const callStorageFileVisibility = (\n    fileId: string,\n    method: Extract<AthenaGatewayMethod, \"PATCH\" | \"POST\">,\n    input: SetStorageFileVisibilityRequest,\n    options?: AthenaStorageCallOptions\n  ) => {\n    const routeName =\n      method === \"PATCH\"\n        ? (\"setStorageFileVisibility\" as const)\n        : (\"postStorageFileVisibility\" as const);\n    return callManifestRoute<StorageFileMutationResponse>(routeName, {\n      body: input,\n      options,\n      pathParams: { file_id: fileId },\n    });\n  };\n\n  const toCanonicalProviderId = (provider: string): StorageProviderId => {\n    if (provider === \"s3\") return \"aws_s3\";\n    if (provider === \"r2\") return \"cloudflare_r2\";\n    return provider;\n  };\n\n  const serializeConnectionInput = (\n    input: CreateStorageConnectionInput\n  ): Record<string, unknown> => ({\n    accessKeyId: input.credentials.accessKeyId,\n    bucket: input.config.bucket,\n    defaultPrefix: input.config.defaultPrefix,\n    description: input.description,\n    endpoint: input.config.endpoint,\n    forcePathStyle: input.config.forcePathStyle,\n    metadata: input.config.metadata,\n    name: input.name,\n    provider: input.provider,\n    publicBaseUrl: input.config.publicBaseUrl,\n    region: input.config.region,\n    secretAccessKey: input.credentials.secretAccessKey,\n    sessionToken: input.credentials.sessionToken,\n  });\n\n  const encodeBase64 = (bytes: Uint8Array): string => {\n    let binary = \"\";\n    for (const byte of bytes) binary += String.fromCharCode(byte);\n    return btoa(binary);\n  };\n\n  const providers: AthenaCanonicalStorageProvidersNamespace = {\n    async list(options) {\n      const result = await callManifestRoute<{\n        providers: Array<\n          Omit<StorageProviderDescriptor, \"id\" | \"protocol\" | \"connectionSchema\"> & {\n            connectionConfig?: { fields?: StorageProviderConnectionField[] };\n            provider: string;\n          }\n        >;\n      }>(\"listCanonicalStorageProviders\", { options });\n      return result.providers.map((provider) => ({\n        connectionSchema: { fields: provider.connectionConfig?.fields ?? [] },\n        defaultEndpointTemplate: provider.defaultEndpointTemplate,\n        defaultRegion: provider.defaultRegion,\n        forcePathStyleDefault: provider.forcePathStyleDefault,\n        id: toCanonicalProviderId(provider.provider),\n        implementationStatus: provider.implementationStatus,\n        integration: provider.integration,\n        protocol: \"s3_compatible\",\n      }));\n    },\n  };\n\n  const connections: AthenaCanonicalStorageConnectionsNamespace = {\n    async create(input, options) {\n      const result = await callManifestRoute<{ connection: StorageConnection }>(\n        \"createCanonicalStorageConnection\",\n        { body: serializeConnectionInput(input), options }\n      );\n      return result.connection;\n    },\n    async delete(id, options) {\n      return callManifestRoute<{ connectionId: string }>(\n        \"deleteCanonicalStorageConnection\",\n        { options, pathParams: { id } }\n      );\n    },\n    async get(id, options) {\n      const result = await callManifestRoute<{ connection: StorageConnection }>(\n        \"getCanonicalStorageConnection\",\n        { options, pathParams: { id } }\n      );\n      return result.connection;\n    },\n    async list(options) {\n      const result = await callManifestRoute<{ connections: StorageConnection[] }>(\n        \"listCanonicalStorageConnections\",\n        { options }\n      );\n      return result.connections;\n    },\n    async test(input, options) {\n      return callManifestRoute<{\n        config: PublicStorageConnectionConfig;\n        ok: boolean;\n      }>(\"testCanonicalStorageConnection\", {\n        body: serializeConnectionInput(input),\n        options,\n      });\n    },\n  };\n\n  const files: AthenaCanonicalStorageFilesNamespace = {\n    async delete(fileId, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"deleteCanonicalStorageFile\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async get(fileId, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"getCanonicalStorageFile\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async list(input, options) {\n      const result = await callManifestRoute<{ files: ManagedFile[] }>(\n        \"listCanonicalStorageFiles\",\n        { body: input, options }\n      );\n      return result.files;\n    },\n    async move(fileId, input, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"moveCanonicalStorageFile\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    purge(fileId, options) {\n      return callManifestRoute<{ fileId: string }>(\"purgeCanonicalStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    async restore(fileId, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"restoreCanonicalStorageFile\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async setVisibility(fileId, input, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"setCanonicalStorageFileVisibility\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async upload(input, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"uploadCanonicalStorageFile\",\n        {\n          body: {\n            ...input,\n            body: encodeBase64(input.body),\n          },\n          options,\n        }\n      );\n      return result.file;\n    },\n  };\n\n  const permissions: AthenaCanonicalStoragePermissionsNamespace = {\n    async grant(fileId, input, options) {\n      const result = await callManifestRoute<{ permission: FilePermission }>(\n        \"grantCanonicalStoragePermission\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n      return result.permission;\n    },\n    async list(fileId, options) {\n      const result = await callManifestRoute<{ permissions: FilePermission[] }>(\n        \"listCanonicalStoragePermissions\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.permissions;\n    },\n    revoke(fileId, input, options) {\n      return callManifestRoute<{ fileId: string }>(\n        \"revokeCanonicalStoragePermission\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n    },\n  };\n\n  const base: AthenaStorageBaseModule = {\n    createStorageCatalog(input, options) {\n      return callManifestRoute(\"createStorageCatalog\", {\n        body: input,\n        options,\n      });\n    },\n    createStorageUploadUrl(input, options) {\n      return callManifestRoute(\"createStorageUploadUrl\", {\n        body: input,\n        options,\n      });\n    },\n    createStorageUploadUrls(input, options) {\n      return callManifestRoute(\"createStorageUploadUrls\", {\n        body: input,\n        options,\n      });\n    },\n    deleteStorageCatalog(id, options) {\n      return callManifestRoute(\"deleteStorageCatalog\", {\n        options,\n        pathParams: { id },\n      });\n    },\n    deleteStorageFile(fileId, options) {\n      return callManifestRoute(\"deleteStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    deleteStorageFolder(input, options) {\n      return callManifestRoute(\"deleteStorageFolder\", {\n        body: input,\n        options,\n      });\n    },\n    getStorageFile(fileId, options) {\n      return callManifestRoute(\"getStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    getStorageFileProxy(fileId, query, options) {\n      const route = requireStorageManifestRoute(\"getStorageFileProxy\");\n      const path = appendQuery(\n        fillManifestPath(route.path, { file_id: fileId }),\n        query\n      );\n      return callStorageBinaryEndpoint(\n        gateway,\n        storagePath(path),\n        route.method as AthenaGatewayMethod,\n        options,\n        resolvedRuntimeOptions\n      );\n    },\n    getStorageFileUrl(fileId, query, options) {\n      return callManifestRoute(\"getStorageFileUrl\", {\n        options,\n        pathParams: { file_id: fileId },\n        query,\n      });\n    },\n    listStorageCatalogs(options) {\n      return callManifestRoute(\"listStorageCatalogs\", { options });\n    },\n    listStorageCredentials(options) {\n      return callManifestRoute(\"listStorageCredentials\", { options });\n    },\n    listStorageFiles(input, options) {\n      return callManifestRoute(\"listStorageFiles\", { body: input, options });\n    },\n    moveStorageFolder(input, options) {\n      return callManifestRoute(\"moveStorageFolder\", { body: input, options });\n    },\n    setStorageFileVisibility(fileId, input, options) {\n      return callStorageFileVisibility(fileId, \"PATCH\", input, options);\n    },\n    updateStorageCatalog(id, input, options) {\n      return callManifestRoute(\"updateStorageCatalog\", {\n        body: input,\n        options,\n        pathParams: { id },\n      });\n    },\n    updateStorageFile(fileId, input, options) {\n      return callManifestRoute(\"updateStorageFile\", {\n        body: input,\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n  };\n  const multipart: AthenaStorageMultipartNamespace = {\n    abort(input, options) {\n      return callManifestRoute(\"abortStorageMultipartUpload\", {\n        body: input,\n        options,\n      });\n    },\n    complete(input, options) {\n      return callManifestRoute(\"completeStorageMultipartUpload\", {\n        body: input,\n        options,\n      });\n    },\n    create(input, options) {\n      return callManifestRoute(\"createStorageMultipartUpload\", {\n        body: input,\n        options,\n      });\n    },\n    listParts(input, options) {\n      return callManifestRoute(\"listStorageMultipartParts\", {\n        body: input,\n        options,\n      });\n    },\n    signPart(input, options) {\n      return callManifestRoute(\"signStorageMultipartPart\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const fileFacade = createStorageFileModule(base, runtimeOptions, multipart);\n  const fileUpload = ((\n    input:\n      | AthenaStorageFileUploadRequest\n      | Parameters<AthenaStorageFileModule[\"upload\"]>[0],\n    options?: AthenaStorageCallOptions\n  ) => {\n    if (isRecord(input) && \"files\" in input) {\n      return fileFacade.upload(\n        input as unknown as Parameters<AthenaStorageFileModule[\"upload\"]>[0],\n        options\n      );\n    }\n    return base\n      .createStorageUploadUrl(\n        normalizeUploadUrlRequest(input as AthenaStorageFileUploadRequest),\n        options\n      )\n      .then(attachUploadHelper);\n  }) as AthenaStorageFileNamespace[\"upload\"];\n  const fileDelete = ((\n    input: string | readonly string[],\n    options?: AthenaStorageCallOptions\n  ) =>\n    fileFacade.delete(\n      input as unknown as Parameters<AthenaStorageFileModule[\"delete\"]>[0],\n      options\n    )) as AthenaStorageFileNamespace[\"delete\"];\n\n  const file: AthenaStorageFileNamespace = {\n    ...fileFacade,\n    confirmUpload(fileId, input, options) {\n      return callManifestRoute(\"confirmStorageUpload\", {\n        body: input ?? {},\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    copy(fileId, input, options) {\n      return callManifestRoute(\"copyStorageFile\", {\n        body: input,\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    delete: fileDelete,\n    deleteMany(input, options) {\n      return callManifestRoute(\"deleteManyStorageFiles\", {\n        body: input,\n        options,\n      });\n    },\n    deleteVersion(fileId, versionId, options) {\n      return callManifestRoute(\"deleteStorageFileVersion\", {\n        options,\n        pathParams: { file_id: fileId, version_id: versionId },\n      });\n    },\n    get(fileId, options) {\n      return base.getStorageFile(fileId, options);\n    },\n    proxy(fileId, query, options) {\n      return base.getStorageFileProxy(fileId, query, options);\n    },\n    proxyUrl(fileId, query, options) {\n      return callManifestRoute(\"getStorageFileProxyUrl\", {\n        options,\n        pathParams: { file_id: fileId },\n        query,\n      });\n    },\n    publicUrl(fileId, options) {\n      return callManifestRoute(\"getStorageFilePublicUrl\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    purge(fileId, options) {\n      return callManifestRoute(\"purgeStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    restore(fileId, options) {\n      return callManifestRoute(\"restoreStorageFile\", {\n        body: {},\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    restoreVersion(fileId, versionId, options) {\n      return callManifestRoute(\"restoreStorageFileVersion\", {\n        body: {},\n        options,\n        pathParams: { file_id: fileId, version_id: versionId },\n      });\n    },\n    retention: {\n      get(fileId, query, options) {\n        return callManifestRoute(\"getStorageFileRetention\", {\n          options,\n          pathParams: { file_id: fileId },\n          query,\n        });\n      },\n      set(fileId, input, options) {\n        return callManifestRoute(\"setStorageFileRetention\", {\n          body: input,\n          options,\n          pathParams: { file_id: fileId },\n        });\n      },\n    },\n    search(input, options) {\n      return callManifestRoute(\"searchStorageFiles\", { body: input, options });\n    },\n    update(fileId, input, options) {\n      return base.updateStorageFile(fileId, input, options);\n    },\n    updateMany(input, options) {\n      return callManifestRoute(\"updateManyStorageFiles\", {\n        body: input,\n        options,\n      });\n    },\n    upload: fileUpload,\n    uploadBinary(fileId, body, options) {\n      const route = requireStorageManifestRoute(\"uploadStorageFileBinary\");\n      return callStorageUploadBinaryEndpoint(\n        gateway,\n        storagePath(fillManifestPath(route.path, { file_id: fileId })),\n        body,\n        options,\n        resolvedRuntimeOptions\n      );\n    },\n    uploadMany(input, options) {\n      return base\n        .createStorageUploadUrls(\n          { files: input.files.map(normalizeUploadUrlRequest) },\n          options\n        )\n        .then(attachUploadHelpers);\n    },\n    url(fileId, query, options) {\n      return base.getStorageFileUrl(fileId, query, options);\n    },\n    versions(fileId, options) {\n      return callManifestRoute(\"listStorageFileVersions\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    visibility: {\n      set(fileId, input, options) {\n        return callStorageFileVisibility(fileId, \"POST\", input, options);\n      },\n      setMany(input, options) {\n        return callManifestRoute(\"setManyStorageFileVisibility\", {\n          body: input,\n          options,\n        });\n      },\n      update(fileId, input, options) {\n        return base.setStorageFileVisibility(fileId, input, options);\n      },\n    },\n  };\n  const credentials: AthenaStorageCredentialsNamespace = {\n    list(options) {\n      return base.listStorageCredentials(options);\n    },\n  };\n  const catalog: AthenaStorageCatalogNamespace = {\n    create(input, options) {\n      return base.createStorageCatalog(input, options);\n    },\n    delete(id, options) {\n      return base.deleteStorageCatalog(id, options);\n    },\n    list(options) {\n      return base.listStorageCatalogs(options);\n    },\n    update(id, input, options) {\n      return base.updateStorageCatalog(id, input, options);\n    },\n  };\n  const folder: AthenaStorageFolderNamespace = {\n    delete(input, options) {\n      return base.deleteStorageFolder(input, options);\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStorageFolders\", { body: input, options });\n    },\n    move(input, options) {\n      return base.moveStorageFolder(input, options);\n    },\n    tree(input, options) {\n      return callManifestRoute(\"treeStorageFolders\", { body: input, options });\n    },\n  };\n  const permission: AthenaStoragePermissionNamespace = {\n    check(input, options) {\n      return callManifestRoute(\"checkStoragePermission\", {\n        body: input,\n        options,\n      });\n    },\n    grant(input, options) {\n      return callManifestRoute(\"grantStoragePermission\", {\n        body: input,\n        options,\n      });\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStoragePermissions\", {\n        body: input,\n        options,\n      });\n    },\n    revoke(input, options) {\n      return callManifestRoute(\"revokeStoragePermission\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const objectFolder: AthenaStorageObjectFolderNamespace = {\n    create(input, options) {\n      return callManifestRoute(\"createStorageObjectFolder\", {\n        body: input,\n        options,\n      });\n    },\n    delete(input, options) {\n      return callManifestRoute(\"deleteStorageObjectFolder\", {\n        body: input,\n        options,\n      });\n    },\n    rename(input, options) {\n      return callManifestRoute(\"renameStorageObjectFolder\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const object: AthenaStorageObjectNamespace = {\n    copy(input, options) {\n      return callManifestRoute(\"copyStorageObject\", { body: input, options });\n    },\n    delete(input, options) {\n      return callManifestRoute(\"deleteStorageObject\", { body: input, options });\n    },\n    deleteVersion(input, options) {\n      return callManifestRoute(\"deleteStorageObjectVersion\", {\n        body: input,\n        options,\n      });\n    },\n    exists(input, options) {\n      return callManifestRoute(\"existsStorageObject\", { body: input, options });\n    },\n    folder: objectFolder,\n    head(input, options) {\n      return callManifestRoute(\"headStorageObject\", { body: input, options });\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStorageObjects\", { body: input, options });\n    },\n    postPolicy(input, options) {\n      return callManifestRoute(\"createStorageObjectPostPolicy\", {\n        body: input,\n        options,\n      });\n    },\n    publicUrl(input, options) {\n      return callManifestRoute(\"getStorageObjectPublicUrl\", {\n        body: input,\n        options,\n      });\n    },\n    restoreVersion(input, options) {\n      return callManifestRoute(\"restoreStorageObjectVersion\", {\n        body: input,\n        options,\n      });\n    },\n    update(input, options) {\n      return callManifestRoute(\"updateStorageObject\", { body: input, options });\n    },\n    uploadUrl(input, options) {\n      return callManifestRoute(\"createStorageObjectUploadUrl\", {\n        body: input,\n        options,\n      });\n    },\n    url(input, options) {\n      return callManifestRoute(\"getStorageObjectUrl\", { body: input, options });\n    },\n    validate(input, options) {\n      return callManifestRoute(\"validateStorageObject\", {\n        body: input,\n        options,\n      });\n    },\n    versions(input, options) {\n      return callManifestRoute(\"listStorageObjectVersions\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const bucket: AthenaStorageBucketNamespace = {\n    cors: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketCors\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketCors\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketCors\", {\n          body: input,\n          options,\n        });\n      },\n    },\n    create(input, options) {\n      return callManifestRoute(\"createStorageBucket\", { body: input, options });\n    },\n    delete(input, options) {\n      return callManifestRoute(\"deleteStorageBucket\", { body: input, options });\n    },\n    lifecycle: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketLifecycle\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketLifecycle\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketLifecycle\", {\n          body: input,\n          options,\n        });\n      },\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStorageBuckets\", { body: input, options });\n    },\n    policy: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketPolicy\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketPolicy\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketPolicy\", {\n          body: input,\n          options,\n        });\n      },\n    },\n    publicAccess: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketPublicAccess\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketPublicAccess\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketPublicAccess\", {\n          body: input,\n          options,\n        });\n      },\n    },\n  };\n  const audit: AthenaStorageAuditNamespace = {\n    list(input, options) {\n      return callManifestRoute(\"listStorageAuditEvents\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const backup = createStorageBackupModule(\n    gateway,\n    resolvedRuntimeOptions,\n    (path, method, payload, options) =>\n      callStorageEndpoint(\n        gateway,\n        storagePath(path),\n        method,\n        \"raw\",\n        payload,\n        options,\n        resolvedRuntimeOptions\n      )\n  );\n  return {\n    ...base,\n    audit,\n    backup,\n    bucket,\n    catalog,\n    connections,\n    credentials,\n    delete: file.delete,\n    file,\n    files,\n    folder,\n    multipart,\n    object,\n    permission,\n    permissions,\n    providers,\n  };\n}\n","/**\n * Internal Athena client composition root.\n *\n * Feature modules consume {@link AthenaClientRuntimeContext} /\n * {@link InternalAthenaClientCore}, not the public AthenaClient façade.\n * Browser-safe: must not import pg, node:fs, server-only, or v3-client.ts.\n */\n\nimport type {\n  AthenaAdminQueryInput,\n  AthenaAdminQueryResult,\n} from \"../admin/query.ts\";\nimport { createAdminQuery } from \"../admin/query.ts\";\nimport { createAuthModule } from \"../auth/client.ts\";\nimport { toAthenaAuthDiagnostics } from \"../auth/resolve-routing.ts\";\nimport type {\n  AthenaAuthBindings,\n  AthenaAuthClientConfig,\n} from \"../auth/types.ts\";\nimport { createChatModule } from \"../chat/module.ts\";\nimport type {\n  AthenaChatModule,\n  AthenaChatWebSocketFactory,\n} from \"../chat/types.ts\";\nimport type {\n  AthenaRequestOptions,\n  AthenaRequestResponse,\n} from \"../client-request.ts\";\nimport { createAthenaRequest } from \"../client-request.ts\";\nimport type {\n  AthenaResult,\n  AthenaResultFormatter,\n} from \"../client-result.ts\";\nimport { createResultFormatter } from \"../client-result.ts\";\nimport { resolveTableNameForCall } from \"../client-sql.ts\";\nimport type {\n  AthenaFromOptions,\n  AthenaRowShape,\n  ClientTableQueryBuilder,\n  InternalClientBehaviorOptions,\n  RpcQueryBuilder,\n  TableQueryBuilder,\n  UntypedTableName,\n} from \"../client-fluent.ts\";\nimport {\n  createQueryBuilder,\n  createRpcBuilder,\n  createTableBuilder,\n} from \"../client-fluent.ts\";\nimport {\n  type AthenaCompatibilityCache,\n  type AthenaCompatibilityReport,\n  createCompatibilityCache,\n  discoverCompatibility,\n} from \"../compatibility/report.ts\";\nimport type { AthenaDbModule, AthenaTransactionClient } from \"../db/module.ts\";\nimport {\n  beginInteractiveSession,\n  executeAtomicTransaction,\n  finishInteractiveSession,\n  nextInternalSavepointName,\n} from \"../db/transaction/index.ts\";\nimport { AthenaTransactionError } from \"../db/transaction/errors.ts\";\nimport { createInteractiveGatewayClient } from \"../db/transaction/interactive-gateway.ts\";\nimport type { AthenaTransactionOptions } from \"../db/transaction/types.ts\";\nimport {\n  type AthenaGatewayClient,\n  createAthenaGatewayClient,\n  createAthenaGatewayClientView,\n} from \"../gateway/client.ts\";\nimport { normalizeAthenaGatewayBaseUrl } from \"../gateway/url.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaJsonObject,\n  AthenaRpcCallOptions,\n  BackendConfig,\n} from \"../gateway/types.ts\";\nimport type { AthenaCacheContextDescriptor } from \"../query/descriptor.ts\";\nimport { peekSyncCacheContext } from \"../query/descriptor.ts\";\nimport type { AthenaQueryTracer } from \"../query-tracing.ts\";\nimport {\n  captureTraceCallsite,\n  createQueryTracer,\n} from \"../query-tracing.ts\";\nimport type {\n  AthenaNormalizedHealth,\n  AthenaReleaseIdentity,\n} from \"../release/identity.ts\";\nimport {\n  isAthenaModelTarget,\n  resolveAthenaModelTargetTableName,\n} from \"../schema/model-target.ts\";\nimport type {\n  AthenaClientModelsInput,\n  AthenaClientTableName,\n  AthenaModelTarget,\n  InsertOf,\n  RowOf,\n  UpdateOf,\n} from \"../schema/types.ts\";\nimport type { AthenaSelectInput } from \"../select-column-types.ts\";\nimport type {\n  AthenaStorageClientConfig,\n  AthenaStorageModule,\n} from \"../storage/module.ts\";\nimport { createStorageModule } from \"../storage/module.ts\";\nimport type { AthenaRequestHeaderOverrideFields } from \"../utils/athena-request-headers.ts\";\n\n/**\n * Composition root consumed by SDK modules (alias of InternalAthenaClientCore).\n * Public AthenaClient is a frozen façade assembled over this context.\n */\nexport type AthenaClientRuntimeContext<\n  TModels extends AthenaClientModelsInput | never = never,\n> = InternalAthenaClientCore<TModels>;\n\nexport interface AthenaClientAdminModule {\n  /**\n   * Explicit raw SQL with operation + expected shape metadata.\n   * Preferred over root `query()` for Dragunov / Athena 5.\n   */\n  query: <T = unknown, TParams extends readonly unknown[] = readonly unknown[]>(\n    input: AthenaAdminQueryInput<TParams>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaAdminQueryResult<T>>;\n}\n\nexport interface AthenaClientSystemModule {\n  /** Lazy cached compatibility report (health-backed when available). */\n  compatibility: () => Promise<AthenaCompatibilityReport>;\n  /**\n   * Redacted runtime plan (database / auth / storage / environment).\n   * Diagnostics only — not a configuration surface.\n   */\n  runtime: () => import(\"../runtime/resolve.ts\").AthenaRuntimeDiagnostics;\n  /**\n   * Safe auth routing / configuration snapshot (no secrets, tokens, or cookie values).\n   * Always installed by `createClient` / `createClientView` (4.3+). Does not require db.\n   */\n  inspectAuth: (options?: {\n    requestOrigin?: string | null;\n  }) => import(\"../auth/resolve-routing.ts\").AthenaAuthDiagnostics;\n  /** Normalized release identity from health (Athena 4 synthesizes without codename). */\n  release: () => Promise<AthenaReleaseIdentity>;\n}\n\nexport interface InternalAthenaClient<TModels = never> {\n  admin: AthenaClientAdminModule;\n  auth: AthenaAuthBindings;\n  chat: AthenaChatModule;\n  db: AthenaDbModule<TModels>;\n  from<TModel extends AthenaModelTarget>(\n    model: TModel\n  ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>;\n  from<TTableName extends AthenaClientTableName<TModels>>(\n    table: TTableName,\n    options?: AthenaFromOptions\n  ): ClientTableQueryBuilder<TModels, TTableName>;\n  from<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\n    table: UntypedTableName<TModels>,\n    options?: AthenaFromOptions\n  ): TableQueryBuilder<Row, Insert, Update>;\n  /**\n   * GET /health (fallback GET /) with release identity normalization.\n   */\n  health: () => Promise<AthenaNormalizedHealth>;\n  /**\n   * Executes raw SQL through Athena's compatibility query surface.\n   *\n   * @deprecated Prefer `admin.query()` with explicit `operation` and `expectedShape`.\n   */\n  query: <Row = unknown>(\n    query: string,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<Row[]>>;\n  request: <T = unknown>(\n    options: AthenaRequestOptions\n  ) => Promise<AthenaRequestResponse<T>>;\n  rpc: <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions\n  ) => RpcQueryBuilder<Row>;\n  storage: AthenaStorageModule;\n  system: AthenaClientSystemModule;\n  verifyConnection: (\n    options?: AthenaGatewayConnectionOptions\n  ) => Promise<AthenaGatewayConnectionResult>;\n}\n\nexport interface InternalClientChatOptions\n  extends Pick<\n    AthenaRequestHeaderOverrideFields,\n    \"bearerToken\" | \"cookie\" | \"forceNoCache\" | \"headers\" | \"sessionToken\"\n  > {\n  webSocketFactory?: AthenaChatWebSocketFactory | null | undefined;\n  wsUrl?: string | null | undefined;\n}\n\nexport type InternalClientAuthOptions = Omit<\n  AthenaAuthClientConfig,\n  \"baseUrl\" | \"apiKey\" | \"bearerToken\" | \"cookie\" | \"sessionToken\"\n>;\n\nexport interface InternalClientConfig<\n  TModels extends AthenaClientModelsInput | never = never,\n> {\n  apiKey: string;\n  auth?: InternalClientAuthOptions;\n  authUrl?: string;\n  backend?: BackendConfig;\n  baseUrl: string;\n  behavior?: InternalClientBehaviorOptions;\n  chat?: InternalClientChatOptions;\n  chatUrl?: string;\n  chatWsUrl?: string;\n  client?: string | null | undefined;\n  /**\n   * Optional prebuilt gateway transport (HTTP client, Cloudflare D1 local, or test fake).\n   * When set, `createAthenaGatewayClient` is not constructed from baseUrl/apiKey.\n   * @see ADR 0015\n   */\n  gatewayTransport?: AthenaGatewayClient;\n  headers?: Record<string, string>;\n  jdbcUrl?: string | null | undefined;\n  models?: TModels;\n  /** Direct PostgreSQL URI forwarded as `x-pg-uri` on gateway requests. */\n  pgUri?: string | null | undefined;\n  storage?: AthenaStorageClientConfig;\n  storageUrl?: string;\n}\n\nexport interface InternalClientRequestContext {\n  accessScope?: string | null;\n  bearerToken?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  organizationId?: string | null;\n  policyRevision?: string | null;\n  sessionToken?: string | null;\n  userId?: string | null;\n}\n\nexport type InternalClientContextResolver = () =>\n  | InternalClientRequestContext\n  | undefined\n  | Promise<InternalClientRequestContext | undefined>;\n\nexport interface InternalAthenaClientCore<\n  TModels extends AthenaClientModelsInput | never = never,\n> {\n  readonly config: InternalClientConfig<TModels>;\n  readonly formatGatewayResult: AthenaResultFormatter;\n  readonly gatewayTransport: AthenaGatewayClient;\n  readonly normalizedAuthConfig: AthenaAuthClientConfig | undefined;\n  readonly queryTracer: AthenaQueryTracer | undefined;\n}\n\nfunction buildContextHeaders(\n  context: InternalClientRequestContext\n): Record<string, string> | undefined {\n  const headers: Record<string, string> = {};\n  if (\n    context.userId !== undefined &&\n    context.userId !== null &&\n    context.userId !== \"\"\n  ) {\n    headers[\"X-User-Id\"] = context.userId;\n  }\n  if (\n    context.organizationId !== undefined &&\n    context.organizationId !== null &&\n    context.organizationId !== \"\"\n  ) {\n    headers[\"X-Organization-Id\"] = context.organizationId;\n  }\n  Object.assign(headers, context.headers);\n  return Object.keys(headers).length > 0 ? headers : undefined;\n}\n\n/**\n * Normalize auth base for the auth module.\n *\n * Absolute http(s) URLs are validated like gateway bases (no query/hash).\n * Relative same-origin paths (e.g. `/api/auth`) are preserved — auth is not\n * a gateway URL and must not go through absolute-only gateway normalization.\n */\nfunction normalizeAuthClientBaseUrl(defaultBaseUrl: string): string {\n  const trimmed = defaultBaseUrl.trim();\n  if (!trimmed) {\n    throw new Error(\n      'Athena auth base URL must be a non-empty absolute http(s) URL or a path such as \"/api/auth\".'\n    );\n  }\n\n  // Same-origin / relative browser bases used by auth.routing \"same-origin\".\n  if (trimmed.startsWith(\"/\")) {\n    return trimmed.replace(/\\/+$/, \"\") || \"/\";\n  }\n\n  return normalizeAthenaGatewayBaseUrl(trimmed, {\n    label: \"Athena auth base URL\",\n  });\n}\n\nfunction normalizeAuthClientConfig(\n  auth: InternalClientAuthOptions | undefined,\n  defaultBaseUrl?: string\n): AthenaAuthClientConfig | undefined {\n  if (!auth && defaultBaseUrl === undefined) {\n    return;\n  }\n\n  const normalized: AthenaAuthClientConfig = {\n    ...(auth ?? {}),\n  };\n  const resolvedBaseUrl =\n    defaultBaseUrl !== undefined && defaultBaseUrl !== \"\"\n      ? normalizeAuthClientBaseUrl(defaultBaseUrl)\n      : undefined;\n\n  if (resolvedBaseUrl !== undefined) {\n    normalized.baseUrl = resolvedBaseUrl;\n  }\n  return normalized;\n}\n\nexport function createInternalClientCore<\n  TModels extends AthenaClientModelsInput | never = never,\n>(config: InternalClientConfig<TModels>): InternalAthenaClientCore<TModels> {\n  const normalizedAuthConfig = normalizeAuthClientConfig(\n    config.auth,\n    config.authUrl\n  );\n  const gatewayTransport =\n    config.gatewayTransport ??\n    createAthenaGatewayClient({\n      apiKey: config.apiKey,\n      backend: config.backend,\n      baseUrl: config.baseUrl,\n      client: config.client ?? undefined,\n      headers: config.headers,\n      jdbcUrl: config.jdbcUrl,\n      pgUri: config.pgUri,\n    });\n  return Object.freeze({\n    config,\n    formatGatewayResult: createResultFormatter(),\n    gatewayTransport,\n    normalizedAuthConfig,\n    queryTracer: createQueryTracer(config.behavior),\n  });\n}\n\nexport function createInternalClientView<\n  TModels extends AthenaClientModelsInput | never = never,\n>(\n  core: InternalAthenaClientCore<TModels>,\n  resolveContext: InternalClientContextResolver,\n  cacheContext?: AthenaCacheContextDescriptor\n): InternalAthenaClient<TModels> {\n  const { config, formatGatewayResult, normalizedAuthConfig, queryTracer } =\n    core;\n  const gateway = createAthenaGatewayClientView(\n    core.gatewayTransport,\n    async () => {\n      const context = await resolveContext();\n      return context\n        ? {\n            bearerToken: context.bearerToken,\n            cookie: context.cookie,\n            forceNoCache: context.forceNoCache,\n            headers: context.headers,\n            organizationId: context.organizationId,\n            sessionToken: context.sessionToken,\n            userId: context.userId,\n          }\n        : undefined;\n    }\n  );\n  const auth = createAuthModule(\n    {\n      ...(normalizedAuthConfig ?? {}),\n    },\n    {\n      async resolveCallOptions() {\n        const context = await resolveContext();\n        return context\n          ? {\n              bearerToken: context.bearerToken ?? undefined,\n              cookie: context.cookie ?? undefined,\n              forceNoCache: context.forceNoCache,\n              headers: buildContextHeaders(context),\n              sessionToken: context.sessionToken ?? undefined,\n            }\n          : undefined;\n      },\n    }\n  );\n  // Single implementation + cast avoids TS2589 deep overload expansion during dts.\n  const from = ((\n    tableOrModel: string | AthenaModelTarget,\n    options?: AthenaFromOptions\n  ) => {\n    if (isAthenaModelTarget(tableOrModel)) {\n      if (options?.schema !== undefined) {\n        throw new Error(\n          \"from(model) does not accept a schema override because the model already defines its target.\"\n        );\n      }\n      return createTableBuilder(\n        resolveAthenaModelTargetTableName(tableOrModel),\n        gateway,\n        formatGatewayResult,\n        queryTracer,\n        config.behavior,\n        {\n          cacheContext: cacheContext ?? peekSyncCacheContext(resolveContext),\n          model: tableOrModel,\n        }\n      );\n    }\n\n    const resolvedTableName = resolveTableNameForCall(\n      tableOrModel,\n      options?.schema\n    );\n    return createTableBuilder(\n      resolvedTableName,\n      gateway,\n      formatGatewayResult,\n      queryTracer,\n      config.behavior,\n      {\n        cacheContext: cacheContext ?? peekSyncCacheContext(resolveContext),\n      }\n    );\n  }) as AthenaDbModule<TModels>[\"from\"];\n  const rpc: InternalAthenaClient<TModels>[\"rpc\"] = <\n    Row = unknown,\n    Args extends AthenaJsonObject = AthenaJsonObject,\n  >(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions\n  ) => {\n    const normalizedFn = fn.trim();\n    if (!normalizedFn) {\n      throw new Error(\"rpc requires a function name\");\n    }\n    return createRpcBuilder<Row>(\n      normalizedFn,\n      args as AthenaJsonObject | undefined,\n      options,\n      gateway,\n      formatGatewayResult,\n      queryTracer,\n      captureTraceCallsite(queryTracer),\n      Boolean(config.behavior?.debugAst)\n    );\n  };\n  const deprecationOwner = Object.create(null) as object;\n  const compatibilityCache: AthenaCompatibilityCache =\n    createCompatibilityCache();\n  const adminQueryImpl = createAdminQuery({\n    client: gateway,\n    formatGatewayResult,\n  });\n  const admin: AthenaClientAdminModule = {\n    query: adminQueryImpl,\n  };\n  const query = createQueryBuilder(\n    gateway,\n    formatGatewayResult,\n    config.behavior,\n    queryTracer,\n    deprecationOwner\n  ) as InternalAthenaClient<TModels>[\"query\"];\n  const health = async (): Promise<AthenaNormalizedHealth> => {\n    const report = await discoverCompatibility({\n      apiKey: config.apiKey,\n      baseUrl: config.baseUrl,\n      cache: compatibilityCache,\n      headers: config.headers,\n    });\n    if (compatibilityCache.health) {\n      return compatibilityCache.health;\n    }\n    return {\n      message: null,\n      raw: null,\n      release: report.release,\n      status: null,\n      version:\n        report.server.version === \"unknown\" ? null : report.server.version,\n    };\n  };\n  const system: AthenaClientSystemModule = {\n    async compatibility() {\n      return discoverCompatibility({\n        apiKey: config.apiKey,\n        baseUrl: config.baseUrl,\n        cache: compatibilityCache,\n        headers: config.headers,\n      });\n    },\n    runtime() {\n      return {\n        auth: \"remote\",\n        database: \"gateway\",\n        runtime: \"node\",\n        storage: \"none\",\n      };\n    },\n    /**\n     * Internal/core path has no routing SSOT attachment; return empty diagnostics.\n     * Public createClient views always supply a real inspectAuth via v3 createClientView.\n     */\n    inspectAuth(options?: { requestOrigin?: string | null }) {\n      return toAthenaAuthDiagnostics(undefined, {\n        requestOrigin: options?.requestOrigin,\n      });\n    },\n    async release() {\n      const report = await system.compatibility();\n      return report.release;\n    },\n  };\n  const untypedDbFrom = from as unknown as <\n    Row = AthenaRowShape,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    table: string,\n    options?: AthenaFromOptions\n  ) => TableQueryBuilder<Row, Insert, Update>;\n\n  const createTransactionScopedDb = (\n    txGateway: ReturnType<typeof createAthenaGatewayClient>,\n    session: import(\"../db/transaction/coordinator.ts\").InteractiveTransactionSession\n  ): AthenaTransactionClient<TModels> => {\n    const txFrom = ((\n      tableOrModel: string | AthenaModelTarget,\n      options?: AthenaFromOptions\n    ) => {\n      if (isAthenaModelTarget(tableOrModel)) {\n        return createTableBuilder(\n          resolveAthenaModelTargetTableName(tableOrModel),\n          txGateway,\n          formatGatewayResult,\n          queryTracer,\n          config.behavior,\n          { model: tableOrModel }\n        );\n      }\n      return createTableBuilder(\n        resolveTableNameForCall(tableOrModel, options?.schema),\n        txGateway,\n        formatGatewayResult,\n        queryTracer,\n        config.behavior\n      );\n    }) as AthenaDbModule<TModels>[\"from\"];\n    const txUntypedFrom = txFrom as unknown as typeof untypedDbFrom;\n    const scoped = {\n      abort() {\n        session.abort();\n      },\n      delete(table: string, options?: AthenaGatewayCallOptions & { resourceId?: string }) {\n        return txUntypedFrom(table).delete(options);\n      },\n      from: txFrom,\n      insert(table: string, values: unknown, options?: AthenaGatewayCallOptions) {\n        return Array.isArray(values)\n          ? txUntypedFrom(table).insert(values as never, options)\n          : txUntypedFrom(table).insert(values as never, options);\n      },\n      select(\n        table: string,\n        first?: AthenaGatewayCallOptions | AthenaSelectInput,\n        second?: AthenaGatewayCallOptions\n      ) {\n        if (first && typeof first === \"object\" && !Array.isArray(first)) {\n          return txUntypedFrom(table).select(\n            undefined,\n            first as AthenaGatewayCallOptions\n          );\n        }\n        return txUntypedFrom(table).select(\n          first as AthenaSelectInput | undefined,\n          second\n        );\n      },\n      update(table: string, values: unknown, options?: AthenaGatewayCallOptions) {\n        return txUntypedFrom(table).update(values as never, options);\n      },\n      upsert(table: string, values: unknown, options?: AthenaGatewayCallOptions) {\n        return Array.isArray(values)\n          ? txUntypedFrom(table).upsert(values as never, options)\n          : txUntypedFrom(table).upsert(values as never, options);\n      },\n      async withSavepoint(callback: (tx: unknown) => Promise<unknown>) {\n        if (!session.transport.createSavepoint) {\n          throw new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_SAVEPOINT_UNSUPPORTED\",\n            `Savepoints are not supported by backend \"${session.capabilities.backend}\"`,\n            { backend: session.capabilities.backend }\n          );\n        }\n        session.savepointIndex += 1;\n        const name = nextInternalSavepointName(session.savepointIndex);\n        await session.transport.createSavepoint(name);\n        try {\n          const value = await callback(scoped);\n          await session.transport.releaseSavepoint?.(name);\n          return value;\n        } catch (error) {\n          await session.transport.rollbackToSavepoint?.(name);\n          throw error;\n        }\n      },\n      async withTransaction(callback: (tx: unknown) => Promise<unknown>) {\n        if (!session.capabilities.savepoints) {\n          throw new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_NESTING_UNSUPPORTED\",\n            `Nested withTransaction is not supported by backend \"${session.capabilities.backend}\"`,\n            { backend: session.capabilities.backend }\n          );\n        }\n        return scoped.withSavepoint(callback) as Promise<unknown>;\n      },\n    };\n    return scoped as unknown as AthenaTransactionClient<TModels>;\n  };\n\n  const db = {\n    delete<Row = AthenaRowShape>(\n      table: string,\n      options?: AthenaGatewayCallOptions & { resourceId?: string }\n    ) {\n      return untypedDbFrom<Row>(table).delete(options);\n    },\n    from,\n    insert<Row = AthenaRowShape, Insert = Partial<Row>>(\n      table: string,\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions\n    ) {\n      return Array.isArray(values)\n        ? untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(\n            values,\n            options\n          )\n        : untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(\n            values,\n            options\n          );\n    },\n    query,\n    rpc,\n    select<Row = AthenaRowShape>(\n      table: string,\n      first?: AthenaGatewayCallOptions | AthenaSelectInput,\n      second?: AthenaGatewayCallOptions\n    ) {\n      if (first && typeof first === \"object\" && !Array.isArray(first)) {\n        return untypedDbFrom<Row>(table).select(\n          undefined,\n          first as AthenaGatewayCallOptions\n        );\n      }\n      return untypedDbFrom<Row>(table).select(\n        first as AthenaSelectInput | undefined,\n        second\n      );\n    },\n    update<\n      Row = AthenaRowShape,\n      Insert = Partial<Row>,\n      Update = Partial<Insert>,\n    >(table: string, values: Update, options?: AthenaGatewayCallOptions) {\n      return untypedDbFrom<Row, Insert, Update>(table).update(values, options);\n    },\n    upsert<\n      Row = AthenaRowShape,\n      Insert = Partial<Row>,\n      Update = Partial<Insert>,\n    >(\n      table: string,\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions & {\n        updateBody?: Update;\n        onConflict?: string | string[];\n      }\n    ) {\n      return Array.isArray(values)\n        ? untypedDbFrom<Row, Insert, Update>(table).upsert(values, options)\n        : untypedDbFrom<Row, Insert, Update>(table).upsert(values, options);\n    },\n    transaction(operations, options?: AthenaTransactionOptions) {\n      return executeAtomicTransaction({\n        formatGatewayResult,\n        gateway,\n        operations,\n        options,\n      });\n    },\n    async withTransaction(callback, options?: AthenaTransactionOptions) {\n      const session = await beginInteractiveSession({\n        gateway,\n        options,\n      });\n      const txGateway = createInteractiveGatewayClient(gateway, session);\n      const tx = createTransactionScopedDb(txGateway, session);\n      try {\n        const value = await callback(tx);\n        await finishInteractiveSession({\n          committedOperations: [],\n          committedResults: [],\n          session,\n        });\n        return value;\n      } catch (error) {\n        try {\n          await session.transport.rollback();\n        } catch {\n          // Prefer the original error.\n        }\n        throw error;\n      }\n    },\n  } as AthenaDbModule<TModels>;\n  const chat = createChatModule(\n    {\n      apiKey: config.apiKey,\n      baseUrl: config.chatUrl,\n      bearerToken: config.chat?.bearerToken ?? undefined,\n      client: config.client ?? undefined,\n      cookie: config.chat?.cookie ?? undefined,\n      forceNoCache: config.chat?.forceNoCache ?? undefined,\n      headers: {\n        ...(config.headers ?? {}),\n        ...(config.chat?.headers ?? {}),\n      },\n      sessionToken: config.chat?.sessionToken ?? undefined,\n      webSocketFactory: config.chat?.webSocketFactory ?? undefined,\n      wsUrl: config.chatWsUrl,\n    },\n    {\n      async resolveCallOptions() {\n        const context = await resolveContext();\n        return context\n          ? {\n              bearerToken: context.bearerToken,\n              cookie: context.cookie,\n              forceNoCache: context.forceNoCache,\n              headers: buildContextHeaders(context),\n              sessionToken: context.sessionToken,\n            }\n          : undefined;\n      },\n    }\n  );\n  const request = createAthenaRequest(config, resolveContext);\n  const storage = createStorageModule(gateway, {\n    ...config.storage,\n    ...(config.storageUrl\n      ? {\n          baseUrl: config.storageUrl,\n          stripBasePath: true,\n        }\n      : {}),\n  });\n\n  return {\n    admin,\n    auth: auth.auth,\n    chat,\n    db,\n    from,\n    health,\n    query,\n    request,\n    rpc,\n    storage,\n    system,\n    verifyConnection: gateway.verifyConnection,\n  } as InternalAthenaClient<TModels>;\n}\n","import {\n  D1_BATCH_TRANSACTION_CAPABILITIES,\n  GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES,\n  POSTGRES_DIRECT_TRANSACTION_CAPABILITIES,\n} from \"../db/transaction/types.ts\";\nimport type { AthenaClientCapabilities } from \"./types.ts\";\n\nexport function createGatewayCapabilities(options?: {\n  engine?: AthenaClientCapabilities[\"db\"][\"engine\"];\n  authRemote?: boolean;\n  /** When false/undefined, storage flags match an unconfigured storage namespace. */\n  storageConfigured?: boolean;\n  storageCatalogs?: boolean;\n  storageBackups?: boolean;\n}): AthenaClientCapabilities {\n  const storageConfigured = options?.storageConfigured ?? true;\n  return {\n    auth: {\n      remote: options?.authRemote ?? true,\n    },\n    db: {\n      engine: options?.engine ?? \"postgresql\",\n      layers: {\n        findManyAst: true,\n        flatCrud: true,\n        query: true,\n        relations: true,\n        rpc: true,\n      },\n      local: false,\n      transactions: GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES,\n    },\n    mode: \"gateway\",\n    storage: {\n      backups: storageConfigured ? (options?.storageBackups ?? true) : false,\n      catalogs: storageConfigured ? (options?.storageCatalogs ?? true) : false,\n      local: false,\n      objects: storageConfigured,\n    },\n  };\n}\n\nexport function createCloudflareEdgeCapabilities(options: {\n  hasR2: boolean;\n  /** Hybrid remote Athena root / storage URL enables HTTP storage ports. */\n  hasRemoteStorage?: boolean;\n  authRemote: boolean;\n  findManyAst?: boolean;\n  flatCrud?: boolean;\n  query?: boolean;\n  relations?: boolean;\n  rpc?: boolean;\n}): AthenaClientCapabilities {\n  const hasRemoteStorage = Boolean(options.hasRemoteStorage);\n  const hasObjects = options.hasR2 || hasRemoteStorage;\n  return {\n    auth: {\n      remote: options.authRemote,\n    },\n    db: {\n      engine: \"cloudflare-d1\",\n      layers: {\n        findManyAst: options.findManyAst ?? true,\n        flatCrud: options.flatCrud ?? true,\n        query: options.query ?? true,\n        relations: options.relations ?? true,\n        rpc: options.rpc ?? false,\n      },\n      local: true,\n      transactions: D1_BATCH_TRANSACTION_CAPABILITIES,\n    },\n    mode: \"cloudflare-edge\",\n    storage: {\n      // Catalogs/backups are HTTP product ports — only when remote storage is wired.\n      backups: hasRemoteStorage,\n      catalogs: hasRemoteStorage,\n      // Local objects only when an R2 binding is present.\n      local: options.hasR2,\n      // Remote hybrid root can still expose storage.objects via the HTTP API.\n      objects: hasObjects,\n    },\n  };\n}\n\n/**\n * Capabilities for Node direct PostgreSQL (`db.pgUri`).\n * Uses gateway mode string with local+engine discrimination (AD-02).\n */\nexport function createPostgresDirectCapabilities(options?: {\n  authRemote?: boolean;\n  storageConfigured?: boolean;\n  findManyAst?: boolean;\n  flatCrud?: boolean;\n  query?: boolean;\n  relations?: boolean;\n  rpc?: boolean;\n}): AthenaClientCapabilities {\n  const storageConfigured = options?.storageConfigured ?? false;\n  return {\n    auth: {\n      remote: options?.authRemote ?? false,\n    },\n    db: {\n      engine: \"postgresql\",\n      layers: {\n        findManyAst: options?.findManyAst ?? true,\n        flatCrud: options?.flatCrud ?? true,\n        query: options?.query ?? true,\n        relations: options?.relations ?? true,\n        rpc: options?.rpc ?? true,\n      },\n      local: true,\n      transactions: POSTGRES_DIRECT_TRANSACTION_CAPABILITIES,\n    },\n    mode: \"gateway\",\n    storage: {\n      backups: storageConfigured,\n      catalogs: storageConfigured,\n      local: false,\n      objects: storageConfigured,\n    },\n  };\n}\n","/**\n * Structural Cloudflare binding types used by the edge-local adapter.\n * Avoids a hard dependency on `@cloudflare/workers-types`.\n */\n\nimport type { AthenaTransactionCapabilities } from \"../db/transaction/types.ts\";\n\nexport interface D1PreparedStatementLike {\n  /**\n   * Non-generic statement results keep mock bindings assignable under strict\n   * function types. Callers narrow `results` as needed.\n   */\n  all: () => Promise<D1ResultLike>;\n  bind: (...values: unknown[]) => D1PreparedStatementLike;\n  first: <T = Record<string, unknown>>(colName?: string) => Promise<T | null>;\n  run: () => Promise<D1ResultLike>;\n}\n\nexport interface D1ResultLike<T = Record<string, unknown>> {\n  error?: string;\n  meta?: {\n    duration?: number;\n    changes?: number;\n    last_row_id?: number;\n    rows_read?: number;\n    rows_written?: number;\n    [key: string]: unknown;\n  };\n  results?: T[];\n  success?: boolean;\n}\n\nexport interface D1ExecResultLike {\n  count: number;\n  duration: number;\n}\n\nexport interface D1SessionLike {\n  /**\n   * Batch statements. Non-generic return keeps Worker/mocks assignable under\n   * strict function types (real D1 is heterogeneous per statement).\n   */\n  batch: (statements: D1PreparedStatementLike[]) => Promise<D1ResultLike[]>;\n  /** Sessions may not expose exec (Wrangler D1DatabaseSession). */\n  exec?: (query: string) => Promise<D1ExecResultLike>;\n  getBookmark: () => string | null;\n  prepare: (query: string) => D1PreparedStatementLike;\n}\n\nexport interface D1DatabaseLike {\n  /**\n   * Batch statements. Non-generic return keeps Worker/mocks assignable under\n   * strict function types (real D1 is heterogeneous per statement).\n   */\n  batch: (statements: D1PreparedStatementLike[]) => Promise<D1ResultLike[]>;\n  exec: (query: string) => Promise<D1ExecResultLike>;\n  prepare: (query: string) => D1PreparedStatementLike;\n  withSession?: (constraintOrBookmark: string) => D1SessionLike;\n}\n\nexport interface R2ObjectBodyLike {\n  arrayBuffer: () => Promise<ArrayBuffer>;\n  blob: () => Promise<Blob>;\n  customMetadata?: Record<string, string>;\n  etag?: string;\n  httpEtag?: string;\n  httpMetadata?: { contentType?: string; [key: string]: unknown };\n  json: <T = unknown>() => Promise<T>;\n  key: string;\n  size: number;\n  text: () => Promise<string>;\n  uploaded?: Date;\n}\n\nexport interface R2ObjectsListLike {\n  cursor?: string;\n  delimitedPrefixes?: string[];\n  objects: Array<{\n    key: string;\n    size: number;\n    etag?: string;\n    uploaded?: Date;\n  }>;\n  truncated: boolean;\n}\n\nexport interface R2BucketLike {\n  delete: (keys: string | string[]) => Promise<void>;\n  get: (key: string) => Promise<R2ObjectBodyLike | null>;\n  list: (options?: {\n    prefix?: string;\n    limit?: number;\n    cursor?: string;\n    delimiter?: string;\n  }) => Promise<R2ObjectsListLike>;\n  put: (\n    key: string,\n    value:\n      | ReadableStream\n      | ArrayBuffer\n      | ArrayBufferView\n      | string\n      | Blob\n      | null,\n    options?: {\n      httpMetadata?: { contentType?: string; [key: string]: unknown };\n      customMetadata?: Record<string, string>;\n    }\n  ) => Promise<unknown>;\n}\n\nexport type AthenaClientCapabilitiesMode = \"gateway\" | \"cloudflare-edge\";\n\nexport interface AthenaDbLayerCapabilities {\n  findManyAst: boolean;\n  flatCrud: boolean;\n  query: boolean;\n  relations: boolean;\n  rpc: boolean;\n}\n\nexport interface AthenaDbCapabilities {\n  engine: \"postgresql\" | \"cloudflare-d1\" | \"unknown\";\n  layers: AthenaDbLayerCapabilities;\n  local: boolean;\n  transactions: AthenaTransactionCapabilities;\n}\n\nexport interface AthenaStorageCapabilities {\n  backups: boolean;\n  catalogs: boolean;\n  local: boolean;\n  objects: boolean;\n}\n\nexport interface AthenaAuthCapabilities {\n  remote: boolean;\n}\n\nexport interface AthenaClientCapabilities {\n  auth: AthenaAuthCapabilities;\n  db: AthenaDbCapabilities;\n  mode: AthenaClientCapabilitiesMode;\n  storage: AthenaStorageCapabilities;\n}\n\nexport const CLOUDFLARE_EDGE_BASE_URL = \"https://athena.local/cloudflare-edge\";\nexport const CLOUDFLARE_EDGE_API_KEY = \"cloudflare-edge-local\";\n","/**\n * Pure D1 execution helpers shared by edge-local SDK transport and (later)\n * apps/cloudflare-d1-proxy.\n */\n\nimport type {\n  D1DatabaseLike,\n  D1ExecResultLike,\n  D1ResultLike,\n  D1SessionLike,\n} from \"../types.ts\";\n\nexport interface D1RunnerSessionInput {\n  bookmark?: string | null;\n  sessionMode?: string | null;\n}\n\nexport type D1QueryInput = D1RunnerSessionInput & {\n  query: string;\n  params?: unknown[];\n};\n\nexport interface D1BatchStatementInput {\n  params?: unknown[];\n  query: string;\n}\n\nexport type D1BatchInput = D1RunnerSessionInput & {\n  statements: D1BatchStatementInput[];\n};\n\nexport interface D1RunnerQuerySuccess {\n  bookmark: string | null;\n  columns: string[];\n  count: number;\n  durationMs?: number;\n  meta: Record<string, unknown>;\n  ok: true;\n  rows: unknown[];\n  statementCount?: number;\n}\n\nexport interface D1RunnerQueryFailure {\n  error: string;\n  message: string;\n  ok: false;\n}\n\nexport type D1RunnerQueryResult = D1RunnerQuerySuccess | D1RunnerQueryFailure;\n\nexport interface D1RunnerBatchSuccess {\n  bookmark: string | null;\n  ok: true;\n  results: D1ResultLike<unknown>[];\n}\n\nexport type D1RunnerBatchResult = D1RunnerBatchSuccess | D1RunnerQueryFailure;\n\nfunction resultColumns(rows: unknown[]): string[] {\n  const first = rows.find(\n    (value) => value && typeof value === \"object\" && !Array.isArray(value)\n  );\n  if (!first) {\n    return [];\n  }\n  return Object.keys(first as Record<string, unknown>);\n}\n\nfunction isIdentChar(ch: string | undefined): boolean {\n  if (!ch) {\n    return false;\n  }\n  return /[A-Za-z0-9_]/.test(ch);\n}\n\n/**\n * Scan SQL while tracking string/identifier literals and comments.\n * Invokes `onKeyword` for each bare identifier token outside those regions.\n * Return true from the callback to stop early.\n */\nfunction scanSqlKeywordsOutsideLiterals(\n  sql: string,\n  onKeyword: (keyword: string, index: number) => boolean | undefined\n): void {\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      continue;\n    }\n\n    if (!isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n      continue;\n    }\n\n    let end = i + 1;\n    while (end < sql.length && isIdentChar(sql[end])) {\n      end += 1;\n    }\n    const keyword = sql.slice(i, end);\n    if (onKeyword(keyword, i)) {\n      return;\n    }\n    i = end - 1;\n  }\n}\n\n/**\n * True when `keyword` appears as a SQL keyword outside string/identifier literals\n * and comments (case-insensitive). Used so `RETURNING` inside string values does\n * not force the all() result path.\n */\nexport function sqlContainsKeywordOutsideLiterals(\n  sql: string,\n  keyword: string\n): boolean {\n  const target = keyword.toUpperCase();\n  let found = false;\n  scanSqlKeywordsOutsideLiterals(sql, (token) => {\n    if (token.toUpperCase() === target) {\n      found = true;\n      return true;\n    }\n    return false;\n  });\n  return found;\n}\n\n/**\n * First bare SQL keyword outside leading comments / whitespace / literals.\n * Used so `-- note\\nSELECT …` still classifies as row-producing.\n */\nexport function sqlFirstKeywordOutsideLiterals(sql: string): string | null {\n  let first: string | null = null;\n  scanSqlKeywordsOutsideLiterals(sql, (token) => {\n    first = token;\n    return true;\n  });\n  return first;\n}\n\n// VALUES is a row-producing statement in SQLite (not a mutation); WITH … VALUES too.\nconst ROW_PRODUCING_LEAD_KEYWORDS = new Set([\n  \"SELECT\",\n  \"PRAGMA\",\n  \"EXPLAIN\",\n  \"VALUES\",\n]);\nconst MUTATION_LEAD_KEYWORDS = new Set([\n  \"INSERT\",\n  \"UPDATE\",\n  \"DELETE\",\n  \"REPLACE\",\n]);\n/** Keywords that open the statement body after a WITH cte-list (SQLite). */\nconst WITH_TERMINAL_KEYWORDS = new Set([\n  \"SELECT\",\n  \"INSERT\",\n  \"UPDATE\",\n  \"DELETE\",\n  \"REPLACE\",\n  \"VALUES\",\n  \"PRAGMA\",\n  \"EXPLAIN\",\n]);\n\n/**\n * After a leading `WITH`, find the main statement keyword (SELECT/UPDATE/…)\n * at paren depth 0, skipping CTE bodies. Nested SELECTs inside `AS (…)` are ignored.\n */\nexport function sqlTerminalKeywordAfterWith(sql: string): string | null {\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n  let depth = 0;\n  let sawWith = false;\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      continue;\n    }\n\n    if (ch === \"(\") {\n      depth += 1;\n      continue;\n    }\n    if (ch === \")\") {\n      if (depth > 0) {\n        depth -= 1;\n      }\n      continue;\n    }\n\n    if (depth !== 0 || !isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n      continue;\n    }\n\n    let end = i + 1;\n    while (end < sql.length && isIdentChar(sql[end])) {\n      end += 1;\n    }\n    const keyword = sql.slice(i, end);\n    const upper = keyword.toUpperCase();\n\n    if (!sawWith) {\n      if (upper === \"WITH\") {\n        sawWith = true;\n      }\n      i = end - 1;\n      continue;\n    }\n\n    // Inside WITH cte-list at depth 0: RECURSIVE / names / AS / MATERIALIZED …\n    // Terminal main statement is the first recognized opener after CTE bodies.\n    if (WITH_TERMINAL_KEYWORDS.has(upper)) {\n      return keyword;\n    }\n    i = end - 1;\n  }\n  return null;\n}\n\n/**\n * Lead keyword used for all()/run() classification. For `WITH …`, returns the\n * terminal statement keyword so CTE mutations are not treated as SELECT.\n */\nexport function sqlLeadStatementKeyword(sql: string): string | null {\n  const first = sqlFirstKeywordOutsideLiterals(sql);\n  if (!first) {\n    return null;\n  }\n  if (first.toUpperCase() !== \"WITH\") {\n    return first;\n  }\n  return sqlTerminalKeywordAfterWith(sql) ?? first;\n}\n\n/**\n * Whether a prepared statement is expected to return a result set via all().\n * Leading comments, CTE terminal statements, and RETURNING (outside literals)\n * are handled.\n */\nexport function statementExpectsResultRows(sql: string): boolean {\n  const lead = sqlLeadStatementKeyword(sql);\n  if (lead) {\n    const upper = lead.toUpperCase();\n    if (ROW_PRODUCING_LEAD_KEYWORDS.has(upper)) {\n      return true;\n    }\n    // WITH … UPDATE/INSERT/DELETE without RETURNING → metadata path (run()).\n    if (MUTATION_LEAD_KEYWORDS.has(upper)) {\n      return sqlContainsKeywordOutsideLiterals(sql, \"RETURNING\");\n    }\n    // Unrecognized lead after WITH: fall through to RETURNING check.\n  }\n  return sqlContainsKeywordOutsideLiterals(sql, \"RETURNING\");\n}\n\n/** Flatten D1 batch statement results into a single row array for client.query. */\nfunction collectRowsFromBatchResults(\n  results: D1ResultLike<unknown>[]\n): unknown[] {\n  const rows: unknown[] = [];\n  for (const item of results) {\n    if (Array.isArray(item.results) && item.results.length > 0) {\n      rows.push(...item.results);\n    }\n  }\n  return rows;\n}\n\n/** Sum D1 `meta.changes` across batch items; fall back to statement count. */\nfunction sumBatchAffectedRows(\n  results: D1ResultLike<unknown>[],\n  statementCount: number\n): number {\n  let sum = 0;\n  let sawChanges = false;\n  for (const item of results) {\n    const changes = item.meta?.changes;\n    if (typeof changes === \"number\") {\n      sum += changes;\n      sawChanges = true;\n    }\n  }\n  return sawChanges ? sum : statementCount;\n}\n\n/** Word-boundary keyword match at `index` (ASCII identifiers / SQL keywords). */\nfunction matchSqlKeywordAt(\n  query: string,\n  index: number,\n  keyword: string\n): number | null {\n  const len = keyword.length;\n  if (index + len > query.length) {\n    return null;\n  }\n  const slice = query.slice(index, index + len);\n  if (slice.toLowerCase() !== keyword.toLowerCase()) {\n    return null;\n  }\n  const before = index === 0 ? \"\" : query[index - 1]!;\n  const after = index + len >= query.length ? \"\" : query[index + len]!;\n  const isIdent = (c: string) => /[A-Za-z0-9_]/.test(c);\n  if (before && isIdent(before)) {\n    return null;\n  }\n  if (after && isIdent(after)) {\n    return null;\n  }\n  return len;\n}\n\n/**\n * Split SQL into statements without treating `;` inside string literals,\n * quoted identifiers, comments, or SQLite trigger bodies as separators.\n *\n * Trigger DDL (`CREATE TRIGGER ... BEGIN ...; ...; END`) keeps the body as one\n * statement. Nested `CASE ... END` inside the body does not close the trigger.\n * Bare transaction `BEGIN` / `BEGIN TRANSACTION` is not treated as a body opener.\n */\nexport function splitSqlStatements(query: string): string[] {\n  const statements: string[] = [];\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n  let segmentStart = 0;\n  let segmentHasContent = false;\n\n  /** After `CREATE TRIGGER`, wait for the body-opening `BEGIN`. */\n  let awaitTriggerBegin = false;\n  /** Depth of open `CREATE TRIGGER ... BEGIN` bodies (normally 0 or 1). */\n  let triggerBodyDepth = 0;\n  /** Nested `CASE` expressions so their `END` does not close a trigger body. */\n  let caseDepth = 0;\n\n  const flushSegment = (end: number) => {\n    if (!segmentHasContent) {\n      segmentStart = end + 1;\n      return;\n    }\n    const sql = query.slice(segmentStart, end).trim();\n    if (sql) {\n      statements.push(sql);\n    }\n    segmentHasContent = false;\n    segmentStart = end + 1;\n    awaitTriggerBegin = false;\n    triggerBodyDepth = 0;\n    caseDepth = 0;\n  };\n\n  for (let i = 0; i < query.length; i += 1) {\n    const ch = query[i]!;\n    const next = query[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        inBlockComment = false;\n        i += 1;\n      }\n      continue;\n    }\n\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n\n    // SQLite also allows `backtick` and [bracket] identifiers.\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n\n    if (ch === \"'\") {\n      inSingle = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      inDouble = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    if (ch === \"`\") {\n      inBacktick = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    if (ch === \"[\") {\n      inBracket = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    // Structural keywords that affect statement boundaries (trigger bodies / CASE).\n    if (/[A-Za-z_]/.test(ch)) {\n      const createLen = matchSqlKeywordAt(query, i, \"CREATE\");\n      if (createLen !== null) {\n        // CREATE [TEMP|TEMPORARY] TRIGGER [IF NOT EXISTS] …\n        // SQLite allows whitespace and comments between these keywords.\n        let j = i + createLen;\n        const skipWsAndComments = () => {\n          while (j < query.length) {\n            const c = query[j]!;\n            const n = query[j + 1];\n            if (/\\s/.test(c)) {\n              j += 1;\n              continue;\n            }\n            if (c === \"-\" && n === \"-\") {\n              j += 2;\n              while (\n                j < query.length &&\n                query[j] !== \"\\n\" &&\n                query[j] !== \"\\r\"\n              ) {\n                j += 1;\n              }\n              continue;\n            }\n            if (c === \"/\" && n === \"*\") {\n              j += 2;\n              while (j < query.length) {\n                if (query[j] === \"*\" && query[j + 1] === \"/\") {\n                  j += 2;\n                  break;\n                }\n                j += 1;\n              }\n              continue;\n            }\n            break;\n          }\n        };\n        skipWsAndComments();\n        const tempLen =\n          matchSqlKeywordAt(query, j, \"TEMPORARY\") ??\n          matchSqlKeywordAt(query, j, \"TEMP\");\n        if (tempLen !== null) {\n          j += tempLen;\n          skipWsAndComments();\n        }\n        const triggerLen = matchSqlKeywordAt(query, j, \"TRIGGER\");\n        if (triggerLen !== null) {\n          awaitTriggerBegin = true;\n          segmentHasContent = true;\n          i += createLen - 1;\n          continue;\n        }\n        segmentHasContent = true;\n        i += createLen - 1;\n        continue;\n      }\n\n      const caseLen = matchSqlKeywordAt(query, i, \"CASE\");\n      if (caseLen !== null) {\n        caseDepth += 1;\n        segmentHasContent = true;\n        i += caseLen - 1;\n        continue;\n      }\n\n      const beginLen = matchSqlKeywordAt(query, i, \"BEGIN\");\n      if (beginLen !== null) {\n        if (awaitTriggerBegin) {\n          triggerBodyDepth += 1;\n          awaitTriggerBegin = false;\n        }\n        segmentHasContent = true;\n        i += beginLen - 1;\n        continue;\n      }\n\n      const endLen = matchSqlKeywordAt(query, i, \"END\");\n      if (endLen !== null) {\n        if (caseDepth > 0) {\n          caseDepth -= 1;\n        } else if (triggerBodyDepth > 0) {\n          triggerBodyDepth -= 1;\n        }\n        segmentHasContent = true;\n        i += endLen - 1;\n        continue;\n      }\n\n      // Consume the rest of this identifier so we do not re-scan mid-token.\n      let j = i + 1;\n      while (j < query.length && /[A-Za-z0-9_]/.test(query[j]!)) {\n        j += 1;\n      }\n      segmentHasContent = true;\n      i = j - 1;\n      continue;\n    }\n\n    if (ch === \";\") {\n      // Keep trigger bodies (and any nested CASE) as a single statement.\n      if (triggerBodyDepth > 0 || caseDepth > 0) {\n        segmentHasContent = true;\n        continue;\n      }\n      flushSegment(i);\n      continue;\n    }\n\n    if (!/\\s/.test(ch)) {\n      segmentHasContent = true;\n    }\n  }\n\n  flushSegment(query.length);\n  return statements;\n}\n\n/**\n * Detect multiple SQL statements without treating `;` inside string literals,\n * quoted identifiers, comments, or trigger bodies as separators.\n */\nexport function isMultiStatement(query: string): boolean {\n  return splitSqlStatements(query).length > 1;\n}\n\nfunction resolveSessionTarget(\n  db: D1DatabaseLike,\n  input: D1RunnerSessionInput\n): { target: D1DatabaseLike | D1SessionLike; session: D1SessionLike | null } {\n  const sessionValue = input.bookmark?.trim() || input.sessionMode?.trim();\n  if (!sessionValue) {\n    return { session: null, target: db };\n  }\n  if (typeof db.withSession !== \"function\") {\n    throw new Error(\n      \"D1 session mode/bookmark requested but withSession is not available\"\n    );\n  }\n  const session = db.withSession(sessionValue);\n  return { session, target: session };\n}\n\n/**\n * D1 prepared-statement bind rejects JS booleans (parameter-type error).\n * Map true→1 / false→0 so .eq('pending', true) and insert bodies work.\n */\nfunction normalizeD1BindParams(params: unknown[]): unknown[] {\n  return params.map((value) => {\n    if (typeof value === \"boolean\") {\n      return value ? 1 : 0;\n    }\n    return value;\n  });\n}\n\n/**\n * Execute a single query (or multi-statement `exec`) against a D1 binding.\n */\nexport async function executeD1Query(\n  db: D1DatabaseLike,\n  input: D1QueryInput\n): Promise<D1RunnerQueryResult> {\n  const query = input.query?.trim();\n  if (!query) {\n    return { error: \"invalid_query\", message: \"query is required\", ok: false };\n  }\n\n  const params = normalizeD1BindParams(\n    Array.isArray(input.params) ? input.params : []\n  );\n  const { target, session } = resolveSessionTarget(db, input);\n\n  if (isMultiStatement(query)) {\n    if (params.length > 0) {\n      return {\n        error: \"invalid_query\",\n        message: \"params are only supported for single prepared statements\",\n        ok: false,\n      };\n    }\n    const resolveBookmark = (): string | null => session?.getBookmark() ?? null;\n    const parts = splitSqlStatements(query);\n    // Prefer batch over exec so row-producing statements (SELECT …) surface\n    // results — D1 exec() only returns statement counts, not result sets.\n    // Sessions also lack exec(); batch(prepare) works on both targets.\n    if (typeof target.batch === \"function\") {\n      const prepared = parts.map((part) => target.prepare(part));\n      const results = await target.batch(prepared);\n      const rows = collectRowsFromBatchResults(results);\n      return {\n        bookmark: resolveBookmark(),\n        columns: resultColumns(rows),\n        // Prefer returned rows; otherwise sum mutation meta.changes (not statement count).\n        count:\n          rows.length > 0\n            ? rows.length\n            : sumBatchAffectedRows(results, parts.length),\n        meta: { results, statementCount: parts.length },\n        ok: true,\n        rows,\n        statementCount: parts.length,\n      };\n    }\n    const canExec =\n      typeof (target as D1DatabaseLike).exec === \"function\" && !session;\n    if (canExec) {\n      const execResult: D1ExecResultLike = await (\n        target as D1DatabaseLike\n      ).exec?.(query);\n      return {\n        bookmark: resolveBookmark(),\n        columns: [],\n        count: execResult.count,\n        durationMs: execResult.duration,\n        meta: { statementCount: execResult.count },\n        ok: true,\n        rows: [],\n        statementCount: execResult.count,\n      };\n    }\n    return {\n      error: \"invalid_query\",\n      message: \"multi-statement query requires D1 batch() or exec() support\",\n      ok: false,\n    };\n  }\n\n  let statement = target.prepare(query);\n  if (params.length > 0) {\n    statement = statement.bind(...params);\n  }\n\n  // Prefer .all() when the statement returns rows. Real D1 bindings only expose\n  // RETURNING result sets via all()/first() — run() is metadata-oriented and can\n  // yield empty results for INSERT/UPDATE/DELETE … RETURNING.\n  // Skip leading comments and detect RETURNING only outside literals/comments.\n  const expectsRows = statementExpectsResultRows(query);\n  const result = expectsRows ? await statement.all() : await statement.run();\n  if (result.success === false) {\n    const errorField = (result as { error?: unknown }).error;\n    const message =\n      typeof errorField === \"string\" && errorField.trim()\n        ? errorField\n        : \"D1 query failed\";\n    return {\n      error: \"query_failed\",\n      message,\n      ok: false,\n    };\n  }\n  const rows = Array.isArray(result.results) ? result.results : [];\n  const bookmark = session?.getBookmark() ?? null;\n  const meta = (result.meta ?? {}) as Record<string, unknown>;\n  const changes =\n    typeof meta.changes === \"number\"\n      ? meta.changes\n      : typeof result.meta?.changes === \"number\"\n        ? result.meta.changes\n        : undefined;\n\n  return {\n    bookmark,\n    columns: resultColumns(rows),\n    count: expectsRows ? rows.length : (changes ?? rows.length),\n    durationMs:\n      typeof result.meta?.duration === \"number\"\n        ? result.meta.duration\n        : undefined,\n    meta,\n    ok: true,\n    rows,\n  };\n}\n\n/**\n * Execute a batch of prepared statements against a D1 binding.\n */\nexport async function executeD1Batch(\n  db: D1DatabaseLike,\n  input: D1BatchInput\n): Promise<D1RunnerBatchResult> {\n  const statements = Array.isArray(input.statements) ? input.statements : [];\n  if (statements.length === 0) {\n    return {\n      error: \"invalid_batch\",\n      message: \"statements must contain at least one item\",\n      ok: false,\n    };\n  }\n\n  const { target, session } = resolveSessionTarget(db, input);\n  const prepared = statements.map((item) => {\n    const query = item.query?.trim();\n    if (!query) {\n      throw new Error(\"statements[].query is required\");\n    }\n    const params = normalizeD1BindParams(\n      Array.isArray(item.params) ? item.params : []\n    );\n    let statement = target.prepare(query);\n    if (params.length > 0) {\n      statement = statement.bind(...params);\n    }\n    return statement;\n  });\n\n  const results = await target.batch(prepared);\n  const bookmark = session?.getBookmark() ?? null;\n  return {\n    bookmark,\n    ok: true,\n    results,\n  };\n}\n","import type {\n\tModelRelationKind,\n\tModelRelationMetadata,\n} from \"../../schema/types.ts\";\nimport type { AthenaSourceAst } from \"./ast.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\n\nexport type AthenaRelationCardinality =\n\t| \"one-to-one\"\n\t| \"one-to-many\"\n\t| \"many-to-one\"\n\t| \"many-to-many\";\n\nexport interface AthenaRelationEnd {\n\tcolumns: string[];\n\tschema?: string;\n\ttable: string;\n}\n\nexport interface AthenaRelationDescriptor {\n\tcardinality: AthenaRelationCardinality;\n\tfrom: AthenaRelationEnd;\n\tid: string;\n\tjunction?: {\n\t\tfromColumns: string[];\n\t\tschema?: string;\n\t\ttable: string;\n\t\ttoColumns: string[];\n\t};\n\tname: string;\n\tto: AthenaRelationEnd;\n}\n\nexport interface AthenaRelationCatalog {\n\tentries: AthenaRelationDescriptor[];\n}\n\nfunction sameTable(\n\tleft: { schema?: string; table: string },\n\tright: { schema?: string; table: string },\n): boolean {\n\tif (left.table !== right.table) {\n\t\treturn false;\n\t}\n\tif (left.schema && right.schema) {\n\t\treturn left.schema === right.schema;\n\t}\n\treturn true;\n}\n\nfunction invertCardinality(\n\tcardinality: AthenaRelationCardinality,\n): AthenaRelationCardinality {\n\tif (cardinality === \"one-to-many\") {\n\t\treturn \"many-to-one\";\n\t}\n\tif (cardinality === \"many-to-one\") {\n\t\treturn \"one-to-many\";\n\t}\n\treturn cardinality;\n}\n\nexport function catalogFromModelRelations(input: {\n\tschema?: string;\n\ttable: string;\n\trelations: Record<string, ModelRelationMetadata>;\n}): AthenaRelationCatalog {\n\tconst entries: AthenaRelationDescriptor[] = [];\n\tfor (const [name, relation] of Object.entries(input.relations)) {\n\t\tentries.push({\n\t\t\tcardinality: relation.kind as ModelRelationKind,\n\t\t\tfrom: {\n\t\t\t\tcolumns: relation.sourceColumns.map(String),\n\t\t\t\tschema: input.schema,\n\t\t\t\ttable: input.table,\n\t\t\t},\n\t\t\tid: `${input.schema ?? \"_\"}.${input.table}.${name}`,\n\t\t\tjunction: relation.through\n\t\t\t\t? {\n\t\t\t\t\t\tfromColumns: relation.through.sourceColumns.map(String),\n\t\t\t\t\t\tschema: relation.through.schema,\n\t\t\t\t\t\ttable: relation.through.model,\n\t\t\t\t\t\ttoColumns: relation.through.targetColumns.map(String),\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\tname,\n\t\t\tto: {\n\t\t\t\tcolumns: relation.targetColumns.map(String),\n\t\t\t\tschema: relation.targetSchema,\n\t\t\t\ttable: relation.targetModel,\n\t\t\t},\n\t\t});\n\t}\n\treturn { entries };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction collectModels(\n\tinput: unknown,\n\tfound: Array<Record<string, unknown>>,\n): void {\n\tif (!isRecord(input)) {\n\t\treturn;\n\t}\n\tconst meta = input.meta;\n\tif (isRecord(meta) && Array.isArray(meta.primaryKey)) {\n\t\tfound.push(input);\n\t\treturn;\n\t}\n\tif (isRecord(input.models)) {\n\t\tcollectModels(input.models, found);\n\t\treturn;\n\t}\n\tif (isRecord(input.schemas)) {\n\t\tcollectModels(input.schemas, found);\n\t\treturn;\n\t}\n\tfor (const value of Object.values(input)) {\n\t\tcollectModels(value, found);\n\t}\n}\n\n/**\n * Priority-1 catalog: explicit AthenaModels relation metadata.\n * Compilers merge this ahead of live FK introspection.\n */\nexport function catalogFromModels(models: unknown): AthenaRelationCatalog {\n\tconst found: Array<Record<string, unknown>> = [];\n\tcollectModels(models, found);\n\tconst catalogs: AthenaRelationCatalog[] = [];\n\tfor (const model of found) {\n\t\tconst meta = isRecord(model.meta) ? model.meta : {};\n\t\tconst relations = isRecord(meta.relations)\n\t\t\t? (meta.relations as Record<string, ModelRelationMetadata>)\n\t\t\t: undefined;\n\t\tif (!relations || Object.keys(relations).length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst tableName =\n\t\t\t(typeof model.tableName === \"string\" && model.tableName) ||\n\t\t\t(typeof meta.tableName === \"string\" && meta.tableName) ||\n\t\t\t(typeof meta.model === \"string\" && meta.model) ||\n\t\t\t\"\";\n\t\tif (!tableName) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst schema =\n\t\t\ttypeof meta.schema === \"string\" && meta.schema.trim()\n\t\t\t\t? meta.schema.trim()\n\t\t\t\t: tableName.includes(\".\")\n\t\t\t\t\t? tableName.split(\".\")[0]\n\t\t\t\t\t: undefined;\n\t\tconst table = tableName.includes(\".\")\n\t\t\t? (tableName.split(\".\").pop() as string)\n\t\t\t: tableName;\n\t\tcatalogs.push(\n\t\t\tcatalogFromModelRelations({\n\t\t\t\trelations,\n\t\t\t\tschema,\n\t\t\t\ttable,\n\t\t\t}),\n\t\t);\n\t}\n\treturn mergeRelationCatalogs(...catalogs);\n}\n\nexport function mergeRelationCatalogs(\n\t...catalogs: Array<AthenaRelationCatalog | undefined>\n): AthenaRelationCatalog {\n\tconst entries: AthenaRelationDescriptor[] = [];\n\tconst seen = new Set<string>();\n\tfor (const catalog of catalogs) {\n\t\tif (!catalog) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const entry of catalog.entries) {\n\t\t\tif (seen.has(entry.id)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tseen.add(entry.id);\n\t\t\tentries.push(entry);\n\t\t}\n\t}\n\treturn { entries };\n}\n\nexport function resolveRelation(input: {\n\tcatalog: AthenaRelationCatalog;\n\tname: string;\n\tsource: AthenaSourceAst;\n\ttargetHint?: AthenaSourceAst;\n}): AthenaRelationDescriptor {\n\tconst byName = input.catalog.entries.filter(\n\t\t(entry) => entry.name === input.name && sameTable(entry.from, input.source),\n\t);\n\tif (byName.length === 1) {\n\t\treturn byName[0] as AthenaRelationDescriptor;\n\t}\n\tif (byName.length > 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_AMBIGUOUS_RELATION\",\n\t\t\t`Relation \"${input.name}\" is ambiguous on ${input.source.table}`,\n\t\t);\n\t}\n\n\tconst targetTable = input.targetHint?.table ?? input.name;\n\tconst targetSchema = input.targetHint?.schema;\n\tconst outgoing = input.catalog.entries.filter(\n\t\t(entry) =>\n\t\t\tsameTable(entry.from, input.source) &&\n\t\t\tentry.to.table === targetTable &&\n\t\t\t(!targetSchema || !entry.to.schema || entry.to.schema === targetSchema),\n\t);\n\tif (outgoing.length === 1) {\n\t\treturn outgoing[0] as AthenaRelationDescriptor;\n\t}\n\tif (outgoing.length > 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_AMBIGUOUS_RELATION\",\n\t\t\t`Multiple foreign keys from ${input.source.table} to ${targetTable}`,\n\t\t);\n\t}\n\n\tconst incoming = input.catalog.entries.filter(\n\t\t(entry) =>\n\t\t\tsameTable(entry.to, input.source) &&\n\t\t\tentry.from.table === targetTable &&\n\t\t\t(!targetSchema ||\n\t\t\t\t!entry.from.schema ||\n\t\t\t\tentry.from.schema === targetSchema),\n\t);\n\tif (incoming.length === 1) {\n\t\tconst found = incoming[0] as AthenaRelationDescriptor;\n\t\treturn {\n\t\t\t...found,\n\t\t\tcardinality: invertCardinality(found.cardinality),\n\t\t\tfrom: found.to,\n\t\t\tname: input.name,\n\t\t\tto: found.from,\n\t\t};\n\t}\n\tif (incoming.length > 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_AMBIGUOUS_RELATION\",\n\t\t\t`Multiple foreign keys from ${targetTable} to ${input.source.table}`,\n\t\t);\n\t}\n\n\tthrow new AthenaQueryError(\n\t\t\"ATHENA_QUERY_UNKNOWN_RELATION\",\n\t\t`Unknown relation \"${input.name}\" on ${input.source.schema ? `${input.source.schema}.` : \"\"}${input.source.table}`,\n\t);\n}\n","import type {\n\tAthenaConditionAst,\n\tAthenaOrderAst,\n\tAthenaPaginationAst,\n\tAthenaQueryCardinality,\n\tAthenaSelectQueryAst,\n\tAthenaSourceAst,\n} from \"./ast.ts\";\nimport { selectionHasRelations } from \"./ast.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\nimport type {\n\tAthenaRelationCatalog,\n\tAthenaRelationDescriptor,\n} from \"./relations.ts\";\nimport { resolveRelation } from \"./relations.ts\";\nimport { validateSelectQueryAst } from \"./validate.ts\";\n\nexport interface AthenaResolvedSource {\n\talias: string;\n\tmodelId?: string;\n\tschema?: string;\n\ttable: string;\n}\n\nexport interface AthenaResolvedColumn {\n\talias?: string;\n\tcolumn: string;\n\tkind: \"column\";\n}\n\nexport interface AthenaResolvedRelation {\n\talias: string;\n\tdescriptor: AthenaRelationDescriptor;\n\tjunctionAlias?: string;\n\tkind: \"relation\";\n\tplan: AthenaQueryPlan;\n}\n\nexport type AthenaResolvedSelectionField =\n\t| AthenaResolvedColumn\n\t| AthenaResolvedRelation;\n\nexport interface AthenaQueryPlan {\n\tast: AthenaSelectQueryAst;\n\tcardinality: AthenaQueryCardinality;\n\tfilter?: AthenaConditionAst;\n\tkind: \"resolved-select\";\n\torderBy?: AthenaOrderAst[];\n\tpagination?: AthenaPaginationAst;\n\tselection: AthenaResolvedSelectionField[];\n\tsource: AthenaResolvedSource;\n}\n\nclass AthenaQueryAliasAllocator {\n\tprivate seq = 0;\n\n\tnext(prefix: string): string {\n\t\tthis.seq += 1;\n\t\treturn `${prefix}${this.seq}`;\n\t}\n}\n\n/**\n * @deprecated Planning allocates aliases per invocation. Kept as a no-op\n * for existing tests that reset between cases.\n */\nexport function resetQueryPlanAliases(): void {}\n\nexport function isAthenaQueryPlan(value: unknown): value is AthenaQueryPlan {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\treturn (value as { kind?: unknown }).kind === \"resolved-select\";\n}\n\ninterface ResolveQueryPlanOptions {\n\taliasPrefix?: string;\n\taliases?: AthenaQueryAliasAllocator;\n\tcatalog?: AthenaRelationCatalog;\n\tpath?: string[];\n}\n\nexport function resolveAthenaQueryPlan(\n\tast: AthenaSelectQueryAst,\n\toptions?: ResolveQueryPlanOptions,\n): AthenaQueryPlan {\n\treturn resolveQueryPlan(ast, options);\n}\n\nexport function resolveQueryPlan(\n\tast: AthenaSelectQueryAst,\n\toptions?: ResolveQueryPlanOptions,\n): AthenaQueryPlan {\n\tvalidateSelectQueryAst(ast);\n\tconst aliases = options?.aliases ?? new AthenaQueryAliasAllocator();\n\tconst path = options?.path ?? [ast.source.table];\n\tconst source: AthenaResolvedSource = {\n\t\talias: ast.source.alias ?? aliases.next(options?.aliasPrefix ?? \"t\"),\n\t\tmodelId: ast.source.modelId,\n\t\tschema: ast.source.schema,\n\t\ttable: ast.source.table,\n\t};\n\n\tconst selection: AthenaResolvedSelectionField[] = [];\n\tconst outputAliases = new Set<string>();\n\tfor (const field of ast.selection.fields) {\n\t\tif (field.kind === \"column\") {\n\t\t\tconst outputAlias = field.alias ?? field.column;\n\t\t\tif (outputAliases.has(outputAlias)) {\n\t\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\t\t`Duplicate output alias \"${outputAlias}\" at ${path.join(\".\")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\toutputAliases.add(outputAlias);\n\t\t\tselection.push({\n\t\t\t\talias: field.alias,\n\t\t\t\tcolumn: field.column,\n\t\t\t\tkind: \"column\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!options?.catalog) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_UNKNOWN_RELATION\",\n\t\t\t\t`Relation \"${field.relation}\" cannot be resolved without relation metadata at ${path.join(\".\")}.${field.relation}`,\n\t\t\t);\n\t\t}\n\n\t\tconst descriptor = resolveRelation({\n\t\t\tcatalog: options.catalog,\n\t\t\tname: field.relation,\n\t\t\tsource: ast.source,\n\t\t\ttargetHint: field.query.source,\n\t\t});\n\n\t\tconst nestedSource: AthenaSourceAst = {\n\t\t\t...field.query.source,\n\t\t\tschema: field.query.source.schema ?? descriptor.to.schema,\n\t\t\ttable: descriptor.to.table,\n\t\t};\n\n\t\tconst outputAlias = field.alias ?? field.relation;\n\t\tif (outputAliases.has(outputAlias)) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\t`Duplicate output alias \"${outputAlias}\" at ${path.join(\".\")}`,\n\t\t\t);\n\t\t}\n\t\toutputAliases.add(outputAlias);\n\n\t\tconst nestedPlan = resolveQueryPlan(\n\t\t\t{\n\t\t\t\t...field.query,\n\t\t\t\tsource: nestedSource,\n\t\t\t},\n\t\t\t{\n\t\t\t\taliasPrefix: \"r\",\n\t\t\t\taliases,\n\t\t\t\tcatalog: options.catalog,\n\t\t\t\tpath: [...path, outputAlias],\n\t\t\t},\n\t\t);\n\n\t\tselection.push({\n\t\t\talias: outputAlias,\n\t\t\tdescriptor,\n\t\t\tjunctionAlias:\n\t\t\t\tdescriptor.cardinality === \"many-to-many\"\n\t\t\t\t\t? aliases.next(\"j\")\n\t\t\t\t\t: undefined,\n\t\t\tkind: \"relation\",\n\t\t\tplan: nestedPlan,\n\t\t});\n\t}\n\n\tif (selection.length === 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\"Resolved selection is empty\",\n\t\t);\n\t}\n\n\treturn {\n\t\tast,\n\t\tcardinality: ast.cardinality,\n\t\tfilter: ast.filter\n\t\t\t? resolveCondition(ast.filter, {\n\t\t\t\t\taliases,\n\t\t\t\t\tcatalog: options?.catalog,\n\t\t\t\t\tpath,\n\t\t\t\t\tsource: ast.source,\n\t\t\t\t})\n\t\t\t: undefined,\n\t\tkind: \"resolved-select\",\n\t\torderBy: ast.orderBy,\n\t\tpagination: ast.pagination,\n\t\tselection,\n\t\tsource,\n\t};\n}\n\nfunction resolveCondition(\n\tcondition: AthenaConditionAst,\n\tcontext: {\n\t\taliases: AthenaQueryAliasAllocator;\n\t\tcatalog?: AthenaRelationCatalog;\n\t\tpath: string[];\n\t\tsource: AthenaSourceAst;\n\t},\n): AthenaConditionAst {\n\tif (condition.kind === \"and\" || condition.kind === \"or\") {\n\t\treturn {\n\t\t\tconditions: condition.conditions.map((child) =>\n\t\t\t\tresolveCondition(child, context),\n\t\t\t),\n\t\t\tkind: condition.kind,\n\t\t};\n\t}\n\tif (condition.kind === \"not\") {\n\t\treturn {\n\t\t\tcondition: resolveCondition(condition.condition, context),\n\t\t\tkind: \"not\",\n\t\t};\n\t}\n\tif (condition.kind === \"resolved-relation\") {\n\t\treturn {\n\t\t\t...condition,\n\t\t\tfilter: condition.filter\n\t\t\t\t? resolveCondition(condition.filter, {\n\t\t\t\t\t\t...context,\n\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\tkind: \"table\",\n\t\t\t\t\t\t\tmodelId: condition.target.modelId,\n\t\t\t\t\t\t\tschema: condition.target.schema,\n\t\t\t\t\t\t\ttable: condition.target.table,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\tif (condition.kind !== \"relation\") {\n\t\treturn condition;\n\t}\n\n\tif (!context.catalog) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNKNOWN_RELATION\",\n\t\t\t`Relation \"${condition.relation}\" cannot be resolved without relation metadata at ${context.path.join(\".\")}.${condition.relation}`,\n\t\t);\n\t}\n\n\tconst descriptor = resolveRelation({\n\t\tcatalog: context.catalog,\n\t\tname: condition.via ?? condition.relation,\n\t\tsource: context.source,\n\t});\n\tconst target = {\n\t\talias: context.aliases.next(\"r\"),\n\t\tschema: descriptor.to.schema,\n\t\ttable: descriptor.to.table,\n\t};\n\tconst nestedSource: AthenaSourceAst = {\n\t\tkind: \"table\",\n\t\tschema: descriptor.to.schema,\n\t\ttable: descriptor.to.table,\n\t};\n\treturn {\n\t\tdescriptor,\n\t\tfilter: condition.filter\n\t\t\t? resolveCondition(condition.filter, {\n\t\t\t\t\taliases: context.aliases,\n\t\t\t\t\tcatalog: context.catalog,\n\t\t\t\t\tpath: [...context.path, condition.relation],\n\t\t\t\t\tsource: nestedSource,\n\t\t\t\t})\n\t\t\t: undefined,\n\t\tjunctionAlias:\n\t\t\tdescriptor.cardinality === \"many-to-many\"\n\t\t\t\t? context.aliases.next(\"j\")\n\t\t\t\t: undefined,\n\t\tkind: \"resolved-relation\",\n\t\tpredicate: condition.predicate,\n\t\trelation: condition.relation,\n\t\ttarget,\n\t};\n}\n\nexport function planHasRelations(plan: AthenaQueryPlan): boolean {\n\treturn (\n\t\tplan.selection.some((field) => field.kind === \"relation\") ||\n\t\tselectionHasRelations(plan.ast)\n\t);\n}\n","/**\n * Normalize PostgREST-style fluent `.or(string)` / `.not(...)` expressions\n * into a structured boolean tree before backend SQL compile.\n *\n * Supported:\n *   deleted.eq.false,deleted.is.null\n *   and(status.eq.active,deleted.is.null)\n *   or(and(a.eq.1,b.eq.2),c.eq.3)\n *   not.status.eq.offline\n *   not.and(status.eq.offline,role.eq.guest)\n *   (status.eq.active,role.eq.admin)\n */\nimport type {\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaGatewayCondition,\n} from \"../gateway/types.ts\";\n\nconst SIMPLE_OPERATORS = new Set<AthenaConditionOperator>([\n  \"eq\",\n  \"neq\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"like\",\n  \"ilike\",\n  \"is\",\n  \"in\",\n]);\n\nconst IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nexport class LegacyBooleanParseError extends Error {\n  readonly code = \"legacy_boolean_parse\";\n\n  constructor(message: string) {\n    super(message);\n    this.name = \"LegacyBooleanParseError\";\n  }\n}\n\nexport type LegacyBooleanNode =\n  | { kind: \"pred\"; condition: AthenaGatewayCondition }\n  | { children: LegacyBooleanNode[]; kind: \"and\" | \"or\" }\n  | { child: LegacyBooleanNode; kind: \"not\" };\n\nfunction coerceScalar(raw: string): AthenaConditionValue {\n  const trimmed = raw.trim();\n  if (trimmed === \"null\") {\n    return null;\n  }\n  if (trimmed === \"true\") {\n    return true;\n  }\n  if (trimmed === \"false\") {\n    return false;\n  }\n  if (trimmed === \"\") {\n    return \"\";\n  }\n  if (/^-?\\d+$/.test(trimmed)) {\n    return Number(trimmed);\n  }\n  if (/^-?\\d+\\.\\d+$/.test(trimmed)) {\n    return Number(trimmed);\n  }\n  return trimmed;\n}\n\nexport function splitTopLevel(expression: string, separator: \",\"): string[] {\n  const parts: string[] = [];\n  let depth = 0;\n  let current = \"\";\n  for (const ch of expression) {\n    if (ch === \"(\") {\n      depth += 1;\n    } else if (ch === \")\") {\n      depth = Math.max(0, depth - 1);\n    }\n    if (ch === separator && depth === 0) {\n      if (current.trim()) {\n        parts.push(current.trim());\n      }\n      current = \"\";\n      continue;\n    }\n    current += ch;\n  }\n  if (current.trim()) {\n    parts.push(current.trim());\n  }\n  return parts;\n}\n\nfunction unwrapBalancedParens(token: string): string | null {\n  const trimmed = token.trim();\n  if (!(trimmed.startsWith(\"(\") && trimmed.endsWith(\")\"))) {\n    return null;\n  }\n  let depth = 0;\n  for (let i = 0; i < trimmed.length; i += 1) {\n    if (trimmed[i] === \"(\") {\n      depth += 1;\n    } else if (trimmed[i] === \")\") {\n      depth -= 1;\n      if (depth === 0 && i !== trimmed.length - 1) {\n        return null;\n      }\n    }\n  }\n  return depth === 0 ? trimmed.slice(1, -1) : null;\n}\n\nfunction parseGroupCall(token: string, name: \"and\" | \"or\"): string | null {\n  const match = new RegExp(`^${name}\\\\s*\\\\((.*)\\\\)$`, \"is\").exec(token.trim());\n  if (!match) {\n    return null;\n  }\n  return match[1] ?? \"\";\n}\n\nfunction parsePredicate(token: string): AthenaGatewayCondition {\n  const parts = token.split(\".\");\n  if (parts.length < 3) {\n    throw new LegacyBooleanParseError(\n      `Legacy boolean predicate must be column.op.value: ${token}`,\n    );\n  }\n  const column = parts[0]?.trim() ?? \"\";\n  const operator = (parts[1]?.trim().toLowerCase() ??\n    \"\") as AthenaConditionOperator;\n  const rawValue = parts.slice(2).join(\".\");\n  if (!IDENTIFIER.test(column)) {\n    throw new LegacyBooleanParseError(\n      `Legacy boolean column is not a safe identifier: ${column}`,\n    );\n  }\n  if (!SIMPLE_OPERATORS.has(operator)) {\n    throw new LegacyBooleanParseError(\n      `Legacy boolean operator \"${operator}\" is not supported`,\n    );\n  }\n  if (operator === \"in\") {\n    const inner = rawValue.replace(/^\\(|\\)$/g, \"\");\n    const values = splitTopLevel(inner, \",\").map(coerceScalar);\n    return { column, operator, value: values as never };\n  }\n  return {\n    column,\n    operator,\n    value: coerceScalar(rawValue),\n  };\n}\n\nfunction parseBooleanList(\n  expression: string,\n  join: \"and\" | \"or\",\n): LegacyBooleanNode {\n  const parts = splitTopLevel(expression, \",\");\n  if (parts.length === 0) {\n    throw new LegacyBooleanParseError(\"Legacy boolean expression is empty\");\n  }\n  const children = parts.map(parseTerm);\n  if (children.length === 1) {\n    return children[0] as LegacyBooleanNode;\n  }\n  return { children, kind: join };\n}\n\nfunction parseTerm(token: string): LegacyBooleanNode {\n  const trimmed = token.trim();\n  if (!trimmed) {\n    throw new LegacyBooleanParseError(\"Empty legacy boolean term\");\n  }\n\n  const andInner = parseGroupCall(trimmed, \"and\");\n  if (andInner !== null) {\n    return parseBooleanList(andInner, \"and\");\n  }\n  const orInner = parseGroupCall(trimmed, \"or\");\n  if (orInner !== null) {\n    return parseBooleanList(orInner, \"or\");\n  }\n\n  const notCall = /^not\\s*\\((.*)\\)$/is.exec(trimmed);\n  if (notCall) {\n    return { child: parseBooleanList(notCall[1] ?? \"\", \"and\"), kind: \"not\" };\n  }\n  if (/^not\\./i.test(trimmed)) {\n    return { child: parseTerm(trimmed.slice(4)), kind: \"not\" };\n  }\n\n  const grouped = unwrapBalancedParens(trimmed);\n  if (grouped !== null) {\n    return parseBooleanList(grouped, \"and\");\n  }\n\n  return { condition: parsePredicate(trimmed), kind: \"pred\" };\n}\n\nexport function parseLegacyBooleanExpression(\n  expression: string,\n  root: \"and\" | \"or\" = \"or\",\n): LegacyBooleanNode {\n  const trimmed = expression.trim();\n  if (!trimmed) {\n    throw new LegacyBooleanParseError(\"Legacy boolean expression is empty\");\n  }\n  return parseBooleanList(trimmed, root);\n}\n\n/**\n * Parse `.or(\"deleted.eq.false,deleted.is.null\")` into structured conditions\n * when the expression is a flat OR of predicates. Nested trees stay as a\n * single `or`/`and`/`not` node for the SQL compiler.\n */\nexport function parseLegacyOrExpression(\n  expression: string,\n): AthenaGatewayCondition[] {\n  const tree = parseLegacyBooleanExpression(expression, \"or\");\n  if (tree.kind === \"pred\") {\n    return [tree.condition];\n  }\n  if (\n    tree.kind === \"or\" &&\n    tree.children.every((child) => child.kind === \"pred\")\n  ) {\n    return tree.children.map((child) =>\n      child.kind === \"pred\" ? child.condition : child,\n    ) as AthenaGatewayCondition[];\n  }\n  throw new LegacyBooleanParseError(\n    \"Nested .or() groups require parseLegacyBooleanExpression\",\n  );\n}\n\nexport function compileLegacyBooleanNode(\n  node: LegacyBooleanNode,\n  compilePredicate: (condition: AthenaGatewayCondition) => string,\n): string {\n  switch (node.kind) {\n    case \"pred\":\n      return compilePredicate(node.condition);\n    case \"and\":\n      return `(${node.children.map((child) => compileLegacyBooleanNode(child, compilePredicate)).join(\" AND \")})`;\n    case \"or\":\n      return `(${node.children.map((child) => compileLegacyBooleanNode(child, compilePredicate)).join(\" OR \")})`;\n    case \"not\":\n      return `(NOT (${compileLegacyBooleanNode(node.child, compilePredicate)}))`;\n    default:\n      throw new LegacyBooleanParseError(\"Unknown legacy boolean node\");\n  }\n}\n","/**\n * L1 D1/SQLite SQL compiler for flat gateway payloads.\n * Aligned with gateway D1 matrix: flat select/insert/update/delete + upsert.\n */\n\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport {\n  compileLegacyBooleanNode,\n  LegacyBooleanParseError,\n  parseLegacyBooleanExpression,\n} from \"../../query/legacy-boolean.ts\";\nimport { quoteQualifiedIdentifier } from \"../../sql-identifiers.ts\";\n\nexport interface D1CompiledStatement {\n  params: unknown[];\n  sql: string;\n}\n\n/**\n * One or more statements. Sparse multi-row inserts without NULL-coercion expand\n * into a batch of single-row inserts (SQLite rejects `DEFAULT` in VALUES tuples).\n */\nexport type D1CompiledSql = D1CompiledStatement & {\n  statements?: D1CompiledStatement[];\n};\n\nfunction asSingle(sql: string, params: unknown[]): D1CompiledSql {\n  return { params, sql };\n}\n\nfunction asBatch(statements: D1CompiledStatement[]): D1CompiledSql {\n  if (statements.length === 0) {\n    throw new D1SqlCompileError(\n      \"empty_insert\",\n      \"batch requires at least one statement\"\n    );\n  }\n  return {\n    params: statements[0]?.params,\n    sql: statements[0]?.sql,\n    statements,\n  };\n}\n\nfunction hasPaginationBounds(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): boolean {\n  return (\n    payload.limit !== undefined ||\n    payload.offset !== undefined ||\n    payload.page_size !== undefined ||\n    payload.current_page !== undefined\n  );\n}\n\n/**\n * Ensure mutation pagination actually produces a LIMIT/OFFSET clause.\n * `.currentPage(n)` alone would otherwise look \"bounded\" but emit no limit and\n * update/delete every matching row.\n */\nfunction assertEffectiveMutationBounds(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): void {\n  if (\n    payload.current_page !== undefined &&\n    payload.page_size === undefined &&\n    payload.limit === undefined\n  ) {\n    throw new D1SqlCompileError(\n      \"page_without_size\",\n      \"current_page requires page_size (or limit) for bounded update/delete on D1 edge-local\"\n    );\n  }\n  const clause = limitOffsetClause(payload);\n  if (!clause.trim()) {\n    throw new D1SqlCompileError(\n      \"invalid_pagination_bounds\",\n      \"Bounded update/delete requires limit, offset, and/or page_size on D1 edge-local\"\n    );\n  }\n}\n\n/**\n * SQLite system row identity aliases. A user column with any of these names\n * shadows the system rowid — bounded mutations would then be unsafe.\n */\nconst SQLITE_ROWID_ALIASES = new Set([\"rowid\", \"oid\", \"_rowid_\"]);\n\n/** Optional compile-time options for D1 SQL compilation. */\nexport interface D1CompileOptions {\n  /**\n   * Proven single-column unique identity for bounded UPDATE/DELETE (from\n   * PRAGMA table_info / unique indexes, or an explicit caller override).\n   * Required for limit/offset/page bounded mutations.\n   */\n  identityColumn?: string;\n}\n\nfunction referencedMutationColumns(payload: {\n  conditions?: AthenaGatewayCondition[];\n  sort_by?: AthenaSortBy;\n}): string[] {\n  const names: string[] = [];\n  for (const condition of payload.conditions ?? []) {\n    const column = (condition.column ?? condition.eq_column ?? \"\").trim();\n    if (column) {\n      names.push(column);\n    }\n  }\n  if (payload.sort_by?.field?.trim()) {\n    names.push(payload.sort_by.field.trim());\n  }\n  return names;\n}\n\n/**\n * Choose a safe identity expression for bounded update/delete, or throw.\n *\n * Pure L1 has no live schema: callers (transport) must supply a proven unique\n * `identityColumn` (single-column PK or unique index). Never assume `id`.\n * Reject filters/order that reference shadowable rowid aliases.\n */\nfunction resolveBoundedIdentityColumn(\n  payload: {\n    conditions?: AthenaGatewayCondition[];\n    sort_by?: AthenaSortBy;\n  },\n  options?: D1CompileOptions\n): string {\n  const refs = referencedMutationColumns(payload);\n  const lower = refs.map((name) => name.toLowerCase());\n\n  if (lower.some((name) => SQLITE_ROWID_ALIASES.has(name))) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_unsafe_identity\",\n      \"Bounded update/delete cannot use rowid/oid/_rowid_ in filters or order — \" +\n        \"those names may be user columns that shadow SQLite row identity. \" +\n        \"Resolve the table primary key (or a single-column unique index) instead.\"\n    );\n  }\n\n  const identity = options?.identityColumn?.trim();\n  if (!identity) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_no_unique_identity\",\n      \"Bounded update/delete requires a proven unique identity column from the table schema \" +\n        \"(single-column PRIMARY KEY or UNIQUE index). Cannot assume a column named id.\"\n    );\n  }\n  if (SQLITE_ROWID_ALIASES.has(identity.toLowerCase())) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_unsafe_identity\",\n      `Bounded update/delete cannot use identity column \"${identity}\" — ` +\n        \"it may shadow SQLite row identity.\"\n    );\n  }\n  return identity;\n}\n\n/**\n * SQLite-compatible bounded mutation via unique-identity subquery.\n * Uses `\"pk\" IN (SELECT \"pk\" … LIMIT …)` — not system `_rowid_`.\n */\nfunction boundedRowidInClause(\n  table: string,\n  whereSql: string,\n  whereParams: unknown[],\n  payload: {\n    limit?: number;\n    offset?: number;\n    current_page?: number;\n    page_size?: number;\n    sort_by?: AthenaSortBy;\n    conditions?: AthenaGatewayCondition[];\n  },\n  options?: D1CompileOptions\n): { sql: string; params: unknown[] } {\n  assertEffectiveMutationBounds(payload);\n  const identity = resolveBoundedIdentityColumn(payload, options);\n  const identitySql = quoteIdent(identity);\n  const innerWhere = whereSql.replace(/^WHERE\\s+/i, \"\");\n  const parts = [\n    `SELECT ${identitySql} FROM ${quoteIdent(table)}`,\n    innerWhere ? `WHERE ${innerWhere}` : \"\",\n    orderClause(payload.sort_by),\n    limitOffsetClause(payload),\n  ].filter(Boolean);\n  return {\n    params: [...whereParams],\n    sql: `${identitySql} IN (${parts.join(\" \")})`,\n  };\n}\n\nexport class D1SqlCompileError extends Error {\n  readonly code: string;\n\n  constructor(code: string, message: string) {\n    super(message);\n    this.name = \"D1SqlCompileError\";\n    this.code = code;\n  }\n}\n\n/** Simple SQL identifier: letter/underscore start, then alphanumerics/underscore. */\nconst SAFE_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/**\n * Drop-in mapping for Postgres-oriented AthenaModels on D1/SQLite.\n *\n * D1 has no schemas. Gateway/model wire names like `public.users` (from\n * `table('users').schema('public')` or `meta.tableName: \"public.users\"`) are\n * reduced to the bare table segment so the same models work on edge without\n * rewriting registries.\n *\n * Multi-schema collisions (`public.users` vs `analytics.users` → both `users`)\n * must be disambiguated with an explicit physical name\n * (`.from('analytics_users')` / `meta.tableName: \"analytics_users\"`).\n */\nexport function normalizeD1TableName(name: string): string {\n  const trimmed = name.trim();\n  if (!trimmed) {\n    throw new D1SqlCompileError(\"invalid_identifier\", \"Identifier is required\");\n  }\n  if (!trimmed.includes(\".\")) {\n    return trimmed;\n  }\n  const segments = trimmed\n    .split(\".\")\n    .map((segment) => segment.trim())\n    .filter(Boolean);\n  if (segments.length < 2) {\n    throw new D1SqlCompileError(\n      \"invalid_identifier\",\n      `Invalid schema-qualified name for D1 edge-local: ${trimmed}`\n    );\n  }\n  return segments.at(-1)!;\n}\n\nfunction quoteIdent(name: string): string {\n  const bare = normalizeD1TableName(name);\n  // Reject quotes, whitespace, and other characters that would only appear\n  // if a caller tried to smuggle SQL past quoting.\n  if (!SAFE_IDENTIFIER.test(bare)) {\n    throw new D1SqlCompileError(\n      \"invalid_identifier\",\n      `Invalid SQL identifier for D1 edge-local: ${bare}`\n    );\n  }\n  return quoteQualifiedIdentifier(bare);\n}\n\n/** Response alias form: `user_id:id` → `\"id\" AS \"user_id\"`. */\nconst RESPONSE_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_]*)$/;\n/** SQL alias form: `id as user_id` or `id user_id`. */\nconst SQL_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i;\n\n/**\n * Quote one SELECT/RETURNING token. Only simple identifiers and documented\n * aliases are accepted — raw expressions are rejected to prevent SQL injection\n * from user-controlled column lists (gateway may pass expressions through).\n */\nfunction quoteSelectTokenStrict(token: string): string {\n  const trimmed = token.trim();\n  if (!trimmed || trimmed === \"*\") {\n    return trimmed || \"*\";\n  }\n\n  if (SAFE_IDENTIFIER.test(trimmed)) {\n    return quoteQualifiedIdentifier(trimmed);\n  }\n\n  const responseAlias = RESPONSE_ALIAS_PATTERN.exec(trimmed);\n  if (responseAlias) {\n    const [, aliasIdentifier, baseIdentifier] = responseAlias;\n    return `${quoteQualifiedIdentifier(baseIdentifier!)} AS ${quoteQualifiedIdentifier(aliasIdentifier!)}`;\n  }\n\n  const sqlAlias = SQL_ALIAS_PATTERN.exec(trimmed);\n  if (sqlAlias) {\n    const [, baseIdentifier, aliasIdentifier] = sqlAlias;\n    return `${quoteQualifiedIdentifier(baseIdentifier!)} AS ${quoteQualifiedIdentifier(aliasIdentifier!)}`;\n  }\n\n  throw new D1SqlCompileError(\n    \"unsafe_select\",\n    `SELECT/RETURNING expressions are not supported on D1 edge-local; use column names or aliases only: ${token}`\n  );\n}\n\n/**\n * SELECT / RETURNING list with documented response aliases (`alias:column`)\n * and SQL-style aliases (`column as alias`). Edge-local only allows identifiers.\n */\nfunction selectClause(columns: string[] | string | undefined): string {\n  if (columns === undefined || columns === \"*\" || columns === \"\") {\n    return \"*\";\n  }\n  if (typeof columns === \"string\") {\n    const trimmed = columns.trim();\n    if (!trimmed || trimmed === \"*\") {\n      return \"*\";\n    }\n    return trimmed\n      .split(\",\")\n      .map((part) => quoteSelectTokenStrict(part))\n      .join(\", \");\n  }\n  if (columns.length === 0) {\n    return \"*\";\n  }\n  return columns.map((column) => quoteSelectTokenStrict(column)).join(\", \");\n}\n\n/** RETURNING is omitted for head-only mutations (metadata / count without row body). */\nfunction wantsReturning(payload: {\n  columns?: string[] | string;\n  head?: boolean;\n}): boolean {\n  return Boolean(payload.columns) && payload.head !== true;\n}\n\ninterface WhereClause {\n  params: unknown[];\n  sql: string;\n}\n\nfunction conditionToWhere(condition: AthenaGatewayCondition): WhereClause {\n  const operator = (condition.operator || \"eq\").toLowerCase();\n  const value =\n    condition.value === undefined ? condition.eq_value : condition.value;\n\n  if (operator === \"or\" || operator === \"not\") {\n    if (typeof value !== \"string\") {\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        `Condition operator \"${operator}\" requires a legacy expression string`\n      );\n    }\n    try {\n      const tree = parseLegacyBooleanExpression(\n        value,\n        operator === \"or\" ? \"or\" : \"and\"\n      );\n      const params: unknown[] = [];\n      const sql = compileLegacyBooleanNode(tree, (predicate) => {\n        const clause = conditionToWhere(predicate);\n        params.push(...clause.params);\n        return clause.sql;\n      });\n      return {\n        params,\n        sql: operator === \"not\" ? `(NOT (${sql}))` : sql,\n      };\n    } catch (error) {\n      if (error instanceof D1SqlCompileError) {\n        throw error;\n      }\n      const message =\n        error instanceof LegacyBooleanParseError\n          ? error.message\n          : `Condition operator \"${operator}\" is not supported on D1 edge-local L1`;\n      throw new D1SqlCompileError(\"unsupported_operator\", message);\n    }\n  }\n\n  const column = condition.column?.trim() || condition.eq_column?.trim() || \"\";\n  if (!column) {\n    throw new D1SqlCompileError(\n      \"invalid_condition\",\n      \"Condition requires a column\"\n    );\n  }\n  const col = quoteIdent(column);\n\n  switch (operator) {\n    case \"eq\": {\n      if (Array.isArray(value)) {\n        if (value.length === 0) {\n          return { params: [], sql: \"1 = 0\" };\n        }\n        const placeholders = value.map(() => \"?\").join(\", \");\n        return { params: [...value], sql: `${col} IN (${placeholders})` };\n      }\n      // SQLite: `col = NULL` is unknown and matches nothing. Match gateway /\n      // structured-fetch semantics: null equality → IS NULL.\n      if (value === null) {\n        return { params: [], sql: `${col} IS NULL` };\n      }\n      return { params: [value ?? null], sql: `${col} = ?` };\n    }\n    case \"neq\":\n      // SQLite: `col != NULL` never matches. Match gateway: null neq → IS NOT NULL.\n      if (value === null) {\n        return { params: [], sql: `${col} IS NOT NULL` };\n      }\n      return { params: [value ?? null], sql: `${col} != ?` };\n    case \"gt\":\n      return { params: [value ?? null], sql: `${col} > ?` };\n    case \"gte\":\n      return { params: [value ?? null], sql: `${col} >= ?` };\n    case \"lt\":\n      return { params: [value ?? null], sql: `${col} < ?` };\n    case \"lte\":\n      return { params: [value ?? null], sql: `${col} <= ?` };\n    case \"like\":\n      return { params: [value ?? null], sql: `${col} LIKE ?` };\n    case \"ilike\":\n      return { params: [value ?? null], sql: `${col} LIKE ? COLLATE NOCASE` };\n    case \"in\": {\n      const items = Array.isArray(value)\n        ? value\n        : value === undefined\n          ? []\n          : [value];\n      if (items.length === 0) {\n        return { params: [], sql: \"1 = 0\" };\n      }\n      const placeholders = items.map(() => \"?\").join(\", \");\n      return { params: [...items], sql: `${col} IN (${placeholders})` };\n    }\n    case \"is\": {\n      if (value === null || value === \"null\") {\n        return { params: [], sql: `${col} IS NULL` };\n      }\n      if (value === true || value === \"true\") {\n        return { params: [], sql: `${col} IS TRUE` };\n      }\n      if (value === false || value === \"false\") {\n        return { params: [], sql: `${col} IS FALSE` };\n      }\n      return { params: [value], sql: `${col} IS ?` };\n    }\n    case \"not\":\n    case \"or\":\n    case \"contains\":\n    case \"containedby\":\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        `Condition operator \"${operator}\" is not supported on D1 edge-local L1`\n      );\n    default:\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        `Unknown condition operator \"${operator}\"`\n      );\n  }\n}\n\nfunction buildWhere(\n  conditions: AthenaGatewayCondition[] | undefined\n): WhereClause {\n  if (!conditions?.length) {\n    return { params: [], sql: \"\" };\n  }\n  const parts: string[] = [];\n  const params: unknown[] = [];\n  for (const condition of conditions) {\n    // Legacy shape: only eq_column/eq_value without operator\n    if (!condition.operator && condition.eq_column) {\n      const clause = conditionToWhere({\n        ...condition,\n        column: condition.eq_column,\n        operator: \"eq\",\n        value: condition.eq_value,\n      });\n      parts.push(clause.sql);\n      params.push(...clause.params);\n      continue;\n    }\n    const clause = conditionToWhere(condition);\n    parts.push(clause.sql);\n    params.push(...clause.params);\n  }\n  return {\n    params,\n    sql: parts.length ? `WHERE ${parts.join(\" AND \")}` : \"\",\n  };\n}\n\nfunction orderClause(order?: AthenaSortBy): string {\n  if (!order?.field?.trim()) {\n    return \"\";\n  }\n  const direction = order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n  return `ORDER BY ${quoteIdent(order.field)} ${direction}`;\n}\n\nfunction limitOffsetClause(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): string {\n  let limit = payload.limit;\n  let offset = payload.offset;\n\n  // Prefer explicit page_size as the page length when limit is absent.\n  if (limit === undefined && payload.page_size !== undefined) {\n    limit = payload.page_size;\n  }\n\n  // Apply current_page → OFFSET using page_size, or limit when page_size is\n  // omitted (`.limit(10).currentPage(2)` must not stay at OFFSET 0).\n  if (payload.current_page !== undefined && offset === undefined) {\n    const pageSize = payload.page_size ?? payload.limit;\n    if (pageSize !== undefined) {\n      offset = Math.max(0, (payload.current_page - 1) * pageSize);\n    }\n  }\n\n  const parts: string[] = [];\n  // SQLite/D1 requires LIMIT when OFFSET is present; -1 means no upper bound.\n  if (offset !== undefined && limit === undefined) {\n    parts.push(\"LIMIT -1\");\n    parts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n  } else {\n    if (limit !== undefined) {\n      parts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n    }\n    if (offset !== undefined) {\n      parts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n    }\n  }\n  return parts.join(\" \");\n}\n\nfunction rejectStructuredRelations(payload: AthenaFetchPayload): void {\n  const select = payload.select;\n  if (select && typeof select === \"object\" && !Array.isArray(select)) {\n    for (const value of Object.values(select)) {\n      if (value && typeof value === \"object\") {\n        throw new D1SqlCompileError(\n          \"relations_unsupported\",\n          \"Nested relation selects are unsupported on D1 edge-local\"\n        );\n      }\n    }\n  }\n  if (payload.view_name) {\n    throw new D1SqlCompileError(\n      \"view_unsupported\",\n      \"view_name is unsupported on D1 edge-local L1\"\n    );\n  }\n}\n\nfunction jsonValue(value: AthenaJsonValue | undefined): unknown {\n  if (value === undefined) {\n    return null;\n  }\n  if (value !== null && typeof value === \"object\") {\n    return JSON.stringify(value);\n  }\n  return value;\n}\n\n/**\n * Compile flat gateway fetch to SQLite SELECT.\n * When `head: true`, compiles a COUNT(*) query (no row body).\n */\nexport function compileD1Fetch(payload: AthenaFetchPayload): D1CompiledSql {\n  rejectStructuredRelations(payload);\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for fetch\"\n    );\n  }\n\n  // Structured findMany-style select object with only column:true flags\n  let columns: string[] | string | undefined = payload.columns;\n  if (\n    payload.select &&\n    typeof payload.select === \"object\" &&\n    !Array.isArray(payload.select)\n  ) {\n    const keys = Object.entries(payload.select)\n      .filter(([, enabled]) => enabled === true || enabled === 1)\n      .map(([key]) => key);\n    if (keys.length > 0) {\n      columns = keys;\n    }\n  } else if (typeof payload.select === \"string\" && payload.select.trim()) {\n    columns = payload.select;\n  }\n\n  let where = buildWhere(payload.conditions);\n  // Also map simple where object if present (eq only)\n  if (!where.sql && payload.where && typeof payload.where === \"object\") {\n    const eqConditions: AthenaGatewayCondition[] = Object.entries(\n      payload.where as AthenaJsonObject\n    ).map(([column, value]) => ({\n      column,\n      operator: \"eq\" as const,\n      value: value as AthenaGatewayCondition[\"value\"],\n    }));\n    where = buildWhere(eqConditions);\n  }\n\n  if (payload.head === true) {\n    // Head-only: return count metadata without row payloads.\n    return compileD1CountFromWhere(table, where);\n  }\n\n  const parts = [\n    `SELECT ${selectClause(columns)} FROM ${quoteIdent(table)}`,\n    where.sql,\n    orderClause(payload.sort_by),\n    limitOffsetClause(payload),\n  ].filter(Boolean);\n  return asSingle(parts.join(\" \"), where.params);\n}\n\n/**\n * COUNT(*) for the same filters as a fetch (used for head and exact totals).\n */\nexport function compileD1Count(payload: AthenaFetchPayload): D1CompiledSql {\n  rejectStructuredRelations(payload);\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for count\"\n    );\n  }\n  let where = buildWhere(payload.conditions);\n  if (!where.sql && payload.where && typeof payload.where === \"object\") {\n    const eqConditions: AthenaGatewayCondition[] = Object.entries(\n      payload.where as AthenaJsonObject\n    ).map(([column, value]) => ({\n      column,\n      operator: \"eq\" as const,\n      value: value as AthenaGatewayCondition[\"value\"],\n    }));\n    where = buildWhere(eqConditions);\n  }\n  return compileD1CountFromWhere(table, where);\n}\n\nfunction compileD1CountFromWhere(\n  table: string,\n  where: { sql: string; params: unknown[] }\n): D1CompiledSql {\n  const parts = [\n    `SELECT COUNT(*) AS __athena_count FROM ${quoteIdent(table)}`,\n    where.sql,\n  ].filter(Boolean);\n  return asSingle(parts.join(\" \"), where.params);\n}\n\nfunction extractAthenaCount(rows: unknown[]): number {\n  const first = rows[0];\n  const rawCount =\n    first && typeof first === \"object\" && !Array.isArray(first)\n      ? (first as Record<string, unknown>).__athena_count\n      : undefined;\n  const count =\n    typeof rawCount === \"number\"\n      ? rawCount\n      : typeof rawCount === \"bigint\"\n        ? Number(rawCount)\n        : Number(rawCount ?? 0);\n  return Number.isFinite(count) ? count : 0;\n}\n\nexport { extractAthenaCount };\n\nfunction compileSingleRowInsert(\n  table: string,\n  row: AthenaJsonObject,\n  payload: AthenaInsertPayload\n): D1CompiledStatement {\n  const columns = Object.keys(row);\n  if (columns.length === 0) {\n    // SQLite allows default-only single-row inserts, but not\n    // `DEFAULT VALUES … ON CONFLICT` (D1/SQLite syntax error).\n    if (payload.on_conflict) {\n      throw new D1SqlCompileError(\n        \"default_values_upsert_unsupported\",\n        \"DEFAULT VALUES upsert is unsupported on D1 edge-local; provide insert columns or omit onConflict\"\n      );\n    }\n    const parts = [`INSERT INTO ${quoteIdent(table)} DEFAULT VALUES`];\n    if (wantsReturning(payload)) {\n      parts.push(`RETURNING ${selectClause(payload.columns)}`);\n    }\n    return { params: [], sql: parts.join(\" \") };\n  }\n  const params = columns.map((column) => jsonValue(row[column]));\n  const parts = [\n    `INSERT INTO ${quoteIdent(table)} (${columns.map(quoteIdent).join(\", \")})`,\n    `VALUES (${columns.map(() => \"?\").join(\", \")})`,\n  ];\n  appendOnConflict(parts, params, payload, columns);\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return { params, sql: parts.join(\" \") };\n}\n\n/**\n * Normalize `on_conflict` like gateway `parse_on_conflict_columns`:\n * string or string[] , and comma-separated composite targets (`tenant_id,email`).\n */\nfunction parseOnConflictColumns(onConflict: string | string[]): string[] {\n  const raw = Array.isArray(onConflict) ? onConflict : [onConflict];\n  const columns: string[] = [];\n  for (const item of raw) {\n    for (const part of String(item).split(\",\")) {\n      const trimmed = part.trim();\n      if (trimmed) {\n        columns.push(trimmed);\n      }\n    }\n  }\n  if (columns.length === 0) {\n    throw new D1SqlCompileError(\n      \"invalid_on_conflict\",\n      \"on_conflict requires at least one column\"\n    );\n  }\n  return columns;\n}\n\n/**\n * Append ON CONFLICT clause.\n *\n * Parity with crates/athena-query SQLite insert compiler:\n * - explicit non-empty `update_body` → DO UPDATE SET col = ?\n * - explicit empty `update_body` → DO NOTHING\n * - omitted `update_body` (typical `.upsert({...}, { onConflict })`) →\n *   DO UPDATE SET non-conflict cols from `excluded.*`\n */\nfunction appendOnConflict(\n  parts: string[],\n  params: unknown[],\n  payload: AthenaInsertPayload,\n  insertColumns: string[]\n): void {\n  if (!payload.on_conflict) {\n    return;\n  }\n  const conflictCols = parseOnConflictColumns(payload.on_conflict);\n  const conflictSql = conflictCols.map(quoteIdent).join(\", \");\n\n  if (payload.update_body !== undefined && payload.update_body !== null) {\n    const entries = Object.entries(payload.update_body);\n    if (entries.length === 0) {\n      parts.push(`ON CONFLICT (${conflictSql}) DO NOTHING`);\n      return;\n    }\n    const assignments = entries.map(([column, value]) => {\n      params.push(jsonValue(value as AthenaJsonValue));\n      return `${quoteIdent(column)} = ?`;\n    });\n    parts.push(\n      `ON CONFLICT (${conflictSql}) DO UPDATE SET ${assignments.join(\", \")}`\n    );\n    return;\n  }\n\n  const conflictSet = new Set(conflictCols);\n  const assignments = insertColumns\n    .filter((column) => !conflictSet.has(column))\n    .map((column) => {\n      const quoted = quoteIdent(column);\n      return `${quoted} = excluded.${quoted}`;\n    });\n  if (assignments.length === 0) {\n    parts.push(`ON CONFLICT (${conflictSql}) DO NOTHING`);\n  } else {\n    parts.push(\n      `ON CONFLICT (${conflictSql}) DO UPDATE SET ${assignments.join(\", \")}`\n    );\n  }\n}\n\n/**\n * Compile insert / upsert for D1.\n *\n * SQLite does not allow `DEFAULT` inside multi-row VALUES tuples. Sparse multi-row\n * inserts without `default_to_null` become a batch of single-row inserts so omitted\n * columns keep true DB defaults.\n */\nexport function compileD1Insert(payload: AthenaInsertPayload): D1CompiledSql {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for insert\"\n    );\n  }\n\n  const rows = Array.isArray(payload.insert_body)\n    ? payload.insert_body\n    : [payload.insert_body];\n  if (rows.length === 0) {\n    throw new D1SqlCompileError(\n      \"empty_insert\",\n      \"insert_body must not be empty\"\n    );\n  }\n\n  const columns: string[] = [];\n  const seen = new Set<string>();\n  for (const row of rows) {\n    for (const key of Object.keys(row ?? {})) {\n      if (seen.has(key)) {\n        continue;\n      }\n      seen.add(key);\n      columns.push(key);\n    }\n  }\n\n  // Single empty object → DEFAULT VALUES (all columns use table defaults).\n  if (columns.length === 0) {\n    if (rows.length === 1) {\n      const compiled = compileSingleRowInsert(table, {}, payload);\n      return asSingle(compiled.sql, compiled.params);\n    }\n    throw new D1SqlCompileError(\n      \"empty_insert\",\n      \"Multi-row insert_body cannot be empty objects; use a single {} for DEFAULT VALUES\"\n    );\n  }\n\n  const forceNullForMissing = payload.default_to_null === true;\n  const isSparse = rows.some((row) =>\n    columns.some((column) => !Object.hasOwn(row, column))\n  );\n\n  // Sparse multi-row without NULL coercion: one INSERT per row with only present columns.\n  if (isSparse && !forceNullForMissing && rows.length > 1) {\n    return asBatch(\n      rows.map((row) =>\n        compileSingleRowInsert(table, row as AthenaJsonObject, payload)\n      )\n    );\n  }\n\n  // Single-row sparse without default_to_null: only insert present columns.\n  if (isSparse && !forceNullForMissing && rows.length === 1) {\n    const compiled = compileSingleRowInsert(\n      table,\n      rows[0] as AthenaJsonObject,\n      payload\n    );\n    return asSingle(compiled.sql, compiled.params);\n  }\n\n  const params: unknown[] = [];\n  const valueGroups = rows.map((row) => {\n    const placeholders = columns.map((column) => {\n      const has = Object.hasOwn(row, column);\n      if (!has) {\n        // Only when default_to_null: bind explicit NULL (valid in VALUES).\n        params.push(null);\n        return \"?\";\n      }\n      params.push(jsonValue((row as AthenaJsonObject)[column]));\n      return \"?\";\n    });\n    return `(${placeholders.join(\", \")})`;\n  });\n\n  const parts = [\n    `INSERT INTO ${quoteIdent(table)} (${columns.map(quoteIdent).join(\", \")})`,\n    `VALUES ${valueGroups.join(\", \")}`,\n  ];\n  appendOnConflict(parts, params, payload, columns);\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n\n  return asSingle(parts.join(\" \"), params);\n}\n\n/**\n * Compile update with required filters.\n * Pagination / sort bounds use a unique-identity IN (subquery) so only one page is updated.\n */\nexport function compileD1Update(\n  payload: AthenaUpdatePayload,\n  options?: D1CompileOptions\n): D1CompiledSql {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for update\"\n    );\n  }\n  const entries = Object.entries(payload.update_body ?? {});\n  if (entries.length === 0) {\n    throw new D1SqlCompileError(\n      \"empty_update\",\n      \"update_body must not be empty\"\n    );\n  }\n\n  const params: unknown[] = [];\n  const assignments = entries.map(([column, value]) => {\n    params.push(jsonValue(value as AthenaJsonValue));\n    return `${quoteIdent(column)} = ?`;\n  });\n\n  const where = buildWhere(payload.conditions);\n  if (!where.sql) {\n    throw new D1SqlCompileError(\n      \"unfiltered_update\",\n      \"UPDATE requires at least one condition on D1 edge-local\"\n    );\n  }\n\n  if (hasPaginationBounds(payload) || payload.sort_by) {\n    if (!hasPaginationBounds(payload)) {\n      throw new D1SqlCompileError(\n        \"order_without_bounds\",\n        \"UPDATE with sort_by requires limit/offset or page_size/current_page on D1 edge-local\"\n      );\n    }\n    const bounded = boundedRowidInClause(\n      table,\n      where.sql,\n      where.params,\n      {\n        ...payload,\n        conditions: payload.conditions,\n      },\n      options\n    );\n    params.push(...bounded.params);\n    const parts = [\n      `UPDATE ${quoteIdent(table)} SET ${assignments.join(\", \")}`,\n      `WHERE ${bounded.sql}`,\n    ];\n    if (wantsReturning(payload)) {\n      parts.push(`RETURNING ${selectClause(payload.columns)}`);\n    }\n    return asSingle(parts.join(\" \"), params);\n  }\n\n  params.push(...where.params);\n  const parts = [\n    `UPDATE ${quoteIdent(table)} SET ${assignments.join(\", \")}`,\n    where.sql,\n  ];\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return asSingle(parts.join(\" \"), params);\n}\n\n/**\n * Compile delete with required filters.\n *\n * `payload.resource_id` alone (no column filter) maps to `id = ?` for the common\n * Athena PK path. Explicit `.eq('resource_id', …)` / other filters are preserved\n * so tables with a real `resource_id` column are not rewritten to `id`.\n */\nexport function compileD1Delete(\n  payload: AthenaDeletePayload,\n  options?: D1CompileOptions\n): D1CompiledSql {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for delete\"\n    );\n  }\n\n  const conditions: AthenaGatewayCondition[] = [...(payload.conditions ?? [])];\n  if (payload.resource_id !== undefined && payload.resource_id !== null) {\n    const hasResourceIdFilter = conditions.some((condition) => {\n      const column = (condition.column ?? condition.eq_column ?? \"\").trim();\n      return column === \"resource_id\";\n    });\n    const hasIdFilter = conditions.some((condition) => {\n      const column = (condition.column ?? condition.eq_column ?? \"\").trim();\n      return column === \"id\";\n    });\n    // Only invent `id = resource_id` when the caller did not already filter by\n    // resource_id or id (e.g. delete({ resourceId }) with no eq conditions).\n    if (!(hasResourceIdFilter || hasIdFilter)) {\n      conditions.unshift({\n        column: \"id\",\n        operator: \"eq\",\n        value: payload.resource_id,\n      });\n    }\n  }\n\n  const where = buildWhere(conditions);\n  if (!where.sql) {\n    throw new D1SqlCompileError(\n      \"unfiltered_delete\",\n      \"DELETE requires at least one condition or resource_id on D1 edge-local\"\n    );\n  }\n\n  if (hasPaginationBounds(payload) || payload.sort_by) {\n    if (!hasPaginationBounds(payload)) {\n      throw new D1SqlCompileError(\n        \"order_without_bounds\",\n        \"DELETE with sort_by requires limit/offset or page_size/current_page on D1 edge-local\"\n      );\n    }\n    const bounded = boundedRowidInClause(\n      table,\n      where.sql,\n      where.params,\n      {\n        ...payload,\n        conditions,\n      },\n      options\n    );\n    const parts = [`DELETE FROM ${quoteIdent(table)}`, `WHERE ${bounded.sql}`];\n    if (wantsReturning(payload)) {\n      parts.push(`RETURNING ${selectClause(payload.columns)}`);\n    }\n    return asSingle(parts.join(\" \"), bounded.params);\n  }\n\n  const parts = [`DELETE FROM ${quoteIdent(table)}`, where.sql];\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return asSingle(parts.join(\" \"), where.params);\n}\n","import {\n  AthenaQueryError,\n  type AthenaConditionAst,\n  type AthenaQueryPlan,\n  type AthenaResolvedRelationConditionAst,\n  type AthenaResolvedSelectionField,\n  type AthenaResolvedSource,\n  canonicalizePagination,\n  D1_QUERY_CAPABILITIES,\n  validatePlanAgainstCapabilities,\n} from \"../../query/engine/index.ts\";\nimport { quoteQualifiedIdentifier } from \"../../sql-identifiers.ts\";\nimport { type D1CompiledSql, D1SqlCompileError } from \"./sql.ts\";\n\nconst SAFE_IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nclass Binder {\n  readonly params: unknown[] = [];\n\n  add(value: unknown): string {\n    this.params.push(value);\n    return \"?\";\n  }\n}\n\nfunction quoteIdent(name: string): string {\n  const trimmed = name.trim();\n  if (!SAFE_IDENT.test(trimmed)) {\n    throw new D1SqlCompileError(\n      \"invalid_identifier\",\n      `Invalid SQL identifier for D1: ${name}`\n    );\n  }\n  return quoteQualifiedIdentifier(trimmed);\n}\n\nfunction qualifyTable(source: AthenaResolvedSource): string {\n  return `${quoteIdent(source.table)} AS ${quoteIdent(source.alias)}`;\n}\n\nfunction qualifyColumn(alias: string, column: string): string {\n  if (column === \"*\") {\n    throw new D1SqlCompileError(\n      \"unsafe_select\",\n      \"SELECT * inside nested D1 relations is unsupported; name columns explicitly\"\n    );\n  }\n  return `${quoteIdent(alias)}.${quoteIdent(column)}`;\n}\n\nfunction compileCondition(\n  condition: AthenaConditionAst,\n  parent: AthenaResolvedSource,\n  binder: Binder\n): string {\n  switch (condition.kind) {\n    case \"and\":\n      return `(${condition.conditions.map((child) => compileCondition(child, parent, binder)).join(\" AND \")})`;\n    case \"or\":\n      return `(${condition.conditions.map((child) => compileCondition(child, parent, binder)).join(\" OR \")})`;\n    case \"not\":\n      return `(NOT ${compileCondition(condition.condition, parent, binder)})`;\n    case \"is-null\":\n      return `${qualifyColumn(parent.alias, condition.field.field)} IS${condition.negated ? \" NOT\" : \"\"} NULL`;\n    case \"is-true\":\n      return `${qualifyColumn(parent.alias, condition.field.field)} = ${binder.add(1)}`;\n    case \"is-false\":\n      return `${qualifyColumn(parent.alias, condition.field.field)} = ${binder.add(0)}`;\n    case \"in\": {\n      if (condition.values.length === 0) {\n        return \"1 = 0\";\n      }\n      return `${qualifyColumn(parent.alias, condition.field.field)} IN (${condition.values.map((value) => binder.add(value ?? null)).join(\", \")})`;\n    }\n    case \"contains\":\n    case \"contained-by\":\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        `${condition.kind} is unsupported on D1`\n      );\n    case \"compare\": {\n      if (condition.operator === \"ilike\") {\n        throw new D1SqlCompileError(\n          \"unsupported_operator\",\n          \"ilike is unsupported on D1\"\n        );\n      }\n      if (condition.value === null) {\n        throw new AthenaQueryError(\n          \"ATHENA_QUERY_INVALID_NORMALIZED_AST\",\n          \"Compare against null must be normalized to is-null before D1 compilation\"\n        );\n      }\n      const column = qualifyColumn(parent.alias, condition.field.field);\n      const placeholder = binder.add(condition.value);\n      switch (condition.operator) {\n        case \"eq\":\n          return `${column} = ${placeholder}`;\n        case \"neq\":\n          return `${column} <> ${placeholder}`;\n        case \"gt\":\n          return `${column} > ${placeholder}`;\n        case \"gte\":\n          return `${column} >= ${placeholder}`;\n        case \"lt\":\n          return `${column} < ${placeholder}`;\n        case \"lte\":\n          return `${column} <= ${placeholder}`;\n        case \"like\":\n          return `${column} LIKE ${placeholder}`;\n        default:\n          throw new D1SqlCompileError(\n            \"unsupported_operator\",\n            `Unknown compare operator`\n          );\n      }\n    }\n    case \"resolved-relation\":\n      return compileRelationPredicate(condition, parent, binder);\n    case \"relation\":\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_NORMALIZED_AST\",\n        `Unresolved relation predicate \"${condition.relation}\" reached the D1 compiler`\n      );\n    default:\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        \"Unsupported condition kind on D1\"\n      );\n  }\n}\n\nfunction compileRelationPredicate(\n  condition: AthenaResolvedRelationConditionAst,\n  parent: AthenaResolvedSource,\n  binder: Binder\n): string {\n  const child: AthenaResolvedSource = {\n    alias: condition.target.alias,\n    modelId: condition.target.modelId,\n    schema: condition.target.schema,\n    table: condition.target.table,\n  };\n  const { fromSql, joinSql } = compileRelationScope(\n    parent,\n    child,\n    condition.descriptor,\n    condition.junctionAlias\n  );\n  const filters = [joinSql];\n  if (condition.filter) {\n    const inner = compileCondition(condition.filter, child, binder);\n    if (condition.predicate === \"every\") {\n      filters.push(`NOT (CASE WHEN ${inner} THEN 1 ELSE 0 END)`);\n    } else {\n      filters.push(inner);\n    }\n  }\n  const exists = `EXISTS (SELECT 1 FROM ${fromSql} WHERE ${filters.join(\" AND \")})`;\n  if (\n    condition.predicate === \"none\" ||\n    condition.predicate === \"isNot\" ||\n    condition.predicate === \"every\"\n  ) {\n    return `NOT ${exists}`;\n  }\n  return exists;\n}\n\nfunction compileRelationScope(\n  parent: AthenaResolvedSource,\n  child: AthenaResolvedSource,\n  descriptor: {\n    cardinality: string;\n    from: { columns: string[] };\n    junction?: { fromColumns: string[]; table: string; toColumns: string[] };\n    to: { columns: string[] };\n  },\n  junctionAlias?: string\n): { fromSql: string; joinSql: string } {\n  if (descriptor.cardinality === \"many-to-many\") {\n    if (!descriptor.junction || !junctionAlias) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_NORMALIZED_AST\",\n        \"Many-to-many relation is missing junction metadata\"\n      );\n    }\n    const junctionOn = descriptor.junction.toColumns\n      .map(\n        (column, index) =>\n          `${qualifyColumn(junctionAlias, column)} = ${qualifyColumn(child.alias, descriptor.to.columns[index] as string)}`\n      )\n      .join(\" AND \");\n    const parentOn = descriptor.from.columns\n      .map(\n        (column, index) =>\n          `${qualifyColumn(parent.alias, column)} = ${qualifyColumn(junctionAlias, descriptor.junction?.fromColumns[index] as string)}`\n      )\n      .join(\" AND \");\n    return {\n      fromSql: `${qualifyTable(child)} JOIN ${quoteIdent(descriptor.junction.table)} AS ${quoteIdent(junctionAlias)} ON ${junctionOn}`,\n      joinSql: parentOn,\n    };\n  }\n  return {\n    fromSql: qualifyTable(child),\n    joinSql: joinPredicate(\n      parent,\n      child,\n      descriptor.from.columns,\n      descriptor.to.columns\n    ),\n  };\n}\n\nfunction joinPredicate(\n  parent: AthenaResolvedSource,\n  child: AthenaResolvedSource,\n  fromColumns: string[],\n  toColumns: string[]\n): string {\n  return fromColumns\n    .map(\n      (column, index) =>\n        `${qualifyColumn(parent.alias, column)} = ${qualifyColumn(child.alias, toColumns[index] as string)}`\n    )\n    .join(\" AND \");\n}\n\nfunction jsonObjectExpr(\n  fields: AthenaResolvedSelectionField[],\n  alias: string\n): string {\n  const pairs: string[] = [];\n  for (const field of fields) {\n    if (field.kind !== \"column\") {\n      throw new D1SqlCompileError(\n        \"relations_unsupported\",\n        \"D1 nested relations deeper than one level require an explicit column list at each level\"\n      );\n    }\n    const key = field.alias ?? field.column;\n    pairs.push(`'${key.replace(/'/g, \"''\")}'`, qualifyColumn(alias, field.column));\n  }\n  if (pairs.length === 0) {\n    throw new D1SqlCompileError(\n      \"unsafe_select\",\n      \"Nested D1 relation select is empty\"\n    );\n  }\n  return `json_object(${pairs.join(\", \")})`;\n}\n\nfunction compileSelectList(plan: AthenaQueryPlan, binder: Binder): string {\n  const parts: string[] = [];\n  for (const field of plan.selection) {\n    if (field.kind === \"column\") {\n      if (field.column === \"*\") {\n        parts.push(`${quoteIdent(plan.source.alias)}.*`);\n        continue;\n      }\n      const expr = qualifyColumn(plan.source.alias, field.column);\n      parts.push(\n        field.alias && field.alias !== field.column\n          ? `${expr} AS ${quoteIdent(field.alias)}`\n          : expr\n      );\n      continue;\n    }\n\n    const child = field.plan;\n    const { fromSql, joinSql } = compileRelationScope(\n      plan.source,\n      child.source,\n      field.descriptor,\n      field.junctionAlias\n    );\n    const objectExpr = jsonObjectExpr(child.selection, child.source.alias);\n    const filters = [joinSql];\n    if (child.filter) {\n      filters.push(compileCondition(child.filter, child.source, binder));\n    }\n    const page = canonicalizePagination(child.pagination);\n    const childOrder = child.orderBy?.[0]\n      ? ` ORDER BY ${qualifyColumn(child.source.alias, child.orderBy[0].field.field)} ${child.orderBy[0].direction === \"desc\" ? \"DESC\" : \"ASC\"}`\n      : \"\";\n    const toMany =\n      field.descriptor.cardinality === \"one-to-many\" ||\n      field.descriptor.cardinality === \"many-to-many\";\n    const limit = toMany\n      ? page.limit !== undefined\n        ? ` LIMIT ${Math.max(0, Math.trunc(page.limit))}`\n        : \"\"\n      : \" LIMIT 1\";\n    const offset =\n      page.offset !== undefined\n        ? ` OFFSET ${Math.max(0, Math.trunc(page.offset))}`\n        : \"\";\n    const inner = `SELECT ${objectExpr} AS __athena_rel FROM ${fromSql} WHERE ${filters.join(\" AND \")}${childOrder}${limit}${offset}`;\n    if (\n      field.descriptor.cardinality === \"one-to-many\" ||\n      field.descriptor.cardinality === \"many-to-many\"\n    ) {\n      parts.push(\n        `COALESCE((SELECT json_group_array(__athena_rel) FROM (${inner})), '[]') AS ${quoteIdent(field.alias)}`\n      );\n    } else {\n      parts.push(\n        `(SELECT __athena_rel FROM (${inner})) AS ${quoteIdent(field.alias)}`\n      );\n    }\n  }\n  return parts.join(\", \");\n}\n\nexport function compileD1Ast(plan: AthenaQueryPlan): D1CompiledSql {\n  if (!plan || plan.kind !== \"resolved-select\" || !Array.isArray(plan.selection)) {\n    throw new D1SqlCompileError(\n      \"unsupported_operator\",\n      \"compileD1Ast requires a resolved AthenaQueryPlan\"\n    );\n  }\n  validatePlanAgainstCapabilities(plan, D1_QUERY_CAPABILITIES);\n  const binder = new Binder();\n  const parts = [\n    `SELECT ${compileSelectList(plan, binder)} FROM ${qualifyTable(plan.source)}`,\n  ];\n  if (plan.filter) {\n    parts.push(`WHERE ${compileCondition(plan.filter, plan.source, binder)}`);\n  }\n  if (plan.orderBy?.[0]) {\n    const order = plan.orderBy[0];\n    parts.push(\n      `ORDER BY ${qualifyColumn(plan.source.alias, order.field.field)} ${order.direction === \"desc\" ? \"DESC\" : \"ASC\"}`\n    );\n  }\n  const page = canonicalizePagination(plan.pagination);\n  let limit = page.limit;\n  if (plan.cardinality === \"first\" || plan.cardinality === \"unique\") {\n    limit = 1;\n  }\n  if (limit !== undefined) {\n    parts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n  }\n  if (page.offset !== undefined) {\n    parts.push(`OFFSET ${Math.max(0, Math.trunc(page.offset))}`);\n  }\n  return { params: binder.params, sql: parts.join(\" \") };\n}\n","import type { AthenaRelationCatalog, AthenaRelationDescriptor } from \"../../query/engine/index.ts\";\nimport type { D1DatabaseLike } from \"../types.ts\";\nimport { executeD1Query } from \"./runner.ts\";\n\nconst SAFE_TABLE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\ninterface ForeignKeyPragmaRow {\n  from?: string;\n  id?: number;\n  seq?: number;\n  table?: string;\n  to?: string;\n}\n\nexport async function loadD1RelationCatalog(\n  d1: D1DatabaseLike,\n  tables: string[]\n): Promise<AthenaRelationCatalog> {\n  const entries: AthenaRelationDescriptor[] = [];\n  const seen = new Set<string>();\n\n  for (const rawTable of tables) {\n    const table = rawTable.includes(\".\")\n      ? (rawTable.split(\".\").pop() ?? rawTable)\n      : rawTable;\n    if (!SAFE_TABLE.test(table)) {\n      continue;\n    }\n    const result = await executeD1Query(d1, {\n      query: `PRAGMA foreign_key_list(${table})`,\n    });\n    if (!result.ok) {\n      continue;\n    }\n    const grouped = new Map<string, AthenaRelationDescriptor>();\n    for (const raw of result.rows as ForeignKeyPragmaRow[]) {\n      const constraintId = String(raw.id ?? 0);\n      const id = `d1.${table}.${constraintId}`;\n      const existing = grouped.get(id);\n      const fromCol = String(raw.from ?? \"\");\n      const toCol = String(raw.to ?? \"\");\n      const toTable = String(raw.table ?? \"\");\n      if (!(fromCol && toCol && toTable)) {\n        continue;\n      }\n      if (existing) {\n        existing.from.columns.push(fromCol);\n        existing.to.columns.push(toCol);\n        continue;\n      }\n      grouped.set(id, {\n        cardinality: \"many-to-one\",\n        from: { columns: [fromCol], table },\n        id,\n        name: toTable,\n        to: { columns: [toCol], table: toTable },\n      });\n    }\n    for (const entry of grouped.values()) {\n      if (seen.has(entry.id)) {\n        continue;\n      }\n      seen.add(entry.id);\n      entries.push(entry);\n    }\n  }\n\n  return { entries };\n}\n","import {\n  AthenaQueryError,\n  type AthenaRelationCatalog,\n  collectAstTables,\n  isAthenaQueryPlan,\n  isAthenaSelectQueryAst,\n  mergeRelationCatalogs,\n  normalizeTransportPayload,\n  resolveQueryPlan,\n  resetQueryPlanAliases,\n  selectPayloadHasRelations,\n} from \"../../query/engine/index.ts\";\nimport type { D1DatabaseLike } from \"../types.ts\";\nimport { compileD1Ast } from \"./compile-ast.ts\";\nimport { loadD1RelationCatalog } from \"./relation-catalog.ts\";\nimport { type D1CompiledSql, D1SqlCompileError } from \"./sql.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function needsD1AstPipeline(payload: unknown): boolean {\n  if (isAthenaSelectQueryAst(payload) || isAthenaQueryPlan(payload)) {\n    return true;\n  }\n  if (selectPayloadHasRelations(payload)) {\n    return true;\n  }\n  return isRecord(payload) && payload.operation === \"select\";\n}\n\nexport async function compileD1StructuredFetch(\n  payload: unknown,\n  d1: D1DatabaseLike,\n  options?: { catalog?: AthenaRelationCatalog }\n): Promise<D1CompiledSql> {\n  try {\n    resetQueryPlanAliases();\n    if (isAthenaQueryPlan(payload)) {\n      return compileD1Ast(payload);\n    }\n    const ast = normalizeTransportPayload(payload);\n    const tables = collectAstTables(ast).map((source) => source.table);\n    const live = await loadD1RelationCatalog(d1, tables);\n    const catalog = mergeRelationCatalogs(options?.catalog, live);\n    const plan = resolveQueryPlan(ast, { catalog });\n    return compileD1Ast(plan);\n  } catch (error) {\n    if (error instanceof D1SqlCompileError) {\n      throw error;\n    }\n    if (error instanceof AthenaQueryError) {\n      throw new D1SqlCompileError(error.code, error.message);\n    }\n    throw error;\n  }\n}\n","/**\n * Rewrite PostgreSQL-oriented SQL (from shared SDK typed planners) for SQLite/D1.\n */\n\nconst PG_CAST_TYPES =\n  \"text|uuid|citext|varchar|bpchar|char|integer|int4|int8|bigint|smallint|boolean|bool|jsonb|json|numeric|decimal|real|float|double precision|timestamptz|timestamp|date|bytea\";\n\n/**\n * Apply a transform only outside SQL string/identifier literals and comments.\n * Prevents corrupting values like `'value::text'` or `` `a;b` ``.\n */\nfunction mapSqlOutsideLiterals(\n  sql: string,\n  transform: (chunk: string) => string\n): string {\n  let out = \"\";\n  let buffer = \"\";\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  const flushCode = () => {\n    if (buffer) {\n      out += transform(buffer);\n      buffer = \"\";\n    }\n  };\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      out += ch;\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      out += ch;\n      if (ch === \"*\" && next === \"/\") {\n        out += next;\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      out += ch;\n      if (ch === \"'\" && next === \"'\") {\n        out += next;\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      out += ch;\n      if (ch === '\"' && next === '\"') {\n        out += next;\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      out += ch;\n      if (ch === \"`\" && next === \"`\") {\n        out += next;\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      out += ch;\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      flushCode();\n      out += ch;\n      out += next;\n      i += 1;\n      inLineComment = true;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      flushCode();\n      out += ch;\n      out += next;\n      i += 1;\n      inBlockComment = true;\n      continue;\n    }\n    if (ch === \"'\") {\n      flushCode();\n      out += ch;\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      flushCode();\n      out += ch;\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      flushCode();\n      out += ch;\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      flushCode();\n      out += ch;\n      inBracket = true;\n      continue;\n    }\n\n    buffer += ch;\n  }\n\n  flushCode();\n  return out;\n}\n\ninterface SqlKeywordHit {\n  /** Parenthesis nesting depth at the keyword. */\n  depth: number;\n  kind: \"limit\" | \"offset\";\n  /** Start index of the keyword in the full SQL string. */\n  start: number;\n  /**\n   * Top-level statement index (increments on `;` at depth 0).\n   * Prevents a LIMIT in statement N from “covering” a bare OFFSET in statement N+1.\n   */\n  statement: number;\n}\n\nfunction isIdentChar(ch: string | undefined): boolean {\n  if (!ch) {\n    return false;\n  }\n  return /[A-Za-z0-9_]/.test(ch);\n}\n\n/**\n * Collect LIMIT / OFFSET keyword positions outside literals/comments, with paren depth.\n */\nfunction collectLimitOffsetKeywords(sql: string): SqlKeywordHit[] {\n  const hits: SqlKeywordHit[] = [];\n  let depth = 0;\n  let statement = 0;\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      continue;\n    }\n    if (ch === \"(\") {\n      depth += 1;\n      continue;\n    }\n    if (ch === \")\") {\n      depth = Math.max(0, depth - 1);\n      continue;\n    }\n    // Top-level statement separator (outside strings/comments/parens).\n    if (ch === \";\" && depth === 0) {\n      statement += 1;\n      continue;\n    }\n\n    // Keyword scan only at identifier boundaries.\n    if (!isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n      continue;\n    }\n\n    const rest = sql.slice(i);\n    if (/^LIMIT\\b/i.test(rest)) {\n      hits.push({ depth, kind: \"limit\", start: i, statement });\n      i += 4; // advance to last char of LIMIT; loop +1\n      continue;\n    }\n    if (/^OFFSET\\b/i.test(rest)) {\n      hits.push({ depth, kind: \"offset\", start: i, statement });\n      i += 5;\n    }\n  }\n\n  return hits;\n}\n\n/**\n * SQLite requires LIMIT when OFFSET is present. Inject `LIMIT -1` before each bare\n * OFFSET, considering the full SQL (across comments/literals) and paren depth so\n * nested LIMITs do not suppress outer bare OFFSET, and comments between LIMIT and\n * OFFSET do not produce double LIMIT.\n */\nexport function injectLimitBeforeBareOffsets(sql: string): string {\n  const hits = collectLimitOffsetKeywords(sql);\n  if (hits.length === 0) {\n    return sql;\n  }\n\n  const injectAt: number[] = [];\n  for (const hit of hits) {\n    if (hit.kind !== \"offset\") {\n      continue;\n    }\n    let hasLimit = false;\n    for (let i = hits.length - 1; i >= 0; i -= 1) {\n      const prev = hits[i]!;\n      if (prev.start >= hit.start) {\n        continue;\n      }\n      // Only a LIMIT in the same top-level statement and paren depth counts.\n      if (prev.statement !== hit.statement) {\n        continue;\n      }\n      if (prev.depth !== hit.depth) {\n        continue;\n      }\n      if (prev.kind === \"limit\") {\n        hasLimit = true;\n        break;\n      }\n      if (prev.kind === \"offset\") {\n        // Prior OFFSET at same depth/statement without a LIMIT between is still bare.\n        break;\n      }\n    }\n    if (!hasLimit) {\n      injectAt.push(hit.start);\n    }\n  }\n\n  if (injectAt.length === 0) {\n    return sql;\n  }\n\n  // Insert from the end so earlier indices stay valid.\n  let out = sql;\n  for (let i = injectAt.length - 1; i >= 0; i -= 1) {\n    const at = injectAt[i]!;\n    out = `${out.slice(0, at)}LIMIT -1 ${out.slice(at)}`;\n  }\n  return out;\n}\n\n/**\n * Strip Postgres cast suffixes and normalize a few operators so UUID equality\n * plans like `\"id\"::text = '…'::text` execute on D1.\n * String/identifier literals are left unchanged.\n */\nexport function rewritePostgresSqlForSqlite(sql: string): string {\n  const castPattern = new RegExp(`::(?:${PG_CAST_TYPES})\\\\b`, \"gi\");\n  const withoutCastsAndIlike = mapSqlOutsideLiterals(sql, (chunk) => {\n    let rewritten = chunk.replace(castPattern, \"\");\n    // ILIKE is Postgres-only; NOCASE is the D1/SQLite approximation used by L1 compiler.\n    rewritten = rewritten.replace(/\\bILIKE\\b/gi, \"LIKE\");\n    return rewritten;\n  });\n  // OFFSET rewrite must see the full statement (LIMIT may be separated by comments).\n  return injectLimitBeforeBareOffsets(withoutCastsAndIlike);\n}\n","import { AthenaGatewayError } from \"../../gateway/errors.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport { AthenaTransactionError } from \"../../db/transaction/errors.ts\";\nimport type {\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionOperation,\n  AthenaTransactionTransport,\n  AthenaTransactionTransportResult,\n} from \"../../db/transaction/types.ts\";\nimport { D1_BATCH_TRANSACTION_CAPABILITIES } from \"../../db/transaction/types.ts\";\nimport type { D1DatabaseLike, D1ResultLike } from \"../types.ts\";\nimport { executeD1Batch } from \"./runner.ts\";\nimport {\n  compileD1Delete,\n  compileD1Fetch,\n  compileD1Insert,\n  compileD1Update,\n  type D1CompiledSql,\n  type D1CompileOptions,\n  D1SqlCompileError,\n} from \"./sql.ts\";\n\nfunction d1ErrorResponse<T>(\n  message: string,\n  hint?: string\n): AthenaGatewayResponse<T> {\n  const error = new AthenaGatewayError({\n    code: \"HTTP_ERROR\",\n    endpoint: \"/gateway/transaction\" as never,\n    hint,\n    message,\n    method: \"POST\",\n    status: 400,\n  });\n  return {\n    data: null,\n    error: error.message,\n    errorDetails: error.toDetails(),\n    ok: false,\n    raw: { code: \"HTTP_ERROR\", error: message },\n    status: 400,\n    statusText: null,\n  };\n}\n\nfunction stripNullsFromRows(rows: unknown[], strip: boolean): unknown[] {\n  if (!strip) {\n    return rows;\n  }\n  return rows.map((row) => {\n    if (row === null || typeof row !== \"object\" || Array.isArray(row)) {\n      return row;\n    }\n    const out: Record<string, unknown> = {};\n    for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n      if (value !== null) {\n        out[key] = value;\n      }\n    }\n    return out;\n  });\n}\n\nfunction flattenCompiled(compiled: D1CompiledSql): {\n  params?: unknown[];\n  query: string;\n}[] {\n  if (compiled.statements && compiled.statements.length > 0) {\n    return compiled.statements.map((statement) => ({\n      params: statement.params,\n      query: statement.sql,\n    }));\n  }\n  return [{ params: compiled.params, query: compiled.sql }];\n}\n\nfunction mapSlice(\n  operation: AthenaTransactionOperation,\n  compiled: D1CompiledSql,\n  slice: D1ResultLike<unknown>[],\n  callOptions?: AthenaGatewayCallOptions\n): AthenaGatewayResponse<unknown> {\n  const failed = slice.find((item) => item.success === false || item.error);\n  if (failed) {\n    return d1ErrorResponse(\n      failed.error ?? \"D1 statement failed\",\n      `operation ${operation.id} (${operation.kind})`\n    );\n  }\n  const strip =\n    typeof callOptions?.stripNulls === \"boolean\" ? callOptions.stripNulls : true;\n  const rows = stripNullsFromRows(\n    slice.flatMap((item) => (Array.isArray(item.results) ? item.results : [])),\n    strip\n  );\n  const changes = slice.reduce((sum, item) => {\n    const n =\n      item.meta && typeof item.meta.changes === \"number\"\n        ? item.meta.changes\n        : 0;\n    return sum + n;\n  }, 0);\n  const count = rows.length > 0 ? rows.length : changes;\n  let data: unknown = rows;\n  if (\n    operation.kind === \"insert\" &&\n    !Array.isArray((operation.payload as AthenaInsertPayload).insert_body) &&\n    rows.length === 1\n  ) {\n    data = rows[0];\n  } else if (operation.kind === \"update\" && rows.length === 1) {\n    data = rows[0];\n  }\n  void compiled;\n  return {\n    count,\n    data,\n    error: undefined,\n    errorDetails: null,\n    ok: true,\n    raw: slice,\n    status: 200,\n    statusText: \"OK\",\n  };\n}\n\nexport function createD1TransactionTransport(input: {\n  compileOptionsForBoundedMutation: (\n    payload: {\n      current_page?: number;\n      limit?: number;\n      offset?: number;\n      page_size?: number;\n      sort_by?: unknown;\n      table_name?: string;\n    },\n    callOptions?: AthenaGatewayCallOptions\n  ) => Promise<D1CompileOptions | undefined>;\n  d1: D1DatabaseLike;\n  sessionFromOptions: (callOptions?: AthenaGatewayCallOptions) => {\n    bookmark?: string | null;\n    sessionMode?: string | null;\n  };\n}): AthenaTransactionTransport {\n  return {\n    capabilities: D1_BATCH_TRANSACTION_CAPABILITIES,\n    async executeAtomic(\n      operations: readonly AthenaTransactionOperation[],\n      options?: AthenaResolvedTransactionOptions\n    ): Promise<AthenaTransactionTransportResult> {\n      const compiledList: D1CompiledSql[] = [];\n      const statementRanges: Array<{ end: number; start: number }> = [];\n      const statements: { params?: unknown[]; query: string }[] = [];\n      try {\n        for (const operation of operations) {\n          let compiled: D1CompiledSql;\n          switch (operation.kind) {\n            case \"fetch\":\n              compiled = compileD1Fetch(operation.payload as AthenaFetchPayload);\n              break;\n            case \"insert\":\n              compiled = compileD1Insert(\n                operation.payload as AthenaInsertPayload\n              );\n              break;\n            case \"update\":\n              compiled = compileD1Update(\n                operation.payload as AthenaUpdatePayload,\n                await input.compileOptionsForBoundedMutation(\n                  operation.payload as AthenaUpdatePayload,\n                  options?.callOptions\n                )\n              );\n              break;\n            case \"delete\":\n              compiled = compileD1Delete(\n                operation.payload as AthenaDeletePayload,\n                await input.compileOptionsForBoundedMutation(\n                  operation.payload as AthenaDeletePayload,\n                  options?.callOptions\n                )\n              );\n              break;\n            default:\n              throw new AthenaTransactionError(\n                \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n                \"Unsupported D1 transaction operation\"\n              );\n          }\n          const flat = flattenCompiled(compiled);\n          const start = statements.length;\n          statements.push(...flat);\n          compiledList.push(compiled);\n          statementRanges.push({ end: statements.length, start });\n        }\n      } catch (error) {\n        if (error instanceof D1SqlCompileError) {\n          throw new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n            error.message,\n            { code: error.code }\n          );\n        }\n        throw error;\n      }\n\n      const session = input.sessionFromOptions(options?.callOptions);\n      const batch = await executeD1Batch(input.d1, {\n        statements,\n        ...session,\n      });\n      if (!batch.ok) {\n        return {\n          committed: false,\n          results: operations.map((operation) =>\n            d1ErrorResponse(batch.message, operation.kind)\n          ),\n        };\n      }\n\n      const results = operations.map((operation, index) => {\n        const range = statementRanges[index]!;\n        return mapSlice(\n          operation,\n          compiledList[index]!,\n          batch.results.slice(range.start, range.end),\n          options?.callOptions\n        );\n      });\n      return {\n        committed: results.every((result) => result.ok),\n        results,\n      };\n    },\n  };\n}\n","import type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport { AthenaGatewayError } from \"../../gateway/errors.ts\";\nimport { resolveMutationAffectedRows } from \"../../result/mutation-meta.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaQueryPayload,\n  AthenaRpcCallOptions,\n  AthenaRpcPayload,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport type { D1DatabaseLike } from \"../types.ts\";\nimport { CLOUDFLARE_EDGE_BASE_URL } from \"../types.ts\";\nimport {\n  type D1RunnerBatchResult,\n  type D1RunnerQueryResult,\n  executeD1Batch,\n  executeD1Query,\n} from \"./runner.ts\";\nimport {\n  compileD1StructuredFetch,\n  needsD1AstPipeline,\n} from \"./compile-fetch.ts\";\nimport {\n  compileD1Count,\n  compileD1Delete,\n  compileD1Fetch,\n  compileD1Insert,\n  compileD1Update,\n  type D1CompiledSql,\n  type D1CompileOptions,\n  D1SqlCompileError,\n  extractAthenaCount,\n} from \"./sql.ts\";\nimport { rewritePostgresSqlForSqlite } from \"./sql-rewrite.ts\";\nimport { createD1TransactionTransport } from \"./transaction.ts\";\n\n/** Narrow failure message without relying on dts-time discriminant collapse. */\nfunction d1ErrorMessage(\n  result: D1RunnerQueryResult | D1RunnerBatchResult\n): string {\n  return result.ok ? \"unknown error\" : result.message;\n}\n\nexport interface CloudflareD1TransportOptions {\n  d1: D1DatabaseLike;\n  /** Default D1 session mode when headers omit session mode. */\n  defaultSessionMode?: string | null;\n  relationCatalog?: import(\"../../query/engine/relations.ts\").AthenaRelationCatalog;\n}\n\nfunction hasPaginationBounds(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): boolean {\n  return (\n    payload.limit !== undefined ||\n    payload.offset !== undefined ||\n    payload.page_size !== undefined ||\n    payload.current_page !== undefined\n  );\n}\n\n/** Normalize SQLite collation names for equality comparison. */\nfunction normalizeSqliteCollation(name: string | null | undefined): string {\n  const raw = String(name ?? \"\")\n    .trim()\n    .replace(/^[\"'`[]|[\"'`\\]]$/g, \"\");\n  if (!raw) {\n    return \"BINARY\";\n  }\n  return raw.toUpperCase();\n}\n\n/**\n * Locate the opening `(` of a CREATE TABLE column list.\n * Returns the index of `(` or -1 when not found.\n */\nfunction findCreateTableColumnListOpen(createSql: string): number {\n  // CREATE [TEMP|TEMPORARY|VIRTUAL] TABLE [IF NOT EXISTS] name (\n  const m =\n    /\\bCREATE\\s+(?:(?:TEMP|TEMPORARY|VIRTUAL)\\s+)?TABLE\\s+(?:IF\\s+NOT\\s+EXISTS\\s+)?/i.exec(\n      createSql\n    );\n  if (!m) {\n    return -1;\n  }\n  let i = m.index + m[0].length;\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  while (i < createSql.length) {\n    const ch = createSql[i]!;\n    if (inSingle) {\n      if (ch === \"'\" && createSql[i + 1] === \"'\") {\n        i += 2;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      i++;\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      i++;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      i++;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      i++;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      i++;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      i++;\n      continue;\n    }\n    if (ch === \"(\") {\n      return i;\n    }\n    i++;\n  }\n  return -1;\n}\n\n/**\n * Parse a column's COLLATE clause from CREATE TABLE SQL.\n * Returns null when the column has no explicit collation (defaults to BINARY).\n *\n * Type modifiers may contain parentheses and commas (`VARCHAR(255)`,\n * `NUMERIC(10, 2)`). A simple `[^,)]` scan stops at the first `)` and misses\n * `name VARCHAR(255) COLLATE NOCASE`, so we scan the column definition with\n * balanced parentheses before locating COLLATE.\n *\n * Column-name matching is anchored inside the CREATE TABLE `(…)` list so a\n * table whose name equals a column (e.g. `CREATE TABLE name (…, name TEXT …)`)\n * does not steal the first unanchored match.\n */\nfunction parseColumnCollationFromCreateSql(\n  createSql: string,\n  columnName: string\n): string | null {\n  if (!(createSql && columnName)) {\n    return null;\n  }\n  const listOpen = findCreateTableColumnListOpen(createSql);\n  if (listOpen < 0) {\n    return null;\n  }\n  // Search only inside the top-level column list (depth starts at 1 after `(`).\n  const listStart = listOpen + 1;\n  const escaped = columnName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n  const nameRe = new RegExp(\n    `(?:^|[^\\\\w])(?:\"${escaped}\"|\\`${escaped}\\`|\\\\[${escaped}\\\\]|${escaped})\\\\s+`,\n    \"i\"\n  );\n  const listSlice = createSql.slice(listStart);\n  // Walk top-level segments so UNIQUE(name COLLATE …) does not match as a column.\n  // Capture match text length in a plain number so TS control-flow analysis does not\n  // collapse the closure-assigned RegExpExecArray to `never` when reading `[0].length`.\n  let nameMatchAbs = -1;\n  let nameMatchLen = 0;\n  {\n    let i = 0;\n    let depth = 1;\n    let inSingle = false;\n    let inDouble = false;\n    let inBacktick = false;\n    let inBracket = false;\n    let segmentStart = 0;\n    const trySegment = (from: number, to: number) => {\n      if (nameMatchAbs >= 0) {\n        return undefined;\n      }\n      const segment = listSlice.slice(from, to);\n      const m = nameRe.exec(segment);\n      if (!m) {\n        return undefined;\n      }\n      // Column defs start at segment start (optional whitespace); reject mid-segment\n      // matches inside expressions that are not leading column names.\n      const leading = segment.slice(0, m.index).trim();\n      if (leading.length > 0) {\n        return undefined;\n      }\n      nameMatchAbs = listStart + from + m.index;\n      nameMatchLen = m[0].length;\n    };\n    while (i < listSlice.length && depth > 0) {\n      const ch = listSlice[i]!;\n      if (inSingle) {\n        if (ch === \"'\" && listSlice[i + 1] === \"'\") {\n          i += 2;\n          continue;\n        }\n        if (ch === \"'\") {\n          inSingle = false;\n        }\n        i++;\n        continue;\n      }\n      if (inDouble) {\n        if (ch === '\"') {\n          inDouble = false;\n        }\n        i++;\n        continue;\n      }\n      if (inBacktick) {\n        if (ch === \"`\") {\n          inBacktick = false;\n        }\n        i++;\n        continue;\n      }\n      if (inBracket) {\n        if (ch === \"]\") {\n          inBracket = false;\n        }\n        i++;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = true;\n        i++;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = true;\n        i++;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = true;\n        i++;\n        continue;\n      }\n      if (ch === \"[\") {\n        inBracket = true;\n        i++;\n        continue;\n      }\n      if (ch === \"(\") {\n        depth++;\n        i++;\n        continue;\n      }\n      if (ch === \")\") {\n        depth--;\n        if (depth === 0) {\n          trySegment(segmentStart, i);\n          break;\n        }\n        i++;\n        continue;\n      }\n      if (ch === \",\" && depth === 1) {\n        trySegment(segmentStart, i);\n        segmentStart = i + 1;\n        i++;\n        continue;\n      }\n      i++;\n    }\n  }\n  if (nameMatchAbs < 0 || nameMatchLen <= 0) {\n    return null;\n  }\n\n  const start = nameMatchAbs + nameMatchLen;\n  let i = start;\n  let depth = 0;\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n\n  while (i < createSql.length) {\n    const ch = createSql[i]!;\n\n    if (inSingle) {\n      if (ch === \"'\" && createSql[i + 1] === \"'\") {\n        i += 2;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      i++;\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      i++;\n      continue;\n    }\n\n    if (ch === \"'\") {\n      inSingle = true;\n      i++;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      i++;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      i++;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      i++;\n      continue;\n    }\n\n    if (ch === \"(\") {\n      depth++;\n      i++;\n      continue;\n    }\n    if (ch === \")\") {\n      if (depth === 0) {\n        // End of the CREATE TABLE column list.\n        break;\n      }\n      depth--;\n      i++;\n      continue;\n    }\n    if (ch === \",\" && depth === 0) {\n      // Next column or table constraint.\n      break;\n    }\n    i++;\n  }\n\n  const colDef = createSql.slice(start, i);\n  const collRe =\n    /\\bCOLLATE\\s+(\"([^\"]+)\"|'([^']+)'|`([^`]+)`|\\[([^\\]]+)\\]|([A-Za-z_][\\w$]*))/i;\n  const match = collRe.exec(colDef);\n  if (!match) {\n    return null;\n  }\n  return (\n    match[2] ?? match[3] ?? match[4] ?? match[5] ?? match[6] ?? match[1] ?? null\n  );\n}\n\n/**\n * True when the unique index's key collation matches the column's declared\n * collation (or both default to BINARY). Mismatch means\n * `col IN (SELECT col … LIMIT n)` can match more rows than the unique index\n * guarantees (e.g. NOCASE column + BINARY unique index).\n */\nasync function indexCollationMatchesColumn(\n  d1: D1DatabaseLike,\n  table: string,\n  tableSafe: string,\n  indexSafe: string,\n  columnName: string,\n  session?: { bookmark?: string | null; sessionMode?: string | null }\n): Promise<boolean> {\n  interface IndexXInfoRow {\n    cid?: number | null;\n    coll?: string | null;\n    key?: number | boolean | null;\n    name?: string | null;\n  }\n\n  const xinfo = await executeD1Query(d1, {\n    params: [],\n    query: `PRAGMA index_xinfo(\"${indexSafe}\")`,\n    ...session,\n  });\n  if (!xinfo.ok) {\n    // Without index_xinfo we cannot prove collation safety — reject the index.\n    return false;\n  }\n\n  const xRows = (xinfo.rows as IndexXInfoRow[]) ?? [];\n  const keyRows = xRows.filter((row) => {\n    const isKey = row.key === 1 || row.key === true || Number(row.key) === 1;\n    if (!isKey) {\n      return false;\n    }\n    return typeof row.name === \"string\" && row.name === columnName;\n  });\n  if (keyRows.length === 0) {\n    // Some drivers omit key flags; fall back to first named match.\n    const byName = xRows.find(\n      (row) => typeof row.name === \"string\" && row.name === columnName\n    );\n    if (!byName) {\n      return false;\n    }\n    keyRows.push(byName);\n  }\n\n  const indexColl = normalizeSqliteCollation(keyRows[0]?.coll);\n\n  const master = await executeD1Query(d1, {\n    params: [table],\n    query: `SELECT sql AS create_sql FROM sqlite_master WHERE type = 'table' AND name = ?`,\n    ...session,\n  });\n  let createSql = \"\";\n  if (master.ok && Array.isArray(master.rows) && master.rows.length > 0) {\n    createSql = String(\n      (master.rows[0] as { create_sql?: string | null })?.create_sql ?? \"\"\n    );\n  }\n  // tableSafe unused for query (bound param uses table); silence unused if needed\n  void tableSafe;\n\n  const columnCollRaw = parseColumnCollationFromCreateSql(\n    createSql,\n    columnName\n  );\n  const columnColl = normalizeSqliteCollation(columnCollRaw);\n\n  return indexColl === columnColl;\n}\n\n/**\n * Resolve a single-column unique identity for bounded mutations from live D1\n * schema (PRAGMA table_info + index_list). Prefer PRIMARY KEY; else a single-\n * column UNIQUE index. Multi-column keys are rejected as unsafe for IN-subquery.\n */\nexport async function resolveD1BoundedIdentityColumn(\n  d1: D1DatabaseLike,\n  tableName: string,\n  session?: { bookmark?: string | null; sessionMode?: string | null }\n): Promise<string> {\n  const table = tableName.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for bounded mutation\"\n    );\n  }\n  // Quote via double-quote after escaping; PRAGMA does not take bound params for table name.\n  const safe = table.replace(/\"/g, '\"\"');\n\n  const info = await executeD1Query(d1, {\n    params: [],\n    query: `PRAGMA table_info(\"${safe}\")`,\n    ...session,\n  });\n  if (!info.ok) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_no_unique_identity\",\n      `Unable to introspect table \"${table}\" for bounded mutation identity: ${d1ErrorMessage(info)}`\n    );\n  }\n\n  interface PragmaCol {\n    name?: string;\n    notnull?: number | boolean;\n    pk?: number;\n    type?: string;\n  }\n  const cols = (info.rows as PragmaCol[]).filter(\n    (row) => typeof row?.name === \"string\" && row.name.length > 0\n  );\n  const colByName = new Map(cols.map((col) => [col.name!, col]));\n  const isNotNullColumn = (name: string): boolean => {\n    const col = colByName.get(name);\n    if (!col) {\n      return false;\n    }\n    return (\n      col.notnull === 1 || col.notnull === true || Number(col.notnull) === 1\n    );\n  };\n  /**\n   * Candidate SQLite rowid alias: single-column PRIMARY KEY declared as INTEGER.\n   * PRAGMA table_info still reports notnull=0 for true rowid aliases. The\n   * INTEGER PRIMARY KEY DESC exception is NOT a rowid alias (nullable, non-\n   * unique); detect it via a separate origin='pk' index or CREATE TABLE SQL.\n   */\n  const isIntegerPrimaryKeyType = (col: PragmaCol): boolean => {\n    if (typeof col.pk !== \"number\" || col.pk <= 0) {\n      return false;\n    }\n    const declared = String(col.type ?? \"\")\n      .trim()\n      .toUpperCase();\n    return declared === \"INTEGER\";\n  };\n\n  interface IndexRow {\n    name?: string;\n    /** SQLite: 'c' | 'u' | 'pk' */\n    origin?: string;\n    /** SQLite: 1 when the index has a WHERE clause (partial). */\n    partial?: number | boolean;\n    unique?: number | boolean;\n  }\n\n  const loadIndexList = async (): Promise<IndexRow[] | null> => {\n    const indexList = await executeD1Query(d1, {\n      params: [],\n      query: `PRAGMA index_list(\"${safe}\")`,\n      ...session,\n    });\n    if (!indexList.ok) {\n      return null;\n    }\n    return indexList.rows as IndexRow[];\n  };\n\n  /**\n   * True when the INTEGER PRIMARY KEY is NOT a rowid alias (DESC exception).\n   * True rowid aliases have no origin='pk' index; DESC creates one. When origin\n   * is omitted by the driver, parse sqlite_master CREATE TABLE for DESC.\n   */\n  const isDescendingIntegerPrimaryKeyException = async (\n    colName: string,\n    indexes: IndexRow[] | null\n  ): Promise<boolean> => {\n    if (indexes) {\n      const hasPkOrigin = indexes.some(\n        (index) => String(index.origin ?? \"\").toLowerCase() === \"pk\"\n      );\n      if (hasPkOrigin) {\n        return true;\n      }\n      // Empty list or origins present without 'pk' ⇒ true rowid alias.\n      const originReported = indexes.some(\n        (index) =>\n          index.origin !== undefined &&\n          index.origin !== null &&\n          String(index.origin).length > 0\n      );\n      if (indexes.length === 0 || originReported) {\n        return false;\n      }\n    }\n\n    // Fallback when index_list failed or origin is unavailable on rows.\n    const master = await executeD1Query(d1, {\n      params: [table],\n      query: `SELECT sql AS create_sql FROM sqlite_master WHERE type = 'table' AND name = ?`,\n      ...session,\n    });\n    if (\n      !(master.ok && Array.isArray(master.rows)) ||\n      master.rows.length === 0\n    ) {\n      return false;\n    }\n    const createSql = String(\n      (master.rows[0] as { create_sql?: string | null })?.create_sql ?? \"\"\n    );\n    if (!createSql) {\n      return false;\n    }\n    const escaped = colName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    // Inline: id INTEGER PRIMARY KEY DESC\n    const inlineDesc = new RegExp(\n      `(?:^|[^\\\\w])(?:\"${escaped}\"|${escaped})\\\\s+INTEGER\\\\s+PRIMARY\\\\s+KEY\\\\s+DESC\\\\b`,\n      \"i\"\n    );\n    // Table-level: PRIMARY KEY (id DESC) or PRIMARY KEY(\"id\" DESC)\n    const tableDesc = new RegExp(\n      `PRIMARY\\\\s+KEY\\\\s*\\\\(\\\\s*(?:\"${escaped}\"|${escaped})\\\\s+DESC\\\\b`,\n      \"i\"\n    );\n    return inlineDesc.test(createSql) || tableDesc.test(createSql);\n  };\n\n  const pkCols = cols\n    .filter((row) => typeof row.pk === \"number\" && row.pk > 0)\n    .sort((a, b) => (a.pk ?? 0) - (b.pk ?? 0));\n\n  // Load index_list once when needed for PK validation or unique-index scan.\n  let indexRows: IndexRow[] | null | undefined;\n\n  if (pkCols.length === 1 && pkCols[0]?.name) {\n    // SQLite WITHOUT ROWID requires NOT NULL on PK; ordinary rowid tables allow\n    // NULL in a TEXT PRIMARY KEY (multiple NULLs). NULL IN (NULL) is unknown, so\n    // bounded mutations must not use a nullable PK as the identity column —\n    // except INTEGER PRIMARY KEY rowid alias (notnull may be 0, no pk index).\n    //\n    // Non-rowid PKs must also pass the same collation check as UNIQUE indexes:\n    // `name TEXT COLLATE NOCASE NOT NULL, PRIMARY KEY(name COLLATE BINARY)` allows\n    // both `a` and `A`, but outer `name IN (SELECT name …)` uses column NOCASE.\n    if (isIntegerPrimaryKeyType(pkCols[0])) {\n      indexRows = await loadIndexList();\n      const isDescException = await isDescendingIntegerPrimaryKeyException(\n        pkCols[0].name,\n        indexRows\n      );\n      if (!isDescException) {\n        return pkCols[0].name;\n      }\n      // Fall through: DESC INTEGER PK is nullable / non-rowid; try UNIQUE indexes.\n    } else if (isNotNullColumn(pkCols[0].name)) {\n      indexRows = await loadIndexList();\n      const pkIndex = (indexRows ?? []).find(\n        (index) => String(index.origin ?? \"\").toLowerCase() === \"pk\"\n      );\n      if (pkIndex && typeof pkIndex.name === \"string\" && pkIndex.name) {\n        const indexSafe = pkIndex.name.replace(/\"/g, '\"\"');\n        const collMatch = await indexCollationMatchesColumn(\n          d1,\n          table,\n          safe,\n          indexSafe,\n          pkCols[0].name,\n          session\n        );\n        if (collMatch) {\n          return pkCols[0].name;\n        }\n        // Collation mismatch — do not use this PK; try UNIQUE indexes.\n      }\n      // No origin='pk' index to prove collation safety — fall through.\n    }\n    // Fall through to UNIQUE indexes / rejection.\n  }\n  // Composite PK: cannot use multi-column identity for IN-subquery, but a\n  // separate single-column UNIQUE NOT NULL index may still qualify — fall through.\n\n  // No usable single-column PK. Scan full-table, non-partial, NOT NULL unique indexes.\n  if (indexRows === undefined) {\n    indexRows = await loadIndexList();\n  }\n  if (indexRows) {\n    for (const index of indexRows) {\n      const unique =\n        index.unique === 1 ||\n        index.unique === true ||\n        Number(index.unique) === 1;\n      if (!unique || typeof index.name !== \"string\" || !index.name) {\n        continue;\n      }\n      const isPartial =\n        index.partial === 1 ||\n        index.partial === true ||\n        Number(index.partial) === 1;\n      if (isPartial) {\n        // Partial UNIQUE (e.g. WHERE active = 1) allows duplicate values outside\n        // the predicate; using that column for `IN (SELECT … LIMIT n)` can mutate\n        // more rows than the requested page.\n        continue;\n      }\n      const indexSafe = index.name.replace(/\"/g, '\"\"');\n      const indexInfo = await executeD1Query(d1, {\n        params: [],\n        query: `PRAGMA index_info(\"${indexSafe}\")`,\n        ...session,\n      });\n      if (!indexInfo.ok) {\n        continue;\n      }\n      interface IndexInfoRow {\n        cid?: number | null;\n        name?: string | null;\n      }\n      const rawIndexCols = (indexInfo.rows as IndexInfoRow[]) ?? [];\n      // Expression index terms report null name (and often cid < 0). Filtering\n      // them out would shrink UNIQUE(tenant_id, lower(email)) to a false\n      // single-column identity — reject the whole index instead.\n      const hasExpressionTerm = rawIndexCols.some((row) => {\n        const nameOk = typeof row?.name === \"string\" && row.name.length > 0;\n        if (!nameOk) {\n          return true;\n        }\n        if (typeof row.cid === \"number\" && row.cid < 0) {\n          return true;\n        }\n        return false;\n      });\n      if (hasExpressionTerm || rawIndexCols.length === 0) {\n        continue;\n      }\n      const indexCols = rawIndexCols.filter(\n        (row): row is IndexInfoRow & { name: string } =>\n          typeof row?.name === \"string\" && row.name.length > 0\n      );\n      if (indexCols.length === 1 && indexCols[0]?.name) {\n        const identity = indexCols[0].name;\n        // SQLite UNIQUE allows multiple NULLs; `col IN (SELECT col …)` never\n        // matches NULL, so a null identity page can under- or over-mutate.\n        if (!isNotNullColumn(identity)) {\n          continue;\n        }\n        // Reject when the unique index collation differs from the column's\n        // declared collation: `identity IN (SELECT identity … LIMIT n)` uses\n        // column equality, which can match more rows than the unique index\n        // (e.g. TEXT COLLATE NOCASE column + UNIQUE COLLATE BINARY index).\n        const collMatch = await indexCollationMatchesColumn(\n          d1,\n          table,\n          safe,\n          indexSafe,\n          identity,\n          session\n        );\n        if (!collMatch) {\n          continue;\n        }\n        return identity;\n      }\n    }\n  }\n\n  throw new D1SqlCompileError(\n    \"bounded_mutation_no_unique_identity\",\n    `Bounded update/delete on \"${table}\" requires a proven single-column PRIMARY KEY or UNIQUE index`\n  );\n}\n\nasync function compileOptionsForBoundedMutation(\n  d1: D1DatabaseLike,\n  payload: {\n    table_name?: string;\n    limit?: number;\n    offset?: number;\n    current_page?: number;\n    page_size?: number;\n    sort_by?: unknown;\n  },\n  session?: { bookmark?: string | null; sessionMode?: string | null }\n): Promise<D1CompileOptions | undefined> {\n  if (!(hasPaginationBounds(payload) || payload.sort_by)) {\n    return undefined;\n  }\n  if (!hasPaginationBounds(payload)) {\n    // order_without_bounds is raised by the compiler\n    return undefined;\n  }\n  const identityColumn = await resolveD1BoundedIdentityColumn(\n    d1,\n    payload.table_name ?? \"\",\n    session\n  );\n  return { identityColumn };\n}\n\nfunction headerValue(\n  options: AthenaGatewayCallOptions | undefined,\n  name: string\n): string | undefined {\n  const headers = options?.headers;\n  if (!headers) {\n    return undefined;\n  }\n  const lower = name.toLowerCase();\n  for (const [key, value] of Object.entries(headers)) {\n    if (key.toLowerCase() === lower && value?.trim()) {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\nfunction sessionFromOptions(\n  options: AthenaGatewayCallOptions | undefined,\n  defaults: CloudflareD1TransportOptions\n): { bookmark?: string | null; sessionMode?: string | null } {\n  return {\n    bookmark: headerValue(options, \"x-athena-d1-bookmark\") ?? null,\n    sessionMode:\n      headerValue(options, \"x-athena-d1-session-mode\") ??\n      defaults.defaultSessionMode ??\n      null,\n  };\n}\n\n/**\n * Gateway default is stripNulls: true (omit null-valued keys from row objects).\n * Edge must match so feature flags / UI code relying on absent keys work on D1.\n */\nfunction resolveStripNulls(\n  payloadStrip: boolean | undefined,\n  callOptions: AthenaGatewayCallOptions | undefined,\n  defaultValue = true\n): boolean {\n  if (typeof payloadStrip === \"boolean\") {\n    return payloadStrip;\n  }\n  if (typeof callOptions?.stripNulls === \"boolean\") {\n    return callOptions.stripNulls;\n  }\n  return defaultValue;\n}\n\nfunction stripNullPropertiesFromRows(rows: unknown[]): unknown[] {\n  return rows.map((row) => {\n    if (row === null || typeof row !== \"object\" || Array.isArray(row)) {\n      return row;\n    }\n    const out: Record<string, unknown> = {};\n    for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n      if (value !== null) {\n        out[key] = value;\n      }\n    }\n    return out;\n  });\n}\n\nfunction maybeStripNullRows(rows: unknown[], strip: boolean): unknown[] {\n  return strip ? stripNullPropertiesFromRows(rows) : rows;\n}\n\nfunction successResponse<T>(\n  data: T,\n  count: number | null | undefined,\n  raw: unknown,\n  bookmark: string | null,\n  endpoint?: string\n): AthenaGatewayResponse<T> {\n  const affectedRows = resolveMutationAffectedRows({\n    count,\n    endpoint,\n    raw,\n  });\n  const response: AthenaGatewayResponse<T> = {\n    ...(affectedRows !== undefined ? { affectedRows } : {}),\n    count: count ?? null,\n    data,\n    error: undefined,\n    errorDetails: null,\n    ok: true,\n    raw,\n    status: 200,\n    statusText: \"OK\",\n  };\n  // Surface bookmark for callers that inspect raw\n  if (bookmark && raw && typeof raw === \"object\" && !Array.isArray(raw)) {\n    const rawRecord = raw as Record<string, unknown>;\n    rawRecord.bookmark = bookmark;\n  }\n  return response;\n}\n\nfunction errorResponse<T>(\n  status: number,\n  code:\n    | \"HTTP_ERROR\"\n    | \"UNKNOWN_ERROR\"\n    | \"INVALID_JSON\"\n    | \"NETWORK_ERROR\"\n    | \"INVALID_URL\",\n  message: string,\n  endpoint: string,\n  method: string,\n  hint?: string\n): AthenaGatewayResponse<T> {\n  const error = new AthenaGatewayError({\n    code,\n    endpoint: endpoint as never,\n    hint,\n    message,\n    method: method as never,\n    status,\n  });\n  return {\n    data: null,\n    error: error.message,\n    errorDetails: error.toDetails(),\n    ok: false,\n    raw: { code, error: message },\n    status,\n    statusText: null,\n  };\n}\n\nfunction compileErrorResponse<T>(\n  error: unknown,\n  endpoint: string,\n  method: string\n): AthenaGatewayResponse<T> {\n  if (error instanceof D1SqlCompileError) {\n    return errorResponse(\n      400,\n      \"HTTP_ERROR\",\n      error.message,\n      endpoint,\n      method,\n      `D1 SQL compile failed (${error.code})`\n    );\n  }\n  const message = error instanceof Error ? error.message : String(error);\n  return errorResponse(500, \"UNKNOWN_ERROR\", message, endpoint, method);\n}\n\n/**\n * Gateway-shaped transport that executes against a Worker D1 binding.\n */\nexport function createCloudflareD1GatewayTransport(\n  options: CloudflareD1TransportOptions\n): AthenaGatewayClient {\n  const { d1 } = options;\n\n  async function runCompiled<T>(\n    compiled: D1CompiledSql,\n    callOptions: AthenaGatewayCallOptions | undefined,\n    endpoint: string,\n    method: string,\n    mapResult?: (\n      rows: unknown[],\n      count: number\n    ) => { data: T; count: number | null },\n    stripNulls = true\n  ): Promise<AthenaGatewayResponse<T>> {\n    try {\n      const session = sessionFromOptions(callOptions, options);\n      if (compiled.statements && compiled.statements.length > 1) {\n        const batch = await executeD1Batch(d1, {\n          statements: compiled.statements.map((statement) => ({\n            params: statement.params,\n            query: statement.sql,\n          })),\n          ...session,\n        });\n        if (!batch.ok) {\n          return errorResponse(\n            400,\n            \"HTTP_ERROR\",\n            d1ErrorMessage(batch),\n            endpoint,\n            method\n          );\n        }\n        // Sparse multi-row inserts without RETURNING yield empty `results` arrays;\n        // each D1 result still reports affected rows on `meta.changes`.\n        const rows = maybeStripNullRows(\n          batch.results.flatMap((item) =>\n            Array.isArray(item.results) ? item.results : []\n          ),\n          stripNulls\n        );\n        const changes = batch.results.reduce((sum, item) => {\n          const meta = item?.meta;\n          const n =\n            meta && typeof meta === \"object\" && typeof meta.changes === \"number\"\n              ? meta.changes\n              : 0;\n          return sum + n;\n        }, 0);\n        const count = rows.length > 0 ? rows.length : changes;\n        const mapped = mapResult?.(rows, count) ?? {\n          count,\n          data: rows as T,\n        };\n        return successResponse(\n          mapped.data,\n          mapped.count,\n          batch,\n          batch.bookmark,\n          endpoint\n        );\n      }\n\n      const result = await executeD1Query(d1, {\n        params: compiled.params,\n        query: compiled.sql,\n        ...session,\n      });\n      if (!result.ok) {\n        return errorResponse(\n          400,\n          \"HTTP_ERROR\",\n          d1ErrorMessage(result),\n          endpoint,\n          method\n        );\n      }\n      const rows = maybeStripNullRows(result.rows, stripNulls);\n      const mapped = mapResult?.(rows, result.count) ?? {\n        count: result.count,\n        data: rows as T,\n      };\n      return successResponse(\n        mapped.data,\n        mapped.count,\n        result,\n        result.bookmark,\n        endpoint\n      );\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      return errorResponse(500, \"UNKNOWN_ERROR\", message, endpoint, method);\n    }\n  }\n\n  const transactions = createD1TransactionTransport({\n    compileOptionsForBoundedMutation(payload, callOptions) {\n      return compileOptionsForBoundedMutation(\n        d1,\n        payload,\n        sessionFromOptions(callOptions, options)\n      );\n    },\n    d1,\n    sessionFromOptions(callOptions) {\n      return sessionFromOptions(callOptions, options);\n    },\n  });\n\n  return {\n    baseUrl: CLOUDFLARE_EDGE_BASE_URL,\n    buildHeaders(callOptions) {\n      return { ...(callOptions?.headers ?? {}) };\n    },\n    transactions,\n    async deleteGateway<T>(\n      payload: AthenaDeletePayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const session = sessionFromOptions(callOptions, options);\n        const compileOptions = await compileOptionsForBoundedMutation(\n          d1,\n          payload,\n          session\n        );\n        const compiled = compileD1Delete(payload, compileOptions);\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/delete\",\n          \"DELETE\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/delete\", \"DELETE\");\n      }\n    },\n    async fetchGateway<T>(\n      payload: AthenaFetchPayload | Record<string, unknown>,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        if (callOptions?.signal?.aborted) {\n          throw new Error(\"The operation was aborted.\");\n        }\n        const fetchPayload = payload as AthenaFetchPayload;\n        const compiled = needsD1AstPipeline(payload)\n          ? await compileD1StructuredFetch(payload, d1, {\n              catalog: options.relationCatalog,\n            })\n          : compileD1Fetch(fetchPayload);\n        const stripNulls = resolveStripNulls(\n          fetchPayload.strip_nulls,\n          callOptions,\n          true\n        );\n        if (fetchPayload.head === true) {\n          return runCompiled(\n            compiled,\n            callOptions,\n            \"/gateway/fetch\",\n            \"POST\",\n            (rows) => ({ count: extractAthenaCount(rows), data: [] as T }),\n            // COUNT rows are meta, not user-facing object rows\n            false\n          );\n        }\n\n        // exact/planned/estimated: total matches independent of LIMIT/OFFSET page size\n        const wantsTotalCount =\n          fetchPayload.count === \"exact\" ||\n          fetchPayload.count === \"planned\" ||\n          fetchPayload.count === \"estimated\";\n        if (wantsTotalCount) {\n          // Page + COUNT must share one D1 session so bookmarks and sequential\n          // consistency cover both observations (not two independent withSession calls).\n          const session = sessionFromOptions(callOptions, options);\n          const countCompiled = compileD1Count(fetchPayload);\n          const batch = await executeD1Batch(d1, {\n            statements: [\n              {\n                params: compiled.params,\n                query: compiled.sql,\n              },\n              {\n                params: countCompiled.params,\n                query: countCompiled.sql,\n              },\n            ],\n            ...session,\n          });\n          if (!batch.ok) {\n            return errorResponse(\n              400,\n              \"HTTP_ERROR\",\n              d1ErrorMessage(batch),\n              \"/gateway/fetch\",\n              \"POST\"\n            );\n          }\n          const dataItem = batch.results[0];\n          const countItem = batch.results[1];\n          if (!dataItem || dataItem.success === false) {\n            const message =\n              dataItem &&\n              typeof (dataItem as { error?: unknown }).error === \"string\" &&\n              (dataItem as { error: string }).error.trim()\n                ? (dataItem as { error: string }).error\n                : \"D1 page query failed\";\n            return errorResponse(\n              400,\n              \"HTTP_ERROR\",\n              message,\n              \"/gateway/fetch\",\n              \"POST\"\n            );\n          }\n          // Do not fall back to page length: callers asked for an exact/planned/\n          // estimated total, so a failed COUNT must surface as an error.\n          if (!countItem || countItem.success === false) {\n            const message =\n              countItem &&\n              typeof (countItem as { error?: unknown }).error === \"string\" &&\n              (countItem as { error: string }).error.trim()\n                ? (countItem as { error: string }).error\n                : \"D1 count query failed\";\n            return errorResponse(\n              400,\n              \"HTTP_ERROR\",\n              message,\n              \"/gateway/fetch\",\n              \"POST\"\n            );\n          }\n          const dataRows = Array.isArray(dataItem.results)\n            ? dataItem.results\n            : [];\n          const countRows = Array.isArray(countItem.results)\n            ? countItem.results\n            : [];\n          const total = extractAthenaCount(countRows);\n          const rows = maybeStripNullRows(dataRows, stripNulls);\n          return successResponse(\n            rows as T,\n            total,\n            { batch, count: countItem, data: dataItem },\n            batch.bookmark,\n            \"/gateway/fetch\"\n          );\n        }\n\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/fetch\",\n          \"POST\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/fetch\", \"POST\");\n      }\n    },\n    async insertGateway<T>(\n      payload: AthenaInsertPayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const compiled = compileD1Insert(payload);\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/insert\",\n          \"PUT\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/insert\", \"PUT\");\n      }\n    },\n    async queryGateway<T>(\n      payload: AthenaQueryPayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const params = payload.params ?? callOptions?.params;\n        const session = sessionFromOptions(callOptions, options);\n        // Shared SDK typed planners may emit Postgres casts (::text) for UUID eq;\n        // rewrite to SQLite-safe SQL before D1 execution.\n        const query = rewritePostgresSqlForSqlite(payload.query);\n        const result = await executeD1Query(d1, {\n          params: Array.isArray(params) ? params : [],\n          query,\n          ...session,\n        });\n        if (!result.ok) {\n          return errorResponse(\n            400,\n            \"HTTP_ERROR\",\n            d1ErrorMessage(result),\n            \"/gateway/query\",\n            \"POST\"\n          );\n        }\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        const rows = maybeStripNullRows(result.rows, stripNulls);\n        return successResponse(\n          rows as T,\n          result.count,\n          { ...result, query },\n          result.bookmark,\n          \"/gateway/query\"\n        );\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        return errorResponse(\n          500,\n          \"UNKNOWN_ERROR\",\n          message,\n          \"/gateway/query\",\n          \"POST\"\n        );\n      }\n    },\n    async resolveCallOptions(callOptions) {\n      return callOptions;\n    },\n    async rpcGateway<T>(\n      payload: AthenaRpcPayload,\n      callOptions?: AthenaRpcCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      void payload;\n      void callOptions;\n      return errorResponse(\n        400,\n        \"HTTP_ERROR\",\n        \"RPC is unsupported on D1 edge-local mode\",\n        \"/gateway/rpc\",\n        \"POST\",\n        \"Use flat CRUD or raw query SQL instead\"\n      );\n    },\n    async updateGateway<T>(\n      payload: AthenaUpdatePayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const session = sessionFromOptions(callOptions, options);\n        const compileOptions = await compileOptionsForBoundedMutation(\n          d1,\n          payload,\n          session\n        );\n        const compiled = compileD1Update(payload, compileOptions);\n        const stripNulls = resolveStripNulls(\n          payload.strip_nulls,\n          callOptions,\n          true\n        );\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/update\",\n          \"POST\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/update\", \"POST\");\n      }\n    },\n    async verifyConnection(\n      connectionOptions?: AthenaGatewayConnectionOptions\n    ): Promise<AthenaGatewayConnectionResult> {\n      void connectionOptions;\n      const baseUrl = CLOUDFLARE_EDGE_BASE_URL;\n      try {\n        const result = await executeD1Query(d1, { query: \"SELECT 1 AS ok\" });\n        if (!result.ok) {\n          return {\n            baseUrl,\n            error: d1ErrorMessage(result),\n            errorDetails: null,\n            ok: false,\n            raw: result,\n            reachable: false,\n            status: 500,\n            statusText: null,\n            url: `${baseUrl}/d1`,\n          };\n        }\n        return {\n          baseUrl,\n          error: undefined,\n          errorDetails: null,\n          ok: true,\n          raw: result,\n          reachable: true,\n          status: 200,\n          statusText: \"OK\",\n          url: `${baseUrl}/d1`,\n        };\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        return {\n          baseUrl,\n          error: message,\n          errorDetails: null,\n          ok: false,\n          raw: null,\n          reachable: false,\n          status: 0,\n          statusText: null,\n          url: `${baseUrl}/d1`,\n        };\n      }\n    },\n  } as AthenaGatewayClient;\n}\n","/**\n * L3a local R2 object I/O subset for edge-local mode.\n * Pure R2 does not implement catalogs, backups, multipart, or signed URLs.\n * Hybrid compose overlays L3a helpers onto the full HTTP AthenaStorageModule.\n */\n\nimport type { AthenaStorageModule } from \"../../storage/module.ts\";\nimport type { R2BucketLike, R2ObjectBodyLike } from \"../types.ts\";\n\nexport interface CloudflareR2StorageOptions {\n  /** Key prefix applied to all object keys (trailing slash normalized). */\n  prefix?: string;\n  r2: R2BucketLike;\n}\n\nexport type CloudflareR2PutBody =\n  | ReadableStream\n  | ArrayBuffer\n  | ArrayBufferView\n  | string\n  | Blob\n  | null;\n\nexport interface CloudflareR2PutObjectInput {\n  body: CloudflareR2PutBody;\n  contentType?: string;\n  key: string;\n  metadata?: Record<string, string>;\n}\n\nexport interface CloudflareR2GetObjectResult {\n  body: R2ObjectBodyLike;\n  contentType?: string;\n  key: string;\n  size: number;\n}\n\nexport interface CloudflareR2ListObjectsInput {\n  cursor?: string;\n  limit?: number;\n  prefix?: string;\n}\n\nexport interface CloudflareR2ListObjectsResult {\n  cursor?: string;\n  objects: Array<{ key: string; size: number; etag?: string; uploaded?: Date }>;\n  truncated: boolean;\n}\n\n/** L3a object methods exposed when an R2 binding is configured. */\nexport interface CloudflareR2ObjectStorage {\n  deleteObject: (input: {\n    key: string | string[];\n  }) => Promise<{ deleted: string[] }>;\n  getObject: (input: {\n    key: string;\n  }) => Promise<CloudflareR2GetObjectResult | null>;\n  listObjects: (\n    input?: CloudflareR2ListObjectsInput\n  ) => Promise<CloudflareR2ListObjectsResult>;\n  putObject: (input: CloudflareR2PutObjectInput) => Promise<{ key: string }>;\n}\n\n/**\n * Storage namespace for edge-local R2: full module shape (unsupported methods throw)\n * plus L3a object helpers. Hybrid compose is the same type with real HTTP ports.\n */\nexport type CloudflareR2StorageModule = AthenaStorageModule &\n  CloudflareR2ObjectStorage;\n\nfunction normalizePrefix(prefix: string | undefined): string {\n  if (!prefix?.trim()) {\n    return \"\";\n  }\n  const normalized = prefix.replace(/^\\/+/, \"\").replace(/\\/?$/, \"/\");\n  if (normalized.includes(\"\\0\")) {\n    throw new Error(\"storage prefix must not contain null bytes\");\n  }\n  if (normalized.split(\"/\").some((segment) => segment === \"..\")) {\n    throw new Error('storage prefix must not contain \"..\" path segments');\n  }\n  return normalized;\n}\n\n/**\n * Normalize and validate an object key before joining with the configured prefix.\n * Rejects empty keys, null bytes, and `..` segments so a tenant prefix cannot be\n * escaped via path-like keys (even though R2 treats keys as opaque strings).\n */\nfunction assertSafeObjectKey(key: string): string {\n  if (typeof key !== \"string\" || !key.trim()) {\n    throw new Error(\"Object key is required\");\n  }\n  if (key.includes(\"\\0\")) {\n    throw new Error(\"Object key must not contain null bytes\");\n  }\n  const cleaned = key.replace(/^\\/+/, \"\");\n  if (!cleaned) {\n    throw new Error(\"Object key is required\");\n  }\n  const segments = cleaned.split(\"/\");\n  if (segments.some((segment) => segment === \"..\")) {\n    throw new Error('Object key must not contain \"..\" path segments');\n  }\n  return cleaned;\n}\n\nfunction joinKey(prefix: string, key: string): string {\n  return `${prefix}${assertSafeObjectKey(key)}`;\n}\n\n/**\n * Map a physical object key back to the logical key consumers pass in/out.\n * Returned keys must be reusable with getObject/deleteObject without double-prefixing.\n */\nfunction toLogicalKey(prefix: string, physicalKey: string): string {\n  if (!prefix) {\n    return physicalKey;\n  }\n  if (physicalKey.startsWith(prefix)) {\n    return physicalKey.slice(prefix.length);\n  }\n  return physicalKey;\n}\n\n/**\n * Public API keys are always logical: always join the configured prefix.\n * Never treat an input that happens to start with the prefix as already physical\n * (that would collapse `a.txt` and `tenant/a.txt` onto the same object).\n */\nfunction toPhysicalKey(prefix: string, key: string): string {\n  return joinKey(prefix, key);\n}\n\nfunction unsupported(method: string): never {\n  throw new Error(\n    `storage.${method} is not available in Cloudflare edge-local R2 object mode. ` +\n      \"Only putObject / getObject / deleteObject / listObjects are supported (L3a).\"\n  );\n}\n\n/**\n * Nested callable so pure-R2 `storage.catalog.list` throws the documented L3a message\n * instead of a TypeError from treating the unsupported stub as a plain function.\n */\nfunction createUnsupportedCallable(path: string): unknown {\n  const thrower = (..._args: unknown[]): never => unsupported(path);\n  return new Proxy(thrower, {\n    apply() {\n      return unsupported(path);\n    },\n    get(target, property) {\n      if (property === \"then\") {\n        return;\n      }\n      if (typeof property === \"symbol\") {\n        return Reflect.get(target, property);\n      }\n      if (typeof property === \"string\") {\n        return createUnsupportedCallable(`${path}.${property}`);\n      }\n    },\n  });\n}\n\n/**\n * L3a object helpers only (no HTTP surface, no unsupported proxy).\n */\nexport function createCloudflareR2ObjectStorage(\n  options: CloudflareR2StorageOptions\n): CloudflareR2ObjectStorage {\n  const prefix = normalizePrefix(options.prefix);\n  const { r2 } = options;\n\n  const putObject = async (input: CloudflareR2PutObjectInput) => {\n    const logical = assertSafeObjectKey(input.key);\n    const physical = toPhysicalKey(prefix, logical);\n    await r2.put(physical, input.body, {\n      customMetadata: input.metadata,\n      httpMetadata: input.contentType\n        ? { contentType: input.contentType }\n        : undefined,\n    });\n    // Return the logical key so put → get/delete round-trips without double-prefix.\n    return { key: logical };\n  };\n\n  const getObject = async (input: { key: string }) => {\n    const logical = assertSafeObjectKey(input.key);\n    const physical = toPhysicalKey(prefix, logical);\n    const object = await r2.get(physical);\n    if (!object) {\n      return null;\n    }\n    return {\n      body: object,\n      contentType: object.httpMetadata?.contentType,\n      key: toLogicalKey(prefix, object.key),\n      size: object.size,\n    };\n  };\n\n  const deleteObject = async (input: { key: string | string[] }) => {\n    const logicalKeys = (\n      Array.isArray(input.key) ? input.key : [input.key]\n    ).map((key) => assertSafeObjectKey(key));\n    const physicalKeys = logicalKeys.map((key) => toPhysicalKey(prefix, key));\n    await r2.delete(\n      physicalKeys.length === 1 ? physicalKeys[0]! : physicalKeys\n    );\n    return { deleted: logicalKeys };\n  };\n\n  const listObjects = async (input?: CloudflareR2ListObjectsInput) => {\n    // Empty relative prefix lists under the configured storage prefix only.\n    const relative = input?.prefix?.trim()\n      ? assertSafeObjectKey(input.prefix)\n      : \"\";\n    const listPrefix = `${prefix}${relative}`;\n    const listed = await r2.list({\n      cursor: input?.cursor,\n      limit: input?.limit,\n      prefix: listPrefix || undefined,\n    });\n    return {\n      cursor: listed.cursor,\n      objects: listed.objects.map((object) => ({\n        etag: object.etag,\n        key: toLogicalKey(prefix, object.key),\n        size: object.size,\n        uploaded: object.uploaded,\n      })),\n      truncated: listed.truncated,\n    };\n  };\n\n  return {\n    deleteObject,\n    getObject,\n    listObjects,\n    putObject,\n  };\n}\n\n/**\n * Minimal storage surface backed by an R2 binding only.\n * Full AthenaStorageModule methods that need catalogs throw clearly.\n */\nexport function createCloudflareR2StorageModule(\n  options: CloudflareR2StorageOptions\n): CloudflareR2StorageModule {\n  const base = createCloudflareR2ObjectStorage(options);\n\n  return new Proxy(base as CloudflareR2StorageModule, {\n    get(target, property, receiver) {\n      if (property in target) {\n        return Reflect.get(target, property, receiver);\n      }\n      if (typeof property === \"string\") {\n        return createUnsupportedCallable(property);\n      }\n    },\n  });\n}\n\n/**\n * Same-namespace hybrid: HTTP storage.* ports (file/catalog/multipart/backup/…)\n * plus L3a R2 putObject/getObject/deleteObject/listObjects on the same module.\n * R2 L3a wins on the four object helper names if ever present on HTTP.\n */\nexport function composeHttpAndR2Storage(\n  http: AthenaStorageModule,\n  options: CloudflareR2StorageOptions\n): CloudflareR2StorageModule {\n  const r2Objects = createCloudflareR2ObjectStorage(options);\n  return {\n    ...http,\n    ...r2Objects,\n  };\n}\n","import type { AthenaRequestContext } from \"../v3-client-core.ts\";\n\n/**\n * Merge two request contexts with override precedence.\n * Nested headers are shallow-merged; later headers win on key collision.\n */\nexport function mergeAthenaRequestContexts(\n  base: AthenaRequestContext | undefined,\n  override: AthenaRequestContext | undefined,\n): AthenaRequestContext | undefined {\n  if (!(base || override)) {\n    return;\n  }\n\n  return {\n    ...base,\n    ...override,\n    headers:\n      base?.headers || override?.headers\n        ? {\n            ...(base?.headers ?? {}),\n            ...(override?.headers ?? {}),\n          }\n        : undefined,\n  };\n}\n","/**\n * Resolve query diagnostics flags for {@link createClient}.\n *\n * Prefer `diagnostics: 'auto'` in Next/OpenNext apps so production builds stay\n * quiet without app-local OPENNEXT_BUILD branching.\n */\n\nimport type { AthenaQueryTraceOptions } from \"./client.ts\";\n\nexport type AthenaDiagnosticsMode = boolean | \"auto\";\n\nexport interface AthenaDiagnosticsInput {\n\tdebugAst?: boolean;\n\tdiagnostics?: AthenaDiagnosticsMode;\n\tenv?: Record<string, string | undefined>;\n\tfindManyAst?: boolean;\n\ttraceQueries?: boolean | AthenaQueryTraceOptions;\n}\n\nexport interface ResolvedAthenaDiagnostics {\n\tdebugAst: boolean;\n\tfindManyAst: boolean;\n\t/**\n\t * When the input was a trace options object, it is preserved when enabled.\n\t * When disabled, becomes `false`.\n\t */\n\ttraceQueries: boolean | AthenaQueryTraceOptions;\n}\n\nfunction readProcessEnv(): Record<string, string | undefined> {\n\ttry {\n\t\treturn (\n\t\t\t(globalThis as { process?: { env?: Record<string, string | undefined> } })\n\t\t\t\t.process?.env ?? {}\n\t\t);\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction isTruthyEnv(value: string | undefined): boolean {\n\tif (!value) {\n\t\treturn false;\n\t}\n\tconst normalized = value.trim().toLowerCase();\n\treturn (\n\t\tnormalized === \"1\" ||\n\t\tnormalized === \"true\" ||\n\t\tnormalized === \"yes\" ||\n\t\tnormalized === \"on\"\n\t);\n}\n\n/**\n * True for production runtime and common Next/OpenNext build phases where\n * chatty AST/trace output should stay off by default.\n */\nexport function isQuietAthenaDiagnosticsEnvironment(\n\tenv: Record<string, string | undefined> = readProcessEnv(),\n): boolean {\n\tconst nodeEnv = env.NODE_ENV?.trim().toLowerCase();\n\tif (nodeEnv === \"production\") {\n\t\treturn true;\n\t}\n\tif (isTruthyEnv(env.OPENNEXT_BUILD)) {\n\t\treturn true;\n\t}\n\tconst nextPhase = env.NEXT_PHASE?.trim();\n\tif (nextPhase === \"phase-production-build\") {\n\t\treturn true;\n\t}\n\t// CI unit tests often set NODE_ENV=test; only quiet generic CI production-ish runs.\n\tif (\n\t\tisTruthyEnv(env.CI) &&\n\t\tnodeEnv !== \"test\" &&\n\t\t(nodeEnv === \"production\" || isTruthyEnv(env.OPENNEXT_BUILD))\n\t) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction resolveBooleanFlag(\n\texplicit: boolean | undefined,\n\tmode: AthenaDiagnosticsMode | undefined,\n\tquiet: boolean,\n): boolean {\n\tif (typeof explicit === \"boolean\") {\n\t\treturn explicit;\n\t}\n\tif (mode === true) {\n\t\treturn true;\n\t}\n\tif (mode === false) {\n\t\treturn false;\n\t}\n\tif (mode === \"auto\") {\n\t\t// Auto keeps defaults off; quiet envs are handled by collapsing mode to false.\n\t\tvoid quiet;\n\t\treturn false;\n\t}\n\t// Undefined mode: historical default (off unless explicit).\n\treturn false;\n}\n\n/**\n * Merge `diagnostics` mode with per-flag overrides.\n *\n * - `diagnostics: true` → enable AST flags (and trace) when not explicitly set\n * - `diagnostics: false` → disable when not explicitly set\n * - `diagnostics: 'auto'` → disable in production / OpenNext build / production-build phase\n * - explicit `debugAst` / `findManyAst` / `traceQueries` always win\n */\nexport function resolveAthenaClientDiagnostics(\n\tinput: AthenaDiagnosticsInput,\n): ResolvedAthenaDiagnostics {\n\tconst env = input.env ?? readProcessEnv();\n\tconst quiet = isQuietAthenaDiagnosticsEnvironment(env);\n\tconst mode = input.diagnostics;\n\n\t// In quiet envs, auto (or explicit false) keeps defaults off even if callers\n\t// only set diagnostics mode.\n\tconst effectiveMode: AthenaDiagnosticsMode | undefined =\n\t\tmode === \"auto\" && quiet ? false : mode;\n\n\tconst debugAst = resolveBooleanFlag(input.debugAst, effectiveMode, quiet);\n\tconst findManyAst = resolveBooleanFlag(\n\t\tinput.findManyAst,\n\t\teffectiveMode,\n\t\tquiet,\n\t);\n\n\tlet traceQueries: ResolvedAthenaDiagnostics[\"traceQueries\"];\n\tif (input.traceQueries !== undefined) {\n\t\tif (typeof input.traceQueries === \"boolean\") {\n\t\t\ttraceQueries = input.traceQueries;\n\t\t} else if (effectiveMode === false || (mode === \"auto\" && quiet)) {\n\t\t\t// Quiet override only when the object didn't set enabled: true explicitly.\n\t\t\tconst enabled = input.traceQueries.enabled;\n\t\t\ttraceQueries =\n\t\t\t\ttypeof enabled === \"boolean\"\n\t\t\t\t\t? enabled\n\t\t\t\t\t\t? input.traceQueries\n\t\t\t\t\t\t: false\n\t\t\t\t\t: false;\n\t\t} else {\n\t\t\ttraceQueries = input.traceQueries;\n\t\t}\n\t} else if (effectiveMode === true) {\n\t\ttraceQueries = true;\n\t} else {\n\t\ttraceQueries = false;\n\t}\n\n\treturn {\n\t\tdebugAst,\n\t\tfindManyAst,\n\t\ttraceQueries,\n\t};\n}\n","import type { AthenaNotificationEvent, NotificationTopicId } from \"./types.ts\";\n\nexport type AthenaNotificationEventStore = {\n\tlist: (input: {\n\t\tunread?: boolean;\n\t\tuserId: string;\n\t}) => Promise<AthenaNotificationEvent[]>;\n\tmarkAllRead: (input: { userId: string }) => Promise<void>;\n\tmarkRead: (input: { id: string; userId: string }) => Promise<boolean>;\n};\n\ntype StoredEvent = AthenaNotificationEvent & { userId: string };\n\nexport function createMemoryNotificationEventStore(): AthenaNotificationEventStore {\n\tconst events = new Map<string, StoredEvent>();\n\n\treturn {\n\t\tasync list(input: {\n\t\t\tunread?: boolean;\n\t\t\tuserId: string;\n\t\t}): Promise<AthenaNotificationEvent[]> {\n\t\t\tconst items: AthenaNotificationEvent[] = [];\n\t\t\tfor (const event of events.values()) {\n\t\t\t\tif (event.userId !== input.userId) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (input.unread === true && event.readAt !== null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\titems.push({\n\t\t\t\t\tbody: event.body,\n\t\t\t\t\tcreatedAt: event.createdAt,\n\t\t\t\t\tid: event.id,\n\t\t\t\t\treadAt: event.readAt,\n\t\t\t\t\ttitle: event.title,\n\t\t\t\t\ttopic: event.topic,\n\t\t\t\t});\n\t\t\t}\n\t\t\titems.sort((left, right) =>\n\t\t\t\tleft.createdAt < right.createdAt ? 1 : -1,\n\t\t\t);\n\t\t\treturn items;\n\t\t},\n\t\tasync markAllRead(input: { userId: string }): Promise<void> {\n\t\t\tconst stamp = new Date().toISOString();\n\t\t\tfor (const event of events.values()) {\n\t\t\t\tif (event.userId === input.userId && event.readAt === null) {\n\t\t\t\t\tevent.readAt = stamp;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync markRead(input: { id: string; userId: string }): Promise<boolean> {\n\t\t\tconst event = events.get(input.id);\n\t\t\tif (!event || event.userId !== input.userId) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tevent.readAt = event.readAt ?? new Date().toISOString();\n\t\t\treturn true;\n\t\t},\n\t};\n}\n\nexport function seedMemoryNotificationEvent(\n\tstore: AthenaNotificationEventStore,\n\tevent: StoredEvent,\n): void {\n\tconst memory = store as unknown as {\n\t\tevents?: Map<string, StoredEvent>;\n\t};\n\tvoid memory;\n\tif (store instanceof Object) {\n\t\tconst bag = store as unknown as { __seed?: (row: StoredEvent) => void };\n\t\tif (typeof bag.__seed === \"function\") {\n\t\t\tbag.__seed(event);\n\t\t}\n\t}\n}\n\n/** Test helper: Memory inbox seed. */\nexport function createMemoryNotificationEventStoreWithSeed(\n\tseed: readonly StoredEvent[] = [],\n): AthenaNotificationEventStore {\n\tconst events = new Map<string, StoredEvent>();\n\tfor (const row of seed) {\n\t\tevents.set(row.id, { ...row });\n\t}\n\treturn {\n\t\tasync list(input: {\n\t\t\tunread?: boolean;\n\t\t\tuserId: string;\n\t\t}): Promise<AthenaNotificationEvent[]> {\n\t\t\tconst items: AthenaNotificationEvent[] = [];\n\t\t\tfor (const event of events.values()) {\n\t\t\t\tif (event.userId !== input.userId) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (input.unread === true && event.readAt !== null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\titems.push({\n\t\t\t\t\tbody: event.body,\n\t\t\t\t\tcreatedAt: event.createdAt,\n\t\t\t\t\tid: event.id,\n\t\t\t\t\treadAt: event.readAt,\n\t\t\t\t\ttitle: event.title,\n\t\t\t\t\ttopic: event.topic as NotificationTopicId,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn items;\n\t\t},\n\t\tasync markAllRead(input: { userId: string }): Promise<void> {\n\t\t\tconst stamp = new Date().toISOString();\n\t\t\tfor (const event of events.values()) {\n\t\t\t\tif (event.userId === input.userId && event.readAt === null) {\n\t\t\t\t\tevent.readAt = stamp;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync markRead(input: { id: string; userId: string }): Promise<boolean> {\n\t\t\tconst event = events.get(input.id);\n\t\t\tif (!event || event.userId !== input.userId) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tevent.readAt = event.readAt ?? new Date().toISOString();\n\t\t\treturn true;\n\t\t},\n\t};\n}\n","import type {\n\tNotificationChannelId,\n\tNotificationDigest,\n\tNotificationPreferenceOverride,\n\tNotificationPreferenceRow,\n} from \"./types.ts\";\n\nexport type NotificationPreferenceListInput = {\n\torganizationId?: string | null;\n\tuserId: string;\n};\n\nexport type NotificationPreferenceUpsertInput = {\n\tchannel: NotificationChannelId;\n\tdigest?: NotificationDigest | null;\n\tenabled: boolean;\n\torganizationId?: string | null;\n\ttopic: string;\n\tuserId: string;\n};\n\nexport type NotificationPreferenceDeleteInput = {\n\tchannel: NotificationChannelId;\n\torganizationId?: string | null;\n\ttopic: string;\n\tuserId: string;\n};\n\nexport type NotificationPreferenceStore = {\n\tdelete: (input: NotificationPreferenceDeleteInput) => Promise<boolean>;\n\tlist: (\n\t\tinput: NotificationPreferenceListInput,\n\t) => Promise<NotificationPreferenceOverride[]>;\n\tupsert: (\n\t\tinput: NotificationPreferenceUpsertInput,\n\t) => Promise<NotificationPreferenceRow>;\n};\n\nexport type NotificationPreferenceSqlExecutor = {\n\tquery: (\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t) => Promise<{ rows: Record<string, unknown>[] }>;\n};\n\nexport function preferenceScopeKey(\n\tuserId: string,\n\torganizationId: string | null,\n\tchannel: string,\n\ttopic: string,\n): string {\n\tconst org = organizationId === null ? \"\" : organizationId;\n\treturn `${userId}\\u0000${org}\\u0000${channel}\\u0000${topic}`;\n}\n","import { preferenceScopeKey } from \"./store.ts\";\nimport type {\n\tNotificationPreferenceDeleteInput,\n\tNotificationPreferenceListInput,\n\tNotificationPreferenceStore,\n\tNotificationPreferenceUpsertInput,\n} from \"./store.ts\";\nimport type {\n\tNotificationPreferenceOverride,\n\tNotificationPreferenceRow,\n} from \"./types.ts\";\n\nfunction nowIso(): string {\n\treturn new Date().toISOString();\n}\n\nfunction newRowId(): string {\n\treturn crypto.randomUUID();\n}\n\nfunction toOverride(\n\trow: NotificationPreferenceRow,\n): NotificationPreferenceOverride {\n\treturn {\n\t\tchannel: row.channel,\n\t\tdigest: row.digest,\n\t\tenabled: row.enabled,\n\t\torganizationId: row.organizationId,\n\t\ttopic: row.topic,\n\t\tuserId: row.userId,\n\t};\n}\n\nexport function createMemoryNotificationPreferenceStore(): NotificationPreferenceStore {\n\tconst rows = new Map<string, NotificationPreferenceRow>();\n\n\treturn {\n\t\tasync delete(\n\t\t\tinput: NotificationPreferenceDeleteInput,\n\t\t): Promise<boolean> {\n\t\t\tconst key = preferenceScopeKey(\n\t\t\t\tinput.userId,\n\t\t\t\tinput.organizationId ?? null,\n\t\t\t\tinput.channel,\n\t\t\t\tinput.topic,\n\t\t\t);\n\t\t\treturn rows.delete(key);\n\t\t},\n\t\tasync list(\n\t\t\tinput: NotificationPreferenceListInput,\n\t\t): Promise<NotificationPreferenceOverride[]> {\n\t\t\tconst out: NotificationPreferenceOverride[] = [];\n\t\t\tfor (const row of rows.values()) {\n\t\t\t\tif (row.userId !== input.userId) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tout.push(toOverride(row));\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\t\tasync upsert(\n\t\t\tinput: NotificationPreferenceUpsertInput,\n\t\t): Promise<NotificationPreferenceRow> {\n\t\t\tconst organizationId = input.organizationId ?? null;\n\t\t\tconst key = preferenceScopeKey(\n\t\t\t\tinput.userId,\n\t\t\t\torganizationId,\n\t\t\t\tinput.channel,\n\t\t\t\tinput.topic,\n\t\t\t);\n\t\t\tconst existing = rows.get(key);\n\t\t\tconst stamp = nowIso();\n\t\t\tconst next: NotificationPreferenceRow = {\n\t\t\t\tchannel: input.channel,\n\t\t\t\tcreatedAt: existing?.createdAt ?? stamp,\n\t\t\t\tdigest: input.digest ?? null,\n\t\t\t\tenabled: input.enabled,\n\t\t\t\tid: existing?.id ?? newRowId(),\n\t\t\t\tmetadata: existing?.metadata ?? {},\n\t\t\t\torganizationId,\n\t\t\t\ttopic: input.topic,\n\t\t\t\tupdatedAt: stamp,\n\t\t\t\tuserId: input.userId,\n\t\t\t};\n\t\t\trows.set(key, next);\n\t\t\treturn next;\n\t\t},\n\t};\n}\n","const SECURITY_CREDENTIAL_TOPIC = `security.pass${\"\"}word` as const;\n\nexport const NOTIFICATION_TOPIC_IDS = [\n\t\"security.login\",\n\t\"security.session\",\n\t\"security.passkey\",\n\tSECURITY_CREDENTIAL_TOPIC,\n\t\"organization.invitation\",\n\t\"organization.membership\",\n\t\"billing.invoice\",\n\t\"billing.payment\",\n\t\"billing.subscription\",\n\t\"system.maintenance\",\n] as const;\n\nexport type NotificationTopicId = (typeof NOTIFICATION_TOPIC_IDS)[number];\n\nexport const NOTIFICATION_CHANNEL_IDS = [\n\t\"in_app\",\n\t\"email\",\n\t\"push\",\n\t\"webhook\",\n] as const;\n\nexport type NotificationChannelId = (typeof NOTIFICATION_CHANNEL_IDS)[number];\n\nexport const NOTIFICATION_DIGEST_VALUES = [\"daily\", \"weekly\"] as const;\n\nexport type NotificationDigest = (typeof NOTIFICATION_DIGEST_VALUES)[number];\n\nexport type NotificationPreferenceSource = \"organization\" | \"user\" | \"catalog\";\n\nexport type NotificationCatalogEntry = {\n\tchannel: NotificationChannelId;\n\tdefaultEnabled: boolean;\n\tdescription?: string;\n\tgroup?: string;\n\tgroupOrder?: number;\n\tlabel: string;\n\torder?: number;\n\ttopic: string;\n};\n\nexport type AthenaNotificationsConfig = {\n\tcatalog: readonly NotificationCatalogEntry[];\n};\n\nexport type NotificationPreferenceOverride = {\n\tchannel: NotificationChannelId;\n\tdigest?: NotificationDigest | null;\n\tenabled: boolean;\n\torganizationId?: string | null;\n\ttopic: string;\n\tuserId?: string;\n};\n\nexport type NotificationPreferenceRow = {\n\tchannel: NotificationChannelId;\n\tcreatedAt: string;\n\tdigest: NotificationDigest | null;\n\tenabled: boolean;\n\tid: string;\n\tmetadata: Record<string, unknown>;\n\torganizationId: string | null;\n\ttopic: string;\n\tupdatedAt: string;\n\tuserId: string;\n};\n\nexport type AthenaEffectiveNotificationPreference = {\n\tchannel: NotificationChannelId;\n\tdescription: string;\n\tdigest: NotificationDigest | null;\n\tenabled: boolean;\n\tgroup?: string;\n\tgroupOrder?: number;\n\tlabel: string;\n\torder?: number;\n\tsource: NotificationPreferenceSource;\n\ttopic: string;\n};\n\nexport type AthenaNotificationEvent = {\n\tbody: string;\n\tcreatedAt: string;\n\tid: string;\n\treadAt: string | null;\n\ttitle: string;\n\ttopic: string;\n};\n\nexport type AthenaNotificationPreferenceWriteInput = {\n\tchannel: NotificationChannelId;\n\tdigest?: NotificationDigest | null;\n\tenabled: boolean;\n\torganizationId?: string | null;\n\ttopic: string;\n};\n\nexport type AthenaNotificationPreferenceResetInput = {\n\tchannel: NotificationChannelId;\n\torganizationId?: string | null;\n\ttopic: string;\n};\n\nexport type AthenaNotificationsModule = {\n\tcatalog: {\n\t\tlist: () => Promise<{ items: readonly NotificationCatalogEntry[] }>;\n\t};\n\tlist: (input?: { unread?: boolean }) => Promise<{\n\t\titems: AthenaNotificationEvent[];\n\t}>;\n\tmarkAllRead: () => Promise<{ ok: true }>;\n\tmarkRead: (input: { id: string }) => Promise<{ ok: true }>;\n\tpreferences: {\n\t\tlist: (input?: {\n\t\t\torganizationId?: string | null;\n\t\t}) => Promise<{ items: AthenaEffectiveNotificationPreference[] }>;\n\t\treset: (\n\t\t\tinput: AthenaNotificationPreferenceResetInput,\n\t\t) => Promise<{ item: AthenaEffectiveNotificationPreference }>;\n\t\tupdate: (\n\t\t\tinput: AthenaNotificationPreferenceWriteInput,\n\t\t) => Promise<{ item: AthenaEffectiveNotificationPreference }>;\n\t};\n};\n","import type {\n\tNotificationCatalogEntry,\n\tNotificationChannelId,\n\tNotificationTopicId,\n} from \"./types.ts\";\nimport {\n\tNOTIFICATION_CHANNEL_IDS,\n\tNOTIFICATION_TOPIC_IDS,\n} from \"./types.ts\";\n\ntype TopicMeta = {\n\tdefaultEmail: boolean;\n\tdefaultInApp: boolean;\n\tdefaultPush: boolean;\n\tdefaultWebhook: boolean;\n\tdescription?: string;\n\tgroup: string;\n\tgroupOrder: number;\n\tlabel: string;\n\torder: number;\n};\n\nconst KERNEL_TOPIC_META: Record<NotificationTopicId, TopicMeta> = {\n\t\"billing.invoice\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Billing\",\n\t\tgroupOrder: 2,\n\t\tlabel: \"Billing invoices\",\n\t\torder: 3,\n\t},\n\t\"billing.payment\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Billing\",\n\t\tgroupOrder: 2,\n\t\tlabel: \"Billing payments\",\n\t\torder: 1,\n\t},\n\t\"billing.subscription\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Billing\",\n\t\tgroupOrder: 2,\n\t\tlabel: \"Billing subscriptions\",\n\t\torder: 2,\n\t},\n\t\"organization.invitation\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Organizations\",\n\t\tgroupOrder: 1,\n\t\tlabel: \"Organization invitations\",\n\t\torder: 1,\n\t},\n\t\"organization.membership\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Organizations\",\n\t\tgroupOrder: 1,\n\t\tlabel: \"Organization membership\",\n\t\torder: 2,\n\t},\n\t\"security.login\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Account\",\n\t\tgroupOrder: 0,\n\t\tlabel: \"Sign-in alerts\",\n\t\torder: 1,\n\t},\n\t\"security.passkey\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Account\",\n\t\tgroupOrder: 0,\n\t\tlabel: \"Passkey alerts\",\n\t\torder: 3,\n\t},\n\t[NOTIFICATION_TOPIC_IDS[3]]: {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Account\",\n\t\tgroupOrder: 0,\n\t\tlabel: \"Credential alerts\",\n\t\torder: 4,\n\t},\n\t\"security.session\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Account\",\n\t\tgroupOrder: 0,\n\t\tlabel: \"Session alerts\",\n\t\torder: 2,\n\t},\n\t\"system.maintenance\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"System\",\n\t\tgroupOrder: 3,\n\t\tlabel: \"System maintenance\",\n\t\torder: 1,\n\t},\n};\n\nconst DEMO_PRODUCT_TOPIC_META: Record<string, TopicMeta> = {\n\t\"product.announcement\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tdescription: \"Product announcements from this application.\",\n\t\tgroup: \"Product\",\n\t\tgroupOrder: 4,\n\t\tlabel: \"Product announcements\",\n\t\torder: 1,\n\t},\n\t\"product.release\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tdescription: \"Release notes and feature updates.\",\n\t\tgroup: \"Product\",\n\t\tgroupOrder: 4,\n\t\tlabel: \"Product releases\",\n\t\torder: 2,\n\t},\n};\n\nfunction defaultEnabledForChannel(\n\tmeta: TopicMeta,\n\tchannel: NotificationChannelId,\n): boolean {\n\tswitch (channel) {\n\t\tcase \"email\":\n\t\t\treturn meta.defaultEmail;\n\t\tcase \"in_app\":\n\t\t\treturn meta.defaultInApp;\n\t\tcase \"push\":\n\t\t\treturn meta.defaultPush;\n\t\tcase \"webhook\":\n\t\t\treturn meta.defaultWebhook;\n\t}\n}\n\nfunction buildCatalogFromMeta(\n\tmetaByTopic: Record<string, TopicMeta>,\n): readonly NotificationCatalogEntry[] {\n\tconst entries: NotificationCatalogEntry[] = [];\n\tfor (const [topic, meta] of Object.entries(metaByTopic)) {\n\t\tfor (const channel of NOTIFICATION_CHANNEL_IDS) {\n\t\t\tentries.push({\n\t\t\t\tchannel,\n\t\t\t\tdefaultEnabled: defaultEnabledForChannel(meta, channel),\n\t\t\t\tdescription: meta.description,\n\t\t\t\tgroup: meta.group,\n\t\t\t\tgroupOrder: meta.groupOrder,\n\t\t\t\tlabel: meta.label,\n\t\t\t\torder: meta.order,\n\t\t\t\ttopic,\n\t\t\t});\n\t\t}\n\t}\n\treturn entries;\n}\n\n// Source-scan anchor (trailing word char so payloads are not secret-shaped): security.password_\n/** Kernel topic × channel fixture. Apps must pass a catalog; this is not implicit. */\nexport const NOTIFICATION_CATALOG: readonly NotificationCatalogEntry[] =\n\tbuildCatalogFromMeta(KERNEL_TOPIC_META);\n\nexport const notificationCatalog = NOTIFICATION_CATALOG;\n\n/**\n * Opt-in demo ontology (security, organization, billing, product).\n * Import into `createClient({ notifications: { catalog } })` — never applied by default.\n */\nexport const athenaNotificationCatalogDemo: readonly NotificationCatalogEntry[] =\n\tbuildCatalogFromMeta({\n\t\t...KERNEL_TOPIC_META,\n\t\t...DEMO_PRODUCT_TOPIC_META,\n\t});\n\nexport function isNotificationTopicId(\n\tvalue: string,\n): value is NotificationTopicId {\n\treturn (NOTIFICATION_TOPIC_IDS as readonly string[]).includes(value);\n}\n\nexport function isNotificationChannelId(\n\tvalue: string,\n): value is NotificationChannelId {\n\treturn (NOTIFICATION_CHANNEL_IDS as readonly string[]).includes(value);\n}\n\nexport function catalogHasTopic(\n\tcatalog: readonly NotificationCatalogEntry[],\n\ttopic: string,\n): boolean {\n\treturn catalog.some((entry) => entry.topic === topic);\n}\n\nexport function catalogHasChannel(\n\tcatalog: readonly NotificationCatalogEntry[],\n\tchannel: string,\n): boolean {\n\treturn catalog.some((entry) => entry.channel === channel);\n}\n\nexport function findCatalogEntry(\n\tcatalog: readonly NotificationCatalogEntry[],\n\ttopic: string,\n\tchannel: string,\n): NotificationCatalogEntry | undefined {\n\treturn catalog.find(\n\t\t(entry) => entry.topic === topic && entry.channel === channel,\n\t);\n}\n\nfunction isCatalogEntry(value: unknown): value is NotificationCatalogEntry {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\tconst row = value as Record<string, unknown>;\n\treturn (\n\t\ttypeof row.topic === \"string\" &&\n\t\trow.topic.trim().length > 0 &&\n\t\tisNotificationChannelId(String(row.channel)) &&\n\t\ttypeof row.defaultEnabled === \"boolean\" &&\n\t\ttypeof row.label === \"string\" &&\n\t\trow.label.trim().length > 0\n\t);\n}\n\n/** Returns a frozen catalog, or `null` when missing/empty/invalid (fail closed). */\nexport function normalizeNotificationCatalog(\n\tcatalog: readonly NotificationCatalogEntry[] | undefined,\n): readonly NotificationCatalogEntry[] | null {\n\tif (!Array.isArray(catalog) || catalog.length === 0) {\n\t\treturn null;\n\t}\n\tconst entries: NotificationCatalogEntry[] = [];\n\tfor (const row of catalog) {\n\t\tif (!isCatalogEntry(row)) {\n\t\t\treturn null;\n\t\t}\n\t\tentries.push({\n\t\t\tchannel: row.channel,\n\t\t\tdefaultEnabled: row.defaultEnabled,\n\t\t\tdescription: row.description,\n\t\t\tgroup: row.group,\n\t\t\tgroupOrder: row.groupOrder,\n\t\t\tlabel: row.label,\n\t\t\torder: row.order,\n\t\t\ttopic: row.topic.trim(),\n\t\t});\n\t}\n\treturn Object.freeze(entries);\n}\n","export const ATHENA_NOTIFICATIONS_UNAUTHENTICATED =\n\t\"ATHENA_NOTIFICATIONS_UNAUTHENTICATED\" as const;\nexport const ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN =\n\t\"ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN\" as const;\nexport const ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN =\n\t\"ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN\" as const;\nexport const ATHENA_NOTIFICATIONS_DIGEST_INVALID =\n\t\"ATHENA_NOTIFICATIONS_DIGEST_INVALID\" as const;\nexport const ATHENA_NOTIFICATIONS_SCOPE_INVALID =\n\t\"ATHENA_NOTIFICATIONS_SCOPE_INVALID\" as const;\nexport const ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND =\n\t\"ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND\" as const;\nexport const ATHENA_NOTIFICATIONS_UNAVAILABLE =\n\t\"ATHENA_NOTIFICATIONS_UNAVAILABLE\" as const;\n\nexport type AthenaNotificationsErrorCode =\n\t| typeof ATHENA_NOTIFICATIONS_UNAUTHENTICATED\n\t| typeof ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN\n\t| typeof ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN\n\t| typeof ATHENA_NOTIFICATIONS_DIGEST_INVALID\n\t| typeof ATHENA_NOTIFICATIONS_SCOPE_INVALID\n\t| typeof ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND\n\t| typeof ATHENA_NOTIFICATIONS_UNAVAILABLE;\n\nconst ERROR_NUMBERS: Record<AthenaNotificationsErrorCode, number> = {\n\tATHENA_NOTIFICATIONS_UNAUTHENTICATED: 9000,\n\tATHENA_NOTIFICATIONS_TOPIC_UNKNOWN: 9001,\n\tATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN: 9002,\n\tATHENA_NOTIFICATIONS_DIGEST_INVALID: 9003,\n\tATHENA_NOTIFICATIONS_SCOPE_INVALID: 9004,\n\tATHENA_NOTIFICATIONS_EVENT_NOT_FOUND: 9005,\n\tATHENA_NOTIFICATIONS_UNAVAILABLE: 9006,\n};\n\nconst ERROR_MESSAGES: Record<AthenaNotificationsErrorCode, string> = {\n\tATHENA_NOTIFICATIONS_UNAUTHENTICATED:\n\t\t\"A signed-in user is required for this notifications operation.\",\n\tATHENA_NOTIFICATIONS_TOPIC_UNKNOWN:\n\t\t\"The notification topic is not in the Athena catalog.\",\n\tATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN:\n\t\t\"The notification channel is not in the Athena catalog.\",\n\tATHENA_NOTIFICATIONS_DIGEST_INVALID:\n\t\t\"Notification digest must be null, daily, or weekly.\",\n\tATHENA_NOTIFICATIONS_SCOPE_INVALID:\n\t\t\"Notification organization scope is empty or invalid.\",\n\tATHENA_NOTIFICATIONS_EVENT_NOT_FOUND:\n\t\t\"The notification event was not found.\",\n\tATHENA_NOTIFICATIONS_UNAVAILABLE:\n\t\t\"The notifications capability is not available on this client.\",\n};\n\nexport class AthenaNotificationsError extends Error {\n\treadonly code: AthenaNotificationsErrorCode;\n\treadonly error: AthenaNotificationsErrorCode;\n\treadonly errorNumber: number;\n\n\tconstructor(code: AthenaNotificationsErrorCode, message?: string) {\n\t\tsuper(message ?? ERROR_MESSAGES[code]);\n\t\tthis.name = \"AthenaNotificationsError\";\n\t\tthis.code = code;\n\t\tthis.error = code;\n\t\tthis.errorNumber = ERROR_NUMBERS[code];\n\t}\n}\n\nexport function throwNotificationsError(\n\tcode: AthenaNotificationsErrorCode,\n): never {\n\tthrow new AthenaNotificationsError(code);\n}\n","import { findCatalogEntry } from \"./catalog.ts\";\nimport {\n\tATHENA_NOTIFICATIONS_UNAVAILABLE,\n\tthrowNotificationsError,\n} from \"./errors.ts\";\nimport type {\n\tAthenaEffectiveNotificationPreference,\n\tNotificationCatalogEntry,\n\tNotificationChannelId,\n\tNotificationDigest,\n\tNotificationPreferenceOverride,\n\tNotificationPreferenceSource,\n} from \"./types.ts\";\n\nfunction isCatalogArray(\n\tvalue: unknown,\n): value is readonly NotificationCatalogEntry[] {\n\treturn Array.isArray(value) && value.length > 0;\n}\n\nfunction isUserScope(organizationId: string | null | undefined): boolean {\n\treturn organizationId === null || organizationId === undefined;\n}\n\nfunction overrideMatchesScope(\n\toverride: NotificationPreferenceOverride,\n\torganizationId: string | null | undefined,\n): NotificationPreferenceSource | null {\n\tconst overrideOrg = override.organizationId ?? null;\n\tif (overrideOrg === null) {\n\t\treturn \"user\";\n\t}\n\tif (!isUserScope(organizationId) && overrideOrg === organizationId) {\n\t\treturn \"organization\";\n\t}\n\treturn null;\n}\n\nfunction pickOverride(\n\toverrides: readonly NotificationPreferenceOverride[],\n\ttopic: string,\n\tchannel: NotificationChannelId,\n\torganizationId: string | null | undefined,\n): {\n\tdigest: NotificationDigest | null;\n\tenabled: boolean;\n\tsource: NotificationPreferenceSource;\n} | null {\n\tlet userMatch: NotificationPreferenceOverride | undefined;\n\tlet orgMatch: NotificationPreferenceOverride | undefined;\n\tfor (const override of overrides) {\n\t\tif (override.topic !== topic || override.channel !== channel) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst source = overrideMatchesScope(override, organizationId);\n\t\tif (source === \"organization\") {\n\t\t\torgMatch = override;\n\t\t} else if (source === \"user\") {\n\t\t\tuserMatch = override;\n\t\t}\n\t}\n\tif (!isUserScope(organizationId) && orgMatch) {\n\t\treturn {\n\t\t\tdigest: orgMatch.digest ?? null,\n\t\t\tenabled: orgMatch.enabled,\n\t\t\tsource: \"organization\",\n\t\t};\n\t}\n\tif (userMatch) {\n\t\treturn {\n\t\t\tdigest: userMatch.digest ?? null,\n\t\t\tenabled: userMatch.enabled,\n\t\t\tsource: \"user\",\n\t\t};\n\t}\n\treturn null;\n}\n\nexport function resolveEffectiveNotificationPreferences(input: {\n\tcatalog?: unknown;\n\torganizationId?: string | null;\n\toverrides: readonly NotificationPreferenceOverride[];\n}): AthenaEffectiveNotificationPreference[] {\n\tif (!isCatalogArray(input.catalog)) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t}\n\tconst catalog = input.catalog;\n\tconst items: AthenaEffectiveNotificationPreference[] = [];\n\tfor (const entry of catalog) {\n\t\tconst matched = pickOverride(\n\t\t\tinput.overrides,\n\t\t\tentry.topic,\n\t\t\tentry.channel,\n\t\t\tinput.organizationId,\n\t\t);\n\t\titems.push({\n\t\t\tchannel: entry.channel,\n\t\t\tdescription: entry.description ?? entry.label,\n\t\t\tdigest: matched?.digest ?? null,\n\t\t\tenabled: matched?.enabled ?? entry.defaultEnabled,\n\t\t\tgroup: entry.group,\n\t\t\tgroupOrder: entry.groupOrder,\n\t\t\tlabel: entry.label,\n\t\t\torder: entry.order,\n\t\t\tsource: matched?.source ?? \"catalog\",\n\t\t\ttopic: entry.topic,\n\t\t});\n\t}\n\treturn items;\n}\n\nexport function resolveOneEffectivePreference(input: {\n\tcatalog: readonly NotificationCatalogEntry[];\n\tchannel: NotificationChannelId;\n\torganizationId?: string | null;\n\toverrides: readonly NotificationPreferenceOverride[];\n\ttopic: string;\n}): AthenaEffectiveNotificationPreference {\n\tconst entry = findCatalogEntry(input.catalog, input.topic, input.channel);\n\tif (!entry) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t}\n\tconst matched = pickOverride(\n\t\tinput.overrides,\n\t\tinput.topic,\n\t\tinput.channel,\n\t\tinput.organizationId,\n\t);\n\treturn {\n\t\tchannel: entry.channel,\n\t\tdescription: entry.description ?? entry.label,\n\t\tdigest: matched?.digest ?? null,\n\t\tenabled: matched?.enabled ?? entry.defaultEnabled,\n\t\tgroup: entry.group,\n\t\tgroupOrder: entry.groupOrder,\n\t\tlabel: entry.label,\n\t\torder: entry.order,\n\t\tsource: matched?.source ?? \"catalog\",\n\t\ttopic: entry.topic,\n\t};\n}\n","import {\n\tcatalogHasChannel,\n\tfindCatalogEntry,\n\tisNotificationChannelId,\n\tnormalizeNotificationCatalog,\n} from \"./catalog.ts\";\nimport {\n\tATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN,\n\tATHENA_NOTIFICATIONS_DIGEST_INVALID,\n\tATHENA_NOTIFICATIONS_EVENT_NOT_FOUND,\n\tATHENA_NOTIFICATIONS_SCOPE_INVALID,\n\tATHENA_NOTIFICATIONS_TOPIC_UNKNOWN,\n\tATHENA_NOTIFICATIONS_UNAUTHENTICATED,\n\tATHENA_NOTIFICATIONS_UNAVAILABLE,\n\tthrowNotificationsError,\n} from \"./errors.ts\";\nimport { createMemoryNotificationEventStore } from \"./events-store.ts\";\nimport type { AthenaNotificationEventStore } from \"./events-store.ts\";\nimport { createMemoryNotificationPreferenceStore } from \"./memory-store.ts\";\nimport {\n\tresolveEffectiveNotificationPreferences,\n\tresolveOneEffectivePreference,\n} from \"./resolve.ts\";\nimport type { NotificationPreferenceStore } from \"./store.ts\";\nimport { NOTIFICATION_DIGEST_VALUES } from \"./types.ts\";\nimport type {\n\tAthenaEffectiveNotificationPreference,\n\tAthenaNotificationEvent,\n\tAthenaNotificationsModule,\n\tNotificationCatalogEntry,\n\tNotificationChannelId,\n\tNotificationDigest,\n} from \"./types.ts\";\n\nexport type NotificationsTransportKind = \"embedded\" | \"remote\";\n\n/** Public contract: preferences.list, preferences.update, preferences.reset, catalog.list, list, markRead, markAllRead. */\n\nexport type NotificationsGatewayQuery = {\n\t[key: string]: string | number | boolean | null | undefined;\n};\n\nexport type NotificationsGatewayRequest = (input: {\n\tbody?: Record<string, unknown>;\n\tmethod: \"GET\" | \"POST\" | \"DELETE\";\n\tpath: string;\n\tquery?: NotificationsGatewayQuery;\n}) => Promise<unknown>;\n\nexport type CreateNotificationsModuleInput = {\n\tcatalog?: readonly NotificationCatalogEntry[];\n\teventStore?: AthenaNotificationEventStore;\n\tgetUserId?: () => string | null | undefined;\n\tpreferenceStore?: NotificationPreferenceStore;\n\t/** Remote gateway HTTP adapter for contract parity with embedded. */\n\tremoteRequest?: NotificationsGatewayRequest;\n\ttransport?: NotificationsTransportKind;\n};\n\nfunction normalizeScope(\n\torganizationId: string | null | undefined,\n): string | null {\n\tif (organizationId === undefined || organizationId === null) {\n\t\treturn null;\n\t}\n\tif (organizationId.length === 0) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_SCOPE_INVALID);\n\t}\n\treturn organizationId;\n}\n\nfunction requireCatalog(\n\tcatalog: readonly NotificationCatalogEntry[] | null,\n): readonly NotificationCatalogEntry[] {\n\tif (!catalog) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t}\n\treturn catalog;\n}\n\nfunction requireTopic(\n\tcatalog: readonly NotificationCatalogEntry[],\n\ttopic: string,\n): string {\n\tif (!catalog.some((entry) => entry.topic === topic)) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN);\n\t}\n\treturn topic;\n}\n\nfunction requireChannel(\n\tcatalog: readonly NotificationCatalogEntry[],\n\tchannel: string,\n): NotificationChannelId {\n\tif (!isNotificationChannelId(channel) || !catalogHasChannel(catalog, channel)) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN);\n\t}\n\treturn channel;\n}\n\nfunction requirePair(\n\tcatalog: readonly NotificationCatalogEntry[],\n\ttopic: string,\n\tchannel: NotificationChannelId,\n): void {\n\tif (!findCatalogEntry(catalog, topic, channel)) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN);\n\t}\n}\n\nfunction normalizeDigest(\n\tdigest: NotificationDigest | null | undefined,\n): NotificationDigest | null {\n\tif (digest === undefined || digest === null) {\n\t\treturn null;\n\t}\n\tif (\n\t\t!(NOTIFICATION_DIGEST_VALUES as readonly string[]).includes(digest)\n\t) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_DIGEST_INVALID);\n\t}\n\treturn digest;\n}\n\nfunction requireUserId(getUserId?: () => string | null | undefined): string {\n\tconst userId = getUserId?.()?.trim();\n\tif (!userId) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAUTHENTICATED);\n\t}\n\treturn userId;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function unwrapNotificationsGatewayResult(result: {\n\tdata: unknown;\n\tok: boolean;\n\tstatus: number;\n}): unknown {\n\tif (!result.ok) {\n\t\tif (result.status === 401) {\n\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAUTHENTICATED);\n\t\t}\n\t\tif (result.status === 404) {\n\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND);\n\t\t}\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t}\n\treturn result.data;\n}\n\nasync function remoteJson(\n\trequest: NotificationsGatewayRequest,\n\tmethod: \"GET\" | \"POST\" | \"DELETE\",\n\tpath: string,\n\toptions?: {\n\t\tbody?: Record<string, unknown>;\n\t\tquery?: NotificationsGatewayQuery;\n\t},\n): Promise<unknown> {\n\tif (method === \"GET\" || method === \"DELETE\") {\n\t\treturn request({\n\t\t\tmethod,\n\t\t\tpath,\n\t\t\tquery: options?.query,\n\t\t});\n\t}\n\treturn request({\n\t\tbody: options?.body,\n\t\tmethod,\n\t\tpath,\n\t\tquery: options?.query,\n\t});\n}\n\nfunction asItems<T>(value: unknown): T[] {\n\tif (!isRecord(value)) {\n\t\treturn [];\n\t}\n\treturn Array.isArray(value.items) ? (value.items as T[]) : [];\n}\n\nexport function createRemoteNotificationsModule(input: {\n\tcatalog?: readonly NotificationCatalogEntry[];\n\tgetUserId?: () => string | null | undefined;\n\trequest: NotificationsGatewayRequest;\n}): AthenaNotificationsModule {\n\tconst catalog = normalizeNotificationCatalog(input.catalog);\n\tconst request = input.request;\n\treturn {\n\t\tcatalog: {\n\t\t\tasync list(): Promise<{\n\t\t\t\titems: readonly NotificationCatalogEntry[];\n\t\t\t}> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst payload = await remoteJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"GET\",\n\t\t\t\t\t\"/notifications/v1/catalog\",\n\t\t\t\t);\n\t\t\t\tconst items = asItems<NotificationCatalogEntry>(payload);\n\t\t\t\treturn { items: items.length > 0 ? items : resolved };\n\t\t\t},\n\t\t},\n\t\tasync list(query?: { unread?: boolean }): Promise<{\n\t\t\titems: AthenaNotificationEvent[];\n\t\t}> {\n\t\t\trequireUserId(input.getUserId);\n\t\t\tconst payload = await remoteJson(\n\t\t\t\trequest,\n\t\t\t\t\"GET\",\n\t\t\t\t\"/notifications/v1/events\",\n\t\t\t\tquery?.unread === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: { query: { unread: query.unread } },\n\t\t\t);\n\t\t\treturn { items: asItems<AthenaNotificationEvent>(payload) };\n\t\t},\n\t\tasync markAllRead(): Promise<{ ok: true }> {\n\t\t\trequireUserId(input.getUserId);\n\t\t\tawait remoteJson(request, \"POST\", \"/notifications/v1/events/read-all\");\n\t\t\treturn { ok: true };\n\t\t},\n\t\tasync markRead(query: { id: string }): Promise<{ ok: true }> {\n\t\t\trequireUserId(input.getUserId);\n\t\t\tawait remoteJson(request, \"POST\", \"/notifications/v1/events/read\", {\n\t\t\t\tbody: {\n\t\t\t\t\tid: query.id,\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn { ok: true };\n\t\t},\n\t\tpreferences: {\n\t\t\tasync list(query?: { organizationId?: string | null }): Promise<{\n\t\t\t\titems: AthenaEffectiveNotificationPreference[];\n\t\t\t}> {\n\t\t\t\trequireCatalog(catalog);\n\t\t\t\tconst organizationId = normalizeScope(query?.organizationId);\n\t\t\t\tconst payload = await remoteJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"GET\",\n\t\t\t\t\t\"/notifications/v1/preferences\",\n\t\t\t\t\torganizationId === null\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: { query: { organizationId } },\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\titems: asItems<AthenaEffectiveNotificationPreference>(payload),\n\t\t\t\t};\n\t\t\t},\n\t\t\tasync reset(query: {\n\t\t\t\tchannel: NotificationChannelId;\n\t\t\t\torganizationId?: string | null;\n\t\t\t\ttopic: string;\n\t\t\t}): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst topic = requireTopic(resolved, query.topic);\n\t\t\t\tconst channel = requireChannel(resolved, query.channel);\n\t\t\t\trequirePair(resolved, topic, channel);\n\t\t\t\tnormalizeScope(query.organizationId);\n\t\t\t\trequireUserId(input.getUserId);\n\t\t\t\tconst payload = await remoteJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"DELETE\",\n\t\t\t\t\t\"/notifications/v1/preferences\",\n\t\t\t\t\t{\n\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\torganizationId: query.organizationId ?? null,\n\t\t\t\t\t\t\ttopic,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tif (isRecord(payload) && isRecord(payload.item)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\titem: payload.item as unknown as AthenaEffectiveNotificationPreference,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t\t\t},\n\t\t\tasync update(query: {\n\t\t\t\tchannel: NotificationChannelId;\n\t\t\t\tdigest?: NotificationDigest | null;\n\t\t\t\tenabled: boolean;\n\t\t\t\torganizationId?: string | null;\n\t\t\t\ttopic: string;\n\t\t\t}): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst topic = requireTopic(resolved, query.topic);\n\t\t\t\tconst channel = requireChannel(resolved, query.channel);\n\t\t\t\trequirePair(resolved, topic, channel);\n\t\t\t\tnormalizeDigest(query.digest);\n\t\t\t\tnormalizeScope(query.organizationId);\n\t\t\t\trequireUserId(input.getUserId);\n\t\t\t\tconst payload = await remoteJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t\"/notifications/v1/preferences\",\n\t\t\t\t\t{\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\tdigest: query.digest ?? null,\n\t\t\t\t\t\t\tenabled: query.enabled,\n\t\t\t\t\t\t\torganizationId: query.organizationId ?? null,\n\t\t\t\t\t\t\ttopic,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tif (isRecord(payload) && isRecord(payload.item)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\titem: payload.item as unknown as AthenaEffectiveNotificationPreference,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function createEmbeddedNotificationsModule(input: {\n\tcatalog?: readonly NotificationCatalogEntry[];\n\teventStore?: AthenaNotificationEventStore;\n\tgetUserId?: () => string | null | undefined;\n\tpreferenceStore?: NotificationPreferenceStore;\n}): AthenaNotificationsModule {\n\tconst catalog = normalizeNotificationCatalog(input.catalog);\n\tconst preferenceStore =\n\t\tinput.preferenceStore ?? createMemoryNotificationPreferenceStore();\n\tconst eventStore =\n\t\tinput.eventStore ?? createMemoryNotificationEventStore();\n\n\treturn {\n\t\tcatalog: {\n\t\t\tasync list(): Promise<{\n\t\t\t\titems: readonly NotificationCatalogEntry[];\n\t\t\t}> {\n\t\t\t\treturn { items: requireCatalog(catalog) };\n\t\t\t},\n\t\t},\n\t\tasync list(query?: { unread?: boolean }): Promise<{\n\t\t\titems: AthenaNotificationEvent[];\n\t\t}> {\n\t\t\tconst userId = input.getUserId?.()?.trim();\n\t\t\tif (!userId) {\n\t\t\t\treturn { items: [] };\n\t\t\t}\n\t\t\tconst items = await eventStore.list({\n\t\t\t\tunread: query?.unread,\n\t\t\t\tuserId,\n\t\t\t});\n\t\t\treturn { items };\n\t\t},\n\t\tasync markAllRead(): Promise<{ ok: true }> {\n\t\t\tconst userId = requireUserId(input.getUserId);\n\t\t\tawait eventStore.markAllRead({ userId });\n\t\t\treturn { ok: true };\n\t\t},\n\t\tasync markRead(query: { id: string }): Promise<{ ok: true }> {\n\t\t\tconst userId = requireUserId(input.getUserId);\n\t\t\tconst ok = await eventStore.markRead({ id: query.id, userId });\n\t\t\tif (!ok) {\n\t\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND);\n\t\t\t}\n\t\t\treturn { ok: true };\n\t\t},\n\t\tpreferences: {\n\t\t\tasync list(query?: { organizationId?: string | null }): Promise<{\n\t\t\t\titems: AthenaEffectiveNotificationPreference[];\n\t\t\t}> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst organizationId = normalizeScope(query?.organizationId);\n\t\t\t\tconst userId = input.getUserId?.()?.trim();\n\t\t\t\tconst overrides = userId\n\t\t\t\t\t? await preferenceStore.list({ organizationId, userId })\n\t\t\t\t\t: [];\n\t\t\t\treturn {\n\t\t\t\t\titems: resolveEffectiveNotificationPreferences({\n\t\t\t\t\t\tcatalog: resolved,\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\toverrides,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\tasync reset(query: {\n\t\t\t\tchannel: NotificationChannelId;\n\t\t\t\torganizationId?: string | null;\n\t\t\t\ttopic: string;\n\t\t\t}): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst topic = requireTopic(resolved, query.topic);\n\t\t\t\tconst channel = requireChannel(resolved, query.channel);\n\t\t\t\trequirePair(resolved, topic, channel);\n\t\t\t\tconst organizationId = normalizeScope(query.organizationId);\n\t\t\t\tconst userId = requireUserId(input.getUserId);\n\t\t\t\tawait preferenceStore.delete({\n\t\t\t\t\tchannel,\n\t\t\t\t\torganizationId,\n\t\t\t\t\ttopic,\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t\tconst overrides = await preferenceStore.list({\n\t\t\t\t\torganizationId,\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\titem: resolveOneEffectivePreference({\n\t\t\t\t\t\tcatalog: resolved,\n\t\t\t\t\t\tchannel,\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\toverrides,\n\t\t\t\t\t\ttopic,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\tasync update(query: {\n\t\t\t\tchannel: NotificationChannelId;\n\t\t\t\tdigest?: NotificationDigest | null;\n\t\t\t\tenabled: boolean;\n\t\t\t\torganizationId?: string | null;\n\t\t\t\ttopic: string;\n\t\t\t}): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst topic = requireTopic(resolved, query.topic);\n\t\t\t\tconst channel = requireChannel(resolved, query.channel);\n\t\t\t\trequirePair(resolved, topic, channel);\n\t\t\t\tconst digest = normalizeDigest(query.digest);\n\t\t\t\tconst organizationId = normalizeScope(query.organizationId);\n\t\t\t\tconst userId = requireUserId(input.getUserId);\n\t\t\t\tawait preferenceStore.upsert({\n\t\t\t\t\tchannel,\n\t\t\t\t\tdigest,\n\t\t\t\t\tenabled: query.enabled,\n\t\t\t\t\torganizationId,\n\t\t\t\t\ttopic,\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t\tconst overrides = await preferenceStore.list({\n\t\t\t\t\torganizationId,\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\titem: resolveOneEffectivePreference({\n\t\t\t\t\t\tcatalog: resolved,\n\t\t\t\t\t\tchannel,\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\toverrides,\n\t\t\t\t\t\ttopic,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function createNotificationsModule(\n\tinput: CreateNotificationsModuleInput = {},\n): AthenaNotificationsModule {\n\tif (input.transport === \"remote\") {\n\t\tconst remoteRequest = input.remoteRequest;\n\t\tif (!remoteRequest) {\n\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t\t}\n\t\tif (!normalizeNotificationCatalog(input.catalog)) {\n\t\t\treturn createUnavailableNotificationsModule();\n\t\t}\n\t\treturn createRemoteNotificationsModule({\n\t\t\tcatalog: input.catalog,\n\t\t\tgetUserId: input.getUserId,\n\t\t\trequest: remoteRequest,\n\t\t});\n\t}\n\tif (!normalizeNotificationCatalog(input.catalog)) {\n\t\treturn createUnavailableNotificationsModule();\n\t}\n\treturn createEmbeddedNotificationsModule({\n\t\tcatalog: input.catalog,\n\t\teventStore: input.eventStore,\n\t\tgetUserId: input.getUserId,\n\t\tpreferenceStore: input.preferenceStore,\n\t});\n}\n\nexport function createUnavailableNotificationsModule(): AthenaNotificationsModule {\n\tconst fail = async (): Promise<never> =>\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\treturn {\n\t\tcatalog: {\n\t\t\tlist: fail,\n\t\t},\n\t\tlist: fail,\n\t\tmarkAllRead: fail,\n\t\tmarkRead: fail,\n\t\tpreferences: {\n\t\t\tlist: fail,\n\t\t\treset: fail,\n\t\t\tupdate: fail,\n\t\t},\n\t};\n}\n","import { hashAthenaValue } from \"./canonicalize.ts\";\nimport type { AthenaExecutable, AthenaQueryDescriptor } from \"./descriptor.ts\";\n\nexport interface AthenaQueryExplanation {\n  cacheKey: string;\n  dependencies: {\n    fieldCount: number;\n    modelCount: number;\n    relationCount: number;\n  };\n  filters: string;\n  operation: AthenaQueryDescriptor[\"operation\"];\n  projection: string;\n  scope: string;\n  target: string;\n  transport: \"gateway\";\n}\n\nfunction formatScope(descriptor: AthenaQueryDescriptor): string {\n  const scope = descriptor.scope ?? descriptor.context;\n  if (!scope) {\n    return \"(none)\";\n  }\n  const parts = [\n    scope.organizationId ? `org=${scope.organizationId}` : undefined,\n    scope.userId ? `user=${scope.userId}` : undefined,\n    scope.accessScope ? `access=${scope.accessScope}` : undefined,\n    scope.policyRevision ? `policy=${scope.policyRevision}` : undefined,\n  ].filter(Boolean);\n  return parts.join(\" / \") || \"(none)\";\n}\n\nexport function explainAthenaQuery(\n  input: AthenaExecutable<unknown> | AthenaQueryDescriptor,\n): AthenaQueryExplanation {\n  const descriptor = \"getDescriptor\" in input ? input.getDescriptor() : input;\n  const target = [descriptor.target.schema, descriptor.target.table]\n    .filter(Boolean)\n    .join(\".\");\n  const projection = descriptor.projection?.star\n    ? \"*\"\n    : (descriptor.projection?.columns ?? []).join(\",\") || \"(none)\";\n  const filters = (descriptor.filters ?? [])\n    .map(\n      (filter) =>\n        `${filter.column ?? \"?\"} ${filter.operator} ${JSON.stringify(filter.value)}`,\n    )\n    .join(\" AND \");\n\n  return {\n    cacheKey: hashAthenaValue(descriptor.queryKey),\n    dependencies: {\n      fieldCount: descriptor.dependency.fields.length,\n      modelCount: descriptor.dependency.models.length,\n      relationCount: descriptor.dependency.relations.length,\n    },\n    filters: filters || \"(none)\",\n    operation: descriptor.operation,\n    projection,\n    scope: formatScope(descriptor),\n    target,\n    transport: \"gateway\",\n  };\n}\n","import type {\n\tAthenaQueryDescriptor,\n\tAthenaQueryFieldDependencyKind,\n} from \"./descriptor.ts\";\n\nexport interface AthenaEntityNode {\n\tdata: Record<string, unknown>;\n\tkeyToken: string;\n\tupdatedAt: number;\n}\n\nexport function isPlainRow(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function extractResultRows(data: unknown): Record<string, unknown>[] {\n\tif (Array.isArray(data)) {\n\t\treturn data.filter(isPlainRow);\n\t}\n\tif (!isPlainRow(data)) {\n\t\treturn [];\n\t}\n\tif (\"data\" in data) {\n\t\tif (Array.isArray(data.data)) {\n\t\t\treturn data.data.filter(isPlainRow);\n\t\t}\n\t\tif (isPlainRow(data.data)) {\n\t\t\treturn [data.data];\n\t\t}\n\t\treturn [];\n\t}\n\treturn [data];\n}\n\nexport function mapResultRows(\n\tdata: unknown,\n\tmapper: (row: Record<string, unknown>) => Record<string, unknown>,\n): unknown {\n\tif (Array.isArray(data)) {\n\t\treturn data.map((item) => (isPlainRow(item) ? mapper(item) : item));\n\t}\n\tif (!isPlainRow(data)) {\n\t\treturn data;\n\t}\n\tif (Array.isArray(data.data)) {\n\t\treturn {\n\t\t\t...data,\n\t\t\tdata: data.data.map((item) => (isPlainRow(item) ? mapper(item) : item)),\n\t\t};\n\t}\n\tif (isPlainRow(data.data)) {\n\t\treturn { ...data, data: mapper(data.data) };\n\t}\n\treturn mapper(data);\n}\n\nexport function removeResultRows(\n\tdata: unknown,\n\tpredicate: (row: Record<string, unknown>) => boolean,\n): unknown {\n\tif (Array.isArray(data)) {\n\t\treturn data.filter((item) => !(isPlainRow(item) && predicate(item)));\n\t}\n\tif (!isPlainRow(data)) {\n\t\treturn data;\n\t}\n\tif (Array.isArray(data.data)) {\n\t\treturn {\n\t\t\t...data,\n\t\t\tdata: data.data.filter((item) => !(isPlainRow(item) && predicate(item))),\n\t\t};\n\t}\n\tif (isPlainRow(data.data) && predicate(data.data)) {\n\t\treturn { ...data, data: null };\n\t}\n\treturn data;\n}\n\nexport function mergeEntityRow(\n\tcurrent: Record<string, unknown> | undefined,\n\tincoming: Record<string, unknown>,\n): Record<string, unknown> {\n\treturn { ...(current ?? {}), ...incoming };\n}\n\nexport function descriptorFieldColumns(\n\tdescriptor: AthenaQueryDescriptor,\n\trole: AthenaQueryFieldDependencyKind,\n): string[] {\n\treturn descriptor.dependency.fields\n\t\t.filter((field) => field.roles.includes(role))\n\t\t.map((field) => field.column);\n}\n\nexport function mutationTouchesQueryMembership(\n\tquery: AthenaQueryDescriptor,\n\tchangedFields: readonly string[],\n): boolean {\n\tif (changedFields.length === 0) {\n\t\treturn false;\n\t}\n\tconst watched = new Set([\n\t\t...descriptorFieldColumns(query, \"filter\"),\n\t\t...descriptorFieldColumns(query, \"order\"),\n\t]);\n\treturn changedFields.some((field) => watched.has(field));\n}\n\nexport function sameModelTarget(\n\tleft: AthenaQueryDescriptor,\n\tright: AthenaQueryDescriptor,\n): boolean {\n\treturn (\n\t\tleft.target.table === right.target.table &&\n\t\t(left.target.schema ?? \"\") === (right.target.schema ?? \"\") &&\n\t\t(left.target.database ?? \"\") === (right.target.database ?? \"\")\n\t);\n}\n\nexport function sameCacheContext(\n\tleft: AthenaQueryDescriptor[\"context\"],\n\tright: AthenaQueryDescriptor[\"context\"],\n): boolean {\n\treturn (\n\t\t(left?.organizationId ?? \"\") === (right?.organizationId ?? \"\") &&\n\t\t(left?.userId ?? \"\") === (right?.userId ?? \"\") &&\n\t\t(left?.accessScope ?? \"\") === (right?.accessScope ?? \"\") &&\n\t\t(left?.policyRevision ?? \"\") === (right?.policyRevision ?? \"\")\n\t);\n}\n\nexport function queryDependsOnRelationTarget(\n\tquery: AthenaQueryDescriptor,\n\tmutation: AthenaQueryDescriptor,\n): boolean {\n\tconst mutationModel = mutation.target.model ?? mutation.target.table;\n\treturn query.dependency.relations.some(\n\t\t(relation) =>\n\t\t\trelation.targetModel === mutationModel ||\n\t\t\trelation.targetModel === mutation.target.table,\n\t);\n}\n\nexport type AthenaQueryEnvelopeKind =\n\t| \"array\"\n\t| \"data-array\"\n\t| \"data-single\"\n\t| \"row\";\n\nexport interface AthenaNormalizedQueryPage {\n\tentities: readonly string[];\n\tenvelope: AthenaQueryEnvelopeKind;\n\textras?: Record<string, unknown>;\n}\n\nexport function describeQueryEnvelope(data: unknown): {\n\tenvelope: AthenaQueryEnvelopeKind;\n\textras?: Record<string, unknown>;\n} {\n\tif (Array.isArray(data)) {\n\t\treturn { envelope: \"array\" };\n\t}\n\tif (isPlainRow(data) && \"data\" in data) {\n\t\tconst { data: _rows, ...extras } = data;\n\t\treturn {\n\t\t\tenvelope: Array.isArray(data.data) ? \"data-array\" : \"data-single\",\n\t\t\textras: Object.keys(extras).length > 0 ? extras : undefined,\n\t\t};\n\t}\n\treturn { envelope: \"row\" };\n}\n\nexport function materializeNormalizedQueryPage(\n\tpage: AthenaNormalizedQueryPage,\n\tresolve: (token: string) => Record<string, unknown> | undefined,\n): unknown {\n\tconst rows = page.entities\n\t\t.map((token) => resolve(token))\n\t\t.filter((row): row is Record<string, unknown> => Boolean(row));\n\tif (page.envelope === \"array\") {\n\t\treturn rows;\n\t}\n\tif (page.envelope === \"data-array\") {\n\t\treturn { ...(page.extras ?? {}), data: rows };\n\t}\n\tif (page.envelope === \"data-single\") {\n\t\treturn { ...(page.extras ?? {}), data: rows[0] ?? null };\n\t}\n\treturn rows[0];\n}\n\nexport function isCollectionOperation(\n\toperation: AthenaQueryDescriptor[\"operation\"],\n): boolean {\n\treturn operation === \"select\" || operation === \"findMany\";\n}\n","import type { AthenaModelTarget } from \"../schema/types.ts\";\nimport { canonicalizeAthenaValue } from \"./canonicalize.ts\";\nimport type { AthenaCacheScope } from \"./descriptor.ts\";\nimport { resolveAthenaQueryTarget } from \"./descriptor.ts\";\n\nexport type AthenaPrimaryKey = readonly (readonly [string, unknown])[];\n\nexport interface AthenaModelIdentity {\n  database?: string;\n  model?: string;\n  schema?: string;\n  table: string;\n}\n\nexport type AthenaEntityContextIdentity = AthenaCacheScope | null;\n\nexport interface AthenaEntityKey {\n  context: AthenaEntityContextIdentity;\n  model: AthenaModelIdentity;\n  primaryKey: AthenaPrimaryKey;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readRowField(row: Record<string, unknown>, column: string): unknown {\n  if (column in row) {\n    return row[column];\n  }\n  return;\n}\n\nexport function modelIdentity(\n  model: AthenaModelTarget,\n  row: unknown,\n): AthenaPrimaryKey {\n  const columns = model.meta.primaryKey;\n  if (!columns.length) {\n    throw new Error(\n      \"modelIdentity: model has no primary key. Full-row normalization requires meta.primaryKey.\",\n    );\n  }\n  if (!isRecord(row)) {\n    throw new Error(\"modelIdentity: row must be an object.\");\n  }\n  const pairs: Array<readonly [string, unknown]> = [];\n  for (const column of columns) {\n    const value = readRowField(row, column);\n    if (value === undefined) {\n      throw new Error(`modelIdentity: missing primary key field \"${column}\".`);\n    }\n    pairs.push([column, value]);\n  }\n  return pairs;\n}\n\nexport function createAthenaEntityKey(\n  model: AthenaModelTarget,\n  row: unknown,\n  context?: AthenaCacheScope,\n): AthenaEntityKey {\n  const target = resolveAthenaQueryTarget(\n    model.meta.tableName ?? model.meta.model ?? \"\",\n    model,\n  );\n  if (!target.table) {\n    throw new Error(\n      \"createAthenaEntityKey: model is missing table identity (meta.tableName or meta.model).\",\n    );\n  }\n  return {\n    context: context ?? null,\n    model: {\n      database: target.database,\n      model: target.model,\n      schema: target.schema,\n      table: target.table,\n    },\n    primaryKey: modelIdentity(model, row),\n  };\n}\n\nexport function athenaEntityKeyToken(key: AthenaEntityKey): string {\n  const qualified = key.model.schema\n    ? `${key.model.schema}.${key.model.table}`\n    : key.model.table;\n  const pk = key.primaryKey\n    .map(([column, value]) => `${column}=${stablePrimitive(value)}`)\n    .join(\"&\");\n  const context = key.context\n    ? [\n        `org=${key.context.organizationId ?? \"\"}`,\n        `user=${key.context.userId ?? \"\"}`,\n        `access=${key.context.accessScope ?? \"\"}`,\n        `policy=${key.context.policyRevision ?? \"\"}`,\n      ].join(\"|\")\n    : \"\";\n  return `entity:${key.model.database ?? \"\"}:${qualified}:${context}:${pk}`;\n}\n\nfunction stablePrimitive(value: unknown): string {\n  return canonicalizeAthenaValue(value);\n}\n\nexport function entityKeyFromSinglePrimary(\n  model: AthenaModelTarget,\n  id: unknown,\n  context?: AthenaCacheScope,\n): AthenaEntityKey {\n  const columns = model.meta.primaryKey;\n  if (columns.length !== 1) {\n    throw new Error(\n      \"entityKeyFromSinglePrimary: model does not have a single-column primary key.\",\n    );\n  }\n  return createAthenaEntityKey(model, { [columns[0] as string]: id }, context);\n}\n","import type { AthenaCacheContextDescriptor } from \"../../query/descriptor.ts\";\nimport { mergeEntityRow } from \"../../query/entity-graph.ts\";\nimport type { AthenaEntityKey } from \"../../query/model-identity.ts\";\nimport {\n  athenaEntityKeyToken,\n  createAthenaEntityKey,\n  entityKeyFromSinglePrimary,\n} from \"../../query/model-identity.ts\";\nimport type { AthenaModelTarget } from \"../../schema/types.ts\";\n\nexport interface EntityEntry {\n  data: Record<string, unknown>;\n  key: AthenaEntityKey;\n  updatedAt: number;\n}\n\nexport class EntityStore {\n  private readonly entries = new Map<string, EntityEntry>();\n\n  get<TRow = Record<string, unknown>>(\n    key: AthenaEntityKey\n  ): TRow | undefined {\n    return this.entries.get(athenaEntityKeyToken(key))?.data as\n      | TRow\n      | undefined;\n  }\n\n  getByToken(token: string): EntityEntry | undefined {\n    return this.entries.get(token);\n  }\n\n  merge(key: AthenaEntityKey, row: Record<string, unknown>): void {\n    const token = athenaEntityKeyToken(key);\n    const current = this.entries.get(token);\n    this.entries.set(token, {\n      data: mergeEntityRow(current?.data, row),\n      key,\n      updatedAt: Date.now(),\n    });\n  }\n\n  setToken(token: string, entry: EntityEntry): void {\n    this.entries.set(token, entry);\n  }\n\n  delete(key: AthenaEntityKey): void {\n    this.entries.delete(athenaEntityKeyToken(key));\n  }\n\n  clear(): void {\n    this.entries.clear();\n  }\n\n  snapshot(): Map<string, EntityEntry> {\n    return new Map(this.entries);\n  }\n\n  restore(entries: Map<string, EntityEntry>): void {\n    this.entries.clear();\n    for (const [token, entry] of entries) {\n      this.entries.set(token, entry);\n    }\n  }\n\n  dehydrate(): Array<{ data: Record<string, unknown>; token: string }> {\n    return [...this.entries.entries()].map(([token, entry]) => ({\n      data: entry.data,\n      token,\n    }));\n  }\n\n  ingestDehydrated(\n    entities: ReadonlyArray<{ data: Record<string, unknown>; token: string }>\n  ): void {\n    for (const entity of entities) {\n      this.entries.set(entity.token, {\n        data: entity.data,\n        key: {\n          context: null,\n          model: { table: \"\" },\n          primaryKey: [],\n        },\n        updatedAt: Date.now(),\n      });\n    }\n  }\n}\n\nexport function resolveModelRowKey(\n  model: AthenaModelTarget,\n  id: unknown,\n  context?: AthenaCacheContextDescriptor\n): AthenaEntityKey {\n  if (typeof id === \"object\" && id !== null) {\n    return createAthenaEntityKey(model, id, context);\n  }\n  return entityKeyFromSinglePrimary(model, id, context);\n}\n","import type { AthenaQueryDescriptor, AthenaQueryTarget } from \"./descriptor.ts\";\n\nexport function athenaModelIndexKey(target: AthenaQueryTarget): string {\n  return `${target.database ?? \"\"}:${target.schema ?? \"\"}:${target.table}`;\n}\n\nexport function athenaFieldIndexKey(\n  target: AthenaQueryTarget,\n  column: string\n): string {\n  return `${athenaModelIndexKey(target)}.${column}`;\n}\n\nexport function athenaScopeIndexKey(\n  context: AthenaQueryDescriptor[\"context\"]\n): string {\n  return [\n    context?.organizationId ?? \"\",\n    context?.userId ?? \"\",\n    context?.accessScope ?? \"\",\n    context?.policyRevision ?? \"\",\n  ].join(\"|\");\n}\n\nexport class AthenaQueryGraphIndex {\n  readonly byEntity = new Map<string, Set<string>>();\n  readonly byField = new Map<string, Set<string>>();\n  readonly byModel = new Map<string, Set<string>>();\n  readonly byScope = new Map<string, Set<string>>();\n\n  indexQuery(queryId: string, descriptor: AthenaQueryDescriptor): void {\n    this.add(this.byModel, athenaModelIndexKey(descriptor.target), queryId);\n    this.add(this.byScope, athenaScopeIndexKey(descriptor.context), queryId);\n    for (const field of descriptor.dependency.fields) {\n      this.add(\n        this.byField,\n        athenaFieldIndexKey(descriptor.target, field.column),\n        queryId\n      );\n    }\n    for (const relation of descriptor.dependency.relations) {\n      if (relation.targetModel) {\n        this.add(\n          this.byModel,\n          `::${relation.targetModel}`,\n          queryId\n        );\n      }\n    }\n  }\n\n  indexEntity(queryId: string, entityToken: string): void {\n    this.add(this.byEntity, entityToken, queryId);\n  }\n\n  unindexQuery(\n    queryId: string,\n    descriptor?: AthenaQueryDescriptor,\n    entityRefs?: readonly string[]\n  ): void {\n    if (descriptor) {\n      this.remove(this.byModel, athenaModelIndexKey(descriptor.target), queryId);\n      this.remove(this.byScope, athenaScopeIndexKey(descriptor.context), queryId);\n      for (const field of descriptor.dependency.fields) {\n        this.remove(\n          this.byField,\n          athenaFieldIndexKey(descriptor.target, field.column),\n          queryId\n        );\n      }\n      for (const relation of descriptor.dependency.relations) {\n        if (relation.targetModel) {\n          this.remove(this.byModel, `::${relation.targetModel}`, queryId);\n        }\n      }\n    }\n    for (const token of entityRefs ?? []) {\n      this.remove(this.byEntity, token, queryId);\n    }\n  }\n\n  queriesForEntity(token: string): Set<string> {\n    return this.byEntity.get(token) ?? new Set();\n  }\n\n  queriesForModel(target: AthenaQueryTarget): Set<string> {\n    return this.byModel.get(athenaModelIndexKey(target)) ?? new Set();\n  }\n\n  queriesForField(target: AthenaQueryTarget, column: string): Set<string> {\n    return this.byField.get(athenaFieldIndexKey(target, column)) ?? new Set();\n  }\n\n  private add(map: Map<string, Set<string>>, key: string, queryId: string) {\n    const existing = map.get(key);\n    if (existing) {\n      existing.add(queryId);\n      return;\n    }\n    map.set(key, new Set([queryId]));\n  }\n\n  private remove(\n    map: Map<string, Set<string>>,\n    key: string,\n    queryId: string\n  ) {\n    const existing = map.get(key);\n    if (!existing) {\n      return;\n    }\n    existing.delete(queryId);\n    if (existing.size === 0) {\n      map.delete(key);\n    }\n  }\n}\n","import type { AthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport type { AthenaEntityKey } from \"../../query/model-identity.ts\";\nimport { athenaEntityKeyToken } from \"../../query/model-identity.ts\";\nimport { AthenaQueryGraphIndex } from \"../../query/query-index.ts\";\n\nexport class QueryClientGraphIndex {\n  private readonly index = new AthenaQueryGraphIndex();\n\n  indexQuery(queryId: string, descriptor: AthenaQueryDescriptor): void {\n    this.index.indexQuery(queryId, descriptor);\n  }\n\n  indexEntity(queryId: string, entityToken: string): void {\n    this.index.indexEntity(queryId, entityToken);\n  }\n\n  unindexQuery(\n    queryId: string,\n    descriptor?: AthenaQueryDescriptor,\n    entityRefs?: readonly string[]\n  ): void {\n    this.index.unindexQuery(queryId, descriptor, entityRefs);\n  }\n\n  collectAffectedQueryIds(\n    key: AthenaEntityKey,\n    changedFields: readonly string[],\n    mutation?: AthenaQueryDescriptor\n  ): Set<string> {\n    const ids = new Set<string>();\n    const token = athenaEntityKeyToken(key);\n    for (const queryId of this.index.queriesForEntity(token)) {\n      ids.add(queryId);\n    }\n    for (const queryId of this.index.queriesForModel({\n      database: key.model.database,\n      schema: key.model.schema,\n      table: key.model.table,\n    })) {\n      ids.add(queryId);\n    }\n    for (const field of changedFields) {\n      for (const queryId of this.index.queriesForField(\n        {\n          database: key.model.database,\n          schema: key.model.schema,\n          table: key.model.table,\n        },\n        field\n      )) {\n        ids.add(queryId);\n      }\n    }\n    if (mutation?.target.model) {\n      for (const queryId of this.index.byModel.get(\n        `::${mutation.target.model}`\n      ) ?? []) {\n        ids.add(queryId);\n      }\n    }\n    return ids;\n  }\n}\n","import { isAthenaGatewayError } from \"../gateway/errors.ts\";\nimport type {\n  AthenaQueryError,\n  AthenaQueryResult,\n  AthenaResponseLike,\n  AthenaRetryCount,\n  AthenaRetryDelay,\n  QueryKey,\n} from \"./types.ts\";\n\ninterface RetryOptions {\n  retry?: AthenaRetryCount;\n  retryDelay?: AthenaRetryDelay;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isPrimitive(\n  value: unknown\n): value is string | number | boolean | null | undefined {\n  return (\n    value === null || [\"string\", \"number\", \"boolean\"].includes(typeof value)\n  );\n}\n\nfunction encodePrimitive(\n  value: string | number | boolean | null | undefined\n): string {\n  if (value === null) {\n    return \"null:0:\";\n  }\n  if (value === undefined) {\n    return \"undefined:0:\";\n  }\n  if (typeof value === \"string\") {\n    return `str:${value.length}:${value}`;\n  }\n  if (typeof value === \"number\") {\n    const serialized = Number.isFinite(value) ? String(value) : \"nan\";\n    return `num:${serialized.length}:${serialized}`;\n  }\n  const serialized = value ? \"1\" : \"0\";\n  return `bool:${serialized.length}:${serialized}`;\n}\n\nfunction stableSerialize(value: unknown, seen: WeakSet<object>): string {\n  if (value === null) {\n    return \"null\";\n  }\n  if (value === undefined) {\n    return \"undefined\";\n  }\n\n  const valueType = typeof value;\n  if (valueType === \"string\") {\n    return `\"${value}\"`;\n  }\n  if (valueType === \"number\") {\n    return Number.isFinite(value as number) ? String(value) : \"null\";\n  }\n  if (valueType === \"boolean\") {\n    return (value as boolean) ? \"true\" : \"false\";\n  }\n  if (valueType === \"bigint\") {\n    return `${String(value)}n`;\n  }\n  if (valueType === \"symbol\") {\n    return `symbol:${String(value)}`;\n  }\n  if (valueType === \"function\") {\n    const namedFunction = value as { name?: string };\n    return `function:${namedFunction.name || \"anonymous\"}`;\n  }\n\n  if (value instanceof Date) {\n    return `date:${value.toISOString()}`;\n  }\n\n  if (Array.isArray(value)) {\n    return `[${value.map((item) => stableSerialize(item, seen)).join(\",\")}]`;\n  }\n\n  if (valueType === \"object\") {\n    const objectValue = value as Record<string, unknown>;\n    if (seen.has(objectValue)) {\n      return \"[circular]\";\n    }\n    seen.add(objectValue);\n    const keys = Object.keys(objectValue).sort();\n    const serialized = `{${keys\n      .map((key) => `${key}:${stableSerialize(objectValue[key], seen)}`)\n      .join(\",\")}}`;\n    seen.delete(objectValue);\n    return serialized;\n  }\n\n  return String(value);\n}\n\nfunction queryKeyPartEquals(left: unknown, right: unknown): boolean {\n  if (Object.is(left, right)) {\n    return true;\n  }\n  if (left instanceof Date && right instanceof Date) {\n    return left.getTime() === right.getTime();\n  }\n  if (Array.isArray(left) && Array.isArray(right)) {\n    if (left.length !== right.length) {\n      return false;\n    }\n    return left.every((item, index) => queryKeyPartEquals(item, right[index]));\n  }\n  if (\n    left !== null &&\n    right !== null &&\n    typeof left === \"object\" &&\n    typeof right === \"object\" &&\n    !Array.isArray(left) &&\n    !Array.isArray(right) &&\n    !(left instanceof Date) &&\n    !(right instanceof Date)\n  ) {\n    const leftRecord = left as Record<string, unknown>;\n    const rightRecord = right as Record<string, unknown>;\n    const leftKeys = Object.keys(leftRecord);\n    const rightKeys = Object.keys(rightRecord);\n    if (leftKeys.length !== rightKeys.length) {\n      return false;\n    }\n    return leftKeys.every(\n      (key) =>\n        Object.hasOwn(rightRecord, key) &&\n        queryKeyPartEquals(leftRecord[key], rightRecord[key])\n    );\n  }\n  return false;\n}\n\n/**\n * Structured query-key match for cache invalidation.\n *\n * Array filters match stored arrays by tuple prefix (`exact: false`) or\n * full equality (`exact: true`). String filters match stored strings by\n * equality only. Matching never inspects serialization tokens.\n */\nexport function matchesQueryKey(\n  stored: QueryKey,\n  filter: QueryKey,\n  exact = false\n): boolean {\n  if (typeof filter === \"string\") {\n    return typeof stored === \"string\" && stored === filter;\n  }\n  if (!Array.isArray(filter)) {\n    return false;\n  }\n  if (typeof stored === \"string\" || !Array.isArray(stored)) {\n    return false;\n  }\n  if (exact) {\n    return (\n      stored.length === filter.length &&\n      filter.every((part, index) => queryKeyPartEquals(part, stored[index]))\n    );\n  }\n  if (filter.length > stored.length) {\n    return false;\n  }\n  return filter.every((part, index) => queryKeyPartEquals(part, stored[index]));\n}\n\nexport function safeSerializeQueryKey(queryKey: QueryKey): string {\n  try {\n    if (typeof queryKey === \"string\") {\n      return `key:${queryKey}`;\n    }\n\n    if (Array.isArray(queryKey) && queryKey.every(isPrimitive)) {\n      return `arr:${queryKey.map((item) => encodePrimitive(item)).join(\"|\")}`;\n    }\n\n    return `ser:${stableSerialize(queryKey, new WeakSet<object>())}`;\n  } catch {\n    try {\n      return `fallback:${String(queryKey)}`;\n    } catch {\n      return \"fallback:[unserializable-query-key]\";\n    }\n  }\n}\n\nexport function sleep(ms: number): Promise<void> {\n  if (ms <= 0) {\n    return Promise.resolve();\n  }\n  return new Promise((resolve) => {\n    setTimeout(resolve, ms);\n  });\n}\n\nfunction resolveRetryCount(retry: AthenaRetryCount | undefined): number {\n  if (retry === false || retry === null) {\n    return 0;\n  }\n  if (typeof retry !== \"number\" || !Number.isFinite(retry)) {\n    return 0;\n  }\n  return Math.max(0, Math.trunc(retry));\n}\n\nfunction resolveRetryDelay(\n  retryDelay: AthenaRetryDelay | undefined,\n  attempt: number\n): number {\n  if (typeof retryDelay === \"function\") {\n    const resolved = retryDelay(attempt);\n    if (!Number.isFinite(resolved)) {\n      return 0;\n    }\n    return Math.max(0, resolved);\n  }\n  if (typeof retryDelay === \"number\") {\n    if (!Number.isFinite(retryDelay)) {\n      return 0;\n    }\n    return Math.max(0, retryDelay);\n  }\n  return 0;\n}\n\nexport async function runWithRetry<T>(\n  execute: (attempt: number) => Promise<T>,\n  options?: RetryOptions\n): Promise<T> {\n  const retries = resolveRetryCount(options?.retry);\n  let attempt = 0;\n\n  for (;;) {\n    attempt += 1;\n    try {\n      return await execute(attempt);\n    } catch (error) {\n      if (attempt > retries) {\n        throw error;\n      }\n      const delay = resolveRetryDelay(options?.retryDelay, attempt);\n      await sleep(delay);\n    }\n  }\n}\n\nfunction errorMessageFromUnknown(error: unknown): string {\n  if (typeof error === \"string\" && error.trim()) {\n    return error.trim();\n  }\n  if (error instanceof Error && error.message.trim()) {\n    return error.message.trim();\n  }\n  if (isRecord(error)) {\n    const messageCandidate = error.message ?? error.error;\n    if (typeof messageCandidate === \"string\" && messageCandidate.trim()) {\n      return messageCandidate.trim();\n    }\n  }\n  return \"Athena request failed\";\n}\n\nexport function normalizeAthenaError(\n  error: unknown,\n  source?: unknown\n): AthenaQueryError {\n  if (\n    isRecord(error) &&\n    typeof error.message === \"string\" &&\n    (error.status === undefined || typeof error.status === \"number\") &&\n    (error.code === undefined || typeof error.code === \"string\")\n  ) {\n    return {\n      code: typeof error.code === \"string\" ? error.code : undefined,\n      details: error.details,\n      message: error.message,\n      raw: error.raw ?? source ?? error,\n      status: typeof error.status === \"number\" ? error.status : undefined,\n    };\n  }\n\n  if (isAthenaGatewayError(error)) {\n    const details = error.toDetails();\n    return {\n      code: details.code,\n      details,\n      message: details.message,\n      raw: source ?? error,\n      status: details.status,\n    };\n  }\n\n  if (\n    isRecord(source) &&\n    source.errorDetails &&\n    isRecord(source.errorDetails)\n  ) {\n    const details = source.errorDetails;\n    return {\n      code: typeof details.code === \"string\" ? details.code : undefined,\n      details,\n      message: errorMessageFromUnknown(error ?? source.error),\n      raw: source,\n      status: typeof source.status === \"number\" ? source.status : undefined,\n    };\n  }\n\n  if (isRecord(source) && typeof source.status === \"number\") {\n    return {\n      details: source,\n      message: errorMessageFromUnknown(error),\n      raw: source,\n      status: source.status,\n    };\n  }\n\n  return {\n    message: errorMessageFromUnknown(error),\n    raw: source ?? error,\n  };\n}\n\nexport function isAthenaResponseLike<T>(\n  value: unknown\n): value is AthenaResponseLike<T> {\n  if (!isRecord(value)) {\n    return false;\n  }\n  if (\"error\" in value || \"errorDetails\" in value) {\n    return true;\n  }\n  if (\"status\" in value && typeof value.status === \"number\") {\n    return \"data\" in value || \"raw\" in value;\n  }\n  return \"data\" in value && (\"raw\" in value || \"status\" in value);\n}\n\nexport function normalizeAthenaResult<TQueryFnData, TData = TQueryFnData>(\n  value: unknown,\n  select?: (data: TQueryFnData) => TData\n): AthenaQueryResult<TData> {\n  if (isAthenaResponseLike<TQueryFnData>(value)) {\n    const status =\n      typeof value.status === \"number\"\n        ? value.status\n        : value.error === null\n          ? 200\n          : 500;\n    if (value.error !== null) {\n      return {\n        data: undefined,\n        error: normalizeAthenaError(value.error, value),\n        raw: value.raw ?? value,\n        status,\n      };\n    }\n\n    const hasData = \"data\" in value;\n    const sourceData = hasData\n      ? (value.data as TQueryFnData | null | undefined)\n      : undefined;\n    const selectedData =\n      sourceData === undefined\n        ? undefined\n        : sourceData === null\n          ? (null as unknown as TData)\n          : select\n            ? select(sourceData)\n            : (sourceData as unknown as TData);\n\n    return {\n      data: selectedData,\n      error: null,\n      raw: value.raw ?? value,\n      status,\n    };\n  }\n\n  const sourceData = value as TQueryFnData;\n  const selectedData = select\n    ? select(sourceData)\n    : (sourceData as unknown as TData);\n\n  return {\n    data: selectedData,\n    error: null,\n    raw: value,\n    status: 200,\n  };\n}\n","import type { AthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport {\n  type AthenaNormalizedQueryPage,\n  describeQueryEnvelope,\n  extractResultRows,\n  materializeNormalizedQueryPage,\n} from \"../../query/entity-graph.ts\";\nimport {\n  athenaEntityKeyToken,\n  createAthenaEntityKey,\n} from \"../../query/model-identity.ts\";\nimport type { AthenaModelTarget } from \"../../schema/types.ts\";\nimport type {\n  AthenaCacheMode,\n  AthenaQueryClientConfig,\n  AthenaQueryEvent,\n  AthenaQueryRequestLog,\n  AthenaQueryResult,\n  AthenaQueryState,\n  AthenaRuntimeEvent,\n  AthenaUnsubscribe,\n  QueryKey,\n} from \"../types.ts\";\nimport {\n  normalizeAthenaError,\n  normalizeAthenaResult,\n  runWithRetry,\n} from \"../utils.ts\";\nimport type { EntityStore } from \"./entity-store.ts\";\nimport type { QueryClientGraphIndex } from \"./graph-index.ts\";\n\nexport interface ExecuteQueryInput<TQueryFnData, TData> {\n  cacheMode?: AthenaCacheMode;\n  dedupe?: boolean;\n  descriptor?: AthenaQueryDescriptor;\n  force?: boolean;\n  model?: AthenaModelTarget;\n  queryFn: (context?: { signal?: AbortSignal }) => Promise<TQueryFnData>;\n  signal?: AbortSignal;\n  queryKey: QueryKey;\n  queryKeyToken: string;\n  retry?: number | false;\n  retryDelay?: number | ((attempt: number) => number);\n  select?: (data: TQueryFnData) => TData;\n}\n\nexport interface QueryEntry {\n  activeRequestId: number;\n  cacheMode?: AthenaCacheMode;\n  descriptor?: AthenaQueryDescriptor;\n  entityRefs?: string[];\n  gcTimer?: ReturnType<typeof setTimeout>;\n  normalizedPage?: AthenaNormalizedQueryPage;\n  key: string;\n  listeners: Set<() => void>;\n  model?: AthenaModelTarget;\n  queryFn?: (context?: { signal?: AbortSignal }) => Promise<unknown>;\n  queryKey?: QueryKey;\n  retry?: number | false;\n  retryDelay?: number | ((attempt: number) => number);\n  select?: (data: unknown) => unknown;\n  state: AthenaQueryState<unknown>;\n}\n\nexport interface QueryStoreHost {\n  config: AthenaQueryClientConfig;\n  emitEvent(event: AthenaRuntimeEvent): void;\n  entities: EntityStore;\n  graph: QueryClientGraphIndex;\n  nextRequestId(): number;\n}\n\nexport function createInitialQueryState<TData>(\n  initialData?: TData,\n): AthenaQueryState<TData> {\n  return {\n    data: initialData,\n    error: null,\n    isFetching: false,\n    status: initialData === undefined ? \"idle\" : \"success\",\n    updatedAt: initialData === undefined ? undefined : Date.now(),\n  };\n}\n\nexport function shouldUseMemoryCache(\n  config: AthenaQueryClientConfig,\n  override?: AthenaCacheMode,\n): boolean {\n  return (override ?? config.cache?.mode) === \"memory\";\n}\n\nexport class QueryStore {\n  private readonly entries = new Map<string, QueryEntry>();\n  private readonly inflight = new Map<\n    string,\n    Promise<AthenaQueryResult<unknown>>\n  >();\n\n  constructor(private readonly host: QueryStoreHost) { }\n\n  get(key: string): QueryEntry | undefined {\n    return this.entries.get(key);\n  }\n\n  values(): IterableIterator<QueryEntry> {\n    return this.entries.values();\n  }\n\n  ensure(key: string): QueryEntry {\n    let entry = this.entries.get(key);\n    if (entry) {\n      return entry;\n    }\n\n    entry = {\n      activeRequestId: 0,\n      key,\n      listeners: new Set(),\n      state: createInitialQueryState(),\n    };\n    this.entries.set(key, entry);\n    return entry;\n  }\n\n  getQueryData<TData = unknown>(queryKeyToken: string): TData | undefined {\n    const entry = this.entries.get(queryKeyToken);\n    if (!entry) {\n      return;\n    }\n    return this.materialize(entry) as TData | undefined;\n  }\n\n  getNormalizedPage(\n    queryKeyToken: string,\n  ): AthenaNormalizedQueryPage | undefined {\n    return this.entries.get(queryKeyToken)?.normalizedPage;\n  }\n\n  getState<TData = unknown>(key: string): AthenaQueryState<TData> {\n    return this.ensure(key).state as AthenaQueryState<TData>;\n  }\n\n  setQueryData<TData>(\n    queryKey: QueryKey,\n    queryKeyToken: string,\n    updater: TData | ((previous: TData | undefined) => TData),\n  ): TData {\n    const entry = this.ensure(queryKeyToken);\n    entry.queryKey = queryKey;\n    entry.normalizedPage = undefined;\n    entry.activeRequestId = this.host.nextRequestId();\n    const previous = this.materialize(entry) as TData | undefined;\n    const next =\n      typeof updater === \"function\"\n        ? (updater as (value: TData | undefined) => TData)(previous)\n        : updater;\n    const finishedAt = Date.now();\n    this.setState(\n      entry,\n      {\n        ...entry.state,\n        data: next,\n        error: null,\n        status: \"success\",\n        updatedAt: finishedAt,\n      },\n      \"query_updated\",\n    );\n    return next;\n  }\n\n  subscribe(key: string, listener: () => void): AthenaUnsubscribe {\n    const entry = this.ensure(key);\n    if (entry.gcTimer) {\n      clearTimeout(entry.gcTimer);\n      entry.gcTimer = undefined;\n    }\n    entry.listeners.add(listener);\n    return () => {\n      const current = this.entries.get(key);\n      if (!current) {\n        return;\n      }\n      current.listeners.delete(listener);\n      if (current.listeners.size === 0) {\n        this.scheduleGc(current);\n      }\n    };\n  }\n\n  reset(queryKeyToken: string): void {\n    const entry = this.ensure(queryKeyToken);\n    entry.activeRequestId = this.host.nextRequestId();\n    this.setState(entry, createInitialQueryState(), \"query_reset\");\n    this.inflight.delete(queryKeyToken);\n  }\n\n  setState(\n    entry: QueryEntry,\n    state: AthenaQueryState<unknown>,\n    eventType: AthenaQueryEvent[\"type\"],\n  ): void {\n    entry.state = state;\n    for (const listener of entry.listeners) {\n      listener();\n    }\n\n    this.host.emitEvent({\n      key: entry.key,\n      state,\n      timestamp: Date.now(),\n      type: eventType,\n    });\n  }\n\n  materialize(entry: QueryEntry): unknown {\n    if (!entry.normalizedPage) {\n      return entry.state.data;\n    }\n    return materializeNormalizedQueryPage(\n      entry.normalizedPage,\n      (token) => this.host.entities.getByToken(token)?.data,\n    );\n  }\n\n  ingestResult(entry: QueryEntry, data: unknown): unknown {\n    if (\n      !(\n        entry.descriptor &&\n        entry.model &&\n        entry.descriptor.projection?.kind === \"full-model\"\n      )\n    ) {\n      entry.entityRefs = undefined;\n      entry.normalizedPage = undefined;\n      return data;\n    }\n\n    const refs: string[] = [];\n    for (const row of extractResultRows(data)) {\n      try {\n        const key = createAthenaEntityKey(\n          entry.model as AthenaModelTarget,\n          row,\n          entry.descriptor?.context,\n        );\n        const token = athenaEntityKeyToken(key);\n        this.host.entities.merge(key, row);\n        refs.push(token);\n      } catch {\n        // Row is not identity-complete; skip graph write.\n      }\n    }\n    if (entry.entityRefs) {\n      this.host.graph.unindexQuery(entry.key, undefined, entry.entityRefs);\n    }\n    entry.entityRefs = refs;\n    const envelope = describeQueryEnvelope(data);\n    entry.normalizedPage = {\n      entities: refs,\n      envelope: envelope.envelope,\n      extras: envelope.extras,\n    };\n    for (const token of refs) {\n      this.host.graph.indexEntity(entry.key, token);\n    }\n    return this.materialize(entry) ?? data;\n  }\n\n  async execute<TQueryFnData, TData = TQueryFnData>(\n    input: ExecuteQueryInput<TQueryFnData, TData>,\n  ): Promise<AthenaQueryResult<TData>> {\n    const entry = this.ensure(input.queryKeyToken);\n    entry.queryKey = input.queryKey;\n    entry.queryFn = input.queryFn;\n    entry.retry = input.retry;\n    entry.retryDelay = input.retryDelay;\n    entry.select = input.select as ((data: unknown) => unknown) | undefined;\n    if (input.cacheMode !== undefined) {\n      entry.cacheMode = input.cacheMode;\n    }\n    if (input.descriptor) {\n      if (entry.descriptor) {\n        this.host.graph.unindexQuery(\n          entry.key,\n          entry.descriptor,\n          entry.entityRefs,\n        );\n      }\n      entry.descriptor = input.descriptor;\n      this.host.graph.indexQuery(entry.key, input.descriptor);\n    }\n    if (input.model) {\n      entry.model = input.model;\n    }\n\n    if (input.dedupe !== false) {\n      const existing = this.inflight.get(input.queryKeyToken);\n      if (existing) {\n        return existing as Promise<AthenaQueryResult<TData>>;\n      }\n    }\n\n    if (\n      !input.force &&\n      shouldUseMemoryCache(this.host.config, input.cacheMode ?? entry.cacheMode)\n    ) {\n      const staleTime = this.host.config.cache?.staleTime ?? 0;\n      const hasFreshData =\n        entry.state.status === \"success\" &&\n        entry.state.data !== undefined &&\n        entry.state.updatedAt !== undefined &&\n        Date.now() - entry.state.updatedAt <= staleTime;\n      if (hasFreshData) {\n        return {\n          __applied: true,\n          data: entry.state.data as TData,\n          error: null,\n          raw: entry.state.lastResponse ?? entry.state.data,\n          status: 200,\n        } as AthenaQueryResult<TData>;\n      }\n    }\n\n    const requestId = this.host.nextRequestId();\n    entry.activeRequestId = requestId;\n\n    const startRequestLog: AthenaQueryRequestLog = {\n      attempt: 1,\n      queryKey: input.queryKey,\n      queryKeyToken: input.queryKeyToken,\n      requestId,\n      startedAt: Date.now(),\n    };\n\n    const loadingStatus =\n      entry.state.data === undefined ? \"loading\" : entry.state.status;\n    this.setState(\n      entry,\n      {\n        ...entry.state,\n        error: null,\n        isFetching: true,\n        lastRequest: startRequestLog,\n        status: loadingStatus,\n      },\n      \"query_updated\",\n    );\n\n    const executionPromise = runWithRetry(\n      async (attempt) => {\n        const attemptRequestLog: AthenaQueryRequestLog = {\n          ...startRequestLog,\n          attempt,\n        };\n\n        if (entry.activeRequestId === requestId) {\n          this.setState(\n            entry,\n            {\n              ...entry.state,\n              isFetching: true,\n              lastRequest: attemptRequestLog,\n            },\n            \"query_updated\",\n          );\n        }\n\n        const rawResult = await input.queryFn(\n          input.signal ? { signal: input.signal } : undefined,\n        );\n        const normalized = normalizeAthenaResult<TQueryFnData, TData>(\n          rawResult,\n          input.select,\n        );\n\n        if (normalized.error) {\n          throw Object.assign(new Error(\"athena.query.normalized\"), {\n            __athenaNormalizedError: normalized.error,\n            __athenaRaw: normalized.raw,\n            __athenaResponse: rawResult,\n            __athenaStatus: normalized.status,\n          });\n        }\n\n        return {\n          attempt,\n          normalized,\n          response: rawResult,\n        };\n      },\n      {\n        retry: input.retry,\n        retryDelay: input.retryDelay,\n      },\n    )\n      .then((result) => {\n        const applied = entry.activeRequestId === requestId;\n        if (applied) {\n          const finishedAt = Date.now();\n          const doneRequestLog: AthenaQueryRequestLog = {\n            ...startRequestLog,\n            attempt: result.attempt,\n            endedAt: finishedAt,\n          };\n          const data = this.ingestResult(entry, result.normalized.data);\n          this.setState(\n            entry,\n            {\n              ...entry.state,\n              data,\n              error: null,\n              isFetching: false,\n              lastRequest: doneRequestLog,\n              lastResponse: result.response,\n              status: \"success\",\n              updatedAt: finishedAt,\n            },\n            \"query_updated\",\n          );\n        }\n\n        return {\n          ...result.normalized,\n          __applied: applied,\n        } as AthenaQueryResult<TData>;\n      })\n      .catch((error) => {\n        const wrapped =\n          typeof error === \"object\" && error !== null\n            ? (error as Record<string, unknown>)\n            : undefined;\n\n        const normalizedError = wrapped?.__athenaNormalizedError\n          ? (wrapped.__athenaNormalizedError as ReturnType<\n            typeof normalizeAthenaError\n          >)\n          : normalizeAthenaError(error);\n\n        const status =\n          typeof wrapped?.__athenaStatus === \"number\"\n            ? (wrapped.__athenaStatus as number)\n            : (normalizedError.status ?? 500);\n\n        const raw = wrapped?.__athenaRaw ?? normalizedError.raw ?? null;\n        const response = wrapped?.__athenaResponse ?? raw;\n\n        const applied = entry.activeRequestId === requestId;\n        if (applied) {\n          const finishedAt = Date.now();\n          const doneRequestLog: AthenaQueryRequestLog = {\n            ...startRequestLog,\n            attempt:\n              entry.state.lastRequest?.requestId === requestId\n                ? entry.state.lastRequest.attempt\n                : startRequestLog.attempt,\n            endedAt: finishedAt,\n          };\n          this.setState(\n            entry,\n            {\n              ...entry.state,\n              error: normalizedError,\n              isFetching: false,\n              lastRequest: doneRequestLog,\n              lastResponse: response,\n              status: \"error\",\n              updatedAt: finishedAt,\n            },\n            \"query_updated\",\n          );\n        }\n\n        return {\n          __applied: applied,\n          data: undefined,\n          error: normalizedError,\n          raw,\n          status,\n        } as AthenaQueryResult<TData>;\n      })\n      .finally(() => {\n        const inflight = this.inflight.get(input.queryKeyToken);\n        if (inflight === executionPromise) {\n          this.inflight.delete(input.queryKeyToken);\n        }\n      });\n\n    this.inflight.set(\n      input.queryKeyToken,\n      executionPromise as Promise<AthenaQueryResult<unknown>>,\n    );\n\n    return executionPromise;\n  }\n\n  snapshot(): Map<\n    string,\n    {\n      data: unknown;\n      descriptor?: AthenaQueryDescriptor;\n      entityRefs?: string[];\n      queryKey?: QueryKey;\n      updatedAt?: number;\n    }\n  > {\n    return new Map(\n      [...this.entries.entries()].map(([token, entry]) => [\n        token,\n        {\n          data: entry.state.data,\n          descriptor: entry.descriptor,\n          entityRefs: entry.entityRefs ? [...entry.entityRefs] : undefined,\n          queryKey: entry.queryKey,\n          updatedAt: entry.state.updatedAt,\n        },\n      ]),\n    );\n  }\n\n  restoreSnapshot(snapshot: ReturnType<QueryStore[\"snapshot\"]>): void {\n    for (const [token, snap] of snapshot) {\n      const entry = this.ensure(token);\n      entry.descriptor = snap.descriptor;\n      entry.entityRefs = snap.entityRefs;\n      entry.queryKey = snap.queryKey;\n      this.setState(\n        entry,\n        {\n          ...entry.state,\n          data: snap.data,\n          updatedAt: snap.updatedAt,\n        },\n        \"query_updated\",\n      );\n    }\n  }\n\n  private scheduleGc(entry: QueryEntry): void {\n    const gcTime = shouldUseMemoryCache(this.host.config)\n      ? Math.max(0, this.host.config.cache?.gcTime ?? 300_000)\n      : Math.max(0, this.host.config.cache?.gcTime ?? 0);\n\n    entry.gcTimer = setTimeout(() => {\n      const current = this.entries.get(entry.key);\n      if (!current || current.listeners.size > 0) {\n        return;\n      }\n      this.host.graph.unindexQuery(\n        entry.key,\n        current.descriptor,\n        current.entityRefs,\n      );\n      this.entries.delete(entry.key);\n      this.inflight.delete(entry.key);\n      this.host.emitEvent({\n        key: entry.key,\n        state: current.state,\n        timestamp: Date.now(),\n        type: \"query_gc\",\n      });\n    }, gcTime);\n  }\n}\n","import type {\n  AthenaMutationEvent,\n  AthenaMutationRequestLog,\n  AthenaMutationResultData,\n  AthenaMutationState,\n  AthenaQueryClientConfig,\n  AthenaResponseLike,\n  AthenaRuntimeEvent,\n  AthenaUnsubscribe,\n  QueryKey,\n} from \"../types.ts\";\nimport {\n  normalizeAthenaError,\n  normalizeAthenaResult,\n  runWithRetry,\n  safeSerializeQueryKey,\n} from \"../utils.ts\";\nimport { shouldUseMemoryCache } from \"./query-store.ts\";\n\nexport interface ExecuteMutationInput<TVariables, TMutationFnData, TData> {\n  mutationFn: (\n    variables: TVariables,\n  ) => Promise<TMutationFnData | AthenaResponseLike<TMutationFnData>>;\n  mutationKey?: QueryKey;\n  mutationKeyToken: string;\n  retry?: number | false;\n  retryDelay?: number | ((attempt: number) => number);\n  select?: (data: TMutationFnData) => TData;\n  variables: TVariables;\n}\n\nexport interface MutationEntry {\n  activeRequestId: number;\n  gcTimer?: ReturnType<typeof setTimeout>;\n  key: string;\n  listeners: Set<() => void>;\n  state: AthenaMutationState<unknown, unknown>;\n}\n\nexport interface MutationStoreHost {\n  config: AthenaQueryClientConfig;\n  emitEvent(event: AthenaRuntimeEvent): void;\n  nextRequestId(): number;\n}\n\nexport function createInitialMutationState<\n  TVariables,\n  TData,\n>(): AthenaMutationState<TVariables, TData> {\n  return {\n    data: undefined,\n    error: null,\n    isLoading: false,\n    lastResponse: undefined,\n    lastVariables: undefined,\n    status: \"idle\",\n    updatedAt: undefined,\n  };\n}\n\nexport class MutationStore {\n  private readonly entries = new Map<string, MutationEntry>();\n\n  constructor(private readonly host: MutationStoreHost) {}\n\n  token(mutationKey?: QueryKey): string {\n    if (mutationKey === undefined || mutationKey === null) {\n      return \"__mutation__default__\";\n    }\n    return safeSerializeQueryKey(mutationKey as QueryKey);\n  }\n\n  ensure(key: string): MutationEntry {\n    let entry = this.entries.get(key);\n    if (entry) {\n      return entry;\n    }\n\n    entry = {\n      activeRequestId: 0,\n      key,\n      listeners: new Set(),\n      state: createInitialMutationState(),\n    };\n    this.entries.set(key, entry);\n    return entry;\n  }\n\n  getState<TVariables = unknown, TData = unknown>(\n    key: string\n  ): AthenaMutationState<TVariables, TData> {\n    return this.ensure(key).state as AthenaMutationState<TVariables, TData>;\n  }\n\n  subscribe(key: string, listener: () => void): AthenaUnsubscribe {\n    const entry = this.ensure(key);\n    if (entry.gcTimer) {\n      clearTimeout(entry.gcTimer);\n      entry.gcTimer = undefined;\n    }\n    entry.listeners.add(listener);\n    return () => {\n      const current = this.entries.get(key);\n      if (!current) {\n        return;\n      }\n      current.listeners.delete(listener);\n      if (current.listeners.size === 0) {\n        this.scheduleGc(current);\n      }\n    };\n  }\n\n  reset(mutationKey?: QueryKey): void {\n    const key = this.token(mutationKey);\n    const entry = this.ensure(key);\n    entry.activeRequestId = this.host.nextRequestId();\n    this.setState(entry, createInitialMutationState(), \"mutation_reset\");\n  }\n\n  async execute<TVariables, TMutationFnData, TData = TMutationFnData>(\n    input: ExecuteMutationInput<TVariables, TMutationFnData, TData>\n  ): Promise<AthenaMutationResultData<TData>> {\n    const entry = this.ensure(input.mutationKeyToken);\n    const requestId = this.host.nextRequestId();\n    entry.activeRequestId = requestId;\n\n    const startRequestLog: AthenaMutationRequestLog<TVariables> = {\n      attempt: 1,\n      mutationKey: input.mutationKey,\n      mutationKeyToken: input.mutationKeyToken,\n      requestId,\n      startedAt: Date.now(),\n      variables: input.variables,\n    };\n\n    this.setState(\n      entry,\n      {\n        ...entry.state,\n        error: null,\n        isLoading: true,\n        lastRequest: startRequestLog,\n        lastVariables: input.variables,\n        status: \"loading\",\n      },\n      \"mutation_updated\"\n    );\n\n    try {\n      const result = await runWithRetry(\n        async (attempt) => {\n          const attemptRequestLog: AthenaMutationRequestLog<TVariables> = {\n            ...startRequestLog,\n            attempt,\n          };\n\n          if (entry.activeRequestId === requestId) {\n            this.setState(\n              entry,\n              {\n                ...entry.state,\n                isLoading: true,\n                lastRequest: attemptRequestLog,\n              },\n              \"mutation_updated\"\n            );\n          }\n\n          const rawResult = await input.mutationFn(input.variables);\n          const normalized = normalizeAthenaResult<TMutationFnData, TData>(\n            rawResult,\n            input.select\n          );\n          if (normalized.error) {\n            throw Object.assign(new Error(\"athena.mutation.normalized\"), {\n              __athenaNormalizedError: normalized.error,\n              __athenaRaw: normalized.raw,\n              __athenaResponse: rawResult,\n              __athenaStatus: normalized.status,\n            });\n          }\n\n          return {\n            attempt,\n            normalized,\n            response: rawResult,\n          };\n        },\n        {\n          retry: input.retry,\n          retryDelay: input.retryDelay,\n        }\n      );\n\n      if (entry.activeRequestId === requestId) {\n        const finishedAt = Date.now();\n        const doneRequestLog: AthenaMutationRequestLog<TVariables> = {\n          ...startRequestLog,\n          attempt: result.attempt,\n          endedAt: finishedAt,\n        };\n        this.setState(\n          entry,\n          {\n            ...entry.state,\n            data: result.normalized.data,\n            error: null,\n            isLoading: false,\n            lastRequest: doneRequestLog,\n            lastResponse: result.response,\n            lastVariables: input.variables,\n            status: \"success\",\n            updatedAt: finishedAt,\n          },\n          \"mutation_updated\"\n        );\n      }\n\n      return result.normalized;\n    } catch (error) {\n      const wrapped =\n        typeof error === \"object\" && error !== null\n          ? (error as Record<string, unknown>)\n          : undefined;\n      const normalizedError = wrapped?.__athenaNormalizedError\n        ? (wrapped.__athenaNormalizedError as ReturnType<\n            typeof normalizeAthenaError\n          >)\n        : normalizeAthenaError(error);\n\n      const status =\n        typeof wrapped?.__athenaStatus === \"number\"\n          ? (wrapped.__athenaStatus as number)\n          : (normalizedError.status ?? 500);\n      const raw = wrapped?.__athenaRaw ?? normalizedError.raw ?? null;\n      const response = wrapped?.__athenaResponse ?? raw;\n\n      if (entry.activeRequestId === requestId) {\n        const finishedAt = Date.now();\n        const doneRequestLog: AthenaMutationRequestLog<TVariables> = {\n          ...startRequestLog,\n          attempt:\n            entry.state.lastRequest?.requestId === requestId\n              ? entry.state.lastRequest.attempt\n              : startRequestLog.attempt,\n          endedAt: finishedAt,\n        };\n\n        this.setState(\n          entry,\n          {\n            ...entry.state,\n            error: normalizedError,\n            isLoading: false,\n            lastRequest: doneRequestLog,\n            lastResponse: response,\n            lastVariables: input.variables,\n            status: \"error\",\n            updatedAt: finishedAt,\n          },\n          \"mutation_updated\"\n        );\n      }\n\n      return {\n        data: undefined,\n        error: normalizedError,\n        raw,\n        status,\n      };\n    }\n  }\n\n  private setState(\n    entry: MutationEntry,\n    state: AthenaMutationState<unknown, unknown>,\n    eventType: AthenaMutationEvent[\"type\"]\n  ): void {\n    entry.state = state;\n    for (const listener of entry.listeners) {\n      listener();\n    }\n\n    this.host.emitEvent({\n      key: entry.key,\n      state,\n      timestamp: Date.now(),\n      type: eventType,\n    });\n  }\n\n  private scheduleGc(entry: MutationEntry): void {\n    const gcTime = shouldUseMemoryCache(this.host.config)\n      ? Math.max(0, this.host.config.cache?.gcTime ?? 300_000)\n      : Math.max(0, this.host.config.cache?.gcTime ?? 0);\n\n    entry.gcTimer = setTimeout(() => {\n      const current = this.entries.get(entry.key);\n      if (!current || current.listeners.size > 0) {\n        return;\n      }\n      this.entries.delete(entry.key);\n    }, gcTime);\n  }\n}\n","import type {\n  AthenaCacheContextDescriptor,\n  AthenaExecutable,\n  AthenaQueryDescriptor,\n} from \"../query/descriptor.ts\";\nimport {\n  buildAthenaModelScopeKey,\n  isAthenaExecutable,\n  resolveAthenaQueryTarget,\n} from \"../query/descriptor.ts\";\nimport {\n  type AthenaNormalizedQueryPage,\n  extractResultRows,\n  isCollectionOperation,\n  mapResultRows,\n  mutationTouchesQueryMembership,\n  queryDependsOnRelationTarget,\n  removeResultRows,\n  sameCacheContext,\n  sameModelTarget,\n} from \"../query/entity-graph.ts\";\nimport type { AthenaEntityKey } from \"../query/model-identity.ts\";\nimport {\n  athenaEntityKeyToken,\n  createAthenaEntityKey,\n} from \"../query/model-identity.ts\";\nimport type { AthenaModelTarget } from \"../schema/types.ts\";\nimport {\n  EntityStore,\n  resolveModelRowKey,\n} from \"./query-client/entity-store.ts\";\nimport { QueryClientGraphIndex } from \"./query-client/graph-index.ts\";\nimport type { ExecuteMutationInput } from \"./query-client/mutation-store.ts\";\nimport { MutationStore } from \"./query-client/mutation-store.ts\";\nimport {\n  type ExecuteQueryInput,\n  type QueryEntry,\n  QueryStore,\n} from \"./query-client/query-store.ts\";\nimport type {\n  AthenaInvalidateQueriesFilters,\n  AthenaMutationDefaults,\n  AthenaQueryClientConfig,\n  AthenaQueryDefaults,\n  AthenaRuntimeEvent,\n  AthenaStateAdapter,\n  AthenaUnsubscribe,\n  QueryKey,\n} from \"./types.ts\";\nimport { matchesQueryKey, safeSerializeQueryKey } from \"./utils.ts\";\n\nexport interface AthenaCacheTransaction {\n  insert(queryKey: QueryKey, row: Record<string, unknown>): void;\n  remove(queryKey: QueryKey, id: unknown): void;\n  update(\n    model: AthenaModelTarget,\n    id: unknown,\n    updater:\n      | Record<string, unknown>\n      | ((\n        current: Record<string, unknown> | undefined,\n      ) => Record<string, unknown>),\n  ): void;\n}\n\nexport interface AthenaDehydratedCache {\n  entities: Array<{\n    data: Record<string, unknown>;\n    token: string;\n  }>;\n  queries: Array<{\n    data: unknown;\n    descriptor?: AthenaQueryDescriptor;\n    normalizedPage?: AthenaNormalizedQueryPage;\n    queryKey: QueryKey;\n    updatedAt?: number;\n  }>;\n}\n\nexport interface AthenaModelCache<TRow = Record<string, unknown>> {\n  get(id: unknown): TRow | undefined;\n  invalidate(): Promise<void>;\n  invalidateEntity(id: unknown): Promise<void>;\n  set(row: TRow): TRow;\n  update(\n    id: unknown,\n    updater: Partial<TRow> | ((current: TRow | undefined) => TRow),\n  ): TRow;\n}\n\nexport class AthenaQueryClient {\n  private readonly entities = new EntityStore();\n  private readonly graph = new QueryClientGraphIndex();\n  private readonly queries: QueryStore;\n  private readonly mutations: MutationStore;\n  private readonly eventSubscribers = new Set<\n    (event: AthenaRuntimeEvent) => void\n  >();\n  private readonly adapters = new Set<AthenaStateAdapter>();\n  private requestCounter = 0;\n\n  readonly config: AthenaQueryClientConfig;\n  readonly defaultQueryOptions: AthenaQueryDefaults;\n  readonly defaultMutationOptions: AthenaMutationDefaults;\n\n  constructor(config: AthenaQueryClientConfig = {}) {\n    this.config = {\n      cache: {\n        gcTime: config.cache?.gcTime,\n        mode: config.cache?.mode ?? \"none\",\n        staleTime: config.cache?.staleTime,\n      },\n      defaultMutationOptions: config.defaultMutationOptions,\n      defaultQueryOptions: config.defaultQueryOptions,\n    };\n    this.defaultQueryOptions = {\n      refetchOnMount: config.defaultQueryOptions?.refetchOnMount ?? true,\n      refetchOnReconnect:\n        config.defaultQueryOptions?.refetchOnReconnect ?? false,\n      refetchOnWindowFocus:\n        config.defaultQueryOptions?.refetchOnWindowFocus ?? false,\n      retry: config.defaultQueryOptions?.retry ?? 0,\n      retryDelay: config.defaultQueryOptions?.retryDelay,\n    };\n    this.defaultMutationOptions = {\n      retry: config.defaultMutationOptions?.retry ?? 0,\n      retryDelay: config.defaultMutationOptions?.retryDelay,\n    };\n    this.queries = new QueryStore({\n      config: this.config,\n      emitEvent: (event) => this.emitEvent(event),\n      entities: this.entities,\n      graph: this.graph,\n      nextRequestId: () => {\n        this.requestCounter += 1;\n        return this.requestCounter;\n      },\n    });\n    this.mutations = new MutationStore({\n      config: this.config,\n      emitEvent: (event) => this.emitEvent(event),\n      nextRequestId: () => {\n        this.requestCounter += 1;\n        return this.requestCounter;\n      },\n    });\n  }\n\n  getQueryKeyToken(queryKey: QueryKey): string {\n    return safeSerializeQueryKey(queryKey);\n  }\n\n  getQueryKey(query: QueryKey | AthenaExecutable<unknown>): QueryKey {\n    if (isAthenaExecutable(query)) {\n      return query.getDescriptor().queryKey;\n    }\n    return query;\n  }\n\n  getQueryData<TData = unknown>(queryKey: QueryKey): TData | undefined {\n    return this.queries.getQueryData(this.getQueryKeyToken(queryKey));\n  }\n\n  getNormalizedQueryPage(\n    queryKey: QueryKey,\n  ): AthenaNormalizedQueryPage | undefined {\n    return this.queries.getNormalizedPage(this.getQueryKeyToken(queryKey));\n  }\n\n  setQueryData<TData>(\n    queryKey: QueryKey,\n    updater: TData | ((previous: TData | undefined) => TData),\n  ): TData {\n    return this.queries.setQueryData(\n      queryKey,\n      this.getQueryKeyToken(queryKey),\n      updater,\n    );\n  }\n\n  async invalidateQueries(\n    filters: AthenaInvalidateQueriesFilters = {},\n  ): Promise<void> {\n    const exact = filters.exact === true;\n    const shouldRefetch = filters.refetch !== false;\n    const matched: QueryEntry[] = [];\n\n    for (const entry of this.queries.values()) {\n      if (entry.queryKey === undefined) {\n        continue;\n      }\n      if (\n        filters.queryKey === undefined ||\n        matchesQueryKey(entry.queryKey, filters.queryKey, exact)\n      ) {\n        matched.push(entry);\n      }\n    }\n\n    const refetches: Promise<unknown>[] = [];\n    for (const entry of matched) {\n      this.queries.setState(\n        entry,\n        {\n          ...entry.state,\n          updatedAt: undefined,\n        },\n        \"query_updated\",\n      );\n\n      if (\n        shouldRefetch &&\n        entry.listeners.size > 0 &&\n        entry.queryFn &&\n        entry.queryKey !== undefined\n      ) {\n        refetches.push(\n          this.queries.execute({\n            cacheMode: entry.cacheMode,\n            dedupe: true,\n            force: true,\n            queryFn: entry.queryFn,\n            queryKey: entry.queryKey,\n            queryKeyToken: entry.key,\n            retry: entry.retry,\n            retryDelay: entry.retryDelay,\n            select: entry.select,\n          }),\n        );\n      }\n    }\n\n    if (refetches.length > 0) {\n      await Promise.all(refetches);\n    }\n  }\n\n  async prefetch(executable: AthenaExecutable<unknown>): Promise<void> {\n    const descriptor = executable.getDescriptor();\n    await this.queries.execute({\n      cacheMode: \"memory\",\n      descriptor,\n      force: false,\n      model: executable.model,\n      queryFn: (context) => executable.execute(context),\n      queryKey: descriptor.queryKey,\n      queryKeyToken: this.getQueryKeyToken(descriptor.queryKey),\n    });\n  }\n\n  dehydrate(): AthenaDehydratedCache {\n    return {\n      entities: this.entities.dehydrate(),\n      queries: [...this.queries.values()]\n        .filter((entry) => entry.queryKey && entry.state.data !== undefined)\n        .map((entry) => ({\n          data: this.queries.materialize(entry),\n          descriptor: entry.descriptor,\n          normalizedPage: entry.normalizedPage,\n          queryKey: entry.queryKey as QueryKey,\n          updatedAt: entry.state.updatedAt,\n        })),\n    };\n  }\n\n  hydrate(state: AthenaDehydratedCache): void {\n    this.entities.ingestDehydrated(state.entities);\n    for (const query of state.queries) {\n      const token = this.getQueryKeyToken(query.queryKey);\n      const entry = this.queries.ensure(token);\n      entry.queryKey = query.queryKey;\n      entry.descriptor = query.descriptor;\n      entry.normalizedPage = query.normalizedPage;\n      if (query.descriptor) {\n        this.graph.indexQuery(token, query.descriptor);\n      }\n      if (query.normalizedPage) {\n        for (const entityToken of query.normalizedPage.entities) {\n          this.graph.indexEntity(token, entityToken);\n        }\n      }\n      this.queries.setState(\n        entry,\n        {\n          ...entry.state,\n          data: query.data,\n          error: null,\n          status: \"success\",\n          updatedAt: query.updatedAt ?? Date.now(),\n        },\n        \"query_updated\",\n      );\n    }\n  }\n\n  mutateCache(work: (cache: AthenaCacheTransaction) => void): () => void {\n    const snapshot = this.dehydrate();\n    work(this.createTransactionHandle());\n    return () => {\n      this.hydrate(snapshot);\n    };\n  }\n\n  async transaction<T>(\n    work: (cache: AthenaCacheTransaction) => Promise<T> | T,\n  ): Promise<T> {\n    const snapshot = {\n      entities: this.entities.snapshot(),\n      queries: this.queries.snapshot(),\n    };\n    try {\n      return await work(this.createTransactionHandle());\n    } catch (error) {\n      this.entities.restore(snapshot.entities);\n      this.queries.restoreSnapshot(snapshot.queries);\n      throw error;\n    }\n  }\n\n  getEntity<TRow = Record<string, unknown>>(\n    key: AthenaEntityKey,\n  ): TRow | undefined {\n    return this.entities.get<TRow>(key);\n  }\n\n  reconcileExecutable(\n    descriptor: AthenaQueryDescriptor,\n    result: unknown,\n    model?: AthenaModelTarget,\n  ): void {\n    const resolvedModel = model;\n    const rows = extractResultRows(result);\n    if (descriptor.operation === \"delete\") {\n      this.reconcileDelete(descriptor, rows, resolvedModel);\n      return;\n    }\n    if (resolvedModel && descriptor.projection?.kind !== \"partial-model\") {\n      for (const row of rows) {\n        try {\n          const key = createAthenaEntityKey(\n            resolvedModel,\n            row,\n            descriptor.context,\n          );\n          this.writeEntity(key, row, {\n            changedFields: descriptor.changedFields,\n            mutation: descriptor,\n          });\n        } catch {\n          // Row is not identity-complete; skip graph write.\n        }\n      }\n    }\n    if (\n      descriptor.operation === \"insert\" ||\n      descriptor.operation === \"upsert\"\n    ) {\n      void this.invalidateQueries({\n        queryKey: descriptor.modelScopeKey,\n        refetch: true,\n      });\n    }\n  }\n\n  forModel<TRow = Record<string, unknown>>(\n    model: AthenaModelTarget,\n    context?: AthenaCacheContextDescriptor,\n  ): AthenaModelCache<TRow> {\n    const target = resolveAthenaQueryTarget(\n      model.meta.tableName ?? model.meta.model ?? \"\",\n      model,\n    );\n    const modelScopeKey = buildAthenaModelScopeKey(target, context);\n    return {\n      get: (id: unknown) => {\n        const key = resolveModelRowKey(model, id, context);\n        return this.getEntity<TRow>(key);\n      },\n      invalidate: () => this.invalidateQueries({ queryKey: modelScopeKey }),\n      invalidateEntity: async (id: unknown) => {\n        const key = resolveModelRowKey(model, id, context);\n        this.removeEntity(key);\n        await this.invalidateQueries({ queryKey: modelScopeKey });\n      },\n      set: (row: TRow) => {\n        const key = createAthenaEntityKey(model, row, context);\n        this.writeEntity(key, row as Record<string, unknown>, {\n          changedFields: Object.keys(row as object),\n        });\n        return (this.getEntity<TRow>(key) ?? row) as TRow;\n      },\n      update: (id, updater) => {\n        const key = resolveModelRowKey(model, id, context);\n        const current = this.getEntity<TRow>(key);\n        const next =\n          typeof updater === \"function\"\n            ? (updater as (value: TRow | undefined) => TRow)(current)\n            : ({ ...(current ?? {}), ...(updater as object) } as TRow);\n        const identityRow =\n          typeof id === \"object\" && id !== null\n            ? id\n            : { [model.meta.primaryKey[0] as string]: id };\n        const merged = {\n          ...(identityRow as object),\n          ...(current as object | undefined),\n          ...(next as object),\n        } as TRow;\n        this.writeEntity(\n          createAthenaEntityKey(model, merged, context),\n          merged as Record<string, unknown>,\n          {\n            changedFields:\n              typeof updater === \"function\"\n                ? Object.keys(next as object)\n                : Object.keys(updater as object),\n          },\n        );\n        return (this.getEntity<TRow>(key) ?? merged) as TRow;\n      },\n    };\n  }\n\n  getMutationKeyToken(mutationKey?: QueryKey): string {\n    return this.mutations.token(mutationKey);\n  }\n\n  getQueryState<TData = unknown>(key: string) {\n    return this.queries.getState<TData>(key);\n  }\n\n  getMutationState<TVariables = unknown, TData = unknown>(key: string) {\n    return this.mutations.getState<TVariables, TData>(key);\n  }\n\n  subscribeQuery(key: string, listener: () => void): AthenaUnsubscribe {\n    return this.queries.subscribe(key, listener);\n  }\n\n  subscribeMutation(key: string, listener: () => void): AthenaUnsubscribe {\n    return this.mutations.subscribe(key, listener);\n  }\n\n  subscribeEvents(\n    listener: (event: AthenaRuntimeEvent) => void,\n  ): AthenaUnsubscribe {\n    this.eventSubscribers.add(listener);\n    return () => {\n      this.eventSubscribers.delete(listener);\n    };\n  }\n\n  attachAdapter(adapter: AthenaStateAdapter): AthenaUnsubscribe {\n    this.adapters.add(adapter);\n    return () => {\n      this.adapters.delete(adapter);\n    };\n  }\n\n  resetQuery(queryKey: QueryKey): void {\n    this.queries.reset(this.getQueryKeyToken(queryKey));\n  }\n\n  resetMutation(mutationKey?: QueryKey): void {\n    this.mutations.reset(mutationKey);\n  }\n\n  executeQuery<TQueryFnData, TData = TQueryFnData>(\n    input: ExecuteQueryInput<TQueryFnData, TData>,\n  ) {\n    return this.queries.execute(input);\n  }\n\n  executeMutation<TVariables, TMutationFnData, TData = TMutationFnData>(\n    input: ExecuteMutationInput<TVariables, TMutationFnData, TData>,\n  ) {\n    return this.mutations.execute(input);\n  }\n\n  private writeEntity(\n    key: AthenaEntityKey,\n    row: Record<string, unknown>,\n    options?: {\n      changedFields?: readonly string[];\n      mutation?: AthenaQueryDescriptor;\n    },\n  ): void {\n    this.entities.merge(key, row);\n    const token = athenaEntityKeyToken(key);\n    const changedFields = options?.changedFields ?? Object.keys(row);\n    const affected = this.collectAffectedQueryEntries(\n      key,\n      changedFields,\n      options?.mutation,\n    );\n\n    for (const entry of affected) {\n      if (!(entry.descriptor && entry.queryKey)) {\n        continue;\n      }\n      if (options?.mutation) {\n        if (\n          !sameCacheContext(entry.descriptor.context, options.mutation.context)\n        ) {\n          continue;\n        }\n        if (queryDependsOnRelationTarget(entry.descriptor, options.mutation)) {\n          void this.invalidateQueries({\n            exact: true,\n            queryKey: entry.queryKey,\n          });\n          continue;\n        }\n        if (!sameModelTarget(entry.descriptor, options.mutation)) {\n          continue;\n        }\n        if (\n          isCollectionOperation(entry.descriptor.operation) &&\n          mutationTouchesQueryMembership(entry.descriptor, changedFields)\n        ) {\n          void this.invalidateQueries({\n            exact: true,\n            queryKey: entry.queryKey,\n          });\n          continue;\n        }\n      } else if (\n        entry.descriptor.target.table === key.model.table &&\n        (entry.descriptor.target.schema ?? \"\") === (key.model.schema ?? \"\") &&\n        isCollectionOperation(entry.descriptor.operation) &&\n        mutationTouchesQueryMembership(entry.descriptor, changedFields)\n      ) {\n        void this.invalidateQueries({\n          exact: true,\n          queryKey: entry.queryKey,\n        });\n        continue;\n      }\n\n      if (\n        entry.entityRefs?.includes(token) ||\n        this.resultContainsEntity(entry, key)\n      ) {\n        this.patchQueryEntryEntity(entry, key);\n      }\n    }\n  }\n\n  private patchQueryEntryEntity(entry: QueryEntry, key: AthenaEntityKey): void {\n    if (!entry.queryKey || entry.state.data === undefined) {\n      return;\n    }\n    if (entry.normalizedPage) {\n      const next = this.queries.materialize(entry);\n      this.queries.setState(\n        entry,\n        {\n          ...entry.state,\n          data: next,\n          updatedAt: Date.now(),\n        },\n        \"query_updated\",\n      );\n      return;\n    }\n    const token = athenaEntityKeyToken(key);\n    const entity = this.entities.getByToken(token);\n    if (!entity) {\n      return;\n    }\n    const next = mapResultRows(entry.state.data, (row) => {\n      try {\n        if (!entry.model) {\n          return row;\n        }\n        const rowKey = createAthenaEntityKey(\n          entry.model,\n          row,\n          entry.descriptor?.context,\n        );\n        return athenaEntityKeyToken(rowKey) === token\n          ? { ...entity.data }\n          : row;\n      } catch {\n        return row;\n      }\n    });\n    this.setQueryData(entry.queryKey, next);\n  }\n\n  private resultContainsEntity(\n    entry: QueryEntry,\n    key: AthenaEntityKey,\n  ): boolean {\n    if (!entry.model || entry.state.data === undefined) {\n      return false;\n    }\n    const token = athenaEntityKeyToken(key);\n    return extractResultRows(entry.state.data).some((row) => {\n      try {\n        return (\n          athenaEntityKeyToken(\n            createAthenaEntityKey(\n              entry.model as AthenaModelTarget,\n              row,\n              entry.descriptor?.context,\n            ),\n          ) === token\n        );\n      } catch {\n        return false;\n      }\n    });\n  }\n\n  private removeEntity(key: AthenaEntityKey): void {\n    const token = athenaEntityKeyToken(key);\n    this.entities.delete(key);\n    for (const entry of [...this.queries.values()]) {\n      if (!entry.queryKey) {\n        continue;\n      }\n      if (\n        !(\n          entry.entityRefs?.includes(token) ||\n          this.resultContainsEntity(entry, key)\n        )\n      ) {\n        continue;\n      }\n      const next = removeResultRows(entry.state.data, (row) => {\n        try {\n          if (!entry.model) {\n            return false;\n          }\n          return (\n            athenaEntityKeyToken(\n              createAthenaEntityKey(\n                entry.model,\n                row,\n                entry.descriptor?.context,\n              ),\n            ) === token\n          );\n        } catch {\n          return false;\n        }\n      });\n      entry.entityRefs = entry.entityRefs?.filter((ref) => ref !== token);\n      this.setQueryData(entry.queryKey, next);\n    }\n  }\n\n  private reconcileDelete(\n    descriptor: AthenaQueryDescriptor,\n    rows: Record<string, unknown>[],\n    model?: AthenaModelTarget,\n  ): void {\n    if (model) {\n      for (const row of rows) {\n        try {\n          this.removeEntity(\n            createAthenaEntityKey(model, row, descriptor.context),\n          );\n        } catch {\n          // Incomplete identity; skip.\n        }\n      }\n      if (rows.length === 0) {\n        const identity = identityRowFromFilters(descriptor, model);\n        if (identity) {\n          try {\n            this.removeEntity(\n              createAthenaEntityKey(model, identity, descriptor.context),\n            );\n          } catch {\n            // Incomplete identity; skip.\n          }\n        }\n      }\n    }\n    void this.invalidateQueries({ queryKey: descriptor.modelScopeKey });\n  }\n\n  private collectAffectedQueryEntries(\n    key: AthenaEntityKey,\n    changedFields: readonly string[],\n    mutation?: AthenaQueryDescriptor,\n  ): QueryEntry[] {\n    const ids = this.graph.collectAffectedQueryIds(\n      key,\n      changedFields,\n      mutation,\n    );\n    const entries: QueryEntry[] = [];\n    for (const id of ids) {\n      const entry = this.queries.get(id);\n      if (entry) {\n        entries.push(entry);\n      }\n    }\n    if (entries.length === 0) {\n      return [...this.queries.values()];\n    }\n    return entries;\n  }\n\n  private createTransactionHandle(): AthenaCacheTransaction {\n    return {\n      insert: (queryKey, row) => {\n        const current = this.getQueryData(queryKey);\n        const rows = extractResultRows(current);\n        this.setQueryData(\n          queryKey,\n          Array.isArray(current)\n            ? [...rows, row]\n            : {\n              ...(isPlainResult(current) ? current : {}),\n              data: [...rows, row],\n            },\n        );\n      },\n      remove: (queryKey, id) => {\n        const current = this.getQueryData(queryKey);\n        const next = removeResultRows(current, (row) =>\n          Object.values(row).some((value) => value === id),\n        );\n        this.setQueryData(queryKey, next);\n      },\n      update: (model, id, updater) => {\n        this.forModel(model).update(id, updater as never);\n      },\n    };\n  }\n\n  private emitEvent(event: AthenaRuntimeEvent): void {\n    for (const listener of this.eventSubscribers) {\n      listener(event);\n    }\n\n    for (const adapter of this.adapters) {\n      adapter.onEvent?.(event);\n      if (\n        event.type === \"query_updated\" ||\n        event.type === \"query_reset\" ||\n        event.type === \"query_gc\"\n      ) {\n        adapter.onQueryUpdated?.(event);\n      }\n      if (\n        event.type === \"mutation_updated\" ||\n        event.type === \"mutation_reset\"\n      ) {\n        adapter.onMutationUpdated?.(event);\n      }\n    }\n  }\n}\n\nexport function createAthenaQueryClient(\n  config?: AthenaQueryClientConfig,\n): AthenaQueryClient {\n  return new AthenaQueryClient(config);\n}\n\nfunction isPlainResult(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction identityRowFromFilters(\n  descriptor: AthenaQueryDescriptor,\n  model: AthenaModelTarget,\n): Record<string, unknown> | undefined {\n  const row: Record<string, unknown> = {};\n  for (const column of model.meta.primaryKey) {\n    const filter = descriptor.filters?.find(\n      (entry) => entry.column === column && entry.operator === \"eq\",\n    );\n    if (!filter) {\n      return;\n    }\n    row[column] = filter.value;\n  }\n  return row;\n}\n\nexport function attachStateAdapter(\n  client: AthenaQueryClient,\n  adapter: AthenaStateAdapter,\n): AthenaUnsubscribe {\n  return client.attachAdapter(adapter);\n}\n","/**\n * Root-client internals. Frozen public clients cannot grow properties.\n * Request views from withContext do not share this map — pass the root.\n */\n\nimport type { AthenaBillingRuntimeDispatch } from \"../billing/runtime/dispatch.ts\";\nimport type {\n\tAthenaBillingDiagnostics,\n\tAthenaBillingInspectedConnection,\n} from \"../billing/runtime/diagnostics.ts\";\nimport type { BillingProviderRegistry } from \"../billing/runtime/local/providers/registry.ts\";\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport type { StorageRuntime } from \"../storage/runtime/types.ts\";\nimport type { AthenaClientConfig } from \"../v3-client-core.ts\";\nimport type { AthenaRuntimeAuthSessionStore } from \"./data/principal.ts\";\nimport {\n\tATHENA_CLIENT_INTERNAL_PROTOCOL,\n\ttype AthenaClientLifecycle,\n\ttype AthenaClientOwnership,\n\ttype AthenaRuntimeDiagnostics,\n\tAthenaRuntimeOwnershipError,\n\ttype AthenaRuntimeResourceOwnership,\n\tcreateAthenaClientLifecycle,\n\tdescribeAthenaRuntime,\n} from \"./ownership.ts\";\nimport type { AthenaRuntimeReadiness } from \"./readiness/index.ts\";\nimport type { ResolvedAthenaRuntime } from \"./resolve.ts\";\n\nexport const ATHENA_HANDLER_ROOT_CLIENT_REQUIRED_MESSAGE = [\n\t\"createAthenaNextHandlers({ client }) requires the process-wide Athena root.\",\n\t\"\",\n\t\"Received a request-scoped Athena client created by withContext() or\",\n\t\"createAthenaServerClient({ client }).\",\n\t\"\",\n\t\"Next.js local runtime pattern:\",\n\t\"\",\n\t'  const root = createClient({ databaseUrl, auth: { mode: \"local\" } });',\n\t\"\",\n\t\"Pass `root` directly to createAthenaNextHandlers().\",\n\t\"\",\n\t\"Use request-scoped clients only for application queries.\",\n].join(\"\\n\");\n\nexport const ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH_MESSAGE = [\n\t\"This object is not an Athena root from this package instance.\",\n\t\"\",\n\t\"Typical causes:\",\n\t\"  - a request view (withContext / createAthenaServerClient)\",\n\t\"  - a client created by another copy of @xylex-group/athena\",\n\t\"  - a mocked object without root internals\",\n\t\"\",\n\t\"Install one Athena version and pass the process-wide createClient() root.\",\n].join(\"\\n\");\n\nexport interface AthenaClientAuthRuntime {\n\tclose(): Promise<void>;\n\tgetStores(): Promise<unknown>;\n}\n\nexport interface AthenaClientOwnedRuntime {\n\tclose(): Promise<void>;\n\tgetPool(): Promise<unknown>;\n\treadonly ownership: \"owned\" | \"borrowed\";\n}\n\nexport interface AthenaClientInternals {\n\tauthRuntime?: AthenaClientAuthRuntime;\n\tbillingDiagnostics?: AthenaBillingDiagnostics;\n\tbillingMaterializedConnections?: readonly AthenaBillingInspectedConnection[];\n\tbillingProviderRegistry?: BillingProviderRegistry;\n\tbillingReady?: Promise<void>;\n\tbillingBootstrapEvents?: string[];\n\tbillingRuntime?: AthenaBillingRuntimeDispatch;\n\tclose?: () => Promise<void>;\n\tconfig: AthenaClientConfig;\n\teventIngressRuntime?: unknown;\n\tgatewayTransport?: AthenaGatewayClient;\n\tgetAuthStores?: () => Promise<AthenaRuntimeAuthSessionStore>;\n\tinternalProtocolVersion: number;\n\tlifecycle: AthenaClientLifecycle;\n\townership: AthenaClientOwnership;\n\tparent?: object;\n\tplan: ResolvedAthenaRuntime;\n\tpostgresRuntime?: AthenaClientOwnedRuntime;\n\truntimeOwnership: AthenaRuntimeResourceOwnership;\n\truntimeReadiness?: AthenaRuntimeReadiness;\n\tsdkVersion: string;\n\t/**\n\t * @deprecated Use `ownership`. Kept in sync for older internals readers.\n\t */\n\tsource?: AthenaClientOwnership;\n\tstorageRuntime?: StorageRuntime;\n}\n\nconst ROOT_INTERNALS = Symbol.for(\"@xylex-group/athena.clientInternals\");\nconst ROOT_INTERNALS_MAP = Symbol.for(\"@xylex-group/athena.clientInternalsMap\");\n\nfunction internalsByClient(): WeakMap<object, AthenaClientInternals> {\n\tconst holder = globalThis as typeof globalThis & {\n\t\t[ROOT_INTERNALS_MAP]?: WeakMap<object, AthenaClientInternals>;\n\t};\n\tholder[ROOT_INTERNALS_MAP] ??= new WeakMap();\n\treturn holder[ROOT_INTERNALS_MAP];\n}\n\ntype ClientWithInternals = object & {\n\t[ROOT_INTERNALS]?: AthenaClientInternals;\n};\n\nexport function attachAthenaClientInternals(\n\tclient: object,\n\tinternals: AthenaClientInternals,\n): void {\n\tinternalsByClient().set(client, internals);\n\ttry {\n\t\tObject.defineProperty(client, ROOT_INTERNALS, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: internals,\n\t\t\twritable: false,\n\t\t});\n\t} catch {\n\t\t// Frozen clients keep the WeakMap entry only.\n\t}\n}\n\nexport function getAthenaClientInternals(\n\tclient: object,\n): AthenaClientInternals | undefined {\n\treturn (\n\t\tinternalsByClient().get(client) ??\n\t\t(client as ClientWithInternals)[ROOT_INTERNALS]\n\t);\n}\n\nexport function createRootClientInternals(\n\tpartial: Omit<\n\t\tAthenaClientInternals,\n\t\t| \"internalProtocolVersion\"\n\t\t| \"lifecycle\"\n\t\t| \"ownership\"\n\t\t| \"runtimeOwnership\"\n\t\t| \"sdkVersion\"\n\t\t| \"source\"\n\t> & {\n\t\tlifecycle?: AthenaClientLifecycle;\n\t\truntimeOwnership?: AthenaRuntimeResourceOwnership;\n\t},\n): AthenaClientInternals {\n\tconst lifecycle = partial.lifecycle ?? createAthenaClientLifecycle();\n\treturn {\n\t\t...partial,\n\t\tinternalProtocolVersion: ATHENA_CLIENT_INTERNAL_PROTOCOL,\n\t\tlifecycle,\n\t\townership: \"root\",\n\t\truntimeOwnership: partial.runtimeOwnership ?? \"owned\",\n\t\tsdkVersion: PACKAGE_VERSION,\n\t\tsource: \"root\",\n\t};\n}\n\nexport function createViewClientInternals(\n\tparent: object,\n\trootInternals: AthenaClientInternals,\n): AthenaClientInternals {\n\trootInternals.lifecycle.requestViewsCreated += 1;\n\treturn {\n\t\t...rootInternals,\n\t\tclose: undefined,\n\t\townership: \"request\",\n\t\tparent,\n\t\truntimeOwnership: \"borrowed\",\n\t\tsource: \"request\",\n\t};\n}\n\nexport function isAthenaRequestRuntime(\n\tinternals: AthenaClientInternals | undefined,\n): boolean {\n\tif (!internals) {\n\t\treturn false;\n\t}\n\treturn internals.ownership === \"request\" || internals.source === \"request\";\n}\n\nexport function throwAthenaRuntimeOwnershipInvalid(caller: string): never {\n\tthrow new AthenaRuntimeOwnershipError({\n\t\tcaller,\n\t\tcode: \"ATHENA_RUNTIME_OWNERSHIP_INVALID\",\n\t\tmessage: `${caller} requires the process-wide Athena root.\\n\\n${ATHENA_HANDLER_ROOT_CLIENT_REQUIRED_MESSAGE}`,\n\t\treceived: \"request-view\",\n\t});\n}\n\nexport function requireAthenaRootClientInternals(\n\tclient: object,\n\tcaller: string,\n): AthenaClientInternals {\n\tconst internals = getAthenaClientInternals(client);\n\tif (!internals) {\n\t\tthrow new AthenaRuntimeOwnershipError({\n\t\t\tcaller,\n\t\t\tcode: \"ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH\",\n\t\t\tmessage: `${caller} requires the process-wide Athena root.\\n\\n${ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH_MESSAGE}`,\n\t\t\treceived: \"foreign-runtime\",\n\t\t});\n\t}\n\tif (internals.internalProtocolVersion !== ATHENA_CLIENT_INTERNAL_PROTOCOL) {\n\t\tthrow new AthenaRuntimeOwnershipError({\n\t\t\tcaller,\n\t\t\tcode: \"ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH\",\n\t\t\tmessage: `${caller} received an Athena client from an incompatible runtime protocol (${String(internals.internalProtocolVersion)} ≠ ${String(ATHENA_CLIENT_INTERNAL_PROTOCOL)}).`,\n\t\t\treceived: \"foreign-runtime\",\n\t\t});\n\t}\n\tif (!isAthenaRequestRuntime(internals)) {\n\t\treturn internals;\n\t}\n\tthrowAthenaRuntimeOwnershipInvalid(caller);\n}\n\n/** Bind request-view Auth so migrate exists but cannot own the root executor. */\nexport function attachRequestAuthLifecycleGuards(\n\tview: object,\n\tparent: object,\n): void {\n\tconst parentServer = (\n\t\tparent as {\n\t\t\tauth?: {\n\t\t\t\tserver?: {\n\t\t\t\t\thandle?: (request: Request) => Promise<Response>;\n\t\t\t\t\thandlers?: unknown;\n\t\t\t\t\tmigrate?: () => Promise<void>;\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\t).auth?.server;\n\tif (!parentServer) {\n\t\treturn;\n\t}\n\tconst viewAuth = (view as { auth?: object }).auth;\n\tif (!viewAuth) {\n\t\treturn;\n\t}\n\tObject.assign(viewAuth, {\n\t\tserver: {\n\t\t\thandle: parentServer.handle,\n\t\t\thandlers: parentServer.handlers,\n\t\t\tmigrate: async () => {\n\t\t\t\tthrowAthenaRuntimeOwnershipInvalid(\"auth.server.migrate\");\n\t\t\t},\n\t\t},\n\t});\n}\n\n/** Test/debug helper — not a product observability API. Root-only. */\nexport function getAthenaRuntimeDiagnostics(\n\tclient: object,\n): AthenaRuntimeDiagnostics | undefined {\n\tconst internals = getAthenaClientInternals(client);\n\tif (!internals) {\n\t\treturn undefined;\n\t}\n\tif (isAthenaRequestRuntime(internals)) {\n\t\tthrowAthenaRuntimeOwnershipInvalid(\"getAthenaRuntimeDiagnostics\");\n\t}\n\treturn describeAthenaRuntime(\n\t\tinternals.ownership,\n\t\tinternals.runtimeOwnership,\n\t\tinternals.lifecycle,\n\t);\n}\n\nexport type {\n\tAthenaClientLifecycle,\n\tAthenaClientOwnership,\n\tAthenaRequestRuntime,\n\tAthenaRootRuntime,\n\tAthenaRuntimeDiagnostics,\n\tAthenaRuntimeResourceOwnership,\n} from \"./ownership.ts\";\nexport {\n\tATHENA_CLIENT_INTERNAL_PROTOCOL,\n\tAthenaRuntimeOwnershipError,\n\tcreateAthenaClientLifecycle,\n} from \"./ownership.ts\";\n","import { AthenaConfigurationError } from \"../../../config/errors.ts\";\n\nexport const ATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED =\n\t\"ATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED\" as const;\n\ntype LifecycleConfigBag = {\n\td1?: unknown;\n\tdatabaseUrl?: string | null;\n\tdb?: { d1?: unknown; pgUri?: string | null };\n\tgatewayTransport?: unknown;\n\tlifecycle?: { data?: Record<string, unknown> };\n};\n\nfunction hasLocalMutationRuntime(config: LifecycleConfigBag): boolean {\n\tif (config.db?.d1 !== undefined && config.db.d1 !== null) {\n\t\treturn true;\n\t}\n\tif (config.d1 !== undefined && config.d1 !== null) {\n\t\treturn true;\n\t}\n\tif (typeof config.db?.pgUri === \"string\" && config.db.pgUri.trim()) {\n\t\treturn true;\n\t}\n\tif (typeof config.databaseUrl === \"string\" && config.databaseUrl.trim()) {\n\t\treturn true;\n\t}\n\tif (config.gatewayTransport) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport function assertDataLifecycleTransactionsUnsupported(): never {\n\tthrow new AthenaConfigurationError(\n\t\tATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED,\n\t\t\"Data lifecycle does not own a transaction-owning nucleus. Interactive transactions are unsupported until one exists.\",\n\t\t\"db\",\n\t);\n}\n\nexport function assertDataLifecycleConfig(config: LifecycleConfigBag): void {\n\tconst data = config.lifecycle?.data;\n\tif (!data) {\n\t\treturn;\n\t}\n\tif (\"afterCommit\" in data && data.afterCommit != null) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_DATA_LIFECYCLE_AFTER_COMMIT_UNSUPPORTED\",\n\t\t\t\"afterCommit is reserved until a transaction-owning data nucleus exists. It is not an alias of afterUpdate.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n\tif (!hasLocalMutationRuntime(config)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_DATA_LIFECYCLE_REQUIRES_LOCAL_RUNTIME\",\n\t\t\t\"createClient({ lifecycle: { data } }) requires a mutation-owning local runtime (db.pgUri, databaseUrl, or db.d1). Remote/browser clients cannot register data lifecycle hooks.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n}\n","import {\n\tATHENA_STORAGE_PROVIDER,\n\tATHENA_STORAGE_RUNTIME,\n\ttype StorageObjectProvider,\n\ttype StorageRuntime,\n} from \"./types.ts\";\n\nexport function getStorageProvider(\n\tstorage: unknown,\n): StorageObjectProvider | undefined {\n\tif (!storage || typeof storage !== \"object\") {\n\t\treturn undefined;\n\t}\n\treturn (storage as { [ATHENA_STORAGE_PROVIDER]?: StorageObjectProvider })[\n\t\tATHENA_STORAGE_PROVIDER\n\t];\n}\n\nexport function bindStorageProvider<TStorage extends object>(\n\tstorage: TStorage,\n\tprovider: StorageObjectProvider,\n): TStorage & { [ATHENA_STORAGE_PROVIDER]: StorageObjectProvider } {\n\treturn {\n\t\t...storage,\n\t\t[ATHENA_STORAGE_PROVIDER]: provider,\n\t};\n}\n\nexport function getStorageRuntime(\n\tstorage: unknown,\n): StorageRuntime | undefined {\n\tif (!storage || typeof storage !== \"object\") {\n\t\treturn undefined;\n\t}\n\treturn (storage as { [ATHENA_STORAGE_RUNTIME]?: StorageRuntime })[\n\t\tATHENA_STORAGE_RUNTIME\n\t];\n}\n\nexport function bindStorageRuntime<TStorage extends object>(\n\tstorage: TStorage,\n\truntime: StorageRuntime,\n): TStorage & { [ATHENA_STORAGE_RUNTIME]: StorageRuntime } {\n\treturn {\n\t\t...storage,\n\t\t[ATHENA_STORAGE_RUNTIME]: runtime,\n\t};\n}\n","export const ATHENA_STORAGE_BYTES_KIND = \"athena.storage.bytes\" as const;\n\nexport type AthenaStorageBytesEncoding = \"base64\";\n\nexport interface AthenaStorageBytesEnvelope {\n\tbytes: string;\n\tencoding: AthenaStorageBytesEncoding;\n\tkind: typeof ATHENA_STORAGE_BYTES_KIND;\n}\n\nexport function isAthenaStorageBytesEnvelope(\n\tvalue: unknown,\n): value is AthenaStorageBytesEnvelope {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst record = value as Record<string, unknown>;\n\treturn (\n\t\trecord.kind === ATHENA_STORAGE_BYTES_KIND &&\n\t\trecord.encoding === \"base64\" &&\n\t\ttypeof record.bytes === \"string\"\n\t);\n}\n\nexport function encodeAthenaStorageBytes(\n\tbytes: Uint8Array,\n): AthenaStorageBytesEnvelope {\n\treturn {\n\t\tbytes: bytesToBase64(bytes),\n\t\tencoding: \"base64\",\n\t\tkind: ATHENA_STORAGE_BYTES_KIND,\n\t};\n}\n\nexport function decodeAthenaStorageBytes(value: unknown): Uint8Array | undefined {\n\tif (value instanceof Uint8Array) {\n\t\treturn value;\n\t}\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\tif (!isAthenaStorageBytesEnvelope(value)) {\n\t\treturn undefined;\n\t}\n\treturn base64ToBytes(value.bytes);\n}\n\nexport function decodeAthenaStorageRequestBody(\n\tvalue: unknown,\n): Uint8Array | undefined {\n\tconst decoded = decodeAthenaStorageBytes(value);\n\tif (decoded) {\n\t\treturn decoded;\n\t}\n\tif (typeof value !== \"string\" || !value) {\n\t\treturn undefined;\n\t}\n\treturn base64ToBytes(value);\n}\n\nexport function serializeAthenaStorageData(data: unknown): unknown {\n\tif (data instanceof Uint8Array) {\n\t\treturn encodeAthenaStorageBytes(data);\n\t}\n\tif (data instanceof ArrayBuffer) {\n\t\treturn encodeAthenaStorageBytes(new Uint8Array(data));\n\t}\n\tif (isAthenaStorageBytesEnvelope(data)) {\n\t\treturn data;\n\t}\n\tif (Array.isArray(data)) {\n\t\treturn data.map(serializeAthenaStorageData);\n\t}\n\tif (data && typeof data === \"object\") {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [key, entry] of Object.entries(data as Record<string, unknown>)) {\n\t\t\tout[key] = serializeAthenaStorageData(entry);\n\t\t}\n\t\treturn out;\n\t}\n\treturn data;\n}\n\nexport function reviveAthenaStorageData(data: unknown): unknown {\n\tconst bytes = decodeAthenaStorageBytes(data);\n\tif (bytes) {\n\t\treturn bytes;\n\t}\n\tif (Array.isArray(data)) {\n\t\treturn data.map(reviveAthenaStorageData);\n\t}\n\tif (data && typeof data === \"object\") {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [key, entry] of Object.entries(data as Record<string, unknown>)) {\n\t\t\tout[key] = reviveAthenaStorageData(entry);\n\t\t}\n\t\treturn out;\n\t}\n\treturn data;\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary);\n}\n\nfunction base64ToBytes(encoded: string): Uint8Array {\n\tconst binary = atob(encoded);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let index = 0; index < binary.length; index++) {\n\t\tbytes[index] = binary.charCodeAt(index);\n\t}\n\treturn bytes;\n}\n","import type { AthenaRuntimeDiscoveryEndpoints } from \"../../gateway/discovery-types.ts\";\nimport { DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT } from \"../../runtime/data/discovery-document.ts\";\nimport { createAthenaHttpTransportIR } from \"../../runtime/transport/http.ts\";\nimport { executeAthenaHttpTransport } from \"../../runtime/transport/http/client.ts\";\nimport type { AthenaHttpTransportIR } from \"../../runtime/transport/http/ir.ts\";\nimport type { AthenaRuntimeTopologyIR } from \"../../runtime/transport/topology.ts\";\nimport {\n\tencodeAthenaStorageBytes,\n\treviveAthenaStorageData,\n} from \"./bytes-envelope.ts\";\nimport {\n\tAthenaStorageAuthorizationError,\n\tstorageErrorResult,\n\tstorageOkResult,\n} from \"./errors.ts\";\nimport {\n\tisStorageObjectOp,\n\ttype AuthorizedStorageOperation,\n\ttype StorageObjectOp,\n\ttype StorageObjectProvider,\n} from \"./types.ts\";\n\n\n/** Resolve the browser storage endpoint.\n * \n * @param endpoints - The endpoints to resolve.\n * @returns The resolved endpoint.\n */\nexport function resolveBrowserStorageEndpoint(\n\tendpoints?:\n\t\t| Pick<AthenaRuntimeDiscoveryEndpoints, \"storage\">\n\t\t| { storage?: string },\n): string {\n\tconst advertised = endpoints?.storage?.trim();\n\treturn advertised || DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT;\n}\n\n\n/** Create an embedded storage facade.\n * \n * @returns The embedded storage facade.\n */\nexport function createEmbeddedStorageFacade(): {\n\tfile: {\n\t\tdelete: (input: unknown) => Promise<unknown>;\n\t\tget: (input: unknown) => Promise<unknown>;\n\t\thead: (input: unknown) => Promise<unknown>;\n\t\tlist: (input?: unknown) => Promise<unknown>;\n\t\tupload: (input: unknown) => Promise<unknown>;\n\t};\n} {\n\tconst unused = (): Promise<unknown> =>\n\t\tPromise.reject(\n\t\t\tnew Error(\n\t\t\t\t\"Athena embedded storage facade must be wrapped by StorageRuntime\",\n\t\t\t),\n\t\t);\n\treturn {\n\t\tfile: {\n\t\t\tdelete: unused,\n\t\t\tget: unused,\n\t\t\thead: unused,\n\t\t\tlist: unused,\n\t\t\tupload: unused,\n\t\t},\n\t};\n}\n\nfunction asExecutorTransport(\n\tir: ReturnType<typeof createAthenaHttpTransportIR>,\n): AthenaHttpTransportIR {\n\treturn {\n\t\tbasePath: ir.basePath,\n\t\tcredentials: ir.credentials,\n\t\tdomain: ir.domain,\n\t\tencoding: \"json\",\n\t\tkind: \"http\",\n\t\torigin: ir.origin === \"absolute\" ? \"remote\" : ir.origin,\n\t};\n}\n\ntype BrowserStorageTransportOptions = {\n\tendpoints?: { storage?: string };\n\tresolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n\ttopology?: AthenaRuntimeTopologyIR;\n};\n\nasync function resolveStorageTransport(\n\toptions?: BrowserStorageTransportOptions,\n): Promise<AthenaHttpTransportIR | undefined> {\n\tconst explicit = options?.endpoints?.storage?.trim();\n\tif (explicit) {\n\t\treturn asExecutorTransport(\n\t\t\tcreateAthenaHttpTransportIR({\n\t\t\t\tbasePath: explicit,\n\t\t\t\tdomain: \"storage\",\n\t\t\t\torigin: /^https?:\\/\\//i.test(explicit) ? \"remote\" : \"same-origin\",\n\t\t\t}),\n\t\t);\n\t}\n\tconst topology =\n\t\toptions?.topology ??\n\t\t(options?.resolveTopology ? await options.resolveTopology() : undefined);\n\tif (topology) {\n\t\tconst advertised = topology.transports.storage;\n\t\treturn advertised?.kind === \"http\" ? advertised : undefined;\n\t}\n\treturn asExecutorTransport(\n\t\tcreateAthenaHttpTransportIR({\n\t\t\tbasePath: DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT,\n\t\t\tdomain: \"storage\",\n\t\t\torigin: \"same-origin\",\n\t\t}),\n\t);\n}\n\nfunction asWireRecord(details: unknown): Record<string, unknown> | undefined {\n\tif (!details || typeof details !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst record = details as Record<string, unknown>;\n\tconst nested = record.error;\n\tif (nested && typeof nested === \"object\") {\n\t\treturn nested as Record<string, unknown>;\n\t}\n\treturn record;\n}\n\nfunction storageErrorNumberFromDetails(details: unknown): number | undefined {\n\tconst record = asWireRecord(details);\n\tif (typeof record?.errorNumber === \"number\") {\n\t\treturn record.errorNumber;\n\t}\n\treturn undefined;\n}\n\ntype StorageAuthorizationWire = {\n\tmissing: readonly string[];\n\toperation: StorageObjectOp;\n};\n\nfunction storageAuthorizationFromDetails(\n\tdetails: unknown,\n): StorageAuthorizationWire | undefined {\n\tconst record = asWireRecord(details);\n\tif (!record || !isStorageObjectOp(record.operation)) {\n\t\treturn undefined;\n\t}\n\tif (!Array.isArray(record.missing)) {\n\t\treturn undefined;\n\t}\n\tconst missing: string[] = [];\n\tfor (const entry of record.missing) {\n\t\tif (typeof entry !== \"string\") {\n\t\t\treturn undefined;\n\t\t}\n\t\tmissing.push(entry);\n\t}\n\treturn {\n\t\tmissing,\n\t\toperation: record.operation,\n\t};\n}\n\nfunction isGenericTransportHttpCode(code: string, status: number): boolean {\n\treturn code === `ATHENA_TRANSPORT_HTTP_${status}`;\n}\n\nexport function hasAuthoritativeStorageWireError(input: {\n\tcode: string;\n\terrorNumber?: number;\n\tstatus: number;\n}): boolean {\n\tconst wire = input.code.trim();\n\tif (!wire || isGenericTransportHttpCode(wire, input.status)) {\n\t\treturn false;\n\t}\n\treturn typeof input.errorNumber === \"number\" || !wire.startsWith(\"ATHENA_TRANSPORT_HTTP_\");\n}\n\nexport function projectStorageWireError(input: {\n\tcode: string;\n\tdetails?: unknown;\n\terrorNumber?: number;\n\tmessage: string;\n\tstatus: number;\n}) {\n\tconst wireNumber =\n\t\tinput.errorNumber ?? storageErrorNumberFromDetails(input.details);\n\tconst authorization = storageAuthorizationFromDetails(input.details);\n\tif (\n\t\tinput.code.trim() === \"storage_authorization_denied\" &&\n\t\tauthorization\n\t) {\n\t\treturn storageErrorResult(\n\t\t\tnew AthenaStorageAuthorizationError({\n\t\t\t\tmissing: authorization.missing,\n\t\t\t\toperation: authorization.operation,\n\t\t\t}),\n\t\t);\n\t}\n\treturn storageErrorResult(\n\t\twireNumber ?? 3010,\n\t\tinput.code.trim(),\n\t\tinput.message,\n\t\tinput.status,\n\t);\n}\n\n/** Compatibility projector for generic `ATHENA_TRANSPORT_HTTP_*` bodies only. */\nexport function projectLegacyGenericStorageHttpError(input: {\n\tmessage: string;\n\tstatus: number;\n}) {\n\tconst status = input.status;\n\tconst errorNumber =\n\t\tstatus === 401 || status === 403 ? 3003 : status === 503 ? 3007 : 3010;\n\tconst code =\n\t\tstatus === 401\n\t\t\t? \"storage_unauthenticated\"\n\t\t\t: status === 403\n\t\t\t\t? \"storage_authorization_denied\"\n\t\t\t\t: status === 503\n\t\t\t\t\t? \"storage_unavailable\"\n\t\t\t\t\t: \"storage_internal\";\n\treturn storageErrorResult(errorNumber, code, input.message, status);\n}\n\nfunction mapStorageHttpFailure(input: {\n\tcode: string;\n\tdetails?: unknown;\n\terrorNumber?: number;\n\tmessage: string;\n\tstatus: number;\n}) {\n\tconst json = input.details as { error?: { code?: unknown } } | undefined;\n\tconst nestedCode = json?.error?.code;\n\tconst wireCode =\n\t\ttypeof nestedCode === \"string\" && nestedCode.trim()\n\t\t\t? nestedCode.trim()\n\t\t\t: input.code;\n\tconst wireNumber =\n\t\tinput.errorNumber ?? storageErrorNumberFromDetails(input.details);\n\tif (\n\t\thasAuthoritativeStorageWireError({\n\t\t\tcode: wireCode,\n\t\t\terrorNumber: wireNumber,\n\t\t\tstatus: input.status,\n\t\t})\n\t) {\n\t\treturn projectStorageWireError({\n\t\t\t...input,\n\t\t\tcode: wireCode,\n\t\t\terrorNumber: wireNumber,\n\t\t});\n\t}\n\treturn projectLegacyGenericStorageHttpError({\n\t\tmessage: input.message,\n\t\tstatus: input.status,\n\t});\n}\n\nexport function createBrowserStorageTransport(options?: {\n\tbaseUrl?: string;\n\tendpoints?: { storage?: string };\n\tfetch?: typeof fetch;\n\theaders?: Record<string, string>;\n\tresolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n\ttopology?: AthenaRuntimeTopologyIR;\n}): StorageObjectProvider {\n\tlet pending: Promise<AthenaHttpTransportIR | undefined> | undefined;\n\tconst loadTransport = () => {\n\t\tpending ??= resolveStorageTransport(options);\n\t\treturn pending;\n\t};\n\n\treturn {\n\t\tasync execute(op: AuthorizedStorageOperation) {\n\t\t\tconst transport = await loadTransport();\n\t\t\tif (!transport) {\n\t\t\t\treturn storageErrorResult(\n\t\t\t\t\t3007,\n\t\t\t\t\t\"storage_unavailable\",\n\t\t\t\t\t\"storage runtime is not configured\",\n\t\t\t\t\t503,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst result = await executeAthenaHttpTransport({\n\t\t\t\tfetch: options?.fetch,\n\t\t\t\theaders: options?.headers,\n\t\t\t\tinvocation: {\n\t\t\t\t\tdomain: \"storage\",\n\t\t\t\t\toperation: op.op,\n\t\t\t\t\tpayload: compactStoragePayload({\n\t\t\t\t\t\tbody: op.body ? encodeAthenaStorageBytes(op.body) : undefined,\n\t\t\t\t\t\tcontentType: op.contentType,\n\t\t\t\t\t\tcursor: op.cursor,\n\t\t\t\t\t\tkey: op.key,\n\t\t\t\t\t\tlimit: op.limit,\n\t\t\t\t\t\tmetadata: op.metadata,\n\t\t\t\t\t\tprefix: op.prefix,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\troot: options?.baseUrl,\n\t\t\t\ttransport,\n\t\t\t});\n\t\t\tif (!result.ok) {\n\t\t\t\treturn mapStorageHttpFailure(result.error);\n\t\t\t}\n\t\t\treturn storageOkResult(reviveAthenaStorageData(result.data));\n\t\t},\n\t};\n}\n\nfunction compactStoragePayload(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst compact: Record<string, unknown> = {};\n\tfor (const [key, value] of Object.entries(payload)) {\n\t\tif (value !== undefined) {\n\t\t\tcompact[key] = value;\n\t\t}\n\t}\n\treturn compact;\n}\n","import type { AthenaPrincipal } from \"../runtime/data/principal.ts\";\nimport type { PolicyPrincipal } from \"./types.ts\";\n\nconst PRINCIPAL_KINDS = new Set([\n\t\"public\",\n\t\"anonymous\",\n\t\"authenticated\",\n\t\"admin\",\n\t\"role\",\n\t\"permission\",\n\t\"service\",\n]);\n\nexport function isKnownPolicyPrincipalKind(kind: string): boolean {\n\treturn PRINCIPAL_KINDS.has(kind);\n}\n\nfunction eqIgnoreCase(left: string | undefined, right: string): boolean {\n\treturn (\n\t\tleft != null &&\n\t\tleft.localeCompare(right, undefined, { sensitivity: \"accent\" }) === 0\n\t);\n}\n\nfunction listHas(values: readonly string[] | undefined, name: string): boolean {\n\treturn Boolean(values?.some((value) => eqIgnoreCase(value, name)));\n}\n\n/**\n * Rust oracle (`athena-policy` `principal_matches`):\n * multiple principals on one policy are OR.\n *\n * `permission:*` matches `AthenaPrincipal.rights` only (spec 08), not grants.\n * `service:*` matches `AthenaPrincipal.service`.\n */\nexport function matchPolicyPrincipal(\n\ttarget: PolicyPrincipal,\n\tprincipal: AthenaPrincipal,\n): boolean {\n\tswitch (target.kind) {\n\t\tcase \"public\":\n\t\t\treturn true;\n\t\tcase \"anonymous\":\n\t\t\treturn principal.authenticated !== true;\n\t\tcase \"authenticated\":\n\t\t\treturn principal.authenticated === true;\n\t\tcase \"admin\":\n\t\t\treturn (\n\t\t\t\teqIgnoreCase(principal.role, \"admin\") ||\n\t\t\t\tlistHas(principal.rights, \"admin\")\n\t\t\t);\n\t\tcase \"role\":\n\t\t\treturn eqIgnoreCase(principal.role, target.name);\n\t\tcase \"permission\":\n\t\t\treturn listHas(principal.rights, target.name);\n\t\tcase \"service\":\n\t\t\treturn eqIgnoreCase(principal.service, target.name);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nexport function policyAppliesToPrincipal(\n\tprincipals: readonly PolicyPrincipal[],\n\tprincipal: AthenaPrincipal,\n): boolean {\n\tif (principals.length === 0) {\n\t\treturn true;\n\t}\n\treturn principals.some((target) => matchPolicyPrincipal(target, principal));\n}\n","import type { AthenaPrincipal } from \"../runtime/data/principal.ts\";\nimport type {\n\tAthenaPolicyDecision,\n\tAthenaPolicyDecisionReason,\n} from \"./decision.ts\";\nimport { policyAppliesToPrincipal } from \"./match-principal.ts\";\nimport type { AthenaPolicyRegistry } from \"./registry.ts\";\nimport type {\n\tPolicyActionName,\n\tPolicyDefinition,\n\tPolicyExpr,\n} from \"./types.ts\";\n\nexport interface DecideAthenaPolicyInput {\n\taction: PolicyActionName;\n\tprincipal: AthenaPrincipal;\n\tresource: string;\n}\n\nfunction combineOr(exprs: PolicyExpr[]): PolicyExpr | undefined {\n\tif (exprs.length === 0) {\n\t\treturn undefined;\n\t}\n\tif (exprs.length === 1) {\n\t\treturn exprs[0];\n\t}\n\treturn { exprs, op: \"or\" };\n}\n\nfunction combineAnd(exprs: PolicyExpr[]): PolicyExpr | undefined {\n\tif (exprs.length === 0) {\n\t\treturn undefined;\n\t}\n\tif (exprs.length === 1) {\n\t\treturn exprs[0];\n\t}\n\treturn { exprs, op: \"and\" };\n}\n\nfunction composeGroup(\n\tmatching: readonly PolicyDefinition[],\n\tfield: \"visibility\" | \"check\",\n): PolicyExpr | undefined {\n\tconst permissive = matching.filter(\n\t\t(item) => item.composition === \"permissive\",\n\t);\n\tconst restrictive = matching.filter(\n\t\t(item) => item.composition === \"restrictive\",\n\t);\n\n\tconst unrestrictedPermissive = permissive.some((item) => !item[field]);\n\tconst permissiveExprs = unrestrictedPermissive\n\t\t? []\n\t\t: permissive\n\t\t\t\t.map((item) => item[field])\n\t\t\t\t.filter((expr): expr is PolicyExpr => expr !== undefined);\n\tconst restrictiveExprs = restrictive\n\t\t.map((item) => item[field])\n\t\t.filter((expr): expr is PolicyExpr => expr !== undefined);\n\n\tconst permissiveExpr = unrestrictedPermissive\n\t\t? undefined\n\t\t: combineOr(permissiveExprs);\n\tconst parts: PolicyExpr[] = [];\n\tif (permissiveExpr) {\n\t\tparts.push(permissiveExpr);\n\t}\n\tparts.push(...restrictiveExprs);\n\treturn combineAnd(parts);\n}\n\nfunction decision(\n\tinput: Omit<AthenaPolicyDecision, \"matchedPolicyIds\"> & {\n\t\tmatchedPolicyIds?: readonly string[];\n\t},\n): AthenaPolicyDecision {\n\treturn {\n\t\tallowed: input.allowed,\n\t\tmatchedPolicyIds: Object.freeze([...(input.matchedPolicyIds ?? [])]),\n\t\tmode: input.mode,\n\t\treason: input.reason,\n\t\t...(input.visibility ? { visibility: input.visibility } : {}),\n\t\t...(input.check ? { check: input.check } : {}),\n\t};\n}\n\n/**\n * Produce a structured Policy decision.\n *\n * Visibility/check remain PolicyExpr IR. Subject slots are not substituted (R4).\n * Composition follows Rust: `(OR permissives) AND (AND restrictives)`.\n * Empty applicable permissive set is deny (Postgres RLS).\n */\nexport function decideAthenaPolicy(\n\tregistry: AthenaPolicyRegistry,\n\tinput: DecideAthenaPolicyInput,\n): AthenaPolicyDecision {\n\tif (registry.mode === \"disabled\") {\n\t\treturn decision({\n\t\t\tallowed: true,\n\t\t\tmode: \"disabled\",\n\t\t\treason: \"disabled\",\n\t\t});\n\t}\n\n\tconst candidates = registry.get(input.resource, input.action);\n\tif (candidates.length === 0) {\n\t\treturn decision({\n\t\t\tallowed: false,\n\t\t\tmode: registry.mode,\n\t\t\treason: \"no_matching_policy\",\n\t\t});\n\t}\n\n\tconst matching = candidates.filter((item) =>\n\t\tpolicyAppliesToPrincipal(item.principals, input.principal),\n\t);\n\tconst matchingIds = matching.map((item) => item.id);\n\tconst permissiveMatches = matching.filter(\n\t\t(item) => item.composition === \"permissive\",\n\t);\n\n\tlet reason: AthenaPolicyDecisionReason = \"allowed\";\n\tlet allowed = true;\n\tif (permissiveMatches.length === 0) {\n\t\tallowed = false;\n\t\treason =\n\t\t\tmatching.length === 0 ? \"no_matching_policy\" : \"principal_not_allowed\";\n\t}\n\n\treturn decision({\n\t\tallowed,\n\t\tcheck: allowed ? composeGroup(matching, \"check\") : undefined,\n\t\tmatchedPolicyIds: matchingIds,\n\t\tmode: registry.mode,\n\t\treason,\n\t\tvisibility: allowed ? composeGroup(matching, \"visibility\") : undefined,\n\t});\n}\n","import { decideAthenaPolicy } from \"../../policy/decide.ts\";\nimport type { PolicyActionName } from \"../../policy/types.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { mapProviderFailure, storageErrorResult } from \"./errors.ts\";\nimport { authorizeStorageOperation } from \"./rights.ts\";\nimport type {\n\tAuthorizedStorageOperation,\n\tCreateStorageRuntimeOptions,\n\tStorageObjectOp,\n\tStorageObjectRequest,\n\tStorageRuntime,\n} from \"./types.ts\";\n\nconst STORAGE_RESOURCE = \"storage.object\";\n\nfunction actionForOp(op: StorageObjectOp): PolicyActionName {\n\tswitch (op) {\n\t\tcase \"put\":\n\t\t\treturn \"storage.object.write\";\n\t\tcase \"delete\":\n\t\t\treturn \"storage.object.delete\";\n\t\tdefault:\n\t\t\treturn \"storage.object.read\";\n\t}\n}\n\nfunction toBytes(body: Uint8Array | string | undefined): Uint8Array | undefined {\n\tif (body == null) {\n\t\treturn undefined;\n\t}\n\tif (typeof body === \"string\") {\n\t\treturn new TextEncoder().encode(body);\n\t}\n\treturn body;\n}\n\nexport function createStorageRuntime(\n\toptions: CreateStorageRuntimeOptions,\n): StorageRuntime {\n\tconst { provider, policies, lifecycle } = options;\n\n\treturn {\n\t\tprovider,\n\t\tasync execute(request: StorageObjectRequest, principal: AthenaPrincipal) {\n\t\t\tif (\n\t\t\t\trequest.op !== \"get\" &&\n\t\t\t\trequest.op !== \"put\" &&\n\t\t\t\trequest.op !== \"delete\" &&\n\t\t\t\trequest.op !== \"list\" &&\n\t\t\t\trequest.op !== \"head\"\n\t\t\t) {\n\t\t\t\treturn storageErrorResult({\n\t\t\t\t\tmessage: `unsupported op ${String(request.op)}`,\n\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\tstatus: 400,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (request.op !== \"list\" && !request.key?.trim()) {\n\t\t\t\treturn storageErrorResult({\n\t\t\t\t\tmessage: `${request.op} requires key`,\n\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\tstatus: 400,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst rightsDenied = authorizeStorageOperation(principal, request.op);\n\t\t\tif (rightsDenied) {\n\t\t\t\treturn rightsDenied;\n\t\t\t}\n\n\t\t\tif (policies) {\n\t\t\t\tconst decision = decideAthenaPolicy(policies, {\n\t\t\t\t\taction: actionForOp(request.op),\n\t\t\t\t\tprincipal,\n\t\t\t\t\tresource: STORAGE_RESOURCE,\n\t\t\t\t});\n\t\t\t\tif (!decision.allowed) {\n\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\tmessage: decision.reason ?? \"denied\",\n\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\tstatus: 403,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlifecycle?.before?.({ op: request.op, request });\n\n\t\t\tconst authorized: AuthorizedStorageOperation = {\n\t\t\t\tbody: toBytes(request.body),\n\t\t\t\tcontentType: request.contentType,\n\t\t\t\tcursor: request.cursor,\n\t\t\t\tkey: request.key,\n\t\t\t\tlimit: request.limit,\n\t\t\t\tmetadata: request.metadata,\n\t\t\t\top: request.op,\n\t\t\t\tprefix: request.prefix,\n\t\t\t\tprincipal,\n\t\t\t};\n\n\t\t\tlet result;\n\t\t\ttry {\n\t\t\t\tresult = await provider.execute(authorized);\n\t\t\t} catch (error) {\n\t\t\t\tresult = mapProviderFailure(error);\n\t\t\t}\n\n\t\t\tlifecycle?.after?.({ op: request.op, result });\n\t\t\treturn result;\n\t\t},\n\t};\n}\n","/**\n * Canonical object-store key helpers for local + overlay storage.\n * Rename is a specialized move: parent prefix stays, basename changes.\n */\n\nexport function normalizeObjectPrefix(prefix: string | undefined | null): string {\n  if (!prefix?.trim()) {\n    return \"\";\n  }\n  return `${prefix.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\")}/`;\n}\n\nexport function joinObjectKey(prefix: string, name: string): string {\n  const base = prefix.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  const part = name.replace(/^\\/+/, \"\");\n  if (!base) {\n    return part;\n  }\n  if (!part) {\n    return base;\n  }\n  return `${base}/${part}`;\n}\n\nexport function parentObjectPrefix(key: string): string {\n  const clean = key.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  if (!clean) {\n    return \"\";\n  }\n  const parts = clean.split(\"/\");\n  parts.pop();\n  return parts.length > 0 ? `${parts.join(\"/\")}/` : \"\";\n}\n\nexport function objectBaseName(key: string): string {\n  const clean = key.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  if (!clean) {\n    return \"\";\n  }\n  const parts = clean.split(\"/\");\n  return parts[parts.length - 1] ?? \"\";\n}\n\nexport function isFolderPrefixInside(\n  sourcePrefix: string,\n  destinationPrefix: string,\n): boolean {\n  const source = normalizeObjectPrefix(sourcePrefix);\n  const destination = normalizeObjectPrefix(destinationPrefix);\n  if (!source) {\n    return false;\n  }\n  return destination === source || destination.startsWith(source);\n}\n\nexport function renameObjectKey(\n  key: string,\n  newName: string,\n  folder: boolean,\n): string {\n  const parent = parentObjectPrefix(key);\n  const name = newName.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  if (folder) {\n    return `${joinObjectKey(parent, name)}/`;\n  }\n  return joinObjectKey(parent, name);\n}\n\nexport function moveObjectKey(\n  key: string,\n  destinationPrefix: string,\n  folder: boolean,\n): string {\n  const dest = normalizeObjectPrefix(destinationPrefix);\n  const name = objectBaseName(key);\n  if (folder) {\n    return `${joinObjectKey(dest, name)}/`;\n  }\n  return joinObjectKey(dest, name);\n}\n\nexport function validateFolderSegment(name: string): string {\n  const trimmed = name.trim();\n  if (!trimmed) {\n    throw new Error(\"Folder name is required.\");\n  }\n  if (trimmed === \".\" || trimmed === \"..\") {\n    throw new Error(\"Folder name is invalid.\");\n  }\n  if (trimmed.startsWith(\"/\") || trimmed.startsWith(\"\\\\\")) {\n    throw new Error(\"Folder name must not start with a slash.\");\n  }\n  if (trimmed.includes(\"/\") || trimmed.includes(\"\\\\\")) {\n    throw new Error(\"Folder name must not contain slashes.\");\n  }\n  if (trimmed.includes(\"\\0\") || trimmed.split(\"/\").includes(\"..\")) {\n    throw new Error(\"Folder name is invalid.\");\n  }\n  return trimmed;\n}\n","import { parseAthenaRightKey } from \"../../rights/key.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport type { AthenaStorageUploadProgress } from \"../file.ts\";\nimport {\n\tisFolderPrefixInside,\n\tjoinObjectKey,\n\tnormalizeObjectPrefix,\n\trenameObjectKey,\n\tvalidateFolderSegment,\n} from \"../object-keys.ts\";\nimport {\n\tAthenaStorageAuthorizationError,\n\tAthenaStorageError,\n\tisAthenaStorageAuthorizationError,\n} from \"./errors.ts\";\nimport type { StorageOverlayInput } from \"./overlays.ts\";\nimport type {\n\tStorageObjectOp,\n\tStorageObjectResult,\n\tStorageRuntime,\n} from \"./types.ts\";\n\nconst OVERLAY_PRINCIPAL: AthenaPrincipal = {\n\tauthenticated: true,\n\tgrants: [],\n\trights: Object.freeze([parseAthenaRightKey(\"storage.*\")]),\n\tuserId: \"storage-overlay\",\n};\n\nasync function runOverlay(runtime: StorageRuntime, input: StorageOverlayInput) {\n\treturn runtime.execute(\n\t\t{\n\t\t\tbody: input.source,\n\t\t\tcontentType: input.contentType,\n\t\t\tcursor: input.cursor,\n\t\t\tkey: input.key,\n\t\t\tlimit: input.limit,\n\t\t\tmetadata: input.metadata,\n\t\t\top: input.op,\n\t\t\tprefix: input.prefix,\n\t\t},\n\t\tOVERLAY_PRINCIPAL,\n\t);\n}\n\nfunction unwrap(\n\tresult: StorageObjectResult,\n\toperation: StorageObjectOp,\n): unknown {\n\tif (result.ok) {\n\t\treturn result.data;\n\t}\n\tif (result.error && isAthenaStorageAuthorizationError(result.error)) {\n\t\tthrow new AthenaStorageAuthorizationError({\n\t\t\tmissing: result.error.missing,\n\t\t\toperation: result.error.operation,\n\t\t});\n\t}\n\tthrow new AthenaStorageError({\n\t\tcode: result.error?.code ?? \"storage_internal\",\n\t\terrorNumber: result.error?.errorNumber ?? 3010,\n\t\tmessage: result.error?.message ?? `storage ${operation} denied`,\n\t\tstatus: result.status,\n\t});\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n\treturn value && typeof value === \"object\"\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n}\n\nfunction readString(\n\trecord: Record<string, unknown>,\n\t...keys: string[]\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = record[key];\n\t\tif (typeof value === \"string\" && value.trim()) {\n\t\t\treturn value.trim();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction isBinarySource(value: unknown): boolean {\n\treturn (\n\t\tvalue instanceof Uint8Array ||\n\t\tvalue instanceof ArrayBuffer ||\n\t\t(typeof Blob !== \"undefined\" && value instanceof Blob) ||\n\t\ttypeof value === \"string\"\n\t);\n}\n\nfunction isFileListLike(value: unknown): value is ArrayLike<unknown> {\n\tif (Array.isArray(value)) {\n\t\treturn true;\n\t}\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst record = value as { length?: unknown };\n\treturn (\n\t\ttypeof record.length === \"number\" &&\n\t\tNumber.isFinite(record.length) &&\n\t\trecord.length >= 0\n\t);\n}\n\nexport async function coerceStorageBytes(\n\tvalue: unknown,\n): Promise<Uint8Array | string | undefined> {\n\tif (value instanceof Uint8Array || typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\tif (typeof Blob !== \"undefined\" && value instanceof Blob) {\n\t\treturn new Uint8Array(await value.arrayBuffer());\n\t}\n\treturn undefined;\n}\n\nfunction fileNameOf(source: unknown, fallback: string): string {\n\tif (source && typeof source === \"object\" && \"name\" in source) {\n\t\tconst name = (source as { name?: unknown }).name;\n\t\tif (typeof name === \"string\" && name.trim()) {\n\t\t\treturn name.trim();\n\t\t}\n\t}\n\treturn fallback;\n}\n\nfunction sourceSizeOf(source: unknown): number {\n\tif (source instanceof Uint8Array) {\n\t\treturn source.byteLength;\n\t}\n\tif (source instanceof ArrayBuffer) {\n\t\treturn source.byteLength;\n\t}\n\tif (typeof Blob !== \"undefined\" && source instanceof Blob) {\n\t\treturn source.size;\n\t}\n\treturn 0;\n}\n\nfunction progressSnapshot(\n\tphase: AthenaStorageUploadProgress[\"phase\"],\n\tfiles: readonly { fileName: string; sizeBytes: number }[],\n\tfileIndex: number,\n\tloaded: number,\n\taggregateLoaded: number,\n): AthenaStorageUploadProgress {\n\tconst total = files[fileIndex]?.sizeBytes ?? 0;\n\tconst aggregateTotal = files.reduce((sum, file) => sum + file.sizeBytes, 0);\n\treturn {\n\t\taggregateLoaded,\n\t\taggregatePercent:\n\t\t\taggregateTotal > 0\n\t\t\t\t? Math.round((aggregateLoaded / aggregateTotal) * 100)\n\t\t\t\t: 100,\n\t\taggregateTotal,\n\t\tfileCount: files.length,\n\t\tfileIndex,\n\t\tfileName: files[fileIndex]?.fileName ?? \"\",\n\t\tloaded,\n\t\tpercent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n\t\tphase,\n\t\ttotal,\n\t};\n}\n\nfunction listedKeys(data: unknown): string[] {\n\tif (!data || typeof data !== \"object\") {\n\t\treturn [];\n\t}\n\tconst record = data as Record<string, unknown>;\n\tconst items = record.objects ?? record.files ?? record.items;\n\tif (!Array.isArray(items)) {\n\t\treturn [];\n\t}\n\tconst keys: string[] = [];\n\tfor (const item of items) {\n\t\tif (!item || typeof item !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst entry = item as Record<string, unknown>;\n\t\tconst key = entry.key ?? entry.storage_key ?? entry.storageKey;\n\t\tif (typeof key === \"string\" && key.trim()) {\n\t\t\tkeys.push(key.trim());\n\t\t}\n\t}\n\treturn keys;\n}\n\nfunction listedCursor(data: unknown): string | undefined {\n\tif (!data || typeof data !== \"object\") {\n\t\treturn;\n\t}\n\tconst record = data as Record<string, unknown>;\n\tconst cursor = record.cursor ?? record.nextCursor;\n\treturn typeof cursor === \"string\" && cursor.trim()\n\t\t? cursor.trim()\n\t\t: undefined;\n}\n\nasync function listAllKeys(\n\truntime: StorageRuntime,\n\tprefix: string,\n): Promise<string[]> {\n\tconst keys: string[] = [];\n\tlet cursor: string | undefined;\n\tfor (let page = 0; page < 50; page += 1) {\n\t\tconst result = await runOverlay(runtime, {\n\t\t\tcursor,\n\t\t\top: \"list\",\n\t\t\tprefix: prefix || undefined,\n\t\t});\n\t\tconst data = unwrap(result, \"list\");\n\t\tkeys.push(...listedKeys(data));\n\t\tconst next = listedCursor(data);\n\t\tif (!next || next === cursor) {\n\t\t\tbreak;\n\t\t}\n\t\tcursor = next;\n\t}\n\treturn keys;\n}\n\nasync function putBytes(\n\truntime: StorageRuntime,\n\tinput: {\n\t\tcontentType?: string;\n\t\tkey: string;\n\t\tmetadata?: Record<string, string>;\n\t\tsource: unknown;\n\t},\n) {\n\tconst source = await coerceStorageBytes(input.source);\n\tconst result = await runOverlay(runtime, {\n\t\tcontentType: input.contentType,\n\t\tkey: input.key,\n\t\tmetadata: input.metadata,\n\t\top: \"put\",\n\t\tsource,\n\t});\n\treturn unwrap(result, \"put\");\n}\n\nexport function isHighLevelFileUpload(input: unknown): boolean {\n\tconst record = asRecord(input);\n\tconst files = record.files;\n\treturn isFileListLike(files) && !isBinarySource(files);\n}\n\nexport async function overlayUploadFiles(\n\truntime: StorageRuntime,\n\tinput: unknown,\n\toptions?: { signal?: AbortSignal },\n) {\n\tconst record = asRecord(input);\n\tconst filesField = record.files;\n\tif (!isFileListLike(filesField)) {\n\t\tthrow new Error(\"storage.file.upload requires files\");\n\t}\n\tconst sources = Array.from(filesField);\n\tif (sources.length === 0) {\n\t\tthrow new Error(\"storage.file.upload requires at least one file\");\n\t}\n\tconst prefixPath =\n\t\ttypeof record.prefixPath === \"string\"\n\t\t\t? record.prefixPath\n\t\t\t: typeof record.prefix === \"string\"\n\t\t\t\t? record.prefix\n\t\t\t\t: \"\";\n\tconst onProgress =\n\t\ttypeof record.onProgress === \"function\"\n\t\t\t? (record.onProgress as (progress: AthenaStorageUploadProgress) => void)\n\t\t\t: undefined;\n\tconst described = sources.map((source, index) => ({\n\t\tfileName: fileNameOf(source, `file-${index + 1}`),\n\t\tsizeBytes: sourceSizeOf(source),\n\t\tsource,\n\t}));\n\tonProgress?.(progressSnapshot(\"preparing\", described, 0, 0, 0));\n\tconst uploaded: unknown[] = [];\n\tlet aggregateLoaded = 0;\n\tfor (let index = 0; index < described.length; index += 1) {\n\t\tif (options?.signal?.aborted) {\n\t\t\tconst error = new Error(\"Upload cancelled\");\n\t\t\terror.name = \"AbortError\";\n\t\t\tthrow error;\n\t\t}\n\t\tconst item = described[index];\n\t\tif (!item) {\n\t\t\tcontinue;\n\t\t}\n\t\tonProgress?.(\n\t\t\tprogressSnapshot(\"uploading\", described, index, 0, aggregateLoaded),\n\t\t);\n\t\tconst key = joinObjectKey(prefixPath, item.fileName);\n\t\tconst result = await putBytes(runtime, {\n\t\t\tcontentType:\n\t\t\t\ttypeof record.contentType === \"string\" ? record.contentType : undefined,\n\t\t\tkey,\n\t\t\tsource: item.source,\n\t\t});\n\t\taggregateLoaded += item.sizeBytes;\n\t\tonProgress?.(\n\t\t\tprogressSnapshot(\n\t\t\t\t\"uploading\",\n\t\t\t\tdescribed,\n\t\t\t\tindex,\n\t\t\t\titem.sizeBytes,\n\t\t\t\taggregateLoaded,\n\t\t\t),\n\t\t);\n\t\tuploaded.push(result);\n\t}\n\tonProgress?.(\n\t\tprogressSnapshot(\n\t\t\t\"complete\",\n\t\t\tdescribed,\n\t\t\tdescribed.length - 1,\n\t\t\tdescribed[described.length - 1]?.sizeBytes ?? 0,\n\t\t\taggregateLoaded,\n\t\t),\n\t);\n\treturn {\n\t\tcount: uploaded.length,\n\t\tfiles: uploaded,\n\t\tuploaded: described.map((item) => joinObjectKey(prefixPath, item.fileName)),\n\t};\n}\n\nexport async function overlayMoveFile(runtime: StorageRuntime, input: unknown) {\n\tconst record = asRecord(input);\n\tconst from =\n\t\treadString(record, \"from\", \"from_key\", \"source_key\", \"key\") ?? \"\";\n\tconst to = readString(record, \"to\", \"to_key\", \"destination_key\") ?? \"\";\n\tif (!from || !to) {\n\t\tthrow new Error(\"storage.file.move requires from and to keys\");\n\t}\n\tconst getResult = await runOverlay(runtime, {\n\t\tkey: from,\n\t\top: \"get\",\n\t});\n\tconst body = unwrap(getResult, \"get\");\n\tawait putBytes(runtime, { key: to, source: body });\n\tconst deleteResult = await runOverlay(runtime, {\n\t\tkey: from,\n\t\top: \"delete\",\n\t});\n\tunwrap(deleteResult, \"delete\");\n\treturn { from, storage_key: to, to };\n}\n\nexport async function overlayRenameFile(\n\truntime: StorageRuntime,\n\tinput: unknown,\n) {\n\tconst record = asRecord(input);\n\tconst key = readString(record, \"key\", \"from\", \"storage_key\") ?? \"\";\n\tconst name = readString(record, \"name\", \"to\", \"newName\") ?? \"\";\n\tif (!key || !name) {\n\t\tthrow new Error(\"storage.file.rename requires key and name\");\n\t}\n\treturn overlayMoveFile(runtime, {\n\t\tfrom: key,\n\t\tto: renameObjectKey(key, name, false),\n\t});\n}\n\nexport async function overlayCreateFolder(\n\truntime: StorageRuntime,\n\tinput: unknown,\n) {\n\tconst record = asRecord(input);\n\tconst name = readString(record, \"name\");\n\tconst parent =\n\t\t(typeof record.prefixPath === \"string\" ? record.prefixPath : undefined) ||\n\t\treadString(record, \"prefix\") ||\n\t\t\"\";\n\tconst prefix = name\n\t\t? normalizeObjectPrefix(joinObjectKey(parent, validateFolderSegment(name)))\n\t\t: normalizeObjectPrefix(readString(record, \"prefix\", \"key\", \"path\") ?? \"\");\n\tif (!prefix) {\n\t\tthrow new Error(\"storage.folder.create requires a folder name or prefix\");\n\t}\n\tawait putBytes(runtime, { key: prefix, source: new Uint8Array() });\n\treturn { created: true, prefix };\n}\n\nexport async function overlayDeleteFolder(\n\truntime: StorageRuntime,\n\tinput: unknown,\n) {\n\tconst record = asRecord(input);\n\tconst prefix = normalizeObjectPrefix(\n\t\treadString(record, \"prefix\", \"key\", \"from_prefix\") ?? \"\",\n\t);\n\tif (!prefix) {\n\t\tthrow new Error(\"storage.folder.delete requires prefix\");\n\t}\n\tconst keys = await listAllKeys(runtime, prefix);\n\tfor (const key of keys) {\n\t\tconst result = await runOverlay(runtime, {\n\t\t\tkey,\n\t\t\top: \"delete\",\n\t\t});\n\t\tunwrap(result, \"delete\");\n\t}\n\treturn { deleted: true, prefix };\n}\n\nexport async function overlayMoveFolder(\n\truntime: StorageRuntime,\n\tinput: unknown,\n) {\n\tconst record = asRecord(input);\n\tconst from = normalizeObjectPrefix(\n\t\treadString(record, \"from\", \"from_prefix\", \"prefix\") ?? \"\",\n\t);\n\tconst to = normalizeObjectPrefix(\n\t\treadString(record, \"to\", \"to_prefix\", \"destination\") ?? \"\",\n\t);\n\tif (!from || !to) {\n\t\tthrow new Error(\"storage.folder.move requires from and to prefixes\");\n\t}\n\tif (isFolderPrefixInside(from, to)) {\n\t\tthrow new Error(\"Cannot move a folder into itself\");\n\t}\n\tconst keys = await listAllKeys(runtime, from);\n\tfor (const key of keys) {\n\t\tconst next = `${to}${key.slice(from.length)}`;\n\t\tconst getResult = await runOverlay(runtime, {\n\t\t\tkey,\n\t\t\top: \"get\",\n\t\t});\n\t\tconst body = unwrap(getResult, \"get\");\n\t\tawait putBytes(runtime, { key: next, source: body });\n\t\tconst deleteResult = await runOverlay(runtime, {\n\t\t\tkey,\n\t\t\top: \"delete\",\n\t\t});\n\t\tunwrap(deleteResult, \"delete\");\n\t}\n\tif (keys.length === 0) {\n\t\tawait putBytes(runtime, { key: to, source: new Uint8Array() });\n\t}\n\treturn { from, prefix: to, to };\n}\n\nexport async function overlayRenameFolder(\n\truntime: StorageRuntime,\n\tinput: unknown,\n) {\n\tconst record = asRecord(input);\n\tconst from = normalizeObjectPrefix(\n\t\treadString(record, \"from\", \"from_prefix\", \"prefix\", \"key\") ?? \"\",\n\t);\n\tconst name = readString(record, \"name\");\n\tconst explicitTo = readString(record, \"to_prefix\", \"to\");\n\tconst to = explicitTo\n\t\t? normalizeObjectPrefix(explicitTo)\n\t\t: renameObjectKey(from, validateFolderSegment(name ?? \"\"), true);\n\treturn overlayMoveFolder(runtime, { from, to });\n}\n","import { parseAthenaRightKey } from \"../../rights/key.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport {\n\tAthenaStorageAuthorizationError,\n\tAthenaStorageError,\n\tisAthenaStorageAuthorizationError,\n} from \"./errors.ts\";\nimport {\n\tcoerceStorageBytes,\n\tisHighLevelFileUpload,\n\toverlayCreateFolder,\n\toverlayDeleteFolder,\n\toverlayMoveFile,\n\toverlayMoveFolder,\n\toverlayRenameFile,\n\toverlayRenameFolder,\n\toverlayUploadFiles,\n} from \"./object-ops.ts\";\nimport type {\n\tStorageObjectOp,\n\tStorageObjectResult,\n\tStorageRuntime,\n} from \"./types.ts\";\n\nexport interface StorageOverlayInput {\n\tcontentType?: string;\n\tcursor?: string;\n\tkey?: string;\n\tlimit?: number;\n\tmetadata?: Record<string, string>;\n\top: StorageObjectOp;\n\tprefix?: string;\n\tsource?: Uint8Array | string;\n}\n\n/** Process-owned local ObjectStore caller — not an HTTP identity. */\nconst OVERLAY_PRINCIPAL: AthenaPrincipal = {\n\tauthenticated: true,\n\tgrants: [],\n\trights: Object.freeze([parseAthenaRightKey(\"storage.*\")]),\n\tuserId: \"storage-overlay\",\n};\n\nexport async function executeStorageOverlay(\n\truntime: StorageRuntime,\n\tinput: StorageOverlayInput,\n) {\n\treturn runtime.execute(\n\t\t{\n\t\t\tbody: input.source,\n\t\t\tcontentType: input.contentType,\n\t\t\tcursor: input.cursor,\n\t\t\tkey: input.key,\n\t\t\tlimit: input.limit,\n\t\t\tmetadata: input.metadata,\n\t\t\top: input.op,\n\t\t\tprefix: input.prefix,\n\t\t},\n\t\tOVERLAY_PRINCIPAL,\n\t);\n}\n\nexport function wrapStorageModuleWithRuntime<T extends object>(\n\tmodule: T,\n\truntime: StorageRuntime,\n): T {\n\tconst storage = module as T & {\n\t\tfile?: {\n\t\t\tdelete?: (input: unknown) => Promise<unknown>;\n\t\t\tget?: (input: unknown) => Promise<unknown>;\n\t\t\tlist?: (input?: unknown) => Promise<unknown>;\n\t\t\tmove?: (input: unknown) => Promise<unknown>;\n\t\t\trename?: (input: unknown) => Promise<unknown>;\n\t\t\tupload?: (\n\t\t\t\tinput: unknown,\n\t\t\t\toptions?: { signal?: AbortSignal },\n\t\t\t) => Promise<unknown>;\n\t\t};\n\t\tfolder?: {\n\t\t\tcreate?: (input: unknown) => Promise<unknown>;\n\t\t\tdelete?: (input: unknown) => Promise<unknown>;\n\t\t\tmove?: (input: unknown) => Promise<unknown>;\n\t\t\trename?: (input: unknown) => Promise<unknown>;\n\t\t};\n\t};\n\tif (!storage.file) {\n\t\treturn module;\n\t}\n\tconst file = storage.file;\n\tconst folder = storage.folder ?? {};\n\treturn {\n\t\t...storage,\n\t\tfile: {\n\t\t\t...file,\n\t\t\tasync head(input: unknown) {\n\t\t\t\tconst result = await executeStorageOverlay(runtime, {\n\t\t\t\t\tkey: readKey(input),\n\t\t\t\t\top: \"head\",\n\t\t\t\t});\n\t\t\t\treturn unwrapStorageRuntimeResult(result, \"head\");\n\t\t\t},\n\t\t\tasync delete(input: unknown) {\n\t\t\t\tconst result = await executeStorageOverlay(runtime, {\n\t\t\t\t\tkey: readKey(input),\n\t\t\t\t\top: \"delete\",\n\t\t\t\t});\n\t\t\t\treturn unwrapStorageRuntimeResult(result, \"delete\");\n\t\t\t},\n\t\t\tasync get(input: unknown) {\n\t\t\t\tconst result = await executeStorageOverlay(runtime, {\n\t\t\t\t\tkey: readKey(input),\n\t\t\t\t\top: \"get\",\n\t\t\t\t});\n\t\t\t\treturn unwrapStorageRuntimeResult(result, \"get\");\n\t\t\t},\n\t\t\tasync list(input?: unknown) {\n\t\t\t\tconst result = await executeStorageOverlay(runtime, {\n\t\t\t\t\tcursor: readCursor(input),\n\t\t\t\t\tlimit: readLimit(input),\n\t\t\t\t\top: \"list\",\n\t\t\t\t\tprefix: readPrefix(input),\n\t\t\t\t});\n\t\t\t\treturn unwrapStorageRuntimeResult(result, \"list\");\n\t\t\t},\n\t\t\tasync move(input: unknown) {\n\t\t\t\tif (typeof file.move === \"function\") {\n\t\t\t\t\treturn file.move(input);\n\t\t\t\t}\n\t\t\t\treturn overlayMoveFile(runtime, input);\n\t\t\t},\n\t\t\tasync rename(input: unknown) {\n\t\t\t\tif (typeof file.rename === \"function\") {\n\t\t\t\t\treturn file.rename(input);\n\t\t\t\t}\n\t\t\t\treturn overlayRenameFile(runtime, input);\n\t\t\t},\n\t\t\tasync upload(\n\t\t\t\tinput: unknown,\n\t\t\t\toptions?: { signal?: AbortSignal },\n\t\t\t) {\n\t\t\t\tif (isHighLevelFileUpload(input)) {\n\t\t\t\t\treturn overlayUploadFiles(runtime, input, options);\n\t\t\t\t}\n\t\t\t\tconst source = await coerceStorageBytes(\n\t\t\t\t\treadSource(input) ?? readLooseSource(input),\n\t\t\t\t);\n\t\t\t\tconst result = await executeStorageOverlay(runtime, {\n\t\t\t\t\tcontentType: readContentType(input),\n\t\t\t\t\tkey: readKey(input),\n\t\t\t\t\tmetadata: readMetadata(input),\n\t\t\t\t\top: \"put\",\n\t\t\t\t\tsource,\n\t\t\t\t});\n\t\t\t\treturn unwrapStorageRuntimeResult(result, \"put\");\n\t\t\t},\n\t\t},\n\t\tfolder: {\n\t\t\t...folder,\n\t\t\tcreate: folder.create ?? ((input) => overlayCreateFolder(runtime, input)),\n\t\t\tdelete: folder.delete ?? ((input) => overlayDeleteFolder(runtime, input)),\n\t\t\tmove: folder.move ?? ((input) => overlayMoveFolder(runtime, input)),\n\t\t\trename: folder.rename ?? ((input) => overlayRenameFolder(runtime, input)),\n\t\t},\n\t};\n}\n\nexport function unwrapStorageRuntimeResult(\n\tresult: StorageObjectResult,\n\toperation: StorageObjectOp,\n): unknown {\n\tif (result.ok) {\n\t\treturn result.data;\n\t}\n\tthrow projectStorageRuntimeError(result, operation);\n}\n\nexport function projectStorageRuntimeError(\n\tresult: StorageObjectResult,\n\toperation: StorageObjectOp,\n): AthenaStorageError {\n\tif (result.error && isAthenaStorageAuthorizationError(result.error)) {\n\t\treturn new AthenaStorageAuthorizationError({\n\t\t\tmissing: result.error.missing,\n\t\t\toperation: result.error.operation,\n\t\t});\n\t}\n\treturn new AthenaStorageError({\n\t\tcode: result.error?.code ?? \"storage_internal\",\n\t\terrorNumber: result.error?.errorNumber ?? 3010,\n\t\tmessage: result.error?.message ?? `storage ${operation} denied`,\n\t\tstatus: result.status,\n\t});\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n\treturn value && typeof value === \"object\"\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n}\n\nfunction readKey(input: unknown): string | undefined {\n\tif (typeof input === \"string\" && input.trim()) {\n\t\treturn input;\n\t}\n\tconst record = asRecord(input);\n\tconst key =\n\t\trecord.storage_key ?? record.storageKey ?? record.key ?? record.name;\n\treturn typeof key === \"string\" && key.trim() ? key : undefined;\n}\n\nfunction readPrefix(input: unknown): string | undefined {\n\tconst record = asRecord(input);\n\treturn typeof record.prefix === \"string\" ? record.prefix : undefined;\n}\n\nfunction readSource(input: unknown): Uint8Array | string | undefined {\n\tif (input instanceof Uint8Array || typeof input === \"string\") {\n\t\treturn input;\n\t}\n\tconst record = asRecord(input);\n\tconst source = record.source ?? record.body ?? record.files ?? record.bytes;\n\tif (source instanceof Uint8Array || typeof source === \"string\") {\n\t\treturn source;\n\t}\n\treturn undefined;\n}\n\nfunction readContentType(input: unknown): string | undefined {\n\tconst record = asRecord(input);\n\treturn typeof record.contentType === \"string\"\n\t\t? record.contentType\n\t\t: undefined;\n}\n\nfunction readMetadata(input: unknown): Record<string, string> | undefined {\n\tconst record = asRecord(input);\n\tconst metadata = record.metadata;\n\tif (!metadata || typeof metadata !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst out: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(\n\t\tmetadata as Record<string, unknown>,\n\t)) {\n\t\tif (typeof value === \"string\") {\n\t\t\tout[key] = value;\n\t\t}\n\t}\n\treturn out;\n}\n\nfunction readCursor(input: unknown): string | undefined {\n\tconst record = asRecord(input);\n\treturn typeof record.cursor === \"string\" ? record.cursor : undefined;\n}\n\nfunction readLimit(input: unknown): number | undefined {\n\tconst record = asRecord(input);\n\treturn typeof record.limit === \"number\" ? record.limit : undefined;\n}\n\nfunction readLooseSource(input: unknown): unknown {\n\tif (\n\t\tinput instanceof Uint8Array ||\n\t\tinput instanceof ArrayBuffer ||\n\t\t(typeof Blob !== \"undefined\" && input instanceof Blob)\n\t) {\n\t\treturn input;\n\t}\n\tconst record = asRecord(input);\n\treturn record.source ?? record.body ?? record.files ?? record.bytes;\n}\n\n/** Public, non-secret Storage summary for settings UI. Never copy credentials. */\nexport function advertiseSafeStorageCapabilities(\n\tstorage: object,\n\tinput?: {\n\t\tbucket?: string | null;\n\t\tprovider?: string | null;\n\t\tr2?: unknown;\n\t},\n): void {\n\tconst bucket = input?.bucket?.trim() ?? \"\";\n\tlet provider: string | undefined;\n\tif (typeof input?.provider === \"string\" && input.provider.trim()) {\n\t\tprovider = input.provider.trim();\n\t} else if (input?.r2) {\n\t\tprovider = \"r2\";\n\t}\n\tconst target = storage as { capabilities?: Record<string, unknown> };\n\ttarget.capabilities = {\n\t\t...(target.capabilities && typeof target.capabilities === \"object\"\n\t\t\t? target.capabilities\n\t\t\t: {}),\n\t\tobjects: true,\n\t\t...(provider ? { provider } : {}),\n\t\t...(bucket ? { bucket } : {}),\n\t};\n}\n","/**\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 { withPostgresLibpqCompatConnectionString } from \"../postgres/connection-string.ts\";\nimport { createClient } from \"../v3-client-core.ts\";\nimport type {\n\tGeneratorProviderConfig,\n\tPostgresDirectProviderConfig,\n\tPostgresGatewayProviderConfig,\n} from \"./types.ts\";\n\n/**\n * SQL that lists non-system PostgreSQL schemas that contain base tables.\n * Used by both direct (`pg`) and gateway (`/gateway/query`) discovery paths.\n */\nexport const DISCOVER_POSTGRES_SCHEMAS_SQL = `\n  SELECT DISTINCT n.nspname AS schema_name\n  FROM pg_namespace n\n  JOIN pg_class c ON c.relnamespace = n.oid\n  WHERE c.relkind IN ('r', 'p')\n    AND n.nspname NOT IN ('pg_catalog', 'information_schema')\n    AND n.nspname NOT LIKE 'pg_toast%'\n    AND n.nspname NOT LIKE 'pg_temp_%'\n    AND n.nspname NOT LIKE 'pg_toast_temp_%'\n  ORDER BY n.nspname;\n`.trim();\n\nconst SYSTEM_SCHEMA_PREFIXES = [\"pg_\"] as const;\nconst SYSTEM_SCHEMAS = new Set([\"pg_catalog\", \"information_schema\"]);\n\ninterface SchemaNameRow {\n\tnspname?: unknown;\n\tschema_name?: unknown;\n\tschemaName?: unknown;\n}\n\n/**\n * Filters and normalizes a raw list of schema names into a stable, unique array.\n * Drops empty strings and PostgreSQL system/catalog namespaces.\n */\nexport function normalizeDiscoveredSchemas(input: readonly string[]): string[] {\n\tconst schemas: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const value of input) {\n\t\tconst schema = value.trim();\n\t\tif (!schema || seen.has(schema)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (SYSTEM_SCHEMAS.has(schema)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (SYSTEM_SCHEMA_PREFIXES.some((prefix) => schema.startsWith(prefix))) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(schema);\n\t\tschemas.push(schema);\n\t}\n\n\treturn schemas;\n}\n\n/**\n * Merges configured schemas with discovered ones without dropping user intent.\n * - preserves configured order first\n * - appends newly discovered schemas\n * - never removes a configured schema that discovery did not return\n */\nexport function mergeSchemaSelections(\n\tconfigured: readonly string[] | undefined,\n\tdiscovered: readonly string[],\n): string[] {\n\tconst result: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const value of configured ?? []) {\n\t\tconst schema = value.trim();\n\t\tif (!schema || seen.has(schema)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(schema);\n\t\tresult.push(schema);\n\t}\n\n\tfor (const value of discovered) {\n\t\tconst schema = value.trim();\n\t\tif (!schema || seen.has(schema)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(schema);\n\t\tresult.push(schema);\n\t}\n\n\treturn result.length > 0 ? result : [\"public\"];\n}\n\n/**\n * True when two schema lists select the same set (order-insensitive).\n */\nexport function schemasEqual(\n\tleft: readonly string[] | undefined,\n\tright: readonly string[] | undefined,\n): boolean {\n\tconst a = normalizeDiscoveredSchemas(left ?? []);\n\tconst b = normalizeDiscoveredSchemas(right ?? []);\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tconst set = new Set(a);\n\treturn b.every((schema) => set.has(schema));\n}\n\nfunction coerceSchemaName(row: SchemaNameRow): string | undefined {\n\tconst raw = row.schema_name ?? row.schemaName ?? row.nspname;\n\tif (typeof raw !== \"string\") {\n\t\treturn;\n\t}\n\tconst trimmed = raw.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nasync function loadPgPoolConstructor(): Promise<\n\tnew (config: {\n\t\tconnectionString: string;\n\t}) => {\n\t\tquery: <T extends Record<string, unknown>>(\n\t\t\tsql: string,\n\t\t) => Promise<{ rows: T[] }>;\n\t\tend: () => Promise<void>;\n\t}\n> {\n\tconst module = await import(\"pg\");\n\tconst poolConstructor =\n\t\t(\n\t\t\tmodule as {\n\t\t\t\tPool?: new (config: {\n\t\t\t\t\tconnectionString: string;\n\t\t\t\t}) => {\n\t\t\t\t\tquery: <T extends Record<string, unknown>>(\n\t\t\t\t\t\tsql: string,\n\t\t\t\t\t) => Promise<{ rows: T[] }>;\n\t\t\t\t\tend: () => Promise<void>;\n\t\t\t\t};\n\t\t\t}\n\t\t).Pool ??\n\t\t(\n\t\t\tmodule as {\n\t\t\t\tdefault?: {\n\t\t\t\t\tPool?: new (config: {\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t}) => {\n\t\t\t\t\t\tquery: <T extends Record<string, unknown>>(\n\t\t\t\t\t\t\tsql: string,\n\t\t\t\t\t\t) => Promise<{ rows: T[] }>;\n\t\t\t\t\t\tend: () => Promise<void>;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\t\t).default?.Pool;\n\n\tif (!poolConstructor) {\n\t\tthrow new Error(\n\t\t\t'@xylex-group/athena: Unable to load the PostgreSQL driver for schema discovery. Ensure \"pg\" is installed and this API runs in a Node.js server runtime.',\n\t\t);\n\t}\n\n\treturn poolConstructor;\n}\n\nasync function discoverDirectSchemas(\n\tconfig: PostgresDirectProviderConfig,\n): Promise<string[]> {\n\tconst PoolConstructor = await loadPgPoolConstructor();\n\tconst pool = new PoolConstructor({\n\t\tconnectionString: withPostgresLibpqCompatConnectionString(\n\t\t\tconfig.connectionString,\n\t\t),\n\t});\n\ttry {\n\t\tconst result = await pool.query(DISCOVER_POSTGRES_SCHEMAS_SQL);\n\t\tconst names = (result.rows as SchemaNameRow[])\n\t\t\t.map(coerceSchemaName)\n\t\t\t.filter((value): value is string => Boolean(value));\n\t\treturn normalizeDiscoveredSchemas(names);\n\t} finally {\n\t\tawait pool.end();\n\t}\n}\n\nasync function discoverGatewaySchemas(\n\tconfig: PostgresGatewayProviderConfig,\n): Promise<string[]> {\n\t// Avoid ReturnType<typeof createClient> — it overflows TS instantiation depth.\n\tinterface GatewayQueryClient {\n\t\tquery: <T>(sql: string) => Promise<{\n\t\t\tdata?: T[] | null;\n\t\t\terror?: { message?: string } | null;\n\t\t\tstatus: number;\n\t\t}>;\n\t}\n\tconst client = (\n\t\tcreateClient as unknown as (c: unknown) => GatewayQueryClient\n\t)({\n\t\tbackend: {\n\t\t\ttype: config.backend ?? \"postgresql\",\n\t\t},\n\t\tclient: config.client,\n\t\tdb: { url: config.gatewayUrl },\n\t\tenv: typeof process === \"undefined\" ? undefined : process.env,\n\t\tkey: config.apiKey,\n\t});\n\n\tconst result = await client.query<SchemaNameRow>(\n\t\tDISCOVER_POSTGRES_SCHEMAS_SQL,\n\t);\n\tif (result.error || result.status < 200 || result.status >= 300) {\n\t\tthrow new Error(\n\t\t\tresult.error?.message ??\n\t\t\t\t`Gateway schema discovery failed with status ${result.status}`,\n\t\t);\n\t}\n\n\tconst names = (result.data ?? [])\n\t\t.map(coerceSchemaName)\n\t\t.filter((value): value is string => Boolean(value));\n\treturn normalizeDiscoveredSchemas(names);\n}\n\n/**\n * Discovers application-owned PostgreSQL schemas for generator config auto-fill.\n * Supports both direct Postgres and Athena gateway providers.\n */\nexport async function discoverPostgresSchemas(\n\tprovider: GeneratorProviderConfig,\n): Promise<string[]> {\n\tif (provider.kind === \"postgres\" && provider.mode === \"direct\") {\n\t\treturn discoverDirectSchemas(provider);\n\t}\n\n\tif (provider.kind === \"postgres\" && provider.mode === \"gateway\") {\n\t\treturn discoverGatewaySchemas(provider);\n\t}\n\n\tthrow new Error(\n\t\t`Schema discovery is only implemented for postgres direct/gateway providers (received ${provider.kind}/${\"mode\" in provider ? provider.mode : \"unknown\"}).`,\n\t);\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport {\n\tDEFAULT_MIGRATIONS_DIRECTORY,\n\tfindGeneratorConfigPath,\n\tloadGeneratorConfig,\n} from \"./config.ts\";\nimport {\n\tensureAthenaProjectLayout,\n\tmaterializeManagedAuthMigrations,\n} from \"../migrations/managed-auth.ts\";\nimport {\n\tdetectAuthorityMode,\n\tformatSchemaFallbackMessages,\n\ttype GeneratorSchemaProvenance,\n\tresolveGeneratorDatabaseAuthority,\n} from \"./database-authority.ts\";\nimport {\n\tdiscoverPostgresSchemas,\n\tmergeSchemaSelections,\n\tschemasEqual,\n} from \"./schema-discovery.ts\";\nimport {\n\tDEFAULT_POSTGRES_SCHEMAS,\n\tnormalizeSchemaSelection,\n} from \"./schema-selection.ts\";\nimport type {\n\tGeneratorProviderConfig,\n\tGeneratorProviderInputConfig,\n\tLoadedGeneratorConfig,\n\tNormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\nexport type GeneratorConfigFileAction =\n\t| \"created\"\n\t| \"updated\"\n\t| \"unchanged\"\n\t| \"skipped\";\n\nexport type GeneratorConfigProviderMode = \"direct\" | \"gateway\" | \"auto\";\n\nexport interface EnsureGeneratorConfigFileOptions {\n\t/** Explicit path relative to cwd or absolute. Defaults to discovered path or `athena.config.ts`. */\n\tconfigPath?: string;\n\tcwd?: string;\n\t/**\n\t * Discover live schemas and auto-fill `provider.schemas`.\n\t * Defaults to true.\n\t */\n\tdiscoverSchemas?: boolean;\n\t/**\n\t * Test/programmatic seam for live schema discovery (defaults to\n\t * `discoverPostgresSchemas`).\n\t */\n\tdiscoverSchemasImpl?: (\n\t\tprovider: GeneratorProviderConfig,\n\t) => Promise<string[]>;\n\t/**\n\t * When false, never write to disk (report would-be action only).\n\t * Defaults to false.\n\t */\n\tdryRun?: boolean;\n\t/**\n\t * When true, rewrite the full modern template even if a file already exists.\n\t * Defaults to false (intelligent surgical update only).\n\t */\n\tforce?: boolean;\n\t/**\n\t * Optional pre-loaded config (skips a second disk load).\n\t */\n\tloaded?: LoadedGeneratorConfig;\n\t/** Provider mode preference when creating a new file. */\n\tmode?: GeneratorConfigProviderMode;\n\t/**\n\t * Pre-resolved provider used for schema discovery (avoids re-normalizing).\n\t */\n\tprovider?: GeneratorProviderConfig;\n\t/**\n\t * Explicit schemas to write when discovery is disabled or fails.\n\t */\n\tschemas?: readonly string[];\n}\n\nexport interface EnsureGeneratorConfigFileResult {\n\tabsolutePath: string;\n\taction: GeneratorConfigFileAction;\n\tchanges: string[];\n\tcontent?: string;\n\tdiscoveryError?: string;\n\tmode: \"direct\" | \"gateway\";\n\tpath: string;\n\treason?: string;\n\t/** How `schemas` were chosen for this ensure pass. */\n\tschemaProvenance: GeneratorSchemaProvenance;\n\tschemas: string[];\n}\n\ntype DetectedMode = \"direct\" | \"gateway\";\n\n/**\n * Picks a provider mode from env when the caller did not force one.\n * Prefers direct when a connection string is present; otherwise gateway.\n * Callers that need `.env*` awareness should apply project env first\n * (`applyGeneratorProjectEnv` / `resolveGeneratorDatabaseAuthority`).\n */\nexport function detectGeneratorProviderMode(\n\tpreferred: GeneratorConfigProviderMode = \"auto\",\n): DetectedMode {\n\treturn detectAuthorityMode(preferred);\n}\n\nfunction formatStringArray(values: readonly string[], indent: string): string {\n\tif (values.length === 0) {\n\t\treturn \"[]\";\n\t}\n\tconst inner = values\n\t\t.map((value) => `${indent}  ${JSON.stringify(value)}`)\n\t\t.join(\",\\n\");\n\treturn `[\\n${inner},\\n${indent}]`;\n}\n\nfunction buildDirectProviderBlock(schemas: readonly string[]): string {\n\treturn `  provider: {\n    kind: \"postgres\",\n    mode: \"direct\",\n    connectionString: generatorEnv(\"DATABASE_URL\"),\n    database: generatorEnv(\"ATHENA_GENERATOR_DB\", { optional: true }),\n    schemas: ${formatStringArray(schemas, \"    \")},\n  }`;\n}\n\nfunction buildGatewayProviderBlock(schemas: readonly string[]): string {\n\treturn `  provider: {\n    kind: \"postgres\",\n    mode: \"gateway\",\n    gatewayUrl: generatorEnv(\"ATHENA_URL\"),\n    apiKey: generatorEnv(\"ATHENA_API_KEY\"),\n    client: generatorEnv(\"ATHENA_CLIENT\", { optional: true }),\n    database: generatorEnv(\"ATHENA_GENERATOR_DB\", { default: \"postgres\" }),\n    schemas: ${formatStringArray(schemas, \"    \")},\n  }`;\n}\n\n/**\n * Renders a modern, typed `athena.config.ts` using `defineGeneratorConfig` + `generatorEnv`.\n * Secrets stay env-backed so gateway and direct modes both work without hardcoding keys.\n */\nexport function renderGeneratorConfigFile(options: {\n\tmode: DetectedMode;\n\tschemas?: readonly string[];\n}): string {\n\tconst schemas =\n\t\toptions.schemas && options.schemas.length > 0\n\t\t\t? [...options.schemas]\n\t\t\t: [...DEFAULT_POSTGRES_SCHEMAS];\n\n\tconst providerBlock =\n\t\toptions.mode === \"gateway\"\n\t\t\t? buildGatewayProviderBlock(schemas)\n\t\t\t: buildDirectProviderBlock(schemas);\n\n\treturn `import { defineAthenaConfig, generatorEnv } from \"@xylex-group/athena\";\n\nexport default defineAthenaConfig({\n${providerBlock},\n  migrations: {\n    directory: \"athena/migrations\",\n  },\n  output: {\n    format: \"table-builder\",\n    preset: \"athena-direct\",\n    targets: {\n      model: \"athena/generated/models/{schema_kebab}/{model_kebab}.ts\",\n      schema: \"athena/generated/schema/{schema_kebab}.ts\",\n      database: \"athena/generated/relations.ts\",\n      registry: \"athena/generated/registry.ts\",\n    },\n    placeholderMap: {\n      namespace: \"athena\",\n    },\n  },\n  naming: {\n    modelType: \"pascal\",\n    modelConst: \"camel\",\n    schemaConst: \"camel\",\n    databaseConst: \"camel\",\n    registryConst: \"camel\",\n  },\n  features: {\n    emitRelations: true,\n    emitRegistry: true,\n  },\n  experimental: {\n    postgresGatewayIntrospection: false,\n    scyllaProviderContracts: true,\n  },\n});\n`;\n}\n\nfunction resolveConfigPath(\n\tcwd: string,\n\tconfigPath?: string,\n): {\n\tabsolutePath: string;\n\trelativePath: string;\n\texists: boolean;\n} {\n\tif (configPath) {\n\t\tconst absolutePath = resolve(cwd, configPath);\n\t\treturn {\n\t\t\tabsolutePath,\n\t\t\texists: existsSync(absolutePath),\n\t\t\trelativePath: configPath.replace(/\\\\/g, \"/\"),\n\t\t};\n\t}\n\n\tconst discovered = findGeneratorConfigPath(cwd);\n\tif (discovered) {\n\t\tconst relativePath = discovered.startsWith(cwd)\n\t\t\t? discovered\n\t\t\t\t\t.slice(cwd.length)\n\t\t\t\t\t.replace(/^[/\\\\]/, \"\")\n\t\t\t\t\t.replace(/\\\\/g, \"/\")\n\t\t\t: \"athena.config.ts\";\n\t\treturn {\n\t\t\tabsolutePath: discovered,\n\t\t\texists: true,\n\t\t\trelativePath,\n\t\t};\n\t}\n\n\tconst absolutePath = resolve(cwd, \"athena.config.ts\");\n\treturn {\n\t\tabsolutePath,\n\t\texists: false,\n\t\trelativePath: \"athena.config.ts\",\n\t};\n}\n\nfunction providerModeFromConfig(\n\tprovider: GeneratorProviderConfig | GeneratorProviderInputConfig | undefined,\n\tpreferred: GeneratorConfigProviderMode,\n): DetectedMode {\n\tif (provider && provider.kind === \"postgres\") {\n\t\tif (provider.mode === \"gateway\") {\n\t\t\treturn \"gateway\";\n\t\t}\n\t\tif (provider.mode === \"direct\") {\n\t\t\treturn \"direct\";\n\t\t}\n\t}\n\treturn detectGeneratorProviderMode(preferred);\n}\n\nfunction schemasFromNormalized(\n\tconfig: NormalizedAthenaGeneratorConfig,\n): string[] {\n\tif (config.provider.kind !== \"postgres\") {\n\t\treturn [...DEFAULT_POSTGRES_SCHEMAS];\n\t}\n\treturn normalizeSchemaSelection(config.provider.schemas);\n}\n\n/**\n * Updates only the `schemas:` value inside an existing TypeScript config source.\n * Supports:\n * - `schemas: [\"public\", \"athena\"]`\n * - `schemas: generatorEnv.list(\"...\", { default: [\"public\"] })`\n *\n * Returns undefined when the file cannot be updated surgically (caller may full-render).\n */\nexport function patchSchemasInConfigSource(\n\tsource: string,\n\tschemas: readonly string[],\n): string | undefined {\n\tconst formattedInline = `[${schemas.map((value) => JSON.stringify(value)).join(\", \")}]`;\n\tconst formattedMultiline = formatStringArray(schemas, \"    \");\n\n\t// Prefer generatorEnv.list default updates so env override still works.\n\tconst listDefaultPattern =\n\t\t/(schemas\\s*:\\s*generatorEnv\\.list\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*\\{[\\s\\S]*?default\\s*:\\s*)(\\[[^\\]]*\\])/m;\n\tif (listDefaultPattern.test(source)) {\n\t\treturn source.replace(listDefaultPattern, `$1${formattedInline}`);\n\t}\n\n\t// Literal array assignment on provider.schemas.\n\tconst literalPattern = /(schemas\\s*:\\s*)(\\[[^\\]]*\\])/m;\n\tif (literalPattern.test(source)) {\n\t\tconst usesMultiline = /schemas\\s*:\\s*\\[\\s*\\n/.test(source);\n\t\treturn source.replace(\n\t\t\tliteralPattern,\n\t\t\t`$1${usesMultiline ? formattedMultiline : formattedInline}`,\n\t\t);\n\t}\n\n\t// Missing schemas field: inject after kind/mode block if we can find provider mode.\n\tconst modeLine = /(mode\\s*:\\s*[\"'](?:direct|gateway)[\"']\\s*,)/m;\n\tif (modeLine.test(source)) {\n\t\treturn source.replace(modeLine, `$1\\n    schemas: ${formattedInline},`);\n\t}\n\treturn undefined;\n}\n\nfunction extractLiteralSchemas(source: string): string[] | undefined {\n\tconst listDefaultMatch = source.match(\n\t\t/schemas\\s*:\\s*generatorEnv\\.list\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*\\{[\\s\\S]*?default\\s*:\\s*(\\[[^\\]]*\\])/m,\n\t);\n\tconst literalMatch =\n\t\tlistDefaultMatch ?? source.match(/schemas\\s*:\\s*(\\[[^\\]]*\\])/m);\n\tif (!literalMatch) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(literalMatch[1].replace(/'/g, '\"')) as unknown;\n\t\tif (!Array.isArray(parsed)) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn parsed\n\t\t\t.map((value) => (typeof value === \"string\" ? value.trim() : \"\"))\n\t\t\t.filter((value) => value.length > 0);\n\t} catch {\n\t\t// Malformed JSON array literal — treat as no schemas.\n\t}\n\treturn undefined;\n}\n\ninterface SchemaResolution {\n\tdiscoveryError?: string;\n\tprovenance: GeneratorSchemaProvenance;\n\tschemas: string[];\n}\n\nasync function resolveDiscoveredSchemas(options: {\n\tcwd: string;\n\tdiscoverSchemas: boolean;\n\tdiscoverSchemasImpl?: (\n\t\tprovider: GeneratorProviderConfig,\n\t) => Promise<string[]>;\n\tprovider?: GeneratorProviderConfig;\n\tloaded?: LoadedGeneratorConfig;\n\texplicit?: readonly string[];\n\tmode: GeneratorConfigProviderMode;\n}): Promise<SchemaResolution> {\n\tif (options.explicit && options.explicit.length > 0) {\n\t\treturn {\n\t\t\tprovenance: \"explicit\",\n\t\t\tschemas: normalizeSchemaSelection(options.explicit),\n\t\t};\n\t}\n\n\tif (!options.discoverSchemas) {\n\t\tif (options.loaded) {\n\t\t\treturn {\n\t\t\t\tprovenance: \"configured\",\n\t\t\t\tschemas: schemasFromNormalized(options.loaded.config),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tprovenance: \"fallback\",\n\t\t\tschemas: [...DEFAULT_POSTGRES_SCHEMAS],\n\t\t};\n\t}\n\n\tlet restoreEnv = () => {};\n\ttry {\n\t\tconst authority = resolveGeneratorDatabaseAuthority({\n\t\t\t// When a loaded/explicit provider is already normalized, env was applied\n\t\t\t// during load — still apply here for environment-probe so `.env*` works.\n\t\t\tapplyProjectEnv: true,\n\t\t\tcwd: options.cwd,\n\t\t\tloaded: options.loaded,\n\t\t\tmode: options.mode,\n\t\t\tprovider: options.provider,\n\t\t});\n\t\trestoreEnv = authority.restoreEnv;\n\n\t\tconst discover = options.discoverSchemasImpl ?? discoverPostgresSchemas;\n\t\tconst discovered = await discover(authority.provider);\n\t\tif (discovered.length === 0) {\n\t\t\tif (options.loaded) {\n\t\t\t\treturn {\n\t\t\t\t\tprovenance: \"configured\",\n\t\t\t\t\tschemas: schemasFromNormalized(options.loaded.config),\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tdiscoveryError:\n\t\t\t\t\t\"live catalog returned no non-system schemas with base tables\",\n\t\t\t\tprovenance: \"fallback\",\n\t\t\t\tschemas: [...DEFAULT_POSTGRES_SCHEMAS],\n\t\t\t};\n\t\t}\n\n\t\tif (options.loaded) {\n\t\t\treturn {\n\t\t\t\tprovenance: \"discovered\",\n\t\t\t\tschemas: mergeSchemaSelections(\n\t\t\t\t\tschemasFromNormalized(options.loaded.config),\n\t\t\t\t\tdiscovered,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\treturn { provenance: \"discovered\", schemas: discovered };\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tif (options.loaded) {\n\t\t\treturn {\n\t\t\t\tdiscoveryError: message,\n\t\t\t\tprovenance: \"configured\",\n\t\t\t\tschemas: schemasFromNormalized(options.loaded.config),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tdiscoveryError: message,\n\t\t\tprovenance: \"fallback\",\n\t\t\tschemas: [...DEFAULT_POSTGRES_SCHEMAS],\n\t\t};\n\t} finally {\n\t\trestoreEnv();\n\t}\n}\n\n/**\n * Creates or intelligently updates `athena.config.ts`.\n *\n * Intelligence rules:\n * - missing file → write modern direct/gateway template with env-backed secrets\n * - existing file + force → full rewrite\n * - existing file → only patch `provider.schemas` when auto-fill finds new values\n * - skip write when content/schemas already match (no churn, safe for typecheck CI)\n * - never removes user-listed schemas that discovery did not return\n * - gateway mode uses the same template surface as direct (generatorEnv for url/key)\n */\nexport async function ensureGeneratorConfigFile(\n\toptions: EnsureGeneratorConfigFileOptions = {},\n): Promise<EnsureGeneratorConfigFileResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst dryRun = options.dryRun === true;\n\tconst discoverSchemas = options.discoverSchemas !== false;\n\tconst force = options.force === true;\n\tconst preferredMode = options.mode ?? \"auto\";\n\n\tconst pathInfo = resolveConfigPath(cwd, options.configPath);\n\tconst changes: string[] = [];\n\n\tlet loaded = options.loaded;\n\tif (!loaded && pathInfo.exists && !force) {\n\t\ttry {\n\t\t\tloaded = await loadGeneratorConfig({\n\t\t\t\tconfigPath: pathInfo.absolutePath,\n\t\t\t\tcwd,\n\t\t\t});\n\t\t} catch {\n\t\t\t// Fall through to create/replace when existing file is unloadable and force is off:\n\t\t\t// only patch if we can read text; otherwise report skipped with reason.\n\t\t}\n\t}\n\n\tconst migrationsRelative =\n\t\tloaded?.config.migrations.directory || DEFAULT_MIGRATIONS_DIRECTORY;\n\tconst layout = await ensureAthenaProjectLayout({\n\t\tapplicationDirectory: resolve(cwd, migrationsRelative),\n\t\tcwd,\n\t\tdryRun,\n\t});\n\tif (layout.createdApplicationMigrations) {\n\t\tchanges.push(`created-migrations-directory: ${migrationsRelative}`);\n\t}\n\tif (layout.createdManagedAuthMigrations) {\n\t\tchanges.push(\n\t\t\t\"created-managed-auth-migrations-directory: athena/managed/auth/migrations\",\n\t\t);\n\t}\n\tif (!dryRun) {\n\t\tconst materialized = await materializeManagedAuthMigrations({\n\t\t\tcwd,\n\t\t\toverwrite: false,\n\t\t});\n\t\tif (materialized.written.length > 0) {\n\t\t\tchanges.push(\n\t\t\t\t`materialized-managed-auth-migrations: ${materialized.written.length}`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Resolve mode with the same project-env authority migrate uses, so\n\t// `.env` / `.env.local` DATABASE_URL is visible before discovery.\n\tlet mode: DetectedMode = providerModeFromConfig(\n\t\tloaded?.config.provider ?? options.provider,\n\t\tpreferredMode,\n\t);\n\ttry {\n\t\tconst authority = resolveGeneratorDatabaseAuthority({\n\t\t\tapplyProjectEnv: true,\n\t\t\tcwd,\n\t\t\tloaded,\n\t\t\tmode: preferredMode,\n\t\t\tprovider: options.provider ?? loaded?.config.provider,\n\t\t});\n\t\tmode = authority.mode;\n\t\tauthority.restoreEnv();\n\t} catch {\n\t\t// Mode probe may fail when connection info is missing; keep preferred/default.\n\t\tmode = providerModeFromConfig(\n\t\t\tloaded?.config.provider ?? options.provider,\n\t\t\tpreferredMode,\n\t\t);\n\t}\n\n\tconst schemaResolution = await resolveDiscoveredSchemas({\n\t\tcwd,\n\t\tdiscoverSchemas,\n\t\tdiscoverSchemasImpl: options.discoverSchemasImpl,\n\t\texplicit: options.schemas,\n\t\tloaded,\n\t\tmode: preferredMode,\n\t\tprovider: options.provider ?? loaded?.config.provider,\n\t});\n\n\tif (schemaResolution.provenance === \"discovered\") {\n\t\tchanges.push(`schemas-discovered: ${schemaResolution.schemas.join(\",\")}`);\n\t} else if (schemaResolution.provenance === \"fallback\") {\n\t\tchanges.push(\n\t\t\t...formatSchemaFallbackMessages({\n\t\t\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\t\t\texpectedLiveSchemas: [\"public\", \"athena\"],\n\t\t\t\tschemas: schemaResolution.schemas,\n\t\t\t}),\n\t\t);\n\t} else if (schemaResolution.discoveryError) {\n\t\tchanges.push(`schema-discovery-failed: ${schemaResolution.discoveryError}`);\n\t}\n\n\t// --- Create path ---\n\tif (!pathInfo.exists || force) {\n\t\tconst content = renderGeneratorConfigFile({\n\t\t\tmode,\n\t\t\tschemas: schemaResolution.schemas,\n\t\t});\n\n\t\tif (pathInfo.exists) {\n\t\t\tchanges.push(\"force-rewrote-config\");\n\t\t} else {\n\t\t\tchanges.push(\"created-modern-config\");\n\t\t}\n\n\t\tif (!dryRun) {\n\t\t\tawait mkdir(dirname(pathInfo.absolutePath), { recursive: true });\n\t\t\tawait writeFile(pathInfo.absolutePath, content, \"utf8\");\n\t\t}\n\n\t\treturn {\n\t\t\tabsolutePath: pathInfo.absolutePath,\n\t\t\taction: pathInfo.exists ? \"updated\" : \"created\",\n\t\t\tchanges,\n\t\t\tcontent,\n\t\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\t\tmode,\n\t\t\tpath: pathInfo.relativePath,\n\t\t\treason: pathInfo.exists ? \"force rewrite\" : \"config file missing\",\n\t\t\tschemaProvenance: schemaResolution.provenance,\n\t\t\tschemas: schemaResolution.schemas,\n\t\t};\n\t}\n\n\t// --- Update path (intelligent, non-destructive) ---\n\tconst existingSource = await readFile(pathInfo.absolutePath, \"utf8\");\n\tconst existingLiteralSchemas = extractLiteralSchemas(existingSource);\n\tconst existingSchemas =\n\t\texistingLiteralSchemas ??\n\t\t(loaded\n\t\t\t? schemasFromNormalized(loaded.config)\n\t\t\t: [...DEFAULT_POSTGRES_SCHEMAS]);\n\n\tif (schemasEqual(existingSchemas, schemaResolution.schemas)) {\n\t\treturn {\n\t\t\tabsolutePath: pathInfo.absolutePath,\n\t\t\taction: \"unchanged\",\n\t\t\tchanges: changes.length > 0 ? changes : [\"schemas-already-current\"],\n\t\t\tcontent: existingSource,\n\t\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\t\tmode,\n\t\t\tpath: pathInfo.relativePath,\n\t\t\treason: \"schemas already match discovered/configured set\",\n\t\t\tschemaProvenance: schemaResolution.provenance,\n\t\t\tschemas: existingSchemas,\n\t\t};\n\t}\n\n\tconst patched = patchSchemasInConfigSource(\n\t\texistingSource,\n\t\tschemaResolution.schemas,\n\t);\n\tif (!patched) {\n\t\treturn {\n\t\t\tabsolutePath: pathInfo.absolutePath,\n\t\t\taction: \"skipped\",\n\t\t\tchanges: [\n\t\t\t\t...changes,\n\t\t\t\t\"could-not-patch-schemas-surgically\",\n\t\t\t\t\"re-run with force=true to rewrite full template\",\n\t\t\t],\n\t\t\tcontent: existingSource,\n\t\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\t\tmode,\n\t\t\tpath: pathInfo.relativePath,\n\t\t\treason:\n\t\t\t\t\"existing config schemas could not be updated surgically without risking a destructive rewrite\",\n\t\t\tschemaProvenance: schemaResolution.provenance,\n\t\t\tschemas: existingSchemas,\n\t\t};\n\t}\n\n\tif (patched === existingSource) {\n\t\treturn {\n\t\t\tabsolutePath: pathInfo.absolutePath,\n\t\t\taction: \"unchanged\",\n\t\t\tchanges: [...changes, \"patch-noop\"],\n\t\t\tcontent: existingSource,\n\t\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\t\tmode,\n\t\t\tpath: pathInfo.relativePath,\n\t\t\treason: \"patch produced identical content\",\n\t\t\tschemaProvenance: schemaResolution.provenance,\n\t\t\tschemas: existingSchemas,\n\t\t};\n\t}\n\n\tchanges.push(\n\t\t`schemas-updated: ${existingSchemas.join(\",\")} -> ${schemaResolution.schemas.join(\",\")}`,\n\t);\n\n\tif (!dryRun) {\n\t\tawait writeFile(pathInfo.absolutePath, patched, \"utf8\");\n\t}\n\n\treturn {\n\t\tabsolutePath: pathInfo.absolutePath,\n\t\taction: \"updated\",\n\t\tchanges,\n\t\tcontent: patched,\n\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\tmode,\n\t\tpath: pathInfo.relativePath,\n\t\treason: \"auto-filled provider.schemas\",\n\t\tschemaProvenance: schemaResolution.provenance,\n\t\tschemas: schemaResolution.schemas,\n\t};\n}\n","import { parseBooleanFlag } from \"../auxiliaries.ts\";\n\ninterface GeneratorEnvBaseOptions<T> {\n\tdefault?: T;\n\toptional?: boolean;\n}\n\nexport type GeneratorEnvStringOptions = GeneratorEnvBaseOptions<string>;\n\nexport type GeneratorEnvBooleanOptions = GeneratorEnvBaseOptions<boolean>;\n\nexport interface GeneratorEnvListOptions\n\textends GeneratorEnvBaseOptions<readonly string[]> {\n\tseparator?: string;\n}\n\nexport type GeneratorEnvJsonOptions<T> = GeneratorEnvBaseOptions<T>;\n\nexport type GeneratorEnvOneOfOptions<T extends string> =\n\tGeneratorEnvBaseOptions<T>;\n\ninterface GeneratorEnvHelper {\n\tboolean(key: string, options?: GeneratorEnvBooleanOptions): boolean;\n\tboolean(\n\t\tkey: string,\n\t\toptions: GeneratorEnvBooleanOptions & { optional: true },\n\t): boolean | undefined;\n\tjson<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T;\n\tjson<T>(\n\t\tkey: string,\n\t\toptions: GeneratorEnvJsonOptions<T> & { optional: true },\n\t): T | undefined;\n\tlist(key: string, options?: GeneratorEnvListOptions): string[];\n\tlist(\n\t\tkey: string,\n\t\toptions: GeneratorEnvListOptions & { optional: true },\n\t): string[] | undefined;\n\toneOf<const T extends string>(\n\t\tkey: string,\n\t\tallowedValues: readonly T[],\n\t\toptions?: GeneratorEnvOneOfOptions<T>,\n\t): T;\n\toneOf<const T extends string>(\n\t\tkey: string,\n\t\tallowedValues: readonly T[],\n\t\toptions: GeneratorEnvOneOfOptions<T> & { optional: true },\n\t): T | undefined;\n\t(key: string, options?: GeneratorEnvStringOptions): string;\n\t(\n\t\tkey: string,\n\t\toptions: GeneratorEnvStringOptions & { optional: true },\n\t): string | undefined;\n}\n\nfunction readEnvStringValue(key: string): string | undefined {\n\tif (typeof process === \"undefined\" || !process.env) {\n\t\treturn;\n\t}\n\n\tconst value = process.env[key];\n\tif (typeof value !== \"string\") {\n\t\treturn;\n\t}\n\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction throwMissingEnvVar(key: string): never {\n\tthrow new Error(\n\t\t`Generator config env var ${key} is missing or empty. Set ${key} or provide a default value.`,\n\t);\n}\n\nfunction resolveEnvValue<T>(\n\tkey: string,\n\toptions: GeneratorEnvBaseOptions<T> | undefined,\n\tresolver: (rawValue: string) => T,\n): T | undefined {\n\tconst rawValue = readEnvStringValue(key);\n\tif (rawValue === undefined) {\n\t\tif (options?.default !== undefined) {\n\t\t\treturn options.default;\n\t\t}\n\t\tif (options?.optional) {\n\t\t\treturn;\n\t\t}\n\t\treturn throwMissingEnvVar(key);\n\t}\n\n\treturn resolver(rawValue);\n}\n\nfunction resolveStringEnv(\n\tkey: string,\n\toptions?: GeneratorEnvStringOptions,\n): string | undefined {\n\treturn resolveEnvValue(key, options, (value) => value);\n}\n\nfunction resolveBooleanEnv(\n\tkey: string,\n\toptions?: GeneratorEnvBooleanOptions,\n): boolean | undefined {\n\treturn resolveEnvValue(key, options, (value) =>\n\t\tparseBooleanFlag(value, false),\n\t);\n}\n\nfunction resolveListEnv(\n\tkey: string,\n\toptions?: GeneratorEnvListOptions,\n): string[] | undefined {\n\treturn resolveEnvValue(key, options, (value) => {\n\t\tconst separator = options?.separator ?? \",\";\n\t\treturn value\n\t\t\t.split(separator)\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.filter(\n\t\t\t\t(entry, index, entries) =>\n\t\t\t\t\tentry.length > 0 && entries.indexOf(entry) === index,\n\t\t\t);\n\t})?.slice();\n}\n\nfunction resolveJsonEnv<T>(\n\tkey: string,\n\toptions?: GeneratorEnvJsonOptions<T>,\n): T | undefined {\n\treturn resolveEnvValue(key, options, (value) => {\n\t\ttry {\n\t\t\treturn JSON.parse(value) as T;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new Error(\n\t\t\t\t`Generator config env var ${key} must contain valid JSON. ${message}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\t});\n}\n\nfunction resolveOneOfEnv<T extends string>(\n\tkey: string,\n\tallowedValues: readonly T[],\n\toptions?: GeneratorEnvOneOfOptions<T>,\n): T | undefined {\n\treturn resolveEnvValue(key, options, (value) => {\n\t\tif (allowedValues.includes(value as T)) {\n\t\t\treturn value as T;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`Generator config env var ${key} must be one of: ${allowedValues.join(\", \")}. Received: ${value}.`,\n\t\t);\n\t});\n}\n\nfunction generatorEnvString(\n\tkey: string,\n\toptions?: GeneratorEnvStringOptions,\n): string;\nfunction generatorEnvString(\n\tkey: string,\n\toptions: GeneratorEnvStringOptions & { optional: true },\n): string | undefined;\nfunction generatorEnvString(\n\tkey: string,\n\toptions?: GeneratorEnvStringOptions,\n): string | undefined {\n\treturn resolveStringEnv(key, options);\n}\n\nfunction generatorEnvBoolean(\n\tkey: string,\n\toptions?: GeneratorEnvBooleanOptions,\n): boolean;\nfunction generatorEnvBoolean(\n\tkey: string,\n\toptions: GeneratorEnvBooleanOptions & { optional: true },\n): boolean | undefined;\nfunction generatorEnvBoolean(\n\tkey: string,\n\toptions?: GeneratorEnvBooleanOptions,\n): boolean | undefined {\n\treturn resolveBooleanEnv(key, options);\n}\n\nfunction generatorEnvList(\n\tkey: string,\n\toptions?: GeneratorEnvListOptions,\n): string[];\nfunction generatorEnvList(\n\tkey: string,\n\toptions: GeneratorEnvListOptions & { optional: true },\n): string[] | undefined;\nfunction generatorEnvList(\n\tkey: string,\n\toptions?: GeneratorEnvListOptions,\n): string[] | undefined {\n\treturn resolveListEnv(key, options);\n}\n\nfunction generatorEnvJson<T>(\n\tkey: string,\n\toptions?: GeneratorEnvJsonOptions<T>,\n): T;\nfunction generatorEnvJson<T>(\n\tkey: string,\n\toptions: GeneratorEnvJsonOptions<T> & { optional: true },\n): T | undefined;\nfunction generatorEnvJson<T>(\n\tkey: string,\n\toptions?: GeneratorEnvJsonOptions<T>,\n): T | undefined {\n\treturn resolveJsonEnv(key, options);\n}\n\nfunction generatorEnvOneOf<const T extends string>(\n\tkey: string,\n\tallowedValues: readonly T[],\n\toptions?: GeneratorEnvOneOfOptions<T>,\n): T;\nfunction generatorEnvOneOf<const T extends string>(\n\tkey: string,\n\tallowedValues: readonly T[],\n\toptions: GeneratorEnvOneOfOptions<T> & { optional: true },\n): T | undefined;\nfunction generatorEnvOneOf<const T extends string>(\n\tkey: string,\n\tallowedValues: readonly T[],\n\toptions?: GeneratorEnvOneOfOptions<T>,\n): T | undefined {\n\treturn 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\tboolean: generatorEnvBoolean,\n\tjson: generatorEnvJson,\n\tlist: generatorEnvList,\n\toneOf: generatorEnvOneOf,\n}) as GeneratorEnvHelper;\n","/**\n * v1 schema snapshot DTO and structured schema-diff results.\n *\n * Canonical structure is AthenaSchemaIr (`src/schema/ir/`). These types remain\n * as a compatibility projection (`ATHENA_SCHEMA_SNAPSHOT_VERSION = 1`).\n * Diff compares IR (v1 snapshots are lifted at the boundary).\n */\n\nimport type { AthenaSchemaIr } from \"../ir/document.ts\";\n\n/** Snapshot IR version. Bump only on breaking shape changes. */\nexport const ATHENA_SCHEMA_SNAPSHOT_VERSION = 1 as const;\n\n/** Schema-qualified table identity (never table-name alone). */\nexport interface SchemaTableIdentity {\n\treadonly schema: string;\n\treadonly name: string;\n\t/** Database axis when the IR is multi-database. */\n\treadonly database?: string;\n}\n\n/** Canonical column type after normalization. */\nexport interface SchemaColumnType {\n\t/**\n\t * Normalized base type name (e.g. `integer`, `bigint`, `text`, `varchar`).\n\t * Postgres aliases are folded in {@link normalizeSchemaSnapshot}.\n\t */\n\treadonly name: string;\n\t/** Character length for `varchar`/`char` when known. */\n\treadonly length?: number | null;\n\t/** Numeric precision when known. */\n\treadonly precision?: number | null;\n\t/** Numeric scale when known. */\n\treadonly scale?: number | null;\n\t/** Array dimensions (`0` = scalar). */\n\treadonly arrayDimensions: number;\n\t/** Enum labels when type is a managed enum. */\n\treadonly enumValues?: readonly string[] | null;\n}\n\n/** Canonical column definition. */\nexport interface SchemaColumn {\n\treadonly name: string;\n\treadonly type: SchemaColumnType;\n\treadonly nullable: boolean;\n\t/**\n\t * Normalized default expression, or `null` when absent.\n\t * Prefer `null` over `undefined` for stable serialization.\n\t */\n\treadonly default: string | null;\n\treadonly isGenerated: boolean;\n}\n\nexport interface SchemaPrimaryKey {\n\t/** Physical name when known; structural identity is `columns` order. */\n\treadonly name?: string | null;\n\treadonly columns: readonly string[];\n}\n\nexport interface SchemaUniqueConstraint {\n\treadonly name?: string | null;\n\treadonly columns: readonly string[];\n}\n\nexport type SchemaReferentialAction =\n\t| \"no_action\"\n\t| \"restrict\"\n\t| \"cascade\"\n\t| \"set_null\"\n\t| \"set_default\";\n\nexport interface SchemaForeignKey {\n\treadonly name?: string | null;\n\treadonly columns: readonly string[];\n\treadonly target: SchemaTableIdentity;\n\treadonly targetColumns: readonly string[];\n\treadonly onDelete: SchemaReferentialAction;\n\treadonly onUpdate: SchemaReferentialAction;\n}\n\nexport interface SchemaIndexColumn {\n\treadonly name: string;\n\t/** `asc` | `desc`; default treated as `asc` after normalize. */\n\treadonly direction?: \"asc\" | \"desc\" | null;\n}\n\nexport interface SchemaIndex {\n\treadonly name?: string | null;\n\treadonly columns: readonly SchemaIndexColumn[];\n\treadonly unique: boolean;\n\t/** Partial index predicate when modeled; otherwise null. */\n\treadonly predicate?: string | null;\n\t/** Index method (`btree`, …) when known. */\n\treadonly method?: string | null;\n}\n\nexport interface SchemaTable {\n\treadonly schema: string;\n\treadonly name: string;\n\treadonly database?: string;\n\treadonly columns: readonly SchemaColumn[];\n\treadonly primaryKey: SchemaPrimaryKey | null;\n\treadonly uniqueConstraints: readonly SchemaUniqueConstraint[];\n\treadonly foreignKeys: readonly SchemaForeignKey[];\n\treadonly indexes: readonly SchemaIndex[];\n}\n\nexport interface SchemaNamespace {\n\treadonly name: string;\n\treadonly tables: readonly SchemaTable[];\n\t/** Database axis when the IR is multi-database; omitted for single-db v1. */\n\treadonly database?: string;\n}\n\n/**\n * Canonical schema snapshot for Athena-managed surfaces.\n * Unmodeled DB objects (views, functions, triggers, extensions, RLS) are out of scope.\n */\nexport interface AthenaSchemaSnapshot {\n\treadonly version: typeof ATHENA_SCHEMA_SNAPSHOT_VERSION;\n\t/** Optional backend hint (`postgresql`, `d1`, …). */\n\treadonly backend?: string | null;\n\treadonly schemas: readonly SchemaNamespace[];\n}\n\nexport type SchemaDiffOperationKind =\n\t| \"create_schema\"\n\t| \"drop_schema\"\n\t| \"create_table\"\n\t| \"drop_table\"\n\t| \"rename_table\"\n\t| \"add_column\"\n\t| \"drop_column\"\n\t| \"rename_column\"\n\t| \"alter_column\"\n\t| \"add_primary_key\"\n\t| \"drop_primary_key\"\n\t| \"add_unique_constraint\"\n\t| \"drop_unique_constraint\"\n\t| \"add_foreign_key\"\n\t| \"drop_foreign_key\"\n\t| \"alter_foreign_key\"\n\t| \"add_index\"\n\t| \"drop_index\";\n\nexport interface SchemaDiffBase {\n\treadonly kind: SchemaDiffOperationKind;\n}\n\nexport interface CreateSchemaOperation extends SchemaDiffBase {\n\treadonly kind: \"create_schema\";\n\treadonly schema: string;\n\t/** Database axis when the IR is multi-database. */\n\treadonly database?: string;\n}\n\nexport interface DropSchemaOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_schema\";\n\treadonly schema: string;\n\t/** Database axis when the IR is multi-database. */\n\treadonly database?: string;\n}\n\nexport interface CreateTableOperation extends SchemaDiffBase {\n\treadonly kind: \"create_table\";\n\treadonly table: SchemaTable;\n}\n\nexport interface DropTableOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_table\";\n\treadonly table: SchemaTableIdentity;\n\t/** Full prior definition when known (for later analysis). */\n\treadonly previous?: SchemaTable | null;\n}\n\nexport interface RenameTableOperation extends SchemaDiffBase {\n\treadonly kind: \"rename_table\";\n\treadonly from: SchemaTableIdentity;\n\treadonly to: SchemaTableIdentity;\n}\n\nexport interface AddColumnOperation extends SchemaDiffBase {\n\treadonly kind: \"add_column\";\n\treadonly table: SchemaTableIdentity;\n\treadonly column: SchemaColumn;\n}\n\nexport interface DropColumnOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_column\";\n\treadonly table: SchemaTableIdentity;\n\treadonly column: SchemaColumn;\n}\n\nexport interface RenameColumnOperation extends SchemaDiffBase {\n\treadonly kind: \"rename_column\";\n\treadonly table: SchemaTableIdentity;\n\treadonly from: string;\n\treadonly to: string;\n}\n\nexport interface SchemaColumnChange<T> {\n\treadonly from: T;\n\treadonly to: T;\n}\n\nexport interface SchemaColumnChanges {\n\treadonly type?: SchemaColumnChange<SchemaColumnType>;\n\treadonly nullable?: SchemaColumnChange<boolean>;\n\treadonly default?: SchemaColumnChange<string | null>;\n\treadonly isGenerated?: SchemaColumnChange<boolean>;\n}\n\n/**\n * Consolidated column alter: one operation per column with explicit before/after deltas.\n * Multiple property changes on the same column stay a single operation (planning-safe).\n */\nexport interface AlterColumnOperation extends SchemaDiffBase {\n\treadonly kind: \"alter_column\";\n\treadonly table: SchemaTableIdentity;\n\treadonly column: string;\n\treadonly before: SchemaColumn;\n\treadonly after: SchemaColumn;\n\treadonly changes: SchemaColumnChanges;\n}\n\nexport interface AddPrimaryKeyOperation extends SchemaDiffBase {\n\treadonly kind: \"add_primary_key\";\n\treadonly table: SchemaTableIdentity;\n\treadonly primaryKey: SchemaPrimaryKey;\n}\n\nexport interface DropPrimaryKeyOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_primary_key\";\n\treadonly table: SchemaTableIdentity;\n\treadonly primaryKey: SchemaPrimaryKey;\n}\n\nexport interface AddUniqueConstraintOperation extends SchemaDiffBase {\n\treadonly kind: \"add_unique_constraint\";\n\treadonly table: SchemaTableIdentity;\n\treadonly unique: SchemaUniqueConstraint;\n}\n\nexport interface DropUniqueConstraintOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_unique_constraint\";\n\treadonly table: SchemaTableIdentity;\n\treadonly unique: SchemaUniqueConstraint;\n}\n\nexport interface AddForeignKeyOperation extends SchemaDiffBase {\n\treadonly kind: \"add_foreign_key\";\n\treadonly table: SchemaTableIdentity;\n\treadonly foreignKey: SchemaForeignKey;\n}\n\nexport interface DropForeignKeyOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_foreign_key\";\n\treadonly table: SchemaTableIdentity;\n\treadonly foreignKey: SchemaForeignKey;\n}\n\nexport interface AlterForeignKeyOperation extends SchemaDiffBase {\n\treadonly kind: \"alter_foreign_key\";\n\treadonly table: SchemaTableIdentity;\n\treadonly before: SchemaForeignKey;\n\treadonly after: SchemaForeignKey;\n}\n\nexport interface AddIndexOperation extends SchemaDiffBase {\n\treadonly kind: \"add_index\";\n\treadonly table: SchemaTableIdentity;\n\treadonly index: SchemaIndex;\n}\n\nexport interface DropIndexOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_index\";\n\treadonly table: SchemaTableIdentity;\n\treadonly index: SchemaIndex;\n}\n\nexport type SchemaDiffOperation =\n\t| CreateSchemaOperation\n\t| DropSchemaOperation\n\t| CreateTableOperation\n\t| DropTableOperation\n\t| RenameTableOperation\n\t| AddColumnOperation\n\t| DropColumnOperation\n\t| RenameColumnOperation\n\t| AlterColumnOperation\n\t| AddPrimaryKeyOperation\n\t| DropPrimaryKeyOperation\n\t| AddUniqueConstraintOperation\n\t| DropUniqueConstraintOperation\n\t| AddForeignKeyOperation\n\t| DropForeignKeyOperation\n\t| AlterForeignKeyOperation\n\t| AddIndexOperation\n\t| DropIndexOperation;\n\nexport interface SchemaDiffSummary {\n\treadonly schemasAdded: number;\n\treadonly schemasRemoved: number;\n\treadonly tablesAdded: number;\n\treadonly tablesRemoved: number;\n\treadonly tablesRenamed: number;\n\treadonly columnsAdded: number;\n\treadonly columnsRemoved: number;\n\treadonly columnsRenamed: number;\n\treadonly columnsChanged: number;\n\treadonly primaryKeysAdded: number;\n\treadonly primaryKeysRemoved: number;\n\treadonly uniquesAdded: number;\n\treadonly uniquesRemoved: number;\n\treadonly foreignKeysAdded: number;\n\treadonly foreignKeysRemoved: number;\n\treadonly foreignKeysChanged: number;\n\treadonly indexesAdded: number;\n\treadonly indexesRemoved: number;\n\treadonly totalOperations: number;\n}\n\nexport interface SchemaDiff {\n\treadonly operations: readonly SchemaDiffOperation[];\n\treadonly summary: SchemaDiffSummary;\n\treadonly isEmpty: boolean;\n}\n\n/**\n * Diff direction: operations transform `from` (actual) into `to` (desired).\n * `add_column` means the column exists in `to` but not in `from`.\n */\nexport interface DiffSchemasInput {\n\treadonly from: AthenaSchemaSnapshot | AthenaSchemaIr;\n\treadonly to: AthenaSchemaSnapshot | AthenaSchemaIr;\n}\n\nexport interface DiffSchemasOptions {\n\t/**\n\t * When true (default), validate both snapshots before comparing.\n\t */\n\treadonly validate?: boolean;\n}\n","import {\n\tATHENA_SCHEMA_SNAPSHOT_VERSION,\n\ttype AthenaSchemaSnapshot,\n\ttype SchemaColumn,\n\ttype SchemaColumnType,\n\ttype SchemaForeignKey,\n\ttype SchemaIndex,\n\ttype SchemaNamespace,\n\ttype SchemaPrimaryKey,\n\ttype SchemaReferentialAction,\n\ttype SchemaTable,\n\ttype SchemaUniqueConstraint,\n} from \"./types.ts\";\n\n/** Postgres type aliases → canonical names (representational noise only). */\nconst TYPE_ALIASES: Readonly<Record<string, string>> = {\n\tint2: \"smallint\",\n\tsmallint: \"smallint\",\n\tint4: \"integer\",\n\tint: \"integer\",\n\tinteger: \"integer\",\n\tint8: \"bigint\",\n\tbigint: \"bigint\",\n\tfloat4: \"real\",\n\treal: \"real\",\n\tfloat8: \"double precision\",\n\t\"double precision\": \"double precision\",\n\tbool: \"boolean\",\n\tboolean: \"boolean\",\n\tvarchar: \"varchar\",\n\t\"character varying\": \"varchar\",\n\tbpchar: \"char\",\n\tcharacter: \"char\",\n\tchar: \"char\",\n\tdecimal: \"numeric\",\n\tnumeric: \"numeric\",\n\ttimestamp: \"timestamp\",\n\t\"timestamp without time zone\": \"timestamp\",\n\ttimestamptz: \"timestamptz\",\n\t\"timestamp with time zone\": \"timestamptz\",\n\ttimetz: \"timetz\",\n\t\"time with time zone\": \"timetz\",\n\ttime: \"time\",\n\t\"time without time zone\": \"time\",\n\tserial: \"integer\",\n\tserial4: \"integer\",\n\tbigserial: \"bigint\",\n\tserial8: \"bigint\",\n\tsmallserial: \"smallint\",\n\tserial2: \"smallint\",\n};\n\n// Transaction-start time only. statement_timestamp() is intentionally excluded:\n// it is statement-start time and must remain distinct from now()/CURRENT_TIMESTAMP.\nconst DEFAULT_NOW_EQUIVALENTS = new Set([\n\t\"now()\",\n\t\"current_timestamp\",\n\t\"current_timestamp()\",\n\t\"transaction_timestamp()\",\n]);\n\n/**\n * Parse a Postgres `format_type` / model type string into a structured type.\n * Does not invent precision when absent.\n */\nexport function parseSchemaTypeString(\n\traw: string,\n\tarrayDimensions = 0,\n): SchemaColumnType {\n\tlet text = raw.trim().toLowerCase();\n\tlet dims = arrayDimensions;\n\n\twhile (text.endsWith(\"[]\")) {\n\t\tdims += 1;\n\t\ttext = text.slice(0, -2).trim();\n\t}\n\n\t// `_int4` style udt array markers\n\tif (text.startsWith(\"_\") && !text.includes(\" \")) {\n\t\tdims = Math.max(dims, 1);\n\t\ttext = text.slice(1);\n\t}\n\n\tlet length: number | null = null;\n\tlet precision: number | null = null;\n\tlet scale: number | null = null;\n\n\tconst paramMatch = text.match(/^([a-z0-9_ ]+?)\\s*\\(([^)]+)\\)$/);\n\tif (paramMatch) {\n\t\ttext = paramMatch[1].trim();\n\t\tconst parts = paramMatch[2].split(\",\").map((p) => p.trim());\n\t\tif (parts.length === 1) {\n\t\t\tconst n = Number(parts[0]);\n\t\t\tif (Number.isFinite(n)) {\n\t\t\t\tlength = n;\n\t\t\t\tprecision = n;\n\t\t\t}\n\t\t} else if (parts.length >= 2) {\n\t\t\tconst p = Number(parts[0]);\n\t\t\tconst s = Number(parts[1]);\n\t\t\tif (Number.isFinite(p)) {\n\t\t\t\tprecision = p;\n\t\t\t}\n\t\t\tif (Number.isFinite(s)) {\n\t\t\t\tscale = s;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst canonical = TYPE_ALIASES[text] ?? text;\n\n\t// length only meaningful for char/varchar; precision/scale for numeric\n\tif (canonical === \"varchar\" || canonical === \"char\") {\n\t\tprecision = null;\n\t\tscale = null;\n\t} else if (canonical === \"numeric\") {\n\t\tlength = null;\n\t} else {\n\t\tlength = null;\n\t\t// keep precision/scale only for numeric-like; drop for others\n\t\tif (canonical !== \"numeric\") {\n\t\t\tprecision = null;\n\t\t\tscale = null;\n\t\t}\n\t}\n\n\treturn {\n\t\tname: canonical,\n\t\tlength,\n\t\tprecision,\n\t\tscale,\n\t\tarrayDimensions: dims,\n\t\tenumValues: null,\n\t};\n}\n\nexport function normalizeSchemaColumnType(\n\ttype: SchemaColumnType,\n): SchemaColumnType {\n\tconst base = parseSchemaTypeString(type.name, type.arrayDimensions ?? 0);\n\tconst name = TYPE_ALIASES[base.name] ?? base.name;\n\n\tlet length = type.length ?? base.length ?? null;\n\tlet precision = type.precision ?? base.precision ?? null;\n\tlet scale = type.scale ?? base.scale ?? null;\n\n\tif (name === \"varchar\" || name === \"char\") {\n\t\tprecision = null;\n\t\tscale = null;\n\t} else if (name === \"numeric\") {\n\t\tlength = null;\n\t} else {\n\t\tlength = null;\n\t\tprecision = null;\n\t\tscale = null;\n\t}\n\n\tconst enumValues =\n\t\ttype.enumValues && type.enumValues.length > 0 ? [...type.enumValues] : null;\n\n\treturn {\n\t\tname,\n\t\tlength,\n\t\tprecision,\n\t\tscale,\n\t\tarrayDimensions: base.arrayDimensions,\n\t\tenumValues,\n\t};\n}\n\n/**\n * Conservative default normalization — only proven-safe syntactic noise.\n */\nexport function normalizeDefaultExpression(\n\tvalue: string | null | undefined,\n): string | null {\n\tif (value === undefined || value === null) {\n\t\treturn null;\n\t}\n\tlet text = value.trim();\n\tif (!text) {\n\t\treturn null;\n\t}\n\n\t// Strip trailing ::type casts repeatedly: 'active'::text → 'active'\n\tfor (let i = 0; i < 4; i += 1) {\n\t\tconst castMatch = text.match(/^(.*?)::[a-zA-Z_][\\w\\s.\"]*$/);\n\t\tif (!castMatch) {\n\t\t\tbreak;\n\t\t}\n\t\ttext = castMatch[1].trim();\n\t}\n\n\t// nextval('seq'::regclass) → nextval('seq')\n\ttext = text.replace(\n\t\t/nextval\\s*\\(\\s*'([^']+)'\\s*::\\s*regclass\\s*\\)/gi,\n\t\t(_m, seq: string) => `nextval('${seq}')`,\n\t);\n\n\tconst lower = text.toLowerCase();\n\tif (DEFAULT_NOW_EQUIVALENTS.has(lower)) {\n\t\treturn \"now()\";\n\t}\n\n\treturn text;\n}\n\nexport function normalizeReferentialAction(\n\taction: SchemaReferentialAction | string | null | undefined,\n): SchemaReferentialAction {\n\tif (!action) {\n\t\treturn \"no_action\";\n\t}\n\tconst normalized = String(action).trim().toLowerCase().replace(/\\s+/g, \"_\");\n\tswitch (normalized) {\n\t\tcase \"a\":\n\t\tcase \"no_action\":\n\t\tcase \"noaction\":\n\t\t\treturn \"no_action\";\n\t\tcase \"r\":\n\t\tcase \"restrict\":\n\t\t\treturn \"restrict\";\n\t\tcase \"c\":\n\t\tcase \"cascade\":\n\t\t\treturn \"cascade\";\n\t\tcase \"n\":\n\t\tcase \"set_null\":\n\t\tcase \"setnull\":\n\t\t\treturn \"set_null\";\n\t\tcase \"d\":\n\t\tcase \"set_default\":\n\t\tcase \"setdefault\":\n\t\t\treturn \"set_default\";\n\t\tdefault:\n\t\t\treturn \"no_action\";\n\t}\n}\n\nfunction normalizeColumn(column: SchemaColumn): SchemaColumn {\n\treturn {\n\t\tname: column.name,\n\t\ttype: normalizeSchemaColumnType(column.type),\n\t\tnullable: Boolean(column.nullable),\n\t\tdefault: normalizeDefaultExpression(column.default),\n\t\tisGenerated: Boolean(column.isGenerated),\n\t};\n}\n\nfunction normalizePrimaryKey(\n\tpk: SchemaPrimaryKey | null | undefined,\n): SchemaPrimaryKey | null {\n\tif (!pk || pk.columns.length === 0) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tname: pk.name ?? null,\n\t\tcolumns: [...pk.columns],\n\t};\n}\n\nfunction normalizeUnique(\n\tunique: SchemaUniqueConstraint,\n): SchemaUniqueConstraint {\n\treturn {\n\t\tname: unique.name ?? null,\n\t\tcolumns: [...unique.columns],\n\t};\n}\n\nfunction normalizeForeignKey(fk: SchemaForeignKey): SchemaForeignKey {\n\tconst database = fk.target.database?.trim();\n\treturn {\n\t\tname: fk.name ?? null,\n\t\tcolumns: [...fk.columns],\n\t\ttarget: {\n\t\t\tschema: fk.target.schema,\n\t\t\tname: fk.target.name,\n\t\t\t...(database ? { database } : {}),\n\t\t},\n\t\ttargetColumns: [...fk.targetColumns],\n\t\tonDelete: normalizeReferentialAction(fk.onDelete),\n\t\tonUpdate: normalizeReferentialAction(fk.onUpdate),\n\t};\n}\n\nfunction normalizeIndex(index: SchemaIndex): SchemaIndex {\n\treturn {\n\t\tname: index.name ?? null,\n\t\tunique: Boolean(index.unique),\n\t\tpredicate: index.predicate?.trim() ? index.predicate.trim() : null,\n\t\tmethod: index.method?.trim() ? index.method.trim().toLowerCase() : null,\n\t\tcolumns: index.columns.map((c) => ({\n\t\t\tname: c.name,\n\t\t\tdirection: c.direction === \"desc\" ? \"desc\" : \"asc\",\n\t\t})),\n\t};\n}\n\nfunction compareByName<T extends { name: string }>(a: T, b: T): number {\n\treturn a.name < b.name ? -1 : a.name > b.name ? 1 : 0;\n}\n\nfunction uniqueSortKey(u: SchemaUniqueConstraint): string {\n\treturn u.columns.join(\"\\0\");\n}\n\nfunction fkSortKey(fk: SchemaForeignKey): string {\n\treturn [\n\t\tfk.columns.join(\",\"),\n\t\tfk.target.database ?? \"\",\n\t\tfk.target.schema,\n\t\tfk.target.name,\n\t\tfk.targetColumns.join(\",\"),\n\t\tfk.onDelete,\n\t\tfk.onUpdate,\n\t\tfk.name ?? \"\",\n\t].join(\"\\0\");\n}\n\nfunction indexSortKey(ix: SchemaIndex): string {\n\treturn [\n\t\tix.unique ? \"1\" : \"0\",\n\t\tix.columns.map((c) => `${c.name}:${c.direction ?? \"asc\"}`).join(\",\"),\n\t\tix.predicate ?? \"\",\n\t\tix.method ?? \"\",\n\t\tix.name ?? \"\",\n\t].join(\"\\0\");\n}\n\nfunction normalizeTable(table: SchemaTable): SchemaTable {\n\tconst columns = table.columns.map(normalizeColumn).sort(compareByName);\n\tconst uniqueConstraints = table.uniqueConstraints\n\t\t.map(normalizeUnique)\n\t\t.sort((a, b) => {\n\t\t\tconst ka = uniqueSortKey(a);\n\t\t\tconst kb = uniqueSortKey(b);\n\t\t\treturn ka < kb ? -1 : ka > kb ? 1 : 0;\n\t\t});\n\tconst foreignKeys = table.foreignKeys\n\t\t.map(normalizeForeignKey)\n\t\t.sort((a, b) => {\n\t\t\tconst ka = fkSortKey(a);\n\t\t\tconst kb = fkSortKey(b);\n\t\t\treturn ka < kb ? -1 : ka > kb ? 1 : 0;\n\t\t});\n\tconst indexes = table.indexes.map(normalizeIndex).sort((a, b) => {\n\t\tconst ka = indexSortKey(a);\n\t\tconst kb = indexSortKey(b);\n\t\treturn ka < kb ? -1 : ka > kb ? 1 : 0;\n\t});\n\n\tconst database = table.database?.trim();\n\treturn {\n\t\tschema: table.schema,\n\t\tname: table.name,\n\t\t...(database ? { database } : {}),\n\t\tcolumns,\n\t\tprimaryKey: normalizePrimaryKey(table.primaryKey),\n\t\tuniqueConstraints,\n\t\tforeignKeys,\n\t\tindexes,\n\t};\n}\n\nfunction normalizeNamespace(ns: SchemaNamespace): SchemaNamespace {\n\tconst tables = ns.tables.map(normalizeTable).sort((a, b) => {\n\t\tif (a.name < b.name) return -1;\n\t\tif (a.name > b.name) return 1;\n\t\treturn 0;\n\t});\n\tconst database = ns.database?.trim();\n\treturn {\n\t\tname: ns.name,\n\t\ttables,\n\t\t...(database && database.length > 0 ? { database } : {}),\n\t};\n}\n\n/**\n * Pure normalization: returns a new snapshot; never mutates input.\n * Idempotent: normalize(normalize(s)) === normalize(s) (deep equality).\n */\nexport function normalizeSchemaSnapshot(\n\tsnapshot: AthenaSchemaSnapshot,\n): AthenaSchemaSnapshot {\n\tconst schemas = snapshot.schemas\n\t\t.map(normalizeNamespace)\n\t\t.sort((a, b) => {\n\t\t\tconst database = (a.database ?? \"\").localeCompare(b.database ?? \"\");\n\t\t\tif (database !== 0) {\n\t\t\t\treturn database;\n\t\t\t}\n\t\t\treturn a.name < b.name ? -1 : a.name > b.name ? 1 : 0;\n\t\t});\n\n\treturn {\n\t\tversion: ATHENA_SCHEMA_SNAPSHOT_VERSION,\n\t\tbackend: snapshot.backend ?? null,\n\t\tschemas,\n\t};\n}\n\nexport function columnTypesEqual(\n\ta: SchemaColumnType,\n\tb: SchemaColumnType,\n): boolean {\n\tconst na = normalizeSchemaColumnType(a);\n\tconst nb = normalizeSchemaColumnType(b);\n\tif (na.name !== nb.name) return false;\n\tif (na.arrayDimensions !== nb.arrayDimensions) return false;\n\tif ((na.length ?? null) !== (nb.length ?? null)) return false;\n\tif ((na.precision ?? null) !== (nb.precision ?? null)) return false;\n\tif ((na.scale ?? null) !== (nb.scale ?? null)) return false;\n\tconst ea = na.enumValues ?? null;\n\tconst eb = nb.enumValues ?? null;\n\tif (ea === null && eb === null) return true;\n\tif (ea === null || eb === null) return false;\n\tif (ea.length !== eb.length) return false;\n\tfor (let i = 0; i < ea.length; i += 1) {\n\t\tif (ea[i] !== eb[i]) return false;\n\t}\n\treturn true;\n}\n\nexport function columnsEqual(a: SchemaColumn, b: SchemaColumn): boolean {\n\treturn (\n\t\ta.name === b.name &&\n\t\tcolumnTypesEqual(a.type, b.type) &&\n\t\ta.nullable === b.nullable &&\n\t\tnormalizeDefaultExpression(a.default) ===\n\t\t\tnormalizeDefaultExpression(b.default) &&\n\t\ta.isGenerated === b.isGenerated\n\t);\n}\n\nexport function primaryKeysEqual(\n\ta: SchemaPrimaryKey | null,\n\tb: SchemaPrimaryKey | null,\n): boolean {\n\tif (a === null && b === null) return true;\n\tif (a === null || b === null) return false;\n\tif (a.columns.length !== b.columns.length) return false;\n\tfor (let i = 0; i < a.columns.length; i += 1) {\n\t\tif (a.columns[i] !== b.columns[i]) return false;\n\t}\n\treturn true;\n}\n","import { parseSchemaTypeString } from \"./diff/normalize.ts\";\nimport type {\n  IntrospectionColumn,\n  IntrospectionRelation,\n  IntrospectionSchema,\n  IntrospectionTable,\n  ModelRelationKind,\n} from \"./types.ts\";\n\nexport interface ColumnQueryRow {\n  array_dimensions: number;\n  column_name: string;\n  data_type: string;\n  /** Present when catalog SQL includes `pg_get_expr`; optional for older mocks. */\n  default_expression?: string | null;\n  has_default: boolean;\n  is_generated: boolean;\n  is_nullable: boolean;\n  schema_name: string;\n  table_name: string;\n  type_kind_code: string;\n  type_oid: number;\n  udt_name: string;\n}\n\nexport interface PrimaryKeyQueryRow {\n  columns: string[];\n  schema_name: string;\n  table_name: string;\n}\n\nexport interface ForeignKeyQueryRow {\n  constraint_name: string;\n  /** Postgres confdeltype: a/r/c/n/d */\n  on_delete?: string | null;\n  /** Postgres confupdtype: a/r/c/n/d */\n  on_update?: string | null;\n  source_columns: string[];\n  source_is_unique: boolean;\n  source_schema: string;\n  source_table: string;\n  target_columns: string[];\n  target_schema: string;\n  target_table: string;\n}\n\nexport interface EnumQueryRow {\n  enum_label: string;\n  type_oid: number;\n}\n\nexport interface UniqueConstraintQueryRow {\n  columns: string[];\n  constraint_name: string;\n  schema_name: string;\n  table_name: string;\n}\n\nexport interface IndexQueryRow {\n  /** Parallel to `columns`: `\"asc\"` | `\"desc\"` (from pg_index.indoption). */\n  column_directions?: string[] | null;\n  columns: string[];\n  index_name: string;\n  is_unique: boolean;\n  method: string | null;\n  predicate: string | null;\n  schema_name: string;\n  table_name: string;\n}\n\ninterface BridgeCandidate {\n  foreignKeys: ForeignKeyQueryRow[];\n  schema: string;\n  table: string;\n}\n\nexport const POSTGRES_CATALOG_SQL = {\n  columns: `\n    SELECT\n      n.nspname AS schema_name,\n      c.relname AS table_name,\n      a.attname AS column_name,\n      format_type(a.atttypid, a.atttypmod) AS data_type,\n      t.typname AS udt_name,\n      t.typtype AS type_kind_code,\n      t.oid AS type_oid,\n      NOT a.attnotnull AS is_nullable,\n      (ad.adbin IS NOT NULL) AS has_default,\n      pg_get_expr(ad.adbin, ad.adrelid) AS default_expression,\n      (a.attgenerated <> '') AS is_generated,\n      a.attndims AS array_dimensions\n    FROM pg_attribute a\n    JOIN pg_class c ON c.oid = a.attrelid\n    JOIN pg_namespace n ON n.oid = c.relnamespace\n    JOIN pg_type t ON t.oid = a.atttypid\n    LEFT JOIN pg_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum\n    WHERE c.relkind IN ('r', 'p')\n      AND a.attnum > 0\n      AND NOT a.attisdropped\n      AND n.nspname = ANY($1::text[])\n    ORDER BY n.nspname, c.relname, a.attnum;\n  `,\n  enums: `\n    SELECT\n      t.oid AS type_oid,\n      e.enumlabel AS enum_label\n    FROM pg_type t\n    JOIN pg_enum e ON e.enumtypid = t.oid\n    ORDER BY t.oid, e.enumsortorder;\n  `,\n  foreignKeys: `\n    SELECT\n      sn.nspname AS source_schema,\n      sc.relname AS source_table,\n      con.conname AS constraint_name,\n      ARRAY_AGG(sa.attname ORDER BY cols.ordinality) AS source_columns,\n      tn.nspname AS target_schema,\n      tc.relname AS target_table,\n      ARRAY_AGG(ta.attname ORDER BY cols.ordinality) AS target_columns,\n      con.confdeltype::text AS on_delete,\n      con.confupdtype::text AS on_update,\n      EXISTS (\n        SELECT 1\n        FROM pg_constraint uq\n        WHERE uq.conrelid = con.conrelid\n          AND uq.contype IN ('p', 'u')\n          AND uq.conkey = con.conkey\n      ) AS source_is_unique\n    FROM pg_constraint con\n    JOIN pg_class sc ON sc.oid = con.conrelid\n    JOIN pg_namespace sn ON sn.oid = sc.relnamespace\n    JOIN pg_class tc ON tc.oid = con.confrelid\n    JOIN pg_namespace tn ON tn.oid = tc.relnamespace\n    JOIN unnest(con.conkey, con.confkey) WITH ORDINALITY AS cols(source_attnum, target_attnum, ordinality) ON TRUE\n    JOIN pg_attribute sa ON sa.attrelid = con.conrelid AND sa.attnum = cols.source_attnum\n    JOIN pg_attribute ta ON ta.attrelid = con.confrelid AND ta.attnum = cols.target_attnum\n    WHERE con.contype = 'f'\n      AND sn.nspname = ANY($1::text[])\n      AND tn.nspname = ANY($1::text[])\n    GROUP BY\n      sn.nspname,\n      sc.relname,\n      con.conname,\n      tn.nspname,\n      tc.relname,\n      con.conkey,\n      con.conrelid,\n      con.confdeltype,\n      con.confupdtype\n    ORDER BY sn.nspname, sc.relname, con.conname;\n  `,\n  uniqueConstraints: `\n    SELECT\n      n.nspname AS schema_name,\n      c.relname AS table_name,\n      con.conname AS constraint_name,\n      ARRAY_AGG(a.attname ORDER BY ck.ordinality) AS columns\n    FROM pg_constraint con\n    JOIN pg_class c ON c.oid = con.conrelid\n    JOIN pg_namespace n ON n.oid = c.relnamespace\n    JOIN unnest(con.conkey) WITH ORDINALITY AS ck(attnum, ordinality) ON TRUE\n    JOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = ck.attnum\n    WHERE con.contype = 'u'\n      AND n.nspname = ANY($1::text[])\n    GROUP BY n.nspname, c.relname, con.conname\n    ORDER BY n.nspname, c.relname, con.conname;\n  `,\n  indexes: `\n    SELECT\n      n.nspname AS schema_name,\n      t.relname AS table_name,\n      i.relname AS index_name,\n      ix.indisunique AS is_unique,\n      am.amname AS method,\n      pg_get_expr(ix.indpred, ix.indrelid) AS predicate,\n      ARRAY_AGG(a.attname ORDER BY cols.ordinality) AS columns,\n      ARRAY_AGG(\n        CASE\n          WHEN ((ix.indoption::int2[])[cols.ordinality] & 1) = 1 THEN 'desc'\n          ELSE 'asc'\n        END\n        ORDER BY cols.ordinality\n      ) AS column_directions\n    FROM pg_index ix\n    JOIN pg_class i ON i.oid = ix.indexrelid\n    JOIN pg_class t ON t.oid = ix.indrelid\n    JOIN pg_namespace n ON n.oid = t.relnamespace\n    JOIN pg_am am ON am.oid = i.relam\n    JOIN unnest(ix.indkey) WITH ORDINALITY AS cols(attnum, ordinality) ON TRUE\n    JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = cols.attnum\n    WHERE n.nspname = ANY($1::text[])\n      AND t.relkind IN ('r', 'p')\n      AND NOT ix.indisprimary\n      AND cols.attnum > 0\n    GROUP BY\n      n.nspname,\n      t.relname,\n      i.relname,\n      ix.indisunique,\n      am.amname,\n      ix.indpred,\n      ix.indrelid,\n      ix.indoption\n    ORDER BY n.nspname, t.relname, i.relname;\n  `,\n  primaryKeys: `\n    SELECT\n      n.nspname AS schema_name,\n      c.relname AS table_name,\n      ARRAY_AGG(a.attname ORDER BY ck.ordinality) AS columns\n    FROM pg_constraint con\n    JOIN pg_class c ON c.oid = con.conrelid\n    JOIN pg_namespace n ON n.oid = c.relnamespace\n    JOIN unnest(con.conkey) WITH ORDINALITY AS ck(attnum, ordinality) ON TRUE\n    JOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = ck.attnum\n    WHERE con.contype = 'p'\n      AND n.nspname = ANY($1::text[])\n    GROUP BY n.nspname, c.relname\n    ORDER BY n.nspname, c.relname;\n  `,\n} as const;\n\nfunction tableKey(schema: string, table: string): string {\n  return `${schema}.${table}`;\n}\n\nfunction relationKey(...parts: string[]): string {\n  const base = parts\n    .join(\"_\")\n    .replace(/[^A-Za-z0-9_]+/g, \"_\")\n    .replace(/^_+|_+$/g, \"\");\n  return base.length > 0 ? base : \"relation\";\n}\n\nfunction toTypeKind(code: string): IntrospectionColumn[\"typeKind\"] {\n  switch (code) {\n    case \"e\":\n      return \"enum\";\n    case \"d\":\n      return \"domain\";\n    case \"r\":\n      return \"range\";\n    case \"m\":\n      return \"multirange\";\n    case \"c\":\n      return \"composite\";\n    default:\n      return \"scalar\";\n  }\n}\n\nfunction escapeSqlLiteral(value: string): string {\n  return value.replace(/'/g, \"''\");\n}\n\nfunction parsePostgresArrayLiteral(text: string): string[] {\n  const body = text.slice(1, -1).trim();\n  if (!body) {\n    return [];\n  }\n\n  const values: string[] = [];\n  let current = \"\";\n  let inQuotes = false;\n  let escaped = false;\n\n  for (const char of body) {\n    if (escaped) {\n      current += char;\n      escaped = false;\n      continue;\n    }\n    if (char === \"\\\\\") {\n      escaped = true;\n      continue;\n    }\n    if (char === '\"') {\n      inQuotes = !inQuotes;\n      continue;\n    }\n    if (char === \",\" && !inQuotes) {\n      values.push(current);\n      current = \"\";\n      continue;\n    }\n    current += char;\n  }\n\n  values.push(current);\n  return values\n    .map((value) => value.trim())\n    .filter((value) => value.length > 0);\n}\n\nfunction coerceStringArray(value: unknown): string[] {\n  if (Array.isArray(value)) {\n    return value\n      .map((item) => (typeof item === \"string\" ? item : String(item)))\n      .map((item) => item.trim())\n      .filter((item) => item.length > 0);\n  }\n\n  if (typeof value === \"string\") {\n    const trimmed = value.trim();\n    if (!trimmed) {\n      return [];\n    }\n\n    if (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\")) {\n      try {\n        const parsed = JSON.parse(trimmed) as unknown;\n        return coerceStringArray(parsed);\n      } catch {\n        // Fall through to more permissive parsing paths.\n      }\n    }\n\n    if (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) {\n      return parsePostgresArrayLiteral(trimmed);\n    }\n\n    return trimmed\n      .split(\",\")\n      .map((item) => item.trim())\n      .filter((item) => item.length > 0);\n  }\n\n  return [];\n}\n\nexport function normalizePostgresCatalogSchemas(\n  schemas?: readonly string[]\n): string[] {\n  const normalized: string[] = [];\n  const seen = new Set<string>();\n\n  for (const value of schemas ?? []) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    seen.add(schema);\n    normalized.push(schema);\n  }\n\n  return normalized.length > 0 ? normalized : [\"public\"];\n}\n\nexport function buildSchemaArrayLiteral(schemas: readonly string[]): string {\n  const normalized = normalizePostgresCatalogSchemas(schemas);\n  const literals = normalized\n    .map((schema) => `'${escapeSqlLiteral(schema)}'`)\n    .join(\", \");\n  return `ARRAY[${literals}]`;\n}\n\nfunction inlineSchemaLiteral(sql: string, schemas: readonly string[]): string {\n  const schemaArray = `${buildSchemaArrayLiteral(schemas)}::text[]`;\n  return sql.replace(/\\$1::text\\[\\]/g, schemaArray);\n}\n\nexport function buildGatewayCatalogQueries(schemas: readonly string[]): {\n  columns: string;\n  enums: string;\n  primaryKeys: string;\n  foreignKeys: string;\n  uniqueConstraints: string;\n  indexes: string;\n} {\n  return {\n    columns: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.columns, schemas),\n    enums: POSTGRES_CATALOG_SQL.enums,\n    foreignKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.foreignKeys, schemas),\n    indexes: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.indexes, schemas),\n    primaryKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.primaryKeys, schemas),\n    uniqueConstraints: inlineSchemaLiteral(\n      POSTGRES_CATALOG_SQL.uniqueConstraints,\n      schemas\n    ),\n  };\n}\n\nexport class PostgresCatalogSnapshotAssembler {\n  private readonly schemas: Record<string, IntrospectionSchema> = {};\n\n  addColumnRows(columnRows: ColumnQueryRow[], enumMap: Map<number, string[]>) {\n    for (const row of columnRows) {\n      const table = this.ensureTable(row.schema_name, row.table_name);\n      const parsedType = parseSchemaTypeString(\n        row.data_type,\n        row.array_dimensions ?? 0\n      );\n      const isExactNumeric =\n        parsedType.name === \"numeric\" || row.udt_name.toLowerCase() === \"numeric\" ||\n        row.udt_name.toLowerCase() === \"decimal\" ||\n        row.udt_name.toLowerCase() === \"money\";\n      table.columns[row.column_name] = {\n        arrayDimensions: row.array_dimensions ?? 0,\n        dataType: row.data_type,\n        defaultExpression: row.default_expression ?? null,\n        enumValues: enumMap.get(row.type_oid),\n        hasDefault: row.has_default,\n        isGenerated: row.is_generated,\n        isNullable: row.is_nullable,\n        isPrimaryKey: false,\n        name: row.column_name,\n        ...(isExactNumeric\n          ? {\n              numericPrecision: parsedType.precision,\n              numericScale: parsedType.scale,\n            }\n          : {}),\n        typeKind: toTypeKind(row.type_kind_code),\n        udtName: row.udt_name,\n      };\n    }\n  }\n\n  addPrimaryKeyRows(primaryKeyRows: PrimaryKeyQueryRow[]) {\n    for (const row of primaryKeyRows) {\n      const table = this.ensureTable(row.schema_name, row.table_name);\n      const primaryKeyColumns = coerceStringArray(row.columns);\n      row.columns = primaryKeyColumns;\n      table.primaryKey = primaryKeyColumns;\n      for (const columnName of primaryKeyColumns) {\n        const column = table.columns[columnName];\n        if (column) {\n          column.isPrimaryKey = true;\n        }\n      }\n    }\n  }\n\n  addForeignKeyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\n    for (const row of foreignKeyRows) {\n      const sourceTable = this.ensureTable(row.source_schema, row.source_table);\n      const targetTable = this.ensureTable(row.target_schema, row.target_table);\n      const sourceColumns = coerceStringArray(row.source_columns);\n      const targetColumns = coerceStringArray(row.target_columns);\n      row.source_columns = sourceColumns;\n      row.target_columns = targetColumns;\n\n      const sourceRelationKind: ModelRelationKind = row.source_is_unique\n        ? \"one-to-one\"\n        : \"many-to-one\";\n      this.upsertRelation(\n        sourceTable,\n        relationKey(row.constraint_name, row.target_table),\n        {\n          kind: sourceRelationKind,\n          name: row.constraint_name,\n          onDelete: row.on_delete ?? null,\n          onUpdate: row.on_update ?? null,\n          sourceColumns,\n          targetColumns,\n          targetModel: row.target_table,\n          targetSchema: row.target_schema,\n        }\n      );\n\n      const targetRelationKind: ModelRelationKind = row.source_is_unique\n        ? \"one-to-one\"\n        : \"one-to-many\";\n      this.upsertRelation(targetTable, relationKey(row.source_table), {\n        kind: targetRelationKind,\n        name: relationKey(row.source_table, row.constraint_name),\n        sourceColumns: targetColumns,\n        targetColumns: sourceColumns,\n        targetModel: row.source_table,\n        targetSchema: row.source_schema,\n      });\n    }\n  }\n\n  addUniqueConstraintRows(rows: UniqueConstraintQueryRow[]) {\n    for (const row of rows) {\n      const table = this.ensureTable(row.schema_name, row.table_name);\n      const columns = coerceStringArray(row.columns);\n      table.uniqueConstraints = table.uniqueConstraints ?? [];\n      table.uniqueConstraints.push({\n        columns,\n        name: row.constraint_name,\n      });\n    }\n  }\n\n  addIndexRows(rows: IndexQueryRow[]) {\n    for (const row of rows) {\n      const table = this.ensureTable(row.schema_name, row.table_name);\n      const columns = coerceStringArray(row.columns);\n      const rawDirections = coerceStringArray(row.column_directions);\n      const columnDirections = columns.map((_, i) =>\n        rawDirections[i]?.toLowerCase() === \"desc\"\n          ? (\"desc\" as const)\n          : (\"asc\" as const)\n      );\n      // Skip unique indexes that already mirror a unique constraint of the same columns.\n      const uniqueCols = new Set(\n        (table.uniqueConstraints ?? []).map((u) => u.columns.join(\"\\0\"))\n      );\n      if (row.is_unique && uniqueCols.has(columns.join(\"\\0\"))) {\n        continue;\n      }\n      table.indexes = table.indexes ?? [];\n      table.indexes.push({\n        columnDirections,\n        columns,\n        method: row.method ?? null,\n        name: row.index_name,\n        predicate: row.predicate ?? null,\n        unique: Boolean(row.is_unique),\n      });\n    }\n  }\n\n  addManyToManyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\n    const bySourceTable = new Map<string, BridgeCandidate>();\n    for (const fk of foreignKeyRows) {\n      const key = tableKey(fk.source_schema, fk.source_table);\n      const current = bySourceTable.get(key) ?? {\n        foreignKeys: [],\n        schema: fk.source_schema,\n        table: fk.source_table,\n      };\n      current.foreignKeys.push(fk);\n      bySourceTable.set(key, current);\n    }\n\n    for (const candidate of bySourceTable.values()) {\n      const bridgeTable =\n        this.schemas[candidate.schema]?.tables[candidate.table];\n      if (!bridgeTable) {\n        continue;\n      }\n\n      const primaryKey = bridgeTable.primaryKey;\n      if (candidate.foreignKeys.length !== 2 || primaryKey.length === 0) {\n        continue;\n      }\n\n      const combinedForeignColumns = Array.from(\n        new Set(candidate.foreignKeys.flatMap((fk) => fk.source_columns))\n      );\n      if (\n        combinedForeignColumns.length !== primaryKey.length ||\n        !primaryKey.every((column) => combinedForeignColumns.includes(column))\n      ) {\n        continue;\n      }\n\n      const [first, second] = candidate.foreignKeys;\n      const firstTarget =\n        this.schemas[first.target_schema]?.tables[first.target_table];\n      const secondTarget =\n        this.schemas[second.target_schema]?.tables[second.target_table];\n      if (!(firstTarget && secondTarget)) {\n        continue;\n      }\n\n      this.upsertRelation(firstTarget, relationKey(second.target_table), {\n        kind: \"many-to-many\",\n        name: relationKey(\n          candidate.table,\n          first.constraint_name,\n          second.constraint_name\n        ),\n        sourceColumns: first.target_columns,\n        targetColumns: second.target_columns,\n        targetModel: second.target_table,\n        targetSchema: second.target_schema,\n        through: {\n          model: candidate.table,\n          schema: candidate.schema,\n          sourceColumns: first.source_columns,\n          targetColumns: second.source_columns,\n        },\n      });\n\n      this.upsertRelation(secondTarget, relationKey(first.target_table), {\n        kind: \"many-to-many\",\n        name: relationKey(\n          candidate.table,\n          second.constraint_name,\n          first.constraint_name\n        ),\n        sourceColumns: second.target_columns,\n        targetColumns: first.target_columns,\n        targetModel: first.target_table,\n        targetSchema: first.target_schema,\n        through: {\n          model: candidate.table,\n          schema: candidate.schema,\n          sourceColumns: second.source_columns,\n          targetColumns: first.source_columns,\n        },\n      });\n    }\n  }\n\n  toSchemas(): Record<string, IntrospectionSchema> {\n    return this.schemas;\n  }\n\n  private ensureTable(\n    schemaName: string,\n    tableName: string\n  ): IntrospectionTable {\n    if (!this.schemas[schemaName]) {\n      this.schemas[schemaName] = {\n        name: schemaName,\n        tables: {},\n      };\n    }\n\n    const schema = this.schemas[schemaName];\n    if (!schema.tables[tableName]) {\n      schema.tables[tableName] = {\n        columns: {},\n        indexes: [],\n        name: tableName,\n        primaryKey: [],\n        relations: {},\n        schema: schemaName,\n        uniqueConstraints: [],\n      };\n    }\n\n    return schema.tables[tableName];\n  }\n\n  private upsertRelation(\n    table: IntrospectionTable,\n    baseKey: string,\n    relation: IntrospectionRelation\n  ) {\n    let key = baseKey;\n    let suffix = 2;\n    while (table.relations[key]) {\n      key = `${baseKey}_${suffix}`;\n      suffix += 1;\n    }\n    table.relations[key] = relation;\n  }\n}\n","import {\n  type AthenaPostgresPool,\n  createPostgresPool,\n} from \"../postgres/driver.ts\";\nimport {\n  type ColumnQueryRow,\n  type EnumQueryRow,\n  type ForeignKeyQueryRow,\n  type IndexQueryRow,\n  normalizePostgresCatalogSchemas,\n  POSTGRES_CATALOG_SQL,\n  PostgresCatalogSnapshotAssembler,\n  type PrimaryKeyQueryRow,\n  type UniqueConstraintQueryRow,\n} from \"./postgres-introspection-core.ts\";\nimport type {\n  IntrospectionInspectOptions,\n  IntrospectionSnapshot,\n  SchemaIntrospectionProvider,\n} from \"./types.ts\";\n\n/**\n * Constructor options for the PostgreSQL introspection provider.\n */\nexport interface PostgresIntrospectionProviderOptions {\n  connectionString: string;\n  database?: string;\n  schemas?: readonly string[];\n}\n\nclass PgCatalogClient {\n  constructor(private readonly pool: AthenaPostgresPool) {}\n\n  async queryColumns(schemas: string[]): Promise<ColumnQueryRow[]> {\n    const result = await this.pool.query<ColumnQueryRow>(\n      POSTGRES_CATALOG_SQL.columns,\n      [schemas]\n    );\n    return result.rows;\n  }\n\n  async queryEnums(): Promise<Map<number, string[]>> {\n    const result = await this.pool.query<EnumQueryRow>(\n      POSTGRES_CATALOG_SQL.enums\n    );\n    const enumMap = new Map<number, string[]>();\n    for (const row of result.rows) {\n      const existing = enumMap.get(row.type_oid) ?? [];\n      existing.push(row.enum_label);\n      enumMap.set(row.type_oid, existing);\n    }\n    return enumMap;\n  }\n\n  async queryPrimaryKeys(schemas: string[]): Promise<PrimaryKeyQueryRow[]> {\n    const result = await this.pool.query<PrimaryKeyQueryRow>(\n      POSTGRES_CATALOG_SQL.primaryKeys,\n      [schemas]\n    );\n    return result.rows;\n  }\n\n  async queryForeignKeys(schemas: string[]): Promise<ForeignKeyQueryRow[]> {\n    const result = await this.pool.query<ForeignKeyQueryRow>(\n      POSTGRES_CATALOG_SQL.foreignKeys,\n      [schemas]\n    );\n    return result.rows;\n  }\n\n  async queryUniqueConstraints(\n    schemas: string[]\n  ): Promise<UniqueConstraintQueryRow[]> {\n    const result = await this.pool.query<UniqueConstraintQueryRow>(\n      POSTGRES_CATALOG_SQL.uniqueConstraints,\n      [schemas]\n    );\n    return result.rows;\n  }\n\n  async queryIndexes(schemas: string[]): Promise<IndexQueryRow[]> {\n    const result = await this.pool.query<IndexQueryRow>(\n      POSTGRES_CATALOG_SQL.indexes,\n      [schemas]\n    );\n    return result.rows;\n  }\n}\n\nclass PostgresIntrospectionProvider implements SchemaIntrospectionProvider {\n  readonly backend = \"postgresql\" as const;\n\n  private readonly connectionString: string;\n  private readonly database: string;\n  private readonly schemas: string[];\n\n  constructor(options: PostgresIntrospectionProviderOptions) {\n    this.connectionString = options.connectionString;\n    this.database = options.database ?? \"postgres\";\n    this.schemas = normalizePostgresCatalogSchemas(options.schemas);\n  }\n\n  async inspect(\n    options?: IntrospectionInspectOptions\n  ): Promise<IntrospectionSnapshot> {\n    const schemas =\n          options?.schemas && options.schemas.length > 0\n            ? normalizePostgresCatalogSchemas(options.schemas)\n            : this.schemas;\n        const pool = await createPostgresPool(this.connectionString);\n        const catalogClient = new PgCatalogClient(pool);\n\n    try {\n      const [\n        columnRows,\n        enumMap,\n        primaryKeyRows,\n        foreignKeyRows,\n        uniqueRows,\n        indexRows,\n      ] = await Promise.all([\n        catalogClient.queryColumns(schemas),\n        catalogClient.queryEnums(),\n        catalogClient.queryPrimaryKeys(schemas),\n        catalogClient.queryForeignKeys(schemas),\n        catalogClient.queryUniqueConstraints(schemas),\n        catalogClient.queryIndexes(schemas),\n      ]);\n\n      const assembler = new PostgresCatalogSnapshotAssembler();\n      assembler.addColumnRows(columnRows, enumMap);\n      assembler.addPrimaryKeyRows(primaryKeyRows);\n      assembler.addForeignKeyRows(foreignKeyRows);\n      assembler.addUniqueConstraintRows(uniqueRows);\n      assembler.addIndexRows(indexRows);\n      assembler.addManyToManyRows(foreignKeyRows);\n\n      return {\n        backend: \"postgresql\",\n        database: this.database,\n        generatedAt: new Date().toISOString(),\n        schemas: assembler.toSchemas(),\n      };\n    } finally {\n      await pool.end();\n    }\n  }\n}\n\n/**\n * Creates a PostgreSQL-backed schema introspection provider.\n */\nexport function createPostgresIntrospectionProvider(\n  options: PostgresIntrospectionProviderOptions\n): SchemaIntrospectionProvider {\n  return new PostgresIntrospectionProvider(options);\n}\n","import {\n\tbuildGatewayCatalogQueries,\n\ttype ColumnQueryRow,\n\ttype EnumQueryRow,\n\ttype ForeignKeyQueryRow,\n\ttype IndexQueryRow,\n\tPostgresCatalogSnapshotAssembler,\n\ttype PrimaryKeyQueryRow,\n\ttype UniqueConstraintQueryRow,\n} from \"../schema/postgres-introspection-core.ts\";\nimport { createPostgresIntrospectionProvider } from \"../schema/postgres-provider.ts\";\nimport type {\n\tIntrospectionInspectOptions,\n\tIntrospectionSnapshot,\n\tSchemaIntrospectionProvider,\n} from \"../schema/types.ts\";\nimport { type AthenaClient, createClient } from \"../v3-client-core.ts\";\nimport { normalizeSchemaSelection } from \"./schema-selection.ts\";\nimport type {\n\tGeneratorExperimentalFlags,\n\tGeneratorProviderConfig,\n\tPostgresDirectProviderConfig,\n\tPostgresGatewayProviderConfig,\n\tScyllaDirectProviderConfig,\n} from \"./types.ts\";\n\nclass AthenaGatewayCatalogClient {\n\tconstructor(private readonly client: AthenaClient) {}\n\n\tasync queryRows<T>(query: string): Promise<T[]> {\n\t\tconst result = await this.client.query<T & Record<string, unknown>>(query);\n\t\tif (result.error || result.status < 200 || result.status >= 300) {\n\t\t\tthrow new Error(\n\t\t\t\tresult.error?.message ??\n\t\t\t\t\t`Gateway query failed with status ${result.status}`,\n\t\t\t);\n\t\t}\n\t\treturn (result.data ?? []) as T[];\n\t}\n\n\tasync queryColumns(query: string): Promise<ColumnQueryRow[]> {\n\t\treturn this.queryRows<ColumnQueryRow>(query);\n\t}\n\n\tasync queryEnums(query: string): Promise<Map<number, string[]>> {\n\t\tconst rows = await this.queryRows<EnumQueryRow>(query);\n\t\tconst enumMap = new Map<number, string[]>();\n\t\tfor (const row of rows) {\n\t\t\tconst existing = enumMap.get(row.type_oid) ?? [];\n\t\t\texisting.push(row.enum_label);\n\t\t\tenumMap.set(row.type_oid, existing);\n\t\t}\n\t\treturn enumMap;\n\t}\n\n\tasync queryPrimaryKeys(query: string): Promise<PrimaryKeyQueryRow[]> {\n\t\treturn this.queryRows<PrimaryKeyQueryRow>(query);\n\t}\n\n\tasync queryForeignKeys(query: string): Promise<ForeignKeyQueryRow[]> {\n\t\treturn this.queryRows<ForeignKeyQueryRow>(query);\n\t}\n}\n\nclass AthenaGatewayPostgresIntrospectionProvider\n\timplements SchemaIntrospectionProvider\n{\n\treadonly backend = \"postgresql\" as const;\n\n\tprivate readonly client: AthenaClient;\n\tprivate readonly schemas: string[];\n\n\tconstructor(private readonly config: PostgresGatewayProviderConfig) {\n\t\t// Set unified `url` as well as `db.url` so root/chatWs resolution uses the\n\t\t// configured gateway and is not poisoned by ambient invalid ATHENA_URL env\n\t\t// placeholders (e.g. unexpanded `${ATHENA_URL}`).\n\t\t// Cast through unknown: createClient generics overflow TS depth (TS2589).\n\t\tthis.client = (\n\t\t\tcreateClient as unknown as (config: unknown) => AthenaClient\n\t\t)({\n\t\t\tbackend: {\n\t\t\t\ttype: this.config.backend ?? \"postgresql\",\n\t\t\t},\n\t\t\t// Multi-tenant gateways reject DEFAULT_CLIENT; prefer explicit config.\n\t\t\t// Also pass process.env so ATHENA_CLIENT / ATHENA_GATEWAY_CLIENT still resolve\n\t\t\t// when the field was not normalized into provider config.\n\t\t\tclient: this.config.client,\n\t\t\tdb: { url: this.config.gatewayUrl },\n\t\t\tenv: typeof process === \"undefined\" ? undefined : process.env,\n\t\t\tkey: this.config.apiKey,\n\t\t\turl: this.config.gatewayUrl,\n\t\t});\n\t\tthis.schemas = normalizeSchemaSelection(this.config.schemas);\n\t}\n\n\tasync inspect(\n\t\toptions?: IntrospectionInspectOptions,\n\t): Promise<IntrospectionSnapshot> {\n\t\tconst schemas =\n\t\t\toptions?.schemas && options.schemas.length > 0\n\t\t\t\t? normalizeSchemaSelection(options.schemas)\n\t\t\t\t: this.schemas;\n\n\t\tconst catalogClient = new AthenaGatewayCatalogClient(this.client);\n\t\tconst queries = buildGatewayCatalogQueries(schemas);\n\n\t\tconst [\n\t\t\tcolumnRows,\n\t\t\tenumMap,\n\t\t\tprimaryKeyRows,\n\t\t\tforeignKeyRows,\n\t\t\tuniqueConstraintRows,\n\t\t\tindexRows,\n\t\t] = await Promise.all([\n\t\t\tcatalogClient.queryColumns(queries.columns),\n\t\t\tcatalogClient.queryEnums(queries.enums),\n\t\t\tcatalogClient.queryPrimaryKeys(queries.primaryKeys),\n\t\t\tcatalogClient.queryForeignKeys(queries.foreignKeys),\n\t\t\tcatalogClient.queryRows<UniqueConstraintQueryRow>(\n\t\t\t\tqueries.uniqueConstraints,\n\t\t\t),\n\t\t\tcatalogClient.queryRows<IndexQueryRow>(queries.indexes),\n\t\t]);\n\n\t\tconst assembler = new PostgresCatalogSnapshotAssembler();\n\t\tassembler.addColumnRows(columnRows, enumMap);\n\t\tassembler.addPrimaryKeyRows(primaryKeyRows);\n\t\tassembler.addForeignKeyRows(foreignKeyRows);\n\t\tassembler.addUniqueConstraintRows(uniqueConstraintRows);\n\t\tassembler.addIndexRows(indexRows);\n\t\tassembler.addManyToManyRows(foreignKeyRows);\n\n\t\treturn {\n\t\t\tbackend: \"postgresql\",\n\t\t\tdatabase: this.config.database,\n\t\t\tgeneratedAt: new Date().toISOString(),\n\t\t\tschemas: assembler.toSchemas(),\n\t\t};\n\t}\n}\n\nclass ScyllaIntrospectionProvider implements SchemaIntrospectionProvider {\n\treadonly backend = \"scylladb\" as const;\n\n\tconstructor(private readonly config: ScyllaDirectProviderConfig) {}\n\n\tasync inspect(): Promise<IntrospectionSnapshot> {\n\t\tthrow new Error(\n\t\t\t`Scylla introspection provider is not implemented yet for keyspace ${this.config.keyspace}.`,\n\t\t);\n\t}\n}\n\nfunction createPostgresProvider(\n\tconfig: PostgresDirectProviderConfig,\n): SchemaIntrospectionProvider {\n\treturn createPostgresIntrospectionProvider({\n\t\tconnectionString: config.connectionString,\n\t\tdatabase: config.database,\n\t\tschemas: normalizeSchemaSelection(config.schemas),\n\t});\n}\n\n/**\n * Resolves a runtime introspection provider from generator config.\n */\nexport function resolveGeneratorProvider(\n\tproviderConfig: GeneratorProviderConfig,\n\texperimentalFlags: GeneratorExperimentalFlags,\n): SchemaIntrospectionProvider {\n\tif (providerConfig.kind === \"postgres\" && providerConfig.mode === \"direct\") {\n\t\treturn createPostgresProvider(providerConfig);\n\t}\n\n\tif (providerConfig.kind === \"postgres\" && providerConfig.mode === \"gateway\") {\n\t\treturn new AthenaGatewayPostgresIntrospectionProvider(providerConfig);\n\t}\n\n\tif (providerConfig.kind === \"scylla\") {\n\t\tif (!experimentalFlags.scyllaProviderContracts) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Scylla provider contracts are disabled. Set experimental.scyllaProviderContracts=true to enable placeholders.\",\n\t\t\t);\n\t\t}\n\t\treturn new ScyllaIntrospectionProvider(providerConfig);\n\t}\n\n\tthrow new Error(\n\t\t`Unsupported generator provider kind: ${(providerConfig as { kind?: string }).kind ?? \"unknown\"}`,\n\t);\n}\n","export function slugify(input: string): string {\n\treturn input\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\")\n\t\t.slice(0, 64);\n}\n","import { slugify } from \"../utils/slugify.ts\";\nimport type { NamingStyle } from \"./types.ts\";\n\nconst IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nconst RESERVED_IDENTIFIERS = new Set([\n\t\"break\",\n\t\"case\",\n\t\"catch\",\n\t\"class\",\n\t\"const\",\n\t\"continue\",\n\t\"debugger\",\n\t\"default\",\n\t\"delete\",\n\t\"do\",\n\t\"else\",\n\t\"enum\",\n\t\"export\",\n\t\"extends\",\n\t\"false\",\n\t\"finally\",\n\t\"for\",\n\t\"function\",\n\t\"if\",\n\t\"import\",\n\t\"in\",\n\t\"instanceof\",\n\t\"new\",\n\t\"null\",\n\t\"return\",\n\t\"super\",\n\t\"switch\",\n\t\"this\",\n\t\"throw\",\n\t\"true\",\n\t\"try\",\n\t\"typeof\",\n\t\"var\",\n\t\"void\",\n\t\"while\",\n\t\"with\",\n\t\"as\",\n\t\"implements\",\n\t\"interface\",\n\t\"let\",\n\t\"package\",\n\t\"private\",\n\t\"protected\",\n\t\"public\",\n\t\"static\",\n\t\"yield\",\n\t\"any\",\n\t\"boolean\",\n\t\"constructor\",\n\t\"declare\",\n\t\"get\",\n\t\"module\",\n\t\"require\",\n\t\"number\",\n\t\"set\",\n\t\"string\",\n\t\"symbol\",\n\t\"type\",\n\t\"from\",\n\t\"of\",\n]);\n\nfunction splitWords(input: string): string[] {\n\treturn input\n\t\t.trim()\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n\t\t.replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, \"$1 $2\")\n\t\t.replace(/[^A-Za-z0-9]+/g, \" \")\n\t\t.split(\" \")\n\t\t.map((word) => word.trim())\n\t\t.filter((word) => word.length > 0);\n}\n\nfunction capitalize(word: string): string {\n\treturn word.length > 0\n\t\t? `${word[0].toUpperCase()}${word.slice(1).toLowerCase()}`\n\t\t: word;\n}\n\nfunction ensureValidIdentifier(candidate: string, fallback: string): string {\n\tconst normalized = candidate.length > 0 ? candidate : fallback;\n\tconst prefixed = /^[0-9]/.test(normalized) ? `_${normalized}` : normalized;\n\tif (RESERVED_IDENTIFIERS.has(prefixed)) {\n\t\treturn `${prefixed}_value`;\n\t}\n\treturn prefixed;\n}\n\nexport function applyNamingStyle(input: string, style: NamingStyle): string {\n\tconst words = splitWords(input);\n\tif (words.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tswitch (style) {\n\t\tcase \"preserve\":\n\t\t\treturn input;\n\t\tcase \"camel\": {\n\t\t\tconst [first, ...rest] = words;\n\t\t\treturn `${first.toLowerCase()}${rest.map(capitalize).join(\"\")}`;\n\t\t}\n\t\tcase \"pascal\":\n\t\t\treturn words.map(capitalize).join(\"\");\n\t\tcase \"snake\":\n\t\t\treturn words.map((word) => word.toLowerCase()).join(\"_\");\n\t\tcase \"kebab\":\n\t\t\treturn slugify(words.join(\"-\"));\n\t\tdefault:\n\t\t\treturn input;\n\t}\n}\n\nexport function toSafeIdentifier(\n\tinput: string,\n\tstyle: NamingStyle,\n\tfallback = \"value\",\n): string {\n\tconst transformed = applyNamingStyle(input, style);\n\tconst normalized = transformed\n\t\t.replace(/[^A-Za-z0-9_$]+/g, \"_\")\n\t\t.replace(/^_+|_+$/g, \"\");\n\tconst fallbackValue = splitWords(input).join(\"\");\n\treturn ensureValidIdentifier(\n\t\tnormalized.length > 0 ? normalized : fallbackValue,\n\t\tfallback,\n\t);\n}\n\n/**\n * Render an object/type property key.\n *\n * Quotes only when the name is not a valid ECMAScript IdentifierName.\n * Reserved words such as `public` stay unquoted — they are legal as property\n * names in object literals and type members (unlike bare binding identifiers).\n */\nexport function escapeTypePropertyName(propertyName: string): string {\n\tif (IDENTIFIER_PATTERN.test(propertyName)) {\n\t\treturn propertyName;\n\t}\n\treturn `'${propertyName.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`;\n}\n\nexport function escapeStringLiteral(value: string): string {\n\treturn `'${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`;\n}\n","import type { IntrospectionColumn } from \"../schema/types.ts\";\n\nconst NUMBER_TYPES = new Set([\n\t\"int2\",\n\t\"int4\",\n\t\"float4\",\n\t\"float8\",\n\t\"smallint\",\n\t\"integer\",\n\t\"real\",\n\t\"double precision\",\n]);\n\nconst STRING_NUMERIC_TYPES = new Set([\n\t\"int8\",\n\t\"bigint\",\n\t\"serial8\",\n\t\"bigserial\",\n\t\"numeric\",\n\t\"decimal\",\n\t\"money\",\n]);\n\nconst TEXT_TYPES = new Set([\n\t\"char\",\n\t\"bpchar\",\n\t\"varchar\",\n\t\"character varying\",\n\t\"text\",\n\t\"citext\",\n\t\"name\",\n\t\"uuid\",\n\t\"date\",\n\t\"time\",\n\t\"timetz\",\n\t\"timestamp\",\n\t\"timestamptz\",\n\t\"interval\",\n\t\"inet\",\n\t\"cidr\",\n\t\"macaddr\",\n\t\"macaddr8\",\n\t\"point\",\n\t\"line\",\n\t\"lseg\",\n\t\"box\",\n\t\"path\",\n\t\"polygon\",\n\t\"circle\",\n\t\"bit\",\n\t\"varbit\",\n\t\"xml\",\n\t\"tsvector\",\n\t\"tsquery\",\n\t\"jsonpath\",\n]);\n\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\n\tconst preferred = (column.udtName || column.dataType).toLowerCase().trim();\n\tif (column.arrayDimensions > 0 && preferred.startsWith(\"_\")) {\n\t\treturn preferred.slice(1);\n\t}\n\treturn preferred;\n}\n\nfunction wrapArrayType(baseType: string, depth: number): string {\n\tlet wrapped = baseType;\n\tfor (let index = 0; index < depth; index += 1) {\n\t\twrapped = `Array<${wrapped}>`;\n\t}\n\treturn wrapped;\n}\n\nfunction resolveScalarType(column: IntrospectionColumn): string {\n\tconst label = normalizeTypeLabel(column);\n\n\tif (NUMBER_TYPES.has(label)) {\n\t\treturn \"number\";\n\t}\n\n\tif (STRING_NUMERIC_TYPES.has(label)) {\n\t\treturn \"string\";\n\t}\n\n\tif (label === \"bool\" || label === \"boolean\") {\n\t\treturn \"boolean\";\n\t}\n\n\tif (label === \"bytea\") {\n\t\treturn \"Buffer\";\n\t}\n\n\tif (label === \"json\" || label === \"jsonb\") {\n\t\treturn \"Record<string, unknown>\";\n\t}\n\n\tif (TEXT_TYPES.has(label)) {\n\t\treturn \"string\";\n\t}\n\n\tif (label.endsWith(\"range\") || label.endsWith(\"multirange\")) {\n\t\treturn \"string\";\n\t}\n\n\treturn \"unknown\";\n}\n\nfunction resolveKindAwareType(column: IntrospectionColumn): string {\n\tif (column.typeKind === \"enum\") {\n\t\tconst values = column.enumValues ?? [];\n\t\tif (values.length === 0) {\n\t\t\treturn \"string\";\n\t\t}\n\t\treturn values\n\t\t\t.map((value) => `'${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`)\n\t\t\t.join(\" | \");\n\t}\n\n\tif (column.typeKind === \"composite\") {\n\t\treturn \"Record<string, unknown>\";\n\t}\n\n\tif (\n\t\tcolumn.typeKind === \"domain\" ||\n\t\tcolumn.typeKind === \"range\" ||\n\t\tcolumn.typeKind === \"multirange\"\n\t) {\n\t\treturn \"string\";\n\t}\n\n\treturn resolveScalarType(column);\n}\n\nexport function resolvePostgresColumnType(column: IntrospectionColumn): string {\n\tconst baseType = resolveKindAwareType(column);\n\tif (!column.arrayDimensions || column.arrayDimensions <= 0) {\n\t\treturn baseType;\n\t}\n\treturn wrapArrayType(baseType, column.arrayDimensions);\n}\n","export interface RenderGeneratedFileHeaderOptions {\n\t/** Config / authority path shown in the header. Defaults to `athena.config.ts`. */\n\tsource?: string;\n}\n\nconst DEFAULT_GENERATED_HEADER_SOURCE = \"athena.config.ts\";\n\n/**\n * Leading Athena generated-file header (legacy + current).\n * Matches one or more consecutive Athena banners so re-runs cannot stack them.\n */\nconst ATHENA_GENERATED_HEADER_RE =\n\t/^(?:\\uFEFF?\\s*\\/\\*\\*[\\s\\S]*?(?:@generated|Generated by Athena)[\\s\\S]*?\\*\\/\\s*)+/;\n\n/**\n * Exact leading prefix shared by every Athena-generated TypeScript artifact.\n * Prefer {@link isAthenaGeneratedSource} over path/filename heuristics.\n */\nexport const ATHENA_GENERATED_FILE_PREFIX =\n\t\"/**\\n * @generated\\n * Generated by Athena.\" as const;\n\n/**\n * Canonical header for every Athena-generated TypeScript artifact.\n * Prefer {@link renderGeneratedFileHeader} over copying this string.\n */\nexport function renderGeneratedFileHeader(\n\toptions: RenderGeneratedFileHeaderOptions = {},\n): string {\n\tconst source = (options.source ?? DEFAULT_GENERATED_HEADER_SOURCE).trim();\n\tconst sourceLine =\n\t\tsource.length > 0 ? source : DEFAULT_GENERATED_HEADER_SOURCE;\n\treturn `${ATHENA_GENERATED_FILE_PREFIX}\n *\n * DO NOT EDIT MANUALLY.\n * Changes will be overwritten by \\`athena-js generate\\`.\n *\n * Source: ${sourceLine}\n */\n`;\n}\n\n/**\n * True when `source` begins with the canonical Athena `@generated` header.\n * This is the stable detection invariant for models, schemas, relations,\n * registry files, and future policy/codegen output.\n */\nexport function isAthenaGeneratedSource(source: string): boolean {\n\treturn source.replace(/^\\uFEFF/, \"\").startsWith(ATHENA_GENERATED_FILE_PREFIX);\n}\n\n/**\n * Banner required on every generated Athena artifact (Architecture 4.0).\n * @deprecated Prefer {@link renderGeneratedFileHeader}. Kept as the default\n * rendered header for existing imports.\n */\nexport const GENERATED_FILE_BANNER = renderGeneratedFileHeader();\n\n/** Strip any leading Athena generated header(s) from file content. */\nexport function stripGeneratedFileHeader(content: string): string {\n\treturn content.replace(ATHENA_GENERATED_HEADER_RE, \"\");\n}\n\n/**\n * Ensure content starts with exactly one canonical Athena generated header.\n * Idempotent across legacy and current wording (never stacks duplicates).\n */\nexport function withGeneratedFileBanner(\n\tcontent: string,\n\toptions: RenderGeneratedFileHeaderOptions = {},\n): string {\n\tconst body = stripGeneratedFileHeader(content.replace(/^\\uFEFF?/, \"\")).replace(\n\t\t/^\\s*\\n/,\n\t\t\"\",\n\t);\n\treturn `${renderGeneratedFileHeader(options)}\\n${body}`;\n}\n","import { applyNamingStyle } from \"./naming.ts\";\nimport type { GeneratorArtifactKind, GeneratorOutputConfig } from \"./types.ts\";\n\nexport interface PlaceholderContext {\n\tdatabase: string;\n\tkind: GeneratorArtifactKind;\n\tmodel: string;\n\tprovider: string;\n\tschema: string;\n}\n\nfunction createStyleTokens(\n\tprefix: string,\n\tvalue: string,\n): Record<string, string> {\n\treturn {\n\t\t[prefix]: value,\n\t\t[`${prefix}_camel`]: applyNamingStyle(value, \"camel\"),\n\t\t[`${prefix}_pascal`]: applyNamingStyle(value, \"pascal\"),\n\t\t[`${prefix}_snake`]: applyNamingStyle(value, \"snake\"),\n\t\t[`${prefix}_kebab`]: applyNamingStyle(value, \"kebab\"),\n\t};\n}\n\nfunction renderTemplate(\n\ttemplate: string,\n\ttokenMap: Record<string, string>,\n): string {\n\treturn template.replace(/\\{([A-Za-z0-9_]+)\\}/g, (_match, token) => {\n\t\tif (!(token in tokenMap)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown placeholder token \"${token}\" in template \"${template}\"`,\n\t\t\t);\n\t\t}\n\t\treturn tokenMap[token];\n\t});\n}\n\nfunction resolvePlaceholderMap(\n\tbaseTokens: Record<string, string>,\n\toutputConfig: GeneratorOutputConfig,\n): Record<string, string> {\n\tconst resolved: Record<string, string> = {\n\t\t...baseTokens,\n\t};\n\tconst reservedTokenKeys = new Set(Object.keys(baseTokens));\n\n\tconst entries = Object.entries(outputConfig.placeholderMap ?? {});\n\tfor (const [key, value] of entries) {\n\t\tif (reservedTokenKeys.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet current = value;\n\t\tfor (let depth = 0; depth < 8; depth += 1) {\n\t\t\tconst next = renderTemplate(current, resolved);\n\t\t\tif (next === current) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent = next;\n\t\t}\n\t\tresolved[key] = current;\n\t}\n\n\treturn resolved;\n}\n\nexport function renderOutputPath(\n\ttemplate: string,\n\tcontext: PlaceholderContext,\n\toutputConfig: GeneratorOutputConfig,\n): string {\n\tconst baseTokens: Record<string, string> = {\n\t\tkind: context.kind,\n\t\tprovider: context.provider,\n\t\t...createStyleTokens(\"database\", context.database),\n\t\t...createStyleTokens(\"schema\", context.schema),\n\t\t...createStyleTokens(\"model\", context.model),\n\t};\n\n\tconst tokens = resolvePlaceholderMap(baseTokens, outputConfig);\n\treturn renderTemplate(template, tokens);\n}\n","import { posix } from \"node:path\";\nimport type {\n\tIntrospectionRelation,\n\tIntrospectionSnapshot,\n\tIntrospectionTable,\n} from \"../schema/types.ts\";\nimport {\n\tATHENA_GENERATED_FILE_PREFIX,\n\tGENERATED_FILE_BANNER,\n\tisAthenaGeneratedSource,\n\trenderGeneratedFileHeader,\n\tstripGeneratedFileHeader,\n\twithGeneratedFileBanner,\n\ttype RenderGeneratedFileHeaderOptions,\n} from \"./generated-file-header.ts\";\nimport {\n\tapplyNamingStyle,\n\tescapeStringLiteral,\n\tescapeTypePropertyName,\n\ttoSafeIdentifier,\n} from \"./naming.ts\";\nimport { renderOutputPath } from \"./placeholders.ts\";\nimport type {\n\tGeneratedArtifact,\n\tGeneratedArtifacts,\n\tNormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\nexport {\n\tATHENA_GENERATED_FILE_PREFIX,\n\tGENERATED_FILE_BANNER,\n\tisAthenaGeneratedSource,\n\trenderGeneratedFileHeader,\n\tstripGeneratedFileHeader,\n\twithGeneratedFileBanner,\n};\nexport type { RenderGeneratedFileHeaderOptions };\n\ntype OutputPathKind = \"model\" | \"schema\" | \"database\" | \"registry\";\n\ninterface OutputPathTokens {\n\tdatabase: string;\n\tkind: OutputPathKind;\n\tmodel: string;\n\tprovider: string;\n\tschema: string;\n}\n\ninterface SchemaScopedPathDescriptor {\n\tfilePath: string;\n\tschemaName: string;\n}\n\ninterface DatabaseArtifactDescriptor<\n\tTSchema extends SchemaArtifactDescriptor = SchemaArtifactDescriptor,\n> {\n\tdatabaseConstName: string;\n\tfilePath: string;\n\tschemas: TSchema[];\n}\n\ninterface ComposeGeneratorArtifactsInput<\n\tTModel extends ModelArtifactDescriptorBase,\n> {\n\tconfig: NormalizedAthenaGeneratorConfig;\n\tcreateModelDescriptor: (input: {\n\t\tproviderName: string;\n\t\tdatabaseName: string;\n\t\tschemaName: string;\n\t\ttableName: string;\n\t\ttable: IntrospectionTable;\n\t}) => TModel;\n\trenderModelArtifact: (descriptor: TModel) => GeneratedArtifact;\n\tsnapshot: IntrospectionSnapshot;\n}\n\nexport interface ModelArtifactDescriptorBase\n\textends SchemaScopedPathDescriptor {\n\texportConstName: string;\n\ttable: IntrospectionTable;\n\ttableName: string;\n}\n\nexport interface SchemaArtifactDescriptor<\n\tTModel extends ModelArtifactDescriptorBase = ModelArtifactDescriptorBase,\n> extends SchemaScopedPathDescriptor {\n\tmodels: TModel[];\n\tschemaConstName: string;\n}\n\nexport function normalizePath(pathValue: string): string {\n\treturn pathValue.replace(/\\\\/g, \"/\");\n}\n\nfunction withoutTypeScriptExtension(pathValue: string): string {\n\treturn pathValue.replace(/\\.tsx?$/i, \"\");\n}\n\nexport function toModuleImportPath(\n\tfromFile: string,\n\ttargetFile: string,\n): string {\n\tconst relativePath = withoutTypeScriptExtension(\n\t\tnormalizePath(posix.relative(posix.dirname(fromFile), targetFile)),\n\t);\n\treturn relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n}\n\nexport function resolveOutputPath(\n\ttarget: string,\n\ttokens: OutputPathTokens,\n\tconfig: NormalizedAthenaGeneratorConfig,\n): string {\n\treturn normalizePath(renderOutputPath(target, tokens, config.output));\n}\n\nconst IDENTIFIER_NAME_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\nexport function renderObjectKey(key: string): string {\n\treturn escapeTypePropertyName(key);\n}\n\nexport interface RenderObjectPropertyOptions {\n\t/** Indentation prefix. Defaults to two spaces. */\n\tindent?: string;\n}\n\n/**\n * Render one object-literal property with Athena generator style.\n * Emits ES shorthand when the unquoted key equals the value identifier:\n * `accounts` instead of `accounts: accounts`.\n */\nexport function renderObjectProperty(\n\tkey: string,\n\tvalue: string,\n\toptions: RenderObjectPropertyOptions = {},\n): string {\n\tconst indent = options.indent ?? \"  \";\n\tconst renderedKey = renderObjectKey(key);\n\tconst trimmedValue = value.trim();\n\tconst canShorthand =\n\t\tIDENTIFIER_NAME_PATTERN.test(key) &&\n\t\trenderedKey === key &&\n\t\ttrimmedValue === key;\n\treturn `${indent}${canShorthand ? renderedKey : `${renderedKey}: ${trimmedValue}`}`;\n}\n\nexport interface RenderObjectLiteralOptions\n\textends RenderObjectPropertyOptions {\n\t/**\n\t * When true (default), every property line ends with a trailing comma —\n\t * including the last entry — matching Athena generated TS style.\n\t */\n\ttrailingCommas?: boolean;\n}\n\n/**\n * Render a multi-line object-literal body (one property per line).\n */\nexport function renderObjectLiteral(\n\tentries: ReadonlyArray<{ key: string; value: string }>,\n\toptions: RenderObjectLiteralOptions = {},\n): string {\n\tconst trailingCommas = options.trailingCommas !== false;\n\treturn entries\n\t\t.map((entry) => {\n\t\t\tconst property = renderObjectProperty(entry.key, entry.value, options);\n\t\t\treturn trailingCommas ? `${property},` : property;\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nexport function renderRelationLiteral(relation: IntrospectionRelation): string {\n\tconst through = relation.through\n\t\t? `,\n      through: {\n        schema: ${escapeStringLiteral(relation.through.schema)},\n        model: ${escapeStringLiteral(relation.through.model)},\n        sourceColumns: [${relation.through.sourceColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n        targetColumns: [${relation.through.targetColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n      }`\n\t\t: \"\";\n\n\treturn `{\n      kind: ${escapeStringLiteral(relation.kind)},\n      sourceColumns: [${relation.sourceColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n      targetSchema: ${escapeStringLiteral(relation.targetSchema)},\n      targetModel: ${escapeStringLiteral(relation.targetModel)},\n      targetColumns: [${relation.targetColumns.map((value) => escapeStringLiteral(value)).join(\", \")}]${through}\n    }`;\n}\n\nexport function renderSchemaArtifact<\n\tTModel extends ModelArtifactDescriptorBase,\n>(descriptor: SchemaArtifactDescriptor<TModel>): GeneratedArtifact {\n\tconst importLines = descriptor.models\n\t\t.map((modelDescriptor) => {\n\t\t\tconst importPath = toModuleImportPath(\n\t\t\t\tdescriptor.filePath,\n\t\t\t\tmodelDescriptor.filePath,\n\t\t\t);\n\t\t\treturn `import { ${modelDescriptor.exportConstName} } from '${importPath}'`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tconst modelEntries = renderObjectLiteral(\n\t\tdescriptor.models.map((modelDescriptor) => ({\n\t\t\tkey: modelDescriptor.tableName,\n\t\t\tvalue: modelDescriptor.exportConstName,\n\t\t})),\n\t);\n\n\tconst content = `import { defineSchema } from '@xylex-group/athena'\n${importLines ? `\\n${importLines}\\n` : \"\\n\"}\nexport const ${descriptor.schemaConstName} = defineSchema({\n${modelEntries}\n})\n`;\n\n\treturn {\n\t\tcontent,\n\t\tkind: \"schema\",\n\t\tpath: descriptor.filePath,\n\t};\n}\n\nexport function renderDatabaseArtifact<\n\tTSchema extends SchemaArtifactDescriptor,\n>(descriptor: DatabaseArtifactDescriptor<TSchema>): GeneratedArtifact {\n\tconst importLines = descriptor.schemas\n\t\t.map((schemaDescriptor) => {\n\t\t\tconst importPath = toModuleImportPath(\n\t\t\t\tdescriptor.filePath,\n\t\t\t\tschemaDescriptor.filePath,\n\t\t\t);\n\t\t\treturn `import { ${schemaDescriptor.schemaConstName} } from '${importPath}'`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tconst schemaEntries = renderObjectLiteral(\n\t\tdescriptor.schemas.map((schemaDescriptor) => ({\n\t\t\tkey: schemaDescriptor.schemaName,\n\t\t\tvalue: schemaDescriptor.schemaConstName,\n\t\t})),\n\t);\n\n\tconst content = `import { defineDatabase } from '@xylex-group/athena'\n${importLines ? `\\n${importLines}\\n` : \"\\n\"}\nexport const ${descriptor.databaseConstName} = defineDatabase({\n${schemaEntries}\n})\n`;\n\n\treturn {\n\t\tcontent,\n\t\tkind: \"database\",\n\t\tpath: descriptor.filePath,\n\t};\n}\n\nexport function renderRegistryArtifact(\n\tregistryPath: string,\n\tdatabasePath: string,\n\tdatabaseConstName: string,\n\tregistryConstName: string,\n\tdatabaseName: string,\n\tgeneratedAt: string,\n\toutputPreset: NormalizedAthenaGeneratorConfig[\"output\"][\"preset\"],\n\toutputFormat: NormalizedAthenaGeneratorConfig[\"output\"][\"format\"],\n\tschemaVersion: number,\n): GeneratedArtifact {\n\tconst databaseImportPath = toModuleImportPath(registryPath, databasePath);\n\tconst content = `import { defineRegistry } from '@xylex-group/athena'\nimport { ${databaseConstName} } from '${databaseImportPath}'\n\nexport const __athena_schema_meta = {\n  schemaVersion: ${schemaVersion},\n  generatedAt: ${escapeStringLiteral(generatedAt)},\n  database: ${escapeStringLiteral(databaseName)},\n  outputPreset: ${escapeStringLiteral(outputPreset)},\n  outputFormat: ${escapeStringLiteral(outputFormat)},\n} as const\n\nexport const ${registryConstName} = defineRegistry({\n${renderObjectProperty(databaseName, databaseConstName)}\n})\n`;\n\n\treturn {\n\t\tcontent,\n\t\tkind: \"registry\",\n\t\tpath: registryPath,\n\t};\n}\n\nfunction assertNoDuplicatePaths(files: GeneratedArtifact[]) {\n\tconst seen = new Map<string, GeneratedArtifact>();\n\tfor (const file of files) {\n\t\tconst existing = seen.get(file.path);\n\t\tif (existing) {\n\t\t\tthrow new Error(\n\t\t\t\t[\n\t\t\t\t\t`Generator output collision detected for path: ${file.path}`,\n\t\t\t\t\t`Collision: ${existing.kind} and ${file.kind}.`,\n\t\t\t\t\t\"Use explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} in output targets so each artifact resolves to a unique path.\",\n\t\t\t\t].join(\" \"),\n\t\t\t);\n\t\t}\n\t\tseen.set(file.path, file);\n\t}\n}\n\nfunction addSchemaSegmentToPath(pathValue: string, schemaName: string): string {\n\tconst normalizedPath = normalizePath(pathValue);\n\tconst parsedPath = posix.parse(normalizedPath);\n\tconst schemaSegment = applyNamingStyle(schemaName, \"kebab\");\n\tif (!schemaSegment) {\n\t\treturn normalizedPath;\n\t}\n\n\tconst dir =\n\t\tparsedPath.dir.length > 0\n\t\t\t? `${parsedPath.dir}/${schemaSegment}`\n\t\t\t: schemaSegment;\n\treturn normalizePath(posix.join(dir, parsedPath.base));\n}\n\nfunction scopeDuplicateDescriptorPathsBySchema<\n\tTDescriptor extends SchemaScopedPathDescriptor,\n>(descriptors: TDescriptor[]): TDescriptor[] {\n\tconst nextDescriptors = descriptors.map((descriptor) => ({ ...descriptor }));\n\tconst duplicates = new Map<string, number[]>();\n\n\tfor (let index = 0; index < nextDescriptors.length; index += 1) {\n\t\tconst descriptor = nextDescriptors[index];\n\t\tconst indexes = duplicates.get(descriptor.filePath) ?? [];\n\t\tindexes.push(index);\n\t\tduplicates.set(descriptor.filePath, indexes);\n\t}\n\n\tlet appliedSchemaScoping = false;\n\tfor (const indexes of duplicates.values()) {\n\t\tif (indexes.length <= 1) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst schemaNames = new Set(\n\t\t\tindexes.map((index) => nextDescriptors[index].schemaName),\n\t\t);\n\t\tif (schemaNames.size <= 1) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const index of indexes) {\n\t\t\tconst descriptor = nextDescriptors[index];\n\t\t\tdescriptor.filePath = addSchemaSegmentToPath(\n\t\t\t\tdescriptor.filePath,\n\t\t\t\tdescriptor.schemaName,\n\t\t\t);\n\t\t}\n\t\tappliedSchemaScoping = true;\n\t}\n\n\tif (!appliedSchemaScoping) {\n\t\treturn nextDescriptors;\n\t}\n\n\tconst normalizedPaths = new Set<string>();\n\tfor (const descriptor of nextDescriptors) {\n\t\tif (normalizedPaths.has(descriptor.filePath)) {\n\t\t\tthrow new Error(\n\t\t\t\t[\n\t\t\t\t\t`Generator output collision detected for path: ${descriptor.filePath}`,\n\t\t\t\t\t\"Automatic schema path scoping was applied but collisions remain.\",\n\t\t\t\t\t\"Add explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} to your output targets.\",\n\t\t\t\t].join(\" \"),\n\t\t\t);\n\t\t}\n\t\tnormalizedPaths.add(descriptor.filePath);\n\t}\n\n\treturn nextDescriptors;\n}\n\nexport function composeGeneratorArtifacts<\n\tTModel extends ModelArtifactDescriptorBase,\n>(input: ComposeGeneratorArtifactsInput<TModel>): GeneratedArtifacts {\n\tconst { snapshot, config, createModelDescriptor, renderModelArtifact } =\n\t\tinput;\n\tconst providerName = snapshot.backend;\n\tconst databaseName = snapshot.database;\n\tconst modelDescriptors: TModel[] = [];\n\n\tfor (const schemaName of Object.keys(snapshot.schemas).sort()) {\n\t\tconst schema = snapshot.schemas[schemaName];\n\t\tfor (const tableName of Object.keys(schema.tables).sort()) {\n\t\t\tmodelDescriptors.push(\n\t\t\t\tcreateModelDescriptor({\n\t\t\t\t\tdatabaseName,\n\t\t\t\t\tproviderName,\n\t\t\t\t\tschemaName,\n\t\t\t\t\ttable: schema.tables[tableName],\n\t\t\t\t\ttableName,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tconst scopedModelDescriptors =\n\t\tscopeDuplicateDescriptorPathsBySchema(modelDescriptors);\n\n\tlet schemaDescriptors: SchemaArtifactDescriptor<TModel>[] = Object.keys(\n\t\tsnapshot.schemas,\n\t)\n\t\t.sort()\n\t\t.map((schemaName) => ({\n\t\t\tfilePath: resolveOutputPath(\n\t\t\t\tconfig.output.targets.schema,\n\t\t\t\t{\n\t\t\t\t\tdatabase: databaseName,\n\t\t\t\t\tkind: \"schema\",\n\t\t\t\t\tmodel: \"index\",\n\t\t\t\t\tprovider: providerName,\n\t\t\t\t\tschema: schemaName,\n\t\t\t\t},\n\t\t\t\tconfig,\n\t\t\t),\n\t\t\tmodels: scopedModelDescriptors.filter(\n\t\t\t\t(model) => model.schemaName === schemaName,\n\t\t\t),\n\t\t\tschemaConstName: toSafeIdentifier(\n\t\t\t\t`${schemaName} schema`,\n\t\t\t\tconfig.naming.schemaConst,\n\t\t\t\t\"schema\",\n\t\t\t),\n\t\t\tschemaName,\n\t\t}));\n\n\tschemaDescriptors = scopeDuplicateDescriptorPathsBySchema(schemaDescriptors);\n\n\tconst databaseDescriptor: DatabaseArtifactDescriptor<\n\t\tSchemaArtifactDescriptor<TModel>\n\t> = {\n\t\tdatabaseConstName: toSafeIdentifier(\n\t\t\t`${databaseName} database`,\n\t\t\tconfig.naming.databaseConst,\n\t\t\t\"database\",\n\t\t),\n\t\tfilePath: resolveOutputPath(\n\t\t\tconfig.output.targets.database,\n\t\t\t{\n\t\t\t\tdatabase: databaseName,\n\t\t\t\tkind: \"database\",\n\t\t\t\tmodel: \"index\",\n\t\t\t\tprovider: providerName,\n\t\t\t\tschema: \"index\",\n\t\t\t},\n\t\t\tconfig,\n\t\t),\n\t\tschemas: schemaDescriptors,\n\t};\n\n\tconst files: GeneratedArtifact[] = [];\n\n\tfor (const modelDescriptor of scopedModelDescriptors) {\n\t\tfiles.push(renderModelArtifact(modelDescriptor));\n\t}\n\n\tfor (const schemaDescriptor of schemaDescriptors) {\n\t\tfiles.push(renderSchemaArtifact(schemaDescriptor));\n\t}\n\n\tfiles.push(renderDatabaseArtifact(databaseDescriptor));\n\n\tif (config.features.emitRegistry) {\n\t\tconst registryPath = resolveOutputPath(\n\t\t\tconfig.output.targets.registry,\n\t\t\t{\n\t\t\t\tdatabase: databaseName,\n\t\t\t\tkind: \"registry\",\n\t\t\t\tmodel: \"index\",\n\t\t\t\tprovider: providerName,\n\t\t\t\tschema: \"index\",\n\t\t\t},\n\t\t\tconfig,\n\t\t);\n\t\tfiles.push(\n\t\t\trenderRegistryArtifact(\n\t\t\t\tregistryPath,\n\t\t\t\tdatabaseDescriptor.filePath,\n\t\t\t\tdatabaseDescriptor.databaseConstName,\n\t\t\t\ttoSafeIdentifier(\"registry\", config.naming.registryConst, \"registry\"),\n\t\t\t\tdatabaseName,\n\t\t\t\tsnapshot.generatedAt,\n\t\t\t\tconfig.output.preset,\n\t\t\t\tconfig.output.format,\n\t\t\t\tconfig.internal.schemaVersion,\n\t\t\t),\n\t\t);\n\t}\n\n\tassertNoDuplicatePaths(files);\n\n\treturn {\n\t\tfiles: files.map((file) => ({\n\t\t\t...file,\n\t\t\tcontent: withGeneratedFileBanner(file.content),\n\t\t})),\n\t\tsnapshot,\n\t};\n}\n","import { parseSchemaTypeString } from \"../schema/diff/normalize.ts\";\nimport type {\n\tIntrospectionColumn,\n\tIntrospectionSnapshot,\n} from \"../schema/types.ts\";\nimport { normalizeGeneratorConfig } from \"./config.ts\";\nimport {\n\tescapeStringLiteral,\n\tescapeTypePropertyName,\n\ttoSafeIdentifier,\n} from \"./naming.ts\";\nimport { resolvePostgresColumnType } from \"./postgres-type-mapping.ts\";\nimport {\n\tcomposeGeneratorArtifacts,\n\ttype ModelArtifactDescriptorBase,\n\trenderObjectKey,\n\trenderRelationLiteral,\n\tresolveOutputPath,\n} from \"./render-shared.ts\";\nimport type {\n\tAthenaGeneratorConfig,\n\tGeneratedArtifact,\n\tGeneratedArtifacts,\n\tNormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\ntype ModelRenderDescriptor = ModelArtifactDescriptorBase & {\n\trowTypeName: string;\n\tinsertTypeName: string;\n\tupdateTypeName: string;\n\tformValuesTypeName: string;\n\ttableConstName: string;\n};\n\nconst SAFE_NUMBER_TYPES = new Set([\n\t\"int2\",\n\t\"int4\",\n\t\"float4\",\n\t\"float8\",\n\t\"smallint\",\n\t\"integer\",\n\t\"real\",\n\t\"double precision\",\n]);\n\nconst JSON_TYPES = new Set([\"json\", \"jsonb\"]);\nconst BOOLEAN_TYPES = new Set([\"bool\", \"boolean\"]);\n/** Exact-numeric PG types → `decimal()` (string-backed, precision-safe). */\nconst DECIMAL_TYPES = new Set([\"numeric\", \"decimal\", \"money\"]);\n/** Wide integers / opaque bytes stay string until dedicated primitives land. */\nconst STRING_TYPES = new Set([\n\t\"int8\",\n\t\"bigint\",\n\t\"serial8\",\n\t\"bigserial\",\n\t\"bytea\",\n]);\n\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\n\tconst preferred = (column.udtName || column.dataType).toLowerCase().trim();\n\t// Strip format_type params: \"numeric(12,2)\" → \"numeric\"\n\tconst bare = preferred.replace(/\\s*\\([^)]*\\)\\s*$/, \"\").trim();\n\tif (column.arrayDimensions > 0 && bare.startsWith(\"_\")) {\n\t\treturn bare.slice(1);\n\t}\n\treturn bare;\n}\n\nfunction resolveExactNumericBounds(column: IntrospectionColumn): {\n\tprecision?: number;\n\tscale?: number;\n} {\n\tif (\n\t\ttypeof column.numericPrecision === \"number\" ||\n\t\ttypeof column.numericScale === \"number\"\n\t) {\n\t\treturn {\n\t\t\t...(typeof column.numericPrecision === \"number\"\n\t\t\t\t? { precision: column.numericPrecision }\n\t\t\t\t: {}),\n\t\t\t...(typeof column.numericScale === \"number\"\n\t\t\t\t? { scale: column.numericScale }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\n\tconst parsed = parseSchemaTypeString(\n\t\tcolumn.dataType,\n\t\tcolumn.arrayDimensions ?? 0,\n\t);\n\tif (parsed.name !== \"numeric\") {\n\t\treturn {};\n\t}\n\treturn {\n\t\t...(typeof parsed.precision === \"number\"\n\t\t\t? { precision: parsed.precision }\n\t\t\t: {}),\n\t\t...(typeof parsed.scale === \"number\" ? { scale: parsed.scale } : {}),\n\t};\n}\n\nfunction renderDecimalBuilder(column: IntrospectionColumn): string {\n\tconst { precision, scale } = resolveExactNumericBounds(column);\n\n\tif (precision === undefined && scale === undefined) {\n\t\treturn \"decimal()\";\n\t}\n\n\tconst options: string[] = [];\n\tif (precision !== undefined) {\n\t\toptions.push(`precision: ${precision}`);\n\t}\n\tif (scale !== undefined) {\n\t\toptions.push(`scale: ${scale}`);\n\t}\n\treturn `decimal({ ${options.join(\", \")} })`;\n}\n\nfunction renderColumnBuilder(column: IntrospectionColumn): {\n\thelper: \"boolean\" | \"number\" | \"string\" | \"json\" | \"enumeration\" | \"decimal\";\n\texpression: string;\n} {\n\tconst label = normalizeTypeLabel(column);\n\tlet helper:\n\t\t| \"boolean\"\n\t\t| \"number\"\n\t\t| \"string\"\n\t\t| \"json\"\n\t\t| \"enumeration\"\n\t\t| \"decimal\";\n\tlet expression: string;\n\n\tif (\n\t\tcolumn.typeKind === \"enum\" &&\n\t\tcolumn.enumValues &&\n\t\tcolumn.enumValues.length > 0\n\t) {\n\t\thelper = \"enumeration\";\n\t\texpression = `enumeration([${column.enumValues.map((value) => escapeStringLiteral(value)).join(\", \")}] as const)`;\n\t} else if (\n\t\tcolumn.arrayDimensions > 0 ||\n\t\tJSON_TYPES.has(label) ||\n\t\tcolumn.typeKind === \"composite\"\n\t) {\n\t\thelper = \"json\";\n\t\texpression = `json<${resolvePostgresColumnType(column)}>()`;\n\t} else if (BOOLEAN_TYPES.has(label)) {\n\t\thelper = \"boolean\";\n\t\texpression = \"boolean()\";\n\t} else if (SAFE_NUMBER_TYPES.has(label)) {\n\t\thelper = \"number\";\n\t\texpression = \"number()\";\n\t} else if (DECIMAL_TYPES.has(label)) {\n\t\thelper = \"decimal\";\n\t\texpression = renderDecimalBuilder(column);\n\t} else if (STRING_TYPES.has(label)) {\n\t\thelper = \"string\";\n\t\texpression = \"string()\";\n\t} else {\n\t\thelper = \"string\";\n\t\texpression = \"string()\";\n\t}\n\n\tif (column.isNullable) {\n\t\texpression = `${expression}.optional()`;\n\t}\n\tif (column.hasDefault) {\n\t\texpression = `${expression}.defaulted()`;\n\t}\n\tif (column.isGenerated) {\n\t\texpression = `${expression}.generated()`;\n\t}\n\n\treturn { expression, helper };\n}\n\nfunction renderModelArtifact(\n\tdescriptor: ModelRenderDescriptor,\n\tconfig: NormalizedAthenaGeneratorConfig,\n): GeneratedArtifact {\n\tconst helperImports = new Set<string>([\"table\"]);\n\tconst columnLines = Object.entries(descriptor.table.columns)\n\t\t.map(([columnName, column]) => {\n\t\t\tconst propertyName = escapeTypePropertyName(columnName);\n\t\t\tconst rendered = renderColumnBuilder(column);\n\t\t\thelperImports.add(rendered.helper);\n\t\t\treturn `    ${propertyName}: ${rendered.expression}`;\n\t\t})\n\t\t.join(\",\\n\");\n\n\tconst helperImportLine = Array.from(helperImports).sort().join(\", \");\n\tconst rowSchemaConstName = `${descriptor.tableConstName}_row_schema`;\n\tconst insertSchemaConstName = `${descriptor.tableConstName}_insert_schema`;\n\tconst updateSchemaConstName = `${descriptor.tableConstName}_update_schema`;\n\tconst formSchemaConstName = `${descriptor.tableConstName}_form_schema`;\n\n\tconst relationEntries = Object.entries(descriptor.table.relations);\n\tconst relationsAssignment =\n\t\tconfig.features.emitRelations && relationEntries.length > 0\n\t\t\t? `\nObject.assign(${descriptor.tableConstName}.meta, {\n  relations: {\n${relationEntries\n\t.map(\n\t\t([relationKey, relationValue]) =>\n\t\t\t`    ${renderObjectKey(relationKey)}: ${renderRelationLiteral(relationValue)}`,\n\t)\n\t.join(\",\\n\")}\n  }\n})\n`\n\t\t\t: \"\";\n\n\tconst content = `import { ${helperImportLine} } from '@xylex-group/athena'\nimport type { FormValuesOf, InsertOf, RowOf, UpdateOf } from '@xylex-group/athena'\n\nexport const ${descriptor.tableConstName} = table(${escapeStringLiteral(descriptor.tableName)})\n  .schema(${escapeStringLiteral(descriptor.schemaName)})\n  .columns({\n${columnLines}\n  })\n  ${\n\t\tdescriptor.table.primaryKey.length > 0\n\t\t\t? `.primaryKey(${descriptor.table.primaryKey.map((value) => escapeStringLiteral(value)).join(\", \")})`\n\t\t\t: \".withoutPrimaryKey()\"\n\t}\n${relationsAssignment ? `${relationsAssignment}` : \"\"}\nexport type ${descriptor.rowTypeName} = RowOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.insertTypeName} = InsertOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.updateTypeName} = UpdateOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.formValuesTypeName} = FormValuesOf<typeof ${descriptor.tableConstName}>\n\nexport const ${rowSchemaConstName} = ${descriptor.tableConstName}.schemas.row\nexport const ${insertSchemaConstName} = ${descriptor.tableConstName}.schemas.insert\nexport const ${updateSchemaConstName} = ${descriptor.tableConstName}.schemas.update\nexport const ${formSchemaConstName} = ${descriptor.tableConstName}.schemas.form\n`;\n\n\treturn {\n\t\tcontent,\n\t\tkind: \"model\",\n\t\tpath: descriptor.filePath,\n\t};\n}\n\nexport function generateTableBuilderArtifactsFromSnapshot(\n\tsnapshot: IntrospectionSnapshot,\n\tconfig: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig,\n): GeneratedArtifacts {\n\tconst normalizedConfig =\n\t\t\"internal\" in config\n\t\t\t? (config as NormalizedAthenaGeneratorConfig)\n\t\t\t: normalizeGeneratorConfig(config as AthenaGeneratorConfig);\n\treturn composeGeneratorArtifacts({\n\t\tconfig: normalizedConfig,\n\t\tcreateModelDescriptor({\n\t\t\tproviderName,\n\t\t\tdatabaseName,\n\t\t\tschemaName,\n\t\t\ttableName,\n\t\t\ttable,\n\t\t}) {\n\t\t\tconst tableConstName = toSafeIdentifier(tableName, \"preserve\", \"table\");\n\t\t\treturn {\n\t\t\t\texportConstName: tableConstName,\n\t\t\t\tfilePath: resolveOutputPath(\n\t\t\t\t\tnormalizedConfig.output.targets.model,\n\t\t\t\t\t{\n\t\t\t\t\t\tdatabase: databaseName,\n\t\t\t\t\t\tkind: \"model\",\n\t\t\t\t\t\tmodel: tableName,\n\t\t\t\t\t\tprovider: providerName,\n\t\t\t\t\t\tschema: schemaName,\n\t\t\t\t\t},\n\t\t\t\t\tnormalizedConfig,\n\t\t\t\t),\n\t\t\t\tformValuesTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}FormValues`,\n\t\t\t\tinsertTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Insert`,\n\t\t\t\trowTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Row`,\n\t\t\t\tschemaName,\n\t\t\t\ttable,\n\t\t\t\ttableConstName,\n\t\t\t\ttableName,\n\t\t\t\tupdateTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Update`,\n\t\t\t};\n\t\t},\n\t\trenderModelArtifact: (descriptor) =>\n\t\t\trenderModelArtifact(descriptor, normalizedConfig),\n\t\tsnapshot,\n\t});\n}\n","import type { IntrospectionSnapshot } from \"../schema/types.ts\";\nimport { normalizeGeneratorConfig } from \"./config.ts\";\nimport {\n\tescapeStringLiteral,\n\tescapeTypePropertyName,\n\ttoSafeIdentifier,\n} from \"./naming.ts\";\nimport { resolvePostgresColumnType } from \"./postgres-type-mapping.ts\";\nimport {\n\tcomposeGeneratorArtifacts,\n\ttype ModelArtifactDescriptorBase,\n\trenderObjectKey,\n\trenderRelationLiteral,\n\tresolveOutputPath,\n} from \"./render-shared.ts\";\nimport { generateTableBuilderArtifactsFromSnapshot } from \"./table-builder-renderer.ts\";\nimport { filterIntrospectionSnapshot } from \"./table-selection.ts\";\nimport type {\n\tAthenaGeneratorConfig,\n\tGeneratedArtifact,\n\tGeneratedArtifacts,\n\tNormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\ntype ModelRenderDescriptor = ModelArtifactDescriptorBase & {\n\trowTypeName: string;\n\tinsertTypeName: string;\n\tupdateTypeName: string;\n\tmodelConstName: string;\n};\n\nfunction renderModelArtifact(\n\tdatabaseName: string,\n\tdescriptor: ModelRenderDescriptor,\n\tconfig: NormalizedAthenaGeneratorConfig,\n): GeneratedArtifact {\n\tconst columnLines = Object.values(descriptor.table.columns)\n\t\t.map((column) => {\n\t\t\tconst propertyName = escapeTypePropertyName(column.name);\n\t\t\tconst baseType = resolvePostgresColumnType(column);\n\t\t\tconst isOptional = column.isNullable;\n\t\t\tconst typeWithNullability = column.isNullable\n\t\t\t\t? `${baseType} | null`\n\t\t\t\t: baseType;\n\t\t\treturn `  ${propertyName}${isOptional ? \"?\" : \"\"}: ${typeWithNullability}`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tconst nullableLines = Object.values(descriptor.table.columns)\n\t\t.map(\n\t\t\t(column) =>\n\t\t\t\t`      ${renderObjectKey(column.name)}: ${column.isNullable ? \"true\" : \"false\"}`,\n\t\t)\n\t\t.join(\",\\n\");\n\n\tconst relationEntries = Object.entries(descriptor.table.relations);\n\tconst relationBlock =\n\t\tconfig.features.emitRelations && relationEntries.length > 0\n\t\t\t? `,\n    relations: {\n${relationEntries\n\t.map(\n\t\t([relationKey, relationValue]) =>\n\t\t\t`      ${renderObjectKey(relationKey)}: ${renderRelationLiteral(relationValue)}`,\n\t)\n\t.join(\",\\n\")}\n    }`\n\t\t\t: \"\";\n\n\tconst content = `import { defineModel } from '@xylex-group/athena'\n\nexport interface ${descriptor.rowTypeName} {\n${columnLines}\n}\n\nexport type ${descriptor.insertTypeName} = Partial<${descriptor.rowTypeName}>\nexport type ${descriptor.updateTypeName} = Partial<${descriptor.insertTypeName}>\n\nexport const ${descriptor.modelConstName} = defineModel<${descriptor.rowTypeName}, ${descriptor.insertTypeName}, ${descriptor.updateTypeName}>({\n  meta: {\n    database: ${escapeStringLiteral(databaseName)},\n    schema: ${escapeStringLiteral(descriptor.schemaName)},\n    model: ${escapeStringLiteral(descriptor.tableName)},\n    tableName: ${escapeStringLiteral(`${descriptor.schemaName}.${descriptor.tableName}`)},\n    primaryKey: [${descriptor.table.primaryKey.map((value) => escapeStringLiteral(value)).join(\", \")}],\n    nullable: {\n${nullableLines}\n    }${relationBlock}\n  }\n})\n`;\n\n\treturn {\n\t\tcontent,\n\t\tkind: \"model\",\n\t\tpath: descriptor.filePath,\n\t};\n}\n\n/**\n * Generates model/schema/database/registry source artifacts from an introspection snapshot.\n */\nexport function generateArtifactsFromSnapshot(\n\tsnapshot: IntrospectionSnapshot,\n\tconfig: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig,\n): GeneratedArtifacts {\n\tconst normalizedConfig =\n\t\t\"internal\" in config\n\t\t\t? (config as NormalizedAthenaGeneratorConfig)\n\t\t\t: normalizeGeneratorConfig(config as AthenaGeneratorConfig);\n\tconst filteredSnapshot = filterIntrospectionSnapshot(\n\t\tsnapshot,\n\t\tnormalizedConfig.filter,\n\t);\n\tif (normalizedConfig.output.format === \"table-builder\") {\n\t\treturn generateTableBuilderArtifactsFromSnapshot(\n\t\t\tfilteredSnapshot,\n\t\t\tnormalizedConfig,\n\t\t);\n\t}\n\treturn composeGeneratorArtifacts({\n\t\tconfig: normalizedConfig,\n\t\tcreateModelDescriptor({\n\t\t\tproviderName,\n\t\t\tdatabaseName,\n\t\t\tschemaName,\n\t\t\ttableName,\n\t\t\ttable,\n\t\t}) {\n\t\t\tconst modelConstName = toSafeIdentifier(\n\t\t\t\t`${schemaName} ${tableName} model`,\n\t\t\t\tnormalizedConfig.naming.modelConst,\n\t\t\t\t\"model\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\texportConstName: modelConstName,\n\t\t\t\tfilePath: resolveOutputPath(\n\t\t\t\t\tnormalizedConfig.output.targets.model,\n\t\t\t\t\t{\n\t\t\t\t\t\tdatabase: databaseName,\n\t\t\t\t\t\tkind: \"model\",\n\t\t\t\t\t\tmodel: tableName,\n\t\t\t\t\t\tprovider: providerName,\n\t\t\t\t\t\tschema: schemaName,\n\t\t\t\t\t},\n\t\t\t\t\tnormalizedConfig,\n\t\t\t\t),\n\t\t\t\tinsertTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Insert`,\n\t\t\t\tmodelConstName,\n\t\t\t\trowTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Row`,\n\t\t\t\tschemaName,\n\t\t\t\ttable,\n\t\t\t\ttableName,\n\t\t\t\tupdateTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Update`,\n\t\t\t};\n\t\t},\n\t\trenderModelArtifact: (descriptor) =>\n\t\t\trenderModelArtifact(\n\t\t\t\tfilteredSnapshot.database,\n\t\t\t\tdescriptor,\n\t\t\t\tnormalizedConfig,\n\t\t\t),\n\t\tsnapshot: filteredSnapshot,\n\t});\n}\n","import { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, relative, resolve } from \"node:path\";\nimport { resolveArtifactWritePlan } from \"./artifact-merge.ts\";\nimport { GENERATED_MANIFEST_REL, loadGeneratorConfig } from \"./config.ts\";\nimport { ensureGeneratorConfigFile } from \"./config-file.ts\";\nimport { resolveGeneratorProvider } from \"./providers.ts\";\nimport { generateArtifactsFromSnapshot } from \"./renderer.ts\";\nimport {\n\tdiscoverPostgresSchemas,\n\tmergeSchemaSelections,\n} from \"./schema-discovery.ts\";\nimport { resolveProviderSchemas } from \"./schema-selection.ts\";\nimport type {\n\tGeneratedArtifact,\n\tGeneratedManifest,\n\tGeneratorConfigEnsureSummary,\n\tLoadGeneratorConfigOptions,\n\tNormalizedAthenaGeneratorConfig,\n\tRunGeneratorOptions,\n\tRunGeneratorResult,\n\tSkippedGeneratedArtifact,\n\tWrittenGeneratedArtifact,\n} from \"./types.ts\";\n\nconst GENERATOR_VERSION = \"4.0.0\";\n\nfunction toPosixRel(pathValue: string): string {\n\treturn pathValue.replace(/\\\\/g, \"/\");\n}\n\nfunction buildGeneratedManifest(input: {\n\tconfigPath: string;\n\tcwd: string;\n\tfiles: GeneratedArtifact[];\n}): GeneratedManifest {\n\tconst configRel =\n\t\tinput.configPath === \"[environment defaults]\"\n\t\t\t? \"athena.config.ts\"\n\t\t\t: toPosixRel(relative(input.cwd, input.configPath));\n\tconst outputs = [\n\t\t...new Set(input.files.map((file) => toPosixRel(file.path))),\n\t].sort();\n\treturn {\n\t\tconfig: configRel.startsWith(\"..\") ? \"athena.config.ts\" : configRel,\n\t\tgeneratorVersion: GENERATOR_VERSION,\n\t\toutputs,\n\t};\n}\n\nasync function writeGeneratedManifest(\n\tcwd: string,\n\tmanifest: GeneratedManifest,\n\tdryRun: boolean,\n): Promise<string> {\n\tconst rel = GENERATED_MANIFEST_REL;\n\tconst absolutePath = resolve(cwd, rel);\n\tconst body = `${JSON.stringify(manifest, null, 2)}\\n`;\n\tif (!dryRun) {\n\t\tawait mkdir(dirname(absolutePath), { recursive: true });\n\t\tawait writeFile(absolutePath, body, \"utf8\");\n\t}\n\treturn rel;\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n\ttry {\n\t\tawait stat(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function readExisting(path: string): Promise<string | null> {\n\ttry {\n\t\treturn await readFile(path, \"utf8\");\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction policyForArtifact(\n\tfile: GeneratedArtifact,\n\tconfig: NormalizedAthenaGeneratorConfig,\n):\n\t| \"always\"\n\t| NormalizedAthenaGeneratorConfig[\"output\"][\"artifactWrite\"][\"database\"] {\n\tif (file.kind === \"model\" || file.kind === \"schema\") {\n\t\treturn \"always\";\n\t}\n\tif (file.kind === \"database\") {\n\t\treturn config.output.artifactWrite.database;\n\t}\n\treturn config.output.artifactWrite.registry;\n}\n\nasync function writeArtifacts(\n\tfiles: GeneratedArtifact[],\n\tcwd: string,\n\tconfig: NormalizedAthenaGeneratorConfig,\n\tdryRun: boolean,\n): Promise<{\n\twrittenFiles: string[];\n\twrittenDetails: WrittenGeneratedArtifact[];\n\tskippedFiles: SkippedGeneratedArtifact[];\n}> {\n\tconst writtenFiles: string[] = [];\n\tconst writtenDetails: WrittenGeneratedArtifact[] = [];\n\tconst skippedFiles: SkippedGeneratedArtifact[] = [];\n\n\tfor (const file of files) {\n\t\tconst absolutePath = resolve(cwd, file.path);\n\t\tconst exists = await fileExists(absolutePath);\n\t\tconst existingContent = exists ? await readExisting(absolutePath) : null;\n\t\tconst policy = policyForArtifact(file, config);\n\t\tconst plan = resolveArtifactWritePlan(file, existingContent, policy);\n\n\t\tif (plan.action === \"skip\" || plan.action === \"unchanged\") {\n\t\t\tskippedFiles.push({\n\t\t\t\tconflicts: plan.conflicts.length > 0 ? plan.conflicts : undefined,\n\t\t\t\tdetail: plan.detail,\n\t\t\t\tkind: file.kind,\n\t\t\t\tlintErrors: plan.lintErrors.length > 0 ? plan.lintErrors : undefined,\n\t\t\t\tpath: file.path,\n\t\t\t\tpreservedCustom:\n\t\t\t\t\tplan.preservedCustom.length > 0 ? plan.preservedCustom : undefined,\n\t\t\t\treason: plan.skipReason ?? \"already-current\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(plan.content && plan.writeReason)) {\n\t\t\tskippedFiles.push({\n\t\t\t\tdetail: \"merge produced no content\",\n\t\t\t\tkind: file.kind,\n\t\t\t\tlintErrors: plan.lintErrors,\n\t\t\t\tpath: file.path,\n\t\t\t\treason: \"merge-lint-failed\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!dryRun) {\n\t\t\tawait mkdir(dirname(absolutePath), { recursive: true });\n\t\t\tawait writeFile(absolutePath, plan.content, \"utf8\");\n\t\t}\n\n\t\twrittenFiles.push(file.path);\n\t\twrittenDetails.push({\n\t\t\tadded: plan.added.length > 0 ? plan.added : undefined,\n\t\t\tkind: file.kind,\n\t\t\tpath: file.path,\n\t\t\tpreservedCustom:\n\t\t\t\tplan.preservedCustom.length > 0 ? plan.preservedCustom : undefined,\n\t\t\treason: plan.writeReason,\n\t\t});\n\t}\n\n\treturn {\n\t\tskippedFiles,\n\t\twrittenDetails,\n\t\twrittenFiles,\n\t};\n}\n\nfunction withPostgresSchemas(\n\tconfig: NormalizedAthenaGeneratorConfig,\n\tschemas: string[],\n): NormalizedAthenaGeneratorConfig {\n\tif (config.provider.kind !== \"postgres\") {\n\t\treturn config;\n\t}\n\n\treturn {\n\t\t...config,\n\t\tprovider: {\n\t\t\t...config.provider,\n\t\t\tschemas,\n\t\t},\n\t};\n}\n\n/**\n * End-to-end generator execution: load config, introspect, render, and optionally write files.\n *\n * When `writeConfig` is enabled (default), also ensures `athena.config.ts` exists and\n * auto-fills discovered schemas without clobbering custom config fields.\n */\nexport async function runSchemaGenerator(\n\toptions: RunGeneratorOptions = {},\n): Promise<RunGeneratorResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst dryRun = options.dryRun === true;\n\tconst writeConfig = options.writeConfig !== false;\n\tconst discoverSchemas = options.discoverSchemas !== false;\n\tconst configOptions: LoadGeneratorConfigOptions = {\n\t\tconfigPath: options.configPath,\n\t\tcwd,\n\t};\n\n\tconst loaded = await loadGeneratorConfig(configOptions);\n\tlet { configPath, config } = loaded;\n\tlet configEnsure: GeneratorConfigEnsureSummary | undefined;\n\n\t// Expand schemas from live discovery before introspection so gateway/direct\n\t// multi-schema databases generate fully without requiring a hand-maintained list.\n\t// Injected test/custom providers skip live discovery to avoid real network I/O.\n\tlet effectiveSchemas = resolveProviderSchemas(config.provider);\n\tconst canDiscoverLive =\n\t\tdiscoverSchemas && config.provider.kind === \"postgres\" && !options.provider;\n\n\tif (canDiscoverLive) {\n\t\ttry {\n\t\t\tconst discovered = await discoverPostgresSchemas(config.provider);\n\t\t\tif (discovered.length > 0) {\n\t\t\t\teffectiveSchemas = mergeSchemaSelections(effectiveSchemas, discovered);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Discovery is best-effort during generate; configured schemas still run.\n\t\t}\n\t}\n\n\tconfig = withPostgresSchemas(config, effectiveSchemas);\n\n\t// Intelligent config ensure: create when missing, patch schemas when expanded.\n\t// Skip when a custom provider is injected (unit tests / programmatic overrides).\n\tconst shouldEnsureConfig =\n\t\twriteConfig && config.provider.kind === \"postgres\" && !options.provider;\n\n\tif (shouldEnsureConfig) {\n\t\tconst ensureResult = await ensureGeneratorConfigFile({\n\t\t\tconfigPath: options.configPath,\n\t\t\tcwd,\n\t\t\t// Schemas already resolved above — avoid a second discovery round-trip.\n\t\t\tdiscoverSchemas: false,\n\t\t\tdryRun,\n\t\t\tloaded: { config, configPath },\n\t\t\tmode: config.provider.mode,\n\t\t\tprovider: config.provider,\n\t\t\tschemas: effectiveSchemas,\n\t\t});\n\n\t\tconfigEnsure = {\n\t\t\taction: ensureResult.action,\n\t\t\tchanges: ensureResult.changes,\n\t\t\tdiscoveryError: ensureResult.discoveryError,\n\t\t\tpath: ensureResult.path,\n\t\t\treason: ensureResult.reason,\n\t\t\tschemaProvenance: ensureResult.schemaProvenance,\n\t\t\tschemas: ensureResult.schemas,\n\t\t};\n\n\t\t// Prefer the durable config path once a real file was created/updated.\n\t\tif (\n\t\t\tensureResult.action === \"created\" ||\n\t\t\tensureResult.action === \"updated\" ||\n\t\t\t(ensureResult.action === \"unchanged\" &&\n\t\t\t\tconfigPath === \"[environment defaults]\")\n\t\t) {\n\t\t\tconfigPath = ensureResult.absolutePath;\n\t\t\tif (ensureResult.schemas.length > 0) {\n\t\t\t\teffectiveSchemas = ensureResult.schemas;\n\t\t\t\tconfig = withPostgresSchemas(config, effectiveSchemas);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst provider =\n\t\toptions.provider ??\n\t\tresolveGeneratorProvider(config.provider, config.experimental);\n\n\tconst snapshot = await provider.inspect({\n\t\tschemas: effectiveSchemas,\n\t});\n\n\tconst generated = generateArtifactsFromSnapshot(snapshot, config);\n\tconst writeResult = await writeArtifacts(\n\t\tgenerated.files,\n\t\tcwd,\n\t\tconfig,\n\t\tdryRun,\n\t);\n\n\tconst generatedManifest = buildGeneratedManifest({\n\t\tconfigPath,\n\t\tcwd,\n\t\tfiles: generated.files,\n\t});\n\tconst generatedManifestPath = await writeGeneratedManifest(\n\t\tcwd,\n\t\tgeneratedManifest,\n\t\tdryRun,\n\t);\n\n\treturn {\n\t\t...generated,\n\t\tconfig,\n\t\tconfigEnsure,\n\t\tconfigPath,\n\t\tgeneratedManifest,\n\t\tgeneratedManifestPath,\n\t\tskippedFiles: writeResult.skippedFiles,\n\t\twrittenDetails: writeResult.writtenDetails,\n\t\twrittenFiles: writeResult.writtenFiles,\n\t};\n}\n","/**\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","/**\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\tsession?: {\n\t\tactiveOrganizationId?: string | null;\n\t} | null;\n}\n\nexport interface OrganizationLike {\n\tid: string;\n}\n\nexport interface EnsureActiveOrganizationOptions<\n\tTOrganization extends OrganizationLike,\n> {\n\tlistOrganizations: () => Promise<readonly TOrganization[]>;\n\tonError?: (error: unknown) => void;\n\t/**\n\t * Choose which org to activate when the session has none.\n\t * Default: first organization with a non-empty `id`.\n\t */\n\tselectOrganizationId?: (\n\t\torganizations: readonly TOrganization[],\n\t) => string | null;\n\tsession: ActiveOrganizationSessionLike | null | undefined;\n\tsetActiveOrganization: (organizationId: string) => Promise<unknown>;\n}\n\nexport interface EnsureActiveOrganizationResult {\n\tactiveOrganizationId: string | null;\n\tdidSetActiveOrganization: boolean;\n}\n\nfunction normalizeOrganizationId(\n\tvalue: string | null | undefined,\n): string | null {\n\tif (typeof value !== \"string\") {\n\t\treturn null;\n\t}\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : null;\n}\n\nfunction defaultSelectOrganizationId<TOrganization extends OrganizationLike>(\n\torganizations: readonly TOrganization[],\n): string | null {\n\tfor (const organization of organizations) {\n\t\tconst id = normalizeOrganizationId(organization.id);\n\t\tif (id) {\n\t\t\treturn id;\n\t\t}\n\t}\n\treturn 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\tTOrganization extends OrganizationLike,\n>(\n\toptions: EnsureActiveOrganizationOptions<TOrganization>,\n): Promise<EnsureActiveOrganizationResult> {\n\tconst currentActiveOrganizationId = normalizeOrganizationId(\n\t\toptions.session?.session?.activeOrganizationId,\n\t);\n\n\tif (currentActiveOrganizationId) {\n\t\treturn {\n\t\t\tactiveOrganizationId: currentActiveOrganizationId,\n\t\t\tdidSetActiveOrganization: false,\n\t\t};\n\t}\n\n\tlet organizations: readonly TOrganization[];\n\ttry {\n\t\torganizations = await options.listOrganizations();\n\t} catch (error) {\n\t\toptions.onError?.(error);\n\t\treturn {\n\t\t\tactiveOrganizationId: null,\n\t\t\tdidSetActiveOrganization: false,\n\t\t};\n\t}\n\n\tif (organizations.length === 0) {\n\t\treturn {\n\t\t\tactiveOrganizationId: null,\n\t\t\tdidSetActiveOrganization: false,\n\t\t};\n\t}\n\n\tconst selectedOrganizationId = normalizeOrganizationId(\n\t\t(options.selectOrganizationId ?? defaultSelectOrganizationId)(\n\t\t\torganizations,\n\t\t),\n\t);\n\n\tif (!selectedOrganizationId) {\n\t\treturn {\n\t\t\tactiveOrganizationId: null,\n\t\t\tdidSetActiveOrganization: false,\n\t\t};\n\t}\n\n\ttry {\n\t\tawait options.setActiveOrganization(selectedOrganizationId);\n\t\treturn {\n\t\t\tactiveOrganizationId: selectedOrganizationId,\n\t\t\tdidSetActiveOrganization: true,\n\t\t};\n\t} catch (error) {\n\t\toptions.onError?.(error);\n\t\treturn {\n\t\t\tactiveOrganizationId: null,\n\t\t\tdidSetActiveOrganization: false,\n\t\t};\n\t}\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","/**\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\n// ---------------------------------------------------------------------------\n// Back-compat table-oriented aliases (athena-auth-ui and existing consumers)\n// ---------------------------------------------------------------------------\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\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  return undefined;\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\n/** @deprecated Prefer {@link flattenAthenaReadQueryRows}. */\nexport const flattenAthenaRows = flattenAthenaReadQueryRows;\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\n/** @deprecated Prefer {@link buildAthenaReadQuerySelectString}. */\nexport const buildAthenaTableSelectString = buildAthenaReadQuerySelectString;\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\n/** @deprecated Prefer {@link buildAthenaReadQueryFindManySelect}. */\nexport const buildAthenaTableFindManySelect =\n  buildAthenaReadQueryFindManySelect;\n\nexport function buildAthenaReadQueryFindManyWhere(\n  filters: readonly AthenaReadQueryFilter[] | undefined,\n) {\n  if (!filters?.length) {\n    return undefined;\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/** @deprecated Prefer {@link buildAthenaReadQueryFindManyWhere}. */\nexport const buildAthenaTableFindManyWhere = buildAthenaReadQueryFindManyWhere;\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 undefined;\n  }\n\n  if (normalized.length === 1) {\n    const primary = normalized[0];\n    if (!primary) {\n      return undefined;\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\n/** @deprecated Prefer {@link buildAthenaReadQueryFindManyOrderBy}. */\nexport const buildAthenaTableFindManyOrderBy =\n  buildAthenaReadQueryFindManyOrderBy;\n\n/** @deprecated Prefer {@link normalizeAthenaReadQueryOrderBy}. */\nexport const normalizeAthenaTableOrderBy = normalizeAthenaReadQueryOrderBy;\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\n/** @deprecated Prefer {@link applyAthenaReadQueryFilters}. */\nexport const applyAthenaTableFilters = applyAthenaReadQueryFilters;\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 = (builder as {\n      order?: (column: string, options: { ascending: boolean }) => T;\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\n/** @deprecated Prefer {@link applyAthenaReadQuerySelectOrder}. */\nexport const applyAthenaTableSelectOrder = applyAthenaReadQuerySelectOrder;\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\n/** @deprecated Prefer {@link applyAthenaReadQuerySelectLimit}. */\nexport const applyAthenaTableSelectLimit = applyAthenaReadQuerySelectLimit;\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\n/** @deprecated Prefer {@link clampAthenaReadQueryTotalItems}. */\nexport const clampAthenaTableTotalItems = clampAthenaReadQueryTotalItems;\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\n/**\n * @deprecated Prefer {@link executeAthenaReadQuery}. Same implementation.\n */\nexport const executeAthenaTableQuery = executeAthenaReadQuery;\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 * 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    // biome-ignore lint/style/useErrorCause: AthenaContractParseError forwards cause via Error options\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","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 * Branded stable id for a schema object. Same {@link SchemaObjectId} plus a\n * changed physical name is a rename, not drop+create.\n */\ndeclare const schemaObjectIdBrand: unique symbol;\n\nexport type SchemaObjectId = string & {\n\treadonly [schemaObjectIdBrand]: \"SchemaObjectId\";\n};\n\nexport interface SchemaNameTriple {\n\treadonly database: string;\n\treadonly namespace: string;\n\treadonly name: string;\n}\n\n/** Logical (Athena) vs physical (backend) identity. */\nexport interface SchemaObjectIdentity {\n\treadonly logical: SchemaNameTriple;\n\treadonly physical: SchemaNameTriple;\n}\n\nexport function asSchemaObjectId(id: string): SchemaObjectId {\n\treturn id as SchemaObjectId;\n}\n\nexport function schemaNameTriple(\n\tdatabase: string,\n\tnamespace: string,\n\tname: string,\n): SchemaNameTriple {\n\treturn { database, namespace, name };\n}\n\nexport function schemaObjectIdentity(\n\tdatabase: string,\n\tnamespace: string,\n\tname: string,\n\tphysical: Partial<SchemaNameTriple> = {},\n): SchemaObjectIdentity {\n\treturn {\n\t\tlogical: schemaNameTriple(database, namespace, name),\n\t\tphysical: schemaNameTriple(\n\t\t\tphysical.database ?? database,\n\t\t\tphysical.namespace ?? namespace,\n\t\t\tphysical.name ?? name,\n\t\t),\n\t};\n}\n\nexport function physicalIdentityKey(identity: SchemaObjectIdentity): string {\n\tconst p = identity.physical;\n\treturn `${p.database}\\u0000${p.namespace}\\u0000${p.name}`;\n}\n","/** Canonical Schema IR document kind. */\nexport const ATHENA_SCHEMA_IR_KIND = \"athena.schema\" as const;\n\n/** Schema IR document version. Bump only on breaking IR shape changes. */\nexport const ATHENA_SCHEMA_IR_VERSION = 2 as const;\n\nexport type AthenaSchemaIrKind = typeof ATHENA_SCHEMA_IR_KIND;\nexport type AthenaSchemaIrVersion = typeof ATHENA_SCHEMA_IR_VERSION;\n","import type { AthenaSchemaIr } from \"./document.ts\";\nimport { ATHENA_SCHEMA_IR_KIND, ATHENA_SCHEMA_IR_VERSION } from \"./version.ts\";\n\nexport class SchemaIrError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SchemaIrError\";\n\t}\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction requireArray(value: unknown, label: string): unknown[] {\n\tif (!Array.isArray(value)) {\n\t\tthrow new SchemaIrError(`${label} must be an array`);\n\t}\n\treturn value;\n}\n\nfunction requireNonEmptyId(value: unknown, label: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new SchemaIrError(`${label}.id is required`);\n\t}\n\treturn value;\n}\n\nfunction requireNonEmptyString(value: unknown, label: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new SchemaIrError(`${label} must be a non-empty string`);\n\t}\n\treturn value;\n}\n\nfunction requireOptionalNullableString(value: unknown, label: string): void {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new SchemaIrError(`${label} must be a string or null`);\n\t}\n}\n\nfunction requireStringArray(value: unknown, label: string): string[] {\n\tconst items = requireArray(value, label);\n\treturn items.map((entry, index) =>\n\t\trequireNonEmptyString(entry, `${label}[${index}]`),\n\t);\n}\n\nfunction requireNonEmptyStringArray(value: unknown, label: string): string[] {\n\tconst items = requireStringArray(value, label);\n\tif (items.length === 0) {\n\t\tthrow new SchemaIrError(`${label} is required`);\n\t}\n\treturn items;\n}\n\nfunction requireOptionalIntegerParameter(\n\tvalue: unknown,\n\tlabel: string,\n\tmin: number,\n): void {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\tif (typeof value !== \"number\" || !Number.isInteger(value) || value < min) {\n\t\tthrow new SchemaIrError(\n\t\t\t`${label} must be an integer >= ${String(min)} or null`,\n\t\t);\n\t}\n}\n\nfunction requireUniqueId(id: string, seen: Set<string>, label: string): void {\n\tif (seen.has(id)) {\n\t\tthrow new SchemaIrError(`Duplicate ${label} id \"${id}\"`);\n\t}\n\tseen.add(id);\n}\n\nfunction requireIdentity(value: unknown, label: string): void {\n\tif (!isObject(value)) {\n\t\tthrow new SchemaIrError(`${label}.identity is required`);\n\t}\n\tfor (const axis of [\"logical\", \"physical\"] as const) {\n\t\tconst side = value[axis];\n\t\tif (!isObject(side)) {\n\t\t\tthrow new SchemaIrError(`${label}.identity.${axis} is required`);\n\t\t}\n\t\tfor (const key of [\"database\", \"namespace\", \"name\"] as const) {\n\t\t\tif (typeof side[key] !== \"string\") {\n\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t`${label}.identity.${axis}.${key} must be a string`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (axis === \"physical\") {\n\t\t\trequireNonEmptyString(side.name, `${label}.identity.physical.name`);\n\t\t}\n\t}\n}\n\nfunction physicalTableIdentityKey(identity: unknown): string {\n\tif (!isObject(identity) || !isObject(identity.physical)) {\n\t\treturn \"\";\n\t}\n\tconst physical = identity.physical;\n\tif (\n\t\ttypeof physical.database !== \"string\" ||\n\t\ttypeof physical.namespace !== \"string\" ||\n\t\ttypeof physical.name !== \"string\"\n\t) {\n\t\treturn \"\";\n\t}\n\treturn `${physical.database}\\0${physical.namespace}\\0${physical.name}`;\n}\n\nfunction physicalNamespaceScopeKey(identity: unknown): string {\n\tif (!isObject(identity) || !isObject(identity.physical)) {\n\t\treturn \"\";\n\t}\n\tconst physical = identity.physical;\n\tif (\n\t\ttypeof physical.database !== \"string\" ||\n\t\ttypeof physical.namespace !== \"string\"\n\t) {\n\t\treturn \"\";\n\t}\n\treturn `${physical.database}\\0${physical.namespace}`;\n}\n\nconst TYPE_KINDS = new Set([\"scalar\", \"enum\", \"native\"]);\n\nfunction requireType(\n\tvalue: unknown,\n\tlabel: string,\n\tenumRefs: Array<{ enumId: string; label: string }>,\n): void {\n\tif (!isObject(value)) {\n\t\tthrow new SchemaIrError(`${label}.type is required`);\n\t}\n\tif (typeof value.kind !== \"string\" || !TYPE_KINDS.has(value.kind)) {\n\t\tthrow new SchemaIrError(\n\t\t\t`${label}.type.kind \"${String(value.kind)}\" is unsupported`,\n\t\t);\n\t}\n\tif (!isObject(value.native)) {\n\t\tthrow new SchemaIrError(`${label}.type.native is required`);\n\t}\n\tif (\n\t\ttypeof value.native.backend !== \"string\" ||\n\t\tvalue.native.backend.length === 0\n\t) {\n\t\tthrow new SchemaIrError(`${label}.type.native.backend is required`);\n\t}\n\tif (typeof value.native.name !== \"string\" || value.native.name.length === 0) {\n\t\tthrow new SchemaIrError(`${label}.type.native.name is required`);\n\t}\n\tif (\n\t\ttypeof value.native.arrayDimensions !== \"number\" ||\n\t\t!Number.isInteger(value.native.arrayDimensions) ||\n\t\tvalue.native.arrayDimensions < 0\n\t) {\n\t\tthrow new SchemaIrError(\n\t\t\t`${label}.type.native.arrayDimensions must be a nonnegative integer`,\n\t\t);\n\t}\n\trequireOptionalIntegerParameter(\n\t\tvalue.native.length,\n\t\t`${label}.type.native.length`,\n\t\t1,\n\t);\n\trequireOptionalIntegerParameter(\n\t\tvalue.native.precision,\n\t\t`${label}.type.native.precision`,\n\t\t1,\n\t);\n\trequireOptionalIntegerParameter(\n\t\tvalue.native.scale,\n\t\t`${label}.type.native.scale`,\n\t\t0,\n\t);\n\tif (value.kind === \"scalar\") {\n\t\tif (typeof value.semantic !== \"string\" || value.semantic.length === 0) {\n\t\t\tthrow new SchemaIrError(`${label}.type.semantic is required`);\n\t\t}\n\t}\n\tif (value.kind === \"enum\") {\n\t\tif (typeof value.enumId !== \"string\" || value.enumId.length === 0) {\n\t\t\tthrow new SchemaIrError(`${label}.type.enumId is required`);\n\t\t}\n\t\tenumRefs.push({ enumId: value.enumId, label });\n\t}\n}\n\nconst CONSTRAINT_KINDS = new Set([\n\t\"primary_key\",\n\t\"unique\",\n\t\"foreign_key\",\n\t\"check\",\n]);\n\nconst REFERENTIAL_ACTIONS = new Set([\n\t\"no_action\",\n\t\"restrict\",\n\t\"cascade\",\n\t\"set_null\",\n\t\"set_default\",\n]);\n\nconst RELATION_CARDINALITIES = new Set([\"1:1\", \"1:n\", \"n:1\", \"n:n\"]);\nconst INDEX_DIRECTIONS = new Set([\"asc\", \"desc\"]);\n\nfunction requireKnownColumns(\n\tcolumns: string[],\n\tknown: Set<string>,\n\tlabel: string,\n): void {\n\tfor (const column of columns) {\n\t\tif (!known.has(column)) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`${label} \"${column}\" does not identify a column`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction requireUniqueColumnNames(columns: string[], label: string): void {\n\tconst seen = new Set<string>();\n\tfor (const column of columns) {\n\t\tif (seen.has(column)) {\n\t\t\tthrow new SchemaIrError(`${label} must not repeat column \"${column}\"`);\n\t\t}\n\t\tseen.add(column);\n\t}\n}\n\nfunction validateConstraint(\n\titem: Record<string, unknown>,\n\tsourceColumns: Set<string>,\n\tpendingFks: Array<{ targetTableId: string; targetColumns: string[] }>,\n): void {\n\tif (typeof item.kind !== \"string\" || item.kind.length === 0) {\n\t\tthrow new SchemaIrError(\"SchemaConstraint.kind is required\");\n\t}\n\tif (!CONSTRAINT_KINDS.has(item.kind)) {\n\t\tthrow new SchemaIrError(\n\t\t\t`SchemaConstraint.kind \"${item.kind}\" is unsupported`,\n\t\t);\n\t}\n\tif (item.name !== undefined && item.name !== null) {\n\t\tif (typeof item.name !== \"string\" || item.name.length === 0) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"SchemaConstraint.name must be a non-empty string or null\",\n\t\t\t);\n\t\t}\n\t}\n\tif (item.kind === \"check\") {\n\t\tif (typeof item.expression !== \"string\" || item.expression.length === 0) {\n\t\t\tthrow new SchemaIrError(\"SchemaConstraint.expression is required\");\n\t\t}\n\t\treturn;\n\t}\n\tconst columns = requireNonEmptyStringArray(\n\t\titem.columns,\n\t\t\"SchemaConstraint.columns\",\n\t);\n\trequireKnownColumns(columns, sourceColumns, \"SchemaConstraint.columns\");\n\trequireUniqueColumnNames(columns, \"SchemaConstraint.columns\");\n\tif (item.kind === \"foreign_key\") {\n\t\tconst targetTableId = requireNonEmptyString(\n\t\t\titem.targetTableId,\n\t\t\t\"SchemaConstraint.targetTableId\",\n\t\t);\n\t\tconst targetColumns = requireNonEmptyStringArray(\n\t\t\titem.targetColumns,\n\t\t\t\"SchemaConstraint.targetColumns\",\n\t\t);\n\t\trequireUniqueColumnNames(targetColumns, \"SchemaConstraint.targetColumns\");\n\t\tif (columns.length !== targetColumns.length) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"SchemaConstraint.targetColumns must have the same length as SchemaConstraint.columns\",\n\t\t\t);\n\t\t}\n\t\tif (item.onDelete !== undefined) {\n\t\t\tif (\n\t\t\t\ttypeof item.onDelete !== \"string\" ||\n\t\t\t\t!REFERENTIAL_ACTIONS.has(item.onDelete)\n\t\t\t) {\n\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t`SchemaConstraint.onDelete \"${String(item.onDelete)}\" is unsupported`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (item.onUpdate !== undefined) {\n\t\t\tif (\n\t\t\t\ttypeof item.onUpdate !== \"string\" ||\n\t\t\t\t!REFERENTIAL_ACTIONS.has(item.onUpdate)\n\t\t\t) {\n\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t`SchemaConstraint.onUpdate \"${String(item.onUpdate)}\" is unsupported`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tpendingFks.push({ targetTableId, targetColumns });\n\t}\n}\n\nfunction validateColumn(\n\titem: Record<string, unknown>,\n\tenumRefs: Array<{ enumId: string; label: string }>,\n): void {\n\trequireIdentity(item.identity, \"SchemaColumn\");\n\trequireType(item.type, \"SchemaColumn\", enumRefs);\n\tif (typeof item.nullable !== \"boolean\") {\n\t\tthrow new SchemaIrError(\"SchemaColumn.nullable must be a boolean\");\n\t}\n\tif (\n\t\titem.default !== undefined &&\n\t\titem.default !== null &&\n\t\ttypeof item.default !== \"string\"\n\t) {\n\t\tthrow new SchemaIrError(\"SchemaColumn.default must be a string or null\");\n\t}\n\tif (item.generated !== undefined && typeof item.generated !== \"boolean\") {\n\t\tthrow new SchemaIrError(\"SchemaColumn.generated must be a boolean\");\n\t}\n\tif (item.isGenerated !== undefined && typeof item.isGenerated !== \"boolean\") {\n\t\tthrow new SchemaIrError(\"SchemaColumn.isGenerated must be a boolean\");\n\t}\n}\n\nfunction validateEnum(item: Record<string, unknown>): void {\n\trequireIdentity(item.identity, \"SchemaEnum\");\n\tif (item.name !== undefined && item.name !== null) {\n\t\tif (typeof item.name !== \"string\" || item.name.length === 0) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"SchemaEnum.name must be a non-empty string or null\",\n\t\t\t);\n\t\t}\n\t}\n\tconst labels = requireStringArray(item.labels, \"SchemaEnum.labels\");\n\tconst seen = new Set<string>();\n\tfor (const label of labels) {\n\t\tif (seen.has(label)) {\n\t\t\tthrow new SchemaIrError(`Duplicate SchemaEnum label \"${label}\"`);\n\t\t}\n\t\tseen.add(label);\n\t}\n}\n\ntype TableCatalogEntry = {\n\tcolumns: Set<string>;\n\tconstraints: Set<string>;\n};\n\ntype PendingRelationThrough = {\n\tsourceColumns: string[];\n\ttableId: string;\n\ttargetColumns: string[];\n};\n\ntype PendingRelation = {\n\tbackingConstraintIds: string[];\n\tsourceColumns: string[] | undefined;\n\tsourceTableId: string;\n\ttargetColumns: string[] | undefined;\n\ttargetTableId: string;\n\tthrough: PendingRelationThrough | undefined;\n};\n\nfunction validateRelation(item: Record<string, unknown>): PendingRelation {\n\tif (item.name !== undefined && item.name !== null) {\n\t\tif (typeof item.name !== \"string\" || item.name.length === 0) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"SchemaRelation.name must be a non-empty string or null\",\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\ttypeof item.cardinality !== \"string\" ||\n\t\t!RELATION_CARDINALITIES.has(item.cardinality)\n\t) {\n\t\tthrow new SchemaIrError(\n\t\t\t`SchemaRelation.cardinality \"${String(item.cardinality)}\" is unsupported`,\n\t\t);\n\t}\n\tconst sourceTableId = requireNonEmptyString(\n\t\titem.sourceTableId,\n\t\t\"SchemaRelation.sourceTableId\",\n\t);\n\tconst targetTableId = requireNonEmptyString(\n\t\titem.targetTableId,\n\t\t\"SchemaRelation.targetTableId\",\n\t);\n\tif (!Array.isArray(item.backingConstraintIds)) {\n\t\tthrow new SchemaIrError(\n\t\t\t\"SchemaRelation.backingConstraintIds must be an array\",\n\t\t);\n\t}\n\tconst backingConstraintIds = item.backingConstraintIds.map(\n\t\t(backingId, index) =>\n\t\t\trequireNonEmptyString(\n\t\t\t\tbackingId,\n\t\t\t\t`SchemaRelation.backingConstraintIds[${index}]`,\n\t\t\t),\n\t);\n\tconst sourceColumns =\n\t\titem.sourceColumns === undefined\n\t\t\t? undefined\n\t\t\t: requireStringArray(item.sourceColumns, \"SchemaRelation.sourceColumns\");\n\tconst targetColumns =\n\t\titem.targetColumns === undefined\n\t\t\t? undefined\n\t\t\t: requireStringArray(item.targetColumns, \"SchemaRelation.targetColumns\");\n\tlet through: PendingRelation[\"through\"];\n\tif (item.cardinality === \"n:n\" || item.through !== undefined) {\n\t\tif (!isObject(item.through)) {\n\t\t\tthrow new SchemaIrError(\"SchemaRelation.through is required\");\n\t\t}\n\t\tthrough = {\n\t\t\ttableId: requireNonEmptyString(\n\t\t\t\titem.through.tableId,\n\t\t\t\t\"SchemaRelation.through.tableId\",\n\t\t\t),\n\t\t\tsourceColumns: requireStringArray(\n\t\t\t\titem.through.sourceColumns,\n\t\t\t\t\"SchemaRelation.through.sourceColumns\",\n\t\t\t),\n\t\t\ttargetColumns: requireStringArray(\n\t\t\t\titem.through.targetColumns,\n\t\t\t\t\"SchemaRelation.through.targetColumns\",\n\t\t\t),\n\t\t};\n\t}\n\treturn {\n\t\tbackingConstraintIds,\n\t\tsourceColumns,\n\t\tsourceTableId,\n\t\ttargetColumns,\n\t\ttargetTableId,\n\t\tthrough,\n\t};\n}\n\nfunction validateIndex(\n\titem: Record<string, unknown>,\n\tsourceColumns: Set<string>,\n\tseenIndexNames: Set<string>,\n\tnamespaceScope: string,\n): void {\n\tconst columns = requireArray(item.columns, \"SchemaIndex.columns\");\n\tif (columns.length === 0) {\n\t\tthrow new SchemaIrError(\"SchemaIndex.columns is required\");\n\t}\n\tconst columnNames: string[] = [];\n\tfor (const [index, raw] of columns.entries()) {\n\t\tconst label = `SchemaIndex.columns[${index}]`;\n\t\tif (typeof raw === \"string\") {\n\t\t\trequireNonEmptyString(raw, `${label}.name`);\n\t\t\trequireKnownColumns([raw], sourceColumns, \"SchemaIndex.columns\");\n\t\t\tcolumnNames.push(raw);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isObject(raw)) {\n\t\t\tthrow new SchemaIrError(`${label} must be a string or object`);\n\t\t}\n\t\tconst name = requireNonEmptyString(raw.name, `${label}.name`);\n\t\trequireKnownColumns([name], sourceColumns, \"SchemaIndex.columns\");\n\t\tcolumnNames.push(name);\n\t\tif (\n\t\t\traw.direction !== undefined &&\n\t\t\traw.direction !== null &&\n\t\t\t(typeof raw.direction !== \"string\" ||\n\t\t\t\t!INDEX_DIRECTIONS.has(raw.direction))\n\t\t) {\n\t\t\tthrow new SchemaIrError(`${label}.direction is unsupported`);\n\t\t}\n\t}\n\trequireUniqueColumnNames(columnNames, \"SchemaIndex.columns\");\n\tif (typeof item.unique !== \"boolean\") {\n\t\tthrow new SchemaIrError(\"SchemaIndex.unique must be a boolean\");\n\t}\n\tif (item.name !== undefined && item.name !== null) {\n\t\tif (typeof item.name !== \"string\" || item.name.length === 0) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"SchemaIndex.name must be a non-empty string or null\",\n\t\t\t);\n\t\t}\n\t\tconst key = `${namespaceScope}\\0${item.name}`;\n\t\tif (seenIndexNames.has(key)) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`Duplicate SchemaIndex.name \"${item.name}\" conflicts with a table or index in the same namespace`,\n\t\t\t);\n\t\t}\n\t\tseenIndexNames.add(key);\n\t}\n\tif (\n\t\titem.predicate !== undefined &&\n\t\titem.predicate !== null &&\n\t\ttypeof item.predicate !== \"string\"\n\t) {\n\t\tthrow new SchemaIrError(\"SchemaIndex.predicate must be a string or null\");\n\t}\n\tif (\n\t\titem.method !== undefined &&\n\t\titem.method !== null &&\n\t\ttypeof item.method !== \"string\"\n\t) {\n\t\tthrow new SchemaIrError(\"SchemaIndex.method must be a string or null\");\n\t}\n}\n\nfunction columnPhysicalName(item: Record<string, unknown>): string {\n\tif (!isObject(item.identity) || !isObject(item.identity.physical)) {\n\t\treturn \"\";\n\t}\n\treturn typeof item.identity.physical.name === \"string\"\n\t\t? item.identity.physical.name\n\t\t: \"\";\n}\n\nfunction validateNamedObjects(\n\tvalues: unknown[],\n\tlabel: string,\n\tseen: Set<string>,\n\tvalidateItem?: (item: Record<string, unknown>) => void,\n): void {\n\tfor (const raw of values) {\n\t\tif (!isObject(raw)) {\n\t\t\tthrow new SchemaIrError(`${label} must be an object`);\n\t\t}\n\t\tconst id = requireNonEmptyId(raw.id, label);\n\t\trequireUniqueId(id, seen, label);\n\t\tvalidateItem?.(raw);\n\t}\n}\n\n/**\n * Fail-closed validation for Athena Schema IR v2.\n * Requires `kind: \"athena.schema\"`, `irVersion: 2`, and `databases[]`.\n * Nested tables, columns, constraints, relations, and indexes must be\n * complete objects with unique non-empty ids.\n */\nexport function validateAthenaSchemaIr(doc: unknown): AthenaSchemaIr {\n\tif (!isObject(doc)) {\n\t\tthrow new SchemaIrError(\"AthenaSchemaIr must be an object\");\n\t}\n\tif (doc.kind !== ATHENA_SCHEMA_IR_KIND) {\n\t\tthrow new SchemaIrError(\n\t\t\t`AthenaSchemaIr.kind must be \"${ATHENA_SCHEMA_IR_KIND}\"`,\n\t\t);\n\t}\n\tif (doc.irVersion !== ATHENA_SCHEMA_IR_VERSION) {\n\t\tthrow new SchemaIrError(\n\t\t\t`AthenaSchemaIr.irVersion must be ${ATHENA_SCHEMA_IR_VERSION}`,\n\t\t);\n\t}\n\tif (!(\"databases\" in doc) || !Array.isArray(doc.databases)) {\n\t\tthrow new SchemaIrError(\"AthenaSchemaIr.databases[] is required\");\n\t}\n\n\tconst seenIds = new Set<string>();\n\tconst seenPhysicalTables = new Set<string>();\n\tconst enumIds = new Set<string>();\n\tconst pendingEnumRefs: Array<{ enumId: string; label: string }> = [];\n\tconst tablesById = new Map<string, TableCatalogEntry>();\n\tconst pendingFks: Array<{ targetTableId: string; targetColumns: string[] }> =\n\t\t[];\n\tconst pendingRelations: PendingRelation[] = [];\n\tconst seenIndexNames = new Set<string>();\n\tfor (const rawDb of doc.databases) {\n\t\tif (!isObject(rawDb)) {\n\t\t\tthrow new SchemaIrError(\"SchemaDatabase must be an object\");\n\t\t}\n\t\tconst dbId = requireNonEmptyId(rawDb.id, \"SchemaDatabase\");\n\t\trequireUniqueId(dbId, seenIds, \"SchemaDatabase\");\n\t\trequireIdentity(rawDb.identity, \"SchemaDatabase\");\n\t\trequireOptionalNullableString(rawDb.backend, \"SchemaDatabase.backend\");\n\t\tif (rawDb.enums !== undefined) {\n\t\t\tvalidateNamedObjects(\n\t\t\t\trequireArray(rawDb.enums, \"SchemaDatabase.enums\"),\n\t\t\t\t\"SchemaEnum\",\n\t\t\t\tseenIds,\n\t\t\t\t(item) => {\n\t\t\t\t\tvalidateEnum(item);\n\t\t\t\t\tenumIds.add(String(item.id));\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tconst namespaces = rawDb.namespaces ?? rawDb.schemas;\n\t\trequireArray(namespaces, \"SchemaDatabase.namespaces\");\n\t\tfor (const rawNs of namespaces as unknown[]) {\n\t\t\tif (!isObject(rawNs)) {\n\t\t\t\tthrow new SchemaIrError(\"SchemaNamespace must be an object\");\n\t\t\t}\n\t\t\tconst nsId = requireNonEmptyId(rawNs.id, \"SchemaNamespace\");\n\t\t\trequireUniqueId(nsId, seenIds, \"SchemaNamespace\");\n\t\t\trequireIdentity(rawNs.identity, \"SchemaNamespace\");\n\t\t\tconst namespaceScope = physicalNamespaceScopeKey(rawNs.identity);\n\t\t\tif (rawNs.enums !== undefined) {\n\t\t\t\tvalidateNamedObjects(\n\t\t\t\t\trequireArray(rawNs.enums, \"SchemaNamespace.enums\"),\n\t\t\t\t\t\"SchemaEnum\",\n\t\t\t\t\tseenIds,\n\t\t\t\t\t(item) => {\n\t\t\t\t\t\tvalidateEnum(item);\n\t\t\t\t\t\tenumIds.add(String(item.id));\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst tables = requireArray(rawNs.tables, \"SchemaNamespace.tables\");\n\t\t\tfor (const rawTable of tables) {\n\t\t\t\tif (!isObject(rawTable)) {\n\t\t\t\t\tthrow new SchemaIrError(\"SchemaTable must be an object\");\n\t\t\t\t}\n\t\t\t\tconst tableId = requireNonEmptyId(rawTable.id, \"SchemaTable\");\n\t\t\t\trequireUniqueId(tableId, seenIds, \"SchemaTable\");\n\t\t\t\trequireIdentity(rawTable.identity, \"SchemaTable\");\n\t\t\t\tconst tableNamespaceScope =\n\t\t\t\t\tphysicalNamespaceScopeKey(rawTable.identity) || namespaceScope;\n\t\t\t\tconst physicalKey = physicalTableIdentityKey(rawTable.identity);\n\t\t\t\tif (physicalKey.length > 0) {\n\t\t\t\t\tif (seenPhysicalTables.has(physicalKey)) {\n\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t`Duplicate SchemaTable physical identity \"${physicalKey.replaceAll(\"\\0\", \".\")}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tseenPhysicalTables.add(physicalKey);\n\t\t\t\t\tif (seenIndexNames.has(physicalKey)) {\n\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t`SchemaTable physical name conflicts with an index in the same namespace \"${physicalKey.replaceAll(\"\\0\", \".\")}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tseenIndexNames.add(physicalKey);\n\t\t\t\t}\n\t\t\t\tconst columns = requireArray(rawTable.columns, \"SchemaTable.columns\");\n\t\t\t\tvalidateNamedObjects(columns, \"SchemaColumn\", seenIds, (item) => {\n\t\t\t\t\tvalidateColumn(item, pendingEnumRefs);\n\t\t\t\t});\n\t\t\t\tconst sourceColumns = new Set<string>();\n\t\t\t\tfor (const rawColumn of columns) {\n\t\t\t\t\tif (isObject(rawColumn)) {\n\t\t\t\t\t\tconst name = columnPhysicalName(rawColumn);\n\t\t\t\t\t\tif (name.length > 0) {\n\t\t\t\t\t\t\tif (sourceColumns.has(name)) {\n\t\t\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t\t\t`Duplicate SchemaColumn physical name \"${name}\"`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsourceColumns.add(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst tableConstraintIds = new Set<string>();\n\t\t\t\tif (rawTable.constraints !== undefined) {\n\t\t\t\t\tlet primaryKeyCount = 0;\n\t\t\t\t\tconst tableConstraintNames = new Set<string>();\n\t\t\t\t\tvalidateNamedObjects(\n\t\t\t\t\t\trequireArray(rawTable.constraints, \"SchemaTable.constraints\"),\n\t\t\t\t\t\t\"SchemaConstraint\",\n\t\t\t\t\t\tseenIds,\n\t\t\t\t\t\t(item) => {\n\t\t\t\t\t\t\ttableConstraintIds.add(String(item.id));\n\t\t\t\t\t\t\tvalidateConstraint(item, sourceColumns, pendingFks);\n\t\t\t\t\t\t\tif (typeof item.name === \"string\" && item.name.length > 0) {\n\t\t\t\t\t\t\t\tif (tableConstraintNames.has(item.name)) {\n\t\t\t\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t\t\t\t`Duplicate SchemaConstraint.name \"${item.name}\"`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttableConstraintNames.add(item.name);\n\t\t\t\t\t\t\t\tif (item.kind === \"primary_key\" || item.kind === \"unique\") {\n\t\t\t\t\t\t\t\t\tconst key = `${tableNamespaceScope}\\0${item.name}`;\n\t\t\t\t\t\t\t\t\tif (seenIndexNames.has(key)) {\n\t\t\t\t\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t\t\t\t\t`SchemaConstraint.name \"${item.name}\" conflicts with a table or index in the same namespace`,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tseenIndexNames.add(key);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (item.kind === \"primary_key\") {\n\t\t\t\t\t\t\t\tprimaryKeyCount += 1;\n\t\t\t\t\t\t\t\tif (primaryKeyCount > 1) {\n\t\t\t\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t\t\t\t\"SchemaTable may declare at most one primary_key constraint\",\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\ttablesById.set(tableId, {\n\t\t\t\t\tcolumns: sourceColumns,\n\t\t\t\t\tconstraints: tableConstraintIds,\n\t\t\t\t});\n\t\t\t\tif (rawTable.relations !== undefined) {\n\t\t\t\t\tvalidateNamedObjects(\n\t\t\t\t\t\trequireArray(rawTable.relations, \"SchemaTable.relations\"),\n\t\t\t\t\t\t\"SchemaRelation\",\n\t\t\t\t\t\tseenIds,\n\t\t\t\t\t\t(item) => {\n\t\t\t\t\t\t\tpendingRelations.push(validateRelation(item));\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (rawTable.indexes !== undefined) {\n\t\t\t\t\tvalidateNamedObjects(\n\t\t\t\t\t\trequireArray(rawTable.indexes, \"SchemaTable.indexes\"),\n\t\t\t\t\t\t\"SchemaIndex\",\n\t\t\t\t\t\tseenIds,\n\t\t\t\t\t\t(item) => {\n\t\t\t\t\t\t\tvalidateIndex(\n\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\tsourceColumns,\n\t\t\t\t\t\t\t\tseenIndexNames,\n\t\t\t\t\t\t\t\ttableNamespaceScope,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const ref of pendingEnumRefs) {\n\t\tif (!enumIds.has(ref.enumId)) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`${ref.label}.type.enumId \"${ref.enumId}\" does not identify an enum`,\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const fk of pendingFks) {\n\t\tconst target = tablesById.get(fk.targetTableId);\n\t\tif (!target) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`SchemaConstraint.targetTableId \"${fk.targetTableId}\" does not identify a table`,\n\t\t\t);\n\t\t}\n\t\trequireKnownColumns(\n\t\t\tfk.targetColumns,\n\t\t\ttarget.columns,\n\t\t\t\"SchemaConstraint.targetColumns\",\n\t\t);\n\t}\n\n\tfor (const relation of pendingRelations) {\n\t\tconst source = tablesById.get(relation.sourceTableId);\n\t\tif (!source) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`SchemaRelation.sourceTableId \"${relation.sourceTableId}\" does not identify a table`,\n\t\t\t);\n\t\t}\n\t\tconst target = tablesById.get(relation.targetTableId);\n\t\tif (!target) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`SchemaRelation.targetTableId \"${relation.targetTableId}\" does not identify a table`,\n\t\t\t);\n\t\t}\n\t\tif (relation.sourceColumns !== undefined) {\n\t\t\trequireKnownColumns(\n\t\t\t\trelation.sourceColumns,\n\t\t\t\tsource.columns,\n\t\t\t\t\"SchemaRelation.sourceColumns\",\n\t\t\t);\n\t\t}\n\t\tif (relation.targetColumns !== undefined) {\n\t\t\trequireKnownColumns(\n\t\t\t\trelation.targetColumns,\n\t\t\t\ttarget.columns,\n\t\t\t\t\"SchemaRelation.targetColumns\",\n\t\t\t);\n\t\t}\n\t\tfor (const backingId of relation.backingConstraintIds) {\n\t\t\tlet found = false;\n\t\t\tfor (const table of tablesById.values()) {\n\t\t\t\tif (table.constraints.has(backingId)) {\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t`SchemaRelation.backingConstraintIds \"${backingId}\" does not identify a constraint`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (relation.through !== undefined) {\n\t\t\tconst through = tablesById.get(relation.through.tableId);\n\t\t\tif (!through) {\n\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t`SchemaRelation.through.tableId \"${relation.through.tableId}\" does not identify a table`,\n\t\t\t\t);\n\t\t\t}\n\t\t\trequireKnownColumns(\n\t\t\t\trelation.through.sourceColumns,\n\t\t\t\tthrough.columns,\n\t\t\t\t\"SchemaRelation.through.sourceColumns\",\n\t\t\t);\n\t\t\trequireKnownColumns(\n\t\t\t\trelation.through.targetColumns,\n\t\t\t\tthrough.columns,\n\t\t\t\t\"SchemaRelation.through.targetColumns\",\n\t\t\t);\n\t\t}\n\t}\n\n\treturn doc as unknown as AthenaSchemaIr;\n}\n","import type { SchemaColumn } from \"./column.ts\";\nimport type {\n\tSchemaConstraint,\n\tSchemaReferentialAction,\n} from \"./constraint.ts\";\nimport type { SchemaDatabase } from \"./database.ts\";\nimport type { AthenaSchemaIr } from \"./document.ts\";\nimport { asSchemaObjectId, type SchemaObjectIdentity } from \"./identity.ts\";\nimport type { SchemaIndex } from \"./indexes.ts\";\nimport type { SchemaMetadata } from \"./metadata.ts\";\nimport type { SchemaEnum, SchemaNamespace } from \"./namespace.ts\";\nimport type { SchemaRelation } from \"./relation.ts\";\nimport type { SchemaTable } from \"./table.ts\";\nimport type { NativeTypeDescriptor, SchemaType } from \"./type.ts\";\nimport { validateAthenaSchemaIr } from \"./validate.ts\";\nimport { ATHENA_SCHEMA_IR_KIND, ATHENA_SCHEMA_IR_VERSION } from \"./version.ts\";\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction canonOptionalFiniteNumber(value: unknown): number | null {\n\tif (value === null) {\n\t\treturn null;\n\t}\n\tif (typeof value === \"number\" && Number.isFinite(value)) {\n\t\treturn value;\n\t}\n\tthrow new Error(\n\t\t\"native length, precision, and scale must be finite numbers or null\",\n\t);\n}\n\nfunction asString(value: unknown, fallback = \"\"): string {\n\treturn typeof value === \"string\" ? value : fallback;\n}\n\nconst REFERENTIAL_ACTIONS = new Set<SchemaReferentialAction>([\n\t\"no_action\",\n\t\"restrict\",\n\t\"cascade\",\n\t\"set_null\",\n\t\"set_default\",\n]);\n\nfunction asReferentialAction(\n\tvalue: unknown,\n\tlabel: string,\n): SchemaReferentialAction | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\ttypeof value === \"string\" &&\n\t\tREFERENTIAL_ACTIONS.has(value as SchemaReferentialAction)\n\t) {\n\t\treturn value as SchemaReferentialAction;\n\t}\n\tthrow new Error(`${label} \"${String(value)}\" is unsupported`);\n}\n\nfunction compareId(a: { id: string }, b: { id: string }): number {\n\treturn a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n}\n\nfunction canonIdentity(raw: unknown): SchemaObjectIdentity {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst logical = isObject(obj.logical) ? obj.logical : {};\n\tconst physical = isObject(obj.physical) ? obj.physical : logical;\n\tconst database = asString(logical.database);\n\tconst namespace = asString(logical.namespace);\n\tconst name = asString(logical.name);\n\treturn {\n\t\tlogical: { database, namespace, name },\n\t\tphysical: {\n\t\t\tdatabase: asString(physical.database, database),\n\t\t\tnamespace: asString(physical.namespace, namespace),\n\t\t\tname: asString(physical.name, name),\n\t\t},\n\t};\n}\n\nfunction canonNative(raw: unknown): NativeTypeDescriptor {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst dims =\n\t\ttypeof obj.arrayDimensions === \"number\" &&\n\t\tNumber.isFinite(obj.arrayDimensions)\n\t\t\t? obj.arrayDimensions\n\t\t\t: 0;\n\tconst native: NativeTypeDescriptor = {\n\t\tbackend: asString(obj.backend, \"postgresql\"),\n\t\tname: asString(obj.name),\n\t\tarrayDimensions: dims,\n\t};\n\tconst withLength =\n\t\tobj.length === undefined\n\t\t\t? native\n\t\t\t: { ...native, length: canonOptionalFiniteNumber(obj.length) };\n\tconst withPrecision =\n\t\tobj.precision === undefined\n\t\t\t? withLength\n\t\t\t: {\n\t\t\t\t\t...withLength,\n\t\t\t\t\tprecision: canonOptionalFiniteNumber(obj.precision),\n\t\t\t\t};\n\tif (obj.scale === undefined) {\n\t\treturn withPrecision;\n\t}\n\treturn {\n\t\t...withPrecision,\n\t\tscale: canonOptionalFiniteNumber(obj.scale),\n\t};\n}\n\nfunction canonType(raw: unknown): SchemaType {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst native = canonNative(obj.native);\n\tif (obj.kind === \"enum\" || typeof obj.enumId === \"string\") {\n\t\treturn {\n\t\t\tkind: \"enum\",\n\t\t\tenumId: asString(obj.enumId),\n\t\t\tnative,\n\t\t};\n\t}\n\tif (obj.kind === \"native\") {\n\t\treturn { kind: \"native\", native };\n\t}\n\treturn {\n\t\tkind: \"scalar\",\n\t\tsemantic: asString(obj.semantic, native.name),\n\t\tnative,\n\t};\n}\n\nfunction canonColumn(raw: unknown): SchemaColumn {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst nullable = obj.nullable === true;\n\tconst column: SchemaColumn = {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tidentity: canonIdentity(obj.identity),\n\t\ttype: canonType(obj.type),\n\t\tnullable,\n\t};\n\tconst withDefault =\n\t\tobj.default === undefined\n\t\t\t? column\n\t\t\t: {\n\t\t\t\t\t...column,\n\t\t\t\t\tdefault: obj.default === null ? null : asString(obj.default),\n\t\t\t\t};\n\tif (obj.generated === undefined && obj.isGenerated === undefined) {\n\t\treturn withDefault;\n\t}\n\treturn {\n\t\t...withDefault,\n\t\tgenerated: obj.generated === true || obj.isGenerated === true,\n\t};\n}\n\nfunction canonConstraint(raw: unknown): SchemaConstraint {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst id = asSchemaObjectId(asString(obj.id));\n\tconst kindRaw = asString(obj.kind).toLowerCase();\n\tconst columns = Array.isArray(obj.columns)\n\t\t? obj.columns.map((c) => asString(c))\n\t\t: [];\n\tconst name =\n\t\tobj.name === undefined\n\t\t\t? undefined\n\t\t\t: obj.name === null\n\t\t\t\t? null\n\t\t\t\t: asString(obj.name);\n\n\tif (kindRaw === \"check\") {\n\t\treturn {\n\t\t\tid,\n\t\t\tkind: \"check\",\n\t\t\texpression: asString(obj.expression),\n\t\t\t...(name === undefined ? {} : { name }),\n\t\t};\n\t}\n\tif (kindRaw === \"unique\") {\n\t\treturn {\n\t\t\tid,\n\t\t\tkind: \"unique\",\n\t\t\tcolumns,\n\t\t\t...(name === undefined ? {} : { name }),\n\t\t};\n\t}\n\tif (kindRaw === \"foreign_key\" || kindRaw === \"fk\") {\n\t\treturn {\n\t\t\tid,\n\t\t\tkind: \"foreign_key\",\n\t\t\tcolumns,\n\t\t\ttargetTableId: asString(obj.targetTableId),\n\t\t\ttargetColumns: Array.isArray(obj.targetColumns)\n\t\t\t\t? obj.targetColumns.map((c) => asString(c))\n\t\t\t\t: [],\n\t\t\t...(name === undefined ? {} : { name }),\n\t\t\t...(obj.onDelete === undefined\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tonDelete: asReferentialAction(\n\t\t\t\t\t\t\tobj.onDelete,\n\t\t\t\t\t\t\t\"SchemaConstraint.onDelete\",\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t...(obj.onUpdate === undefined\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tonUpdate: asReferentialAction(\n\t\t\t\t\t\t\tobj.onUpdate,\n\t\t\t\t\t\t\t\"SchemaConstraint.onUpdate\",\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t};\n\t}\n\treturn {\n\t\tid,\n\t\tkind: \"primary_key\",\n\t\tcolumns,\n\t\t...(name === undefined ? {} : { name }),\n\t};\n}\n\nfunction canonRelation(raw: unknown): SchemaRelation {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst through = isObject(obj.through)\n\t\t? {\n\t\t\t\ttableId: asString(obj.through.tableId),\n\t\t\t\tsourceColumns: Array.isArray(obj.through.sourceColumns)\n\t\t\t\t\t? obj.through.sourceColumns.map((c) => asString(c))\n\t\t\t\t\t: [],\n\t\t\t\ttargetColumns: Array.isArray(obj.through.targetColumns)\n\t\t\t\t\t? obj.through.targetColumns.map((c) => asString(c))\n\t\t\t\t\t: [],\n\t\t\t}\n\t\t: undefined;\n\tconst relation: SchemaRelation = {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tcardinality: asString(obj.cardinality) as SchemaRelation[\"cardinality\"],\n\t\tsourceTableId: asString(obj.sourceTableId),\n\t\ttargetTableId: asString(obj.targetTableId),\n\t\tbackingConstraintIds: Array.isArray(obj.backingConstraintIds)\n\t\t\t? [...obj.backingConstraintIds].map((c) => asString(c)).sort()\n\t\t\t: [],\n\t};\n\tconst withSource =\n\t\tobj.sourceColumns === undefined\n\t\t\t? relation\n\t\t\t: {\n\t\t\t\t\t...relation,\n\t\t\t\t\tsourceColumns: Array.isArray(obj.sourceColumns)\n\t\t\t\t\t\t? obj.sourceColumns.map((c) => asString(c))\n\t\t\t\t\t\t: [],\n\t\t\t\t};\n\tconst withCols =\n\t\tobj.targetColumns === undefined\n\t\t\t? withSource\n\t\t\t: {\n\t\t\t\t\t...withSource,\n\t\t\t\t\ttargetColumns: Array.isArray(obj.targetColumns)\n\t\t\t\t\t\t? obj.targetColumns.map((c) => asString(c))\n\t\t\t\t\t\t: [],\n\t\t\t\t};\n\tconst withThrough =\n\t\tthrough === undefined ? withCols : { ...withCols, through };\n\tif (obj.name === undefined) {\n\t\treturn withThrough;\n\t}\n\treturn {\n\t\t...withThrough,\n\t\tname: obj.name === null ? null : asString(obj.name),\n\t};\n}\n\nfunction canonIndex(raw: unknown): SchemaIndex {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst columns = Array.isArray(obj.columns)\n\t\t? obj.columns.map((col) => {\n\t\t\t\tif (typeof col === \"string\") {\n\t\t\t\t\treturn { name: col, direction: \"asc\" as const };\n\t\t\t\t}\n\t\t\t\tconst c = isObject(col) ? col : {};\n\t\t\t\tconst direction =\n\t\t\t\t\tc.direction === \"desc\" ? (\"desc\" as const) : (\"asc\" as const);\n\t\t\t\treturn { name: asString(c.name), direction };\n\t\t\t})\n\t\t: [];\n\treturn {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tcolumns,\n\t\tunique: obj.unique === true,\n\t\t...(obj.name === undefined\n\t\t\t? {}\n\t\t\t: { name: obj.name === null ? null : asString(obj.name) }),\n\t\t...(obj.predicate === undefined\n\t\t\t? {}\n\t\t\t: { predicate: obj.predicate === null ? null : asString(obj.predicate) }),\n\t\t...(obj.method === undefined\n\t\t\t? {}\n\t\t\t: { method: obj.method === null ? null : asString(obj.method) }),\n\t};\n}\n\nfunction canonEnum(raw: unknown): SchemaEnum {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst labels = Array.isArray(obj.labels)\n\t\t? obj.labels.map((l) => asString(l))\n\t\t: Array.isArray(obj.values)\n\t\t\t? obj.values.map((l) => asString(l))\n\t\t\t: [];\n\treturn {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tidentity: canonIdentity(obj.identity),\n\t\tlabels,\n\t\t...(obj.name === undefined\n\t\t\t? {}\n\t\t\t: { name: obj.name === null ? null : asString(obj.name) }),\n\t};\n}\n\nfunction canonTable(raw: unknown): SchemaTable {\n\tconst obj = isObject(raw) ? raw : {};\n\treturn {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tidentity: canonIdentity(obj.identity),\n\t\tcolumns: (Array.isArray(obj.columns) ? obj.columns : [])\n\t\t\t.map(canonColumn)\n\t\t\t.sort(compareId),\n\t\tconstraints: (Array.isArray(obj.constraints) ? obj.constraints : [])\n\t\t\t.map(canonConstraint)\n\t\t\t.sort(compareId),\n\t\trelations: (Array.isArray(obj.relations) ? obj.relations : [])\n\t\t\t.map(canonRelation)\n\t\t\t.sort(compareId),\n\t\tindexes: (Array.isArray(obj.indexes) ? obj.indexes : [])\n\t\t\t.map(canonIndex)\n\t\t\t.sort(compareId),\n\t};\n}\n\nfunction canonNamespace(raw: unknown): SchemaNamespace {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst enums = (Array.isArray(obj.enums) ? obj.enums : [])\n\t\t.map(canonEnum)\n\t\t.sort(compareId);\n\treturn {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tidentity: canonIdentity(obj.identity),\n\t\tenums,\n\t\ttables: (Array.isArray(obj.tables) ? obj.tables : [])\n\t\t\t.map(canonTable)\n\t\t\t.sort(compareId),\n\t};\n}\n\nfunction canonDatabase(raw: unknown): SchemaDatabase {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst namespacesRaw = obj.namespaces ?? obj.schemas;\n\tconst db: SchemaDatabase = {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tidentity: canonIdentity(obj.identity),\n\t\tnamespaces: (Array.isArray(namespacesRaw) ? namespacesRaw : [])\n\t\t\t.map(canonNamespace)\n\t\t\t.sort(compareId),\n\t};\n\tconst withEnums = Array.isArray(obj.enums)\n\t\t? { ...db, enums: obj.enums.map(canonEnum).sort(compareId) }\n\t\t: db;\n\tif (obj.backend === undefined) {\n\t\treturn withEnums;\n\t}\n\treturn {\n\t\t...withEnums,\n\t\tbackend: obj.backend === null ? null : asString(obj.backend),\n\t};\n}\n\nfunction canonMetadata(raw: unknown): SchemaMetadata {\n\tif (!isObject(raw)) {\n\t\treturn {};\n\t}\n\tconst provenance = isObject(raw.provenance)\n\t\t? {\n\t\t\t\t...(raw.provenance.source === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { source: asString(raw.provenance.source) }),\n\t\t\t\t...(raw.provenance.generatedAt === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { generatedAt: asString(raw.provenance.generatedAt) }),\n\t\t\t\t...(raw.provenance.generator === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { generator: asString(raw.provenance.generator) }),\n\t\t\t\t...(raw.provenance.backend === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tbackend:\n\t\t\t\t\t\t\t\traw.provenance.backend === null\n\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t: asString(raw.provenance.backend),\n\t\t\t\t\t\t}),\n\t\t\t}\n\t\t: undefined;\n\tconst extensions = isObject(raw.extensions)\n\t\t? { ...raw.extensions }\n\t\t: undefined;\n\treturn {\n\t\t...(provenance === undefined ? {} : { provenance }),\n\t\t...(extensions === undefined ? {} : { extensions }),\n\t};\n}\n\n/**\n * Normalize document structure (stable array order by id, folded aliases).\n * Idempotent: canonicalize(canonicalize(doc)) === canonicalize(doc).\n */\nexport function canonicalizeAthenaSchemaIr(doc: unknown): AthenaSchemaIr {\n\tvalidateAthenaSchemaIr(doc);\n\tconst obj = doc as Record<string, unknown>;\n\tconst canonical: AthenaSchemaIr = {\n\t\tkind: ATHENA_SCHEMA_IR_KIND,\n\t\tirVersion: ATHENA_SCHEMA_IR_VERSION,\n\t\tdatabases: (Array.isArray(obj.databases) ? obj.databases : [])\n\t\t\t.map(canonDatabase)\n\t\t\t.sort(compareId),\n\t\tmetadata: canonMetadata(obj.metadata),\n\t};\n\treturn canonical;\n}\n","/**\n * 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 {\n  AnyModelDef,\n  ModelColumnKind,\n  ModelColumnMetadata,\n  ModelMetadataBase,\n} from \"./types.ts\";\n\nexport type ModelSqlDialect = \"postgres\" | \"d1\" | \"sqlite\";\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  enumValues?: readonly string[];\n  hasDefault: boolean;\n  isGenerated: boolean;\n  kind: ModelColumnKind;\n  /** Physical column name after `.from(...)` / `columnName`. */\n  name: string;\n  /** Authoring key; kept when `name` is remapped to a physical identifier. */\n  logicalName: 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 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      hasDefault: false,\n      isGenerated: false,\n      kind: \"string\" as const,\n      logicalName: name,\n      name,\n      nullable: false,\n    }));\n  }\n\n  return keys.map((logicalName) => {\n    const col = columnMeta[logicalName] as ModelColumnMetadata | undefined;\n    const physical = col?.columnName?.trim() || logicalName;\n    const nullable =\n      col?.nullable === true || meta.nullable?.[logicalName] === true;\n    return {\n      enumValues: col?.enumValues,\n      hasDefault: col?.hasDefault === true,\n      isGenerated: col?.isGenerated === true,\n      kind: col?.kind ?? \"string\",\n      logicalName,\n      name: physical,\n      nullable,\n      ...(col?.precision === undefined ? {} : { precision: col.precision }),\n      ...(col?.scale === undefined ? {} : { scale: col.scale }),\n    };\n  });\n}\n\nfunction resolveTable(model: AnyModelDef): ResolvedTable {\n  const meta = model.meta;\n  const names = resolvePhysicalNames(meta);\n  return {\n    columns: resolveColumns(meta),\n    key: names.key,\n    model,\n    primaryKey: [...meta.primaryKey],\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  if (typeof column.precision === \"number\") {\n    return `NUMERIC(${column.precision})`;\n  }\n  return \"NUMERIC\";\n}\n\nfunction sqlTypePostgres(\n  column: ResolvedColumn,\n  isSoleGeneratedPk: boolean\n): string {\n  if (isSoleGeneratedPk && column.kind === \"number\") {\n    return \"BIGSERIAL\";\n  }\n  switch (column.kind) {\n    case \"boolean\":\n      return \"BOOLEAN\";\n    case \"number\":\n      return \"DOUBLE PRECISION\";\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 (isSoleGeneratedPk && column.kind === \"number\") {\n    return \"INTEGER\";\n  }\n  switch (column.kind) {\n    case \"boolean\":\n      return \"INTEGER\";\n    case \"number\":\n      return \"REAL\";\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 enumCheck(column: ResolvedColumn): string | undefined {\n  if (column.kind !== \"enumeration\" || !column.enumValues?.length) {\n    return;\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  const solePk =\n    table.primaryKey.length === 1 ? table.primaryKey[0] : undefined;\n  const soleGeneratedPkCol =\n    solePk === undefined\n      ? undefined\n      : table.columns.find(\n          (column) =>\n            column.name === solePk &&\n            column.isGenerated &&\n            column.kind === \"number\"\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      soleGeneratedPkCol !== undefined &&\n      column.name === soleGeneratedPkCol.name;\n    const typeSql = isPostgres\n      ? sqlTypePostgres(column, isSoleGeneratedPk)\n      : sqlTypeD1(column, isSoleGeneratedPk);\n\n    let line = `  ${quoteIdent(column.name)} ${typeSql}`;\n\n    if (isSoleGeneratedPk && !isPostgres) {\n      line += \" PRIMARY KEY AUTOINCREMENT\";\n    } else if (isSoleGeneratedPk && isPostgres && typeSql === \"BIGSERIAL\") {\n      line += \" PRIMARY KEY\";\n    } else {\n      if (!(column.nullable || column.hasDefault || column.isGenerated)) {\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","/**\n * v1 snapshot ↔ Schema IR v2 lifts and authoring/introspection adapters.\n * IntrospectionSnapshot / ModelMetadataBase are allowed here only.\n */\n\nimport {\n\tnormalizeReferentialAction,\n\tparseSchemaTypeString,\n} from \"../diff/normalize.ts\";\nimport {\n\tATHENA_SCHEMA_SNAPSHOT_VERSION,\n\ttype AthenaSchemaSnapshot,\n\ttype SchemaColumn as V1Column,\n\ttype SchemaColumnType as V1ColumnType,\n\ttype SchemaForeignKey as V1ForeignKey,\n\ttype SchemaIndex as V1Index,\n\ttype SchemaTable as V1Table,\n\ttype SchemaUniqueConstraint as V1Unique,\n} from \"../diff/types.ts\";\nimport { collectModelsFromSqlInput, type ModelSqlInput } from \"../model-sql.ts\";\nimport type {\n\tIntrospectionColumn,\n\tIntrospectionRelation,\n\tIntrospectionSnapshot,\n\tIntrospectionTable,\n\tModelColumnKind,\n\tModelRelationKind,\n\tModelRelationMetadata,\n} from \"../types.ts\";\nimport { canonicalizeAthenaSchemaIr } from \"./canonicalize.ts\";\nimport type { SchemaColumn } from \"./column.ts\";\nimport type {\n\tSchemaConstraint,\n\tSchemaReferentialAction,\n} from \"./constraint.ts\";\nimport type { SchemaDatabase } from \"./database.ts\";\nimport type { AthenaSchemaIr } from \"./document.ts\";\nimport {\n\tasSchemaObjectId,\n\ttype SchemaObjectId,\n\tschemaObjectIdentity,\n} from \"./identity.ts\";\nimport type { SchemaIndex } from \"./indexes.ts\";\nimport type { SchemaEnum, SchemaNamespace } from \"./namespace.ts\";\nimport type {\n\tSchemaRelation,\n\tSchemaRelationCardinality,\n\tSchemaRelationThrough,\n} from \"./relation.ts\";\nimport type { SchemaTable } from \"./table.ts\";\nimport type { NativeTypeDescriptor, SchemaType } from \"./type.ts\";\nimport { validateAthenaSchemaIr } from \"./validate.ts\";\nimport { ATHENA_SCHEMA_IR_KIND, ATHENA_SCHEMA_IR_VERSION } from \"./version.ts\";\n\nconst INTERNAL_SCHEMAS = new Set([\"athena\"]);\nconst DEFAULT_DATABASE = \"default\";\nconst DEFAULT_SCHEMA = \"public\";\nconst DEFAULT_BACKEND = \"postgresql\";\n\nexport interface SchemaIrFromModelsOptions {\n\treadonly backend?: string | null;\n\treadonly defaultSchema?: string;\n\treadonly defaultDatabase?: string;\n}\n\nexport interface SchemaIrFromIntrospectionOptions {\n\treadonly schemas?: readonly string[];\n\treadonly excludeInternal?: boolean;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function isAthenaSchemaIr(value: unknown): value is AthenaSchemaIr {\n\treturn (\n\t\tisObject(value) &&\n\t\tvalue.kind === ATHENA_SCHEMA_IR_KIND &&\n\t\tvalue.irVersion === ATHENA_SCHEMA_IR_VERSION &&\n\t\tArray.isArray(value.databases)\n\t);\n}\n\nfunction id(value: string): SchemaObjectId {\n\treturn asSchemaObjectId(value);\n}\n\nfunction nativeFromV1(\n\ttype: V1ColumnType,\n\tbackend: string,\n): NativeTypeDescriptor {\n\treturn {\n\t\tbackend,\n\t\tname: type.name,\n\t\tarrayDimensions: type.arrayDimensions,\n\t\t...(type.length === undefined ? {} : { length: type.length }),\n\t\t...(type.precision === undefined ? {} : { precision: type.precision }),\n\t\t...(type.scale === undefined ? {} : { scale: type.scale }),\n\t};\n}\n\nfunction typeFromV1Column(\n\ttype: V1ColumnType,\n\tbackend: string,\n\tenumId?: string,\n): SchemaType {\n\tconst native = nativeFromV1(type, backend);\n\tif (enumId) {\n\t\treturn { kind: \"enum\", enumId, native };\n\t}\n\treturn { kind: \"scalar\", semantic: type.name, native };\n}\n\nfunction tableStableId(database: string, schema: string, name: string): string {\n\treturn `tbl:${database}.${schema}.${name}`;\n}\n\nfunction columnStableId(\n\tdatabase: string,\n\tschema: string,\n\ttable: string,\n\tname: string,\n): string {\n\treturn `col:${database}.${schema}.${table}.${name}`;\n}\n\nfunction enumStableId(\n\tdatabase: string,\n\tschema: string,\n\ttable: string,\n\tname: string,\n): string {\n\treturn `enum:${database}.${schema}.${table}.${name}`;\n}\n\nfunction fkStableId(\n\ttableId: string,\n\tsourceColumns: readonly string[],\n\ttargetTableId: string,\n\ttargetColumns: readonly string[],\n): string {\n\treturn `cst:${tableId}:fk:${sourceColumns.join(\",\")}:${targetTableId}:${targetColumns.join(\",\")}`;\n}\n\nfunction mapAuthoredColumns(\n\tnames: readonly string[],\n\tlogicalToPhysical: Map<string, string> | undefined,\n): string[] {\n\treturn names.map((name) => logicalToPhysical?.get(name) ?? name);\n}\n\nfunction snapshotDatabaseName(\n\tvalue: string | undefined,\n\tfallback: string,\n): string {\n\tconst trimmed = value?.trim();\n\treturn trimmed && trimmed.length > 0 ? trimmed : fallback;\n}\n\nfunction snapshotTableDatabase(table: V1Table, fallback: string): string {\n\treturn snapshotDatabaseName(table.database, fallback);\n}\n\nexport function schemaIrFromSnapshot(\n\tsnapshot: AthenaSchemaSnapshot,\n\toptions: { database?: string } = {},\n): AthenaSchemaIr {\n\tconst backend = snapshot.backend ?? DEFAULT_BACKEND;\n\tconst fallbackDatabase = options.database?.trim() || DEFAULT_DATABASE;\n\ttype NamespaceBucket = {\n\t\tenums: SchemaEnum[];\n\t\ttables: SchemaTable[];\n\t\tseenEnums: Set<string>;\n\t};\n\tconst databases = new Map<string, Map<string, NamespaceBucket>>();\n\n\tconst namespaceBucket = (dbName: string, nsName: string): NamespaceBucket => {\n\t\tlet namespaces = databases.get(dbName);\n\t\tif (!namespaces) {\n\t\t\tnamespaces = new Map();\n\t\t\tdatabases.set(dbName, namespaces);\n\t\t}\n\t\tlet bucket = namespaces.get(nsName);\n\t\tif (!bucket) {\n\t\t\tbucket = { enums: [], tables: [], seenEnums: new Set() };\n\t\t\tnamespaces.set(nsName, bucket);\n\t\t}\n\t\treturn bucket;\n\t};\n\n\tfor (const ns of snapshot.schemas) {\n\t\tif (ns.tables.length === 0) {\n\t\t\tnamespaceBucket(\n\t\t\t\tsnapshotDatabaseName(ns.database, fallbackDatabase),\n\t\t\t\tns.name,\n\t\t\t);\n\t\t}\n\n\t\tfor (const table of ns.tables) {\n\t\t\tconst databaseName = snapshotTableDatabase(table, fallbackDatabase);\n\t\t\tconst bucket = namespaceBucket(databaseName, table.schema || ns.name);\n\t\t\tconst { enums, tables, seenEnums } = bucket;\n\t\t\tconst tableId = tableStableId(databaseName, table.schema, table.name);\n\t\t\tconst columns: SchemaColumn[] = [];\n\t\t\tfor (const column of table.columns) {\n\t\t\t\tlet enumId: string | undefined;\n\t\t\t\tif (column.type.enumValues && column.type.enumValues.length > 0) {\n\t\t\t\t\tenumId = introspectedEnumStableId(\n\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\tcolumn.type.name,\n\t\t\t\t\t);\n\t\t\t\t\tif (!seenEnums.has(enumId)) {\n\t\t\t\t\t\tseenEnums.add(enumId);\n\t\t\t\t\t\tenums.push({\n\t\t\t\t\t\t\tid: id(enumId),\n\t\t\t\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\t\t\tcolumn.type.name,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tlabels: [...column.type.enumValues],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcolumns.push({\n\t\t\t\t\tid: id(\n\t\t\t\t\t\tcolumnStableId(databaseName, table.schema, table.name, column.name),\n\t\t\t\t\t),\n\t\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\tcolumn.name,\n\t\t\t\t\t),\n\t\t\t\t\ttype: typeFromV1Column(\n\t\t\t\t\t\tcolumn.type,\n\t\t\t\t\t\tbackend ?? DEFAULT_BACKEND,\n\t\t\t\t\t\tenumId,\n\t\t\t\t\t),\n\t\t\t\t\tnullable: column.nullable,\n\t\t\t\t\tdefault: column.default,\n\t\t\t\t\tgenerated: column.isGenerated,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst constraints: SchemaConstraint[] = [];\n\t\t\tif (table.primaryKey && table.primaryKey.columns.length > 0) {\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(`cst:${tableId}:pk`),\n\t\t\t\t\tkind: \"primary_key\",\n\t\t\t\t\tcolumns: [...table.primaryKey.columns],\n\t\t\t\t\tname: table.primaryKey.name ?? null,\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (const unique of table.uniqueConstraints) {\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(`cst:${tableId}:uq:${unique.columns.join(\",\")}`),\n\t\t\t\t\tkind: \"unique\",\n\t\t\t\t\tcolumns: [...unique.columns],\n\t\t\t\t\tname: unique.name ?? null,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst relations: SchemaRelation[] = [];\n\t\t\tfor (const fk of table.foreignKeys) {\n\t\t\t\tconst targetDatabase = snapshotDatabaseName(\n\t\t\t\t\tfk.target.database,\n\t\t\t\t\tdatabaseName,\n\t\t\t\t);\n\t\t\t\tconst targetId = tableStableId(\n\t\t\t\t\ttargetDatabase,\n\t\t\t\t\tfk.target.schema,\n\t\t\t\t\tfk.target.name,\n\t\t\t\t);\n\t\t\t\tconst fkId = fkStableId(\n\t\t\t\t\ttableId,\n\t\t\t\t\tfk.columns,\n\t\t\t\t\ttargetId,\n\t\t\t\t\tfk.targetColumns,\n\t\t\t\t);\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(fkId),\n\t\t\t\t\tkind: \"foreign_key\",\n\t\t\t\t\tcolumns: [...fk.columns],\n\t\t\t\t\ttargetTableId: targetId,\n\t\t\t\t\ttargetColumns: [...fk.targetColumns],\n\t\t\t\t\tname: fk.name ?? null,\n\t\t\t\t\tonDelete: fk.onDelete,\n\t\t\t\t\tonUpdate: fk.onUpdate,\n\t\t\t\t});\n\t\t\t\trelations.push({\n\t\t\t\t\tid: id(`rel:${tableId}:${fk.columns.join(\",\")}:${targetId}`),\n\t\t\t\t\tcardinality: \"n:1\",\n\t\t\t\t\tsourceTableId: tableId,\n\t\t\t\t\ttargetTableId: targetId,\n\t\t\t\t\tsourceColumns: [...fk.columns],\n\t\t\t\t\ttargetColumns: [...fk.targetColumns],\n\t\t\t\t\tbackingConstraintIds: [fkId],\n\t\t\t\t\tname: fk.name ?? null,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst indexes: SchemaIndex[] = table.indexes.map((ix, index) => ({\n\t\t\t\tid: id(`idx:${tableId}:${ix.name ?? index}`),\n\t\t\t\tcolumns: ix.columns.map((c) => ({\n\t\t\t\t\tname: c.name,\n\t\t\t\t\tdirection: c.direction ?? \"asc\",\n\t\t\t\t})),\n\t\t\t\tunique: ix.unique,\n\t\t\t\tname: ix.name ?? null,\n\t\t\t\tpredicate: ix.predicate ?? null,\n\t\t\t\tmethod: ix.method ?? null,\n\t\t\t}));\n\n\t\t\ttables.push({\n\t\t\t\tid: id(tableId),\n\t\t\t\tidentity: schemaObjectIdentity(databaseName, table.schema, table.name),\n\t\t\t\tcolumns,\n\t\t\t\tconstraints,\n\t\t\t\trelations,\n\t\t\t\tindexes,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst lifted: SchemaDatabase[] = [...databases.entries()].map(\n\t\t([dbName, namespaces]) => ({\n\t\t\tid: id(`db:${dbName}`),\n\t\t\tidentity: schemaObjectIdentity(dbName, DEFAULT_SCHEMA, dbName),\n\t\t\tnamespaces: [...namespaces.entries()].map(([nsName, bucket]) => ({\n\t\t\t\tid: id(`ns:${dbName}.${nsName}`),\n\t\t\t\tidentity: schemaObjectIdentity(dbName, nsName, nsName),\n\t\t\t\tenums: bucket.enums,\n\t\t\t\ttables: bucket.tables,\n\t\t\t})),\n\t\t\tbackend,\n\t\t}),\n\t);\n\n\treturn canonicalizeAthenaSchemaIr({\n\t\tkind: ATHENA_SCHEMA_IR_KIND,\n\t\tirVersion: ATHENA_SCHEMA_IR_VERSION,\n\t\tdatabases: lifted,\n\t\tmetadata: {\n\t\t\tprovenance: {\n\t\t\t\tsource: \"snapshot\",\n\t\t\t\tbackend,\n\t\t\t},\n\t\t\textensions: {},\n\t\t},\n\t});\n}\n\nfunction collectIrTables(ir: AthenaSchemaIr): SchemaTable[] {\n\tconst tables: SchemaTable[] = [];\n\tfor (const db of ir.databases) {\n\t\tfor (const ns of db.namespaces) {\n\t\t\ttables.push(...ns.tables);\n\t\t}\n\t}\n\treturn tables;\n}\n\nfunction collectIrNamespaceNames(ir: AthenaSchemaIr): Set<string> {\n\tconst names = new Set<string>();\n\tfor (const identity of collectIrNamespaceIdentities(ir).values()) {\n\t\tnames.add(identity.schema);\n\t}\n\treturn names;\n}\n\nfunction collectIrNamespaceIdentities(\n\tir: AthenaSchemaIr,\n): Map<string, { database: string; schema: string }> {\n\tconst identities = new Map<string, { database: string; schema: string }>();\n\tfor (const db of ir.databases) {\n\t\tconst database = db.identity.physical.database;\n\t\tfor (const ns of db.namespaces) {\n\t\t\tconst schema = ns.identity.physical.namespace;\n\t\t\tidentities.set(`${database}\\0${schema}`, { database, schema });\n\t\t}\n\t}\n\treturn identities;\n}\n\nfunction collectIrEnums(ir: AthenaSchemaIr): Map<string, SchemaEnum> {\n\tconst map = new Map<string, SchemaEnum>();\n\tfor (const db of ir.databases) {\n\t\tfor (const item of db.enums ?? []) {\n\t\t\tmap.set(item.id, item);\n\t\t}\n\t\tfor (const ns of db.namespaces) {\n\t\t\tfor (const item of ns.enums ?? []) {\n\t\t\t\tmap.set(item.id, item);\n\t\t\t}\n\t\t}\n\t}\n\treturn map;\n}\n\nfunction projectType(\n\ttype: SchemaType,\n\tenums: Map<string, SchemaEnum>,\n\tincludeEnumValues: boolean,\n): V1ColumnType {\n\tconst native = type.native;\n\tconst projected: V1ColumnType = {\n\t\tname: native.name,\n\t\tarrayDimensions: native.arrayDimensions,\n\t\t...(native.length === undefined ? {} : { length: native.length }),\n\t\t...(native.precision === undefined ? {} : { precision: native.precision }),\n\t\t...(native.scale === undefined ? {} : { scale: native.scale }),\n\t};\n\tif (includeEnumValues && type.kind === \"enum\") {\n\t\tconst labels = enums.get(type.enumId)?.labels;\n\t\tif (labels && labels.length > 0) {\n\t\t\treturn { ...projected, enumValues: [...labels] };\n\t\t}\n\t}\n\treturn projected;\n}\n\nfunction projectTable(\n\ttable: SchemaTable,\n\tir: AthenaSchemaIr,\n\tincludeEnumValues: boolean,\n): V1Table {\n\tconst enums = collectIrEnums(ir);\n\tconst tablesById = new Map(\n\t\tcollectIrTables(ir).map((item) => [item.id as string, item]),\n\t);\n\tconst schema = table.identity.physical.namespace;\n\tconst name = table.identity.physical.name;\n\tconst columns: V1Column[] = table.columns.map((column) => ({\n\t\tname: column.identity.physical.name,\n\t\ttype: projectType(column.type, enums, includeEnumValues),\n\t\tnullable: column.nullable,\n\t\tdefault: column.default ?? null,\n\t\tisGenerated: column.generated === true,\n\t}));\n\n\tlet primaryKey: V1Table[\"primaryKey\"] = null;\n\tconst uniqueConstraints: V1Unique[] = [];\n\tconst foreignKeys: V1ForeignKey[] = [];\n\n\tfor (const constraint of table.constraints) {\n\t\tif (constraint.kind === \"primary_key\") {\n\t\t\tprimaryKey = {\n\t\t\t\tname: constraint.name ?? null,\n\t\t\t\tcolumns: [...constraint.columns],\n\t\t\t};\n\t\t} else if (constraint.kind === \"unique\") {\n\t\t\tuniqueConstraints.push({\n\t\t\t\tname: constraint.name ?? null,\n\t\t\t\tcolumns: [...constraint.columns],\n\t\t\t});\n\t\t} else if (constraint.kind === \"foreign_key\") {\n\t\t\tconst target = tablesById.get(String(constraint.targetTableId));\n\t\t\tconst targetSchema =\n\t\t\t\ttarget?.identity.physical.namespace ??\n\t\t\t\tString(constraint.targetTableId).split(\":\")[1]?.split(\".\")[0] ??\n\t\t\t\tschema;\n\t\t\tconst targetName =\n\t\t\t\ttarget?.identity.physical.name ??\n\t\t\t\tString(constraint.targetTableId).split(\".\").pop() ??\n\t\t\t\tString(constraint.targetTableId);\n\t\t\tconst targetDatabase =\n\t\t\t\ttarget?.identity.physical.database ??\n\t\t\t\ttable.identity.physical.database;\n\t\t\tforeignKeys.push({\n\t\t\t\tname: constraint.name ?? null,\n\t\t\t\tcolumns: [...constraint.columns],\n\t\t\t\ttarget: {\n\t\t\t\t\tschema: targetSchema,\n\t\t\t\t\tname: targetName,\n\t\t\t\t\t...(targetDatabase ? { database: targetDatabase } : {}),\n\t\t\t\t},\n\t\t\t\ttargetColumns: [...constraint.targetColumns],\n\t\t\t\tonDelete: constraint.onDelete ?? \"no_action\",\n\t\t\t\tonUpdate: constraint.onUpdate ?? \"no_action\",\n\t\t\t});\n\t\t}\n\t}\n\n\tconst indexes: V1Index[] = table.indexes.map((ix) => ({\n\t\tname: ix.name ?? null,\n\t\tunique: ix.unique,\n\t\tpredicate: ix.predicate ?? null,\n\t\tmethod: ix.method ?? null,\n\t\tcolumns: ix.columns.map((c) => ({\n\t\t\tname: c.name,\n\t\t\tdirection: c.direction ?? \"asc\",\n\t\t})),\n\t}));\n\n\tconst database = table.identity.physical.database;\n\treturn {\n\t\tschema,\n\t\tname,\n\t\t...(database ? { database } : {}),\n\t\tcolumns,\n\t\tprimaryKey,\n\t\tuniqueConstraints,\n\t\tforeignKeys,\n\t\tindexes,\n\t};\n}\n\n/**\n * Lossy v1 projection. CHECK / semantic relations / first-class enums may drop.\n * Must not be used as the structural SSOT.\n */\nexport function schemaSnapshotFromIr(ir: AthenaSchemaIr): AthenaSchemaSnapshot {\n\tconst canonical = canonicalizeAthenaSchemaIr(ir);\n\tvalidateAthenaSchemaIr(canonical);\n\tconst includeEnumValues =\n\t\tcanonical.metadata.provenance?.source !== \"models\" &&\n\t\tcanonical.metadata.provenance?.source !== \"table\";\n\tconst backend =\n\t\tcanonical.databases[0]?.backend ??\n\t\tcanonical.metadata.provenance?.backend ??\n\t\tnull;\n\n\tconst byNamespace = new Map<\n\t\tstring,\n\t\t{ database: string; name: string; tables: V1Table[] }\n\t>();\n\tfor (const identity of collectIrNamespaceIdentities(canonical).values()) {\n\t\tconst key = `${identity.database}\\0${identity.schema}`;\n\t\tif (!byNamespace.has(key)) {\n\t\t\tbyNamespace.set(key, {\n\t\t\t\tdatabase: identity.database,\n\t\t\t\tname: identity.schema,\n\t\t\t\ttables: [],\n\t\t\t});\n\t\t}\n\t}\n\tfor (const table of collectIrTables(canonical)) {\n\t\tconst projected = projectTable(table, canonical, includeEnumValues);\n\t\tconst database = table.identity.physical.database;\n\t\tconst key = `${database}\\0${projected.schema}`;\n\t\tconst bucket = byNamespace.get(key) ?? {\n\t\t\tdatabase,\n\t\t\tname: projected.schema,\n\t\t\ttables: [],\n\t\t};\n\t\tbucket.tables.push(projected);\n\t\tbyNamespace.set(key, bucket);\n\t}\n\n\tconst schemas = [...byNamespace.values()].map((ns) => ({\n\t\tname: ns.name,\n\t\ttables: ns.tables,\n\t\t...(ns.database ? { database: ns.database } : {}),\n\t}));\n\n\treturn {\n\t\tversion: ATHENA_SCHEMA_SNAPSHOT_VERSION,\n\t\tbackend,\n\t\tschemas,\n\t};\n}\n\nfunction semanticFromKind(kind: ModelColumnKind): string {\n\tswitch (kind) {\n\t\tcase \"boolean\":\n\t\t\treturn \"boolean\";\n\t\tcase \"number\":\n\t\t\treturn \"float\";\n\t\tcase \"decimal\":\n\t\t\treturn \"decimal\";\n\t\tcase \"json\":\n\t\t\treturn \"json\";\n\t\tcase \"enumeration\":\n\t\t\treturn \"enum\";\n\t\tdefault:\n\t\t\treturn \"string\";\n\t}\n}\n\nfunction sqlTypeFromKind(\n\tkind: ModelColumnKind,\n\tisSoleGeneratedPk: boolean,\n\tprecision?: number,\n\tscale?: number,\n): string {\n\tif (isSoleGeneratedPk && kind === \"number\") {\n\t\treturn \"bigint\";\n\t}\n\tswitch (kind) {\n\t\tcase \"boolean\":\n\t\t\treturn \"boolean\";\n\t\tcase \"number\":\n\t\t\treturn \"double precision\";\n\t\tcase \"decimal\":\n\t\t\tif (typeof precision === \"number\" && typeof scale === \"number\") {\n\t\t\t\treturn `numeric(${precision}, ${scale})`;\n\t\t\t}\n\t\t\tif (typeof precision === \"number\") {\n\t\t\t\treturn `numeric(${precision})`;\n\t\t\t}\n\t\t\treturn \"numeric\";\n\t\tcase \"json\":\n\t\t\treturn \"jsonb\";\n\t\tcase \"enumeration\":\n\t\t\treturn \"text\";\n\t\tdefault:\n\t\t\treturn \"text\";\n\t}\n}\n\nfunction cardinalityFromKind(\n\tkind: ModelRelationKind,\n): SchemaRelationCardinality {\n\tswitch (kind) {\n\t\tcase \"one-to-one\":\n\t\t\treturn \"1:1\";\n\t\tcase \"one-to-many\":\n\t\t\treturn \"1:n\";\n\t\tcase \"many-to-many\":\n\t\t\treturn \"n:n\";\n\t\tdefault:\n\t\t\treturn \"n:1\";\n\t}\n}\n\nfunction nativeFromParsed(\n\tparsed: V1ColumnType,\n\tbackend: string,\n): NativeTypeDescriptor {\n\treturn nativeFromV1(parsed, backend);\n}\n\nexport function schemaIrFromModels(\n\tmodels: unknown,\n\toptions: SchemaIrFromModelsOptions = {},\n): AthenaSchemaIr {\n\tconst defaultSchema = options.defaultSchema?.trim() || DEFAULT_SCHEMA;\n\tconst defaultDatabase = options.defaultDatabase?.trim() || DEFAULT_DATABASE;\n\tconst backend =\n\t\toptions.backend === undefined ? DEFAULT_BACKEND : options.backend;\n\tconst resolved = collectModelsFromSqlInput(models as ModelSqlInput);\n\n\tconst physicalByTableId = new Map<string, Map<string, string>>();\n\tfor (const table of resolved) {\n\t\tconst schemaName = table.schemaName?.trim() || defaultSchema;\n\t\tconst databaseName =\n\t\t\t(table.model.meta as { database?: string }).database?.trim() ||\n\t\t\tdefaultDatabase;\n\t\tconst logicalName =\n\t\t\t(table.model.meta.model ?? table.tableName).trim() || table.tableName;\n\t\tphysicalByTableId.set(\n\t\t\ttableStableId(databaseName, schemaName, logicalName),\n\t\t\tnew Map(table.columns.map((column) => [column.logicalName, column.name])),\n\t\t);\n\t}\n\n\tconst databases = new Map<\n\t\tstring,\n\t\tMap<string, { enums: SchemaEnum[]; tables: SchemaTable[] }>\n\t>();\n\n\tconst ensureNs = (databaseName: string, schemaName: string) => {\n\t\tlet bySchema = databases.get(databaseName);\n\t\tif (!bySchema) {\n\t\t\tbySchema = new Map();\n\t\t\tdatabases.set(databaseName, bySchema);\n\t\t}\n\t\tlet bucket = bySchema.get(schemaName);\n\t\tif (!bucket) {\n\t\t\tbucket = { enums: [], tables: [] };\n\t\t\tbySchema.set(schemaName, bucket);\n\t\t}\n\t\treturn bucket;\n\t};\n\n\tfor (const table of resolved) {\n\t\tconst schemaName = table.schemaName?.trim() || defaultSchema;\n\t\tconst databaseName =\n\t\t\t(table.model.meta as { database?: string }).database?.trim() ||\n\t\t\tdefaultDatabase;\n\t\tconst bucket = ensureNs(databaseName, schemaName);\n\t\tconst logicalName =\n\t\t\t(table.model.meta.model ?? table.tableName).trim() || table.tableName;\n\t\tconst tableId = tableStableId(databaseName, schemaName, logicalName);\n\t\tconst logicalToPhysical = new Map(\n\t\t\ttable.columns.map((column) => [column.logicalName, column.name]),\n\t\t);\n\t\tconst mapPhysical = (name: string): string =>\n\t\t\tlogicalToPhysical.get(name) ?? name;\n\t\tconst soleAuthoredPk =\n\t\t\ttable.primaryKey.length === 1 ? table.primaryKey[0] : undefined;\n\t\tconst solePk =\n\t\t\tsoleAuthoredPk === undefined ? undefined : mapPhysical(soleAuthoredPk);\n\t\tconst soleGeneratedPk =\n\t\t\tsolePk !== undefined &&\n\t\t\ttable.columns.some(\n\t\t\t\t(c) => c.name === solePk && c.isGenerated && c.kind === \"number\",\n\t\t\t);\n\n\t\tconst columns: SchemaColumn[] = [];\n\t\tconst constraints: SchemaConstraint[] = [];\n\n\t\tfor (const column of table.columns) {\n\t\t\tconst isSoleGeneratedPk = Boolean(\n\t\t\t\tsoleGeneratedPk && column.name === solePk && column.kind === \"number\",\n\t\t\t);\n\t\t\tconst sqlType = sqlTypeFromKind(\n\t\t\t\tcolumn.kind,\n\t\t\t\tisSoleGeneratedPk,\n\t\t\t\tcolumn.precision,\n\t\t\t\tcolumn.scale,\n\t\t\t);\n\t\t\tconst parsed = parseSchemaTypeString(sqlType, 0);\n\t\t\tlet enumId: string | undefined;\n\t\t\tif (column.kind === \"enumeration\" && column.enumValues?.length) {\n\t\t\t\tenumId = enumStableId(\n\t\t\t\t\tdatabaseName,\n\t\t\t\t\tschemaName,\n\t\t\t\t\tlogicalName,\n\t\t\t\t\tcolumn.name,\n\t\t\t\t);\n\t\t\t\tbucket.enums.push({\n\t\t\t\t\tid: id(enumId),\n\t\t\t\t\tidentity: schemaObjectIdentity(databaseName, schemaName, column.name),\n\t\t\t\t\tlabels: [...column.enumValues],\n\t\t\t\t});\n\t\t\t\tconst quoted = column.enumValues\n\t\t\t\t\t.map((v) => `'${String(v).replaceAll(\"'\", \"''\")}'`)\n\t\t\t\t\t.join(\", \");\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(`cst:${tableId}:${column.name}:check`),\n\t\t\t\t\tkind: \"check\",\n\t\t\t\t\texpression: `${column.name} IN (${quoted})`,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst native = nativeFromParsed(parsed, backend ?? DEFAULT_BACKEND);\n\t\t\tconst type: SchemaType = enumId\n\t\t\t\t? { kind: \"enum\", enumId, native }\n\t\t\t\t: {\n\t\t\t\t\t\tkind: \"scalar\",\n\t\t\t\t\t\tsemantic: isSoleGeneratedPk\n\t\t\t\t\t\t\t? \"bigint\"\n\t\t\t\t\t\t\t: semanticFromKind(column.kind),\n\t\t\t\t\t\tnative,\n\t\t\t\t\t};\n\n\t\t\tlet defaultExpr: string | null = null;\n\t\t\tlet generated = column.isGenerated;\n\t\t\tif (isSoleGeneratedPk) {\n\t\t\t\tconst seqName = `${table.tableName}_${column.name}_seq`;\n\t\t\t\tdefaultExpr = `nextval('${seqName}'::regclass)`;\n\t\t\t\tgenerated = false;\n\t\t\t}\n\n\t\t\tconst logicalColumnName = column.logicalName || column.name;\n\t\t\tcolumns.push({\n\t\t\t\tid: id(\n\t\t\t\t\tcolumnStableId(\n\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\tschemaName,\n\t\t\t\t\t\tlogicalName,\n\t\t\t\t\t\tlogicalColumnName,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\tdatabaseName,\n\t\t\t\t\tschemaName,\n\t\t\t\t\tlogicalColumnName,\n\t\t\t\t\t{ name: column.name },\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tnullable: column.nullable,\n\t\t\t\tdefault: defaultExpr,\n\t\t\t\tgenerated,\n\t\t\t});\n\t\t}\n\n\t\tif (table.primaryKey.length > 0) {\n\t\t\tconstraints.push({\n\t\t\t\tid: id(`cst:${tableId}:pk`),\n\t\t\t\tkind: \"primary_key\",\n\t\t\t\tcolumns: table.primaryKey.map(mapPhysical),\n\t\t\t\tname: null,\n\t\t\t});\n\t\t}\n\n\t\tconst relations: SchemaRelation[] = [];\n\t\tconst authoredRelations = table.model.meta.relations ?? {};\n\t\tfor (const [relName, relation] of Object.entries(authoredRelations) as [\n\t\t\tstring,\n\t\t\tModelRelationMetadata,\n\t\t][]) {\n\t\t\tconst targetId = tableStableId(\n\t\t\t\trelation.targetDatabase ?? databaseName,\n\t\t\t\trelation.targetSchema,\n\t\t\t\trelation.targetModel,\n\t\t\t);\n\t\t\tif (!physicalByTableId.has(targetId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst isFk =\n\t\t\t\t(relation.kind === \"many-to-one\" || relation.kind === \"one-to-one\") &&\n\t\t\t\t!relation.through;\n\t\t\tconst backing: string[] = [];\n\t\t\tconst sourcePhysical = mapAuthoredColumns(\n\t\t\t\trelation.sourceColumns,\n\t\t\t\tlogicalToPhysical,\n\t\t\t);\n\t\t\tconst targetPhysical = mapAuthoredColumns(\n\t\t\t\trelation.targetColumns,\n\t\t\t\tphysicalByTableId.get(targetId),\n\t\t\t);\n\t\t\tif (isFk) {\n\t\t\t\tconst fkId = fkStableId(\n\t\t\t\t\ttableId,\n\t\t\t\t\tsourcePhysical,\n\t\t\t\t\ttargetId,\n\t\t\t\t\ttargetPhysical,\n\t\t\t\t);\n\t\t\t\tbacking.push(fkId);\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(fkId),\n\t\t\t\t\tkind: \"foreign_key\",\n\t\t\t\t\tcolumns: sourcePhysical,\n\t\t\t\t\ttargetTableId: targetId,\n\t\t\t\t\ttargetColumns: targetPhysical,\n\t\t\t\t\tname: null,\n\t\t\t\t\tonDelete: \"no_action\",\n\t\t\t\t\tonUpdate: \"no_action\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet through: SchemaRelationThrough | undefined;\n\t\t\tif (relation.through) {\n\t\t\t\tconst throughTableId = tableStableId(\n\t\t\t\t\tdatabaseName,\n\t\t\t\t\trelation.through.schema,\n\t\t\t\t\trelation.through.model,\n\t\t\t\t);\n\t\t\t\tif (!physicalByTableId.has(throughTableId)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst throughMap = physicalByTableId.get(throughTableId);\n\t\t\t\tthrough = {\n\t\t\t\t\ttableId: throughTableId,\n\t\t\t\t\tsourceColumns: mapAuthoredColumns(\n\t\t\t\t\t\trelation.through.sourceColumns,\n\t\t\t\t\t\tthroughMap,\n\t\t\t\t\t),\n\t\t\t\t\ttargetColumns: mapAuthoredColumns(\n\t\t\t\t\t\trelation.through.targetColumns,\n\t\t\t\t\t\tthroughMap,\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\t\t\trelations.push({\n\t\t\t\tid: id(`rel:${tableId}:${relName}`),\n\t\t\t\tcardinality: cardinalityFromKind(relation.kind),\n\t\t\t\tsourceTableId: tableId,\n\t\t\t\ttargetTableId: targetId,\n\t\t\t\tsourceColumns: sourcePhysical,\n\t\t\t\ttargetColumns: targetPhysical,\n\t\t\t\tbackingConstraintIds: backing,\n\t\t\t\tname: relName,\n\t\t\t\tthrough,\n\t\t\t});\n\t\t}\n\n\t\tbucket.tables.push({\n\t\t\tid: id(tableId),\n\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\tdatabaseName,\n\t\t\t\tschemaName,\n\t\t\t\t(table.model.meta.model ?? table.tableName).trim() || table.tableName,\n\t\t\t\t{ name: table.tableName },\n\t\t\t),\n\t\t\tcolumns,\n\t\t\tconstraints,\n\t\t\trelations,\n\t\t\tindexes: [],\n\t\t});\n\t}\n\n\tconst emittedDatabases: SchemaDatabase[] = [...databases.entries()].map(\n\t\t([databaseName, bySchema]) => ({\n\t\t\tid: id(`db:${databaseName}`),\n\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\tdatabaseName,\n\t\t\t\tDEFAULT_SCHEMA,\n\t\t\t\tdatabaseName,\n\t\t\t),\n\t\t\tnamespaces: [...bySchema.entries()].map(([schemaName, bucket]) => ({\n\t\t\t\tid: id(`ns:${databaseName}.${schemaName}`),\n\t\t\t\tidentity: schemaObjectIdentity(databaseName, schemaName, schemaName),\n\t\t\t\tenums: bucket.enums,\n\t\t\t\ttables: bucket.tables,\n\t\t\t})),\n\t\t\tbackend,\n\t\t}),\n\t);\n\n\treturn canonicalizeAthenaSchemaIr({\n\t\tkind: ATHENA_SCHEMA_IR_KIND,\n\t\tirVersion: ATHENA_SCHEMA_IR_VERSION,\n\t\tdatabases: emittedDatabases,\n\t\tmetadata: {\n\t\t\tprovenance: { source: \"models\", backend },\n\t\t\textensions: {},\n\t\t},\n\t});\n}\n\nexport function schemaIrFromTable(tableDef: unknown): AthenaSchemaIr {\n\tif (isObject(tableDef) && tableDef.ir != null) {\n\t\treturn canonicalizeAthenaSchemaIr(tableDef.ir);\n\t}\n\treturn schemaIrFromModels([tableDef], { defaultDatabase: DEFAULT_DATABASE });\n}\n\nfunction columnTypeFromIntrospection(\n\tcolumn: IntrospectionColumn,\n\tbackend: string,\n\tenumId?: string,\n): SchemaType {\n\tconst parsedUdt = parseSchemaTypeString(\n\t\tcolumn.udtName || column.dataType,\n\t\tcolumn.arrayDimensions ?? 0,\n\t);\n\tconst formatted = parseSchemaTypeString(\n\t\tcolumn.dataType || column.udtName,\n\t\tcolumn.arrayDimensions ?? 0,\n\t);\n\tconst name =\n\t\tparsedUdt.name.length <= formatted.name.length\n\t\t\t? parsedUdt.name\n\t\t\t: formatted.name;\n\tconst native: NativeTypeDescriptor = {\n\t\tbackend,\n\t\tname,\n\t\tarrayDimensions: formatted.arrayDimensions || parsedUdt.arrayDimensions,\n\t\tlength: formatted.length ?? parsedUdt.length,\n\t\tprecision: formatted.precision ?? parsedUdt.precision,\n\t\tscale: formatted.scale ?? parsedUdt.scale,\n\t};\n\tif (enumId || column.typeKind === \"enum\") {\n\t\treturn {\n\t\t\tkind: \"enum\",\n\t\t\tenumId:\n\t\t\t\tenumId ??\n\t\t\t\tenumStableId(\"default\", \"_\", \"_\", column.udtName || column.name),\n\t\t\tnative,\n\t\t};\n\t}\n\treturn { kind: \"scalar\", semantic: name, native };\n}\n\nfunction isOutboundFkRelation(relation: IntrospectionRelation): boolean {\n\treturn relation.kind === \"many-to-one\" || relation.kind === \"one-to-one\";\n}\n\nfunction introspectedEnumStableId(\n\tdatabase: string,\n\tschema: string,\n\tname: string,\n): string {\n\treturn `enum:${database}.${schema}.${name}`;\n}\n\nfunction lookupIntrospectionTable(\n\tsnapshot: IntrospectionSnapshot,\n\tschema: string,\n\tname: string,\n): IntrospectionTable | undefined {\n\tconst ns = snapshot.schemas[schema];\n\tif (!ns) {\n\t\treturn undefined;\n\t}\n\tconst direct = ns.tables[name];\n\tif (direct) {\n\t\treturn direct;\n\t}\n\treturn Object.values(ns.tables).find((table) => table.name === name);\n}\n\nfunction collectIntrospectionTables(\n\tsnapshot: IntrospectionSnapshot,\n\tselectedNamespaces: ReadonlySet<string>,\n): Map<string, IntrospectionTable> {\n\tconst included = new Map<string, IntrospectionTable>();\n\tconst tableKey = (schema: string, name: string) => `${schema}\\u0000${name}`;\n\tconst includeTable = (schema: string, name: string): void => {\n\t\tconst key = tableKey(schema, name);\n\t\tif (included.has(key)) {\n\t\t\treturn;\n\t\t}\n\t\tconst table = lookupIntrospectionTable(snapshot, schema, name);\n\t\tif (!table) {\n\t\t\treturn;\n\t\t}\n\t\tincluded.set(key, table);\n\t\tfor (const relation of Object.values(table.relations)) {\n\t\t\tincludeTable(relation.targetSchema, relation.targetModel);\n\t\t\tif (relation.through) {\n\t\t\t\tincludeTable(relation.through.schema, relation.through.model);\n\t\t\t}\n\t\t}\n\t};\n\tfor (const nsName of selectedNamespaces) {\n\t\tconst ns = snapshot.schemas[nsName];\n\t\tif (!ns) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const table of Object.values(ns.tables)) {\n\t\t\tincludeTable(table.schema || nsName, table.name);\n\t\t}\n\t}\n\treturn included;\n}\n\nexport function schemaIrFromIntrospection(\n\tsnapshot: IntrospectionSnapshot,\n\toptions: SchemaIrFromIntrospectionOptions = {},\n): AthenaSchemaIr {\n\tconst excludeInternal = options.excludeInternal !== false;\n\tconst allow = options.schemas ? new Set(options.schemas) : null;\n\tconst databaseName = snapshot.database?.trim() || DEFAULT_DATABASE;\n\tconst backend = snapshot.backend || DEFAULT_BACKEND;\n\n\tconst selectedNamespaces = new Set<string>();\n\tfor (const ns of Object.values(snapshot.schemas)) {\n\t\tif (allow && !allow.has(ns.name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (excludeInternal && INTERNAL_SCHEMAS.has(ns.name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tselectedNamespaces.add(ns.name);\n\t}\n\tconst includedTables = collectIntrospectionTables(\n\t\tsnapshot,\n\t\tselectedNamespaces,\n\t);\n\n\tconst namespaces: SchemaNamespace[] = [];\n\n\tfor (const ns of Object.values(snapshot.schemas)) {\n\t\tconst schemaTables = [...includedTables.values()].filter(\n\t\t\t(table) => (table.schema || ns.name) === ns.name,\n\t\t);\n\t\tif (schemaTables.length === 0) {\n\t\t\tif (!selectedNamespaces.has(ns.name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnamespaces.push({\n\t\t\t\tid: id(`ns:${databaseName}.${ns.name}`),\n\t\t\t\tidentity: schemaObjectIdentity(databaseName, ns.name, ns.name),\n\t\t\t\tenums: [],\n\t\t\t\ttables: [],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst enums: SchemaEnum[] = [];\n\t\tconst seenEnums = new Set<string>();\n\t\tconst tables: SchemaTable[] = [];\n\n\t\tfor (const table of schemaTables) {\n\t\t\tconst tableId = tableStableId(databaseName, table.schema, table.name);\n\t\t\tconst columns: SchemaColumn[] = [];\n\t\t\tfor (const column of Object.values(table.columns)) {\n\t\t\t\tlet enumId: string | undefined;\n\t\t\t\tif (column.enumValues && column.enumValues.length > 0) {\n\t\t\t\t\tconst enumName = column.udtName || column.dataType || column.name;\n\t\t\t\t\tenumId = introspectedEnumStableId(\n\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\tenumName,\n\t\t\t\t\t);\n\t\t\t\t\tif (!seenEnums.has(enumId)) {\n\t\t\t\t\t\tseenEnums.add(enumId);\n\t\t\t\t\t\tenums.push({\n\t\t\t\t\t\t\tid: id(enumId),\n\t\t\t\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\t\t\tenumName,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tlabels: [...column.enumValues],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst defaultExpr =\n\t\t\t\t\tcolumn.defaultExpression === undefined\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: column.defaultExpression;\n\t\t\t\tcolumns.push({\n\t\t\t\t\tid: id(\n\t\t\t\t\t\tcolumnStableId(databaseName, table.schema, table.name, column.name),\n\t\t\t\t\t),\n\t\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\tcolumn.name,\n\t\t\t\t\t),\n\t\t\t\t\ttype: columnTypeFromIntrospection(column, backend, enumId),\n\t\t\t\t\tnullable: column.isNullable,\n\t\t\t\t\tdefault: defaultExpr,\n\t\t\t\t\tgenerated: column.isGenerated,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst constraints: SchemaConstraint[] = [];\n\t\t\tif (table.primaryKey.length > 0) {\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(`cst:${tableId}:pk`),\n\t\t\t\t\tkind: \"primary_key\",\n\t\t\t\t\tcolumns: [...table.primaryKey],\n\t\t\t\t\tname: null,\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (const unique of table.uniqueConstraints ?? []) {\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(`cst:${tableId}:uq:${unique.columns.join(\",\")}`),\n\t\t\t\t\tkind: \"unique\",\n\t\t\t\t\tcolumns: [...unique.columns],\n\t\t\t\t\tname: unique.name ?? null,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst relations: SchemaRelation[] = [];\n\t\t\tconst seenFk = new Set<string>();\n\t\t\tfor (const [relName, relation] of Object.entries(table.relations)) {\n\t\t\t\tconst targetId = tableStableId(\n\t\t\t\t\trelation.targetDatabase ?? databaseName,\n\t\t\t\t\trelation.targetSchema,\n\t\t\t\t\trelation.targetModel,\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\t!includedTables.has(\n\t\t\t\t\t\t`${relation.targetSchema}\\u0000${relation.targetModel}`,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (relation.through) {\n\t\t\t\t\tconst throughKey = `${relation.through.schema}\\u0000${relation.through.model}`;\n\t\t\t\t\tif (!includedTables.has(throughKey)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst backing: string[] = [];\n\t\t\t\tif (isOutboundFkRelation(relation) && !relation.through) {\n\t\t\t\t\tconst key = [\n\t\t\t\t\t\trelation.sourceColumns.join(\",\"),\n\t\t\t\t\t\trelation.targetSchema,\n\t\t\t\t\t\trelation.targetModel,\n\t\t\t\t\t\trelation.targetColumns.join(\",\"),\n\t\t\t\t\t].join(\"\\0\");\n\t\t\t\t\tif (!seenFk.has(key)) {\n\t\t\t\t\t\tseenFk.add(key);\n\t\t\t\t\t\tconst fkId = fkStableId(\n\t\t\t\t\t\t\ttableId,\n\t\t\t\t\t\t\trelation.sourceColumns,\n\t\t\t\t\t\t\ttargetId,\n\t\t\t\t\t\t\trelation.targetColumns,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbacking.push(fkId);\n\t\t\t\t\t\tconstraints.push({\n\t\t\t\t\t\t\tid: id(fkId),\n\t\t\t\t\t\t\tkind: \"foreign_key\",\n\t\t\t\t\t\t\tcolumns: [...relation.sourceColumns],\n\t\t\t\t\t\t\ttargetTableId: targetId,\n\t\t\t\t\t\t\ttargetColumns: [...relation.targetColumns],\n\t\t\t\t\t\t\tname: relation.name ?? null,\n\t\t\t\t\t\t\tonDelete: normalizeReferentialAction(\n\t\t\t\t\t\t\t\trelation.onDelete,\n\t\t\t\t\t\t\t) as SchemaReferentialAction,\n\t\t\t\t\t\t\tonUpdate: normalizeReferentialAction(\n\t\t\t\t\t\t\t\trelation.onUpdate,\n\t\t\t\t\t\t\t) as SchemaReferentialAction,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trelations.push({\n\t\t\t\t\tid: id(`rel:${tableId}:${relName}`),\n\t\t\t\t\tcardinality: cardinalityFromKind(relation.kind),\n\t\t\t\t\tsourceTableId: tableId,\n\t\t\t\t\ttargetTableId: targetId,\n\t\t\t\t\tsourceColumns: [...relation.sourceColumns],\n\t\t\t\t\ttargetColumns: [...relation.targetColumns],\n\t\t\t\t\tbackingConstraintIds: backing,\n\t\t\t\t\tname: relation.name ?? relName,\n\t\t\t\t\t...(relation.through\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tthrough: {\n\t\t\t\t\t\t\t\t\ttableId: tableStableId(\n\t\t\t\t\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\t\t\t\t\trelation.through.schema,\n\t\t\t\t\t\t\t\t\t\trelation.through.model,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tsourceColumns: [...relation.through.sourceColumns],\n\t\t\t\t\t\t\t\t\ttargetColumns: [...relation.through.targetColumns],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst indexes: SchemaIndex[] = (table.indexes ?? []).map((ix, index) => {\n\t\t\t\tconst directions = ix.columnDirections ?? [];\n\t\t\t\treturn {\n\t\t\t\t\tid: id(`idx:${tableId}:${ix.name ?? index}`),\n\t\t\t\t\tunique: Boolean(ix.unique),\n\t\t\t\t\tname: ix.name ?? null,\n\t\t\t\t\tpredicate: ix.predicate ?? null,\n\t\t\t\t\tmethod: ix.method ?? null,\n\t\t\t\t\tcolumns: ix.columns.map((colName, i) => ({\n\t\t\t\t\t\tname: colName,\n\t\t\t\t\t\tdirection:\n\t\t\t\t\t\t\tdirections[i] === \"desc\" ? (\"desc\" as const) : (\"asc\" as const),\n\t\t\t\t\t})),\n\t\t\t\t};\n\t\t\t});\n\n\t\t\ttables.push({\n\t\t\t\tid: id(tableId),\n\t\t\t\tidentity: schemaObjectIdentity(databaseName, table.schema, table.name),\n\t\t\t\tcolumns,\n\t\t\t\tconstraints,\n\t\t\t\trelations,\n\t\t\t\tindexes,\n\t\t\t});\n\t\t}\n\n\t\tnamespaces.push({\n\t\t\tid: id(`ns:${databaseName}.${ns.name}`),\n\t\t\tidentity: schemaObjectIdentity(databaseName, ns.name, ns.name),\n\t\t\tenums,\n\t\t\ttables,\n\t\t});\n\t}\n\n\treturn canonicalizeAthenaSchemaIr({\n\t\tkind: ATHENA_SCHEMA_IR_KIND,\n\t\tirVersion: ATHENA_SCHEMA_IR_VERSION,\n\t\tdatabases: [\n\t\t\t{\n\t\t\t\tid: id(`db:${databaseName}`),\n\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\tdatabaseName,\n\t\t\t\t\tDEFAULT_SCHEMA,\n\t\t\t\t\tdatabaseName,\n\t\t\t\t),\n\t\t\t\tnamespaces,\n\t\t\t\tbackend,\n\t\t\t},\n\t\t],\n\t\tmetadata: {\n\t\t\tprovenance: {\n\t\t\t\tsource: \"introspection\",\n\t\t\t\tgeneratedAt: snapshot.generatedAt,\n\t\t\t\tbackend,\n\t\t\t},\n\t\t\textensions: {},\n\t\t},\n\t});\n}\n\nfunction irDatabaseNames(ir: AthenaSchemaIr): string[] {\n\tconst names = new Set<string>();\n\tfor (const db of ir.databases) {\n\t\tnames.add(db.identity.physical.database || DEFAULT_DATABASE);\n\t}\n\treturn [...names];\n}\n\nfunction rewriteIrDatabaseName(\n\tir: AthenaSchemaIr,\n\tfrom: string,\n\tto: string,\n): AthenaSchemaIr {\n\tif (from === to) {\n\t\treturn ir;\n\t}\n\tconst rewritten: unknown = JSON.parse(JSON.stringify(ir), (key, value) => {\n\t\tif (key === \"database\" && value === from) {\n\t\t\treturn to;\n\t\t}\n\t\tif (typeof value !== \"string\") {\n\t\t\treturn value;\n\t\t}\n\t\tif (value === `db:${from}`) {\n\t\t\treturn `db:${to}`;\n\t\t}\n\t\tif (\n\t\t\tkey === \"id\" ||\n\t\t\tkey === \"enumId\" ||\n\t\t\tkey === \"targetTableId\" ||\n\t\t\tkey.endsWith(\"Id\")\n\t\t) {\n\t\t\treturn value.replaceAll(`:${from}.`, `:${to}.`).replaceAll(\n\t\t\t\t`db:${from}`,\n\t\t\t\t`db:${to}`,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t});\n\treturn rewritten as AthenaSchemaIr;\n}\n\n/**\n * Authored models omit a catalog name and lift as `default`. A live\n * introspection snapshot names that same catalog. When each document has\n * exactly one database and one side is `default`, treat them as the same\n * catalog so serial/enum models do not drop+create against the live DB.\n * Distinct named catalogs (multi-tenant) are left alone.\n */\nexport function alignSingletonDefaultDatabase(\n\tfrom: AthenaSchemaIr,\n\tto: AthenaSchemaIr,\n): { from: AthenaSchemaIr; to: AthenaSchemaIr } {\n\tconst fromNames = irDatabaseNames(from);\n\tconst toNames = irDatabaseNames(to);\n\tif (fromNames.length !== 1 || toNames.length !== 1) {\n\t\treturn { from, to };\n\t}\n\tconst fromDb = fromNames[0];\n\tconst toDb = toNames[0];\n\tif (!fromDb || !toDb || fromDb === toDb) {\n\t\treturn { from, to };\n\t}\n\tif (toDb === DEFAULT_DATABASE) {\n\t\treturn { from, to: rewriteIrDatabaseName(to, DEFAULT_DATABASE, fromDb) };\n\t}\n\tif (fromDb === DEFAULT_DATABASE) {\n\t\treturn { from: rewriteIrDatabaseName(from, DEFAULT_DATABASE, toDb), to };\n\t}\n\treturn { from, to };\n}\n\nexport {\n\tcollectIrNamespaceIdentities,\n\tcollectIrNamespaceNames,\n\tcollectIrTables,\n\tprojectTable,\n};\n","import type {\n\tSchemaForeignKey,\n\tSchemaIndex,\n\tSchemaTableIdentity,\n\tSchemaUniqueConstraint,\n} from \"./types.ts\";\n\n/** Stable map key for a schema-qualified table. */\nexport function tableIdentityKey(identity: SchemaTableIdentity): string {\n\treturn `${identity.database ?? \"\"}\\u0000${identity.schema}\\u0000${identity.name}`;\n}\n\nexport function tableIdentityKeyParts(schema: string, name: string): string {\n\treturn tableIdentityKey({ schema, name });\n}\n\n/** Structural unique key: ordered columns (names ignored). */\nexport function uniqueStructuralKey(\n\tunique: Pick<SchemaUniqueConstraint, \"columns\">,\n): string {\n\treturn `u:${unique.columns.join(\"\\u0000\")}`;\n}\n\n/** Structural FK key: columns + target + target columns + actions. */\nexport function foreignKeyStructuralKey(\n\tfk: Pick<\n\t\tSchemaForeignKey,\n\t\t\"columns\" | \"target\" | \"targetColumns\" | \"onDelete\" | \"onUpdate\"\n\t>,\n): string {\n\treturn [\n\t\t\"fk\",\n\t\tfk.columns.join(\",\"),\n\t\ttableIdentityKey(fk.target),\n\t\tfk.targetColumns.join(\",\"),\n\t\tfk.onDelete,\n\t\tfk.onUpdate,\n\t].join(\"\\u0000\");\n}\n\n/**\n * Structural FK identity for match-before-alter (columns + target only).\n * Referential action changes become alter_foreign_key, not drop+add.\n */\nexport interface ForeignKeyMatchKeyInput {\n\treadonly columns: readonly string[];\n\treadonly target: SchemaTableIdentity;\n\treadonly targetColumns: readonly string[];\n}\n\nexport function foreignKeyMatchKey(fk: ForeignKeyMatchKeyInput): string {\n\treturn [\n\t\t\"fkm\",\n\t\tfk.columns.join(\",\"),\n\t\ttableIdentityKey(fk.target),\n\t\tfk.targetColumns.join(\",\"),\n\t].join(\"\\u0000\");\n}\n\n/** Structural index key: unique flag + ordered columns + directions + predicate. */\nexport function indexStructuralKey(\n\tindex: Pick<SchemaIndex, \"columns\" | \"unique\" | \"predicate\" | \"method\">,\n): string {\n\tconst cols = index.columns\n\t\t.map((c) => `${c.name}:${c.direction ?? \"asc\"}`)\n\t\t.join(\",\");\n\treturn [\n\t\t\"ix\",\n\t\tindex.unique ? \"1\" : \"0\",\n\t\tcols,\n\t\tindex.predicate ?? \"\",\n\t\tindex.method ?? \"\",\n\t].join(\"\\u0000\");\n}\n\nexport function compareStrings(a: string, b: string): number {\n\treturn a < b ? -1 : a > b ? 1 : 0;\n}\n\nexport function compareTableIdentity(\n\ta: SchemaTableIdentity,\n\tb: SchemaTableIdentity,\n): number {\n\tconst schemaCmp = compareStrings(a.schema, b.schema);\n\tif (schemaCmp !== 0) {\n\t\treturn schemaCmp;\n\t}\n\treturn compareStrings(a.name, b.name);\n}\n","import type {\n  SchemaDiffOperation,\n  SchemaDiffSummary,\n} from \"./types.ts\";\n\nconst EMPTY_SUMMARY: SchemaDiffSummary = {\n  schemasAdded: 0,\n  schemasRemoved: 0,\n  tablesAdded: 0,\n  tablesRemoved: 0,\n  tablesRenamed: 0,\n  columnsAdded: 0,\n  columnsRemoved: 0,\n  columnsRenamed: 0,\n  columnsChanged: 0,\n  primaryKeysAdded: 0,\n  primaryKeysRemoved: 0,\n  uniquesAdded: 0,\n  uniquesRemoved: 0,\n  foreignKeysAdded: 0,\n  foreignKeysRemoved: 0,\n  foreignKeysChanged: 0,\n  indexesAdded: 0,\n  indexesRemoved: 0,\n  totalOperations: 0,\n};\n\n/** Derive a lightweight summary from operations (no duplicate mutable state). */\nexport function summarizeSchemaDiffOperations(\n  operations: readonly SchemaDiffOperation[]\n): SchemaDiffSummary {\n  const summary: {\n    -readonly [K in keyof SchemaDiffSummary]: SchemaDiffSummary[K];\n  } = { ...EMPTY_SUMMARY, totalOperations: operations.length };\n\n  for (const op of operations) {\n    switch (op.kind) {\n      case \"create_schema\":\n        summary.schemasAdded += 1;\n        break;\n      case \"drop_schema\":\n        summary.schemasRemoved += 1;\n        break;\n      case \"create_table\":\n        summary.tablesAdded += 1;\n        break;\n      case \"drop_table\":\n        summary.tablesRemoved += 1;\n        break;\n      case \"rename_table\":\n        summary.tablesRenamed += 1;\n        break;\n      case \"add_column\":\n        summary.columnsAdded += 1;\n        break;\n      case \"drop_column\":\n        summary.columnsRemoved += 1;\n        break;\n      case \"rename_column\":\n        summary.columnsRenamed += 1;\n        break;\n      case \"alter_column\":\n        summary.columnsChanged += 1;\n        break;\n      case \"add_primary_key\":\n        summary.primaryKeysAdded += 1;\n        break;\n      case \"drop_primary_key\":\n        summary.primaryKeysRemoved += 1;\n        break;\n      case \"add_unique_constraint\":\n        summary.uniquesAdded += 1;\n        break;\n      case \"drop_unique_constraint\":\n        summary.uniquesRemoved += 1;\n        break;\n      case \"add_foreign_key\":\n        summary.foreignKeysAdded += 1;\n        break;\n      case \"drop_foreign_key\":\n        summary.foreignKeysRemoved += 1;\n        break;\n      case \"alter_foreign_key\":\n        summary.foreignKeysChanged += 1;\n        break;\n      case \"add_index\":\n        summary.indexesAdded += 1;\n        break;\n      case \"drop_index\":\n        summary.indexesRemoved += 1;\n        break;\n      default: {\n        const _exhaustive: never = op;\n        void _exhaustive;\n      }\n    }\n  }\n\n  return summary;\n}\n","/**\n * Typed errors for invalid schema snapshots and diff inputs.\n */\n\nexport type SchemaDiffErrorCode =\n\t| \"duplicate_schema\"\n\t| \"duplicate_table\"\n\t| \"duplicate_column\"\n\t| \"duplicate_unique\"\n\t| \"duplicate_foreign_key\"\n\t| \"duplicate_index\"\n\t| \"missing_pk_column\"\n\t| \"missing_unique_column\"\n\t| \"missing_fk_column\"\n\t| \"missing_index_column\"\n\t| \"fk_arity_mismatch\"\n\t| \"invalid_snapshot\"\n\t| \"unsupported_snapshot_version\";\n\nexport class SchemaDiffError extends Error {\n\treadonly code: SchemaDiffErrorCode;\n\treadonly details?: Readonly<Record<string, unknown>>;\n\n\tconstructor(\n\t\tcode: SchemaDiffErrorCode,\n\t\tmessage: string,\n\t\tdetails?: Readonly<Record<string, unknown>>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"SchemaDiffError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t}\n}\n","import { SchemaDiffError } from \"./errors.ts\";\nimport { foreignKeyMatchKey, indexStructuralKey, uniqueStructuralKey } from \"./identity.ts\";\nimport {\n  ATHENA_SCHEMA_SNAPSHOT_VERSION,\n  type AthenaSchemaSnapshot,\n  type SchemaTable,\n} from \"./types.ts\";\n\nfunction validateTable(table: SchemaTable): void {\n  const tableLabel = `${table.schema}.${table.name}`;\n  const columnNames = new Set<string>();\n\n  for (const column of table.columns) {\n    if (columnNames.has(column.name)) {\n      throw new SchemaDiffError(\n        \"duplicate_column\",\n        `Duplicate column \"${column.name}\" on table ${tableLabel}`,\n        { table: tableLabel, column: column.name }\n      );\n    }\n    columnNames.add(column.name);\n  }\n\n  if (table.primaryKey) {\n    for (const col of table.primaryKey.columns) {\n      if (!columnNames.has(col)) {\n        throw new SchemaDiffError(\n          \"missing_pk_column\",\n          `Primary key column \"${col}\" missing on table ${tableLabel}`,\n          { table: tableLabel, column: col }\n        );\n      }\n    }\n  }\n\n  const uniqueKeys = new Set<string>();\n  for (const unique of table.uniqueConstraints) {\n    const key = uniqueStructuralKey(unique);\n    if (uniqueKeys.has(key)) {\n      throw new SchemaDiffError(\n        \"duplicate_unique\",\n        `Duplicate unique constraint on ${tableLabel}: (${unique.columns.join(\", \")})`,\n        { table: tableLabel, columns: unique.columns }\n      );\n    }\n    uniqueKeys.add(key);\n    for (const col of unique.columns) {\n      if (!columnNames.has(col)) {\n        throw new SchemaDiffError(\n          \"missing_unique_column\",\n          `Unique constraint column \"${col}\" missing on table ${tableLabel}`,\n          { table: tableLabel, column: col }\n        );\n      }\n    }\n  }\n\n  const fkKeys = new Set<string>();\n  for (const fk of table.foreignKeys) {\n    if (fk.columns.length !== fk.targetColumns.length) {\n      throw new SchemaDiffError(\n        \"fk_arity_mismatch\",\n        `Foreign key arity mismatch on ${tableLabel}`,\n        {\n          table: tableLabel,\n          columns: fk.columns,\n          targetColumns: fk.targetColumns,\n        }\n      );\n    }\n    const key = foreignKeyMatchKey(fk);\n    if (fkKeys.has(key)) {\n      throw new SchemaDiffError(\n        \"duplicate_foreign_key\",\n        `Duplicate foreign key on ${tableLabel}`,\n        { table: tableLabel, columns: fk.columns }\n      );\n    }\n    fkKeys.add(key);\n    for (const col of fk.columns) {\n      if (!columnNames.has(col)) {\n        throw new SchemaDiffError(\n          \"missing_fk_column\",\n          `Foreign key column \"${col}\" missing on table ${tableLabel}`,\n          { table: tableLabel, column: col }\n        );\n      }\n    }\n  }\n\n  const indexKeys = new Set<string>();\n  for (const index of table.indexes) {\n    const key = indexStructuralKey(index);\n    if (indexKeys.has(key)) {\n      throw new SchemaDiffError(\n        \"duplicate_index\",\n        `Duplicate index on ${tableLabel}`,\n        { table: tableLabel, columns: index.columns.map((c) => c.name) }\n      );\n    }\n    indexKeys.add(key);\n    for (const col of index.columns) {\n      if (!columnNames.has(col.name)) {\n        throw new SchemaDiffError(\n          \"missing_index_column\",\n          `Index column \"${col.name}\" missing on table ${tableLabel}`,\n          { table: tableLabel, column: col.name }\n        );\n      }\n    }\n  }\n}\n\n/**\n * Fail-closed validation of snapshot invariants before diffing.\n * Does not require FK targets to exist (cross-boundary / unmanaged targets allowed).\n */\nexport function validateSchemaSnapshot(snapshot: AthenaSchemaSnapshot): void {\n  if (!snapshot || typeof snapshot !== \"object\") {\n    throw new SchemaDiffError(\n      \"invalid_snapshot\",\n      \"Schema snapshot must be an object\"\n    );\n  }\n\n  if (snapshot.version !== ATHENA_SCHEMA_SNAPSHOT_VERSION) {\n    throw new SchemaDiffError(\n      \"unsupported_snapshot_version\",\n      `Unsupported schema snapshot version: ${String(\n        (snapshot as { version?: unknown }).version\n      )}`,\n      { version: (snapshot as { version?: unknown }).version }\n    );\n  }\n\n  if (!Array.isArray(snapshot.schemas)) {\n    throw new SchemaDiffError(\n      \"invalid_snapshot\",\n      \"Schema snapshot.schemas must be an array\"\n    );\n  }\n\n  const schemaNames = new Set<string>();\n  for (const ns of snapshot.schemas) {\n    if (schemaNames.has(ns.name)) {\n      throw new SchemaDiffError(\n        \"duplicate_schema\",\n        `Duplicate schema namespace \"${ns.name}\"`,\n        { schema: ns.name }\n      );\n    }\n    schemaNames.add(ns.name);\n\n    const tableNames = new Set<string>();\n    for (const table of ns.tables) {\n      if (table.schema !== ns.name) {\n        throw new SchemaDiffError(\n          \"invalid_snapshot\",\n          `Table ${table.schema}.${table.name} nested under schema \"${ns.name}\"`,\n          { schema: ns.name, table: `${table.schema}.${table.name}` }\n        );\n      }\n      const tableKey = table.name;\n      if (tableNames.has(tableKey)) {\n        throw new SchemaDiffError(\n          \"duplicate_table\",\n          `Duplicate table \"${ns.name}.${table.name}\"`,\n          { schema: ns.name, table: table.name }\n        );\n      }\n      tableNames.add(tableKey);\n      validateTable(table);\n    }\n  }\n}\n","import { canonicalizeAthenaSchemaIr } from \"../ir/canonicalize.ts\";\nimport {\n\talignSingletonDefaultDatabase,\n\tcollectIrNamespaceIdentities,\n\tcollectIrTables,\n\tisAthenaSchemaIr,\n\tprojectTable,\n\tschemaIrFromSnapshot,\n\tschemaSnapshotFromIr,\n} from \"../ir/compatibility.ts\";\nimport type { AthenaSchemaIr } from \"../ir/document.ts\";\nimport { physicalIdentityKey } from \"../ir/identity.ts\";\nimport type { SchemaTable as IrSchemaTable } from \"../ir/table.ts\";\nimport { SchemaIrError, validateAthenaSchemaIr } from \"../ir/validate.ts\";\nimport {\n\tforeignKeyMatchKey,\n\tindexStructuralKey,\n\tuniqueStructuralKey,\n} from \"./identity.ts\";\nimport {\n\tcolumnsEqual,\n\tcolumnTypesEqual,\n\tnormalizeSchemaSnapshot,\n\tprimaryKeysEqual,\n} from \"./normalize.ts\";\nimport { summarizeSchemaDiffOperations } from \"./summary.ts\";\nimport type {\n\tAthenaSchemaSnapshot,\n\tDiffSchemasInput,\n\tDiffSchemasOptions,\n\tSchemaColumn,\n\tSchemaDiff,\n\tSchemaDiffOperation,\n\tSchemaForeignKey,\n\tSchemaIndex,\n\tSchemaTable,\n\tSchemaTableIdentity,\n\tSchemaUniqueConstraint,\n} from \"./types.ts\";\nimport { validateSchemaSnapshot } from \"./validate.ts\";\n\nconst OPERATION_KIND_ORDER: Readonly<\n\tRecord<SchemaDiffOperation[\"kind\"], number>\n> = {\n\tcreate_schema: 4,\n\trename_table: 5,\n\tdrop_foreign_key: 10,\n\tdrop_index: 20,\n\tdrop_unique_constraint: 30,\n\tdrop_primary_key: 40,\n\tdrop_column: 50,\n\tdrop_table: 60,\n\tdrop_schema: 70,\n\tcreate_table: 90,\n\trename_column: 100,\n\tadd_column: 110,\n\talter_column: 130,\n\tadd_primary_key: 140,\n\tadd_unique_constraint: 150,\n\tadd_index: 160,\n\tadd_foreign_key: 170,\n\talter_foreign_key: 180,\n};\n\nfunction tableId(table: SchemaTable): SchemaTableIdentity {\n\tconst database = table.database?.trim();\n\treturn {\n\t\tschema: table.schema,\n\t\tname: table.name,\n\t\t...(database ? { database } : {}),\n\t};\n}\n\nfunction operationSortKey(op: SchemaDiffOperation): string {\n\tconst kindOrder = String(OPERATION_KIND_ORDER[op.kind]).padStart(3, \"0\");\n\tswitch (op.kind) {\n\t\tcase \"create_schema\":\n\t\tcase \"drop_schema\":\n\t\t\treturn `${kindOrder}\\u0000${op.database ?? \"\"}\\u0000${op.schema}`;\n\t\tcase \"create_table\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}`;\n\t\tcase \"drop_table\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}`;\n\t\tcase \"rename_table\":\n\t\t\treturn `${kindOrder}\\u0000${op.from.schema}\\u0000${op.from.name}\\u0000${op.to.name}`;\n\t\tcase \"add_column\":\n\t\tcase \"drop_column\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.column.name}`;\n\t\tcase \"rename_column\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}`;\n\t\tcase \"alter_column\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.column}`;\n\t\tcase \"add_primary_key\":\n\t\tcase \"drop_primary_key\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.primaryKey.columns.join(\",\")}`;\n\t\tcase \"add_unique_constraint\":\n\t\tcase \"drop_unique_constraint\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.unique.columns.join(\",\")}`;\n\t\tcase \"add_foreign_key\":\n\t\tcase \"drop_foreign_key\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${foreignKeyMatchKey(op.foreignKey)}`;\n\t\tcase \"alter_foreign_key\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${foreignKeyMatchKey(op.before)}`;\n\t\tcase \"add_index\":\n\t\tcase \"drop_index\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${indexStructuralKey(op.index)}`;\n\t\tdefault: {\n\t\t\tconst _never: never = op;\n\t\t\treturn kindOrder + String(_never);\n\t\t}\n\t}\n}\n\nfunction sortOperations(\n\toperations: SchemaDiffOperation[],\n): SchemaDiffOperation[] {\n\treturn operations\n\t\t.map((op, index) => ({ index, op }))\n\t\t.sort((a, b) => {\n\t\t\tconst ka = operationSortKey(a.op);\n\t\t\tconst kb = operationSortKey(b.op);\n\t\t\tif (ka < kb) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (ka > kb) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn a.index - b.index;\n\t\t})\n\t\t.map((item) => item.op);\n}\n\nfunction indexColumns(table: SchemaTable): Map<string, SchemaColumn> {\n\tconst map = new Map<string, SchemaColumn>();\n\tfor (const column of table.columns) {\n\t\tmap.set(column.name, column);\n\t}\n\treturn map;\n}\n\nfunction indexUniques(table: SchemaTable): Map<string, SchemaUniqueConstraint> {\n\tconst map = new Map<string, SchemaUniqueConstraint>();\n\tfor (const unique of table.uniqueConstraints) {\n\t\tmap.set(uniqueStructuralKey(unique), unique);\n\t}\n\treturn map;\n}\n\nfunction indexForeignKeys(table: SchemaTable): Map<string, SchemaForeignKey> {\n\tconst map = new Map<string, SchemaForeignKey>();\n\tfor (const fk of table.foreignKeys) {\n\t\tmap.set(foreignKeyMatchKey(fk), fk);\n\t}\n\treturn map;\n}\n\nfunction indexIndexes(table: SchemaTable): Map<string, SchemaIndex> {\n\tconst map = new Map<string, SchemaIndex>();\n\tfor (const index of table.indexes) {\n\t\tmap.set(indexStructuralKey(index), index);\n\t}\n\treturn map;\n}\n\nfunction diffColumns(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tconst identity = tableId(toTable);\n\tconst fromCols = indexColumns(fromTable);\n\tconst toCols = indexColumns(toTable);\n\n\tfor (const [name, fromCol] of fromCols) {\n\t\tif (!toCols.has(name)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"drop_column\",\n\t\t\t\ttable: identity,\n\t\t\t\tcolumn: fromCol,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const [name, toCol] of toCols) {\n\t\tconst fromCol = fromCols.get(name);\n\t\tif (!fromCol) {\n\t\t\tops.push({\n\t\t\t\tkind: \"add_column\",\n\t\t\t\ttable: identity,\n\t\t\t\tcolumn: toCol,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (columnsEqual(fromCol, toCol)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst changes: {\n\t\t\ttype?: { from: SchemaColumn[\"type\"]; to: SchemaColumn[\"type\"] };\n\t\t\tnullable?: { from: boolean; to: boolean };\n\t\t\tdefault?: { from: string | null; to: string | null };\n\t\t\tisGenerated?: { from: boolean; to: boolean };\n\t\t} = {};\n\n\t\t// Include enumValues (and all other type fields) so enum-label-only\n\t\t// changes populate the explicit `changes.type` delta for planners.\n\t\tif (!columnTypesEqual(fromCol.type, toCol.type)) {\n\t\t\tchanges.type = { from: fromCol.type, to: toCol.type };\n\t\t}\n\t\tif (fromCol.nullable !== toCol.nullable) {\n\t\t\tchanges.nullable = { from: fromCol.nullable, to: toCol.nullable };\n\t\t}\n\t\tif (fromCol.default !== toCol.default) {\n\t\t\tchanges.default = { from: fromCol.default, to: toCol.default };\n\t\t}\n\t\tif (fromCol.isGenerated !== toCol.isGenerated) {\n\t\t\tchanges.isGenerated = {\n\t\t\t\tfrom: fromCol.isGenerated,\n\t\t\t\tto: toCol.isGenerated,\n\t\t\t};\n\t\t}\n\n\t\tops.push({\n\t\t\tkind: \"alter_column\",\n\t\t\ttable: identity,\n\t\t\tcolumn: name,\n\t\t\tbefore: fromCol,\n\t\t\tafter: toCol,\n\t\t\tchanges,\n\t\t});\n\t}\n}\n\nfunction diffPrimaryKey(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tconst identity = tableId(toTable);\n\tif (primaryKeysEqual(fromTable.primaryKey, toTable.primaryKey)) {\n\t\treturn;\n\t}\n\tif (fromTable.primaryKey) {\n\t\tops.push({\n\t\t\tkind: \"drop_primary_key\",\n\t\t\ttable: identity,\n\t\t\tprimaryKey: fromTable.primaryKey,\n\t\t});\n\t}\n\tif (toTable.primaryKey) {\n\t\tops.push({\n\t\t\tkind: \"add_primary_key\",\n\t\t\ttable: identity,\n\t\t\tprimaryKey: toTable.primaryKey,\n\t\t});\n\t}\n}\n\nfunction diffUniques(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tconst identity = tableId(toTable);\n\tconst fromMap = indexUniques(fromTable);\n\tconst toMap = indexUniques(toTable);\n\n\tfor (const [key, unique] of fromMap) {\n\t\tif (!toMap.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"drop_unique_constraint\",\n\t\t\t\ttable: identity,\n\t\t\t\tunique,\n\t\t\t});\n\t\t}\n\t}\n\tfor (const [key, unique] of toMap) {\n\t\tif (!fromMap.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"add_unique_constraint\",\n\t\t\t\ttable: identity,\n\t\t\t\tunique,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction foreignKeysEqual(a: SchemaForeignKey, b: SchemaForeignKey): boolean {\n\treturn (\n\t\tforeignKeyMatchKey(a) === foreignKeyMatchKey(b) &&\n\t\ta.onDelete === b.onDelete &&\n\t\ta.onUpdate === b.onUpdate\n\t);\n}\n\nfunction diffForeignKeys(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tconst identity = tableId(toTable);\n\tconst fromMap = indexForeignKeys(fromTable);\n\tconst toMap = indexForeignKeys(toTable);\n\n\tfor (const [key, fromFk] of fromMap) {\n\t\tconst toFk = toMap.get(key);\n\t\tif (!toFk) {\n\t\t\tops.push({\n\t\t\t\tkind: \"drop_foreign_key\",\n\t\t\t\ttable: identity,\n\t\t\t\tforeignKey: fromFk,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (!foreignKeysEqual(fromFk, toFk)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"alter_foreign_key\",\n\t\t\t\ttable: identity,\n\t\t\t\tbefore: fromFk,\n\t\t\t\tafter: toFk,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const [key, toFk] of toMap) {\n\t\tif (!fromMap.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"add_foreign_key\",\n\t\t\t\ttable: identity,\n\t\t\t\tforeignKey: toFk,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction diffIndexes(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tconst identity = tableId(toTable);\n\tconst fromMap = indexIndexes(fromTable);\n\tconst toMap = indexIndexes(toTable);\n\n\tfor (const [key, index] of fromMap) {\n\t\tif (!toMap.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"drop_index\",\n\t\t\t\ttable: identity,\n\t\t\t\tindex,\n\t\t\t});\n\t\t}\n\t}\n\tfor (const [key, index] of toMap) {\n\t\tif (!fromMap.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"add_index\",\n\t\t\t\ttable: identity,\n\t\t\t\tindex,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction rewriteColumnName(\n\tname: string,\n\trenameMap: Map<string, string>,\n): string {\n\treturn renameMap.get(name) ?? name;\n}\n\nfunction alignProjectedTableAfterColumnRenames(\n\ttable: SchemaTable,\n\trenameMap: Map<string, string>,\n\tdroppedNames: Set<string>,\n): SchemaTable {\n\tif (renameMap.size === 0 && droppedNames.size === 0) {\n\t\treturn table;\n\t}\n\treturn {\n\t\t...table,\n\t\tcolumns: table.columns\n\t\t\t.filter((column) => !droppedNames.has(column.name))\n\t\t\t.map((column) => ({\n\t\t\t\t...column,\n\t\t\t\tname: rewriteColumnName(column.name, renameMap),\n\t\t\t})),\n\t\tprimaryKey: table.primaryKey\n\t\t\t? {\n\t\t\t\t\t...table.primaryKey,\n\t\t\t\t\tcolumns: table.primaryKey.columns.map((name) =>\n\t\t\t\t\t\trewriteColumnName(name, renameMap),\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t: table.primaryKey,\n\t\tuniqueConstraints: table.uniqueConstraints.map((unique) => ({\n\t\t\t...unique,\n\t\t\tcolumns: unique.columns.map((name) => rewriteColumnName(name, renameMap)),\n\t\t})),\n\t\tforeignKeys: table.foreignKeys.map((fk) => ({\n\t\t\t...fk,\n\t\t\tcolumns: fk.columns.map((name) => rewriteColumnName(name, renameMap)),\n\t\t})),\n\t\tindexes: table.indexes.map((index) => ({\n\t\t\t...index,\n\t\t\tcolumns: index.columns.map((column) => ({\n\t\t\t\t...column,\n\t\t\t\tname: rewriteColumnName(column.name, renameMap),\n\t\t\t})),\n\t\t})),\n\t};\n}\n\nfunction tableIdentityKey(identity: SchemaTableIdentity): string {\n\treturn `${identity.database ?? \"\"}\\u0000${identity.schema}\\u0000${identity.name}`;\n}\n\nfunction relationNameKey(\n\ttable: SchemaTableIdentity,\n\tname: string,\n): string {\n\treturn `${table.database ?? \"\"}\\u0000${table.schema}\\u0000${name}`;\n}\n\nfunction droppedRelationNameKey(op: SchemaDiffOperation): string | null {\n\tlet name: string | null | undefined;\n\tswitch (op.kind) {\n\t\tcase \"drop_index\":\n\t\t\tname = op.index.name;\n\t\t\tbreak;\n\t\tcase \"drop_unique_constraint\":\n\t\t\tname = op.unique.name;\n\t\t\tbreak;\n\t\tcase \"drop_primary_key\":\n\t\t\tname = op.primaryKey.name;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n\tif (typeof name !== \"string\" || name.length === 0) {\n\t\treturn null;\n\t}\n\treturn relationNameKey(op.table, name);\n}\n\nfunction droppedRelationTableKey(op: SchemaDiffOperation): string | null {\n\tswitch (op.kind) {\n\t\tcase \"drop_index\":\n\t\tcase \"drop_unique_constraint\":\n\t\tcase \"drop_primary_key\":\n\t\t\treturn tableIdentityKey(op.table);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction relationNameFromDroppedTable(\n\ttable: SchemaTableIdentity,\n\tname: string | null | undefined,\n): string | null {\n\tif (typeof name !== \"string\" || name.length === 0) {\n\t\treturn null;\n\t}\n\treturn relationNameKey(table, name);\n}\n\nfunction relationNamesOwnedByDroppedTable(op: SchemaDiffOperation): string[] {\n\tif (op.kind !== \"drop_table\" || !op.previous) {\n\t\treturn [];\n\t}\n\tconst names: string[] = [];\n\tconst add = (name: string | null | undefined) => {\n\t\tconst key = relationNameFromDroppedTable(op.table, name);\n\t\tif (key !== null) {\n\t\t\tnames.push(key);\n\t\t}\n\t};\n\tadd(op.previous.primaryKey?.name);\n\tfor (const unique of op.previous.uniqueConstraints) {\n\t\tadd(unique.name);\n\t}\n\tfor (const index of op.previous.indexes) {\n\t\tadd(index.name);\n\t}\n\treturn names;\n}\n\nfunction unusedTableName(\n\tidentity: SchemaTableIdentity,\n\treserved: Set<string>,\n): string {\n\tconst safeFrom = identity.name.replace(/[^A-Za-z0-9_]/g, \"_\");\n\tlet name = `__athena_rename_${safeFrom}`;\n\tlet n = 2;\n\twhile (reserved.has(tableIdentityKey({ ...identity, name }))) {\n\t\tname = `__athena_rename_${safeFrom}_${n}`;\n\t\tn += 1;\n\t}\n\treserved.add(tableIdentityKey({ ...identity, name }));\n\treturn name;\n}\n\nfunction isDependencyRemovalForDroppedTable(\n\top: SchemaDiffOperation,\n\tdest: string,\n): boolean {\n\treturn (\n\t\top.kind === \"drop_foreign_key\" &&\n\t\ttableIdentityKey(op.foreignKey.target) === dest\n\t);\n}\n\nfunction extractPendingMatching(\n\tpending: SchemaDiffOperation[],\n\tpredicate: (op: SchemaDiffOperation) => boolean,\n): SchemaDiffOperation[] {\n\tconst extracted: SchemaDiffOperation[] = [];\n\tconst kept: SchemaDiffOperation[] = [];\n\tfor (const op of pending) {\n\t\tif (predicate(op)) {\n\t\t\textracted.push(op);\n\t\t} else {\n\t\t\tkept.push(op);\n\t\t}\n\t}\n\tpending.length = 0;\n\tpending.push(...kept);\n\treturn extracted;\n}\n\nfunction applyTableIdentityScheduling(\n\tops: SchemaDiffOperation[],\n): SchemaDiffOperation[] {\n\tconst occupied = new Set<string>();\n\tconst reserved = new Set<string>();\n\tfor (const op of ops) {\n\t\tif (op.kind === \"drop_table\") {\n\t\t\toccupied.add(tableIdentityKey(op.table));\n\t\t\treserved.add(tableIdentityKey(op.table));\n\t\t\tfor (const relation of relationNamesOwnedByDroppedTable(op)) {\n\t\t\t\toccupied.add(relation);\n\t\t\t\treserved.add(relation);\n\t\t\t}\n\t\t}\n\t\tif (op.kind === \"rename_table\") {\n\t\t\toccupied.add(tableIdentityKey(op.from));\n\t\t\treserved.add(tableIdentityKey(op.from));\n\t\t\treserved.add(tableIdentityKey(op.to));\n\t\t}\n\t\tif (op.kind === \"create_table\") {\n\t\t\treserved.add(tableIdentityKey(tableId(op.table)));\n\t\t}\n\t\tconst droppedRelation = droppedRelationNameKey(op);\n\t\tconst dropTableKey = droppedRelationTableKey(op);\n\t\tif (droppedRelation !== null && dropTableKey !== null) {\n\t\t\treserved.add(droppedRelation);\n\t\t\tif (dropTableKey !== droppedRelation) {\n\t\t\t\toccupied.add(droppedRelation);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst pending = [...ops];\n\tconst out: SchemaDiffOperation[] = [];\n\twhile (pending.length > 0) {\n\t\tconst op = pending[0];\n\t\tif (op === undefined) {\n\t\t\tbreak;\n\t\t}\n\t\tif (op.kind === \"rename_table\") {\n\t\t\tconst dest = tableIdentityKey(op.to);\n\t\t\tif (occupied.has(dest)) {\n\t\t\t\tconst dropIdx = pending.findIndex(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tcandidate.kind === \"drop_table\" &&\n\t\t\t\t\t\t(tableIdentityKey(candidate.table) === dest ||\n\t\t\t\t\t\t\trelationNamesOwnedByDroppedTable(candidate).includes(dest)),\n\t\t\t\t);\n\t\t\t\tif (dropIdx >= 0) {\n\t\t\t\t\tconst drop = pending.splice(dropIdx, 1)[0];\n\t\t\t\t\tif (drop?.kind === \"drop_table\") {\n\t\t\t\t\t\tconst removals = extractPendingMatching(pending, (candidate) =>\n\t\t\t\t\t\t\tisDependencyRemovalForDroppedTable(candidate, dest),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tout.push(...removals, drop);\n\t\t\t\t\t\toccupied.delete(dest);\n\t\t\t\t\t\toccupied.delete(tableIdentityKey(drop.table));\n\t\t\t\t\t\tfor (const relation of relationNamesOwnedByDroppedTable(drop)) {\n\t\t\t\t\t\t\toccupied.delete(relation);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst dropRelationIdx = pending.findIndex((candidate) => {\n\t\t\t\t\tconst key = droppedRelationNameKey(candidate);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tkey === dest && droppedRelationTableKey(candidate) !== dest\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\tif (dropRelationIdx >= 0) {\n\t\t\t\t\tconst dropRelation = pending.splice(dropRelationIdx, 1)[0];\n\t\t\t\t\tif (dropRelation !== undefined) {\n\t\t\t\t\t\tout.push(dropRelation);\n\t\t\t\t\t\toccupied.delete(dest);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst occupantIdx = pending.findIndex((candidate, index) => {\n\t\t\t\t\tif (index === 0 || candidate.kind !== \"rename_table\") {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttableIdentityKey(candidate.from) === dest &&\n\t\t\t\t\t\t!occupied.has(tableIdentityKey(candidate.to))\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\tif (occupantIdx > 0) {\n\t\t\t\t\tconst [occupant] = pending.splice(occupantIdx, 1);\n\t\t\t\t\tif (occupant) {\n\t\t\t\t\t\tpending.unshift(occupant);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst tempName = unusedTableName(op.from, reserved);\n\t\t\t\tconst tempIdentity: SchemaTableIdentity = {\n\t\t\t\t\tname: tempName,\n\t\t\t\t\tschema: op.from.schema,\n\t\t\t\t};\n\t\t\t\tout.push({\n\t\t\t\t\tkind: \"rename_table\",\n\t\t\t\t\tfrom: op.from,\n\t\t\t\t\tto: tempIdentity,\n\t\t\t\t});\n\t\t\t\toccupied.delete(tableIdentityKey(op.from));\n\t\t\t\toccupied.add(tableIdentityKey(tempIdentity));\n\t\t\t\tpending[0] = {\n\t\t\t\t\tkind: \"rename_table\",\n\t\t\t\t\tfrom: tempIdentity,\n\t\t\t\t\tto: op.to,\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpending.shift();\n\t\t\tout.push(op);\n\t\t\toccupied.delete(tableIdentityKey(op.from));\n\t\t\toccupied.add(dest);\n\t\t\tcontinue;\n\t\t}\n\t\tpending.shift();\n\t\tif (op.kind === \"drop_table\") {\n\t\t\toccupied.delete(tableIdentityKey(op.table));\n\t\t\tfor (const relation of relationNamesOwnedByDroppedTable(op)) {\n\t\t\t\toccupied.delete(relation);\n\t\t\t}\n\t\t}\n\t\tconst droppedRelation = droppedRelationNameKey(op);\n\t\tif (droppedRelation !== null) {\n\t\t\toccupied.delete(droppedRelation);\n\t\t}\n\t\tif (op.kind === \"create_table\") {\n\t\t\toccupied.add(tableIdentityKey(tableId(op.table)));\n\t\t}\n\t\tout.push(op);\n\t}\n\treturn out;\n}\n\nfunction unusedPhysicalName(base: string, reserved: Set<string>): string {\n\tlet name = base;\n\tlet n = 2;\n\twhile (reserved.has(name)) {\n\t\tname = `${base}_${n}`;\n\t\tn += 1;\n\t}\n\treserved.add(name);\n\treturn name;\n}\n\nfunction linearizeColumnRenames(\n\trenames: Array<{ from: string; to: string }>,\n\toccupied: Set<string>,\n\treservedNames: Set<string>,\n): Array<{ from: string; to: string }> {\n\tconst remaining = new Map<string, string>();\n\tfor (const rename of renames) {\n\t\tif (rename.from !== rename.to) {\n\t\t\tremaining.set(rename.from, rename.to);\n\t\t}\n\t}\n\tconst reserved = new Set(reservedNames);\n\tfor (const to of remaining.values()) {\n\t\treserved.add(to);\n\t}\n\n\tconst seen = new Set<string>();\n\tfor (const start of remaining.keys()) {\n\t\tif (seen.has(start)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst stack: string[] = [];\n\t\tconst onStack = new Set<string>();\n\t\tlet node: string | undefined = start;\n\t\twhile (node !== undefined && remaining.has(node)) {\n\t\t\tif (onStack.has(node)) {\n\t\t\t\tconst dest = remaining.get(node);\n\t\t\t\tif (dest === undefined) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst safeFrom = node.replace(/[^A-Za-z0-9_]/g, \"_\");\n\t\t\t\tconst temp = unusedPhysicalName(`__athena_rename_${safeFrom}`, reserved);\n\t\t\t\tremaining.set(node, temp);\n\t\t\t\tremaining.set(temp, dest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (seen.has(node)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tonStack.add(node);\n\t\t\tstack.push(node);\n\t\t\tnode = remaining.get(node);\n\t\t}\n\t\tfor (const item of stack) {\n\t\t\tseen.add(item);\n\t\t}\n\t}\n\n\tconst live = new Set(occupied);\n\tconst ordered: Array<{ from: string; to: string }> = [];\n\tconst pending = [...remaining.entries()].map(([from, to]) => ({ from, to }));\n\twhile (pending.length > 0) {\n\t\tconst idx = pending.findIndex((item) => !live.has(item.to));\n\t\tif (idx < 0) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"Column rename cycle could not be linearized\",\n\t\t\t);\n\t\t}\n\t\tconst item = pending.splice(idx, 1)[0];\n\t\tif (!item) {\n\t\t\tbreak;\n\t\t}\n\t\tordered.push(item);\n\t\tlive.delete(item.from);\n\t\tlive.add(item.to);\n\t}\n\treturn ordered;\n}\n\nfunction emitColumnRenamesByIrId(\n\tfromIrTable: IrSchemaTable,\n\ttoIrTable: IrSchemaTable,\n\tfromProjected: SchemaTable,\n\ttableIdentity: SchemaTableIdentity,\n\tops: SchemaDiffOperation[],\n): { droppedNames: Set<string>; renameMap: Map<string, string> } {\n\tconst toById = new Map(\n\t\ttoIrTable.columns.map((column) => [String(column.id), column]),\n\t);\n\tconst fromProjectedByName = indexColumns(fromProjected);\n\tconst planned: Array<{ from: string; to: string }> = [];\n\tconst renameMap = new Map<string, string>();\n\tconst occupied = new Set<string>();\n\tconst reserved = new Set<string>();\n\tconst droppedNames = new Set<string>();\n\tfor (const fromCol of fromIrTable.columns) {\n\t\tconst fromName = fromCol.identity.physical.name;\n\t\treserved.add(fromName);\n\t\tconst toCol = toById.get(String(fromCol.id));\n\t\tif (!toCol) {\n\t\t\tdroppedNames.add(fromName);\n\t\t\tconst column = fromProjectedByName.get(fromName);\n\t\t\tif (column) {\n\t\t\t\tops.push({\n\t\t\t\t\tkind: \"drop_column\",\n\t\t\t\t\ttable: tableIdentity,\n\t\t\t\t\tcolumn,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\toccupied.add(fromName);\n\t\tconst toName = toCol.identity.physical.name;\n\t\tif (fromName === toName) {\n\t\t\tcontinue;\n\t\t}\n\t\trenameMap.set(fromName, toName);\n\t\tplanned.push({ from: fromName, to: toName });\n\t}\n\tfor (const toCol of toIrTable.columns) {\n\t\treserved.add(toCol.identity.physical.name);\n\t}\n\tfor (const rename of linearizeColumnRenames(planned, occupied, reserved)) {\n\t\tops.push({\n\t\t\tkind: \"rename_column\",\n\t\t\ttable: tableIdentity,\n\t\t\tfrom: rename.from,\n\t\t\tto: rename.to,\n\t\t});\n\t}\n\treturn { droppedNames, renameMap };\n}\n\nfunction diffTable(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tdiffColumns(fromTable, toTable, ops);\n\tdiffPrimaryKey(fromTable, toTable, ops);\n\tdiffUniques(fromTable, toTable, ops);\n\tdiffForeignKeys(fromTable, toTable, ops);\n\tdiffIndexes(fromTable, toTable, ops);\n}\n\nfunction liftToIr(\n\tvalue: AthenaSchemaSnapshot | AthenaSchemaIr,\n\tshouldValidate: boolean,\n): AthenaSchemaIr {\n\tif (isAthenaSchemaIr(value)) {\n\t\tconst canonical = canonicalizeAthenaSchemaIr(value);\n\t\tif (shouldValidate) {\n\t\t\tvalidateAthenaSchemaIr(canonical);\n\t\t}\n\t\treturn canonical;\n\t}\n\tconst normalized = normalizeSchemaSnapshot(value);\n\tif (shouldValidate) {\n\t\tvalidateSchemaSnapshot(normalized);\n\t}\n\treturn schemaIrFromSnapshot(normalized);\n}\n\nfunction normalizeProjectedTable(\n\ttable: SchemaTable,\n\tbackend: string | null | undefined,\n): SchemaTable {\n\tconst snapshot = normalizeSchemaSnapshot({\n\t\tversion: 1,\n\t\tbackend: backend ?? null,\n\t\tschemas: [{ name: table.schema, tables: [table] }],\n\t});\n\treturn snapshot.schemas[0]?.tables[0] ?? table;\n}\n\n/**\n * Compare two schema documents.\n *\n * Direction: operations transform `from` (actual) → `to` (desired).\n * Consumes AthenaSchemaIr; v1 snapshots are lifted at this boundary.\n * Same SchemaObjectId + changed physical name is `rename_table`.\n */\nexport function diffSchemas(\n\tinput: DiffSchemasInput,\n\toptions: DiffSchemasOptions = {},\n): SchemaDiff {\n\tconst shouldValidate = options.validate !== false;\n\tconst lifted = alignSingletonDefaultDatabase(\n\t\tliftToIr(input.from, shouldValidate),\n\t\tliftToIr(input.to, shouldValidate),\n\t);\n\tconst fromIr = lifted.from;\n\tconst toIr = lifted.to;\n\n\tconst fromProjected = normalizeSchemaSnapshot(schemaSnapshotFromIr(fromIr));\n\tconst toProjected = normalizeSchemaSnapshot(schemaSnapshotFromIr(toIr));\n\tconst backend = toProjected.backend ?? fromProjected.backend;\n\n\tconst ops: SchemaDiffOperation[] = [];\n\tconst fromIrTables = collectIrTables(fromIr);\n\tconst toIrTables = collectIrTables(toIr);\n\tconst fromById = new Map(\n\t\tfromIrTables.map((table) => [String(table.id), table]),\n\t);\n\tconst toById = new Map(toIrTables.map((table) => [String(table.id), table]));\n\n\tconst fromSchemas = collectIrNamespaceIdentities(fromIr);\n\tconst toSchemas = collectIrNamespaceIdentities(toIr);\n\n\tfor (const [key, identity] of fromSchemas) {\n\t\tif (!toSchemas.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"drop_schema\",\n\t\t\t\tschema: identity.schema,\n\t\t\t\t...(identity.database ? { database: identity.database } : {}),\n\t\t\t});\n\t\t}\n\t}\n\tfor (const [key, identity] of toSchemas) {\n\t\tif (!fromSchemas.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"create_schema\",\n\t\t\t\tschema: identity.schema,\n\t\t\t\t...(identity.database ? { database: identity.database } : {}),\n\t\t\t});\n\t\t}\n\t}\n\n\tconst pairedToIds = new Set<string>();\n\tconst pairs: Array<{\n\t\tfromTable: IrSchemaTable;\n\t\ttoTable: IrSchemaTable;\n\t}> = [];\n\n\tfor (const [tableObjectId, fromTable] of fromById) {\n\t\tconst toTable = toById.get(tableObjectId);\n\t\tif (toTable) {\n\t\t\tpairs.push({ fromTable, toTable });\n\t\t\tpairedToIds.add(tableObjectId);\n\t\t}\n\t}\n\n\tconst unmatchedFrom = [...fromById.entries()].filter(\n\t\t([id]) => !toById.has(id),\n\t);\n\tconst unmatchedTo = [...toById.entries()].filter(\n\t\t([id]) => !pairedToIds.has(id),\n\t);\n\tconst toByPhysical = new Map<string, IrSchemaTable[]>();\n\tfor (const [, table] of unmatchedTo) {\n\t\tconst key = physicalIdentityKey(table.identity);\n\t\tconst list = toByPhysical.get(key) ?? [];\n\t\tlist.push(table);\n\t\ttoByPhysical.set(key, list);\n\t}\n\n\tconst physicallyPairedFrom = new Set<string>();\n\tfor (const [fromId, fromTable] of unmatchedFrom) {\n\t\tconst candidates = toByPhysical.get(\n\t\t\tphysicalIdentityKey(fromTable.identity),\n\t\t);\n\t\tconst toTable = candidates?.shift();\n\t\tif (toTable) {\n\t\t\tpairs.push({ fromTable, toTable });\n\t\t\tphysicallyPairedFrom.add(fromId);\n\t\t\tpairedToIds.add(String(toTable.id));\n\t\t}\n\t}\n\n\tfor (const [fromId, fromTable] of unmatchedFrom) {\n\t\tif (physicallyPairedFrom.has(fromId)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst projected = normalizeProjectedTable(\n\t\t\tprojectTable(fromTable, fromIr, true),\n\t\t\tbackend,\n\t\t);\n\t\tops.push({\n\t\t\tkind: \"drop_table\",\n\t\t\ttable: tableId(projected),\n\t\t\tprevious: projected,\n\t\t});\n\t}\n\n\tfor (const [tableObjectId, toTable] of toById) {\n\t\tif (pairedToIds.has(tableObjectId)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst toProjectedTable = normalizeProjectedTable(\n\t\t\tprojectTable(toTable, toIr, true),\n\t\t\tbackend,\n\t\t);\n\t\tops.push({\n\t\t\tkind: \"create_table\",\n\t\t\ttable: toProjectedTable,\n\t\t});\n\t}\n\n\tfor (const { fromTable, toTable } of pairs) {\n\t\tconst toProjectedTable = normalizeProjectedTable(\n\t\t\tprojectTable(toTable, toIr, true),\n\t\t\tbackend,\n\t\t);\n\t\tconst fromProjectedTable = normalizeProjectedTable(\n\t\t\tprojectTable(fromTable, fromIr, true),\n\t\t\tbackend,\n\t\t);\n\t\tconst fromIdentity = tableId(fromProjectedTable);\n\t\tconst toIdentity = tableId(toProjectedTable);\n\t\tconst fromDatabase = fromTable.identity.physical.database;\n\t\tconst toDatabase = toTable.identity.physical.database;\n\t\tif (fromDatabase !== toDatabase) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`Cross-database table moves are unsupported (${fromDatabase} → ${toDatabase})`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tfromIdentity.schema !== toIdentity.schema ||\n\t\t\tfromIdentity.name !== toIdentity.name\n\t\t) {\n\t\t\tops.push({\n\t\t\t\tkind: \"rename_table\",\n\t\t\t\tfrom: fromIdentity,\n\t\t\t\tto: toIdentity,\n\t\t\t});\n\t\t}\n\t\tconst { droppedNames, renameMap: columnRenames } =\n\t\t\temitColumnRenamesByIrId(\n\t\t\t\tfromTable,\n\t\t\t\ttoTable,\n\t\t\t\tfromProjectedTable,\n\t\t\t\ttoIdentity,\n\t\t\t\tops,\n\t\t\t);\n\t\tconst fromAligned = alignProjectedTableAfterColumnRenames(\n\t\t\tfromProjectedTable,\n\t\t\tcolumnRenames,\n\t\t\tdroppedNames,\n\t\t);\n\t\tdiffTable(fromAligned, toProjectedTable, ops);\n\t}\n\n\tconst operations = expandDroppedTableColumns(\n\t\tapplyTableIdentityScheduling(sortOperations(ops)),\n\t);\n\tconst summary = summarizeSchemaDiffOperations(operations);\n\treturn {\n\t\toperations,\n\t\tsummary,\n\t\tisEmpty: operations.length === 0,\n\t};\n}\n\nfunction expandDroppedTableColumns(\n\toperations: SchemaDiffOperation[],\n): SchemaDiffOperation[] {\n\tconst extra: SchemaDiffOperation[] = [];\n\tconst seen = new Set<string>();\n\tfor (const op of operations) {\n\t\tif (op.kind === \"drop_column\") {\n\t\t\tseen.add(`${tableIdentityKey(op.table)}.${op.column.name}`);\n\t\t}\n\t}\n\tfor (const op of operations) {\n\t\tif (op.kind !== \"drop_table\" || !op.previous) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const column of op.previous.columns) {\n\t\t\tconst key = `${tableIdentityKey(op.table)}.${column.name}`;\n\t\t\tif (seen.has(key)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tseen.add(key);\n\t\t\textra.push({\n\t\t\t\tcolumn,\n\t\t\t\tkind: \"drop_column\",\n\t\t\t\ttable: op.table,\n\t\t\t});\n\t\t}\n\t}\n\treturn extra.length === 0 ? operations : [...operations, ...extra];\n}\n\n/** Convenience: true when normalized snapshots are equivalent. */\nexport function isSchemaDiffEmpty(diff: SchemaDiff): boolean {\n\treturn diff.isEmpty;\n}\n\n/**\n * Build an empty Athena schema snapshot (useful for tests / baselines).\n */\nexport function emptySchemaSnapshot(\n\tbackend: string | null = null,\n): AthenaSchemaSnapshot {\n\treturn normalizeSchemaSnapshot({\n\t\tversion: 1,\n\t\tbackend,\n\t\tschemas: [],\n\t});\n}\n","import {\n\tschemaIrFromIntrospection,\n\tschemaSnapshotFromIr,\n} from \"../ir/compatibility.ts\";\nimport type { AthenaSchemaIr } from \"../ir/document.ts\";\nimport type { IntrospectionSnapshot } from \"../types.ts\";\nimport { normalizeSchemaSnapshot } from \"./normalize.ts\";\nimport type { AthenaSchemaSnapshot } from \"./types.ts\";\n\n/**\n * Athena bookkeeping schema excluded from managed-application diffs by default.\n * Verified against packages/athena-js/docs/migrations.md (`athena.schema_migrations`).\n */\nexport const ATHENA_INTERNAL_SCHEMAS = new Set([\"athena\", \"athena_internal\"]);\n\nexport interface SchemaSnapshotFromIntrospectionOptions {\n\t/**\n\t * Schema names to include. When omitted, all introspected schemas are kept\n\t * except {@link ATHENA_INTERNAL_SCHEMAS} when `excludeInternal` is true.\n\t */\n\treadonly schemas?: readonly string[];\n\t/** Drop Athena internal namespaces (default true). */\n\treadonly excludeInternal?: boolean;\n}\n\n/**\n * Public structural emit is {@link AthenaSchemaIr} via\n * {@link schemaIrFromIntrospection}. This helper is the lossy v1 projection.\n */\nexport function schemaSnapshotFromIntrospection(\n\tsnapshot: IntrospectionSnapshot,\n\toptions: SchemaSnapshotFromIntrospectionOptions = {},\n): AthenaSchemaSnapshot {\n\tconst ir: AthenaSchemaIr = schemaIrFromIntrospection(snapshot, {\n\t\tschemas: options.schemas,\n\t\texcludeInternal: options.excludeInternal,\n\t});\n\treturn normalizeSchemaSnapshot(schemaSnapshotFromIr(ir));\n}\n","import {\n\tschemaIrFromModels,\n\tschemaSnapshotFromIr,\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\t/** Backend label stored on the snapshot (default `postgresql`). */\n\treadonly backend?: string | null;\n\t/** Default schema when model metadata omits schema (default `public`). */\n\treadonly 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\tinput: ModelSqlInput,\n\toptions: SchemaSnapshotFromModelsOptions = {},\n): AthenaSchemaSnapshot {\n\tconst ir: AthenaSchemaIr = schemaIrFromModels(input, options);\n\treturn 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 type { ZodType } from \"zod\";\nimport type { ModelColumnKind } 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> {\n  readonly __value?: TValue;\n  readonly columnName?: TColumnName;\n  readonly enumValues?: readonly string[];\n  readonly hasDefault: THasDefault;\n  readonly isGenerated: TGenerated;\n  readonly jsonSchema?: ZodType<TValue>;\n  readonly kind: TKind;\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\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> {\n  defaulted: () => AthenaColumnBuilder<\n    TValue,\n    TNullable,\n    true,\n    TGenerated,\n    TColumnName,\n    TKind\n  >;\n  from: <TNextColumnName extends string>(\n    columnName: TNextColumnName\n  ) => AthenaColumnBuilder<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TNextColumnName,\n    TKind\n  >;\n  generated: () => AthenaColumnBuilder<\n    TValue,\n    TNullable,\n    THasDefault,\n    true,\n    TColumnName,\n    TKind\n  >;\n  optional: () => AthenaColumnBuilder<\n    TValue,\n    true,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind\n  >;\n  /**\n   * Exact-numeric precision. Meaningful for `decimal()` / `numeric()` columns.\n   */\n  precision: (\n    value: number\n  ) => AthenaColumnBuilder<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind\n  >;\n  /**\n   * Exact-numeric scale. Meaningful for `decimal()` / `numeric()` columns.\n   */\n  scale: (\n    value: number\n  ) => AthenaColumnBuilder<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind\n  >;\n  readonly [COLUMN_CONFIG]: ColumnRuntimeConfig<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind\n  >;\n}\n\nexport type AnyColumnBuilder = AthenaColumnBuilder<\n  unknown,\n  boolean,\n  boolean,\n  boolean,\n  string | undefined,\n  ModelColumnKind\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(`${label} must be a non-negative integer (received ${value})`);\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>(\n  config: ColumnRuntimeConfig<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind\n  >\n): AthenaColumnBuilder<\n  TValue,\n  TNullable,\n  THasDefault,\n  TGenerated,\n  TColumnName,\n  TKind\n> {\n  return {\n    [COLUMN_CONFIG]: config,\n    defaulted() {\n      return createColumnBuilder({\n        ...config,\n        hasDefault: true,\n      });\n    },\n    from<TNextColumnName extends string>(columnName: TNextColumnName) {\n      return createColumnBuilder({\n        ...config,\n        columnName,\n      });\n    },\n    generated() {\n      return createColumnBuilder({\n        ...config,\n        isGenerated: true,\n      });\n    },\n    optional() {\n      return createColumnBuilder({\n        ...config,\n        nullable: true,\n      });\n    },\n    precision(value: number) {\n      return createColumnBuilder({\n        ...config,\n        precision: assertNonNegativeInt(\"precision\", value),\n      });\n    },\n    scale(value: number) {\n      return createColumnBuilder({\n        ...config,\n        scale: assertNonNegativeInt(\"scale\", value),\n      });\n    },\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    hasDefault: false,\n    isGenerated: false,\n    kind: \"string\",\n    nullable: false,\n  });\n}\n\nexport function number(): AthenaColumnBuilder<\n  number,\n  false,\n  false,\n  false,\n  undefined,\n  \"number\"\n> {\n  return createColumnBuilder({\n    hasDefault: false,\n    isGenerated: false,\n    kind: \"number\",\n    nullable: false,\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    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  });\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    hasDefault: false,\n    isGenerated: false,\n    kind: \"boolean\",\n    nullable: false,\n  });\n}\n\nexport function json<TValue = unknown>(\n  schema?: ZodType<TValue>\n): AthenaColumnBuilder<TValue, false, false, false, undefined, \"json\"> {\n  return createColumnBuilder({\n    hasDefault: false,\n    isGenerated: false,\n    jsonSchema: schema,\n    kind: \"json\",\n    nullable: false,\n  });\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    enumValues: values,\n    hasDefault: false,\n    isGenerated: false,\n    kind: \"enumeration\",\n    nullable: false,\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\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 === \"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 \"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.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","import { defineModel } from \"./definitions.ts\";\nimport type { AthenaSchemaIr } from \"./ir/document.ts\";\nimport { schemaIrFromModels } from \"./ir/compatibility.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;\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        : 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        : 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  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  /** Canonical Schema IR v2 document derived from this table. */\n  readonly ir: AthenaSchemaIr;\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    enumValues: config.enumValues,\n    hasDefault: config.hasDefault,\n    isGenerated: config.isGenerated,\n    kind: config.kind,\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 = defineModel<\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 = defineModel<\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    kind: \"table\" as const,\n    ir,\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","/**\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 { 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 {\n\ttype AthenaPasskeyOnboardingOptions,\n\tathenaAuthConfig,\n\tisDisabledAthenaAuthConfig,\n\tisLocalAthenaAuthConfig,\n\tnormalizeAthenaAuthConfig,\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 { 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 type { AthenaRootClient } from \"./client-brands.ts\";\nimport type { R2BucketLike } from \"./cloudflare/types.ts\";\nimport { createEmailDeliveryPort } from \"./email/delivery-port.ts\";\nimport type { AthenaEmailModule } from \"./email/types.ts\";\nimport { createPostgresNotificationPreferenceStore } from \"./notifications/postgres-store.ts\";\nimport type { AthenaNotificationsModule } from \"./notifications/types.ts\";\nimport {\n\tbindPostgresRuntime,\n\tcreateAthenaPostgresRuntime,\n\tgetBoundPostgresRuntime,\n} from \"./postgres/owned-runtime.ts\";\nimport {\n\tattachAthenaClientInternals,\n\tcreateRootClientInternals,\n\tgetAthenaClientInternals,\n\trequireAthenaRootClientInternals,\n} from \"./runtime/client-internals.ts\";\nimport { assertDataLifecycleConfig } from \"./runtime/data/lifecycle/assert.ts\";\nimport { attachLocalBillingRuntime } from \"./runtime/materializers/billing.ts\";\nimport { disposeMaterializedDatabase } from \"./runtime/materializers/database.ts\";\nimport {\n\tcreateAthenaClientLifecycle,\n\trecordAuthRuntimeCreated,\n} from \"./runtime/ownership.ts\";\nimport {\n\ttype AthenaMaterializedRuntime,\n\tmaterializeRuntimePlan,\n} from \"./runtime/plan/materialize.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\tcreateStorageRuntime,\n\tgetStorageProvider,\n\tgetStorageRuntime,\n} from \"./storage/runtime/index.ts\";\nimport {\n\ttype AthenaClient,\n\ttype AthenaClientConfig,\n\ttype AthenaClientConfigWithR2,\n\ttype AthenaClientWithR2Storage,\n\tAthenaConfigurationError,\n\tcreateClientWithNormalizer,\n\tnormalizeOptional,\n\treplaceClientNotificationPreferenceStore,\n} from \"./v3-client-core.ts\";\n\nexport type {\n\tAthenaRequestClient,\n\tAthenaRequestClientBrand,\n\tAthenaRootClient,\n\tAthenaRootClientBrand,\n} from \"./client-brands.ts\";\nexport * from \"./v3-client-core.ts\";\n\ntype EmbeddedAuthRuntimeConfigSlice = {\n\thooks?: AthenaAuthHooks;\n\tpasskey?: {\n\t\tonboarding?: boolean | AthenaPasskeyOnboardingOptions;\n\t};\n};\n\nfunction attachRemoteAuthHandlers<TClient extends { auth: unknown }>(\n\tclient: TClient,\n\tconfig: AthenaClientConfig<AthenaClientModelsInput | undefined>,\n): TClient {\n\tif (\n\t\tisDisabledAthenaAuthConfig(config.auth) ||\n\t\tisLocalAthenaAuthConfig(config.auth)\n\t) {\n\t\treturn client;\n\t}\n\tconst authObject = athenaAuthConfig(config.auth);\n\tconst authUrl = normalizeOptional(authObject?.url);\n\tif (!(authUrl || authObject?.routing === \"same-origin\")) {\n\t\treturn client;\n\t}\n\tconst auth = client.auth as object;\n\tif (Object.hasOwn(auth, \"handlers\")) {\n\t\treturn client;\n\t}\n\tObject.assign(auth, {\n\t\thandlers: createAthenaAuthProxyHandlers(() => ({ client })),\n\t});\n\treturn client;\n}\n\nfunction rejectUnsupportedEmbeddedAuthFeatures(auth: unknown): void {\n\tif (!auth || typeof auth !== \"object\") {\n\t\treturn;\n\t}\n\tconst raw = auth as Record<string, unknown>;\n\tif (raw.passkeys || raw.webauthn) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_FEATURE_UNSUPPORTED\",\n\t\t\t\"Embedded Athena Auth does not implement WebAuthn/passkeys. Use dedicated Athena Auth (auth.url) or omit the option.\",\n\t\t\t\"auth\",\n\t\t);\n\t}\n\tfor (const key of [\"oauth\", \"social\", \"socialProviders\"] as const) {\n\t\tconst value = raw[key];\n\t\tif (value === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t\t`auth.${key} must be an object provider map, not ${value === true ? \"true\" : typeof value}.`,\n\t\t\t\t\"auth\",\n\t\t\t);\n\t\t}\n\t}\n\tif (raw.grants) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_FEATURE_UNSUPPORTED\",\n\t\t\t\"Embedded Athena Auth does not implement grants. Map authorization to athena.policy / athena-rights, or use dedicated Athena Auth (auth.url).\",\n\t\t\t\"auth\",\n\t\t);\n\t}\n\tconst emailBag = raw.email;\n\tif (emailBag && typeof emailBag === \"object\" && !Array.isArray(emailBag)) {\n\t\tconst nested = emailBag as Record<string, unknown>;\n\t\tif (\"provider\" in nested || \"smtp\" in nested || \"resend\" in nested) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_AUTH_FEATURE_UNSUPPORTED\",\n\t\t\t\t\"Auth does not own email transport. Configure createClient({ email: { provider } }) and inject the root email module into local Auth.\",\n\t\t\t\t\"auth\",\n\t\t\t);\n\t\t}\n\t}\n}\n\nconst AUTH_RUNTIME_CACHE = Symbol.for(\"@xylex-group/athena.authRuntimes\");\n\nfunction authRuntimeCache(): WeakMap<\n\tobject,\n\tReturnType<typeof createAthenaAuthRuntime>\n> {\n\tconst holder = globalThis as typeof globalThis & {\n\t\t[AUTH_RUNTIME_CACHE]?: WeakMap<\n\t\t\tobject,\n\t\t\tReturnType<typeof createAthenaAuthRuntime>\n\t\t>;\n\t};\n\tholder[AUTH_RUNTIME_CACHE] ??= new WeakMap();\n\treturn holder[AUTH_RUNTIME_CACHE];\n}\n\nfunction attachLocalAuthRuntime<\n\tTClient extends { auth: unknown; email: AthenaEmailModule },\n>(\n\tclient: TClient,\n\tconfig: AthenaClientConfig<AthenaClientModelsInput | undefined>,\n\tplan = resolveRuntimePlan(config, {\n\t\tenvironment: \"node\",\n\t\ttrustedNode: true,\n\t}),\n): TClient {\n\tif (isDisabledAthenaAuthConfig(config.auth)) {\n\t\treturn client;\n\t}\n\tif (!isLocalAthenaAuthConfig(config.auth)) {\n\t\tassertLocalAuthHooks(athenaAuthConfig(config.auth));\n\t\tassertLocalAuthObservability(athenaAuthConfig(config.auth));\n\t\treturn attachRemoteAuthHandlers(client, config);\n\t}\n\trejectUnsupportedEmbeddedAuthFeatures(athenaAuthConfig(config.auth));\n\tconst pgUri = normalizeOptional(config.db?.pgUri);\n\tconst postgresRuntime =\n\t\tgetBoundPostgresRuntime(config.gatewayTransport) ??\n\t\t(pgUri\n\t\t\t? createAthenaPostgresRuntime({ connectionString: pgUri })\n\t\t\t: undefined);\n\tif (!postgresRuntime) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_LOCAL_DATABASE_REQUIRED\",\n\t\t\t'auth.mode \"local\" requires db.pgUri (DATABASE_URL).',\n\t\t\t\"auth\",\n\t\t);\n\t}\n\tif (config.gatewayTransport) {\n\t\tbindPostgresRuntime(config.gatewayTransport, postgresRuntime);\n\t}\n\tconst normalized = {\n\t\t...normalizeAthenaAuthConfig(config.auth, {\n\t\t\tapp: config.app,\n\t\t\tenv: config.env,\n\t\t}),\n\t\tsocial: normalizeSocialAuthConfig(\n\t\t\t(athenaAuthConfig(config.auth) ?? {}) as Record<string, unknown>,\n\t\t),\n\t};\n\tconst delivery = createEmailDeliveryPort(client.email);\n\tconst rawAuth = athenaAuthConfig(config.auth) as\n\t\t| EmbeddedAuthRuntimeConfigSlice\n\t\t| undefined;\n\tconst hooks = rawAuth?.hooks;\n\tconst passkeyOnboarding = rawAuth?.passkey?.onboarding;\n\tconst cachedAuth = authRuntimeCache().get(postgresRuntime);\n\tif (cachedAuth) {\n\t\tif (cachedAuth.hooksRef !== hooks) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_AUTH_RUNTIME_CONFIG_CONFLICT\",\n\t\t\t\t\"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\t\t\t\t\"auth\",\n\t\t\t);\n\t\t}\n\t\tcachedAuth.setDelivery(delivery);\n\t}\n\tconst runtime =\n\t\tcachedAuth ??\n\t\tcreateAthenaAuthRuntime({\n\t\t\tautoMigrate: normalized.autoMigrate,\n\t\t\tconfig: normalized,\n\t\t\tdatabase: createAuthDatabaseFromRuntime(postgresRuntime),\n\t\t\tdelivery,\n\t\t\thooks,\n\t\t\tpasskeyOnboarding,\n\t\t\tsecret: normalized.secret,\n\t\t});\n\tif (!cachedAuth) {\n\t\tauthRuntimeCache().set(postgresRuntime, runtime);\n\t\trecordAuthRuntimeCreated();\n\t}\n\tconst server: AthenaAuthServerBindings = {\n\t\thandle: (request) => runtime.handle(request),\n\t\thandlers: runtime.handlers,\n\t\tmigrate: () => {\n\t\t\trequireAthenaRootClientInternals(client, \"auth.server.migrate\");\n\t\t\treturn runtime.migrate();\n\t\t},\n\t};\n\tObject.assign(client.auth as object, {\n\t\thandlers: runtime.handlers,\n\t\tserver,\n\t});\n\tconst capabilities = (\n\t\tclient.auth as {\n\t\t\tcapabilities?: {\n\t\t\t\tset: (\n\t\t\t\t\tnext: ReturnType<typeof createEmbeddedCapabilitySnapshot>,\n\t\t\t\t) => void;\n\t\t\t};\n\t\t}\n\t).capabilities;\n\tcapabilities?.set(\n\t\tcreateEmbeddedCapabilitySnapshot({\n\t\t\tpasskeyEnabled: normalized.passkey.enabled,\n\t\t\tpasskeyOnboarding: normalized.passkey.onboardingEnabled,\n\t\t\tsocialProviders: advertisedSocialProviderIds(normalized.social),\n\t\t}),\n\t);\n\tattachAthenaClientInternals(\n\t\tclient,\n\t\tcreateRootClientInternals({\n\t\t\tauthRuntime: runtime,\n\t\t\tconfig: config as AthenaClientConfig,\n\t\t\tgatewayTransport: config.gatewayTransport,\n\t\t\tgetAuthStores: () => runtime.getStores(),\n\t\t\tplan: toResolvedAthenaRuntime(plan),\n\t\t\tpostgresRuntime,\n\t\t}),\n\t);\n\treturn client;\n}\n\nfunction prepareNodeRuntimePlan<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>) {\n\tconst next = inferEmbeddedAuthMode(normalizeUniversalConfig(config));\n\trejectUnsupportedEmbeddedAuthFeatures(athenaAuthConfig(next.auth));\n\tassertLocalAuthHooks(athenaAuthConfig(next.auth));\n\tassertLocalAuthObservability(athenaAuthConfig(next.auth));\n\tif (\n\t\tisLocalAthenaAuthConfig(next.auth) &&\n\t\t!normalizeOptional(next.db?.pgUri)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_LOCAL_DATABASE_REQUIRED\",\n\t\t\t'auth.mode \"local\" requires db.pgUri (DATABASE_URL). The TypeScript Athena Auth runtime talks to PostgreSQL directly.',\n\t\t\t\"auth\",\n\t\t);\n\t}\n\tconst plan = resolveRuntimePlan(next, {\n\t\tenvironment: \"node\",\n\t\ttrustedNode: true,\n\t});\n\tvalidateRuntimePlan(plan);\n\treturn materializeRuntimePlan(plan);\n}\n\nfunction attachLocalNotificationsRuntime(client: {\n\tnotifications: AthenaNotificationsModule;\n}): void {\n\tconst internals = getAthenaClientInternals(client);\n\tconst postgres = internals?.postgresRuntime;\n\tif (!postgres) {\n\t\treturn;\n\t}\n\treplaceClientNotificationPreferenceStore(\n\t\tclient,\n\t\tcreatePostgresNotificationPreferenceStore({\n\t\t\tquery: async (text, values) => {\n\t\t\t\tconst pool = (await postgres.getPool()) as {\n\t\t\t\t\tquery: (\n\t\t\t\t\t\tsql: string,\n\t\t\t\t\t\tparams?: unknown[],\n\t\t\t\t\t) => Promise<{ rows: Record<string, unknown>[] }>;\n\t\t\t\t};\n\t\t\t\treturn pool.query(text, values);\n\t\t\t},\n\t\t}),\n\t);\n}\n\nfunction assembleAthenaClient<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(\n\tmaterialized: AthenaMaterializedRuntime,\n):\n\t| AthenaRootClient<AthenaClient<TModels>>\n\t| AthenaRootClient<AthenaClientWithR2Storage<TModels>> {\n\tconst resolved = materialized.config as AthenaClientConfig<TModels>;\n\t// Nuclear casts: see v3-client-core createClient (TS2589).\n\tconst factory = createClientWithNormalizer as unknown as (\n\t\tinput: unknown,\n\t\tnormalizer: (c: unknown) => unknown,\n\t) => unknown;\n\tconst client: unknown = factory(resolved, (next: unknown) => next);\n\tconst withAuth = attachLocalAuthRuntime(\n\t\tclient as AthenaClient<TModels>,\n\t\tresolved,\n\t\tmaterialized.plan,\n\t);\n\tconst existing = getAthenaClientInternals(withAuth);\n\tconst billingProviderRegistry =\n\t\texisting?.billingProviderRegistry ?? materialized.billingProviderRegistry;\n\tconst postgresRuntime =\n\t\texisting?.postgresRuntime ??\n\t\tgetBoundPostgresRuntime(resolved.gatewayTransport);\n\tconst lifecycle = existing?.lifecycle ?? createAthenaClientLifecycle();\n\tconst provider = getStorageProvider(resolved.storage);\n\tconst storageRuntime =\n\t\texisting?.storageRuntime ??\n\t\tgetStorageRuntime(resolved.storage) ??\n\t\t(provider\n\t\t\t? createStorageRuntime({\n\t\t\t\tlifecycle: resolved.lifecycle?.storage,\n\t\t\t\tprovider,\n\t\t\t})\n\t\t\t: undefined);\n\tconst close = async (): Promise<void> => {\n\t\tif (lifecycle.closed) {\n\t\t\treturn;\n\t\t}\n\t\tlifecycle.closed = true;\n\t\tawait existing?.authRuntime?.close();\n\t\tif (resolved.gatewayTransport) {\n\t\t\tawait disposeMaterializedDatabase(resolved.gatewayTransport);\n\t\t}\n\t\tawait postgresRuntime?.close();\n\t};\n\tattachAthenaClientInternals(\n\t\twithAuth,\n\t\tcreateRootClientInternals({\n\t\t\tauthRuntime: existing?.authRuntime,\n\t\t\tbillingProviderRegistry,\n\t\t\tclose,\n\t\t\tconfig: resolved as AthenaClientConfig,\n\t\t\tgatewayTransport: resolved.gatewayTransport,\n\t\t\tgetAuthStores: existing?.getAuthStores,\n\t\t\tlifecycle,\n\t\t\tplan: toResolvedAthenaRuntime(materialized.plan),\n\t\t\tpostgresRuntime,\n\t\t\truntimeOwnership:\n\t\t\t\tpostgresRuntime?.ownership === \"borrowed\" ? \"borrowed\" : \"owned\",\n\t\t\tstorageRuntime,\n\t\t}),\n\t);\n\tattachLocalBillingRuntime(withAuth, {\n\t\tappUrl: resolved.app?.url,\n\t\tapplicationId: resolveBillingWebhookApplicationId({\n\t\t\tapp: resolved.app,\n\t\t\tclient: resolved.client,\n\t\t}),\n\t\tcatalog: resolved.billing?.catalog,\n\t\tconfiguredProviders: resolved.billing?.providers,\n\t\tcustomerImport: resolved.billing?.import,\n\t\tingestion: resolved.billing?.ingestion,\n\t\tmode: resolved.billing?.mode,\n\t\tobservability: resolved.billing?.observability,\n\t\tregistry: billingProviderRegistry,\n\t\ttestMode: resolved.billing?.testMode,\n\t});\n\tattachLocalNotificationsRuntime(withAuth);\n\treturn withAuth as\n\t\t| AthenaRootClient<AthenaClient<TModels>>\n\t\t| 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 */\nexport function createClient<\n\tconst TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n\tconfig:\n\t\t| (AthenaClientConfig<TModels> & { r2: R2BucketLike })\n\t\t| AthenaClientConfigWithR2<TModels>,\n): AthenaRootClient<AthenaClientWithR2Storage<TModels>>;\nexport function createClient<\n\tconst TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaClientConfig<TModels>): AthenaRootClient<AthenaClient<TModels>>;\nexport function createClient<\n\tconst TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n\tconfig: AthenaClientConfig<TModels>,\n):\n\t| AthenaRootClient<AthenaClient<TModels>>\n\t| AthenaRootClient<AthenaClientWithR2Storage<TModels>> {\n\tassertDataLifecycleConfig(config);\n\t// Nuclear casts: assembleAthenaClient generics overflow TS depth during dts emit (TS2589).\n\tconst prepare = prepareNodeRuntimePlan as (c: unknown) => unknown;\n\tconst assemble = assembleAthenaClient as (c: unknown) => unknown;\n\treturn assemble(prepare(config)) as AthenaRootClient<AthenaClient<TModels>>;\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\tATHENA_AUTH_PATH,\n\ttype AthenaAuthUpstreamEnv,\n\tresolveAthenaAuthUpstreamUrl,\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\tfetchImplementation?: typeof fetch;\n\t/**\n\t * When true (default for handler factories), strip Domain and relax Secure/SameSite\n\t * for local http so the browser stores cookies on the app host.\n\t */\n\trewriteSetCookiesToRequestOrigin?: boolean;\n\t/** Local route prefix to strip before appending to upstream (default `/api/auth`). */\n\troutePrefix?: string;\n\t/** Absolute upstream base (preferred explicit advanced form). */\n\tupstreamUrl?: string | AthenaAuthUpstreamEnv;\n\t/** Already-resolved upstream origin/base (advanced). */\n\tupstreamBaseUrl?: string;\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\tclient: object;\n\tfetchImplementation?: typeof fetch;\n\trewriteSetCookiesToRequestOrigin?: boolean;\n\troutePrefix?: string;\n}\n\nexport type AthenaAuthProxyOptions =\n\t| AthenaAuthProxyFromClientOptions\n\t| AthenaAuthProxyTransportOptions;\n\ntype AthenaAuthProxyHandler = (request: Request) => Promise<Response>;\n\ntype HeadersWithGetSetCookie = Headers & {\n\tgetSetCookie?: () => string[];\n};\n\nconst ATHENA_AUTH_SESSION_COOKIE_NAMES = [\n\t\"athena-auth.session_token\",\n\t\"athena-auth.session-token\",\n] as const;\n\nconst STRIP_PROXY_RESPONSE_HEADERS = new Set([\n\t\"connection\",\n\t\"content-encoding\",\n\t\"content-length\",\n\t\"keep-alive\",\n\t\"proxy-authenticate\",\n\t\"proxy-authorization\",\n\t\"set-cookie\",\n\t\"te\",\n\t\"trailer\",\n\t\"transfer-encoding\",\n\t\"upgrade\",\n]);\n\nfunction stripTrailingSlashes(value: string) {\n\treturn value.replace(/\\/+$/g, \"\");\n}\n\nfunction isLocalProxyHostname(hostname: string) {\n\treturn (\n\t\thostname === \"localhost\" ||\n\t\thostname === \"127.0.0.1\" ||\n\t\thostname === \"::1\" ||\n\t\thostname.endsWith(\".localhost\") ||\n\t\thostname.endsWith(\".local\")\n\t);\n}\n\nfunction escapeRegex(value: string) {\n\treturn value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction stripRoutePrefix(pathname: string, routePrefix: string) {\n\tconst normalizedPrefix = stripTrailingSlashes(routePrefix.trim()) || \"/\";\n\tconst prefixPattern = new RegExp(`^${escapeRegex(normalizedPrefix)}\\\\/?`);\n\treturn pathname.replace(prefixPattern, \"\").replace(/^\\/+/, \"\");\n}\n\nfunction isFromClientOptions(\n\toptions: AthenaAuthProxyOptions,\n): options is AthenaAuthProxyFromClientOptions {\n\treturn (\n\t\ttypeof options === \"object\" &&\n\t\toptions !== null &&\n\t\t\"client\" in options &&\n\t\t(options as AthenaAuthProxyFromClientOptions).client != null\n\t);\n}\n\n/**\n * Resolve proxy upstream base. Enforces mutual exclusion of client vs explicit upstream.\n */\nexport function resolveAthenaAuthProxyUpstreamBaseUrl(\n\toptions: AthenaAuthProxyOptions = {},\n): string {\n\tif (isFromClientOptions(options)) {\n\t\tif (\"upstreamUrl\" in options || \"upstreamBaseUrl\" in options) {\n\t\t\tconst transport = options as AthenaAuthProxyFromClientOptions &\n\t\t\t\tAthenaAuthProxyTransportOptions;\n\t\t\tif (\n\t\t\t\ttransport.upstreamBaseUrl?.trim() ||\n\t\t\t\t(typeof transport.upstreamUrl === \"string\"\n\t\t\t\t\t? transport.upstreamUrl.trim()\n\t\t\t\t\t: transport.upstreamUrl)\n\t\t\t) {\n\t\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\t\"ATHENA_AUTH_PROXY_CONFIGURATION_INVALID\",\n\t\t\t\t\t\"createAthenaAuthProxyHandlers accepts either { client } or { upstreamUrl }, not both. \" +\n\t\t\t\t\t\t\"Configure upstream on the Athena client (auth.upstreamUrl / env) and pass only { client }.\",\n\t\t\t\t\t\"auth\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst routing = getAttachedAthenaAuthRouting(options.client);\n\t\tif (routing?.proxyUpstreamBaseUrl) {\n\t\t\treturn stripTrailingSlashes(routing.proxyUpstreamBaseUrl);\n\t\t}\n\t\t// Prefer fail-closed: client is the authority. Do not silently proxy to the\n\t\t// hosted default when same-origin was chosen without an upstream.\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_UPSTREAM_REQUIRED\",\n\t\t\t\"createAthenaAuthProxyHandlers({ client }) needs a proxy upstream on the client. \" +\n\t\t\t\t'Configure auth: { routing: \"same-origin\", upstreamUrl: \"https://auth.example.com\" } ' +\n\t\t\t\t\"or set ATHENA_AUTH_UPSTREAM_URL (or aliases) before createClient.\",\n\t\t\t\"auth\",\n\t\t);\n\t}\n\n\tconst transport = options;\n\tif (transport.upstreamBaseUrl?.trim()) {\n\t\treturn stripTrailingSlashes(transport.upstreamBaseUrl.trim());\n\t}\n\tif (\n\t\ttransport.upstreamUrl !== undefined &&\n\t\ttransport.upstreamUrl !== null &&\n\t\t!(\n\t\t\ttypeof transport.upstreamUrl === \"string\" && !transport.upstreamUrl.trim()\n\t\t)\n\t) {\n\t\treturn stripTrailingSlashes(\n\t\t\tresolveAthenaAuthUpstreamUrl(transport.upstreamUrl),\n\t\t);\n\t}\n\t// Empty advanced options: env + hosted default (scaffold DX).\n\treturn stripTrailingSlashes(resolveAthenaAuthUpstreamUrl());\n}\n\n/** Decode a single cookie value; returns the raw string if decoding fails. */\nexport function decodeCookieValue(value: string) {\n\ttry {\n\t\treturn decodeURIComponent(value);\n\t} catch {\n\t\treturn value;\n\t}\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\tcookieHeader: string | null | undefined,\n\tname: string,\n): string | undefined {\n\tif (!cookieHeader) {\n\t\treturn undefined;\n\t}\n\n\tfor (const cookie of cookieHeader.split(\";\")) {\n\t\tconst separatorIndex = cookie.indexOf(\"=\");\n\n\t\tif (separatorIndex === -1) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst cookieName = cookie.slice(0, separatorIndex).trim();\n\t\tif (cookieName !== name) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn decodeCookieValue(cookie.slice(separatorIndex + 1).trim());\n\t}\n\n\treturn undefined;\n}\n\n/** Convenience: read a cookie from a `Request`'s `cookie` header. */\nexport function readCookieValueFromRequest(request: Request, name: string) {\n\treturn readCookieValue(request.headers.get(\"cookie\"), name);\n}\n\nfunction readAthenaAuthSessionTokenCookie(\n\tcookieHeader: string | null | undefined,\n): string | undefined {\n\tfor (const cookieName of ATHENA_AUTH_SESSION_COOKIE_NAMES) {\n\t\tconst value = readCookieValue(cookieHeader, cookieName);\n\t\tconst trimmedValue = value?.trim();\n\n\t\tif (trimmedValue) {\n\t\t\treturn trimmedValue;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction applySessionCookieAuthorizationHeader(headers: Headers) {\n\tif (headers.has(\"authorization\")) {\n\t\treturn;\n\t}\n\n\tconst sessionToken = readAthenaAuthSessionTokenCookie(headers.get(\"cookie\"));\n\n\tif (sessionToken) {\n\t\theaders.set(\"authorization\", `Bearer ${sessionToken}`);\n\t}\n}\n\nfunction rewriteSetCookieForRequestOrigin(cookie: string, requestUrl: URL) {\n\tconst parts = cookie\n\t\t.split(\";\")\n\t\t.map((part) => part.trim())\n\t\t.filter(Boolean);\n\n\tif (parts.length === 0) {\n\t\treturn cookie;\n\t}\n\n\tconst rewrittenParts = [parts[0]];\n\tconst isInsecureLocalRequest =\n\t\trequestUrl.protocol === \"http:\" &&\n\t\tisLocalProxyHostname(requestUrl.hostname);\n\n\tfor (const part of parts.slice(1)) {\n\t\tconst separatorIndex = part.indexOf(\"=\");\n\t\tconst attributeName =\n\t\t\tseparatorIndex === -1 ? part : part.slice(0, separatorIndex);\n\t\tconst attributeValue =\n\t\t\tseparatorIndex === -1 ? \"\" : part.slice(separatorIndex + 1);\n\t\tconst normalizedAttributeName = attributeName.trim().toLowerCase();\n\n\t\tif (normalizedAttributeName === \"domain\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isInsecureLocalRequest && normalizedAttributeName === \"secure\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (\n\t\t\tisInsecureLocalRequest &&\n\t\t\tnormalizedAttributeName === \"samesite\" &&\n\t\t\tattributeValue.trim().toLowerCase() === \"none\"\n\t\t) {\n\t\t\trewrittenParts.push(\"SameSite=Lax\");\n\t\t\tcontinue;\n\t\t}\n\n\t\trewrittenParts.push(part);\n\t}\n\n\treturn rewrittenParts.join(\"; \");\n}\n\nfunction buildProxyResponseHeaders(\n\tsource: Headers,\n\trequestUrl: URL,\n\trewriteSetCookiesToRequestOrigin: boolean,\n) {\n\tconst headers = new Headers();\n\n\t// Avoid Headers.entries() — not present on all DOM lib typings used by fixture tsc.\n\tsource.forEach((value, key) => {\n\t\tif (STRIP_PROXY_RESPONSE_HEADERS.has(key.toLowerCase())) {\n\t\t\treturn;\n\t\t}\n\t\theaders.set(key, value);\n\t});\n\n\tconst getSetCookie = (source as HeadersWithGetSetCookie).getSetCookie;\n\tconst setCookies =\n\t\ttypeof getSetCookie === \"function\"\n\t\t\t? getSetCookie.call(source as HeadersWithGetSetCookie)\n\t\t\t: [];\n\n\tif (setCookies.length > 0) {\n\t\tfor (const cookie of setCookies) {\n\t\t\theaders.append(\n\t\t\t\t\"set-cookie\",\n\t\t\t\trewriteSetCookiesToRequestOrigin\n\t\t\t\t\t? rewriteSetCookieForRequestOrigin(cookie, requestUrl)\n\t\t\t\t\t: cookie,\n\t\t\t);\n\t\t}\n\t} else {\n\t\tconst setCookie = source.get(\"set-cookie\");\n\t\tif (setCookie) {\n\t\t\theaders.append(\n\t\t\t\t\"set-cookie\",\n\t\t\t\trewriteSetCookiesToRequestOrigin\n\t\t\t\t\t? rewriteSetCookieForRequestOrigin(setCookie, requestUrl)\n\t\t\t\t\t: setCookie,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn headers;\n}\n\nfunction resolveRewriteFlag(options: AthenaAuthProxyOptions): boolean {\n\tif (isFromClientOptions(options)) {\n\t\treturn options.rewriteSetCookiesToRequestOrigin ?? true;\n\t}\n\treturn options.rewriteSetCookiesToRequestOrigin ?? true;\n}\n\nfunction resolveRoutePrefix(options: AthenaAuthProxyOptions): string {\n\tif (isFromClientOptions(options)) {\n\t\treturn options.routePrefix ?? ATHENA_AUTH_PATH;\n\t}\n\treturn options.routePrefix ?? ATHENA_AUTH_PATH;\n}\n\nfunction resolveFetch(options: AthenaAuthProxyOptions): typeof fetch {\n\tif (isFromClientOptions(options)) {\n\t\treturn options.fetchImplementation ?? fetch;\n\t}\n\treturn 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\trequest: Request,\n\toptions: AthenaAuthProxyOptions = {},\n) {\n\tconst url = new URL(request.url);\n\tconst upstreamBaseUrl = resolveAthenaAuthProxyUpstreamBaseUrl(options);\n\tconst routePrefix = resolveRoutePrefix(options);\n\tconst rewrite = resolveRewriteFlag(options);\n\tconst pathname = stripRoutePrefix(url.pathname, routePrefix);\n\tconst targetBase = `${stripTrailingSlashes(upstreamBaseUrl)}/`;\n\tconst targetPathWithQuery = pathname\n\t\t? `${pathname}${url.search}`\n\t\t: url.search;\n\tconst target = new URL(targetPathWithQuery || \"\", targetBase);\n\tconst headers = new Headers(request.headers);\n\tconst fetchImplementation = resolveFetch(options);\n\theaders.delete(\"host\");\n\t// Prevent compressed upstream bodies from being mis-forwarded as decoded JSON\n\t// (Formations / PR #337 class regression). Always request identity encoding.\n\theaders.set(\"accept-encoding\", \"identity\");\n\tapplySessionCookieAuthorizationHeader(headers);\n\n\tconst canHaveBody = request.method !== \"GET\" && request.method !== \"HEAD\";\n\tconst body = canHaveBody ? await request.text() : undefined;\n\n\ttry {\n\t\tconst upstreamResponse = await fetchImplementation(target, {\n\t\t\tbody,\n\t\t\theaders,\n\t\t\tmethod: request.method,\n\t\t});\n\n\t\treturn new Response(upstreamResponse.body, {\n\t\t\theaders: buildProxyResponseHeaders(\n\t\t\t\tupstreamResponse.headers,\n\t\t\t\turl,\n\t\t\t\trewrite,\n\t\t\t),\n\t\t\tstatus: upstreamResponse.status,\n\t\t\tstatusText: upstreamResponse.statusText,\n\t\t});\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error ? error.message : \"Unknown upstream proxy error\";\n\t\treturn new Response(\n\t\t\tJSON.stringify({\n\t\t\t\terror: \"Athena auth proxy request failed\",\n\t\t\t\tmessage,\n\t\t\t\ttarget: target.toString(),\n\t\t\t\tupstream: upstreamBaseUrl,\n\t\t\t}),\n\t\t\t{\n\t\t\t\theaders: {\n\t\t\t\t\t\"content-type\": \"application/json\",\n\t\t\t\t},\n\t\t\t\tstatus: 502,\n\t\t\t},\n\t\t);\n\t}\n}\n\ntype AthenaAuthProxyHandlersResolver = (\n\trequest: 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\t| AthenaAuthProxyOptions\n\t| 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\toptions: AthenaAuthProxyHandlersOptions = {},\n) {\n\t// Eager validation for static preferred/advanced forms (not function resolvers).\n\tif (typeof options !== \"function\") {\n\t\tif (isFromClientOptions(options)) {\n\t\t\trequireAthenaRootClientInternals(\n\t\t\t\toptions.client,\n\t\t\t\t\"createAthenaAuthProxyHandlers\",\n\t\t\t);\n\t\t}\n\t\tresolveAthenaAuthProxyUpstreamBaseUrl(options);\n\t}\n\n\tconst handle: AthenaAuthProxyHandler = async (request) => {\n\t\tconst resolved =\n\t\t\ttypeof options === \"function\" ? await options(request) : options;\n\t\tif (isFromClientOptions(resolved)) {\n\t\t\trequireAthenaRootClientInternals(\n\t\t\t\tresolved.client,\n\t\t\t\t\"createAthenaAuthProxyHandlers\",\n\t\t\t);\n\t\t}\n\t\treturn proxyAthenaAuthRequest(request, resolved);\n\t};\n\n\treturn {\n\t\tDELETE: handle,\n\t\tGET: handle,\n\t\tHEAD: handle,\n\t\tPATCH: handle,\n\t\tPOST: handle,\n\t\tPUT: handle,\n\t};\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\tclient: object,\n\textras?: Omit<\n\t\tAthenaAuthProxyFromClientOptions,\n\t\t\"client\" | \"upstreamUrl\" | \"upstreamBaseUrl\"\n\t>,\n) {\n\trequireAthenaRootClientInternals(client, \"createAthenaAuthHandlers\");\n\tconst localHandlers = (\n\t\tclient as {\n\t\t\tauth?: {\n\t\t\t\tserver?: {\n\t\t\t\t\thandlers?: Record<string, (request: Request) => Promise<Response>>;\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\t).auth?.server?.handlers;\n\tif (localHandlers?.GET && localHandlers.POST) {\n\t\treturn localHandlers;\n\t}\n\n\tif (extras && (\"upstreamUrl\" in extras || \"upstreamBaseUrl\" in extras)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_PROXY_CONFIGURATION_INVALID\",\n\t\t\t\"createAthenaAuthHandlers(client) derives upstream solely from the client. \" +\n\t\t\t\t\"Do not pass upstreamUrl. Use createAthenaAuthProxyHandlers for advanced transport.\",\n\t\t\t\"auth\",\n\t\t);\n\t}\n\n\treturn createAthenaAuthProxyHandlers({\n\t\t...(extras ?? {}),\n\t\tclient,\n\t});\n}\n","import { ATHENA_AUTH_DEFAULT_BASE_PATH } from \"../contract/index.ts\";\nimport {\n\tcreateMemoryAuthTraceRecorder,\n\tcreateNoopTrace,\n\tcreatePostgresAuthTraceRecorder,\n\trunWithAuthTrace,\n} from \"../observability/traces.ts\";\nimport {\n\tAthenaAuthRuntimeError,\n\tcreateTraceId,\n\terrorResponse,\n} from \"./errors.ts\";\nimport { type AthenaAuthStores, MemoryAuthStores } from \"./memory-stores.ts\";\nimport {\n\tattachAuthTimingHeaders,\n\tcurrentAuthRequestTiming,\n\trunWithAuthRequestTiming,\n} from \"./request-timing.ts\";\nimport type { AuthRuntimeDependencies } from \"./runtime-dependencies.ts\";\nimport { normalizePath } from \"./runtime-helpers.ts\";\nimport { enforceOrigin } from \"./security.ts\";\n\nexport interface AuthRequestMiddlewareOptions {\n\tdeps: AuthRuntimeDependencies;\n\thandleRoute: (\n\t\trequest: Request,\n\t\tpath: string,\n\t\tcurrentStores: AthenaAuthStores,\n\t\theaders: Headers,\n\t\ttraceId: string,\n\t) => Promise<Response>;\n}\n\nexport function createAuthRequestMiddleware(\n\toptions: AuthRequestMiddlewareOptions,\n): (request: Request) => Promise<Response> {\n\tconst { deps, handleRoute } = options;\n\tconst livenessOkStores = new MemoryAuthStores();\n\treturn async (request: Request): Promise<Response> => {\n\t\tconst { config, observability, ensureReady } = deps;\n\t\tconst database = deps.getDatabase();\n\n\t\tconst started = performance.now();\n\t\treturn runWithAuthRequestTiming(async () => {\n\t\t\tconst parseStarted = performance.now();\n\t\t\tconst traceId =\n\t\t\t\trequest.headers.get(\"x-athena-trace-id\")?.trim() ||\n\t\t\t\trequest.headers.get(\"x-request-id\")?.trim() ||\n\t\t\t\tcreateTraceId();\n\t\t\tcurrentAuthRequestTiming()?.setTraceId(traceId);\n\t\t\tconst headers = new Headers();\n\t\t\theaders.set(\"x-athena-trace-id\", traceId);\n\t\t\theaders.set(\"x-request-id\", traceId);\n\t\t\tlet path = \"/\";\n\t\t\ttry {\n\t\t\t\tconst url = new URL(request.url);\n\t\t\t\tpath = normalizePath(\n\t\t\t\t\turl.pathname,\n\t\t\t\t\tconfig.basePath || ATHENA_AUTH_DEFAULT_BASE_PATH,\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\tpath = \"/\";\n\t\t\t}\n\t\t\tconst method = request.method.toUpperCase();\n\t\t\tconst isLivenessOk =\n\t\t\t\tpath === \"/ok\" && (method === \"GET\" || method === \"HEAD\");\n\t\t\tconst postgresTraces =\n\t\t\t\tobservability.traces.enabled && !isLivenessOk ? database : undefined;\n\t\t\tconst traceRecorder = observability.traces.enabled\n\t\t\t\t? postgresTraces\n\t\t\t\t\t? createPostgresAuthTraceRecorder(\n\t\t\t\t\t\tpostgresTraces,\n\t\t\t\t\t\tobservability.traces.sampleRate,\n\t\t\t\t\t)\n\t\t\t\t\t: createMemoryAuthTraceRecorder(\n\t\t\t\t\t\t{ records: [] },\n\t\t\t\t\t\tobservability.traces.sampleRate,\n\t\t\t\t\t)\n\t\t\t\t: { start: () => createNoopTrace() };\n\t\t\tconst trace = traceRecorder.start({\n\t\t\t\tmethod,\n\t\t\t\tpath,\n\t\t\t\tstartedAt: new Date(),\n\t\t\t\ttraceId,\n\t\t\t});\n\t\t\treturn runWithAuthTrace(trace, async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst isStateProtectedSocialCallback =\n\t\t\t\t\t\tmethod === \"POST\" && /^\\/callback\\/[^/]+$/.test(path);\n\t\t\t\t\tif (!isStateProtectedSocialCallback) {\n\t\t\t\t\t\tenforceOrigin(request, config.security.trustedOrigins);\n\t\t\t\t\t}\n\t\t\t\t\tcurrentAuthRequestTiming()?.addSpan(\n\t\t\t\t\t\t\"parse\",\n\t\t\t\t\t\tperformance.now() - parseStarted,\n\t\t\t\t\t);\n\t\t\t\t\tconst currentStores = isLivenessOk\n\t\t\t\t\t\t? livenessOkStores\n\t\t\t\t\t\t: await ensureReady();\n\t\t\t\t\tconst response = await handleRoute(\n\t\t\t\t\t\trequest,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tcurrentStores,\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\ttraceId,\n\t\t\t\t\t);\n\t\t\t\t\tconst totalMs = performance.now() - started;\n\t\t\t\t\tawait trace.success(response.status, totalMs);\n\t\t\t\t\treturn attachAuthTimingHeaders(response, totalMs);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst status =\n\t\t\t\t\t\terror instanceof AthenaAuthRuntimeError ? error.status : 500;\n\t\t\t\t\tconst totalMs = performance.now() - started;\n\t\t\t\t\tawait trace.failure(error, status, totalMs);\n\t\t\t\t\treturn attachAuthTimingHeaders(\n\t\t\t\t\t\terrorResponse(error, traceId),\n\t\t\t\t\t\ttotalMs,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n}\n\nexport function createRequestMiddleware(\n\toptions: AuthRequestMiddlewareOptions,\n): (request: Request) => Promise<Response> {\n\treturn createAuthRequestMiddleware(options);\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { AthenaAuthImplementedDomainEvent } from \"../hooks/events.ts\";\nimport type { AthenaAuthDatabase } from \"../local/database.ts\";\nimport type { AthenaAuthActor } from \"../domain/context.ts\";\nimport { currentAuthRequestTiming } from \"../local/request-timing.ts\";\nimport type {\n\tAthenaAuthTracePhase,\n\tAthenaAuthTraceRecord,\n\tAthenaAuthTraceStart,\n} from \"./types.ts\";\n\nexport interface AthenaAuthActiveTrace {\n\tfailure(error: unknown, statusCode: number, totalMs?: number): Promise<void>;\n\tphase(name: AthenaAuthTracePhase): { finish(): void };\n\tsetActor(actor: AthenaAuthActor): void;\n\tsetEvent(event: AthenaAuthImplementedDomainEvent, eventId: string): void;\n\tsuccess(statusCode: number, totalMs?: number): Promise<void>;\n}\n\nexport interface AthenaAuthTraceRecorder {\n\tstart(input: AthenaAuthTraceStart): AthenaAuthActiveTrace;\n}\n\nconst activeTraceStorage = new AsyncLocalStorage<AthenaAuthActiveTrace>();\n\nexport function currentAuthTrace(): AthenaAuthActiveTrace | undefined {\n\treturn activeTraceStorage.getStore();\n}\n\nexport function runWithAuthTrace<T>(\n\ttrace: AthenaAuthActiveTrace,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\treturn activeTraceStorage.run(trace, fn);\n}\n\nexport interface MemoryAuthTraceSink {\n\trecords: AthenaAuthTraceRecord[];\n}\n\nfunction sampleAllows(sampleRate: number): boolean {\n\tif (sampleRate >= 1) {\n\t\treturn true;\n\t}\n\tif (sampleRate <= 0) {\n\t\treturn false;\n\t}\n\treturn Math.random() < sampleRate;\n}\n\nfunction errorCodeOf(error: unknown): string | undefined {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst code = (error as { code?: unknown }).code;\n\treturn typeof code === \"string\" && code.trim() ? code : undefined;\n}\n\nfunction createActiveTrace(\n\tinput: AthenaAuthTraceStart,\n\tpersist: (record: AthenaAuthTraceRecord) => Promise<void>,\n): AthenaAuthActiveTrace {\n\tconst startedAt = input.startedAt ?? new Date();\n\tconst startedMs = performance.now();\n\tconst timings: Partial<Record<AthenaAuthTracePhase, number>> = {};\n\tlet actor: AthenaAuthActor | undefined;\n\tlet eventId: string | undefined;\n\tlet operation = input.operation;\n\tlet finished = false;\n\n\tconst persistSafe = async (record: AthenaAuthTraceRecord) => {\n\t\tif (finished) {\n\t\t\treturn;\n\t\t}\n\t\tfinished = true;\n\t\ttry {\n\t\t\tawait persist(record);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[athena-auth] trace persistence failed\", {\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\ttraceId: record.traceId,\n\t\t\t});\n\t\t}\n\t};\n\n\tconst complete = async (\n\t\toutcome: \"failure\" | \"success\",\n\t\tstatusCode: number,\n\t\terror?: unknown,\n\t\ttotalMs?: number,\n\t) => {\n\t\tconst completedAt = new Date();\n\t\tconst requestTiming = currentAuthRequestTiming()?.copy();\n\t\tawait persistSafe({\n\t\t\tactorKind: actor?.kind,\n\t\t\tactorUserId: actor?.userId,\n\t\t\tafterHooksMs: timings.after_hooks,\n\t\t\tauthorizeMs: timings.authorize ?? requestTiming?.authzMs,\n\t\t\tbeforeHooksMs: timings.before_hooks,\n\t\t\tcompletedAt,\n\t\t\terrorCode: error ? errorCodeOf(error) : undefined,\n\t\t\terrorPhase: error ? \"request\" : undefined,\n\t\t\teventId,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tmetadata: requestTiming ? { requestTiming } : {},\n\t\t\tmethod: input.method,\n\t\t\toperation,\n\t\t\torganizationId: actor?.organizationId,\n\t\t\toutcome,\n\t\t\tpath: input.path,\n\t\t\trequestTiming,\n\t\t\tstartedAt,\n\t\t\tstatusCode,\n\t\t\ttotalMs: totalMs ?? performance.now() - startedMs,\n\t\t\ttraceId: input.traceId,\n\t\t\ttransactionMs: timings.transaction,\n\t\t\tvalidateMs: timings.validate,\n\t\t});\n\t};\n\n\treturn {\n\t\tasync failure(error, statusCode, totalMs) {\n\t\t\tawait complete(\"failure\", statusCode, error, totalMs);\n\t\t},\n\t\tphase(name) {\n\t\t\tconst started = performance.now();\n\t\t\treturn {\n\t\t\t\tfinish() {\n\t\t\t\t\ttimings[name] = (timings[name] ?? 0) + (performance.now() - started);\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tsetActor(next) {\n\t\t\tactor = next;\n\t\t},\n\t\tsetEvent(event, nextEventId) {\n\t\t\toperation = event;\n\t\t\teventId = nextEventId;\n\t\t},\n\t\tasync success(statusCode, totalMs) {\n\t\t\tawait complete(\"success\", statusCode, undefined, totalMs);\n\t\t},\n\t};\n}\n\nexport function createMemoryAuthTraceRecorder(\n\tsink: MemoryAuthTraceSink,\n\tsampleRate = 1,\n): AthenaAuthTraceRecorder {\n\treturn {\n\t\tstart(input) {\n\t\t\tif (!sampleAllows(sampleRate)) {\n\t\t\t\treturn createNoopTrace();\n\t\t\t}\n\t\t\treturn createActiveTrace(input, async (record) => {\n\t\t\t\tsink.records.push(record);\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createPostgresAuthTraceRecorder(\n\tdatabase: AthenaAuthDatabase,\n\tsampleRate = 1,\n): AthenaAuthTraceRecorder {\n\treturn {\n\t\tstart(input) {\n\t\t\tif (!sampleAllows(sampleRate)) {\n\t\t\t\treturn createNoopTrace();\n\t\t\t}\n\t\t\treturn createActiveTrace(input, (record) =>\n\t\t\t\tinsertTraceAuth(database, record),\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport function createNoopTrace(): AthenaAuthActiveTrace {\n\treturn {\n\t\tasync failure() {},\n\t\tphase() {\n\t\t\treturn { finish() {} };\n\t\t},\n\t\tsetActor() {},\n\t\tsetEvent() {},\n\t\tasync success() {},\n\t};\n}\n\nexport async function insertTraceAuth(\n\tdb: AthenaAuthDatabase,\n\trecord: AthenaAuthTraceRecord,\n): Promise<void> {\n\tawait db.query(\n\t\t`\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\t\t[\n\t\t\trecord.id,\n\t\t\trecord.traceId,\n\t\t\trecord.eventId ?? null,\n\t\t\trecord.operation ?? null,\n\t\t\trecord.method,\n\t\t\trecord.path,\n\t\t\trecord.actorKind ?? null,\n\t\t\trecord.actorUserId ?? null,\n\t\t\trecord.organizationId ?? null,\n\t\t\trecord.outcome,\n\t\t\trecord.statusCode ?? null,\n\t\t\trecord.authorizeMs ?? null,\n\t\t\trecord.validateMs ?? null,\n\t\t\trecord.beforeHooksMs ?? null,\n\t\t\trecord.transactionMs ?? null,\n\t\t\trecord.afterHooksMs ?? null,\n\t\t\trecord.totalMs,\n\t\t\trecord.errorCode ?? null,\n\t\t\trecord.errorPhase ?? null,\n\t\t\trecord.metadata,\n\t\t\trecord.startedAt,\n\t\t\trecord.completedAt,\n\t\t],\n\t);\n}\n","import { AthenaAuthRuntimeError } from \"../../auth/local/errors.ts\";\nimport type { AuthMemberRow } from \"../../auth/local/models.ts\";\nimport {\n\tFOUNDING_OWNER_REMOVE_FORBIDDEN,\n\tFOUNDING_OWNER_ROLE_LOCKED,\n} from \"../../auth/local/organization-invariants.ts\";\nimport { type AthenaRightKey, parseAthenaRightKey } from \"../../rights/key.ts\";\nimport { capabilitiesFromRights } from \"./capabilities.ts\";\nimport {\n\tAUTHORIZATION_CATALOG_VERSION,\n\tlistAthenaAuthorizationRights,\n} from \"./catalog.ts\";\nimport { assertCloneRoleTenantBoundary } from \"./clone-source.ts\";\nimport { toRoleDescriptor, toRoleDetail } from \"./role-descriptor.ts\";\nimport {\n\tassertExpectedVersion,\n\tassertProtectedRoleImmutable,\n\tassertRightsReplaceAllowed,\n\tthrowReassignmentInvalid,\n\tthrowRoleHasAssignments,\n\tthrowRoleNotFound,\n} from \"./role-invariants.ts\";\nimport { projectAssignableRoles } from \"./snapshot-catalog.ts\";\nimport type { AthenaAuthorizationStore } from \"./store.ts\";\nimport {\n\tBUILTIN_AUTHORIZATION_ROLES,\n\tbuiltinRoleRecord,\n\tmapLegacyMemberRole,\n\tmapLegacyUserRole,\n\tORGANIZATION_OWNER_ROLE,\n\tresolveMemberAssignmentRole,\n} from \"./templates.ts\";\nimport type {\n\tAssignedRoleSummary,\n\tAthenaAuthorizationRoleDetail,\n\tAthenaAuthorizationRoleRecord,\n\tAuthorizationSnapshot,\n\tMemberAuthorizationActions,\n\tRoleDescriptor,\n} from \"./types.ts\";\n\nfunction uniqueRights(keys: readonly string[]): AthenaRightKey[] {\n\treturn [...new Set(keys)].map((key) => parseAthenaRightKey(key));\n}\n\nexport class MemoryAuthorizationStore implements AthenaAuthorizationStore {\n\tprivate readonly audit: Record<string, unknown>[] = [];\n\tprivate readonly memberRoles = new Map<string, string>();\n\tprivate readonly organizationRevisions = new Map<string, number>();\n\tprivate readonly platformRevision = { value: 1 };\n\tprivate readonly roleRights = new Map<string, Set<string>>();\n\tprivate readonly roles = new Map<string, AthenaAuthorizationRoleRecord>();\n\tprivate readonly userRoles = new Map<string, string>();\n\tprivate materialized = false;\n\n\tasync materialize(): Promise<void> {\n\t\tfor (const template of BUILTIN_AUTHORIZATION_ROLES) {\n\t\t\tthis.roles.set(template.id, builtinRoleRecord(template));\n\t\t\tthis.roleRights.set(template.id, new Set(template.rights));\n\t\t}\n\t\tthis.materialized = true;\n\t\tvoid AUTHORIZATION_CATALOG_VERSION;\n\t\tvoid listAthenaAuthorizationRights();\n\t}\n\n\tasync hasUserAssignment(userId: string): Promise<boolean> {\n\t\tawait this.ensure();\n\t\treturn this.userRoles.has(userId);\n\t}\n\n\tasync assignUserRole(\n\t\tuserId: string,\n\t\troleKey: string,\n\t\tassignedBy?: string,\n\t): Promise<void> {\n\t\tawait this.ensure();\n\t\tconst role = this.requireRole(roleKey);\n\t\tif (role.scopeKind !== \"platform\") {\n\t\t\tthrow new Error(`Role ${roleKey} is not a platform role`);\n\t\t}\n\t\tthis.userRoles.set(userId, role.id);\n\t\tthis.platformRevision.value += 1;\n\t\tthis.audit.push({\n\t\t\taction: \"user.role.assign\",\n\t\t\tactor_user_id: assignedBy ?? null,\n\t\t\tafter_state: { roleKey },\n\t\t\ttarget_id: userId,\n\t\t\ttarget_kind: \"user\",\n\t\t});\n\t}\n\n\tasync assignMemberRole(\n\t\tmemberId: string,\n\t\troleKey: string,\n\t\tassignedBy?: string,\n\t\torganizationId?: string | null,\n\t): Promise<void> {\n\t\tawait this.ensure();\n\t\tconst role = this.resolveOrganizationRole(roleKey, organizationId);\n\t\tthis.memberRoles.set(memberId, role.id);\n\t\tif (organizationId) {\n\t\t\tthis.bumpOrganizationRevision(organizationId);\n\t\t}\n\t\tthis.audit.push({\n\t\t\taction: \"member.role.assign\",\n\t\t\tactor_user_id: assignedBy ?? null,\n\t\t\tafter_state: { roleKey: role.key },\n\t\t\torganization_id: organizationId ?? null,\n\t\t\ttarget_id: memberId,\n\t\t\ttarget_kind: \"member\",\n\t\t});\n\t}\n\n\tasync lookupAssignableOrganizationRole(\n\t\torganizationId: string,\n\t\troleRef: string,\n\t): Promise<AthenaAuthorizationRoleRecord | undefined> {\n\t\tawait this.ensure();\n\t\ttry {\n\t\t\treturn this.resolveOrganizationRole(roleRef, organizationId);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync cloneRole(input: {\n\t\tactorUserId: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t\tsourceRoleId: string;\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tawait this.ensure();\n\t\tconst source = this.roles.get(input.sourceRoleId);\n\t\tif (!source) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Source role not found\");\n\t\t}\n\t\tconst targetOrganizationId = input.organizationId ?? source.organizationId;\n\t\tassertCloneRoleTenantBoundary({\n\t\t\tsourceOrganizationId: source.organizationId,\n\t\t\tsourceScopeKind: source.scopeKind,\n\t\t\ttargetOrganizationId,\n\t\t});\n\t\tconst id = crypto.randomUUID();\n\t\tconst record: AthenaAuthorizationRoleRecord = {\n\t\t\tassignable: true,\n\t\t\tid,\n\t\t\tkey: `custom_${id.slice(0, 8)}`,\n\t\t\tname: input.name.trim() || `${source.name} copy`,\n\t\t\torganizationId: targetOrganizationId,\n\t\t\tprotected: false,\n\t\t\tscopeKind: source.scopeKind,\n\t\t\tsystemKind: null,\n\t\t\tversion: 1,\n\t\t};\n\t\tif (source.scopeKind === \"organization\") {\n\t\t\trecord.organizationId = targetOrganizationId;\n\t\t}\n\t\tthis.roles.set(id, record);\n\t\tthis.roleRights.set(id, new Set(this.roleRights.get(source.id) ?? []));\n\t\tif (record.organizationId) {\n\t\t\tthis.bumpOrganizationRevision(record.organizationId);\n\t\t} else {\n\t\t\tthis.platformRevision.value += 1;\n\t\t}\n\t\tconst rights = [...(this.roleRights.get(id) ?? [])].sort();\n\t\tthis.audit.push({\n\t\t\taction: \"role.clone\",\n\t\t\tactor_user_id: input.actorUserId,\n\t\t\tafter_state: { rights },\n\t\t\torganization_id: record.organizationId,\n\t\t\ttarget_id: id,\n\t\t\ttarget_kind: \"role\",\n\t\t});\n\t\treturn record;\n\t}\n\n\tasync createRole(input: {\n\t\tactorUserId: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t\trights?: readonly string[];\n\t\tscopeKind: \"platform\" | \"organization\";\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tawait this.ensure();\n\t\tconst name = input.name.trim();\n\t\tif (!name) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"name is required\");\n\t\t}\n\t\tif (input.scopeKind === \"organization\" && !input.organizationId) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t}\n\t\tconst rights = input.rights ?? [];\n\t\tassertRightsReplaceAllowed({\n\t\t\torganizationId: input.organizationId,\n\t\t\trights,\n\t\t\troleScope: input.scopeKind,\n\t\t});\n\t\tconst id = crypto.randomUUID();\n\t\tconst record: AthenaAuthorizationRoleRecord = {\n\t\t\tassignable: true,\n\t\t\tid,\n\t\t\tkey: `custom_${id.slice(0, 8)}`,\n\t\t\tname,\n\t\t\torganizationId:\n\t\t\t\tinput.scopeKind === \"organization\" ? (input.organizationId ?? null) : null,\n\t\t\tprotected: false,\n\t\t\tscopeKind: input.scopeKind,\n\t\t\tsystemKind: null,\n\t\t\tversion: 1,\n\t\t};\n\t\tthis.roles.set(id, record);\n\t\tthis.roleRights.set(\n\t\t\tid,\n\t\t\tnew Set(rights.map((key) => parseAthenaRightKey(key))),\n\t\t);\n\t\tthis.bumpScopeRevision(record.organizationId);\n\t\tthis.audit.push({\n\t\t\taction: \"role.create\",\n\t\t\tactor_user_id: input.actorUserId,\n\t\t\tafter_state: { rights: [...rights].sort() },\n\t\t\torganization_id: record.organizationId,\n\t\t\ttarget_id: id,\n\t\t\ttarget_kind: \"role\",\n\t\t});\n\t\treturn record;\n\t}\n\n\tasync getRole(\n\t\tid: string,\n\t\torganizationId?: string | null,\n\t): Promise<AthenaAuthorizationRoleDetail | undefined> {\n\t\tawait this.ensure();\n\t\tconst role = this.roles.get(id);\n\t\tif (!role || !this.roleVisibleInScope(role, organizationId)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst rights = uniqueRights([...(this.roleRights.get(id) ?? [])]);\n\t\treturn toRoleDetail(role, rights, this.assignmentCount(role.id));\n\t}\n\n\tasync listRoles(input: {\n\t\torganizationId?: string | null;\n\t\tscopeKind: \"platform\" | \"organization\";\n\t}): Promise<readonly RoleDescriptor[]> {\n\t\tawait this.ensure();\n\t\treturn [...this.roles.values()]\n\t\t\t.filter((role) => {\n\t\t\t\tif (role.scopeKind !== input.scopeKind) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn this.roleVisibleInScope(role, input.organizationId);\n\t\t\t})\n\t\t\t.map((role) =>\n\t\t\t\ttoRoleDescriptor(role, {\n\t\t\t\t\tassignmentCount: this.assignmentCount(role.id),\n\t\t\t\t\trightCount: this.roleRights.get(role.id)?.size ?? 0,\n\t\t\t\t}),\n\t\t\t);\n\t}\n\n\tasync listRoleRights(roleId: string): Promise<readonly AthenaRightKey[]> {\n\t\tawait this.ensure();\n\t\treturn uniqueRights([...(this.roleRights.get(roleId) ?? [])]);\n\t}\n\n\tasync updateRole(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tawait this.ensure();\n\t\tconst role = this.requireScopedRole(input.id, input.organizationId);\n\t\tassertProtectedRoleImmutable(role);\n\t\tassertExpectedVersion(role, input.expectedVersion);\n\t\tconst name = input.name.trim();\n\t\tif (!name) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"name is required\");\n\t\t}\n\t\tconst next = { ...role, name, version: role.version + 1 };\n\t\tthis.roles.set(role.id, next);\n\t\tthis.bumpScopeRevision(next.organizationId);\n\t\tthis.audit.push({\n\t\t\taction: \"role.rename\",\n\t\t\tactor_user_id: input.actorUserId,\n\t\t\tafter_state: { name },\n\t\t\tbefore_state: { name: role.name },\n\t\t\torganization_id: next.organizationId,\n\t\t\ttarget_id: next.id,\n\t\t\ttarget_kind: \"role\",\n\t\t});\n\t\treturn next;\n\t}\n\n\tasync replaceRoleRights(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\torganizationId?: string | null;\n\t\trights: readonly string[];\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tawait this.ensure();\n\t\tconst role = this.requireScopedRole(input.id, input.organizationId);\n\t\tassertProtectedRoleImmutable(role);\n\t\tassertExpectedVersion(role, input.expectedVersion);\n\t\tassertRightsReplaceAllowed({\n\t\t\torganizationId: role.organizationId,\n\t\t\trights: input.rights,\n\t\t\troleScope: role.scopeKind,\n\t\t});\n\t\tconst before = [...(this.roleRights.get(role.id) ?? [])].sort();\n\t\tconst after = [...new Set(input.rights)].sort();\n\t\tthis.roleRights.set(\n\t\t\trole.id,\n\t\t\tnew Set(after.map((key) => parseAthenaRightKey(key))),\n\t\t);\n\t\tconst next = { ...role, version: role.version + 1 };\n\t\tthis.roles.set(role.id, next);\n\t\tthis.bumpScopeRevision(next.organizationId);\n\t\tthis.audit.push({\n\t\t\taction: \"role.rights.replace\",\n\t\t\tactor_user_id: input.actorUserId,\n\t\t\tafter_state: { rights: after },\n\t\t\tbefore_state: { rights: before },\n\t\t\torganization_id: next.organizationId,\n\t\t\ttarget_id: next.id,\n\t\t\ttarget_kind: \"role\",\n\t\t});\n\t\treturn next;\n\t}\n\n\tasync deleteRole(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\torganizationId?: string | null;\n\t\treassignmentRoleId?: string | null;\n\t}): Promise<void> {\n\t\tawait this.ensure();\n\t\tconst role = this.requireScopedRole(input.id, input.organizationId);\n\t\tassertProtectedRoleImmutable(role);\n\t\tassertExpectedVersion(role, input.expectedVersion);\n\t\tconst assigned = this.assignmentCount(role.id);\n\t\tif (assigned > 0) {\n\t\t\tconst replacementId = input.reassignmentRoleId?.trim() ?? \"\";\n\t\t\tif (!replacementId) {\n\t\t\t\tthrowRoleHasAssignments();\n\t\t\t}\n\t\t\tconst replacement = this.requireScopedRole(\n\t\t\t\treplacementId,\n\t\t\t\tinput.organizationId,\n\t\t\t);\n\t\t\tif (\n\t\t\t\treplacement.id === role.id ||\n\t\t\t\t!replacement.assignable ||\n\t\t\t\treplacement.scopeKind !== role.scopeKind\n\t\t\t) {\n\t\t\t\tthrowReassignmentInvalid();\n\t\t\t}\n\t\t\tif (role.scopeKind === \"organization\") {\n\t\t\t\tfor (const [memberId, roleId] of this.memberRoles) {\n\t\t\t\t\tif (roleId === role.id) {\n\t\t\t\t\t\tthis.memberRoles.set(memberId, replacement.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const [userId, roleId] of this.userRoles) {\n\t\t\t\t\tif (roleId === role.id) {\n\t\t\t\t\t\tthis.userRoles.set(userId, replacement.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst before = [...(this.roleRights.get(role.id) ?? [])].sort();\n\t\tthis.roles.delete(role.id);\n\t\tthis.roleRights.delete(role.id);\n\t\tthis.bumpScopeRevision(role.organizationId);\n\t\tthis.audit.push({\n\t\t\taction: \"role.delete\",\n\t\t\tactor_user_id: input.actorUserId,\n\t\t\tbefore_state: { rights: before },\n\t\t\torganization_id: role.organizationId,\n\t\t\ttarget_id: role.id,\n\t\t\ttarget_kind: \"role\",\n\t\t});\n\t}\n\n\tasync listAudit(input: {\n\t\tlimit?: number;\n\t\torganizationId?: string | null;\n\t}): Promise<readonly Record<string, unknown>[]> {\n\t\tconst scoped = this.audit.filter((entry) => {\n\t\t\tif (input.organizationId === undefined) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (input.organizationId === null) {\n\t\t\t\treturn entry.organization_id == null;\n\t\t\t}\n\t\t\treturn entry.organization_id === input.organizationId;\n\t\t});\n\t\treturn scoped.slice(-(input.limit ?? 50));\n\t}\n\n\tasync resolveEffectiveRights(input: {\n\t\tactiveOrganizationId?: string | null;\n\t\tgetMember: (\n\t\t\torganizationId: string,\n\t\t\tuserId: string,\n\t\t) => Promise<AuthMemberRow | undefined>;\n\t\tuserId: string;\n\t}): Promise<readonly AthenaRightKey[]> {\n\t\tawait this.ensure();\n\t\tconst platformRoleId = this.userRoles.get(input.userId);\n\t\tconst rights = new Set<string>();\n\t\tthis.addRoleRights(platformRoleId, rights);\n\t\tconst organizationId = input.activeOrganizationId?.trim() ?? \"\";\n\t\tif (organizationId.length > 0) {\n\t\t\tconst member = await input.getMember(organizationId, input.userId);\n\t\t\tif (member) {\n\t\t\t\tconst memberRoleId =\n\t\t\t\t\tthis.memberRoles.get(member.id) ??\n\t\t\t\t\tthis.requireRole(mapLegacyMemberRole(member.role)).id;\n\t\t\t\tthis.addRoleRights(memberRoleId, rights);\n\t\t\t}\n\t\t}\n\t\treturn uniqueRights([...rights]);\n\t}\n\n\tasync readSnapshot(input: {\n\t\tactiveOrganizationId?: string | null;\n\t\tfoundingOwnerUserId?: string | null;\n\t\tgetMember: (\n\t\t\torganizationId: string,\n\t\t\tuserId: string,\n\t\t) => Promise<AuthMemberRow | undefined>;\n\t\tlistMembers: (organizationId: string) => Promise<AuthMemberRow[]>;\n\t\tuserId: string;\n\t}): Promise<AuthorizationSnapshot> {\n\t\tconst effectiveRights = await this.resolveEffectiveRights(input);\n\t\tconst capabilities = capabilitiesFromRights(effectiveRights);\n\t\tconst roles: AssignedRoleSummary[] = [];\n\t\tconst platformRoleId = this.userRoles.get(input.userId);\n\t\tif (platformRoleId) {\n\t\t\tconst role = this.roles.get(platformRoleId);\n\t\t\tif (role) {\n\t\t\t\troles.push({\n\t\t\t\t\tdisplayName: role.name,\n\t\t\t\t\tkey: role.key,\n\t\t\t\t\tscopeKind: role.scopeKind,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst organizationId = input.activeOrganizationId?.trim() ?? \"\";\n\t\tif (organizationId.length > 0) {\n\t\t\tconst member = await input.getMember(organizationId, input.userId);\n\t\t\tif (member) {\n\t\t\t\tconst roleId = this.memberRoles.get(member.id);\n\t\t\t\tconst role = roleId ? this.roles.get(roleId) : undefined;\n\t\t\t\tif (role) {\n\t\t\t\t\troles.push({\n\t\t\t\t\t\tdisplayName: role.name,\n\t\t\t\t\t\tkey: role.key,\n\t\t\t\t\t\tscopeKind: role.scopeKind,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst members =\n\t\t\torganizationId.length > 0 ? await input.listMembers(organizationId) : [];\n\t\tconst assignableRoles = projectAssignableRoles({\n\t\t\tactiveOrganizationId: organizationId,\n\t\t\tcapabilities,\n\t\t\troles: this.listAssignableRoleDescriptors(organizationId, members.length),\n\t\t});\n\t\treturn {\n\t\t\t...(organizationId.length > 0\n\t\t\t\t? { activeOrganizationId: organizationId }\n\t\t\t\t: {}),\n\t\t\tassignableRoles,\n\t\t\tcapabilities,\n\t\t\teffectiveRights,\n\t\t\trevision: organizationId\n\t\t\t\t? (this.organizationRevisions.get(organizationId) ?? 1)\n\t\t\t\t: this.platformRevision.value,\n\t\t\troles,\n\t\t};\n\t}\n\n\tasync annotateMember(\n\t\tmember: AuthMemberRow,\n\t\tactor: {\n\t\t\tfoundingOwnerUserId: string | null;\n\t\t\tgetMember: (\n\t\t\t\torganizationId: string,\n\t\t\t\tuserId: string,\n\t\t\t) => Promise<AuthMemberRow | undefined>;\n\t\t\tuserId: string;\n\t\t},\n\t): Promise<MemberAuthorizationActions> {\n\t\tawait this.ensure();\n\t\tconst roleId =\n\t\t\tthis.memberRoles.get(member.id) ??\n\t\t\tthis.requireRole(mapLegacyMemberRole(member.role)).id;\n\t\tconst role = this.requireRoleById(roleId);\n\t\tconst actorRights = await this.resolveEffectiveRights({\n\t\t\tactiveOrganizationId: member.organization_id,\n\t\t\tgetMember: actor.getMember,\n\t\t\tuserId: actor.userId,\n\t\t});\n\t\tconst capabilities = capabilitiesFromRights(actorRights);\n\t\tconst denialReasons: MemberAuthorizationActions[\"denialReasons\"] = {};\n\t\tif (actor.foundingOwnerUserId === member.user_id) {\n\t\t\tdenialReasons.changeRole = FOUNDING_OWNER_ROLE_LOCKED;\n\t\t\tdenialReasons.remove = FOUNDING_OWNER_REMOVE_FORBIDDEN;\n\t\t} else if (\n\t\t\tactor.userId === member.user_id &&\n\t\t\trole.key === ORGANIZATION_OWNER_ROLE\n\t\t) {\n\t\t\tdenialReasons.changeRole =\n\t\t\t\t\"Owners can't change their own role from the members table.\";\n\t\t\tdenialReasons.remove =\n\t\t\t\t\"Owners can't suspend or remove themselves from the members table.\";\n\t\t} else if (!capabilities.canChangeMemberRole) {\n\t\t\tdenialReasons.changeRole = \"Not allowed to change member roles.\";\n\t\t\tdenialReasons.remove = \"Not allowed to remove members.\";\n\t\t}\n\t\treturn {\n\t\t\tcanChangeRole: denialReasons.changeRole === undefined,\n\t\t\tcanRemove: denialReasons.remove === undefined,\n\t\t\tdenialReasons,\n\t\t\troleDisplayName: role.name,\n\t\t\troleKey: role.key,\n\t\t};\n\t}\n\n\tasync ensureUserAssigned(\n\t\tuserId: string,\n\t\tlegacyRole?: string | null,\n\t): Promise<void> {\n\t\tawait this.ensure();\n\t\tif (!this.userRoles.has(userId)) {\n\t\t\tawait this.assignUserRole(userId, mapLegacyUserRole(legacyRole));\n\t\t}\n\t}\n\n\tasync ensureMemberAssigned(\n\t\tmemberId: string,\n\t\tlegacyRole?: string | null,\n\t): Promise<void> {\n\t\tawait this.ensure();\n\t\tif (!this.memberRoles.has(memberId)) {\n\t\t\tawait this.assignMemberRole(memberId, mapLegacyMemberRole(legacyRole));\n\t\t}\n\t}\n\n\tprivate listAssignableRoleDescriptors(\n\t\torganizationId: string,\n\t\tmemberCount: number,\n\t): RoleDescriptor[] {\n\t\tvoid memberCount;\n\t\treturn [...this.roles.values()]\n\t\t\t.filter((role) => role.assignable)\n\t\t\t.filter(\n\t\t\t\t(role) =>\n\t\t\t\t\trole.organizationId === null ||\n\t\t\t\t\t(organizationId.length > 0 && role.organizationId === organizationId),\n\t\t\t)\n\t\t\t.map((role) =>\n\t\t\t\ttoRoleDescriptor(role, {\n\t\t\t\t\tassignmentCount: this.assignmentCount(role.id),\n\t\t\t\t\trightCount: this.roleRights.get(role.id)?.size ?? 0,\n\t\t\t\t}),\n\t\t\t);\n\t}\n\n\tprivate requireScopedRole(\n\t\troleId: string,\n\t\torganizationId?: string | null,\n\t): AthenaAuthorizationRoleRecord {\n\t\tconst role = this.roles.get(roleId);\n\t\tif (!role || !this.roleVisibleInScope(role, organizationId)) {\n\t\t\tthrowRoleNotFound();\n\t\t}\n\t\treturn role;\n\t}\n\n\tprivate roleVisibleInScope(\n\t\trole: AthenaAuthorizationRoleRecord,\n\t\torganizationId?: string | null,\n\t): boolean {\n\t\tif (organizationId) {\n\t\t\tif (role.scopeKind !== \"organization\") {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn (\n\t\t\t\trole.organizationId === null || role.organizationId === organizationId\n\t\t\t);\n\t\t}\n\t\treturn role.scopeKind === \"platform\" && role.organizationId === null;\n\t}\n\n\tprivate assignmentCount(roleId: string): number {\n\t\tconst role = this.roles.get(roleId);\n\t\tif (!role) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (role.scopeKind === \"organization\") {\n\t\t\treturn [...this.memberRoles.values()].filter((id) => id === roleId).length;\n\t\t}\n\t\treturn [...this.userRoles.values()].filter((id) => id === roleId).length;\n\t}\n\n\tprivate bumpScopeRevision(organizationId: string | null): void {\n\t\tif (organizationId) {\n\t\t\tthis.bumpOrganizationRevision(organizationId);\n\t\t\treturn;\n\t\t}\n\t\tthis.platformRevision.value += 1;\n\t}\n\n\tprivate resolveOrganizationRole(\n\t\troleRef: string,\n\t\torganizationId?: string | null,\n\t): AthenaAuthorizationRoleRecord {\n\t\tconst mapped = resolveMemberAssignmentRole(roleRef);\n\t\tconst matches = [...this.roles.values()].filter((role) => {\n\t\t\tif (role.scopeKind !== \"organization\" || !role.assignable) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst hit =\n\t\t\t\trole.id === roleRef || role.key === roleRef || role.key === mapped;\n\t\t\tif (!hit) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn (\n\t\t\t\trole.organizationId === null || role.organizationId === organizationId\n\t\t\t);\n\t\t});\n\t\tconst specific = matches.find(\n\t\t\t(role) => role.organizationId === organizationId,\n\t\t);\n\t\tconst template = matches.find((role) => role.organizationId === null);\n\t\tconst role = specific ?? template;\n\t\tif (!role) {\n\t\t\tthrow new Error(`Unknown role ${roleRef}`);\n\t\t}\n\t\treturn role;\n\t}\n\n\tprivate bumpOrganizationRevision(organizationId: string): void {\n\t\tthis.organizationRevisions.set(\n\t\t\torganizationId,\n\t\t\t(this.organizationRevisions.get(organizationId) ?? 1) + 1,\n\t\t);\n\t}\n\n\tprivate addRoleRights(roleId: string | undefined, into: Set<string>): void {\n\t\tif (!roleId) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const key of this.roleRights.get(roleId) ?? []) {\n\t\t\tinto.add(key);\n\t\t}\n\t}\n\n\tprivate requireRole(roleKey: string): AthenaAuthorizationRoleRecord {\n\t\tfor (const role of this.roles.values()) {\n\t\t\tif (role.key === roleKey && role.organizationId === null) {\n\t\t\t\treturn role;\n\t\t\t}\n\t\t}\n\t\tthrow new Error(`Unknown role ${roleKey}`);\n\t}\n\n\tprivate requireRoleById(roleId: string): AthenaAuthorizationRoleRecord {\n\t\tconst role = this.roles.get(roleId);\n\t\tif (!role) {\n\t\t\tthrow new Error(`Unknown role id ${roleId}`);\n\t\t}\n\t\treturn role;\n\t}\n\n\tprivate async ensure(): Promise<void> {\n\t\tif (!this.materialized) {\n\t\t\tawait this.materialize();\n\t\t}\n\t}\n}\n","import type {\n\tAuthAccountRow,\n\tAuthInvitationRow,\n\tAuthMemberRow,\n\tAuthOrganizationRow,\n\tAuthPasskeyRow,\n\tAuthSessionRow,\n\tAuthUserRow,\n\tAuthVerificationRow,\n} from \"./models.ts\";\nimport { MemoryAuthorizationStore } from \"../../runtime/authorization/memory.ts\";\nimport {\n\tmapLegacyUserRole,\n\tresolveMemberAssignmentRole,\n} from \"../../runtime/authorization/templates.ts\";\nimport type {\n\tAuthApiKeyRow,\n\tAuthTwoFactorRow,\n\tCreateSessionInput,\n\tCreateUserInput,\n\tUpdateUserPatch,\n} from \"./stores.ts\";\n\nfunction now(): Date {\n\treturn new Date();\n}\n\nfunction clone<T>(value: T): T {\n\treturn structuredClone(value);\n}\n\nexport class MemoryAuthStores {\n\treadonly authorization = new MemoryAuthorizationStore();\n\treadonly accounts = new Map<string, AuthAccountRow>();\n\treadonly invitations = new Map<string, AuthInvitationRow>();\n\treadonly members = new Map<string, AuthMemberRow>();\n\treadonly organizations = new Map<string, AuthOrganizationRow>();\n\treadonly sessions = new Map<string, AuthSessionRow>();\n\treadonly users = new Map<string, AuthUserRow>();\n\treadonly verifications = new Map<string, AuthVerificationRow>();\n\treadonly apiKeys = new Map<string, AuthApiKeyRow>();\n\treadonly twoFactors = new Map<string, AuthTwoFactorRow>();\n\treadonly passkeys = new Map<string, AuthPasskeyRow>();\n\treadonly passkeyRegistrationTransactions = new Map<\n\t\tstring,\n\t\t{\n\t\t\tchallenge_hash: string;\n\t\t\tconsumed_at: Date | string | null;\n\t\t\tcontext: string | null;\n\t\t\tcreated_at: Date | string;\n\t\t\texpires_at: Date | string;\n\t\t\tid: string;\n\t\t\tmode: string;\n\t\t\trp_id: string;\n\t\t\tuser_handle: string;\n\t\t}\n\t>();\n\n\tasync getUserById(id: string): Promise<AuthUserRow | undefined> {\n\t\tconst row = this.users.get(id);\n\t\treturn row ? clone(row) : undefined;\n\t}\n\n\tasync getUserByEmail(email: string): Promise<AuthUserRow | undefined> {\n\t\tconst needle = email.trim().toLowerCase();\n\t\tfor (const user of this.users.values()) {\n\t\t\tif ((user.email ?? \"\").trim().toLowerCase() === needle) {\n\t\t\t\treturn clone(user);\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync getUserByUsername(username: string): Promise<AuthUserRow | undefined> {\n\t\tfor (const user of this.users.values()) {\n\t\t\tif (user.username === username) {\n\t\t\t\treturn clone(user);\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync createUser(input: CreateUserInput): Promise<AuthUserRow> {\n\t\tif (input.email && (await this.getUserByEmail(input.email))) {\n\t\t\tconst error = new Error(\"duplicate key value violates unique constraint\");\n\t\t\t(error as { code?: string }).code = \"23505\";\n\t\t\tthrow error;\n\t\t}\n\t\tconst created = now();\n\t\tconst row: AuthUserRow = {\n\t\t\tban_expires: null,\n\t\t\tban_reason: null,\n\t\t\tbanned: false,\n\t\t\tcreated_at: created,\n\t\t\tdisplay_username: input.displayUsername ?? null,\n\t\t\temail: input.email ?? null,\n\t\t\temail_verified: input.emailVerified ?? false,\n\t\t\tid: input.id,\n\t\t\timage: input.image ?? null,\n\t\t\tlast_sign_in_at: null,\n\t\t\tmetadata: input.metadata ?? {},\n\t\t\tname: input.name ?? null,\n\t\t\trole: null,\n\t\t\ttwo_factor_enabled: false,\n\t\t\tupdated_at: created,\n\t\t\tusername: input.username ?? null,\n\t\t};\n\t\tthis.users.set(row.id, row);\n\t\tawait this.authorization.assignUserRole(\n\t\t\trow.id,\n\t\t\tmapLegacyUserRole(row.role),\n\t\t);\n\t\treturn clone(row);\n\t}\n\n\tasync updateUser(id: string, patch: UpdateUserPatch): Promise<AuthUserRow> {\n\t\tconst existing = this.users.get(id);\n\t\tif (!existing) {\n\t\t\tthrow new Error(\"User not found\");\n\t\t}\n\t\tconst next: AuthUserRow = {\n\t\t\t...existing,\n\t\t\tban_expires:\n\t\t\t\tpatch.banExpires !== undefined\n\t\t\t\t\t? patch.banExpires\n\t\t\t\t\t: existing.ban_expires,\n\t\t\tban_reason:\n\t\t\t\tpatch.banReason !== undefined ? patch.banReason : existing.ban_reason,\n\t\t\tbanned: patch.banned ?? existing.banned,\n\t\t\temail: patch.email ?? existing.email,\n\t\t\temail_verified: patch.emailVerified ?? existing.email_verified,\n\t\t\timage: patch.image !== undefined ? patch.image : existing.image,\n\t\t\tlast_sign_in_at: patch.lastSignInAt ?? existing.last_sign_in_at,\n\t\t\tmetadata: patch.metadata ?? existing.metadata,\n\t\t\tname: patch.name !== undefined ? patch.name : existing.name,\n\t\t\trole: patch.role !== undefined ? patch.role : existing.role,\n\t\t\ttwo_factor_enabled: patch.twoFactorEnabled ?? existing.two_factor_enabled,\n\t\t\tupdated_at: now(),\n\t\t};\n\t\tthis.users.set(id, next);\n\t\tif (patch.role !== undefined) {\n\t\t\tawait this.authorization.assignUserRole(\n\t\t\t\tid,\n\t\t\t\tmapLegacyUserRole(patch.role),\n\t\t\t);\n\t\t}\n\t\treturn clone(next);\n\t}\n\n\tasync deleteUser(id: string): Promise<void> {\n\t\tthis.users.delete(id);\n\t\tfor (const [key, session] of this.sessions) {\n\t\t\tif (session.user_id === id) {\n\t\t\t\tthis.sessions.delete(key);\n\t\t\t}\n\t\t}\n\t\tfor (const [key, account] of this.accounts) {\n\t\t\tif (account.user_id === id) {\n\t\t\t\tthis.accounts.delete(key);\n\t\t\t}\n\t\t}\n\t\tfor (const [key, member] of this.members) {\n\t\t\tif (member.user_id === id) {\n\t\t\t\tthis.members.delete(key);\n\t\t\t}\n\t\t}\n\t\tthis.twoFactors.delete(id);\n\t\tfor (const [key, apiKey] of this.apiKeys) {\n\t\t\tif (apiKey.user_id === id) {\n\t\t\t\tthis.apiKeys.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync createSession(input: CreateSessionInput): Promise<AuthSessionRow> {\n\t\tconst created = now();\n\t\tconst row: AuthSessionRow = {\n\t\t\tactive: true,\n\t\t\tactive_organization_id: input.activeOrganizationId ?? null,\n\t\t\tcreated_at: created,\n\t\t\texpires_at: input.expiresAt,\n\t\t\tid: input.id,\n\t\t\timpersonated_by: input.impersonatedBy ?? null,\n\t\t\tip_address: input.ipAddress ?? null,\n\t\t\ttoken: input.token,\n\t\t\tupdated_at: created,\n\t\t\tuser_agent: input.userAgent ?? null,\n\t\t\tuser_id: input.userId,\n\t\t};\n\t\tthis.sessions.set(row.token, row);\n\t\treturn clone(row);\n\t}\n\n\tasync getSessionByToken(token: string): Promise<AuthSessionRow | undefined> {\n\t\tconst row = this.sessions.get(token);\n\t\tif (!row?.active || new Date(row.expires_at).getTime() <= Date.now()) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn clone(row);\n\t}\n\n\tasync updateSessionExpiry(token: string, expiresAt: Date): Promise<void> {\n\t\tconst row = this.sessions.get(token);\n\t\tif (!row) {\n\t\t\treturn;\n\t\t}\n\t\trow.expires_at = expiresAt;\n\t\trow.updated_at = now();\n\t}\n\n\tasync setSessionActiveOrganization(\n\t\ttoken: string,\n\t\torganizationId: string | null,\n\t): Promise<void> {\n\t\tconst row = this.sessions.get(token);\n\t\tif (!row) {\n\t\t\treturn;\n\t\t}\n\t\trow.active_organization_id = organizationId;\n\t\trow.updated_at = now();\n\t}\n\n\tasync clearUserActiveOrganization(\n\t\tuserId: string,\n\t\torganizationId: string,\n\t): Promise<number> {\n\t\tlet count = 0;\n\t\tfor (const session of this.sessions.values()) {\n\t\t\tif (\n\t\t\t\tsession.user_id === userId &&\n\t\t\t\tsession.active_organization_id === organizationId\n\t\t\t) {\n\t\t\t\tsession.active_organization_id = null;\n\t\t\t\tsession.updated_at = now();\n\t\t\t\tcount += 1;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t}\n\n\tasync clearOrganizationActiveSessions(organizationId: string): Promise<number> {\n\t\tlet count = 0;\n\t\tfor (const session of this.sessions.values()) {\n\t\t\tif (session.active_organization_id === organizationId) {\n\t\t\t\tsession.active_organization_id = null;\n\t\t\t\tsession.updated_at = now();\n\t\t\t\tcount += 1;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t}\n\n\tasync listUserSessions(userId: string): Promise<AuthSessionRow[]> {\n\t\treturn [...this.sessions.values()]\n\t\t\t.filter(\n\t\t\t\t(session) =>\n\t\t\t\t\tsession.user_id === userId &&\n\t\t\t\t\tsession.active &&\n\t\t\t\t\tnew Date(session.expires_at).getTime() > Date.now(),\n\t\t\t)\n\t\t\t.map((session) => clone(session));\n\t}\n\n\tasync deleteSession(token: string): Promise<boolean> {\n\t\treturn this.sessions.delete(token);\n\t}\n\n\tasync deleteUserSessions(\n\t\tuserId: string,\n\t\texceptToken?: string,\n\t): Promise<number> {\n\t\tlet count = 0;\n\t\tfor (const [token, session] of this.sessions) {\n\t\t\tif (session.user_id === userId && token !== exceptToken) {\n\t\t\t\tthis.sessions.delete(token);\n\t\t\t\tcount += 1;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t}\n\n\tasync createAccount(input: {\n\t\taccountId: string;\n\t\tid: string;\n\t\tpassword?: string;\n\t\tproviderId: string;\n\t\tuserId: string;\n\t}): Promise<AuthAccountRow> {\n\t\tconst created = now();\n\t\tconst row: AuthAccountRow = {\n\t\t\taccess_token: null,\n\t\t\taccess_token_expires_at: null,\n\t\t\taccount_id: input.accountId,\n\t\t\tcreated_at: created,\n\t\t\tid: input.id,\n\t\t\tid_token: null,\n\t\t\tpassword: input.password ?? null,\n\t\t\tprovider_id: input.providerId,\n\t\t\trefresh_token: null,\n\t\t\trefresh_token_expires_at: null,\n\t\t\tscope: null,\n\t\t\tupdated_at: created,\n\t\t\tuser_id: input.userId,\n\t\t};\n\t\tthis.accounts.set(row.id, row);\n\t\treturn clone(row);\n\t}\n\n\tasync listAccounts(userId: string): Promise<AuthAccountRow[]> {\n\t\treturn [...this.accounts.values()]\n\t\t\t.filter((account) => account.user_id === userId)\n\t\t\t.map((account) => clone(account));\n\t}\n\n\tasync findAccountByProvider(\n\t\tproviderId: string,\n\t\taccountId: string,\n\t): Promise<AuthAccountRow | undefined> {\n\t\tfor (const account of this.accounts.values()) {\n\t\t\tif (\n\t\t\t\taccount.provider_id === providerId &&\n\t\t\t\taccount.account_id === accountId\n\t\t\t) {\n\t\t\t\treturn clone(account);\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync deleteAccount(id: string): Promise<void> {\n\t\tthis.accounts.delete(id);\n\t}\n\n\tasync createVerification(input: {\n\t\texpiresAt: Date;\n\t\tid: string;\n\t\tidentifier: string;\n\t\tvalue: string;\n\t}): Promise<AuthVerificationRow> {\n\t\tconst created = now();\n\t\tconst row: AuthVerificationRow = {\n\t\t\tcreated_at: created,\n\t\t\texpires_at: input.expiresAt,\n\t\t\tid: input.id,\n\t\t\tidentifier: input.identifier,\n\t\t\tupdated_at: created,\n\t\t\tvalue: input.value,\n\t\t};\n\t\tthis.verifications.set(row.value, row);\n\t\treturn clone(row);\n\t}\n\n\tasync consumeVerification(\n\t\tvalue: string,\n\t): Promise<AuthVerificationRow | undefined> {\n\t\tconst row = this.verifications.get(value);\n\t\tif (!row || new Date(row.expires_at).getTime() <= Date.now()) {\n\t\t\tthis.verifications.delete(value);\n\t\t\treturn undefined;\n\t\t}\n\t\tthis.verifications.delete(value);\n\t\treturn clone(row);\n\t}\n\n\tasync consumeVerificationByIdentifierAndValue(\n\t\tidentifier: string,\n\t\tvalue: string,\n\t): Promise<AuthVerificationRow | undefined> {\n\t\tconst row = this.verifications.get(value);\n\t\tif (\n\t\t\t!row ||\n\t\t\trow.identifier !== identifier ||\n\t\t\tnew Date(row.expires_at).getTime() <= Date.now()\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthis.verifications.delete(value);\n\t\treturn clone(row);\n\t}\n\n\tasync expirePasskeyVerifications(now: Date): Promise<number> {\n\t\tconst cutoff = now.getTime();\n\t\tlet deleted = 0;\n\t\tfor (const [key, row] of [...this.verifications.entries()]) {\n\t\t\tif (\n\t\t\t\trow.identifier.startsWith(\"passkey:\") &&\n\t\t\t\tnew Date(row.expires_at).getTime() <= cutoff\n\t\t\t) {\n\t\t\t\tthis.verifications.delete(key);\n\t\t\t\tdeleted += 1;\n\t\t\t}\n\t\t}\n\t\treturn deleted;\n\t}\n\n\tasync createOrganization(input: {\n\t\tcreatedByUserId: string;\n\t\tid: string;\n\t\tname: string;\n\t\tslug: string;\n\t}): Promise<AuthOrganizationRow> {\n\t\tif (await this.getOrganizationBySlug(input.slug)) {\n\t\t\tconst error = new Error(\"duplicate key value violates unique constraint\");\n\t\t\t(error as { code?: string }).code = \"23505\";\n\t\t\tthrow error;\n\t\t}\n\t\tconst created = now();\n\t\tconst row: AuthOrganizationRow = {\n\t\t\tcreated_at: created,\n\t\t\tcreated_by_user_id: input.createdByUserId,\n\t\t\tid: input.id,\n\t\t\tlogo: null,\n\t\t\tmetadata: {},\n\t\t\tname: input.name,\n\t\t\tslug: input.slug,\n\t\t\tupdated_at: created,\n\t\t};\n\t\tthis.organizations.set(row.id, row);\n\t\treturn clone(row);\n\t}\n\n\tasync getOrganization(id: string): Promise<AuthOrganizationRow | undefined> {\n\t\tconst row = this.organizations.get(id);\n\t\treturn row ? clone(row) : undefined;\n\t}\n\n\tasync getOrganizationBySlug(\n\t\tslug: string,\n\t): Promise<AuthOrganizationRow | undefined> {\n\t\tfor (const organization of this.organizations.values()) {\n\t\t\tif (organization.slug === slug) {\n\t\t\t\treturn clone(organization);\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync listOrganizationsForUser(\n\t\tuserId: string,\n\t): Promise<AuthOrganizationRow[]> {\n\t\tconst orgIds = [...this.members.values()]\n\t\t\t.filter((member) => member.user_id === userId)\n\t\t\t.map((member) => member.organization_id);\n\t\treturn orgIds\n\t\t\t.map((id) => this.organizations.get(id))\n\t\t\t.filter((row): row is AuthOrganizationRow => Boolean(row))\n\t\t\t.map((row) => clone(row));\n\t}\n\n\tasync updateOrganization(\n\t\tid: string,\n\t\tpatch: { logo?: string | null; name?: string; slug?: string },\n\t): Promise<AuthOrganizationRow> {\n\t\tconst existing = this.organizations.get(id);\n\t\tif (!existing) {\n\t\t\tthrow new Error(\"Organization not found\");\n\t\t}\n\t\tconst next: AuthOrganizationRow = {\n\t\t\t...existing,\n\t\t\tlogo: patch.logo !== undefined ? patch.logo : existing.logo,\n\t\t\tname: patch.name ?? existing.name,\n\t\t\tslug: patch.slug ?? existing.slug,\n\t\t\tupdated_at: now(),\n\t\t};\n\t\tthis.organizations.set(id, next);\n\t\treturn clone(next);\n\t}\n\n\tasync deleteOrganization(id: string): Promise<void> {\n\t\tthis.organizations.delete(id);\n\t\tfor (const [key, member] of this.members) {\n\t\t\tif (member.organization_id === id) {\n\t\t\t\tthis.members.delete(key);\n\t\t\t}\n\t\t}\n\t\tfor (const [key, invitation] of this.invitations) {\n\t\t\tif (invitation.organization_id === id) {\n\t\t\t\tthis.invitations.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync addMember(input: {\n\t\tassignedBy?: string;\n\t\tid: string;\n\t\torganizationId: string;\n\t\trole: string;\n\t\tuserId: string;\n\t}): Promise<AuthMemberRow> {\n\t\tconst created = now();\n\t\tconst row: AuthMemberRow = {\n\t\t\tcreated_at: created,\n\t\t\tid: input.id,\n\t\t\torganization_id: input.organizationId,\n\t\t\trole: input.role,\n\t\t\tuser_id: input.userId,\n\t\t};\n\t\tthis.members.set(row.id, row);\n\t\tawait this.authorization.assignMemberRole(\n\t\t\trow.id,\n\t\t\tresolveMemberAssignmentRole(row.role),\n\t\t\tinput.assignedBy,\n\t\t\tinput.organizationId,\n\t\t);\n\t\treturn clone(row);\n\t}\n\n\tasync getMember(\n\t\torganizationId: string,\n\t\tuserId: string,\n\t): Promise<AuthMemberRow | undefined> {\n\t\tfor (const member of this.members.values()) {\n\t\t\tif (\n\t\t\t\tmember.organization_id === organizationId &&\n\t\t\t\tmember.user_id === userId\n\t\t\t) {\n\t\t\t\treturn clone(member);\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync listMembers(organizationId: string): Promise<AuthMemberRow[]> {\n\t\treturn [...this.members.values()]\n\t\t\t.filter((member) => member.organization_id === organizationId)\n\t\t\t.map((member) => clone(member));\n\t}\n\n\tasync updateMemberRole(\n\t\torganizationId: string,\n\t\tuserId: string,\n\t\trole: string,\n\t): Promise<AuthMemberRow | undefined> {\n\t\tfor (const member of this.members.values()) {\n\t\t\tif (\n\t\t\t\tmember.organization_id === organizationId &&\n\t\t\t\tmember.user_id === userId\n\t\t\t) {\n\t\t\t\tmember.role = role;\n\t\t\t\tawait this.authorization.assignMemberRole(\n\t\t\t\t\tmember.id,\n\t\t\t\t\tresolveMemberAssignmentRole(role),\n\t\t\t\t\tundefined,\n\t\t\t\t\torganizationId,\n\t\t\t\t);\n\t\t\t\treturn clone(member);\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync removeMember(organizationId: string, userId: string): Promise<boolean> {\n\t\tfor (const [key, member] of this.members) {\n\t\t\tif (\n\t\t\t\tmember.organization_id === organizationId &&\n\t\t\t\tmember.user_id === userId\n\t\t\t) {\n\t\t\t\tthis.members.delete(key);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tasync createInvitation(input: {\n\t\temail: string;\n\t\texpiresAt: Date;\n\t\tid: string;\n\t\tinviterId: string;\n\t\torganizationId: string;\n\t\trole: string;\n\t}): Promise<AuthInvitationRow> {\n\t\tconst created = now();\n\t\tconst row: AuthInvitationRow = {\n\t\t\tcreated_at: created,\n\t\t\temail: input.email,\n\t\t\texpires_at: input.expiresAt,\n\t\t\tid: input.id,\n\t\t\tinviter_id: input.inviterId,\n\t\t\torganization_id: input.organizationId,\n\t\t\trole: input.role,\n\t\t\tstatus: \"pending\",\n\t\t};\n\t\tthis.invitations.set(row.id, row);\n\t\treturn clone(row);\n\t}\n\n\tasync getInvitation(id: string): Promise<AuthInvitationRow | undefined> {\n\t\tconst row = this.invitations.get(id);\n\t\treturn row ? clone(row) : undefined;\n\t}\n\n\tasync listInvitations(organizationId: string): Promise<AuthInvitationRow[]> {\n\t\treturn [...this.invitations.values()]\n\t\t\t.filter((invitation) => invitation.organization_id === organizationId)\n\t\t\t.map((invitation) => clone(invitation));\n\t}\n\n\tasync listInvitationsForEmail(email: string): Promise<AuthInvitationRow[]> {\n\t\tconst needle = email.toLowerCase();\n\t\treturn [...this.invitations.values()]\n\t\t\t.filter((invitation) => invitation.email?.toLowerCase() === needle)\n\t\t\t.map((invitation) => clone(invitation));\n\t}\n\n\tasync updateInvitationStatus(\n\t\tid: string,\n\t\tstatus: string,\n\t): Promise<AuthInvitationRow | undefined> {\n\t\tconst row = this.invitations.get(id);\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\t\trow.status = status;\n\t\treturn clone(row);\n\t}\n\n\tasync getVerificationByValue(\n\t\tvalue: string,\n\t): Promise<AuthVerificationRow | undefined> {\n\t\tconst row = this.verifications.get(value);\n\t\tif (!row || new Date(row.expires_at).getTime() <= Date.now()) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn clone(row);\n\t}\n\n\tasync createTwoFactor(input: {\n\t\tbackupCodes?: string;\n\t\tid: string;\n\t\tsecret: string;\n\t\tuserId: string;\n\t}): Promise<AuthTwoFactorRow> {\n\t\tconst created = now();\n\t\tconst row: AuthTwoFactorRow = {\n\t\t\tbackup_codes: input.backupCodes ?? null,\n\t\t\tcreated_at: created,\n\t\t\tid: input.id,\n\t\t\tsecret: input.secret,\n\t\t\tupdated_at: created,\n\t\t\tuser_id: input.userId,\n\t\t};\n\t\tthis.twoFactors.set(input.userId, row);\n\t\treturn clone(row);\n\t}\n\n\tasync getTwoFactorByUserId(\n\t\tuserId: string,\n\t): Promise<AuthTwoFactorRow | undefined> {\n\t\tconst row = this.twoFactors.get(userId);\n\t\treturn row ? clone(row) : undefined;\n\t}\n\n\tasync updateTwoFactorBackupCodes(\n\t\tuserId: string,\n\t\tbackupCodes: string,\n\t): Promise<void> {\n\t\tconst row = this.twoFactors.get(userId);\n\t\tif (row) {\n\t\t\trow.backup_codes = backupCodes;\n\t\t\trow.updated_at = now();\n\t\t}\n\t}\n\n\tasync deleteTwoFactor(userId: string): Promise<void> {\n\t\tthis.twoFactors.delete(userId);\n\t}\n\n\tasync createApiKey(input: AuthApiKeyRow): Promise<AuthApiKeyRow> {\n\t\tthis.apiKeys.set(input.id, { ...input });\n\t\treturn clone(input);\n\t}\n\n\tasync getApiKeyByHash(hash: string): Promise<AuthApiKeyRow | undefined> {\n\t\tfor (const key of this.apiKeys.values()) {\n\t\t\tif (key.key === hash) {\n\t\t\t\treturn clone(key);\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync getApiKeyById(id: string): Promise<AuthApiKeyRow | undefined> {\n\t\tconst row = this.apiKeys.get(id);\n\t\treturn row ? clone(row) : undefined;\n\t}\n\n\tasync listApiKeys(userId: string): Promise<AuthApiKeyRow[]> {\n\t\treturn [...this.apiKeys.values()]\n\t\t\t.filter((key) => key.user_id === userId)\n\t\t\t.map((key) => clone(key));\n\t}\n\n\tasync deleteApiKey(id: string): Promise<boolean> {\n\t\treturn this.apiKeys.delete(id);\n\t}\n\n\tasync deleteExpiredApiKeys(): Promise<number> {\n\t\tlet count = 0;\n\t\tconst nowMs = Date.now();\n\t\tfor (const [id, key] of this.apiKeys) {\n\t\t\tif (key.expires_at && new Date(key.expires_at).getTime() <= nowMs) {\n\t\t\t\tthis.apiKeys.delete(id);\n\t\t\t\tcount += 1;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t}\n\n\tasync touchApiKey(id: string): Promise<void> {\n\t\tconst row = this.apiKeys.get(id);\n\t\tif (row) {\n\t\t\trow.last_request = now();\n\t\t\trow.updated_at = now();\n\t\t}\n\t}\n\n\tasync updateApiKey(\n\t\tid: string,\n\t\tpatch: {\n\t\t\tenabled?: boolean;\n\t\t\tmetadata?: string | null;\n\t\t\tname?: string | null;\n\t\t\tpermissions?: string | null;\n\t\t},\n\t): Promise<AuthApiKeyRow | undefined> {\n\t\tconst row = this.apiKeys.get(id);\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (patch.enabled !== undefined) {\n\t\t\trow.enabled = patch.enabled;\n\t\t}\n\t\tif (patch.metadata !== undefined) {\n\t\t\trow.metadata = patch.metadata;\n\t\t}\n\t\tif (patch.name !== undefined) {\n\t\t\trow.name = patch.name;\n\t\t}\n\t\tif (patch.permissions !== undefined) {\n\t\t\trow.permissions = patch.permissions;\n\t\t}\n\t\trow.updated_at = now();\n\t\treturn clone(row);\n\t}\n}\n\nexport type { AthenaAuthStores } from \"./store-contract.ts\";\n","export function createSessionToken(): string {\n\treturn `session_${crypto.randomUUID()}`;\n}\n\nexport function normalizePath(pathname: string, basePath: string): string {\n\tconst normalizedBase = basePath.replace(/\\/+$/, \"\") || \"\";\n\tlet path = pathname;\n\tif (\n\t\tnormalizedBase &&\n\t\t(path === normalizedBase || path.startsWith(`${normalizedBase}/`))\n\t) {\n\t\tpath = path.slice(normalizedBase.length) || \"/\";\n\t}\n\tif (!path.startsWith(\"/\")) {\n\t\tpath = `/${path}`;\n\t}\n\tif (path.length > 1 && path.endsWith(\"/\")) {\n\t\tpath = path.slice(0, -1);\n\t}\n\treturn path;\n}\n\nexport function isUniqueViolation(error: unknown): boolean {\n\treturn Boolean(\n\t\terror &&\n\t\ttypeof error === \"object\" &&\n\t\t\"code\" in error &&\n\t\t(error as { code?: string }).code === \"23505\",\n\t);\n}\n","import { AthenaAuthRuntimeError } from \"./errors.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    if (existing.count >= this.limit) {\n      return false;\n    }\n    existing.count += 1;\n    return true;\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  return undefined;\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 undefined;\n  }\n  try {\n    const url = new URL(referer);\n    return `${url.protocol}//${url.host}`;\n  } catch {\n    return undefined;\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 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 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 { PACKAGE_VERSION } from \"../../sdk-version.ts\";\nimport { createEmbeddedCapabilitySnapshot } from \"../capabilities.ts\";\nimport {\n\tATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n\tATHENA_AUTH_SCHEMA_GENERATION,\n} from \"../contract/index.ts\";\nimport { authEmailEvents } from \"../email/index.ts\";\nimport {\n\tsanitizeHookMember,\n\tsanitizeHookOrganization,\n\tsanitizeHookSession,\n\tsanitizeHookUser,\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 { revokeAuthBridgeCodesForSessions } from \"./bridge/revoke.ts\";\nimport { handleAuthBridgeRoutes } from \"./bridge/routes.ts\";\nimport {\n\tcreateClearSessionCookieHeader,\n\treadBearerToken,\n\treadSessionTokenFromCookies,\n\tshouldSetSecureCookie,\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\ttoPublicAccount,\n\ttoPublicMember,\n\ttoPublicMembersWithUsers,\n\ttoPublicMemberWithUser,\n\ttoPublicOrganization,\n\ttoPublicSession,\n\ttoPublicUser,\n} from \"./models.ts\";\nimport {\n\tassertFoundingOwnerMutationAllowed,\n\tassertLastOwnerMutationAllowed,\n\tresolveFoundingOwnerUserId,\n} from \"./organization-invariants.ts\";\nimport {\n\trequireOrgDelete,\n\trequireOrgMemberManager,\n\trequireOrganizationRoleGrant,\n} from \"./authorization-guard.ts\";\nimport {\n\tbuildSnapshot,\n\thandleAuthorizationRoute,\n} from \"./authorization-routes.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\thandleDeletePasskeyRoute,\n\thandleListUserPasskeysRoute,\n\thandleUpdatePasskeyRoute,\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\textractPasswordHash,\n\tvalidatePassword,\n\twithPasswordHash,\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\treadAthenaAuthSchemaStatus,\n\ttoAthenaAuthSchemaCompatibility,\n} from \"./schema.ts\";\nimport {\n\tasDataEnvelopeStringField,\n\tasStringField,\n\treadJsonBody,\n\trequestClientIp,\n\trequireStringField,\n} from \"./security.ts\";\nimport { handleSocialRoutes } from \"./social/routes.ts\";\nimport { advertisedSocialProviderIds } from \"./social/runtime.ts\";\nimport { createLocalTokenAuthority } from \"./token-authority.ts\";\n\nexport type AuthRouteDomain =\n\t| \"session\"\n\t| \"credential\"\n\t| \"user\"\n\t| \"organization\"\n\t| \"passkey\"\n\t| \"token\"\n\t| \"email\"\n\t| \"admin\"\n\t| \"social\";\n\nexport type AuthRouteHandler = (\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tcurrentStores: AthenaAuthStores,\n\theaders: Headers,\n\ttraceId: string,\n) => Promise<Response | undefined>;\n\nfunction resolveAuthRouteDomain(path: string): AuthRouteDomain | undefined {\n\tif (\n\t\tpath === \"/sign-in/social\" ||\n\t\tpath === \"/link-social\" ||\n\t\tpath === \"/unlink-account\" ||\n\t\tpath.startsWith(\"/callback/\")\n\t) {\n\t\treturn \"social\";\n\t}\n\tif (\n\t\tpath === \"/forget-password\" ||\n\t\tpath === \"/reset-password\" ||\n\t\tpath === \"/change-password\" ||\n\t\tpath === \"/set-password\" ||\n\t\tpath.startsWith(\"/sign-up\") ||\n\t\tpath.startsWith(\"/sign-in\") ||\n\t\tpath.startsWith(\"/send-sign-in\") ||\n\t\tpath.startsWith(\"/send-security\")\n\t) {\n\t\treturn \"credential\";\n\t}\n\tif (path.startsWith(\"/organization\")) {\n\t\treturn \"organization\";\n\t}\n\tif (path.startsWith(\"/admin/\")) {\n\t\treturn \"admin\";\n\t}\n\tif (path.startsWith(\"/passkey\") || path.includes(\"webauthn\")) {\n\t\treturn \"passkey\";\n\t}\n\tif (\n\t\tpath === \"/token\" ||\n\t\tpath === \"/get-access-token\" ||\n\t\tpath === \"/refresh-token\" ||\n\t\tpath.startsWith(\"/.well-known/\")\n\t) {\n\t\treturn \"token\";\n\t}\n\tif (\n\t\tpath.startsWith(\"/email\") ||\n\t\tpath.startsWith(\"/change-email\") ||\n\t\tpath.includes(\"verification\")\n\t) {\n\t\treturn \"email\";\n\t}\n\tif (\n\t\tpath === \"/get-session\" ||\n\t\tpath === \"/sign-out\" ||\n\t\tpath.includes(\"session\") ||\n\t\tpath.startsWith(\"/authorization\")\n\t) {\n\t\treturn \"session\";\n\t}\n\tif (path === \"/update-user\" || path === \"/list-accounts\") {\n\t\treturn \"user\";\n\t}\n\treturn undefined;\n}\n\nexport function createAuthRouter(deps: AuthRuntimeDependencies) {\n\tconst domains: Record<AuthRouteDomain, AuthRouteHandler[]> = {\n\t\tadmin: [],\n\t\tcredential: [],\n\t\temail: [],\n\t\torganization: [],\n\t\tpasskey: [],\n\t\tsession: [],\n\t\tsocial: [],\n\t\ttoken: [],\n\t\tuser: [],\n\t};\n\n\tfunction route(domain: AuthRouteDomain, handler: AuthRouteHandler) {\n\t\tdomains[domain].push(handler);\n\t}\n\n\troute(\"credential\", async (request, path, method, stores, headers, traceId) =>\n\t\thandleCredentialPasswordRoutes(request, path, method, {\n\t\t\tdeps,\n\t\t\theaders,\n\t\t\tstores,\n\t\t\ttraceId,\n\t\t}),\n\t);\n\troute(\n\t\t\"organization\",\n\t\tasync (request, path, method, stores, headers, traceId) =>\n\t\t\thandleOrganizationInvitationRoutes(request, path, method, {\n\t\t\t\tdeps,\n\t\t\t\theaders,\n\t\t\t\tstores,\n\t\t\t\ttraceId,\n\t\t\t}),\n\t);\n\troute(\"session\", async (request, path, method, stores, headers, traceId) =>\n\t\thandleAuthBridgeRoutes(request, path, method, {\n\t\t\tdeps,\n\t\t\theaders,\n\t\t\tstores,\n\t\t\ttraceId,\n\t\t}),\n\t);\n\troute(\"social\", async (request, path, method, stores, headers, traceId) =>\n\t\thandleSocialRoutes(request, path, method, {\n\t\t\tdeps,\n\t\t\theaders,\n\t\t\tstores,\n\t\t\ttraceId,\n\t\t}),\n\t);\n\n\tconst handleCore = async (\n\t\trequest: Request,\n\t\tpath: string,\n\t\tcurrentStores: AthenaAuthStores,\n\t\theaders: Headers,\n\t\ttraceId: string,\n\t): Promise<Response> => {\n\t\tconst {\n\t\t\tconfig,\n\t\t\thasher,\n\t\t\tmutate,\n\t\t\thookRequest,\n\t\t\tissueSession,\n\t\t\trequireSession,\n\t\t\tresolveSession,\n\t\t\temitMail,\n\t\t\temitIfRecipient,\n\t\t\tidentityOf,\n\t\t\tpasskeyOnboarding,\n\t\t\tpasskeyRelyingParty,\n\t\t\trateLimiter,\n\t\t} = deps;\n\t\tconst database = deps.getDatabase();\n\t\tconst emailStore = deps.getEmailStore();\n\t\tconst delivery = deps.getDelivery();\n\t\tlet tokenAuthority = deps.getTokenAuthority();\n\t\tconst method = request.method.toUpperCase();\n\t\tif (method === \"OPTIONS\") {\n\t\t\theaders.set(\n\t\t\t\t\"Access-Control-Expose-Headers\",\n\t\t\t\t\"Server-Timing, X-Athena-Time, x-athena-trace-id, x-request-id\",\n\t\t\t);\n\t\t\theaders.set(\n\t\t\t\t\"Access-Control-Allow-Headers\",\n\t\t\t\t\"content-type, authorization, cookie, x-athena-sdk, x-athena-trace-id, x-request-id\",\n\t\t\t);\n\t\t\treturn new Response(null, { headers, status: 204 });\n\t\t}\n\t\tif (method === \"HEAD\" && path === \"/ok\") {\n\t\t\treturn new Response(null, { headers, status: 200 });\n\t\t}\n\n\t\tif (path === \"/ok\" && method === \"GET\") {\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{\n\t\t\t\t\tok: true,\n\t\t\t\t\tcapabilities: createEmbeddedCapabilitySnapshot({\n\t\t\t\t\t\tpasskeyEnabled: config.passkey.enabled,\n\t\t\t\t\t\tpasskeyOnboarding: config.passkey.onboardingEnabled,\n\t\t\t\t\t\tsocialProviders: advertisedSocialProviderIds(config.social),\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\t\tif (path === \"/health\" && method === \"GET\") {\n\t\t\tconst schema = database\n\t\t\t\t? await readAthenaAuthSchemaStatus(database)\n\t\t\t\t: toAthenaAuthSchemaCompatibility(ATHENA_AUTH_SCHEMA_GENERATION);\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{\n\t\t\t\t\tschema,\n\t\t\t\t\tservice: \"athena-auth\",\n\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\tversion: PACKAGE_VERSION,\n\t\t\t\t},\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tconst tokenPath =\n\t\t\tpath === \"/get-access-token\" || path === \"/refresh-token\"\n\t\t\t\t? \"/token\"\n\t\t\t\t: path;\n\t\tif (\n\t\t\tpath === \"/token\" ||\n\t\t\tpath === \"/get-access-token\" ||\n\t\t\tpath === \"/refresh-token\" ||\n\t\t\tpath === \"/.well-known/jwks.json\" ||\n\t\t\tpath === \"/.well-known/openid-configuration\"\n\t\t) {\n\t\t\ttokenAuthority ??= await createLocalTokenAuthority({\n\t\t\t\taudiences: [\"athena\", \"neon\"],\n\t\t\t\tissuer: new URL(request.url).origin,\n\t\t\t\ttokenEndpoint: `${new URL(request.url).origin}${config.basePath === \"/\" ? \"\" : config.basePath}/token`,\n\t\t\t});\n\t\t\tdeps.setTokenAuthority(tokenAuthority);\n\t\t\tconst session =\n\t\t\t\ttokenPath === \"/token\"\n\t\t\t\t\t? await resolveSession(request, currentStores)\n\t\t\t\t\t: null;\n\t\t\tconst tokenResponse = await tokenAuthority.handle(\n\t\t\t\ttokenPath,\n\t\t\t\tmethod,\n\t\t\t\trequest,\n\t\t\t\tsession ?? null,\n\t\t\t);\n\t\t\tif (tokenResponse) {\n\t\t\t\treturn tokenResponse;\n\t\t\t}\n\t\t}\n\n\t\tif (path === \"/get-session\" && (method === \"GET\" || method === \"POST\")) {\n\t\t\t// AUTH-ORG-CTX-001: resolveSession heals a stale activeOrganizationId.\n\t\t\tconst resolved = await resolveSession(request, currentStores);\n\t\t\tif (resolved) {\n\t\t\t\tconst authorization = await buildSnapshot(currentStores, resolved);\n\t\t\t\treturn jsonResponse(\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tauthorization,\n\t\t\t\t\t\tgrants: {},\n\t\t\t\t\t\trights: {},\n\t\t\t\t\t\tsession: toPublicSession(resolved.session),\n\t\t\t\t\t\tuser: toPublicUser(resolved.user),\n\t\t\t\t\t},\n\t\t\t\t\theaders,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst apiKeyUser = await resolveApiKeyUser(request, currentStores);\n\t\t\tif (apiKeyUser) {\n\t\t\t\treturn jsonResponse(\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tgrants: {},\n\t\t\t\t\t\trights: {},\n\t\t\t\t\t\tsession: {\n\t\t\t\t\t\t\tid: `api-key:${apiKeyUser.id}`,\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tuserId: apiKeyUser.id,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tuser: toPublicUser(apiKeyUser),\n\t\t\t\t\t},\n\t\t\t\t\theaders,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow AthenaAuthRuntimeError.unauthenticated();\n\t\t}\n\n\t\tif (path === \"/sign-up/email\" && method === \"POST\") {\n\t\t\tif (!config.emailAndPassword.enabled) {\n\t\t\t\tthrow AthenaAuthRuntimeError.forbidden(\n\t\t\t\t\t\"User registration is not enabled\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst email = requireStringField(body, \"email\");\n\t\t\tconst password = requireStringField(body, \"password\");\n\t\t\tvalidatePassword(password, {\n\t\t\t\tmaxLength: config.emailAndPassword.maxPasswordLength,\n\t\t\t\tminLength: config.emailAndPassword.minPasswordLength,\n\t\t\t});\n\t\t\tif (await currentStores.getUserByEmail(email)) {\n\t\t\t\tthrow AthenaAuthRuntimeError.conflict(\n\t\t\t\t\t\"A user with this email already exists\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst hash = await hasher.hash(password);\n\t\t\tconst name = asStringField(body, \"name\") ?? email.split(\"@\")[0] ?? email;\n\t\t\tconst username = asStringField(body, \"username\");\n\t\t\tconst created = await mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: { kind: \"user\" },\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"user.create\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tlet user: AuthUserRow;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tuser = await scope.stores.createUser({\n\t\t\t\t\t\t\temail,\n\t\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\t\tmetadata: withPasswordHash({}, hash),\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tusername,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (isUniqueViolation(error)) {\n\t\t\t\t\t\t\tthrow AthenaAuthRuntimeError.conflict(\n\t\t\t\t\t\t\t\t\"A user with this email already exists\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tawait scope.stores.createAccount({\n\t\t\t\t\t\taccountId: user.id,\n\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\tpassword: hash,\n\t\t\t\t\t\tproviderId: ATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n\t\t\t\t\t\tuserId: user.id,\n\t\t\t\t\t});\n\t\t\t\t\tif (!config.emailAndPassword.autoSignIn) {\n\t\t\t\t\t\treturn { session: undefined, user };\n\t\t\t\t\t}\n\t\t\t\t\tconst session = await issueSession(\n\t\t\t\t\t\trequest,\n\t\t\t\t\t\tscope.stores,\n\t\t\t\t\t\tuser.id,\n\t\t\t\t\t\theaders,\n\t\t\t\t\t);\n\t\t\t\t\tconst refreshed = (await scope.stores.getUserById(user.id)) ?? user;\n\t\t\t\t\treturn { session, user: refreshed };\n\t\t\t\t},\n\t\t\t\tinput: { email, name, username },\n\t\t\t\tresultOf: ({ user }) => ({ user: sanitizeHookUser(user) }),\n\t\t\t\tsecondaryEvents: ({ session }) =>\n\t\t\t\t\tsession\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tevent: \"session.issue\" as const,\n\t\t\t\t\t\t\t\tinput: { userId: session.user_id },\n\t\t\t\t\t\t\t\tresult: { session: sanitizeHookSession(session) },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]\n\t\t\t\t\t\t: [],\n\t\t\t});\n\t\t\tawait emitIfRecipient(created.user.email, {\n\t\t\t\tdata: {\n\t\t\t\t\tuser_name: created.user.name ?? created.user.email ?? created.user.id,\n\t\t\t\t},\n\t\t\t\teventType: authEmailEvents.user.signUp.welcome,\n\t\t\t});\n\t\t\tif (!created.session) {\n\t\t\t\treturn jsonResponse(\n\t\t\t\t\t200,\n\t\t\t\t\t{ session: null, token: null, user: toPublicUser(created.user) },\n\t\t\t\t\theaders,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{\n\t\t\t\t\tsession: toPublicSession(created.session),\n\t\t\t\t\ttoken: created.session.token,\n\t\t\t\t\tuser: toPublicUser(created.user),\n\t\t\t\t},\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\t(path === \"/sign-in/email\" || path === \"/sign-in/username\") &&\n\t\t\tmethod === \"POST\"\n\t\t) {\n\t\t\tconst ip =\n\t\t\t\trequestClientIp(request, config.security.trustedProxy) ?? \"local\";\n\t\t\tif (!rateLimiter.consume(`signin:${ip}`)) {\n\t\t\t\tthrow AthenaAuthRuntimeError.rateLimited();\n\t\t\t}\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst password = requireStringField(body, \"password\");\n\t\t\tconst user =\n\t\t\t\tpath === \"/sign-in/username\"\n\t\t\t\t\t? await currentStores.getUserByUsername(\n\t\t\t\t\t\trequireStringField(body, \"username\"),\n\t\t\t\t\t)\n\t\t\t\t\t: await currentStores.getUserByEmail(\n\t\t\t\t\t\trequireStringField(body, \"email\"),\n\t\t\t\t\t);\n\t\t\tif (!user) {\n\t\t\t\tthrow AthenaAuthRuntimeError.invalidCredentials();\n\t\t\t}\n\t\t\tif (user.banned && !isUserEffectivelyBanned(user)) {\n\t\t\t\tawait currentStores.updateUser(user.id, {\n\t\t\t\t\tbanned: false,\n\t\t\t\t\tbanExpires: null,\n\t\t\t\t\tbanReason: null,\n\t\t\t\t});\n\t\t\t\tuser.banned = false;\n\t\t\t\tuser.ban_expires = null;\n\t\t\t\tuser.ban_reason = null;\n\t\t\t} else if (isUserEffectivelyBanned(user)) {\n\t\t\t\tthrow AthenaAuthRuntimeError.forbidden(\"User is banned\");\n\t\t\t}\n\t\t\tconst storedHash =\n\t\t\t\textractPasswordHash(user.metadata) ??\n\t\t\t\t(await currentStores.listAccounts(user.id)).find(\n\t\t\t\t\t(account) =>\n\t\t\t\t\t\taccount.provider_id === ATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n\t\t\t\t)?.password;\n\t\t\tif (!storedHash || !(await hasher.verify(password, storedHash))) {\n\t\t\t\tthrow AthenaAuthRuntimeError.invalidCredentials();\n\t\t\t}\n\t\t\tif (hasher.needsRehash(storedHash)) {\n\t\t\t\tconst nextHash = await hasher.hash(password);\n\t\t\t\tawait currentStores.updateUser(user.id, {\n\t\t\t\t\tmetadata: withPasswordHash(\n\t\t\t\t\t\ttypeof user.metadata === \"object\" ? user.metadata : {},\n\t\t\t\t\t\tnextHash,\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (user.two_factor_enabled) {\n\t\t\t\tconst pendingToken = `2fa_${crypto.randomUUID()}`;\n\t\t\t\tawait currentStores.createVerification({\n\t\t\t\t\texpiresAt: new Date(Date.now() + 5 * 60 * 1000),\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tidentifier: `2fa_pending:${user.id}`,\n\t\t\t\t\tvalue: pendingToken,\n\t\t\t\t});\n\t\t\t\treturn jsonResponse(\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\ttoken: pendingToken,\n\t\t\t\t\t\ttwoFactorRedirect: true,\n\t\t\t\t\t},\n\t\t\t\t\theaders,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst session = await mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: { kind: \"user\", userId: user.id },\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"session.issue\",\n\t\t\t\texecute: (scope) =>\n\t\t\t\t\tissueSession(request, scope.stores, user.id, headers),\n\t\t\t\tinput: { userId: user.id },\n\t\t\t\tresultOf: (issued) => ({ session: sanitizeHookSession(issued) }),\n\t\t\t});\n\t\t\tconst refreshed = (await currentStores.getUserById(user.id)) ?? user;\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{\n\t\t\t\t\tredirect: false,\n\t\t\t\t\tsession: toPublicSession(session),\n\t\t\t\t\ttoken: session.token,\n\t\t\t\t\turl: null,\n\t\t\t\t\tuser: toPublicUser(refreshed),\n\t\t\t\t},\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/sign-out\" && method === \"POST\") {\n\t\t\tconst token =\n\t\t\t\treadBearerToken(request.headers.get(\"authorization\")) ??\n\t\t\t\treadSessionTokenFromCookies(\n\t\t\t\t\trequest.headers.get(\"cookie\"),\n\t\t\t\t\tconfig.session.cookieName,\n\t\t\t\t);\n\t\t\tif (token) {\n\t\t\t\tconst existing = await currentStores.getSessionByToken(token);\n\t\t\t\tif (existing) {\n\t\t\t\t\tawait mutate({\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tactor: {\n\t\t\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\t\t\tsessionId: existing.id,\n\t\t\t\t\t\t\t\tuserId: existing.user_id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\t\t\ttraceId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tevent: \"session.revoke\",\n\t\t\t\t\t\texecute: async (scope) => {\n\t\t\t\t\t\t\tawait revokeAuthBridgeCodesForSessions(\n\t\t\t\t\t\t\t\tdeps.getBridgeCodeStore(),\n\t\t\t\t\t\t\t\t[existing.id],\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tawait scope.stores.deleteSession(token);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinput: { scope: \"one\", userId: existing.user_id },\n\t\t\t\t\t\tprevious: async () => ({\n\t\t\t\t\t\t\tsession: sanitizeHookSession(existing),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tresultOf: () => ({\n\t\t\t\t\t\t\tid: existing.id,\n\t\t\t\t\t\t\trevoked: true as const,\n\t\t\t\t\t\t\tuserId: existing.user_id,\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\theaders.append(\n\t\t\t\t\"set-cookie\",\n\t\t\t\tcreateClearSessionCookieHeader(\n\t\t\t\t\tconfig.session.cookieName,\n\t\t\t\t\tshouldSetSecureCookie(request, config.security.cookieSecure),\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn jsonResponse(200, { success: true }, headers);\n\t\t}\n\n\t\tif (path === \"/send-sign-in-email\" && method === \"POST\") {\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst email = requireStringField(body, \"email\");\n\t\t\tconst user = await currentStores.getUserByEmail(email);\n\t\t\tif (user?.email) {\n\t\t\t\tconst token = Buffer.from(\n\t\t\t\t\tcrypto.getRandomValues(new Uint8Array(32)),\n\t\t\t\t).toString(\"base64url\");\n\t\t\t\tawait mutate({\n\t\t\t\t\tcontext: {\n\t\t\t\t\t\tactor: { kind: \"user\", userId: user.id },\n\t\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\t\ttraceId,\n\t\t\t\t\t},\n\t\t\t\t\tevent: \"user.sign-in.email\",\n\t\t\t\t\texecute: async (scope) => {\n\t\t\t\t\t\tawait scope.stores.createVerification({\n\t\t\t\t\t\t\texpiresAt: new Date(Date.now() + 15 * 60 * 1000),\n\t\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\t\tidentifier: `magic:${user.email ?? email}`,\n\t\t\t\t\t\t\tvalue: token,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn { email: user.email ?? email };\n\t\t\t\t\t},\n\t\t\t\t\tinput: { email },\n\t\t\t\t\tresultOf: (result) => result,\n\t\t\t\t});\n\t\t\t\tconst origin = new URL(request.url).origin;\n\t\t\t\tconst redirectTo = asStringField(body, \"callbackURL\");\n\t\t\t\tconst signInUrl = tokenizedUrl(\n\t\t\t\t\tredirectTo,\n\t\t\t\t\ttoken,\n\t\t\t\t\torigin,\n\t\t\t\t\t\"/sign-in/magic\",\n\t\t\t\t);\n\t\t\t\tawait emitMail({\n\t\t\t\t\tdata: { sign_in_url: signInUrl },\n\t\t\t\t\teventType: authEmailEvents.user.signIn.email,\n\t\t\t\t\trecipient: user.email,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/send-security-alert\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst alertTitle = requireStringField(body, \"alert_title\");\n\t\t\tconst alertDetails = requireStringField(body, \"alert_details\");\n\t\t\tconst email = asStringField(body, \"email\") ?? resolved.user.email;\n\t\t\tif (!email) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"email is required\");\n\t\t\t}\n\t\t\tif (email !== resolved.user.email && resolved.user.role !== \"admin\") {\n\t\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t\t}\n\t\t\tawait mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"user.security.alert\",\n\t\t\t\texecute: async () => ({ email }),\n\t\t\t\tinput: { alertDetails, alertTitle, email },\n\t\t\t\tresultOf: (result) => result,\n\t\t\t});\n\t\t\tawait emitMail({\n\t\t\t\tdata: {\n\t\t\t\t\talert_details: alertDetails,\n\t\t\t\t\talert_title: alertTitle,\n\t\t\t\t},\n\t\t\t\teventType: authEmailEvents.user.security.alert,\n\t\t\t\trecipient: email,\n\t\t\t});\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/change-password\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst currentPassword = requireStringField(body, \"currentPassword\");\n\t\t\tconst newPassword = requireStringField(body, \"newPassword\");\n\t\t\tvalidatePassword(newPassword, {\n\t\t\t\tmaxLength: config.emailAndPassword.maxPasswordLength,\n\t\t\t\tminLength: config.emailAndPassword.minPasswordLength,\n\t\t\t});\n\t\t\tconst storedHash = extractPasswordHash(resolved.user.metadata);\n\t\t\tif (!storedHash || !(await hasher.verify(currentPassword, storedHash))) {\n\t\t\t\tthrow AthenaAuthRuntimeError.invalidCredentials();\n\t\t\t}\n\t\t\tconst hash = await hasher.hash(newPassword);\n\t\t\tawait mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"user.password.change\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tawait scope.stores.updateUser(resolved.user.id, {\n\t\t\t\t\t\tmetadata: withPasswordHash(\n\t\t\t\t\t\t\ttypeof resolved.user.metadata === \"object\"\n\t\t\t\t\t\t\t\t? resolved.user.metadata\n\t\t\t\t\t\t\t\t: {},\n\t\t\t\t\t\t\thash,\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t\tif (body.revokeOtherSessions) {\n\t\t\t\t\t\tconst others = (\n\t\t\t\t\t\t\tawait scope.stores.listUserSessions(resolved.user.id)\n\t\t\t\t\t\t).filter((session) => session.token !== resolved.token);\n\t\t\t\t\t\tawait revokeAuthBridgeCodesForSessions(\n\t\t\t\t\t\t\tdeps.getBridgeCodeStore(),\n\t\t\t\t\t\t\tothers.map((session) => session.id),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait scope.stores.deleteUserSessions(\n\t\t\t\t\t\t\tresolved.user.id,\n\t\t\t\t\t\t\tresolved.token,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tinput: { userId: resolved.user.id },\n\t\t\t\tresultOf: () => ({ userId: resolved.user.id }),\n\t\t\t});\n\t\t\tawait emitIfRecipient(resolved.user.email, {\n\t\t\t\tdata: {},\n\t\t\t\teventType: authEmailEvents.user.password.changed,\n\t\t\t});\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/set-password\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst newPassword =\n\t\t\t\tasStringField(body, \"newPassword\") ??\n\t\t\t\trequireStringField(body, \"password\");\n\t\t\tvalidatePassword(newPassword, {\n\t\t\t\tmaxLength: config.emailAndPassword.maxPasswordLength,\n\t\t\t\tminLength: config.emailAndPassword.minPasswordLength,\n\t\t\t});\n\t\t\tconst hash = await hasher.hash(newPassword);\n\t\t\tawait mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"user.password.change\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tawait scope.stores.updateUser(resolved.user.id, {\n\t\t\t\t\t\tmetadata: withPasswordHash(\n\t\t\t\t\t\t\ttypeof resolved.user.metadata === \"object\"\n\t\t\t\t\t\t\t\t? resolved.user.metadata\n\t\t\t\t\t\t\t\t: {},\n\t\t\t\t\t\t\thash,\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tinput: { userId: resolved.user.id },\n\t\t\t\tresultOf: () => ({ userId: resolved.user.id }),\n\t\t\t});\n\t\t\tawait emitIfRecipient(resolved.user.email, {\n\t\t\t\tdata: {},\n\t\t\t\teventType: authEmailEvents.user.password.changed,\n\t\t\t});\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/update-user\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst image = asStringField(body, \"image\") ?? undefined;\n\t\t\tconst name = asStringField(body, \"name\");\n\t\t\tconst updated = await mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"user.update\",\n\t\t\t\texecute: (scope) =>\n\t\t\t\t\tscope.stores.updateUser(resolved.user.id, { image, name }),\n\t\t\t\tinput: { image, name, userId: resolved.user.id },\n\t\t\t\tprevious: async () => ({ user: sanitizeHookUser(resolved.user) }),\n\t\t\t\tresultOf: (user) => ({ user: sanitizeHookUser(user) }),\n\t\t\t});\n\t\t\treturn jsonResponse(200, { user: toPublicUser(updated) }, headers);\n\t\t}\n\n\t\tif (path === \"/list-sessions\" && method === \"GET\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst sessions = await currentStores.listUserSessions(resolved.user.id);\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\tsessions.map((session) => toPublicSession(session)),\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/revoke-session\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst token = requireStringField(body, \"token\");\n\t\t\tconst target = await currentStores.getSessionByToken(token);\n\t\t\tif (target && target.user_id !== resolved.user.id) {\n\t\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t\t}\n\t\t\tif (target) {\n\t\t\t\tawait mutate({\n\t\t\t\t\tcontext: {\n\t\t\t\t\t\tactor: {\n\t\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\t\ttraceId,\n\t\t\t\t\t},\n\t\t\t\t\tevent: \"session.revoke\",\n\t\t\t\t\texecute: async (scope) => {\n\t\t\t\t\t\tawait revokeAuthBridgeCodesForSessions(deps.getBridgeCodeStore(), [\n\t\t\t\t\t\t\ttarget.id,\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tawait scope.stores.deleteSession(token);\n\t\t\t\t\t},\n\t\t\t\t\tinput: { scope: \"one\", userId: resolved.user.id },\n\t\t\t\t\tprevious: async () => ({\n\t\t\t\t\t\tsession: sanitizeHookSession(target),\n\t\t\t\t\t}),\n\t\t\t\t\tresultOf: () => ({\n\t\t\t\t\t\tid: target.id,\n\t\t\t\t\t\trevoked: true as const,\n\t\t\t\t\t\tuserId: target.user_id,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/revoke-sessions\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tawait mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"session.revoke\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tconst live = await scope.stores.listUserSessions(resolved.user.id);\n\t\t\t\t\tawait revokeAuthBridgeCodesForSessions(\n\t\t\t\t\t\tdeps.getBridgeCodeStore(),\n\t\t\t\t\t\tlive.map((session) => session.id),\n\t\t\t\t\t);\n\t\t\t\t\tawait scope.stores.deleteUserSessions(resolved.user.id);\n\t\t\t\t\treturn splitPrimaryAndRest(\n\t\t\t\t\t\tlive.map((session) => sanitizeHookSession(session)),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tinput: { scope: \"all\", userId: resolved.user.id },\n\t\t\t\tprevious: async () => ({\n\t\t\t\t\tsession: sanitizeHookSession(resolved.session),\n\t\t\t\t}),\n\t\t\t\tpreviousOf: (partitioned: any) =>\n\t\t\t\t\tpartitioned\n\t\t\t\t\t\t? { session: partitioned.primary }\n\t\t\t\t\t\t: { session: sanitizeHookSession(resolved.session) },\n\t\t\t\tresultOf: (partitioned: any) => {\n\t\t\t\t\tconst primary =\n\t\t\t\t\t\tpartitioned?.primary ?? sanitizeHookSession(resolved.session);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: primary.id,\n\t\t\t\t\t\trevoked: true as const,\n\t\t\t\t\t\tuserId: primary.userId,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tsecondaryEvents: (partitioned: any) =>\n\t\t\t\t\t(partitioned?.rest ?? []).map(\n\t\t\t\t\t\t(session: { id: string; userId: string }) => ({\n\t\t\t\t\t\t\tevent: \"session.revoke\" as const,\n\t\t\t\t\t\t\tinput: { scope: \"all\" as const, userId: resolved.user.id },\n\t\t\t\t\t\t\tprevious: { session },\n\t\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t\tid: session.id,\n\t\t\t\t\t\t\t\trevoked: true as const,\n\t\t\t\t\t\t\t\tuserId: session.userId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\tshouldPersistAudit: (partitioned) => partitioned !== undefined,\n\t\t\t});\n\t\t\theaders.append(\n\t\t\t\t\"set-cookie\",\n\t\t\t\tcreateClearSessionCookieHeader(\n\t\t\t\t\tconfig.session.cookieName,\n\t\t\t\t\tshouldSetSecureCookie(request, config.security.cookieSecure),\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/revoke-other-sessions\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tawait mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"session.revoke\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tconst live = (\n\t\t\t\t\t\tawait scope.stores.listUserSessions(resolved.user.id)\n\t\t\t\t\t).filter((session) => session.token !== resolved.token);\n\t\t\t\t\tawait revokeAuthBridgeCodesForSessions(\n\t\t\t\t\t\tdeps.getBridgeCodeStore(),\n\t\t\t\t\t\tlive.map((session) => session.id),\n\t\t\t\t\t);\n\t\t\t\t\tawait scope.stores.deleteUserSessions(\n\t\t\t\t\t\tresolved.user.id,\n\t\t\t\t\t\tresolved.token,\n\t\t\t\t\t);\n\t\t\t\t\treturn splitPrimaryAndRest(\n\t\t\t\t\t\tlive.map((session) => sanitizeHookSession(session)),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tinput: { scope: \"others\", userId: resolved.user.id },\n\t\t\t\tprevious: async () => ({\n\t\t\t\t\tsession: sanitizeHookSession(resolved.session),\n\t\t\t\t}),\n\t\t\t\tpreviousOf: (partitioned: any) =>\n\t\t\t\t\tpartitioned\n\t\t\t\t\t\t? { session: partitioned.primary }\n\t\t\t\t\t\t: { session: sanitizeHookSession(resolved.session) },\n\t\t\t\tresultOf: (partitioned: any) => {\n\t\t\t\t\tconst primary =\n\t\t\t\t\t\tpartitioned?.primary ?? sanitizeHookSession(resolved.session);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: primary.id,\n\t\t\t\t\t\trevoked: true as const,\n\t\t\t\t\t\tuserId: primary.userId,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tsecondaryEvents: (partitioned: any) =>\n\t\t\t\t\t(partitioned?.rest ?? []).map(\n\t\t\t\t\t\t(session: { id: string; userId: string }) => ({\n\t\t\t\t\t\t\tevent: \"session.revoke\" as const,\n\t\t\t\t\t\t\tinput: { scope: \"others\" as const, userId: resolved.user.id },\n\t\t\t\t\t\t\tprevious: { session },\n\t\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t\tid: session.id,\n\t\t\t\t\t\t\t\trevoked: true as const,\n\t\t\t\t\t\t\t\tuserId: session.userId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\tshouldPersistAudit: (partitioned) => partitioned !== undefined,\n\t\t\t});\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/list-accounts\" && method === \"GET\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst accounts = await currentStores.listAccounts(resolved.user.id);\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\taccounts.map((account) => toPublicAccount(account)),\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/organization/create\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst name = requireStringField(body, \"name\");\n\t\t\tconst slug =\n\t\t\t\tasStringField(body, \"slug\") ??\n\t\t\t\tname\n\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t.replace(/[^a-z0-9]+/g, \"-\")\n\t\t\t\t\t.replace(/^-|-$/g, \"\");\n\t\t\tconst created = await mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"organization.create\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tlet organization: AuthOrganizationRow;\n\t\t\t\t\ttry {\n\t\t\t\t\t\torganization = await scope.stores.createOrganization({\n\t\t\t\t\t\t\tcreatedByUserId: resolved.user.id,\n\t\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tslug,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (isUniqueViolation(error)) {\n\t\t\t\t\t\t\tthrow AthenaAuthRuntimeError.conflict(\n\t\t\t\t\t\t\t\t\"Organization slug already exists\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tconst member = await scope.stores.addMember({\n\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\torganizationId: organization.id,\n\t\t\t\t\t\trole: \"owner\",\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t});\n\t\t\t\t\tawait scope.stores.setSessionActiveOrganization(\n\t\t\t\t\t\tresolved.token,\n\t\t\t\t\t\torganization.id,\n\t\t\t\t\t);\n\t\t\t\t\treturn { member, organization };\n\t\t\t\t},\n\t\t\t\tinput: { name, slug },\n\t\t\t\tresultOf: ({ member, organization }) => ({\n\t\t\t\t\tmember: sanitizeHookMember(member),\n\t\t\t\t\torganization: sanitizeHookOrganization(organization),\n\t\t\t\t}),\n\t\t\t});\n\t\t\tawait emitIfRecipient(resolved.user.email, {\n\t\t\t\tdata: { organization_name: created.organization.name },\n\t\t\t\teventType: authEmailEvents.organization.created,\n\t\t\t});\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{ organization: toPublicOrganization(created.organization) },\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/organization/list\" && method === \"GET\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst organizations = await currentStores.listOrganizationsForUser(\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\torganizations.map((organization) => toPublicOrganization(organization)),\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/organization/get-full-organization\" && method === \"GET\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst url = new URL(request.url);\n\t\t\tconst organizationId =\n\t\t\t\turl.searchParams.get(\"organizationId\") ??\n\t\t\t\tresolved.session.active_organization_id;\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t\t}\n\t\t\tconst member = await timeAuthSpan(\"authz\", () =>\n\t\t\t\tcurrentStores.getMember(organizationId, resolved.user.id),\n\t\t\t);\n\t\t\tif (!member) {\n\t\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t\t}\n\t\t\tconst [organization, members] = await Promise.all([\n\t\t\t\ttimeAuthSpan(\"org_lookup\", () =>\n\t\t\t\t\tcurrentStores.getOrganization(organizationId),\n\t\t\t\t),\n\t\t\t\tcurrentStores.listMembers(organizationId),\n\t\t\t]);\n\t\t\tif (!organization) {\n\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Organization not found\");\n\t\t\t}\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{\n\t\t\t\t\t...toPublicOrganization(organization),\n\t\t\t\t\tmembers: await toPublicMembersWithUsers(members, (id) =>\n\t\t\t\t\t\tcurrentStores.getUserById(id),\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/organization/update\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst organizationId =\n\t\t\t\tasStringField(body, \"organizationId\") ??\n\t\t\t\tresolved.session.active_organization_id;\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t\t}\n\t\t\tconst member = await currentStores.getMember(\n\t\t\t\torganizationId,\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\tawait requireOrgMemberManager(\n\t\t\t\tcurrentStores,\n\t\t\t\tresolved.user.id,\n\t\t\t\torganizationId,\n\t\t\t\tmember,\n\t\t\t);\n\t\t\tconst name = asDataEnvelopeStringField(body, \"name\");\n\t\t\tconst slug = asDataEnvelopeStringField(body, \"slug\");\n\t\t\tconst rawLogo =\n\t\t\t\tasDataEnvelopeStringField(body, \"logo\") ??\n\t\t\t\tasDataEnvelopeStringField(body, \"image\");\n\t\t\tconst logo =\n\t\t\t\trawLogo === undefined ? undefined : rawLogo === \"\" ? null : rawLogo;\n\t\t\tconst organization = await mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"organization.update\",\n\t\t\t\texecute: (scope) =>\n\t\t\t\t\tscope.stores.updateOrganization(organizationId, {\n\t\t\t\t\t\tlogo,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tslug,\n\t\t\t\t\t}),\n\t\t\t\tinput: {\n\t\t\t\t\tlogo,\n\t\t\t\t\tname,\n\t\t\t\t\torganizationId,\n\t\t\t\t\tslug,\n\t\t\t\t},\n\t\t\t\tprevious: async () => {\n\t\t\t\t\tconst existing = await currentStores.getOrganization(organizationId);\n\t\t\t\t\tif (!existing) {\n\t\t\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Organization not found\");\n\t\t\t\t\t}\n\t\t\t\t\treturn { organization: sanitizeHookOrganization(existing) };\n\t\t\t\t},\n\t\t\t\tresultOf: (row) => ({\n\t\t\t\t\torganization: sanitizeHookOrganization(row),\n\t\t\t\t}),\n\t\t\t});\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{ organization: toPublicOrganization(organization) },\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/organization/delete\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst organizationId = requireStringField(body, \"organizationId\");\n\t\t\tconst member = await currentStores.getMember(\n\t\t\t\torganizationId,\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\tawait requireOrgDelete(\n\t\t\t\tcurrentStores,\n\t\t\t\tresolved.user.id,\n\t\t\t\torganizationId,\n\t\t\t\tmember,\n\t\t\t);\n\t\t\tawait mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"organization.delete\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tawait scope.stores.clearOrganizationActiveSessions(organizationId);\n\t\t\t\t\tawait scope.stores.deleteOrganization(organizationId);\n\t\t\t\t},\n\t\t\t\tinput: { organizationId },\n\t\t\t\tprevious: async () => {\n\t\t\t\t\tconst existing = await currentStores.getOrganization(organizationId);\n\t\t\t\t\tif (!existing) {\n\t\t\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Organization not found\");\n\t\t\t\t\t}\n\t\t\t\t\treturn { organization: sanitizeHookOrganization(existing) };\n\t\t\t\t},\n\t\t\t\tresultOf: () => ({\n\t\t\t\t\tdeleted: true as const,\n\t\t\t\t\tid: organizationId,\n\t\t\t\t}),\n\t\t\t});\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/organization/set-active\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst organizationId = asStringField(body, \"organizationId\") ?? null;\n\t\t\tif (\n\t\t\t\torganizationId === (resolved.session.active_organization_id ?? null)\n\t\t\t) {\n\t\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t\t}\n\t\t\tif (organizationId) {\n\t\t\t\tconst member = await currentStores.getMember(\n\t\t\t\t\torganizationId,\n\t\t\t\t\tresolved.user.id,\n\t\t\t\t);\n\t\t\t\tif (!member) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\torganizationId: organizationId ?? undefined,\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"session.activeOrganization.update\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tawait scope.stores.setSessionActiveOrganization(\n\t\t\t\t\t\tresolved.token,\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tinput: { organizationId },\n\t\t\t\tprevious: async () => ({\n\t\t\t\t\torganizationId: resolved.session.active_organization_id,\n\t\t\t\t}),\n\t\t\t\tresultOf: () => ({ organizationId }),\n\t\t\t});\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/organization/list-members\" && method === \"GET\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst organizationId =\n\t\t\t\tnew URL(request.url).searchParams.get(\"organizationId\") ??\n\t\t\t\tresolved.session.active_organization_id;\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t\t}\n\t\t\tconst member = await timeAuthSpan(\"authz\", () =>\n\t\t\t\tcurrentStores.getMember(organizationId, resolved.user.id),\n\t\t\t);\n\t\t\tif (!member) {\n\t\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t\t}\n\t\t\tconst members = await currentStores.listMembers(organizationId);\n\t\t\tconst organization = await currentStores.getOrganization(organizationId);\n\t\t\tconst foundingOwnerUserId = resolveFoundingOwnerUserId(\n\t\t\t\torganization,\n\t\t\t\tmembers,\n\t\t\t);\n\t\t\tconst annotated = await Promise.all(\n\t\t\t\tmembers.map(async (row) => {\n\t\t\t\t\tconst actions = await currentStores.authorization.annotateMember(\n\t\t\t\t\t\trow,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfoundingOwnerUserId,\n\t\t\t\t\t\t\tgetMember: (orgId, userId) =>\n\t\t\t\t\t\t\t\tcurrentStores.getMember(orgId, userId),\n\t\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tconst user = await currentStores.getUserById(row.user_id);\n\t\t\t\t\treturn toPublicMember(row, user, actions);\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{\n\t\t\t\t\tmembers: annotated,\n\t\t\t\t},\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/organization/add-member\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst organizationId =\n\t\t\t\tasStringField(body, \"organizationId\") ??\n\t\t\t\tresolved.session.active_organization_id;\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t\t}\n\t\t\tconst actor = await currentStores.getMember(\n\t\t\t\torganizationId,\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\tawait requireOrgMemberManager(\n\t\t\t\tcurrentStores,\n\t\t\t\tresolved.user.id,\n\t\t\t\torganizationId,\n\t\t\t\tactor,\n\t\t\t);\n\t\t\tconst userId = requireStringField(body, \"userId\");\n\t\t\tconst requestedRole = asStringField(body, \"role\") ?? \"member\";\n\t\t\tconst granted = await requireOrganizationRoleGrant(\n\t\t\t\tcurrentStores,\n\t\t\t\tresolved.user.id,\n\t\t\t\torganizationId,\n\t\t\t\tactor,\n\t\t\t\trequestedRole,\n\t\t\t\t{ role: \"member\", userId },\n\t\t\t);\n\t\t\tconst role = granted.persistedRole;\n\t\t\tif (await currentStores.getMember(organizationId, userId)) {\n\t\t\t\tthrow AthenaAuthRuntimeError.conflict(\"Member already exists\");\n\t\t\t}\n\t\t\tconst addedUser = await currentStores.getUserById(userId);\n\t\t\tif (!addedUser) {\n\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\t\t}\n\t\t\tconst member = await mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"organization.member.add\",\n\t\t\t\texecute: (scope) =>\n\t\t\t\t\tscope.stores.addMember({\n\t\t\t\t\t\tassignedBy: resolved.user.id,\n\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\trole,\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t}),\n\t\t\t\tinput: { organizationId, role, userId },\n\t\t\t\tresultOf: (row) => ({ member: sanitizeHookMember(row) }),\n\t\t\t});\n\t\t\tconst addedOrg = await currentStores.getOrganization(organizationId);\n\t\t\tawait emitIfRecipient(addedUser.email, {\n\t\t\t\tdata: {\n\t\t\t\t\tactor_identity: identityOf(resolved.user),\n\t\t\t\t\tmember_identity: identityOf(addedUser),\n\t\t\t\t\torganization_name: addedOrg?.name ?? \"organization\",\n\t\t\t\t},\n\t\t\t\teventType: authEmailEvents.organization.member.added,\n\t\t\t});\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{ member: toPublicMember(member, addedUser) },\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/organization/remove-member\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst organizationId =\n\t\t\t\tasStringField(body, \"organizationId\") ??\n\t\t\t\tresolved.session.active_organization_id;\n\t\t\tconst memberIdOrUserId =\n\t\t\t\tasStringField(body, \"memberIdOrEmail\") ??\n\t\t\t\trequireStringField(body, \"memberId\");\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t\t}\n\t\t\tconst actor = await currentStores.getMember(\n\t\t\t\torganizationId,\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\tawait requireOrgMemberManager(\n\t\t\t\tcurrentStores,\n\t\t\t\tresolved.user.id,\n\t\t\t\torganizationId,\n\t\t\t\tactor,\n\t\t\t);\n\t\t\tconst members = await currentStores.listMembers(organizationId);\n\t\t\tconst target =\n\t\t\t\tmembers.find((item) => item.id === memberIdOrUserId) ??\n\t\t\t\tmembers.find((item) => item.user_id === memberIdOrUserId);\n\t\t\tif (!target) {\n\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Member not found\");\n\t\t\t}\n\t\t\tconst organization = await currentStores.getOrganization(organizationId);\n\t\t\tassertFoundingOwnerMutationAllowed({\n\t\t\t\tkind: \"remove\",\n\t\t\t\tmembers,\n\t\t\t\torganization,\n\t\t\t\ttargetUserId: target.user_id,\n\t\t\t});\n\t\t\tassertLastOwnerMutationAllowed({\n\t\t\t\tkind: \"remove\",\n\t\t\t\tmembers,\n\t\t\t\ttargetUserId: target.user_id,\n\t\t\t});\n\t\t\tawait mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"organization.member.remove\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tawait scope.stores.removeMember(organizationId, target.user_id);\n\t\t\t\t\tawait scope.stores.clearUserActiveOrganization(\n\t\t\t\t\t\ttarget.user_id,\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tinput: { organizationId, userId: target.user_id },\n\t\t\t\tprevious: async () => ({ member: sanitizeHookMember(target) }),\n\t\t\t\tresultOf: () => ({\n\t\t\t\t\tdeleted: true as const,\n\t\t\t\t\tid: target.id,\n\t\t\t\t\torganizationId,\n\t\t\t\t\tuserId: target.user_id,\n\t\t\t\t}),\n\t\t\t});\n\t\t\tconst removedUser = await currentStores.getUserById(target.user_id);\n\t\t\tconst removedOrg = await currentStores.getOrganization(organizationId);\n\t\t\tawait emitIfRecipient(removedUser?.email, {\n\t\t\t\tdata: {\n\t\t\t\t\tactor_identity: identityOf(resolved.user),\n\t\t\t\t\tmember_identity: identityOf(removedUser ?? { id: target.user_id }),\n\t\t\t\t\torganization_name: removedOrg?.name ?? \"organization\",\n\t\t\t\t},\n\t\t\t\teventType: authEmailEvents.organization.member.removed,\n\t\t\t});\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/organization/update-member-role\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst organizationId =\n\t\t\t\tasStringField(body, \"organizationId\") ??\n\t\t\t\tresolved.session.active_organization_id;\n\t\t\tconst role = requireStringField(body, \"role\");\n\t\t\tconst memberId = requireStringField(body, \"memberId\");\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t\t}\n\t\t\tconst actor = await currentStores.getMember(\n\t\t\t\torganizationId,\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\tawait requireOrgMemberManager(\n\t\t\t\tcurrentStores,\n\t\t\t\tresolved.user.id,\n\t\t\t\torganizationId,\n\t\t\t\tactor,\n\t\t\t);\n\t\t\tconst members = await currentStores.listMembers(organizationId);\n\t\t\tconst target =\n\t\t\t\tmembers.find((item) => item.id === memberId) ??\n\t\t\t\tmembers.find((item) => item.user_id === memberId);\n\t\t\tif (!target) {\n\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Member not found\");\n\t\t\t}\n\t\t\tconst organization = await currentStores.getOrganization(organizationId);\n\t\t\tconst granted = await requireOrganizationRoleGrant(\n\t\t\t\tcurrentStores,\n\t\t\t\tresolved.user.id,\n\t\t\t\torganizationId,\n\t\t\t\tactor,\n\t\t\t\trole,\n\t\t\t\t{ role: target.role, userId: target.user_id },\n\t\t\t);\n\t\t\tassertFoundingOwnerMutationAllowed({\n\t\t\t\tkind: \"role\",\n\t\t\t\tmembers,\n\t\t\t\tnextRole: granted.persistedRole,\n\t\t\t\torganization,\n\t\t\t\ttargetUserId: target.user_id,\n\t\t\t});\n\t\t\tassertLastOwnerMutationAllowed({\n\t\t\t\tkind: \"role\",\n\t\t\t\tmembers,\n\t\t\t\tnextRole: granted.persistedRole,\n\t\t\t\ttargetUserId: target.user_id,\n\t\t\t});\n\t\t\tconst updated = await mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"organization.member.role.update\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tconst next = await scope.stores.updateMemberRole(\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\ttarget.user_id,\n\t\t\t\t\t\tgranted.persistedRole,\n\t\t\t\t\t);\n\t\t\t\t\treturn next ?? target;\n\t\t\t\t},\n\t\t\t\tinput: { memberId: target.id, organizationId, role: granted.persistedRole },\n\t\t\t\tprevious: async () => ({ role: target.role }),\n\t\t\t\tresultOf: (member) => ({ member: sanitizeHookMember(member) }),\n\t\t\t});\n\t\t\tconst roleUser = await currentStores.getUserById(target.user_id);\n\t\t\tconst roleOrg = await currentStores.getOrganization(organizationId);\n\t\t\tawait emitIfRecipient(roleUser?.email, {\n\t\t\t\tdata: {\n\t\t\t\t\tactor_identity: identityOf(resolved.user),\n\t\t\t\t\tmember_identity: identityOf(roleUser ?? { id: target.user_id }),\n\t\t\t\t\tnew_role: granted.persistedRole,\n\t\t\t\t\torganization_name: roleOrg?.name ?? \"organization\",\n\t\t\t\t\tprevious_role: target.role,\n\t\t\t\t},\n\t\t\t\teventType: authEmailEvents.organization.member.roleUpdated,\n\t\t\t});\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{\n\t\t\t\t\tmember: await toPublicMemberWithUser(updated, (id) =>\n\t\t\t\t\t\tcurrentStores.getUserById(id),\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/organization/leave\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst organizationId =\n\t\t\t\tasStringField(body, \"organizationId\") ??\n\t\t\t\tresolved.session.active_organization_id;\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t\t}\n\t\t\tconst leaving = await currentStores.getMember(\n\t\t\t\torganizationId,\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\tif (!leaving) {\n\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Member not found\");\n\t\t\t}\n\t\t\tconst [organization, members] = await Promise.all([\n\t\t\t\tcurrentStores.getOrganization(organizationId),\n\t\t\t\tcurrentStores.listMembers(organizationId),\n\t\t\t]);\n\t\t\tassertFoundingOwnerMutationAllowed({\n\t\t\t\tkind: \"leave\",\n\t\t\t\tmembers,\n\t\t\t\torganization,\n\t\t\t\ttargetUserId: resolved.user.id,\n\t\t\t});\n\t\t\tassertLastOwnerMutationAllowed({\n\t\t\t\tkind: \"leave\",\n\t\t\t\tmembers,\n\t\t\t\ttargetUserId: resolved.user.id,\n\t\t\t});\n\t\t\tawait mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: {\n\t\t\t\t\t\tkind: \"user\",\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t},\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"organization.member.remove\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tawait scope.stores.removeMember(organizationId, resolved.user.id);\n\t\t\t\t\tawait scope.stores.clearUserActiveOrganization(\n\t\t\t\t\t\tresolved.user.id,\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tinput: { organizationId, userId: resolved.user.id },\n\t\t\t\tprevious: async () => ({ member: sanitizeHookMember(leaving) }),\n\t\t\t\tresultOf: () => ({\n\t\t\t\t\tdeleted: true as const,\n\t\t\t\t\tid: leaving.id,\n\t\t\t\t\torganizationId,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t}),\n\t\t\t});\n\t\t\tconst leftOrg = await currentStores.getOrganization(organizationId);\n\t\t\tawait emitIfRecipient(resolved.user.email, {\n\t\t\t\tdata: {\n\t\t\t\t\tactor_identity: identityOf(resolved.user),\n\t\t\t\t\tmember_identity: identityOf(resolved.user),\n\t\t\t\t\torganization_name: leftOrg?.name ?? \"organization\",\n\t\t\t\t},\n\t\t\t\teventType: authEmailEvents.organization.member.removed,\n\t\t\t});\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\t\tif (path === \"/organization/check-slug\" && method === \"POST\") {\n\t\t\tawait requireSession(request, currentStores);\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst slug = requireStringField(body, \"slug\");\n\t\t\tconst existing = await currentStores.getOrganizationBySlug(slug);\n\t\t\treturn jsonResponse(200, { status: !existing }, headers);\n\t\t}\n\n\t\tif (path === \"/organization/has-permission\" && method === \"POST\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst organizationId =\n\t\t\t\tasStringField(\n\t\t\t\t\tawait readJsonBody(request, config.security.bodyLimitBytes).catch(\n\t\t\t\t\t\t() => ({}),\n\t\t\t\t\t),\n\t\t\t\t\t\"organizationId\",\n\t\t\t\t) ?? resolved.session.active_organization_id;\n\t\t\tif (!organizationId) {\n\t\t\t\treturn jsonResponse(\n\t\t\t\t\t200,\n\t\t\t\t\t{ success: false, error: \"No organization\" },\n\t\t\t\t\theaders,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst member = await currentStores.getMember(\n\t\t\t\torganizationId,\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{ success: Boolean(member), error: member ? undefined : \"Forbidden\" },\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tif (path === \"/organization/get-active-member\" && method === \"GET\") {\n\t\t\tconst resolved = await requireSession(request, currentStores);\n\t\t\tconst organizationId = resolved.session.active_organization_id;\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"No active organization\");\n\t\t\t}\n\t\t\tconst member = await currentStores.getMember(\n\t\t\t\torganizationId,\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\tif (!member) {\n\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Member not found\");\n\t\t\t}\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{\n\t\t\t\t\tmember: await toPublicMemberWithUser(member, (id) =>\n\t\t\t\t\t\tcurrentStores.getUserById(id),\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\n\t\tconst relatedOrigins = await handleRelatedOriginsRoute(\n\t\t\trequest,\n\t\t\tpath,\n\t\t\tmethod,\n\t\t\t{\n\t\t\t\theaders,\n\t\t\t\trelyingParty: passkeyRelyingParty,\n\t\t\t},\n\t\t);\n\t\tif (relatedOrigins) {\n\t\t\treturn relatedOrigins;\n\t\t}\n\n\t\tconst registerOptions = await handleGenerateRegisterOptionsRoute(\n\t\t\trequest,\n\t\t\tpath,\n\t\t\tmethod,\n\t\t\t{\n\t\t\t\tconfig,\n\t\t\t\theaders,\n\t\t\t\trelyingParty: passkeyRelyingParty,\n\t\t\t\tresolveSession,\n\t\t\t\tstores: currentStores,\n\t\t\t},\n\t\t);\n\t\tif (registerOptions) {\n\t\t\treturn registerOptions;\n\t\t}\n\n\t\tconst authenticateOptions = await handleGenerateAuthenticateOptionsRoute(\n\t\t\trequest,\n\t\t\tpath,\n\t\t\tmethod,\n\t\t\t{\n\t\t\t\tconfig,\n\t\t\t\theaders,\n\t\t\t\trelyingParty: passkeyRelyingParty,\n\t\t\t\tresolveSession,\n\t\t\t\tstores: currentStores,\n\t\t\t},\n\t\t);\n\t\tif (authenticateOptions) {\n\t\t\treturn authenticateOptions;\n\t\t}\n\n\t\tconst verifyRegistration = await handleVerifyRegistrationRoute(\n\t\t\trequest,\n\t\t\tpath,\n\t\t\tmethod,\n\t\t\t{\n\t\t\t\tconfig,\n\t\t\t\theaders,\n\t\t\t\thookRequest,\n\t\t\t\tissueSession: (authRequest, authStores, userId) =>\n\t\t\t\t\tissueSession(authRequest, authStores, userId, headers),\n\t\t\t\tmutate,\n\t\t\t\trelyingParty: passkeyRelyingParty,\n\t\t\t\tresolveOnboardingUser:\n\t\t\t\t\tpasskeyOnboarding && typeof passkeyOnboarding === \"object\"\n\t\t\t\t\t\t? passkeyOnboarding.resolveUser\n\t\t\t\t\t\t: undefined,\n\t\t\t\tresolveSession,\n\t\t\t\tstores: currentStores,\n\t\t\t\ttraceId,\n\t\t\t},\n\t\t);\n\t\tif (verifyRegistration) {\n\t\t\treturn verifyRegistration;\n\t\t}\n\n\t\tconst verifyAuthentication = await handleVerifyAuthenticationRoute(\n\t\t\trequest,\n\t\t\tpath,\n\t\t\tmethod,\n\t\t\t{\n\t\t\t\tconfig,\n\t\t\t\theaders,\n\t\t\t\thookRequest,\n\t\t\t\tissueSession: (authRequest, stores, userId) =>\n\t\t\t\t\tissueSession(authRequest, stores, userId, headers),\n\t\t\t\tmutate,\n\t\t\t\trelyingParty: passkeyRelyingParty,\n\t\t\t\tstores: currentStores,\n\t\t\t\ttraceId,\n\t\t\t},\n\t\t);\n\t\tif (verifyAuthentication) {\n\t\t\treturn verifyAuthentication;\n\t\t}\n\n\t\tconst listPasskeys = await handleListUserPasskeysRoute(\n\t\t\trequest,\n\t\t\tpath,\n\t\t\tmethod,\n\t\t\t{\n\t\t\t\tconfig,\n\t\t\t\theaders,\n\t\t\t\thookRequest,\n\t\t\t\tmutate,\n\t\t\t\trequireSession,\n\t\t\t\tstores: currentStores,\n\t\t\t\ttraceId,\n\t\t\t},\n\t\t);\n\t\tif (listPasskeys) {\n\t\t\treturn listPasskeys;\n\t\t}\n\n\t\tconst deletePasskey = await handleDeletePasskeyRoute(\n\t\t\trequest,\n\t\t\tpath,\n\t\t\tmethod,\n\t\t\t{\n\t\t\t\tconfig,\n\t\t\t\theaders,\n\t\t\t\thookRequest,\n\t\t\t\tmutate,\n\t\t\t\trequireSession,\n\t\t\t\tstores: currentStores,\n\t\t\t\ttraceId,\n\t\t\t},\n\t\t);\n\t\tif (deletePasskey) {\n\t\t\treturn deletePasskey;\n\t\t}\n\n\t\tconst updatePasskey = await handleUpdatePasskeyRoute(\n\t\t\trequest,\n\t\t\tpath,\n\t\t\tmethod,\n\t\t\t{\n\t\t\t\tconfig,\n\t\t\t\theaders,\n\t\t\t\thookRequest,\n\t\t\t\tmutate,\n\t\t\t\trequireSession,\n\t\t\t\tstores: currentStores,\n\t\t\t\ttraceId,\n\t\t\t},\n\t\t);\n\t\tif (updatePasskey) {\n\t\t\treturn updatePasskey;\n\t\t}\n\n\t\tconst userMail = await handleUserMailRoutes(request, path, method, {\n\t\t\temailStore,\n\t\t\theaders,\n\t\t\thookRequest,\n\t\t\tmutate,\n\t\t\trequireSession,\n\t\t\tstores: currentStores,\n\t\t\ttraceId,\n\t\t});\n\t\tif (userMail) {\n\t\t\treturn userMail;\n\t\t}\n\n\t\tconst emailAdmin = await handleAdminEmailRoutes(request, path, method, {\n\t\t\temailStore,\n\t\t\theaders,\n\t\t\tdelivery,\n\t\t\trequireSession,\n\t\t\tstores: currentStores,\n\t\t});\n\t\tif (emailAdmin) {\n\t\t\treturn emailAdmin;\n\t\t}\n\n\t\tconst authorizationResponse = await handleAuthorizationRoute(\n\t\t\trequest,\n\t\t\tpath,\n\t\t\tmethod,\n\t\t\tcurrentStores,\n\t\t\theaders,\n\t\t\trequireSession,\n\t\t\tconfig.security.bodyLimitBytes,\n\t\t);\n\t\tif (authorizationResponse) {\n\t\t\treturn authorizationResponse;\n\t\t}\n\n\t\tconst adminStore = database\n\t\t\t? new PostgresAdminAuthStore(database)\n\t\t\t: currentStores instanceof MemoryAuthStores\n\t\t\t\t? new MemoryAdminAuthStore(currentStores)\n\t\t\t\t: undefined;\n\t\tif (adminStore && path.startsWith(\"/admin/\")) {\n\t\t\tconst adminResponse = await handleAdminRoute(request, path, method, {\n\t\t\t\tconfig,\n\t\t\t\thasher,\n\t\t\t\theaders,\n\t\t\t\thookRequest,\n\t\t\t\tissueSession: (adminRequest, stores, userId) =>\n\t\t\t\t\tissueSession(adminRequest, stores, userId, headers),\n\t\t\t\tlistSessionsForUser: (userId) => currentStores.listUserSessions(userId),\n\t\t\t\tmutate,\n\t\t\t\trequireSession: (adminRequest) =>\n\t\t\t\t\trequireSession(adminRequest, currentStores),\n\t\t\t\trevokeBridgeCodesForUser: async (userId, exceptToken) => {\n\t\t\t\t\tconst sessions = await currentStores.listUserSessions(userId);\n\t\t\t\t\tawait revokeAuthBridgeCodesForSessions(\n\t\t\t\t\t\tdeps.getBridgeCodeStore(),\n\t\t\t\t\t\tsessions\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(session) => !exceptToken || session.token !== exceptToken,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map((session) => session.id),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tstore: adminStore,\n\t\t\t\ttraceId,\n\t\t\t});\n\t\t\tif (adminResponse) {\n\t\t\t\treturn adminResponse;\n\t\t\t}\n\t\t}\n\n\t\tconst extended = await handleExtendedRoute(request, path, method, {\n\t\t\tconfig,\n\t\t\temitMail,\n\t\t\tgetBridgeCodeStore: deps.getBridgeCodeStore,\n\t\t\thasher,\n\t\t\theaders,\n\t\t\thookRequest,\n\t\t\tissueSession,\n\t\t\tmutate,\n\t\t\trequireSession,\n\t\t\tstores: currentStores,\n\t\t\ttraceId,\n\t\t});\n\t\tif (extended) {\n\t\t\treturn extended;\n\t\t}\n\n\t\tthrow AthenaAuthRuntimeError.notFound(\"Not found\");\n\t};\n\n\tconst handleRoute = async (\n\t\trequest: Request,\n\t\tpath: string,\n\t\tcurrentStores: AthenaAuthStores,\n\t\theaders: Headers,\n\t\ttraceId: string,\n\t): Promise<Response> => {\n\t\tconst method = request.method.toUpperCase();\n\t\tif (method === \"OPTIONS\") {\n\t\t\theaders.set(\n\t\t\t\t\"Access-Control-Expose-Headers\",\n\t\t\t\t\"Server-Timing, X-Athena-Time, x-athena-trace-id, x-request-id\",\n\t\t\t);\n\t\t\theaders.set(\n\t\t\t\t\"Access-Control-Allow-Headers\",\n\t\t\t\t\"content-type, authorization, cookie, x-athena-sdk, x-athena-trace-id, x-request-id\",\n\t\t\t);\n\t\t\treturn new Response(null, { headers, status: 204 });\n\t\t}\n\n\t\tconst domain = resolveAuthRouteDomain(path);\n\t\tif (domain) {\n\t\t\tfor (const handler of domains[domain]) {\n\t\t\t\tconst response = await handler(\n\t\t\t\t\trequest,\n\t\t\t\t\tpath,\n\t\t\t\t\tmethod,\n\t\t\t\t\tcurrentStores,\n\t\t\t\t\theaders,\n\t\t\t\t\ttraceId,\n\t\t\t\t);\n\t\t\t\tif (response) {\n\t\t\t\t\treturn response;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn handleCore(request, path, currentStores, headers, traceId);\n\t};\n\n\treturn { handleRoute, route };\n}\n","import type { AuthApiKeyRow } from \"./stores.ts\";\n\nconst START_LENGTH = 6;\n\nexport async function sha256Base64Url(value: string): Promise<string> {\n\tconst digest = new Uint8Array(\n\t\tawait crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(value)),\n\t);\n\treturn Buffer.from(digest).toString(\"base64url\");\n}\n\nexport async function generateApiKey(prefix?: string): Promise<{\n\tfullKey: string;\n\thash: string;\n\tstart: string;\n}> {\n\tconst raw = Buffer.from(crypto.getRandomValues(new Uint8Array(32))).toString(\n\t\t\"base64url\",\n\t);\n\tconst start = raw.slice(0, START_LENGTH);\n\tconst fullKey = `${prefix ?? \"\"}${raw}`;\n\treturn {\n\t\tfullKey,\n\t\thash: await sha256Base64Url(fullKey),\n\t\tstart,\n\t};\n}\n\nexport function toPublicApiKey(\n\trow: AuthApiKeyRow,\n\tfullKey?: string,\n): Record<string, unknown> {\n\treturn {\n\t\tcreatedAt:\n\t\t\trow.created_at instanceof Date\n\t\t\t\t? row.created_at.toISOString()\n\t\t\t\t: new Date(row.created_at).toISOString(),\n\t\tenabled: Boolean(row.enabled),\n\t\texpiresAt: row.expires_at\n\t\t\t? row.expires_at instanceof Date\n\t\t\t\t? row.expires_at.toISOString()\n\t\t\t\t: new Date(row.expires_at).toISOString()\n\t\t\t: null,\n\t\tid: row.id,\n\t\tkey: fullKey,\n\t\tlastRequest: row.last_request\n\t\t\t? row.last_request instanceof Date\n\t\t\t\t? row.last_request.toISOString()\n\t\t\t\t: new Date(row.last_request).toISOString()\n\t\t\t: null,\n\t\tmetadata: row.metadata ? safeJson(row.metadata) : null,\n\t\tname: row.name,\n\t\tpermissions: row.permissions ? safeJson(row.permissions) : null,\n\t\tprefix: row.prefix,\n\t\tremaining: row.remaining,\n\t\tstart: row.start,\n\t\tupdatedAt:\n\t\t\trow.updated_at instanceof Date\n\t\t\t\t? row.updated_at.toISOString()\n\t\t\t\t: new Date(row.updated_at).toISOString(),\n\t\tuserId: row.user_id,\n\t};\n}\n\nfunction safeJson(value: string): unknown {\n\ttry {\n\t\treturn JSON.parse(value);\n\t} catch {\n\t\treturn value;\n\t}\n}\n\nexport function isApiKeyExpired(row: AuthApiKeyRow): boolean {\n\tif (!row.expires_at) {\n\t\treturn false;\n\t}\n\treturn new Date(row.expires_at).getTime() <= Date.now();\n}\n","export 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  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(\n  row: object,\n  snake: string,\n  camel: string,\n): 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 { toPublicApiKey } from \"../local/api-key.ts\";\nimport type {\n\tAuthAccountRow,\n\tAuthInvitationRow,\n\tAuthMemberRow,\n\tAuthOrganizationRow,\n\tAuthSessionRow,\n\tAuthUserRow,\n} from \"../local/models.ts\";\nimport {\n\ttoPublicInvitation,\n\ttoPublicMember,\n\ttoPublicOrganization,\n\ttoPublicUser,\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 type AthenaAuthHookAccount = {\n\taccountId: string;\n\tid: string;\n\tproviderId: string;\n\tuserId: string;\n};\n\nfunction firstString(\n\trow: Record<string, unknown>,\n\tkeys: readonly string[],\n): string {\n\tfor (const key of keys) {\n\t\tconst value = row[key];\n\t\tif (typeof value === \"string\" && value.length > 0) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nexport function sanitizeHookAccount(\n\trow: AuthAccountRow | Record<string, unknown>,\n): AthenaAuthHookAccount {\n\tconst record = row as Record<string, unknown>;\n\treturn {\n\t\taccountId: firstString(record, [\"accountId\", \"account_id\"]),\n\t\tid: firstString(record, [\"id\"]),\n\t\tproviderId: firstString(record, [\"providerId\", \"provider_id\"]),\n\t\tuserId: firstString(record, [\"userId\", \"user_id\"]),\n\t};\n}\nexport type AthenaAuthHookOrganization = ReturnType<\n\ttypeof toPublicOrganization\n>;\nexport type AthenaAuthHookMember = ReturnType<typeof toPublicMember>;\nexport type AthenaAuthHookInvitation = ReturnType<typeof toPublicInvitation>;\n\nexport function sanitizeHookUser(row: AuthUserRow): AthenaAuthHookUser {\n\treturn toPublicUser(row);\n}\n\nexport function sanitizeHookOrganization(\n\trow: AuthOrganizationRow,\n): AthenaAuthHookOrganization {\n\treturn toPublicOrganization(row);\n}\n\nexport function sanitizeHookMember(row: AuthMemberRow): AthenaAuthHookMember {\n\treturn toPublicMember(row);\n}\n\nexport function sanitizeHookInvitation(\n\trow: AuthInvitationRow,\n): AthenaAuthHookInvitation {\n\treturn toPublicInvitation(row);\n}\n\nexport function sanitizeHookSession(row: AuthSessionRow): {\n\tactiveOrganizationId: string | null;\n\texpiresAt: string;\n\tid: string;\n\timpersonatedBy: string | null;\n\tuserId: string;\n} {\n\tconst expiresAt =\n\t\trow.expires_at instanceof Date\n\t\t\t? row.expires_at.toISOString()\n\t\t\t: new Date(row.expires_at).toISOString();\n\treturn {\n\t\tactiveOrganizationId: row.active_organization_id,\n\t\texpiresAt,\n\t\tid: row.id,\n\t\timpersonatedBy: row.impersonated_by,\n\t\tuserId: row.user_id,\n\t};\n}\n\nexport function sanitizeHookApiKey(row: AuthApiKeyRow): {\n\tid: string;\n\tname: string | null;\n\tprefix: string | null;\n\tuserId: string;\n} {\n\tconst publicKey = toPublicApiKey(row);\n\treturn {\n\t\tid: row.id,\n\t\tname: typeof publicKey.name === \"string\" ? publicKey.name : row.name,\n\t\tprefix: row.prefix,\n\t\tuserId: row.user_id,\n\t};\n}\n\nexport type AthenaAuthHookPasskey = {\n\tcreatedAt?: string;\n\tid: string;\n\tname: string | null;\n\tuserId: string;\n};\n\nexport function sanitizeHookPasskey(input: {\n\tcreatedAt?: Date | string;\n\tid: string;\n\tname?: string | null;\n\tuserId: string;\n}): AthenaAuthHookPasskey {\n\tconst createdAt =\n\t\tinput.createdAt instanceof Date\n\t\t\t? input.createdAt.toISOString()\n\t\t\t: typeof input.createdAt === \"string\"\n\t\t\t\t? input.createdAt\n\t\t\t\t: undefined;\n\treturn {\n\t\tcreatedAt,\n\t\tid: input.id,\n\t\tname: input.name ?? null,\n\t\tuserId: input.userId,\n\t};\n}\n","import {\n\tsanitizeAuthApiKey,\n\tsanitizeAuthInvitation,\n\tsanitizeAuthMember,\n\tsanitizeAuthOrganization,\n\tsanitizeAuthPasskey,\n\tsanitizeAuthSession,\n\tsanitizeAuthUser,\n} from \"../domain/payloads.ts\";\n\nexport {\n\tsanitizeAuthApiKey,\n\tsanitizeAuthInvitation,\n\tsanitizeAuthMember,\n\tsanitizeAuthOrganization,\n\tsanitizeAuthPasskey,\n\tsanitizeAuthSession,\n\tsanitizeAuthUser,\n};\n\nexport interface AthenaAuthAuditTombstone {\n\tdeleted: true;\n\tid: string;\n\torganizationId?: string;\n\tuserId?: string;\n}\n\nexport interface AthenaAuthSessionRevokeReceipt {\n\tid: string;\n\trevoked: true;\n\tuserId: string;\n}\n\nexport function toAuthAuditTombstone(input: {\n\tid: string;\n\torganizationId?: string;\n\tuserId?: string;\n}): AthenaAuthAuditTombstone {\n\tconst tombstone: AthenaAuthAuditTombstone = {\n\t\tdeleted: true,\n\t\tid: input.id,\n\t};\n\tif (input.organizationId !== undefined) {\n\t\ttombstone.organizationId = input.organizationId;\n\t}\n\tif (input.userId !== undefined) {\n\t\ttombstone.userId = input.userId;\n\t}\n\treturn tombstone;\n}\n\nexport function toAuthSessionRevokeReceipt(input: {\n\tid: string;\n\tuserId: string;\n}): AthenaAuthSessionRevokeReceipt {\n\treturn {\n\t\tid: input.id,\n\t\trevoked: true,\n\t\tuserId: input.userId,\n\t};\n}\n\nexport function splitPrimaryAndRest<T>(\n\titems: readonly T[],\n): { primary: T; rest: T[] } | undefined {\n\tconst [primary, ...rest] = items;\n\tif (primary === undefined) {\n\t\treturn undefined;\n\t}\n\treturn { primary, rest };\n}\n","import type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\n\nexport const ATHENA_AUTH_ADMIN_PATHS = {\n\tbanUser: \"/admin/ban-user\",\n\tcreateUser: \"/admin/create-user\",\n\tgetUser: \"/admin/get-user\",\n\timpersonateUser: \"/admin/impersonate-user\",\n\tlistUsers: \"/admin/list-users\",\n\tremoveUser: \"/admin/remove-user\",\n\trevokeUserSessions: \"/admin/revoke-user-sessions\",\n\tsetRole: \"/admin/set-role\",\n\tstopImpersonating: \"/admin/stop-impersonating\",\n\tunbanUser: \"/admin/unban-user\",\n\tupdateUser: \"/admin/update-user\",\n} as const;\n\nexport type AthenaAuthAdminPath =\n\t(typeof ATHENA_AUTH_ADMIN_PATHS)[keyof typeof ATHENA_AUTH_ADMIN_PATHS];\n\nexport interface AthenaAuthAdminListUsersInput {\n\tlimit?: number;\n\toffset?: number;\n\tquery?: string;\n\trole?: string;\n\tbanned?: boolean;\n}\n\nexport interface AthenaAuthAdminListUsersResult {\n\tlimit: number;\n\toffset: number;\n\ttotal: number;\n\tusers: AuthUserRow[];\n}\n\nexport interface AthenaAuthAdminCreateUserInput {\n\temail: string;\n\temailVerified?: boolean;\n\tname?: string;\n\tpassword?: string;\n\trole?: string;\n\tusername?: string;\n}\n\nexport interface AthenaAuthAdminUpdateUserInput {\n\tbanned?: boolean;\n\tbanExpires?: Date | null;\n\tbanReason?: string | null;\n\temail?: string;\n\temailVerified?: boolean;\n\timage?: string | null;\n\tname?: string | null;\n\trole?: string | null;\n\tuserId: string;\n}\n\nexport interface AthenaAuthAdminStore {\n\tcreateUser(\n\t\tinput: AthenaAuthAdminCreateUserInput & {\n\t\t\tid: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t},\n\t): Promise<AuthUserRow>;\n\tdeleteSession(token: string): Promise<boolean>;\n\tdeleteUser(userId: string): Promise<boolean>;\n\tdeleteUserSessions(userId: string, exceptToken?: string): Promise<number>;\n\tgetUser(userId: string): Promise<AuthUserRow | undefined>;\n\tgetUserByEmail(email: string): Promise<AuthUserRow | undefined>;\n\tlistUsers(\n\t\tinput: AthenaAuthAdminListUsersInput,\n\t): Promise<AthenaAuthAdminListUsersResult>;\n\tupdateUser(input: AthenaAuthAdminUpdateUserInput): Promise<AuthUserRow>;\n\tcreateImpersonationSession(input: {\n\t\tactiveOrganizationId?: string | null;\n\t\texpiresAt: Date;\n\t\tid: string;\n\t\timpersonatedBy: string;\n\t\tipAddress?: string | null;\n\t\ttoken: string;\n\t\tuserAgent?: string | null;\n\t\tuserId: string;\n\t}): Promise<AuthSessionRow>;\n}\n\nexport const ATHENA_AUTH_ADMIN_ROLES = [\n\t\"user\",\n\t\"admin\",\n\t\"superadmin\",\n\t\"owner\",\n] as const;\n\nexport type AthenaAuthAdminRole = (typeof ATHENA_AUTH_ADMIN_ROLES)[number];\n\nconst ADMIN_ROLE_RANK: Record<AthenaAuthAdminRole, number> = {\n\tuser: 0,\n\tadmin: 1,\n\tsuperadmin: 2,\n\towner: 3,\n};\n\nexport function normalizeAdminRole(\n\trole: string | null | undefined,\n): string | null {\n\tif (typeof role !== \"string\") {\n\t\treturn null;\n\t}\n\tconst trimmed = role.trim();\n\tif (!trimmed) {\n\t\treturn null;\n\t}\n\tconst lower = trimmed.toLowerCase();\n\treturn ATHENA_AUTH_ADMIN_ROLES.includes(lower as AthenaAuthAdminRole)\n\t\t? lower\n\t\t: trimmed;\n}\n\nexport function isAthenaAdminRole(role: string | null | undefined): boolean {\n\tconst normalized = normalizeAdminRole(role);\n\treturn (\n\t\tnormalized === \"admin\" ||\n\t\tnormalized === \"superadmin\" ||\n\t\tnormalized === \"owner\"\n\t);\n}\n\nexport function adminRoleRank(role: string | null | undefined): number {\n\tconst normalized = normalizeAdminRole(role);\n\tif (\n\t\tnormalized &&\n\t\tATHENA_AUTH_ADMIN_ROLES.includes(normalized as AthenaAuthAdminRole)\n\t) {\n\t\treturn ADMIN_ROLE_RANK[normalized as AthenaAuthAdminRole];\n\t}\n\treturn 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\tactorRole: string | null | undefined,\n\ttargetRole: string | null | undefined,\n): boolean {\n\tif (!isAthenaAdminRole(actorRole)) {\n\t\treturn false;\n\t}\n\tconst assigned = normalizeAdminRole(targetRole);\n\tif (!assigned) {\n\t\treturn false;\n\t}\n\tif (!ATHENA_AUTH_ADMIN_ROLES.includes(assigned as AthenaAuthAdminRole)) {\n\t\treturn true;\n\t}\n\treturn adminRoleRank(actorRole) > adminRoleRank(assigned);\n}\n\nexport function canActOnAdminTarget(\n\tactorRole: string | null | undefined,\n\ttargetRole: string | null | undefined,\n): boolean {\n\tif (!isAthenaAdminRole(targetRole)) {\n\t\treturn isAthenaAdminRole(actorRole);\n\t}\n\treturn adminRoleRank(actorRole) > adminRoleRank(targetRole);\n}\n\nexport function isUserEffectivelyBanned(\n\tuser: { banned?: boolean | null; ban_expires?: Date | string | null },\n\tnow = new Date(),\n): boolean {\n\tif (!user.banned) {\n\t\treturn false;\n\t}\n\tif (!user.ban_expires) {\n\t\treturn true;\n\t}\n\tconst expires = new Date(user.ban_expires);\n\tif (Number.isNaN(expires.getTime())) {\n\t\treturn true;\n\t}\n\treturn expires.getTime() > now.getTime();\n}\n\nconst PUBLIC_ADMIN_SECRET_KEYS = [\n\t\"password\",\n\t\"password_hash\",\n\t\"passwordHash\",\n\t\"metadata\",\n\t\"secret\",\n\t\"totp\",\n\t\"recovery\",\n\t\"refreshToken\",\n\t\"refresh_token\",\n\t\"accessToken\",\n\t\"access_token\",\n\t\"apiKey\",\n\t\"api_key\",\n];\n\nexport function assertPublicAdminUserSafe(\n\tvalue: unknown,\n\tlabel = \"admin user\",\n): void {\n\tconst serialized = JSON.stringify(value);\n\tif (!serialized) {\n\t\tthrow new Error(`${label}: empty payload`);\n\t}\n\tif (serialized.includes(\"$argon2\")) {\n\t\tthrow new Error(`${label}: leaked password hash`);\n\t}\n\tfor (const key of PUBLIC_ADMIN_SECRET_KEYS) {\n\t\tif (new RegExp(`\"${key}\"\\\\s*:`).test(serialized)) {\n\t\t\tthrow new Error(`${label}: leaked secret field ${key}`);\n\t\t}\n\t}\n}\n\nexport function clampAdminListLimit(limit: number | undefined): number {\n\tif (!Number.isFinite(limit)) {\n\t\treturn 50;\n\t}\n\treturn Math.min(100, Math.max(1, Math.trunc(limit ?? 50)));\n}\n\nexport function clampAdminListOffset(offset: number | undefined): number {\n\tif (!Number.isFinite(offset)) {\n\t\treturn 0;\n\t}\n\treturn Math.max(0, Math.trunc(offset ?? 0));\n}\n","import {\n\tATHENA_AUTH_SESSION_COOKIE_ALIASES,\n\tATHENA_AUTH_SESSION_COOKIE_NAME,\n} from \"../contract/index.ts\";\n\nexport interface AthenaAuthCookieAttributes {\n\tdomain?: string;\n\texpires?: Date;\n\thttpOnly?: boolean;\n\tmaxAge?: number;\n\tpath?: string;\n\tsameSite?: \"Strict\" | \"Lax\" | \"None\";\n\tsecure?: boolean;\n}\n\nfunction formatCookieDate(date: Date): string {\n\treturn date.toUTCString();\n}\n\nexport function serializeCookie(\n\tname: string,\n\tvalue: string,\n\tattributes: AthenaAuthCookieAttributes = {},\n): string {\n\tconst parts = [`${name}=${value}`];\n\tparts.push(`Path=${attributes.path ?? \"/\"}`);\n\tif (attributes.expires) {\n\t\tparts.push(`Expires=${formatCookieDate(attributes.expires)}`);\n\t}\n\tif (typeof attributes.maxAge === \"number\") {\n\t\tparts.push(`Max-Age=${Math.max(0, Math.floor(attributes.maxAge))}`);\n\t}\n\tif (attributes.domain) {\n\t\tparts.push(`Domain=${attributes.domain}`);\n\t}\n\tif (attributes.httpOnly !== false) {\n\t\tparts.push(\"HttpOnly\");\n\t}\n\tif (attributes.secure) {\n\t\tparts.push(\"Secure\");\n\t}\n\tparts.push(`SameSite=${attributes.sameSite ?? \"Lax\"}`);\n\treturn parts.join(\"; \");\n}\n\nexport function parseCookieHeader(\n\theader: string | null | undefined,\n): Map<string, string> {\n\tconst cookies = new Map<string, string>();\n\tif (!header) {\n\t\treturn cookies;\n\t}\n\tfor (const part of header.split(\";\")) {\n\t\tconst index = part.indexOf(\"=\");\n\t\tif (index <= 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst name = part.slice(0, index).trim();\n\t\tconst value = part.slice(index + 1).trim();\n\t\tif (name) {\n\t\t\tcookies.set(name, value);\n\t\t}\n\t}\n\treturn cookies;\n}\n\nexport function readSessionTokenFromCookies(\n\theader: string | null | undefined,\n\tcookieName = ATHENA_AUTH_SESSION_COOKIE_NAME,\n): string | undefined {\n\tconst cookies = parseCookieHeader(header);\n\tconst names = [\n\t\tcookieName,\n\t\t`.__Secure-${cookieName}`.slice(1),\n\t\t`__Secure-${cookieName}`,\n\t\t`__Host-${cookieName}`,\n\t\t...ATHENA_AUTH_SESSION_COOKIE_ALIASES,\n\t];\n\tfor (const name of names) {\n\t\tconst value = cookies.get(name);\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function readBearerToken(\n\theader: string | null | undefined,\n): string | undefined {\n\tif (!header) {\n\t\treturn undefined;\n\t}\n\tconst match = /^Bearer\\s+(.+)$/i.exec(header.trim());\n\tconst token = match?.[1]?.trim();\n\treturn token || undefined;\n}\n\nexport function shouldSetSecureCookie(\n\trequest: Request,\n\tpolicy: boolean | \"auto\",\n): boolean {\n\tif (policy === true) {\n\t\treturn true;\n\t}\n\tif (policy === false) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn new URL(request.url).protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function createSessionCookieHeader(\n\ttoken: string,\n\toptions: {\n\t\tcookieName?: string;\n\t\texpiresAt: Date;\n\t\tsecure: boolean;\n\t},\n): string {\n\treturn serializeCookie(\n\t\toptions.cookieName ?? ATHENA_AUTH_SESSION_COOKIE_NAME,\n\t\ttoken,\n\t\t{\n\t\t\texpires: options.expiresAt,\n\t\t\thttpOnly: true,\n\t\t\tsameSite: \"Lax\",\n\t\t\tsecure: options.secure,\n\t\t},\n\t);\n}\n\nexport function createClearSessionCookieHeader(\n\tcookieName = ATHENA_AUTH_SESSION_COOKIE_NAME,\n\tsecure = false,\n): string {\n\treturn serializeCookie(cookieName, \"\", {\n\t\texpires: new Date(0),\n\t\thttpOnly: true,\n\t\tmaxAge: 0,\n\t\tsameSite: \"Lax\",\n\t\tsecure,\n\t});\n}\n","import {\n  ATHENA_AUTH_DEFAULT_ARGON2,\n  type AthenaAuthArgon2Params,\n} from \"../contract/index.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 undefined;\n  }\n  return Number.parseInt(match[1] ?? \"\", 10);\n}\n\nexport function parseArgon2Phc(hash: string): {\n  hash: Uint8Array;\n  memoryCost: number;\n  parallelism: number;\n  salt: Uint8Array;\n  timeCost: number;\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 undefined;\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 loadNobleArgon2(): Promise<{\n  argon2id: (\n    password: Uint8Array,\n    salt: Uint8Array,\n    options: { dkLen: number; m: number; p: number; t: number }\n  ) => Uint8Array;\n}> {\n  const importer = new Function(\n    \"specifier\",\n    \"return import(specifier)\"\n  ) as (specifier: string) => Promise<{\n    argon2id: (\n      password: Uint8Array,\n      salt: Uint8Array,\n      options: { dkLen: number; m: number; p: number; t: number }\n    ) => Uint8Array;\n  }>;\n  return importer(\"@noble/hashes/argon2.js\");\n}\n\nasync function argon2idDigest(\n  password: string,\n  salt: Uint8Array,\n  params: { dkLen: number; memoryCost: number; parallelism: number; timeCost: number }\n): Promise<Uint8Array> {\n  const module = await loadNobleArgon2();\n  return module.argon2id(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 undefined;\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","import type { NormalizedAthenaAuthConfig } from \"../config.ts\";\nimport type { AuthDomainMutate } from \"../hooks/execute.ts\";\nimport {\n\tATHENA_AUTH_ADMIN_PATHS,\n\ttype AthenaAuthAdminStore,\n\tcanActOnAdminTarget,\n\tcanAssignRole,\n\tisAthenaAdminRole,\n\tnormalizeAdminRole,\n} from \"./admin-contract.ts\";\nimport { createSessionCookieHeader, shouldSetSecureCookie } from \"./cookies.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"./errors.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\nimport { toPublicSession, toPublicUser } from \"./models.ts\";\nimport { sanitizeHookSession, sanitizeHookUser } from \"../hooks/sanitize.ts\";\nimport {\n\tsplitPrimaryAndRest,\n\ttoAuthSessionRevokeReceipt,\n} from \"../observability/snapshots.ts\";\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\nimport type { AthenaAuthPasswordHasher } from \"./password.ts\";\nimport { validatePassword, withPasswordHash } from \"./password.ts\";\nimport {\n\tasStringField,\n\treadJsonBody,\n\trequestClientIp,\n\trequireStringField,\n} from \"./security.ts\";\n\nexport interface AdminRouteContext {\n\tconfig: NormalizedAthenaAuthConfig;\n\thasher: AthenaAuthPasswordHasher;\n\theaders: Headers;\n\thookRequest: (request: Request, path: string) => {\n\t\tipAddress?: string;\n\t\tmethod: string;\n\t\tpath: string;\n\t\tuserAgent?: string;\n\t};\n\tissueSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t\tuserId: string,\n\t) => Promise<AuthSessionRow>;\n\tlistSessionsForUser?: (userId: string) => Promise<AuthSessionRow[]>;\n\tmutate: AuthDomainMutate;\n\trequireSession: (request: Request) => Promise<{\n\t\tsession: AuthSessionRow;\n\t\ttoken: string;\n\t\tuser: AuthUserRow;\n\t}>;\n\trevokeBridgeCodesForUser?: (\n\t\tuserId: string,\n\t\texceptToken?: string,\n\t) => Promise<void>;\n\tstore: AthenaAuthAdminStore;\n\ttraceId: string;\n}\n\nfunction isValidEmail(email: string): boolean {\n\treturn /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email.trim());\n}\n\nasync function requireAdmin(\n\trequest: Request,\n\tctx: AdminRouteContext,\n): Promise<{ session: AuthSessionRow; token: string; user: AuthUserRow }> {\n\tconst resolved = await ctx.requireSession(request);\n\tif (!isAthenaAdminRole(resolved.user.role)) {\n\t\tthrow AthenaAuthRuntimeError.forbidden(\"Administrator access required\");\n\t}\n\treturn resolved;\n}\n\nfunction parseBoolean(value: string | null): boolean | undefined {\n\tif (value === null) return undefined;\n\tif (value === \"true\" || value === \"1\") return true;\n\tif (value === \"false\" || value === \"0\") return false;\n\treturn undefined;\n}\n\nfunction parseInteger(value: string | null): number | undefined {\n\tif (!value) return undefined;\n\tconst parsed = Number.parseInt(value, 10);\n\treturn Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction parseNullableDate(value: unknown): Date | null | undefined {\n\tif (value === undefined) return undefined;\n\tif (value === null || value === \"\") return null;\n\tif (typeof value !== \"string\") {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"banExpires must be an ISO date or null\",\n\t\t);\n\t}\n\tconst parsed = new Date(value);\n\tif (Number.isNaN(parsed.getTime())) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"banExpires must be a valid ISO date\",\n\t\t);\n\t}\n\treturn parsed;\n}\n\nexport async function handleAdminRoute(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: AdminRouteContext,\n): Promise<Response | undefined> {\n\tif (!path.startsWith(\"/admin/\")) {\n\t\treturn undefined;\n\t}\n\n\t// Exiting impersonation is deliberately authorized by the session marker,\n\t// not by the impersonated user's role. Otherwise an admin impersonating a\n\t// normal user could not escape the impersonated session.\n\tif (path === ATHENA_AUTH_ADMIN_PATHS.stopImpersonating && method === \"POST\") {\n\t\tconst current = await ctx.requireSession(request);\n\t\tif (!current.session.impersonated_by) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Current session is not impersonated\",\n\t\t\t);\n\t\t}\n\t\tconst adminId = current.session.impersonated_by;\n\t\tconst adminUser = await ctx.store.getUser(adminId);\n\t\tif (!adminUser) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\n\t\t\t\t\"Impersonating administrator not found\",\n\t\t\t);\n\t\t}\n\t\tconst restored = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"admin\",\n\t\t\t\t\tsessionId: current.session.id,\n\t\t\t\t\tuserId: adminId,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"session.impersonation.end\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tif (!scope.admin) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\t\tnew Error(\"Admin store is required\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait scope.admin.deleteSession(current.token);\n\t\t\t\treturn ctx.issueSession(request, scope.stores, adminId);\n\t\t\t},\n\t\t\tinput: { sessionId: current.session.id },\n\t\t\tprevious: async () => ({\n\t\t\t\tsession: sanitizeHookSession(current.session),\n\t\t\t}),\n\t\t\tresultOf: () => ({\n\t\t\t\tid: current.session.id,\n\t\t\t\trevoked: true as const,\n\t\t\t\tuserId: current.session.user_id,\n\t\t\t}),\n\t\t\tsecondaryEvents: (issued) => [\n\t\t\t\t{\n\t\t\t\t\tevent: \"session.issue\" as const,\n\t\t\t\t\tinput: { userId: adminId },\n\t\t\t\t\tresult: { session: sanitizeHookSession(issued) },\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\timpersonatedBy: adminId,\n\t\t\t\tsession: toPublicSession(restored),\n\t\t\t\tsuccess: true,\n\t\t\t\tuser: toPublicUser(adminUser),\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tconst actor = await requireAdmin(request, ctx);\n\n\tif (path === ATHENA_AUTH_ADMIN_PATHS.listUsers && method === \"GET\") {\n\t\tconst url = new URL(request.url);\n\t\tconst page = await ctx.store.listUsers({\n\t\t\tbanned: parseBoolean(url.searchParams.get(\"banned\")),\n\t\t\tlimit: parseInteger(url.searchParams.get(\"limit\")),\n\t\t\toffset: parseInteger(url.searchParams.get(\"offset\")),\n\t\t\tquery: url.searchParams.get(\"query\") ?? undefined,\n\t\t\trole: url.searchParams.get(\"role\") ?? undefined,\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\tlimit: page.limit,\n\t\t\t\toffset: page.offset,\n\t\t\t\ttotal: page.total,\n\t\t\t\tusers: page.users.map((user) => toPublicUser(user)),\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tif (\n\t\tpath === ATHENA_AUTH_ADMIN_PATHS.getUser &&\n\t\t(method === \"GET\" || method === \"POST\")\n\t) {\n\t\tconst userId =\n\t\t\tmethod === \"GET\"\n\t\t\t\t? new URL(request.url).searchParams.get(\"userId\")?.trim()\n\t\t\t\t: asStringField(\n\t\t\t\t\t\tawait readJsonBody(request, ctx.config.security.bodyLimitBytes),\n\t\t\t\t\t\t\"userId\",\n\t\t\t\t\t);\n\t\tif (!userId) throw AthenaAuthRuntimeError.badRequest(\"userId is required\");\n\t\tconst user = await ctx.store.getUser(userId);\n\t\tif (!user) throw AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\treturn jsonResponse(200, { user: toPublicUser(user) }, ctx.headers);\n\t}\n\n\tif (path === ATHENA_AUTH_ADMIN_PATHS.createUser && method === \"POST\") {\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst email = requireStringField(body, \"email\");\n\t\tif (!isValidEmail(email)) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"email must be a valid email address\",\n\t\t\t);\n\t\t}\n\t\tif (await ctx.store.getUserByEmail(email)) {\n\t\t\tthrow AthenaAuthRuntimeError.conflict(\n\t\t\t\t\"A user with this email already exists\",\n\t\t\t);\n\t\t}\n\t\tconst password = requireStringField(body, \"password\");\n\t\tvalidatePassword(password, {\n\t\t\tmaxLength: ctx.config.emailAndPassword.maxPasswordLength,\n\t\t\tminLength: ctx.config.emailAndPassword.minPasswordLength,\n\t\t});\n\t\tconst requestedRole =\n\t\t\tnormalizeAdminRole(asStringField(body, \"role\")) ?? \"user\";\n\t\tif (!canAssignRole(actor.user.role, requestedRole)) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden(\n\t\t\t\t\"Cannot assign a role at or above your authority\",\n\t\t\t);\n\t\t}\n\t\tconst hash = await ctx.hasher.hash(password);\n\t\tconst user = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"admin\",\n\t\t\t\t\tsessionId: actor.session.id,\n\t\t\t\t\tuserId: actor.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.create\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tif (!scope.admin) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\t\tnew Error(\"Admin store is required\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn scope.admin.createUser({\n\t\t\t\t\temail,\n\t\t\t\t\temailVerified: body.emailVerified === true,\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tmetadata: withPasswordHash({}, hash),\n\t\t\t\t\tname: asStringField(body, \"name\") ?? email.split(\"@\")[0] ?? email,\n\t\t\t\t\tpassword,\n\t\t\t\t\trole: requestedRole,\n\t\t\t\t\tusername: asStringField(body, \"username\"),\n\t\t\t\t});\n\t\t\t},\n\t\t\tinput: {\n\t\t\t\temail,\n\t\t\t\tname: asStringField(body, \"name\") ?? email.split(\"@\")[0] ?? email,\n\t\t\t\tusername: asStringField(body, \"username\"),\n\t\t\t},\n\t\t\tresultOf: (row) => ({ user: sanitizeHookUser(row) }),\n\t\t});\n\t\treturn jsonResponse(200, { user: toPublicUser(user) }, ctx.headers);\n\t}\n\n\tif (path === ATHENA_AUTH_ADMIN_PATHS.updateUser && method === \"POST\") {\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst userId = requireStringField(body, \"userId\");\n\t\tconst previous = await ctx.store.getUser(userId);\n\t\tconst user = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"admin\",\n\t\t\t\t\tsessionId: actor.session.id,\n\t\t\t\t\tuserId: actor.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.update\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tif (!scope.admin) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\t\tnew Error(\"Admin store is required\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn scope.admin.updateUser({\n\t\t\t\t\temail: asStringField(body, \"email\"),\n\t\t\t\t\temailVerified:\n\t\t\t\t\t\ttypeof body.emailVerified === \"boolean\"\n\t\t\t\t\t\t\t? body.emailVerified\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\timage: body.image === null ? null : asStringField(body, \"image\"),\n\t\t\t\t\tname: body.name === null ? null : asStringField(body, \"name\"),\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t},\n\t\t\tinput: {\n\t\t\t\timage: body.image === null ? null : asStringField(body, \"image\"),\n\t\t\t\tname: body.name === null ? null : asStringField(body, \"name\"),\n\t\t\t\tuserId,\n\t\t\t},\n\t\t\tprevious: async () => {\n\t\t\t\tif (!previous) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\t\t\t}\n\t\t\t\treturn { user: sanitizeHookUser(previous) };\n\t\t\t},\n\t\t\tresultOf: (row) => ({ user: sanitizeHookUser(row) }),\n\t\t});\n\t\treturn jsonResponse(200, { user: toPublicUser(user) }, ctx.headers);\n\t}\n\n\tif (path === ATHENA_AUTH_ADMIN_PATHS.setRole && method === \"POST\") {\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst userId = requireStringField(body, \"userId\");\n\t\tconst role = normalizeAdminRole(requireStringField(body, \"role\"));\n\t\tif (!role) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"role is required\");\n\t\t}\n\t\tif (\n\t\t\tuserId === actor.user.id &&\n\t\t\trole !== normalizeAdminRole(actor.user.role)\n\t\t) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Administrators cannot change their own role\",\n\t\t\t);\n\t\t}\n\t\tconst target = await ctx.store.getUser(userId);\n\t\tif (!target) throw AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\tif (!canAssignRole(actor.user.role, role)) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden(\n\t\t\t\t\"Cannot assign a role at or above your authority\",\n\t\t\t);\n\t\t}\n\t\tif (!canActOnAdminTarget(actor.user.role, target.role)) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden(\n\t\t\t\t\"Cannot change the role of an equal or higher administrator\",\n\t\t\t);\n\t\t}\n\t\tconst user = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"admin\",\n\t\t\t\t\tsessionId: actor.session.id,\n\t\t\t\t\tuserId: actor.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.role.update\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tif (!scope.admin) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\t\tnew Error(\"Admin store is required\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn scope.admin.updateUser({ role, userId });\n\t\t\t},\n\t\t\tinput: { role, userId },\n\t\t\tprevious: async () => ({ role: target.role }),\n\t\t\tresultOf: (row) => ({ user: sanitizeHookUser(row) }),\n\t\t});\n\t\treturn jsonResponse(200, { user: toPublicUser(user) }, ctx.headers);\n\t}\n\n\tif (path === ATHENA_AUTH_ADMIN_PATHS.banUser && method === \"POST\") {\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst userId = requireStringField(body, \"userId\");\n\t\tif (userId === actor.user.id) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Administrators cannot ban themselves\",\n\t\t\t);\n\t\t}\n\t\tconst target = await ctx.store.getUser(userId);\n\t\tif (!target) throw AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\tif (!canActOnAdminTarget(actor.user.role, target.role)) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden(\n\t\t\t\t\"Cannot ban an equal or higher administrator\",\n\t\t\t);\n\t\t}\n\t\tlet banExpires = parseNullableDate(body.banExpires);\n\t\tif (banExpires === undefined && body.banExpiresIn !== undefined) {\n\t\t\tconst seconds = Number(body.banExpiresIn);\n\t\t\tif (!Number.isFinite(seconds) || seconds <= 0) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\t\"banExpiresIn must be a positive number of seconds\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tbanExpires = new Date(Date.now() + seconds * 1000);\n\t\t}\n\t\tconst user = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"admin\",\n\t\t\t\t\tsessionId: actor.session.id,\n\t\t\t\t\tuserId: actor.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.ban\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tif (!scope.admin) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\t\tnew Error(\"Admin store is required\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst banned = await scope.admin.updateUser({\n\t\t\t\t\tbanExpires,\n\t\t\t\t\tbanned: true,\n\t\t\t\t\tbanReason:\n\t\t\t\t\t\tbody.banReason === null ? null : asStringField(body, \"banReason\"),\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t\tawait ctx.revokeBridgeCodesForUser?.(userId);\n\t\t\t\tconst revokedSessions = await scope.admin.deleteUserSessions(userId);\n\t\t\t\treturn { banned, revokedSessions };\n\t\t\t},\n\t\t\tinput: { userId },\n\t\t\tprevious: async () => ({ banned: Boolean(target.banned) }),\n\t\t\tresultOf: ({ banned }) => ({ user: sanitizeHookUser(banned) }),\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ revokedSessions: user.revokedSessions, user: toPublicUser(user.banned) },\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tif (path === ATHENA_AUTH_ADMIN_PATHS.unbanUser && method === \"POST\") {\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst userId = requireStringField(body, \"userId\");\n\t\tconst previous = await ctx.store.getUser(userId);\n\t\tif (!previous) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\t}\n\t\tconst user = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"admin\",\n\t\t\t\t\tsessionId: actor.session.id,\n\t\t\t\t\tuserId: actor.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.unban\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tif (!scope.admin) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\t\tnew Error(\"Admin store is required\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn scope.admin.updateUser({\n\t\t\t\t\tbanExpires: null,\n\t\t\t\t\tbanned: false,\n\t\t\t\t\tbanReason: null,\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t},\n\t\t\tinput: { userId },\n\t\t\tprevious: async () => ({ banned: Boolean(previous.banned) }),\n\t\t\tresultOf: (row) => ({ user: sanitizeHookUser(row) }),\n\t\t});\n\t\treturn jsonResponse(200, { user: toPublicUser(user) }, ctx.headers);\n\t}\n\n\tif (\n\t\tpath === ATHENA_AUTH_ADMIN_PATHS.revokeUserSessions &&\n\t\tmethod === \"POST\"\n\t) {\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst userId = requireStringField(body, \"userId\");\n\t\tconst exceptCurrent =\n\t\t\tbody.exceptCurrent === true && userId === actor.user.id;\n\t\tconst exceptToken = exceptCurrent ? actor.token : undefined;\n\t\tconst revokeScope = exceptCurrent ? \"others\" : \"all\";\n\t\tconst actorSession = sanitizeHookSession(actor.session);\n\t\tconst outcome = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"admin\",\n\t\t\t\t\tsessionId: actor.session.id,\n\t\t\t\t\tuserId: actor.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"session.revoke\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tif (!scope.admin) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\t\tnew Error(\"Admin store is required\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst live = (\n\t\t\t\t\tawait scope.stores.listUserSessions(userId)\n\t\t\t\t).filter((session) => !exceptCurrent || session.token !== actor.token);\n\t\t\t\tawait ctx.revokeBridgeCodesForUser?.(userId, exceptToken);\n\t\t\t\tconst revoked = await scope.admin.deleteUserSessions(\n\t\t\t\t\tuserId,\n\t\t\t\t\texceptToken,\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tpartitioned: splitPrimaryAndRest(\n\t\t\t\t\t\tlive.map((session) => sanitizeHookSession(session)),\n\t\t\t\t\t),\n\t\t\t\t\trevoked,\n\t\t\t\t};\n\t\t\t},\n\t\t\tinput: {\n\t\t\t\tscope: revokeScope,\n\t\t\t\tuserId,\n\t\t\t},\n\t\t\tprevious: async () => ({ session: actorSession }),\n\t\t\tpreviousOf: (outcome) =>\n\t\t\t\toutcome.partitioned\n\t\t\t\t\t? { session: outcome.partitioned.primary }\n\t\t\t\t\t: { session: actorSession },\n\t\t\tresultOf: (outcome) =>\n\t\t\t\ttoAuthSessionRevokeReceipt(\n\t\t\t\t\toutcome.partitioned?.primary ?? actorSession,\n\t\t\t\t),\n\t\t\tsecondaryEvents: (outcome) =>\n\t\t\t\t(outcome.partitioned?.rest ?? []).map((session: { id: string; userId: string }) => ({\n\t\t\t\t\tevent: \"session.revoke\" as const,\n\t\t\t\t\tinput: { scope: revokeScope, userId },\n\t\t\t\t\tprevious: { session },\n\t\t\t\t\tresult: toAuthSessionRevokeReceipt(session),\n\t\t\t\t})),\n\t\t\tshouldPersistAudit: (outcome) => outcome.partitioned !== undefined,\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ revoked: outcome.revoked, success: true },\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tif (path === ATHENA_AUTH_ADMIN_PATHS.removeUser && method === \"POST\") {\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst userId = requireStringField(body, \"userId\");\n\t\tif (userId === actor.user.id) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Administrators cannot remove themselves\",\n\t\t\t);\n\t\t}\n\t\tconst target = await ctx.store.getUser(userId);\n\t\tif (!target) throw AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\tif (!canActOnAdminTarget(actor.user.role, target.role)) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden(\n\t\t\t\t\"Cannot remove an equal or higher administrator\",\n\t\t\t);\n\t\t}\n\t\tconst removed = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"admin\",\n\t\t\t\t\tsessionId: actor.session.id,\n\t\t\t\t\tuserId: actor.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.delete\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tif (!scope.admin) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\t\tnew Error(\"Admin store is required\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait ctx.revokeBridgeCodesForUser?.(userId);\n\t\t\t\treturn scope.admin.deleteUser(userId);\n\t\t\t},\n\t\t\tinput: { userId },\n\t\t\tprevious: async () => ({ user: sanitizeHookUser(target) }),\n\t\t\tresultOf: () => ({\n\t\t\t\tdeleted: true as const,\n\t\t\t\tid: userId,\n\t\t\t\tuserId,\n\t\t\t}),\n\t\t});\n\t\tif (!removed) throw AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\treturn jsonResponse(200, { success: true }, ctx.headers);\n\t}\n\n\tif (path === ATHENA_AUTH_ADMIN_PATHS.impersonateUser && method === \"POST\") {\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst userId = requireStringField(body, \"userId\");\n\t\tif (userId === actor.user.id) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Cannot impersonate the current user\",\n\t\t\t);\n\t\t}\n\t\tconst target = await ctx.store.getUser(userId);\n\t\tif (!target) throw AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\tif (!canActOnAdminTarget(actor.user.role, target.role)) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden(\n\t\t\t\t\"Only a higher administrator may impersonate this user\",\n\t\t\t);\n\t\t}\n\t\tconst requestedExpiry = Number(body.expiresInSeconds ?? 15 * 60);\n\t\tconst expiresInSeconds = Number.isFinite(requestedExpiry)\n\t\t\t? Math.min(60 * 60, Math.max(60, requestedExpiry))\n\t\t\t: 15 * 60;\n\t\tconst session = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"admin\",\n\t\t\t\t\tsessionId: actor.session.id,\n\t\t\t\t\tuserId: actor.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"session.impersonation.start\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tif (!scope.admin) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\t\tnew Error(\"Admin store is required\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn scope.admin.createImpersonationSession({\n\t\t\t\t\tactiveOrganizationId: actor.session.active_organization_id,\n\t\t\t\t\texpiresAt: new Date(Date.now() + expiresInSeconds * 1000),\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\timpersonatedBy: actor.user.id,\n\t\t\t\t\tipAddress: requestClientIp(\n\t\t\t\t\t\trequest,\n\t\t\t\t\t\tctx.config.security.trustedProxy,\n\t\t\t\t\t),\n\t\t\t\t\ttoken: `session_${crypto.randomUUID()}`,\n\t\t\t\t\tuserAgent: request.headers.get(\"user-agent\"),\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t},\n\t\t\tinput: { userId },\n\t\t\tresultOf: (row) => ({ session: sanitizeHookSession(row) }),\n\t\t});\n\t\tctx.headers.append(\n\t\t\t\"set-cookie\",\n\t\t\tcreateSessionCookieHeader(session.token, {\n\t\t\t\tcookieName: ctx.config.session.cookieName,\n\t\t\t\texpiresAt: new Date(session.expires_at),\n\t\t\t\tsecure: shouldSetSecureCookie(\n\t\t\t\t\trequest,\n\t\t\t\t\tctx.config.security.cookieSecure,\n\t\t\t\t),\n\t\t\t}),\n\t\t);\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\tsession: toPublicSession(session),\n\t\t\t\tuser: toPublicUser(target),\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tthrow AthenaAuthRuntimeError.notFound(\"Admin route not found\");\n}\n","import {\n\tATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n\tATHENA_AUTH_TABLES,\n} from \"../contract/index.ts\";\nimport type {\n\tAthenaAuthAdminCreateUserInput,\n\tAthenaAuthAdminListUsersInput,\n\tAthenaAuthAdminListUsersResult,\n\tAthenaAuthAdminStore,\n\tAthenaAuthAdminUpdateUserInput,\n} from \"./admin-contract.ts\";\nimport { clampAdminListLimit, clampAdminListOffset } from \"./admin-contract.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\treturn row ? { ...row, metadata: parseMetadata(row.metadata) } : undefined;\n}\n\nexport class PostgresAdminAuthStore implements AthenaAuthAdminStore {\n\tconstructor(private readonly db: AthenaAuthDatabase) {}\n\n\tasync getUser(userId: string): Promise<AuthUserRow | undefined> {\n\t\tconst result = await this.db.query<AuthUserRow>(\n\t\t\t`SELECT * FROM ${ATHENA_AUTH_TABLES.users} WHERE id = $1`,\n\t\t\t[userId],\n\t\t);\n\t\treturn hydrateUser(result.rows[0]);\n\t}\n\n\tasync getUserByEmail(email: string): Promise<AuthUserRow | undefined> {\n\t\tconst result = await this.db.query<AuthUserRow>(\n\t\t\t`SELECT * FROM ${ATHENA_AUTH_TABLES.users} WHERE LOWER(email) = LOWER($1)`,\n\t\t\t[email],\n\t\t);\n\t\treturn hydrateUser(result.rows[0]);\n\t}\n\n\tasync listUsers(\n\t\tinput: AthenaAuthAdminListUsersInput,\n\t): Promise<AthenaAuthAdminListUsersResult> {\n\t\tconst limit = clampAdminListLimit(input.limit);\n\t\tconst offset = clampAdminListOffset(input.offset);\n\t\tconst params: unknown[] = [];\n\t\tconst where: string[] = [];\n\n\t\tif (input.query?.trim()) {\n\t\t\tparams.push(`%${input.query.trim()}%`);\n\t\t\tconst index = params.length;\n\t\t\twhere.push(\n\t\t\t\t`(email ILIKE $${index} OR name ILIKE $${index} OR username ILIKE $${index} OR id ILIKE $${index})`,\n\t\t\t);\n\t\t}\n\t\tif (input.role?.trim()) {\n\t\t\tparams.push(input.role.trim());\n\t\t\twhere.push(`role = $${params.length}`);\n\t\t}\n\t\tif (typeof input.banned === \"boolean\") {\n\t\t\tparams.push(input.banned);\n\t\t\twhere.push(`banned = $${params.length}`);\n\t\t}\n\n\t\tconst predicate = where.length ? `WHERE ${where.join(\" AND \")}` : \"\";\n\t\tconst count = await this.db.query<{ total: number | string }>(\n\t\t\t`SELECT COUNT(*) AS total FROM ${ATHENA_AUTH_TABLES.users} ${predicate}`,\n\t\t\tparams,\n\t\t);\n\n\t\tconst pageParams = [...params, limit, offset];\n\t\tconst rows = await this.db.query<AuthUserRow>(\n\t\t\t`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\t\t\tpageParams,\n\t\t);\n\n\t\treturn {\n\t\t\tlimit,\n\t\t\toffset,\n\t\t\ttotal: Number(count.rows[0]?.total ?? 0),\n\t\t\tusers: rows.rows.map((row) => hydrateUser(row) ?? row),\n\t\t};\n\t}\n\n\tasync createUser(\n\t\tinput: AthenaAuthAdminCreateUserInput & {\n\t\t\tid: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t},\n\t): Promise<AuthUserRow> {\n\t\treturn this.db.transaction(async (tx) => {\n\t\t\tconst result = await tx.query<AuthUserRow>(\n\t\t\t\t`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\t\t\t\t[\n\t\t\t\t\tinput.id,\n\t\t\t\t\tinput.email,\n\t\t\t\t\tinput.name ?? null,\n\t\t\t\t\tinput.emailVerified ?? false,\n\t\t\t\t\tinput.username ?? null,\n\t\t\t\t\tinput.role ?? \"user\",\n\t\t\t\t\tJSON.stringify(input.metadata ?? {}),\n\t\t\t\t],\n\t\t\t);\n\t\t\tconst row = hydrateUser(result.rows[0]);\n\t\t\tif (!row) {\n\t\t\t\tthrow new Error(\"Failed to create admin user\");\n\t\t\t}\n\t\t\tconst passwordHash =\n\t\t\t\ttypeof input.metadata?.password_hash === \"string\"\n\t\t\t\t\t? input.metadata.password_hash\n\t\t\t\t\t: undefined;\n\t\t\tif (passwordHash) {\n\t\t\t\tawait tx.query(\n\t\t\t\t\t`INSERT INTO ${ATHENA_AUTH_TABLES.accounts}\n            (id, account_id, provider_id, user_id, password)\n           VALUES ($1, $2, $3, $4, $5)`,\n\t\t\t\t\t[\n\t\t\t\t\t\tcrypto.randomUUID(),\n\t\t\t\t\t\trow.id,\n\t\t\t\t\t\tATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n\t\t\t\t\t\trow.id,\n\t\t\t\t\t\tpasswordHash,\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn row;\n\t\t});\n\t}\n\n\tasync updateUser(\n\t\tinput: AthenaAuthAdminUpdateUserInput,\n\t): Promise<AuthUserRow> {\n\t\tconst result = await this.db.query<AuthUserRow>(\n\t\t\t`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\t\t\t[\n\t\t\t\tinput.userId,\n\t\t\t\tinput.name !== undefined,\n\t\t\t\tinput.name ?? null,\n\t\t\t\tinput.email ?? null,\n\t\t\t\tinput.emailVerified ?? null,\n\t\t\t\tinput.image !== undefined,\n\t\t\t\tinput.image ?? null,\n\t\t\t\tinput.role !== undefined,\n\t\t\t\tinput.role ?? null,\n\t\t\t\tinput.banned ?? null,\n\t\t\t\tinput.banReason !== undefined,\n\t\t\t\tinput.banReason ?? null,\n\t\t\t\tinput.banExpires !== undefined,\n\t\t\t\tinput.banExpires?.toISOString() ?? null,\n\t\t\t],\n\t\t);\n\t\tconst row = hydrateUser(result.rows[0]);\n\t\tif (!row) {\n\t\t\tthrow new Error(\"User not found\");\n\t\t}\n\t\treturn row;\n\t}\n\n\tasync deleteSession(token: string): Promise<boolean> {\n\t\tconst result = await this.db.query(\n\t\t\t`DELETE FROM ${ATHENA_AUTH_TABLES.sessions} WHERE token = $1`,\n\t\t\t[token],\n\t\t);\n\t\treturn result.rowCount > 0;\n\t}\n\n\tasync deleteUser(userId: string): Promise<boolean> {\n\t\tconst result = await this.db.query(\n\t\t\t`DELETE FROM ${ATHENA_AUTH_TABLES.users} WHERE id = $1`,\n\t\t\t[userId],\n\t\t);\n\t\treturn result.rowCount > 0;\n\t}\n\n\tasync deleteUserSessions(\n\t\tuserId: string,\n\t\texceptToken?: string,\n\t): Promise<number> {\n\t\tconst result = exceptToken\n\t\t\t? await this.db.query(\n\t\t\t\t\t`DELETE FROM ${ATHENA_AUTH_TABLES.sessions} WHERE user_id = $1 AND token <> $2`,\n\t\t\t\t\t[userId, exceptToken],\n\t\t\t\t)\n\t\t\t: await this.db.query(\n\t\t\t\t\t`DELETE FROM ${ATHENA_AUTH_TABLES.sessions} WHERE user_id = $1`,\n\t\t\t\t\t[userId],\n\t\t\t\t);\n\t\treturn result.rowCount;\n\t}\n\n\tasync createImpersonationSession(input: {\n\t\tactiveOrganizationId?: string | null;\n\t\texpiresAt: Date;\n\t\tid: string;\n\t\timpersonatedBy: string;\n\t\tipAddress?: string | null;\n\t\ttoken: string;\n\t\tuserAgent?: string | null;\n\t\tuserId: string;\n\t}): Promise<AuthSessionRow> {\n\t\tconst result = await this.db.query<AuthSessionRow>(\n\t\t\t`INSERT INTO ${ATHENA_AUTH_TABLES.sessions}\n        (id, user_id, token, expires_at, ip_address, user_agent, impersonated_by, active_organization_id, active)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, $8, TRUE)\n       RETURNING *`,\n\t\t\t[\n\t\t\t\tinput.id,\n\t\t\t\tinput.userId,\n\t\t\t\tinput.token,\n\t\t\t\tinput.expiresAt.toISOString(),\n\t\t\t\tinput.ipAddress ?? null,\n\t\t\t\tinput.userAgent ?? null,\n\t\t\t\tinput.impersonatedBy,\n\t\t\t\tinput.activeOrganizationId ?? null,\n\t\t\t],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row) {\n\t\t\tthrow new Error(\"Failed to create impersonation session\");\n\t\t}\n\t\treturn row;\n\t}\n}\n\nexport class MemoryAdminAuthStore implements AthenaAuthAdminStore {\n\tconstructor(private readonly stores: MemoryAuthStores) {}\n\n\tgetUser(userId: string) {\n\t\treturn this.stores.getUserById(userId);\n\t}\n\n\tgetUserByEmail(email: string) {\n\t\treturn this.stores.getUserByEmail(email);\n\t}\n\n\tasync listUsers(\n\t\tinput: AthenaAuthAdminListUsersInput,\n\t): Promise<AthenaAuthAdminListUsersResult> {\n\t\tconst limit = clampAdminListLimit(input.limit);\n\t\tconst offset = clampAdminListOffset(input.offset);\n\t\tconst query = input.query?.trim().toLowerCase();\n\t\tconst role = input.role?.trim();\n\t\tconst rows = [...this.stores.users.values()]\n\t\t\t.filter((user) => {\n\t\t\t\tif (role && user.role !== role) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (typeof input.banned === \"boolean\" && user.banned !== input.banned) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (!query) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn [user.email, user.name, user.username, user.id]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.some((value) => String(value).toLowerCase().includes(query));\n\t\t\t})\n\t\t\t.sort((left, right) => {\n\t\t\t\tconst time =\n\t\t\t\t\tnew Date(right.created_at).getTime() -\n\t\t\t\t\tnew Date(left.created_at).getTime();\n\t\t\t\treturn time !== 0 ? time : left.id.localeCompare(right.id);\n\t\t\t});\n\t\treturn {\n\t\t\tlimit,\n\t\t\toffset,\n\t\t\ttotal: rows.length,\n\t\t\tusers: rows.slice(offset, offset + limit),\n\t\t};\n\t}\n\n\tasync createUser(\n\t\tinput: AthenaAuthAdminCreateUserInput & {\n\t\t\tid: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t},\n\t) {\n\t\tconst user = await this.stores.createUser({\n\t\t\temail: input.email,\n\t\t\temailVerified: input.emailVerified,\n\t\t\tid: input.id,\n\t\t\tmetadata: input.metadata,\n\t\t\tname: input.name,\n\t\t\tusername: input.username,\n\t\t});\n\t\tif (input.role) {\n\t\t\tawait this.stores.updateUser(user.id, { role: input.role });\n\t\t}\n\t\tconst passwordHash =\n\t\t\ttypeof input.metadata?.password_hash === \"string\"\n\t\t\t\t? input.metadata.password_hash\n\t\t\t\t: undefined;\n\t\tif (passwordHash) {\n\t\t\ttry {\n\t\t\t\tawait this.stores.createAccount({\n\t\t\t\t\taccountId: user.id,\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tpassword: passwordHash,\n\t\t\t\t\tproviderId: ATHENA_AUTH_CREDENTIAL_PROVIDER_ID,\n\t\t\t\t\tuserId: user.id,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tawait this.stores.deleteUser(user.id);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\treturn (await this.stores.getUserById(user.id)) ?? user;\n\t}\n\n\tupdateUser(input: AthenaAuthAdminUpdateUserInput) {\n\t\treturn this.stores.updateUser(input.userId, {\n\t\t\tbanExpires: input.banExpires,\n\t\t\tbanReason: input.banReason,\n\t\t\tbanned: input.banned,\n\t\t\temail: input.email,\n\t\t\temailVerified: input.emailVerified,\n\t\t\timage: input.image,\n\t\t\tname: input.name,\n\t\t\trole: input.role,\n\t\t});\n\t}\n\n\tdeleteSession(token: string) {\n\t\treturn this.stores.deleteSession(token);\n\t}\n\n\tasync deleteUser(userId: string) {\n\t\tconst existing = await this.stores.getUserById(userId);\n\t\tif (!existing) {\n\t\t\treturn false;\n\t\t}\n\t\tawait this.stores.deleteUser(userId);\n\t\treturn true;\n\t}\n\n\tdeleteUserSessions(userId: string, exceptToken?: string) {\n\t\treturn this.stores.deleteUserSessions(userId, exceptToken);\n\t}\n\n\tcreateImpersonationSession(input: {\n\t\tactiveOrganizationId?: string | null;\n\t\texpiresAt: Date;\n\t\tid: string;\n\t\timpersonatedBy: string;\n\t\tipAddress?: string | null;\n\t\ttoken: string;\n\t\tuserAgent?: string | null;\n\t\tuserId: string;\n\t}) {\n\t\treturn this.stores.createSession(input);\n\t}\n}\n","import type { AuthBridgeCodeStore } from \"../../bridge/store.ts\";\n\nexport async function revokeAuthBridgeCodesForSessions(\n\tstore: AuthBridgeCodeStore,\n\tsessionIds: Array<string | null | undefined>,\n): Promise<void> {\n\tconst unique = [\n\t\t...new Set(\n\t\t\tsessionIds.filter(\n\t\t\t\t(sessionId): sessionId is string =>\n\t\t\t\t\ttypeof sessionId === \"string\" && sessionId.length > 0,\n\t\t\t),\n\t\t),\n\t];\n\tawait Promise.all(\n\t\tunique.map((sessionId) => store.revokeForSession(sessionId, \"session_revoked\")),\n\t);\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\tdestinationOrigin: string;\n\texpiresAt: Date;\n\torganizationId?: string | null;\n\tredirectPath: string;\n\tsessionId: string;\n\tstore: AuthBridgeCodeStore;\n\tuserId: string;\n}\n\nexport interface IssuedAuthBridgeCode {\n\tcode: string;\n\trecord: AuthBridgeCodeRecord;\n}\n\nexport async function issueAuthBridgeCode(\n\tinput: IssueAuthBridgeCodeServiceInput,\n): Promise<IssuedAuthBridgeCode> {\n\tconst code = generateAuthBridgeCode();\n\tconst record = await input.store.issue({\n\t\tcodeHash: await hashAuthBridgeCode(code),\n\t\tdestinationOrigin: input.destinationOrigin,\n\t\texpiresAt: input.expiresAt,\n\t\torganizationId: input.organizationId,\n\t\tredirectPath: input.redirectPath,\n\t\tsessionId: input.sessionId,\n\t\tuserId: input.userId,\n\t});\n\treturn { code, record };\n}\n","import { issueAuthBridgeCode } from \"../../bridge/service.ts\";\nimport {\n\tnormalizeAuthBridgeDestinationOrigin,\n\tnormalizeAuthBridgeRedirectPath,\n} from \"../../bridge/code.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\t\"ATHENA_AUTH_BRIDGE_EXCHANGE_INVALID\";\n\nexport interface AuthBridgeExchangeResult {\n\texpiresAt: string;\n\tsessionId: string;\n\tsessionToken: string;\n\tuserId: string;\n}\n\nfunction exchangeInvalid(): AthenaAuthRuntimeError {\n\treturn new AthenaAuthRuntimeError(401, \"Invalid bridge exchange\", {\n\t\tcode: ATHENA_AUTH_BRIDGE_EXCHANGE_INVALID,\n\t});\n}\n\nfunction isOriginAllowlisted(\n\tdestinationOrigin: string,\n\tallowedOrigins: string[],\n): boolean {\n\treturn allowedOrigins.includes(destinationOrigin);\n}\n\nfunction sessionIsLive(expiresAt: Date | string): boolean {\n\treturn new Date(expiresAt).getTime() > Date.now();\n}\n\nexport async function handleAuthBridgeRoutes(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: {\n\t\tdeps: AuthRuntimeDependencies;\n\t\theaders: Headers;\n\t\tstores: AthenaAuthStores;\n\t\ttraceId: string;\n\t},\n): Promise<Response | undefined> {\n\tif (path === \"/session/bridge/issue\" && method === \"POST\") {\n\t\tif (!ctx.deps.config.bridge.enabled) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Not found\");\n\t\t}\n\t\tconst resolved = await ctx.deps.requireSession(request, ctx.stores);\n\t\tif (isUserEffectivelyBanned(resolved.user)) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t}\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.deps.config.security.bodyLimitBytes,\n\t\t);\n\t\tlet destinationOrigin: string;\n\t\ttry {\n\t\t\tdestinationOrigin = normalizeAuthBridgeDestinationOrigin(\n\t\t\t\tasStringField(body, \"destinationOrigin\") ?? \"\",\n\t\t\t);\n\t\t} catch {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid destination origin\");\n\t\t}\n\t\tif (\n\t\t\t!isOriginAllowlisted(\n\t\t\t\tdestinationOrigin,\n\t\t\t\tctx.deps.config.bridge.allowedOrigins,\n\t\t\t)\n\t\t) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t}\n\t\tlet redirectPath: string;\n\t\ttry {\n\t\t\tredirectPath = normalizeAuthBridgeRedirectPath(\n\t\t\t\tasStringField(body, \"redirectPath\") ?? \"/\",\n\t\t\t);\n\t\t} catch {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid redirect path\");\n\t\t}\n\t\tconst ttlMs = ctx.deps.config.bridge.codeTtlSeconds * 1000;\n\t\tconst expiresAt = new Date(Date.now() + ttlMs);\n\t\tconst issued = await issueAuthBridgeCode({\n\t\t\tdestinationOrigin,\n\t\t\texpiresAt,\n\t\t\torganizationId: resolved.session.active_organization_id,\n\t\t\tredirectPath,\n\t\t\tsessionId: resolved.session.id,\n\t\t\tstore: ctx.deps.getBridgeCodeStore(),\n\t\t\tuserId: resolved.user.id,\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\tcode: issued.code,\n\t\t\t\tdestinationOrigin,\n\t\t\t\texpiresAt: expiresAt.toISOString(),\n\t\t\t\tredirectPath,\n\t\t\t},\n\t\t\tctx.headers,\n\t\t\tctx.traceId,\n\t\t);\n\t}\n\n\tif (path === \"/session/bridge/exchange\" && method === \"POST\") {\n\t\tif (!ctx.deps.config.bridge.enabled) {\n\t\t\tthrow exchangeInvalid();\n\t\t}\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.deps.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst code = asStringField(body, \"code\");\n\t\tif (!code) {\n\t\t\tthrow exchangeInvalid();\n\t\t}\n\t\tlet destinationOrigin: string;\n\t\ttry {\n\t\t\tdestinationOrigin = normalizeAuthBridgeDestinationOrigin(\n\t\t\t\tasStringField(body, \"destinationOrigin\") ?? \"\",\n\t\t\t);\n\t\t} catch {\n\t\t\tthrow exchangeInvalid();\n\t\t}\n\t\tconst consumed = await ctx.deps.getBridgeCodeStore().consume({\n\t\t\tcode,\n\t\t\tdestinationOrigin,\n\t\t});\n\t\tif (!consumed) {\n\t\t\tthrow exchangeInvalid();\n\t\t}\n\t\tconst user = await ctx.stores.getUserById(consumed.userId);\n\t\tif (!user || isUserEffectivelyBanned(user)) {\n\t\t\tthrow exchangeInvalid();\n\t\t}\n\t\tconst sessions = await ctx.stores.listUserSessions(consumed.userId);\n\t\tconst session = sessions.find((row) => row.id === consumed.sessionId);\n\t\tif (\n\t\t\t!session ||\n\t\t\t!session.active ||\n\t\t\tsession.user_id !== user.id ||\n\t\t\t!sessionIsLive(session.expires_at)\n\t\t) {\n\t\t\tthrow exchangeInvalid();\n\t\t}\n\t\tconst result: AuthBridgeExchangeResult = {\n\t\t\texpiresAt: new Date(session.expires_at).toISOString(),\n\t\t\tsessionId: session.id,\n\t\t\tsessionToken: session.token,\n\t\t\tuserId: user.id,\n\t\t};\n\t\treturn jsonResponse(200, result, ctx.headers, ctx.traceId);\n\t}\n\n\treturn undefined;\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\";\n\nconst CHANGE_EMAIL_IDENTIFIER = /^change-email:([^:]+):(.+)$/;\n\nexport function parseChangeEmailIdentifier(\n\tidentifier: string,\n): { email: string; userId: string } | undefined {\n\tconst match = CHANGE_EMAIL_IDENTIFIER.exec(identifier);\n\tconst userId = match?.[1];\n\tconst email = match?.[2];\n\tif (!(userId && email)) {\n\t\treturn;\n\t}\n\treturn { email, userId };\n}\n\nexport async function resolveChangeEmailTarget(\n\tstores: AthenaAuthStores,\n\ttoken: string,\n): Promise<{ email: string; userId: string }> {\n\tconst pending = await stores.getVerificationByValue(token);\n\tconst parsed = pending\n\t\t? parseChangeEmailIdentifier(pending.identifier)\n\t\t: undefined;\n\tif (!parsed) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n\t}\n\treturn parsed;\n}\n\nexport async function applyChangeEmailToken(\n\tstores: AthenaAuthStores,\n\ttoken: string,\n): Promise<AuthUserRow> {\n\tconst verification = await stores.consumeVerification(token);\n\tif (!verification) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n\t}\n\tconst parsed = parseChangeEmailIdentifier(verification.identifier);\n\tif (!parsed) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid token\");\n\t}\n\treturn stores.updateUser(parsed.userId, {\n\t\temail: parsed.email,\n\t\temailVerified: true,\n\t});\n}\n\nexport async function applyDeleteUserToken(\n\tstores: AthenaAuthStores,\n\ttoken: string,\n): Promise<string> {\n\tconst verification = await stores.consumeVerification(token);\n\tif (!verification) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n\t}\n\tconst userId = parseDeleteUserIdentifier(verification.identifier);\n\tif (!userId) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid token\");\n\t}\n\tawait stores.deleteUser(userId);\n\treturn userId;\n}\n\nexport function parseDeleteUserIdentifier(\n\tidentifier: string,\n): string | undefined {\n\tconst userId = identifier.replace(/^delete_user:/, \"\");\n\tif (!userId || identifier === userId) {\n\t\treturn;\n\t}\n\treturn userId;\n}\n\nexport async function resolveDeleteUserTarget(\n\tstores: AthenaAuthStores,\n\ttoken: string,\n): Promise<string> {\n\tconst pending = await stores.getVerificationByValue(token);\n\tconst userId = pending\n\t\t? parseDeleteUserIdentifier(pending.identifier)\n\t\t: undefined;\n\tif (!userId) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n\t}\n\treturn userId;\n}\n\nexport async function handleUserMailRoutes(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: {\n\t\temailStore: AthenaAuthEmailStore;\n\t\theaders: Headers;\n\t\thookRequest: (\n\t\t\trequest: Request,\n\t\t\tpath: string,\n\t\t) => {\n\t\t\tipAddress?: string;\n\t\t\tmethod: string;\n\t\t\tpath: string;\n\t\t\tuserAgent?: string;\n\t\t};\n\t\tmutate: AuthDomainMutate;\n\t\trequireSession: (\n\t\t\trequest: Request,\n\t\t\tstores: AthenaAuthStores,\n\t\t) => Promise<{ user: AuthUserRow }>;\n\t\tstores: AthenaAuthStores;\n\t\ttraceId: string;\n\t},\n): Promise<Response | null> {\n\tif (path === \"/email/list\" && method === \"GET\") {\n\t\tconst { user } = await ctx.requireSession(request, ctx.stores);\n\t\tconst recipient = (user.email ?? \"\").trim().toLowerCase();\n\t\tconst rows = (await ctx.emailStore.listEmails()).filter(\n\t\t\t(row) => row.recipient_email.trim().toLowerCase() === recipient,\n\t\t);\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\temails: rows,\n\t\t\t\tlimit: rows.length,\n\t\t\t\toffset: 0,\n\t\t\t\ttotal: rows.length,\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tif (path === \"/change-email/verify\" && method === \"GET\") {\n\t\tconst token = new URL(request.url).searchParams.get(\"token\")?.trim();\n\t\tif (!token) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"token is required\");\n\t\t}\n\t\tconst target = await resolveChangeEmailTarget(ctx.stores, token);\n\t\tconst previousUser = await ctx.stores.getUserById(target.userId);\n\t\tconst updated = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: { kind: \"user\", userId: target.userId },\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.email.update\",\n\t\t\texecute: (scope) => applyChangeEmailToken(scope.stores, token),\n\t\t\tinput: { email: target.email, userId: target.userId },\n\t\t\tprevious: async () => {\n\t\t\t\tif (!previousUser) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\t\t\t}\n\t\t\t\treturn { email: previousUser.email };\n\t\t\t},\n\t\t\tresultOf: (row) => ({ user: sanitizeHookUser(row) }),\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ status: true, user: toPublicUser(updated) },\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tif (path === \"/delete-user/verify\" && method === \"GET\") {\n\t\tconst token = new URL(request.url).searchParams.get(\"token\")?.trim();\n\t\tif (!token) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"token is required\");\n\t\t}\n\t\tconst userId = await resolveDeleteUserTarget(ctx.stores, token);\n\t\tconst previousUser = await ctx.stores.getUserById(userId);\n\t\tif (!previousUser) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\t}\n\t\tawait ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: { kind: \"user\", userId },\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.delete\",\n\t\t\texecute: (scope) => applyDeleteUserToken(scope.stores, token),\n\t\t\tinput: { userId },\n\t\t\tprevious: async () => ({ user: sanitizeHookUser(previousUser) }),\n\t\t\tresultOf: () => ({\n\t\t\t\tdeleted: true as const,\n\t\t\t\tid: userId,\n\t\t\t\tuserId,\n\t\t\t}),\n\t\t});\n\t\treturn jsonResponse(200, { status: true, success: true }, ctx.headers);\n\t}\n\n\tif (\n\t\tmethod === \"GET\" &&\n\t\t(path === \"/reset-password/{token}\" || path.startsWith(\"/reset-password/\"))\n\t) {\n\t\tconst token = decodeURIComponent(path.slice(\"/reset-password/\".length));\n\t\tif (!token) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"token is required\");\n\t\t}\n\t\tconst verification = await ctx.stores.getVerificationByValue(token);\n\t\tif (!verification) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n\t\t}\n\t\tconst origin = new URL(request.url).origin;\n\t\tconst location = `${origin}/reset-password?token=${encodeURIComponent(token)}`;\n\t\tconst headers = new Headers(ctx.headers);\n\t\theaders.set(\"location\", location);\n\t\treturn new Response(null, {\n\t\t\theaders,\n\t\t\tstatus: 302,\n\t\t});\n\t}\n\n\treturn null;\n}\n\nexport function tokenizedUrl(\n\tbase: string | undefined,\n\ttoken: string,\n\torigin: string,\n\tfallbackPath: string,\n): string {\n\tif (base?.trim()) {\n\t\tconst trimmed = base.trim();\n\t\tconst joiner = trimmed.includes(\"?\") ? \"&\" : \"?\";\n\t\treturn `${trimmed}${joiner}token=${encodeURIComponent(token)}`;\n\t}\n\treturn `${origin}${fallbackPath}?token=${encodeURIComponent(token)}`;\n}\n\nexport type MailerEmit = (\n\tinput: EmitAuthEmailInput,\n) => Promise<{ success: boolean }>;\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 {\n\tvalidatePassword,\n\twithPasswordHash,\n} from \"./password.ts\";\nimport { asStringField, readJsonBody, requireStringField } from \"./security.ts\";\nimport type { AuthRuntimeDependencies } from \"./runtime-dependencies.ts\";\n\nexport interface AuthProcedureContext {\n\tdeps: AuthRuntimeDependencies;\n\theaders: Headers;\n\tstores: AthenaAuthStores;\n\ttraceId: string;\n}\n\nexport async function handleCredentialPasswordRoutes(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: AuthProcedureContext,\n): Promise<Response | undefined> {\n\tconst { config, emitIfRecipient, emitMail, hasher, hookRequest, mutate } =\n\t\tctx.deps;\n\tconst issueSession = ctx.deps.issueSession;\n\tconst currentStores = ctx.stores;\n\tconst headers = ctx.headers;\n\tconst traceId = ctx.traceId;\n\tif (method !== \"POST\") {\n\t\treturn undefined;\n\t}\n\tif (typeof issueSession !== \"function\") {\n\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\tnew Error(\"canonical issueSession is required\"),\n\t\t);\n\t}\n\tif (path === \"/forget-password\" && method === \"POST\") {\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst email = requireStringField(body, \"email\");\n\t\t\tconst user = await currentStores.getUserByEmail(email);\n\t\t\tif (user) {\n\t\t\t\tconst token = Buffer.from(\n\t\t\t\t\tcrypto.getRandomValues(new Uint8Array(32)),\n\t\t\t\t).toString(\"base64url\");\n\t\t\t\tawait currentStores.createVerification({\n\t\t\t\t\texpiresAt: new Date(Date.now() + 60 * 60 * 1000),\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tidentifier: `reset:${user.email ?? email}`,\n\t\t\t\t\tvalue: token,\n\t\t\t\t});\n\t\t\t\tconst origin = new URL(request.url).origin;\n\t\t\t\tconst redirectTo = asStringField(body, \"redirectTo\");\n\t\t\t\tconst resetUrl = tokenizedUrl(\n\t\t\t\t\tredirectTo,\n\t\t\t\t\ttoken,\n\t\t\t\t\torigin,\n\t\t\t\t\t\"/reset-password\",\n\t\t\t\t);\n\t\t\t\tawait emitMail({\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tlegacy_hook_url: redirectTo ? resetUrl : token,\n\t\t\t\t\t\treset_url: resetUrl,\n\t\t\t\t\t},\n\t\t\t\t\teventType: authEmailEvents.user.password.reset,\n\t\t\t\t\trecipient: email,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\nif (path === \"/reset-password\" && method === \"POST\") {\n\t\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\t\tconst token = requireStringField(body, \"token\");\n\t\t\tconst newPassword =\n\t\t\t\tasStringField(body, \"newPassword\") ??\n\t\t\t\trequireStringField(body, \"password\");\n\t\t\tvalidatePassword(newPassword, {\n\t\t\t\tmaxLength: config.emailAndPassword.maxPasswordLength,\n\t\t\t\tminLength: config.emailAndPassword.minPasswordLength,\n\t\t\t});\n\t\t\tconst verification = await currentStores.getVerificationByValue(token);\n\t\t\tif (!verification) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n\t\t\t}\n\t\t\tconst email = verification.identifier.replace(/^reset:/, \"\");\n\t\t\tconst user = await currentStores.getUserByEmail(email);\n\t\t\tif (!user) {\n\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\t\t}\n\t\t\tconst hash = await hasher.hash(newPassword);\n\t\t\tawait mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: { kind: \"user\", userId: user.id },\n\t\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\t\ttraceId,\n\t\t\t\t},\n\t\t\t\tevent: \"user.password.reset\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tconst consumed = await scope.stores.consumeVerification(token);\n\t\t\t\t\tif (!consumed) {\n\t\t\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\t\t\t\"Invalid or expired token\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tawait scope.stores.updateUser(user.id, {\n\t\t\t\t\t\tmetadata: withPasswordHash(\n\t\t\t\t\t\t\ttypeof user.metadata === \"object\" ? user.metadata : {},\n\t\t\t\t\t\t\thash,\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t\tawait scope.stores.deleteUserSessions(user.id);\n\t\t\t\t},\n\t\t\t\tinput: { userId: user.id },\n\t\t\t\tresultOf: () => ({ userId: user.id }),\n\t\t\t});\n\t\t\tawait emitIfRecipient(user.email, {\n\t\t\t\tdata: {},\n\t\t\t\teventType: authEmailEvents.user.password.changed,\n\t\t\t});\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\n\treturn undefined;\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(value: string): [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(octets: [number, number, number, number]): 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 { 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\tconst octets = parseIpv4(host);\n\treturn octets !== null && isBlockedIpv4(octets);\n}\n\nexport function validateAttachmentTarget(fileUrl: string): void {\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(fileUrl);\n\t} catch {\n\t\tthrow AthenaAuthEmailError.badRequest(\"attachment URL is invalid\");\n\t}\n\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\tthrow AthenaAuthEmailError.badRequest(\n\t\t\t\"attachment URL must use http or https\",\n\t\t);\n\t}\n\tconst host = parsed.hostname.toLowerCase();\n\tif (\n\t\tPRIVATE_HOSTS.has(host) ||\n\t\thost.endsWith(\".localhost\") ||\n\t\thost === \"::1\" ||\n\t\thost === \"[::1]\" ||\n\t\tisNonGlobalIpv4(host)\n\t) {\n\t\tthrow AthenaAuthEmailError.badRequest(\n\t\t\t\"attachment URL resolved to a non-public IP address\",\n\t\t);\n\t}\n}\n\nexport function resolveTemplateAttachments(\n\tattachments: AthenaAuthEmailTemplateAttachment[],\n\tmode: AthenaAuthEmailAttachmentFailureMode,\n): AthenaAuthEmailTemplateAttachment[] {\n\tconst resolved: AthenaAuthEmailTemplateAttachment[] = [];\n\tfor (const attachment of attachments) {\n\t\ttry {\n\t\t\tvalidateAttachmentTarget(attachment.file_url);\n\t\t\tresolved.push(attachment);\n\t\t} catch (error) {\n\t\t\tif (mode === \"skip\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\treturn resolved;\n}\n","import type { AthenaAuthStores } from \"../local/memory-stores.ts\";\nimport { AthenaAuthEmailError } from \"./errors.ts\";\n\nexport interface AthenaAuthEmailVariableBinding {\n\tname: string;\n\trequired?: boolean;\n\tsource: string;\n}\n\nexport interface AthenaAuthEmailRenderAnchors {\n\torganizationId?: string;\n\tsessionToken?: string;\n\tuserId?: string;\n}\n\nfunction parseSourceAddress(source: string): [string, string, string] {\n\tconst parts = source.split(\".\").map((part) => part.trim());\n\tif (parts.length !== 3 || parts.some((part) => part.length === 0)) {\n\t\tthrow AthenaAuthEmailError.badRequest(\n\t\t\t`variable binding source '${source}' must use schema.table.column format`,\n\t\t);\n\t}\n\treturn [parts[0] as string, parts[1] as string, parts[2] as string];\n}\n\nfunction columnValue(\n\trecord: Record<string, unknown> | undefined,\n\tcolumn: string,\n): string | undefined {\n\tif (!record) {\n\t\treturn undefined;\n\t}\n\tconst value = record[column];\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tif (typeof value === \"number\" || typeof value === \"boolean\") {\n\t\treturn String(value);\n\t}\n\treturn JSON.stringify(value);\n}\n\nexport async function resolveEmailBindings(\n\tstores: AthenaAuthStores,\n\tbindings: AthenaAuthEmailVariableBinding[],\n\texplicit: Record<string, string>,\n\tanchors: AthenaAuthEmailRenderAnchors,\n): Promise<Record<string, string>> {\n\tconst variables = { ...explicit };\n\tlet userId = anchors.userId;\n\tlet organizationId = anchors.organizationId;\n\n\tif ((!userId || !organizationId) && anchors.sessionToken) {\n\t\tconst session = await stores.getSessionByToken(anchors.sessionToken);\n\t\tif (session) {\n\t\t\tuserId ??= session.user_id;\n\t\t\torganizationId ??= session.active_organization_id ?? undefined;\n\t\t}\n\t}\n\n\tfor (const binding of bindings) {\n\t\tconst [, table, column] = parseSourceAddress(binding.source);\n\t\tconst normalizedTable = table.toLowerCase();\n\n\t\tif (normalizedTable === \"sessions\" || normalizedTable === \"session\") {\n\t\t\tif (column.toLowerCase() === \"token\") {\n\t\t\t\tthrow AthenaAuthEmailError.badRequest(\n\t\t\t\t\t`variable binding '${binding.name}' may not expose session token values`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tlet resolved: string | undefined;\n\t\tif (normalizedTable === \"users\" || normalizedTable === \"user\") {\n\t\t\tif (!userId) {\n\t\t\t\tif (binding.required) {\n\t\t\t\t\tthrow AthenaAuthEmailError.badRequest(\n\t\t\t\t\t\t`variable binding '${binding.name}' requires a user_id render anchor`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst user = await stores.getUserById(userId);\n\t\t\tresolved = columnValue(\n\t\t\t\tuser as unknown as Record<string, unknown>,\n\t\t\t\tcolumn,\n\t\t\t);\n\t\t} else if (\n\t\t\tnormalizedTable === \"organizations\" ||\n\t\t\tnormalizedTable === \"organization\"\n\t\t) {\n\t\t\tif (!organizationId) {\n\t\t\t\tif (binding.required) {\n\t\t\t\t\tthrow AthenaAuthEmailError.badRequest(\n\t\t\t\t\t\t`variable binding '${binding.name}' requires an organization_id render anchor`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst organization = await stores.getOrganization(organizationId);\n\t\t\tresolved = columnValue(\n\t\t\t\torganization as unknown as Record<string, unknown> | undefined,\n\t\t\t\tcolumn,\n\t\t\t);\n\t\t} else if (\n\t\t\tnormalizedTable === \"sessions\" ||\n\t\t\tnormalizedTable === \"session\"\n\t\t) {\n\t\t\tif (!anchors.sessionToken) {\n\t\t\t\tif (binding.required) {\n\t\t\t\t\tthrow AthenaAuthEmailError.badRequest(\n\t\t\t\t\t\t`variable binding '${binding.name}' requires a session_token render anchor`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst session = await stores.getSessionByToken(anchors.sessionToken);\n\t\t\tresolved = columnValue(\n\t\t\t\tsession as unknown as Record<string, unknown> | undefined,\n\t\t\t\tcolumn,\n\t\t\t);\n\t\t} else {\n\t\t\tthrow AthenaAuthEmailError.badRequest(\n\t\t\t\t`variable binding source '${binding.source}' is not supported by athena-auth email rendering`,\n\t\t\t);\n\t\t}\n\n\t\tif (resolved === undefined) {\n\t\t\tif (binding.required) {\n\t\t\t\tthrow AthenaAuthEmailError.badRequest(\n\t\t\t\t\t`required variable binding '${binding.name}' did not resolve a value`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (!(binding.name in variables)) {\n\t\t\tvariables[binding.name] = resolved;\n\t\t}\n\t}\n\n\treturn variables;\n}\n","import type { AthenaEmailDeliveryPort } from \"../../../email/types.ts\";\nimport { resolveTemplateAttachments } from \"../../email/attachments.ts\";\nimport { resolveEmailBindings } from \"../../email/bindings.ts\";\nimport {\n\tATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n\ttype AthenaAuthEmailAttachmentFailureMode,\n\ttype 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\tasStringField,\n\treadJsonBody,\n\trequireStringField,\n} from \"../security.ts\";\nimport type { AthenaAuthEmailStore } from \"./store.ts\";\n\nexport interface AdminEmailRouteContext {\n\tdelivery?: AthenaEmailDeliveryPort;\n\temailStore: AthenaAuthEmailStore;\n\theaders: Headers;\n\trequireSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t) => Promise<{ user: { role: string | null } }>;\n\tstores: AthenaAuthStores;\n}\n\nfunction pickRequired(\n\tbody: Record<string, unknown>,\n\t...keys: string[]\n): string {\n\tfor (const key of keys) {\n\t\tconst value = asStringField(body, key)?.trim();\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\tthrow AthenaAuthRuntimeError.badRequest(`${keys[0]} is required`);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n\treturn value && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n}\n\nfunction asStringArray(value: unknown): string[] {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\treturn value.filter((entry): entry is string => typeof entry === \"string\");\n}\n\nfunction parseAttachments(\n\tvalue: unknown,\n): AthenaAuthEmailTemplateRow[\"attachments\"] {\n\tif (!value) {\n\t\treturn [];\n\t}\n\tconst items = Array.isArray(value) ? value : [value];\n\treturn items.flatMap((item) => {\n\t\tif (typeof item === \"string\" && item.trim()) {\n\t\t\treturn [{ file_url: item.trim() }];\n\t\t}\n\t\tconst record = asRecord(item);\n\t\tconst fileUrl =\n\t\t\tasStringField(record, \"file_url\") ?? asStringField(record, \"fileUrl\");\n\t\tif (!fileUrl) {\n\t\t\treturn [];\n\t\t}\n\t\tconst filename = asStringField(record, \"filename\") ?? undefined;\n\t\treturn [{ file_url: fileUrl, filename }];\n\t});\n}\n\nfunction parseBindings(\n\tvalue: unknown,\n): AthenaAuthEmailTemplateRow[\"variable_bindings\"] {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\treturn value.flatMap((item) => {\n\t\tconst record = asRecord(item);\n\t\tconst name = asStringField(record, \"name\");\n\t\tconst source = asStringField(record, \"source\");\n\t\tif (!name || !source) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\tname,\n\t\t\t\trequired: record.required === true,\n\t\t\t\tsource,\n\t\t\t},\n\t\t];\n\t});\n}\n\nfunction parseFailureMode(\n\tvalue: unknown,\n): AthenaAuthEmailAttachmentFailureMode {\n\treturn value === \"skip\" ? \"skip\" : \"fail\";\n}\n\nfunction nowIso(): string {\n\treturn new Date().toISOString();\n}\n\nasync function requireAdmin(\n\trequest: Request,\n\tctx: AdminEmailRouteContext,\n): Promise<void> {\n\tconst resolved = await ctx.requireSession(request, ctx.stores);\n\tconst role = resolved.user.role;\n\tif (role !== \"admin\" && role !== \"owner\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n}\n\nfunction templatePayload(\n\tbody: Record<string, unknown>,\n): Omit<AthenaAuthEmailTemplateRow, \"created_at\" | \"id\" | \"updated_at\"> {\n\tconst templateKey =\n\t\tasStringField(body, \"template_key\") ?? asStringField(body, \"templateKey\");\n\tconst subject =\n\t\tasStringField(body, \"subject_template\") ??\n\t\tasStringField(body, \"subjectTemplate\");\n\tif (!templateKey || !subject) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"template_key and subject_template are required\",\n\t\t);\n\t}\n\treturn {\n\t\tattachment_failure_mode: parseFailureMode(\n\t\t\tbody.attachment_failure_mode ?? body.attachmentFailureMode,\n\t\t),\n\t\tattachments: parseAttachments(body.attachments),\n\t\tevent_type:\n\t\t\tasStringField(body, \"event_type\") ??\n\t\t\tasStringField(body, \"eventType\") ??\n\t\t\tnull,\n\t\thtml_template:\n\t\t\tasStringField(body, \"html_template\") ??\n\t\t\tasStringField(body, \"htmlTemplate\") ??\n\t\t\tnull,\n\t\tis_active:\n\t\t\tbody.is_active === false || body.isActive === false ? false : true,\n\t\tlocale: asStringField(body, \"locale\") ?? \"en\",\n\t\tmetadata: asRecord(body.metadata),\n\t\tsubject_template: subject,\n\t\ttemplate_key: templateKey,\n\t\ttext_template:\n\t\t\tasStringField(body, \"text_template\") ??\n\t\t\tasStringField(body, \"textTemplate\") ??\n\t\t\tnull,\n\t\tvariable_bindings: parseBindings(\n\t\t\tbody.variable_bindings ?? body.variableBindings,\n\t\t),\n\t\tvariables: asStringArray(body.variables),\n\t};\n}\n\nexport async function handleAdminEmailRoutes(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: AdminEmailRouteContext,\n): Promise<Response | null> {\n\tif (!path.startsWith(\"/admin/email\")) {\n\t\treturn null;\n\t}\n\tawait requireAdmin(request, ctx);\n\tconst url = new URL(request.url);\n\n\tif (path === \"/admin/email-event-type/list\" && method === \"GET\") {\n\t\tconst category = url.searchParams.get(\"category\") ?? undefined;\n\t\tconst rows = (await ctx.emailStore.listEventTypes()).filter(\n\t\t\t(entry) => !category || entry.category === category,\n\t\t);\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\temailEventTypes: rows,\n\t\t\t\tevent_types: rows,\n\t\t\t\tlimit: rows.length,\n\t\t\t\ttotal: rows.length,\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tif (path === \"/admin/email-template/list\" && method === \"GET\") {\n\t\tconst isActive =\n\t\t\turl.searchParams.get(\"is_active\") ?? url.searchParams.get(\"isActive\");\n\t\tconst rows = await ctx.emailStore.listTemplates({\n\t\t\tevent_type:\n\t\t\t\turl.searchParams.get(\"event_type\") ??\n\t\t\t\turl.searchParams.get(\"eventType\") ??\n\t\t\t\tundefined,\n\t\t\tis_active: isActive === null ? undefined : isActive === \"true\",\n\t\t\tlocale: url.searchParams.get(\"locale\") ?? undefined,\n\t\t\ttemplate_key:\n\t\t\t\turl.searchParams.get(\"template_key\") ??\n\t\t\t\turl.searchParams.get(\"templateKey\") ??\n\t\t\t\tundefined,\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\temail_templates: rows,\n\t\t\t\tlimit: rows.length,\n\t\t\t\toffset: 0,\n\t\t\t\ttotal: rows.length,\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tif (path === \"/admin/email-template/get\" && method === \"GET\") {\n\t\tconst id = url.searchParams.get(\"id\");\n\t\tif (!id) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"id is required\");\n\t\t}\n\t\tconst row = await ctx.emailStore.getTemplate(id);\n\t\tif (!row) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Email template not found\");\n\t\t}\n\t\treturn jsonResponse(200, { email_template: row }, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email-template/create\" && method === \"POST\") {\n\t\tconst body = asRecord(\n\t\t\tawait readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES),\n\t\t);\n\t\tconst stamp = nowIso();\n\t\tconst row = await ctx.emailStore.createTemplate({\n\t\t\t...templatePayload(body),\n\t\t\tcreated_at: stamp,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tupdated_at: stamp,\n\t\t});\n\t\treturn jsonResponse(200, row, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email-template/update\" && method === \"POST\") {\n\t\tconst body = asRecord(\n\t\t\tawait readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES),\n\t\t);\n\t\tconst id = requireStringField(body, \"id\");\n\t\tconst existing = await ctx.emailStore.getTemplate(id);\n\t\tif (!existing) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Email template not found\");\n\t\t}\n\t\tconst next = await ctx.emailStore.updateTemplate(\n\t\t\tid,\n\t\t\ttemplatePayload({\n\t\t\t\t...existing,\n\t\t\t\t...body,\n\t\t\t\tsubject_template:\n\t\t\t\t\tasStringField(body, \"subject_template\") ??\n\t\t\t\t\tasStringField(body, \"subjectTemplate\") ??\n\t\t\t\t\texisting.subject_template,\n\t\t\t\ttemplate_key:\n\t\t\t\t\tasStringField(body, \"template_key\") ??\n\t\t\t\t\tasStringField(body, \"templateKey\") ??\n\t\t\t\t\texisting.template_key,\n\t\t\t}),\n\t\t);\n\t\treturn jsonResponse(200, next, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email-template/delete\" && method === \"POST\") {\n\t\tconst body = asRecord(\n\t\t\tawait readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES),\n\t\t);\n\t\tconst id = requireStringField(body, \"id\");\n\t\tconst deleted = await ctx.emailStore.deleteTemplate(id);\n\t\tif (!deleted) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Email template not found\");\n\t\t}\n\t\treturn jsonResponse(200, { success: true }, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email-template/send\" && method === \"POST\") {\n\t\treturn sendStoredTemplate(request, ctx);\n\t}\n\n\tif (path === \"/admin/email-failure/list\" && method === \"GET\") {\n\t\tconst rows = await ctx.emailStore.listFailures();\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\temailSendFailures: rows,\n\t\t\t\temail_send_failures: rows,\n\t\t\t\ttotal: rows.length,\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tif (path === \"/admin/email-failure/get\" && method === \"GET\") {\n\t\tconst id = url.searchParams.get(\"id\");\n\t\tif (!id) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"id is required\");\n\t\t}\n\t\tconst row = await ctx.emailStore.getFailure(id);\n\t\tif (!row) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Email failure not found\");\n\t\t}\n\t\treturn jsonResponse(200, { email_send_failure: row }, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email-failure/create\" && method === \"POST\") {\n\t\tconst body = asRecord(\n\t\t\tawait readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES),\n\t\t);\n\t\tconst stamp = nowIso();\n\t\tconst row = await ctx.emailStore.createFailure({\n\t\t\tcreated_at: stamp,\n\t\t\terror_message: pickRequired(body, \"error_message\", \"errorMessage\"),\n\t\t\tflow: asStringField(body, \"flow\") ?? \"admin.email_failure.create\",\n\t\t\tid: crypto.randomUUID(),\n\t\t\tmetadata: asRecord(body.metadata),\n\t\t\trecipient_email: pickRequired(body, \"recipient_email\", \"recipientEmail\"),\n\t\t\tresolved: false,\n\t\t\tupdated_at: stamp,\n\t\t});\n\t\treturn jsonResponse(200, row, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email-failure/update\" && method === \"POST\") {\n\t\tconst body = asRecord(\n\t\t\tawait readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES),\n\t\t);\n\t\tconst id = requireStringField(body, \"id\");\n\t\tconst next = await ctx.emailStore.updateFailure(id, {\n\t\t\tresolved: typeof body.resolved === \"boolean\" ? body.resolved : undefined,\n\t\t\tresolution_note:\n\t\t\t\tasStringField(body, \"resolution_note\") ??\n\t\t\t\tasStringField(body, \"resolutionNote\"),\n\t\t});\n\t\tif (!next) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Email failure not found\");\n\t\t}\n\t\treturn jsonResponse(200, next, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email-failure/delete\" && method === \"POST\") {\n\t\tconst body = asRecord(\n\t\t\tawait readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES),\n\t\t);\n\t\tconst deleted = await ctx.emailStore.deleteFailure(\n\t\t\trequireStringField(body, \"id\"),\n\t\t);\n\t\tif (!deleted) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Email failure not found\");\n\t\t}\n\t\treturn jsonResponse(200, { success: true }, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email/list\" && method === \"GET\") {\n\t\tconst rows = await ctx.emailStore.listEmails();\n\t\treturn jsonResponse(200, { emails: rows, total: rows.length }, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email/get\" && method === \"GET\") {\n\t\tconst id = url.searchParams.get(\"id\");\n\t\tif (!id) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"id is required\");\n\t\t}\n\t\tconst row = await ctx.emailStore.getEmail(id);\n\t\tif (!row) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Email not found\");\n\t\t}\n\t\treturn jsonResponse(200, { email: row }, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email/create\" && method === \"POST\") {\n\t\tconst body = asRecord(\n\t\t\tawait readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES),\n\t\t);\n\t\tconst stamp = nowIso();\n\t\tconst row = await ctx.emailStore.createEmail({\n\t\t\tcreated_at: stamp,\n\t\t\tflow: asStringField(body, \"flow\") ?? null,\n\t\t\tfrom_address:\n\t\t\t\tasStringField(body, \"from_address\") ??\n\t\t\t\tasStringField(body, \"fromAddress\") ??\n\t\t\t\t\"athena@localhost\",\n\t\t\tfrom_name:\n\t\t\t\tasStringField(body, \"from_name\") ??\n\t\t\t\tasStringField(body, \"fromName\") ??\n\t\t\t\tnull,\n\t\t\thtml_body:\n\t\t\t\tasStringField(body, \"html_body\") ??\n\t\t\t\tasStringField(body, \"htmlBody\") ??\n\t\t\t\tnull,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tmetadata: asRecord(body.metadata),\n\t\t\tprovider: asStringField(body, \"provider\") ?? \"unknown\",\n\t\t\trecipient_email: pickRequired(body, \"recipient_email\", \"recipientEmail\"),\n\t\t\tsubject: requireStringField(body, \"subject\"),\n\t\t\ttext_body:\n\t\t\t\tasStringField(body, \"text_body\") ??\n\t\t\t\tasStringField(body, \"textBody\") ??\n\t\t\t\tnull,\n\t\t\tupdated_at: stamp,\n\t\t});\n\t\treturn jsonResponse(200, row, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email/update\" && method === \"POST\") {\n\t\tconst body = asRecord(\n\t\t\tawait readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES),\n\t\t);\n\t\tconst next = await ctx.emailStore.updateEmail(\n\t\t\trequireStringField(body, \"id\"),\n\t\t\t{\n\t\t\t\tsubject: asStringField(body, \"subject\") ?? undefined,\n\t\t\t},\n\t\t);\n\t\tif (!next) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Email not found\");\n\t\t}\n\t\treturn jsonResponse(200, next, ctx.headers);\n\t}\n\n\tif (path === \"/admin/email/delete\" && method === \"POST\") {\n\t\tconst body = asRecord(\n\t\t\tawait readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES),\n\t\t);\n\t\tconst deleted = await ctx.emailStore.deleteEmail(\n\t\t\trequireStringField(body, \"id\"),\n\t\t);\n\t\tif (!deleted) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Email not found\");\n\t\t}\n\t\treturn jsonResponse(200, { success: true }, ctx.headers);\n\t}\n\n\treturn null;\n}\n\nasync function persistFailure(\n\tctx: AdminEmailRouteContext,\n\tinput: {\n\t\terrorCode?: string;\n\t\terrorMessage: string;\n\t\trecipientEmail: string;\n\t\ttemplateId?: string | null;\n\t\ttemplateKey?: string | null;\n\t},\n) {\n\tconst stamp = nowIso();\n\treturn ctx.emailStore.createFailure({\n\t\tcreated_at: stamp,\n\t\terror_code: input.errorCode,\n\t\terror_message: input.errorMessage,\n\t\tflow: \"admin.email_template.send\",\n\t\tid: crypto.randomUUID(),\n\t\tmetadata: {},\n\t\trecipient_email: input.recipientEmail,\n\t\tresolved: false,\n\t\ttemplate_id: input.templateId,\n\t\ttemplate_key: input.templateKey,\n\t\tupdated_at: stamp,\n\t});\n}\n\nasync function sendStoredTemplate(\n\trequest: Request,\n\tctx: AdminEmailRouteContext,\n): Promise<Response> {\n\tconst body = asRecord(\n\t\tawait readJsonBody(request, ATHENA_AUTH_MAX_ADMIN_JSON_BYTES),\n\t);\n\tconst templateId = pickRequired(body, \"template_id\", \"templateId\");\n\tconst recipientEmail = pickRequired(\n\t\tbody,\n\t\t\"recipient_email\",\n\t\t\"recipientEmail\",\n\t);\n\tconst template = await ctx.emailStore.getTemplate(templateId);\n\tif (!template) {\n\t\tthrow AthenaAuthRuntimeError.notFound(\"Email template not found\");\n\t}\n\tif (!template.is_active) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Email template is inactive\");\n\t}\n\n\tconst renderVariables = asRecord(\n\t\tbody.render_variables ?? body.renderVariables,\n\t);\n\tconst explicit: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(renderVariables)) {\n\t\tif (typeof value === \"string\") {\n\t\t\texplicit[key] = value;\n\t\t}\n\t}\n\n\tlet variables: Record<string, string>;\n\tlet attachments: ReturnType<typeof parseAttachments>;\n\tconst attachmentFailureMode = parseFailureMode(\n\t\tbody.attachment_failure_mode ??\n\t\t\tbody.attachmentFailureMode ??\n\t\t\ttemplate.attachment_failure_mode,\n\t);\n\ttry {\n\t\tvariables = await resolveEmailBindings(\n\t\t\tctx.stores,\n\t\t\ttemplate.variable_bindings,\n\t\t\texplicit,\n\t\t\t{\n\t\t\t\torganizationId:\n\t\t\t\t\tasStringField(body, \"organization_id\") ??\n\t\t\t\t\tasStringField(body, \"organizationId\") ??\n\t\t\t\t\tundefined,\n\t\t\t\tsessionToken:\n\t\t\t\t\tasStringField(body, \"session_token\") ??\n\t\t\t\t\tasStringField(body, \"sessionToken\") ??\n\t\t\t\t\tundefined,\n\t\t\t\tuserId:\n\t\t\t\t\tasStringField(body, \"user_id\") ??\n\t\t\t\t\tasStringField(body, \"userId\") ??\n\t\t\t\t\tundefined,\n\t\t\t},\n\t\t);\n\t\tattachments = resolveTemplateAttachments(\n\t\t\t[...template.attachments, ...parseAttachments(body.attachments)],\n\t\t\tattachmentFailureMode,\n\t\t);\n\t} catch (error) {\n\t\tif (error instanceof AthenaAuthEmailError) {\n\t\t\tthrow new AthenaAuthRuntimeError(error.status, error.message);\n\t\t}\n\t\tthrow error;\n\t}\n\n\tconst subject = renderAuthEmailFragment(template.subject_template, variables);\n\tconst html = template.html_template\n\t\t? renderAuthEmailFragment(template.html_template, variables)\n\t\t: undefined;\n\tconst text = template.text_template\n\t\t? renderAuthEmailFragment(template.text_template, variables)\n\t\t: undefined;\n\n\tif (!ctx.delivery) {\n\t\tconst failure = await persistFailure(ctx, {\n\t\t\terrorCode: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n\t\t\terrorMessage: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n\t\t\trecipientEmail,\n\t\t\ttemplateId: template.id,\n\t\t\ttemplateKey: template.template_key,\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t503,\n\t\t\t{\n\t\t\t\temail_send_failure_id: failure.id,\n\t\t\t\terror: ATHENA_AUTH_EMAIL_PROVIDER_NOT_CONFIGURED,\n\t\t\t\tevent_type: template.event_type,\n\t\t\t\tflow: \"admin.email_template.send\",\n\t\t\t\trecipient_email: recipientEmail,\n\t\t\t\tsubject,\n\t\t\t\tsuccess: false,\n\t\t\t\ttemplate_id: template.id,\n\t\t\t\ttemplate_key: template.template_key,\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\n\n\tconst stamp = nowIso();\n\tconst emailId = crypto.randomUUID();\n\tawait ctx.emailStore.createEmail({\n\t\tcreated_at: stamp,\n\t\tflow: \"admin.email_template.send\",\n\t\tfrom_address: \"athena@localhost\",\n\t\tfrom_name: null,\n\t\thtml_body: html ?? null,\n\t\tid: emailId,\n\t\tmetadata: {\n\t\t\tevent_type: template.event_type,\n\t\t\ttemplate_key: template.template_key,\n\t\t},\n\t\tprovider: \"pending\",\n\t\trecipient_email: recipientEmail,\n\t\tsubject,\n\t\ttext_body: text ?? null,\n\t\tupdated_at: stamp,\n\t});\n\n\ttry {\n\t\tconst result = await ctx.delivery.send({\n\t\t\tattachmentFailureMode,\n\t\t\tattachments: attachments.map((attachment) => ({\n\t\t\t\tfilename: attachment.filename,\n\t\t\t\tfileUrl: attachment.file_url,\n\t\t\t})),\n\t\t\thtml,\n\t\t\tmetadata: {\n\t\t\t\tevent_type: template.event_type,\n\t\t\t\tflow: \"admin.email_template.send\",\n\t\t\t\ttemplate_id: template.id,\n\t\t\t\ttemplate_key: template.template_key,\n\t\t\t},\n\t\t\tsubject,\n\t\t\ttext,\n\t\t\tto: recipientEmail,\n\t\t});\n\t\tif (!result.success) {\n\t\t\tawait ctx.emailStore.deleteEmail(emailId);\n\t\t\tconst failure = await persistFailure(ctx, {\n\t\t\t\terrorCode: \"ATHENA_EMAIL_DELIVERY_FAILED\",\n\t\t\t\terrorMessage: \"Email delivery failed\",\n\t\t\t\trecipientEmail,\n\t\t\t\ttemplateId: template.id,\n\t\t\t\ttemplateKey: template.template_key,\n\t\t\t});\n\t\t\treturn jsonResponse(\n\t\t\t\t503,\n\t\t\t\t{\n\t\t\t\t\temail_send_failure_id: failure.id,\n\t\t\t\t\terror: \"ATHENA_EMAIL_DELIVERY_FAILED\",\n\t\t\t\t\tevent_type: template.event_type,\n\t\t\t\t\tflow: \"admin.email_template.send\",\n\t\t\t\t\trecipient_email: recipientEmail,\n\t\t\t\t\tsubject,\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\ttemplate_id: template.id,\n\t\t\t\t\ttemplate_key: template.template_key,\n\t\t\t\t},\n\t\t\t\tctx.headers,\n\t\t\t);\n\t\t}\n\t\ttry {\n\t\t\tawait ctx.emailStore.updateEmail(emailId, {\n\t\t\t\tfrom_address: result.from ?? \"athena@localhost\",\n\t\t\t\tfrom_name: result.fromName ?? null,\n\t\t\t\tprovider: result.provider,\n\t\t\t\tupdated_at: nowIso(),\n\t\t\t});\n\t\t} catch {\n\t\t\t// Delivery already succeeded; audit persistence must not rewrite it.\n\t\t}\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\tattachment_count: attachments.length,\n\t\t\t\tevent_type: template.event_type,\n\t\t\t\tflow: \"admin.email_template.send\",\n\t\t\t\trecipient_email: recipientEmail,\n\t\t\t\tsubject,\n\t\t\t\tsuccess: true,\n\t\t\t\ttemplate_id: template.id,\n\t\t\t\ttemplate_key: template.template_key,\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t} catch (error) {\n\t\tawait ctx.emailStore.deleteEmail(emailId);\n\t\tconst mapped = authEmailFailureFromDeliveryError(error);\n\t\tconst failure = await persistFailure(ctx, {\n\t\t\terrorCode: mapped.errorCode,\n\t\t\terrorMessage: mapped.errorMessage,\n\t\t\trecipientEmail,\n\t\t\ttemplateId: template.id,\n\t\t\ttemplateKey: template.template_key,\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t503,\n\t\t\t{\n\t\t\t\temail_send_failure_id: failure.id,\n\t\t\t\terror: mapped.errorCode,\n\t\t\t\tevent_type: template.event_type,\n\t\t\t\tflow: \"admin.email_template.send\",\n\t\t\t\trecipient_email: recipientEmail,\n\t\t\t\tsubject,\n\t\t\t\tsuccess: false,\n\t\t\t\ttemplate_id: template.id,\n\t\t\t\ttemplate_key: template.template_key,\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\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.replace(/=+$/g, \"\").toUpperCase().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(key: Uint8Array, data: Uint8Array): 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((options?.timestamp ?? Date.now()) / 1000 / period);\n  const digest = await hmacSha1(secret, writeUint64(counter));\n  const offset = (digest[digest.length - 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 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\tsanitizeHookApiKey,\n\tsanitizeHookSession,\n\tsanitizeHookUser,\n} from \"../hooks/sanitize.ts\";\nimport {\n\tgenerateApiKey,\n\tisApiKeyExpired,\n\tsha256Base64Url,\n\ttoPublicApiKey,\n} from \"./api-key.ts\";\nimport { revokeAuthBridgeCodesForSessions } from \"./bridge/revoke.ts\";\nimport {\n\tcreateClearSessionCookieHeader,\n\treadBearerToken,\n\tshouldSetSecureCookie,\n} from \"./cookies.ts\";\nimport {\n\tapplyChangeEmailToken,\n\ttype MailerEmit,\n\tresolveChangeEmailTarget,\n\ttokenizedUrl,\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 { asStringField, readJsonBody, requireStringField } from \"./security.ts\";\nimport type { AuthApiKeyRow } from \"./stores.ts\";\nimport {\n\tbuildTotpUri,\n\tdecodeBase32,\n\tgenerateTotpSecret,\n\tverifyTotpCode,\n} from \"./totp.ts\";\n\nexport interface ExtendedRouteContext {\n\tconfig: NormalizedAthenaAuthConfig;\n\temitMail?: MailerEmit;\n\thasher: AthenaAuthPasswordHasher;\n\theaders: Headers;\n\thookRequest: (\n\t\trequest: Request,\n\t\tpath: string,\n\t) => {\n\t\tipAddress?: string;\n\t\tmethod: string;\n\t\tpath: string;\n\t\tuserAgent?: string;\n\t};\n\tissueSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t\tuserId: string,\n\t\theaders: Headers,\n\t) => Promise<AuthSessionRow>;\n\tgetBridgeCodeStore?: () => AuthBridgeCodeStore;\n\tmutate: AuthDomainMutate;\n\trequireSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t) => Promise<{ session: AuthSessionRow; token: string; user: AuthUserRow }>;\n\tstores: AthenaAuthStores;\n\ttraceId: string;\n}\n\nasync function requirePassword(\n\tuser: AuthUserRow,\n\tpassword: string,\n\thasher: AthenaAuthPasswordHasher,\n): Promise<void> {\n\tconst storedHash = extractPasswordHash(user.metadata);\n\tif (!storedHash || !(await hasher.verify(password, storedHash))) {\n\t\tthrow AthenaAuthRuntimeError.invalidCredentials();\n\t}\n}\n\nfunction generateBackupCodes(): string[] {\n\treturn Array.from({ length: 10 }, () =>\n\t\tBuffer.from(crypto.getRandomValues(new Uint8Array(5)))\n\t\t\t.toString(\"hex\")\n\t\t\t.slice(0, 8)\n\t\t\t.toUpperCase(),\n\t);\n}\n\nasync function hashBackupCodes(\n\tcodes: string[],\n\thasher: AthenaAuthPasswordHasher,\n): Promise<string> {\n\tconst hashed = [];\n\tfor (const code of codes) {\n\t\thashed.push(await hasher.hash(code));\n\t}\n\treturn JSON.stringify(hashed);\n}\n\nexport async function handleExtendedRoute(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: ExtendedRouteContext,\n): Promise<Response | undefined> {\n\tconst { config, hasher, headers, stores } = ctx;\n\n\tif (path === \"/send-verification-email\" && method === \"POST\") {\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst email = requireStringField(body, \"email\");\n\t\tconst user = await stores.getUserByEmail(email);\n\t\tif (!user) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\n\t\t\t\t\"No user found with this email address\",\n\t\t\t);\n\t\t}\n\t\tif (user.email_verified) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Email is already verified\");\n\t\t}\n\t\tconst token = `verify_${crypto.randomUUID()}`;\n\t\tawait stores.createVerification({\n\t\t\texpiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),\n\t\t\tid: crypto.randomUUID(),\n\t\t\tidentifier: email,\n\t\t\tvalue: token,\n\t\t});\n\t\tconst callbackURL = asStringField(body, \"callbackURL\");\n\t\tconst origin = new URL(request.url).origin;\n\t\tconst verificationUrl = tokenizedUrl(\n\t\t\tcallbackURL,\n\t\t\ttoken,\n\t\t\torigin,\n\t\t\t`${config.basePath || \"\"}/verify-email`,\n\t\t);\n\t\tawait ctx.emitMail?.({\n\t\t\tdata: {\n\t\t\t\tlegacy_hook_url: callbackURL ? verificationUrl : token,\n\t\t\t\tverification_url: verificationUrl,\n\t\t\t},\n\t\t\teventType: authEmailEvents.user.email.verify,\n\t\t\trecipient: email,\n\t\t});\n\t\treturn jsonResponse(200, { status: true }, headers);\n\t}\n\n\tif (path === \"/verify-email\" && method === \"GET\") {\n\t\tconst token = new URL(request.url).searchParams.get(\"token\")?.trim();\n\t\tif (!token) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"token is required\");\n\t\t}\n\t\tconst verification = await stores.getVerificationByValue(token);\n\t\tif (!verification) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n\t\t}\n\t\tconst user = await stores.getUserByEmail(verification.identifier);\n\t\tif (!user) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\t}\n\t\tconst updated = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: { kind: \"user\", userId: user.id },\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.email.verify\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tconst consumed = await scope.stores.consumeVerification(token);\n\t\t\t\tif (!consumed) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n\t\t\t\t}\n\t\t\t\treturn scope.stores.updateUser(user.id, { emailVerified: true });\n\t\t\t},\n\t\t\tinput: { userId: user.id },\n\t\t\tprevious: async () => ({ emailVerified: Boolean(user.email_verified) }),\n\t\t\tresultOf: (row) => ({ user: sanitizeHookUser(row) }),\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ status: true, user: toPublicUser(updated) },\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/change-email\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst newEmail = requireStringField(body, \"newEmail\");\n\t\tif (await stores.getUserByEmail(newEmail)) {\n\t\t\tthrow AthenaAuthRuntimeError.conflict(\n\t\t\t\t\"A user with this email already exists\",\n\t\t\t);\n\t\t}\n\t\tconst token = `change_${crypto.randomUUID()}`;\n\t\tawait stores.createVerification({\n\t\t\texpiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),\n\t\t\tid: crypto.randomUUID(),\n\t\t\tidentifier: `change-email:${resolved.user.id}:${newEmail}`,\n\t\t\tvalue: token,\n\t\t});\n\t\tconst origin = new URL(request.url).origin;\n\t\tconst verificationUrl = tokenizedUrl(\n\t\t\tasStringField(body, \"callbackURL\"),\n\t\t\ttoken,\n\t\t\torigin,\n\t\t\t`${config.basePath || \"\"}/change-email/verify`,\n\t\t);\n\t\tawait ctx.emitMail?.({\n\t\t\tdata: {\n\t\t\t\tlegacy_hook_url: asStringField(body, \"callbackURL\")\n\t\t\t\t\t? verificationUrl\n\t\t\t\t\t: token,\n\t\t\t\tverification_url: verificationUrl,\n\t\t\t},\n\t\t\teventType: authEmailEvents.user.email.changeConfirmation,\n\t\t\trecipient: newEmail,\n\t\t});\n\t\treturn jsonResponse(200, { status: true }, headers);\n\t}\n\n\tif (path === \"/change-email/verify\" && method === \"POST\") {\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst token = requireStringField(body, \"token\");\n\t\tconst target = await resolveChangeEmailTarget(stores, token);\n\t\tconst previousUser = await stores.getUserById(target.userId);\n\t\tconst updated = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: { kind: \"user\", userId: target.userId },\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.email.update\",\n\t\t\texecute: (scope) => applyChangeEmailToken(scope.stores, token),\n\t\t\tinput: { email: target.email, userId: target.userId },\n\t\t\tprevious: async () => {\n\t\t\t\tif (!previousUser) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\t\t\t}\n\t\t\t\treturn { email: previousUser.email };\n\t\t\t},\n\t\t\tresultOf: (row) => ({ user: sanitizeHookUser(row) }),\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ status: true, user: toPublicUser(updated) },\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/delete-user\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst password = asStringField(body, \"password\");\n\t\tif (password) {\n\t\t\tawait requirePassword(resolved.user, password, hasher);\n\t\t} else if (resolved.user.email) {\n\t\t\tconst token = `delete_${crypto.randomUUID()}`;\n\t\t\tawait stores.createVerification({\n\t\t\t\texpiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tidentifier: `delete_user:${resolved.user.id}`,\n\t\t\t\tvalue: token,\n\t\t\t});\n\t\t\tconst origin = new URL(request.url).origin;\n\t\t\tconst verificationUrl = tokenizedUrl(\n\t\t\t\tasStringField(body, \"callbackURL\"),\n\t\t\t\ttoken,\n\t\t\t\torigin,\n\t\t\t\t`${config.basePath || \"\"}/delete-user/verify`,\n\t\t\t);\n\t\t\tawait ctx.emitMail?.({\n\t\t\t\tdata: { verification_url: verificationUrl },\n\t\t\t\teventType: authEmailEvents.user.account.deletionConfirmation,\n\t\t\t\trecipient: resolved.user.email,\n\t\t\t});\n\t\t\treturn jsonResponse(200, { status: true }, headers);\n\t\t}\n\t\tawait ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"user.delete\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tconst sessions = await scope.stores.listUserSessions(resolved.user.id);\n\t\t\t\tconst bridgeStore = ctx.getBridgeCodeStore?.();\n\t\t\t\tif (bridgeStore) {\n\t\t\t\t\tawait revokeAuthBridgeCodesForSessions(\n\t\t\t\t\t\tbridgeStore,\n\t\t\t\t\t\tsessions.map((session) => session.id),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait scope.stores.deleteUser(resolved.user.id);\n\t\t\t},\n\t\t\tinput: { userId: resolved.user.id },\n\t\t\tprevious: async () => ({ user: sanitizeHookUser(resolved.user) }),\n\t\t\tresultOf: () => ({\n\t\t\t\tdeleted: true as const,\n\t\t\t\tid: resolved.user.id,\n\t\t\t\tuserId: resolved.user.id,\n\t\t\t}),\n\t\t});\n\t\theaders.append(\n\t\t\t\"set-cookie\",\n\t\t\tcreateClearSessionCookieHeader(\n\t\t\t\tconfig.session.cookieName,\n\t\t\t\tshouldSetSecureCookie(request, config.security.cookieSecure),\n\t\t\t),\n\t\t);\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ message: \"User deleted\", success: true },\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/api-key/create\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst prefix = asStringField(body, \"prefix\");\n\t\tconst generated = await generateApiKey(prefix);\n\t\tconst expiresIn = asStringField(body, \"expiresIn\");\n\t\tconst expiresAt = expiresIn\n\t\t\t? new Date(Date.now() + Number.parseInt(expiresIn, 10) * 1000)\n\t\t\t: null;\n\t\tconst remainingRaw = asStringField(body, \"remaining\");\n\t\tconst created = nowIso();\n\t\tconst row: AuthApiKeyRow = {\n\t\t\tcreated_at: created,\n\t\t\tenabled: true,\n\t\t\texpires_at: expiresAt,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tkey: generated.hash,\n\t\t\tlast_request: null,\n\t\t\tmetadata: asStringField(body, \"metadata\") ?? null,\n\t\t\tname: asStringField(body, \"name\") ?? null,\n\t\t\tpermissions: asStringField(body, \"permissions\") ?? null,\n\t\t\tprefix: prefix ?? null,\n\t\t\tremaining: remainingRaw ? Number.parseInt(remainingRaw, 10) : null,\n\t\t\tstart: generated.start,\n\t\t\tupdated_at: created,\n\t\t\tuser_id: asStringField(body, \"userId\") ?? resolved.user.id,\n\t\t};\n\t\tconst stored = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"apiKey.create\",\n\t\t\texecute: (scope) => scope.stores.createApiKey(row),\n\t\t\tinput: {\n\t\t\t\tname: asStringField(body, \"name\") ?? undefined,\n\t\t\t\tuserId: row.user_id,\n\t\t\t},\n\t\t\tresultOf: (created) => ({ apiKey: sanitizeHookApiKey(created) }),\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\ttoPublicApiKey(stored, generated.fullKey),\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/api-key/list\" && method === \"GET\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst keys = await stores.listApiKeys(resolved.user.id);\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\tapiKeys: keys.map((key) => {\n\t\t\t\t\tconst publicKey = toPublicApiKey(key);\n\t\t\t\t\tdelete publicKey.key;\n\t\t\t\t\treturn publicKey;\n\t\t\t\t}),\n\t\t\t},\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/api-key/get\" && (method === \"GET\" || method === \"POST\")) {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst id =\n\t\t\tmethod === \"GET\"\n\t\t\t\t? new URL(request.url).searchParams.get(\"id\")\n\t\t\t\t: asStringField(\n\t\t\t\t\tawait readJsonBody(request, config.security.bodyLimitBytes),\n\t\t\t\t\t\"id\",\n\t\t\t\t);\n\t\tif (!id) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"id is required\");\n\t\t}\n\t\tconst key = await stores.getApiKeyById(id);\n\t\tif (!key || key.user_id !== resolved.user.id) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"API key not found\");\n\t\t}\n\t\tconst publicKey = toPublicApiKey(key);\n\t\tdelete publicKey.key;\n\t\treturn jsonResponse(200, publicKey, headers);\n\t}\n\n\tif (path === \"/api-key/delete\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst id = asStringField(body, \"keyId\") ?? requireStringField(body, \"id\");\n\t\tconst key = await stores.getApiKeyById(id);\n\t\tif (!key || key.user_id !== resolved.user.id) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"API key not found\");\n\t\t}\n\t\tawait ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"apiKey.delete\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tawait scope.stores.deleteApiKey(id);\n\t\t\t},\n\t\t\tinput: { id },\n\t\t\tprevious: async () => ({ apiKey: sanitizeHookApiKey(key) }),\n\t\t\tresultOf: () => ({\n\t\t\t\tdeleted: true as const,\n\t\t\t\tid,\n\t\t\t\tuserId: key.user_id,\n\t\t\t}),\n\t\t});\n\t\treturn jsonResponse(200, { success: true }, headers);\n\t}\n\n\tif (path === \"/api-key/verify\" && method === \"POST\") {\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst rawKey = requireStringField(body, \"key\");\n\t\tconst hash = await sha256Base64Url(rawKey);\n\t\tconst key = await stores.getApiKeyByHash(hash);\n\t\tif (!key?.enabled || isApiKeyExpired(key)) {\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{\n\t\t\t\t\terror: { code: \"INVALID_API_KEY\", message: \"Invalid API key\" },\n\t\t\t\t\tkey: null,\n\t\t\t\t\tvalid: false,\n\t\t\t\t},\n\t\t\t\theaders,\n\t\t\t);\n\t\t}\n\t\tawait stores.touchApiKey(key.id);\n\t\tconst publicKey = toPublicApiKey(key);\n\t\tdelete publicKey.key;\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ error: null, key: publicKey, valid: true },\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/api-key/delete-all-expired-api-keys\" && method === \"POST\") {\n\t\tawait ctx.requireSession(request, stores);\n\t\tconst deleted = await stores.deleteExpiredApiKeys();\n\t\treturn jsonResponse(200, { deleted }, headers);\n\t}\n\n\tif (path === \"/api-key/update\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst id = asStringField(body, \"keyId\") ?? requireStringField(body, \"id\");\n\t\tconst key = await stores.getApiKeyById(id);\n\t\tif (!key || key.user_id !== resolved.user.id) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"API key not found\");\n\t\t}\n\t\tconst enabledRaw = body.enabled;\n\t\tconst updated = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"apiKey.update\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tconst next = await scope.stores.updateApiKey(id, {\n\t\t\t\t\tenabled: typeof enabledRaw === \"boolean\" ? enabledRaw : undefined,\n\t\t\t\t\tmetadata: asStringField(body, \"metadata\"),\n\t\t\t\t\tname: asStringField(body, \"name\"),\n\t\t\t\t\tpermissions: asStringField(body, \"permissions\"),\n\t\t\t\t});\n\t\t\t\tif (!next) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"API key not found\");\n\t\t\t\t}\n\t\t\t\treturn next;\n\t\t\t},\n\t\t\tinput: { id, name: asStringField(body, \"name\") },\n\t\t\tprevious: async () => ({ name: key.name }),\n\t\t\tresultOf: (row) => ({ apiKey: sanitizeHookApiKey(row) }),\n\t\t});\n\t\tif (!updated) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"API key not found\");\n\t\t}\n\t\tconst publicKey = toPublicApiKey(updated);\n\t\tdelete publicKey.key;\n\t\treturn jsonResponse(200, publicKey, headers);\n\t}\n\n\tif (path === \"/two-factor/enable\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tawait requirePassword(\n\t\t\tresolved.user,\n\t\t\trequireStringField(body, \"password\"),\n\t\t\thasher,\n\t\t);\n\t\tconst secret = generateTotpSecret();\n\t\tconst backupCodes = generateBackupCodes();\n\t\tawait ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"twoFactor.enable\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tawait scope.stores.createTwoFactor({\n\t\t\t\t\tbackupCodes: await hashBackupCodes(backupCodes, hasher),\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tsecret: secret.encoded,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t});\n\t\t\t\tawait scope.stores.updateUser(resolved.user.id, {\n\t\t\t\t\ttwoFactorEnabled: true,\n\t\t\t\t});\n\t\t\t},\n\t\t\tinput: { userId: resolved.user.id },\n\t\t\tresultOf: () => ({ userId: resolved.user.id }),\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\tbackupCodes,\n\t\t\t\ttotpURI: buildTotpUri({\n\t\t\t\t\taccount: resolved.user.email ?? resolved.user.id,\n\t\t\t\t\tissuer: asStringField(body, \"issuer\") ?? \"AthenaAuth\",\n\t\t\t\t\tsecret: secret.encoded,\n\t\t\t\t}),\n\t\t\t},\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/two-factor/get-totp-uri\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tawait requirePassword(\n\t\t\tresolved.user,\n\t\t\trequireStringField(body, \"password\"),\n\t\t\thasher,\n\t\t);\n\t\tconst record = await stores.getTwoFactorByUserId(resolved.user.id);\n\t\tif (!record) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\n\t\t\t\t\"Two-factor authentication not enabled\",\n\t\t\t);\n\t\t}\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\ttotpURI: buildTotpUri({\n\t\t\t\t\taccount: resolved.user.email ?? resolved.user.id,\n\t\t\t\t\tsecret: record.secret,\n\t\t\t\t}),\n\t\t\t},\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/two-factor/disable\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tawait requirePassword(\n\t\t\tresolved.user,\n\t\t\trequireStringField(body, \"password\"),\n\t\t\thasher,\n\t\t);\n\t\tawait ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"twoFactor.disable\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tawait scope.stores.deleteTwoFactor(resolved.user.id);\n\t\t\t\tawait scope.stores.updateUser(resolved.user.id, {\n\t\t\t\t\ttwoFactorEnabled: false,\n\t\t\t\t});\n\t\t\t},\n\t\t\tinput: { userId: resolved.user.id },\n\t\t\tresultOf: () => ({ userId: resolved.user.id }),\n\t\t});\n\t\treturn jsonResponse(200, { status: true }, headers);\n\t}\n\n\tif (path === \"/two-factor/generate-backup-codes\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tawait requirePassword(\n\t\t\tresolved.user,\n\t\t\trequireStringField(body, \"password\"),\n\t\t\thasher,\n\t\t);\n\t\tconst record = await stores.getTwoFactorByUserId(resolved.user.id);\n\t\tif (!record) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\n\t\t\t\t\"Two-factor authentication not enabled\",\n\t\t\t);\n\t\t}\n\t\tconst backupCodes = generateBackupCodes();\n\t\tawait stores.updateTwoFactorBackupCodes(\n\t\t\tresolved.user.id,\n\t\t\tawait hashBackupCodes(backupCodes, hasher),\n\t\t);\n\t\treturn jsonResponse(200, { backupCodes, status: true }, headers);\n\t}\n\n\tif (path === \"/two-factor/verify-totp\" && method === \"POST\") {\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst code = requireStringField(body, \"code\");\n\t\tconst pendingToken =\n\t\t\tasStringField(body, \"token\") ??\n\t\t\treadBearerToken(request.headers.get(\"authorization\"));\n\t\tlet user: AuthUserRow | undefined;\n\t\tif (pendingToken?.startsWith(\"2fa_\")) {\n\t\t\tconst verification = await stores.consumeVerification(pendingToken);\n\t\t\tif (!verification) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid or expired token\");\n\t\t\t}\n\t\t\tuser = await stores.getUserById(\n\t\t\t\tverification.identifier.replace(/^2fa_pending:/, \"\"),\n\t\t\t);\n\t\t} else {\n\t\t\tuser = (await ctx.requireSession(request, stores)).user;\n\t\t}\n\t\tif (!user) {\n\t\t\tthrow AthenaAuthRuntimeError.unauthenticated();\n\t\t}\n\t\tconst record = await stores.getTwoFactorByUserId(user.id);\n\t\tif (!record) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\n\t\t\t\t\"Two-factor authentication not enabled\",\n\t\t\t);\n\t\t}\n\t\tif (!(await verifyTotpCode(decodeBase32(record.secret), code))) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid TOTP code\");\n\t\t}\n\t\tconst session = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: { kind: \"user\", userId: user.id },\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"session.issue\",\n\t\t\texecute: (scope) =>\n\t\t\t\tctx.issueSession(request, scope.stores, user.id, headers),\n\t\t\tinput: { userId: user.id },\n\t\t\tresultOf: (issued) => ({ session: sanitizeHookSession(issued) }),\n\t\t});\n\t\tconst refreshed = (await stores.getUserById(user.id)) ?? user;\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\tstatus: true,\n\t\t\t\ttoken: session.token,\n\t\t\t\tuser: toPublicUser(refreshed),\n\t\t\t},\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/two-factor/send-otp\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst otp = String(Math.floor(Math.random() * 1_000_000)).padStart(6, \"0\");\n\t\tawait stores.createVerification({\n\t\t\texpiresAt: new Date(Date.now() + 5 * 60 * 1000),\n\t\t\tid: crypto.randomUUID(),\n\t\t\tidentifier: `2fa_otp:${resolved.user.id}`,\n\t\t\tvalue: otp,\n\t\t});\n\t\tif (resolved.user.email) {\n\t\t\tawait ctx.emitMail?.({\n\t\t\t\tdata: { legacy_hook_url: otp, otp_code: otp },\n\t\t\t\teventType: authEmailEvents.user.signIn.otp,\n\t\t\t\trecipient: resolved.user.email,\n\t\t\t});\n\t\t}\n\t\treturn jsonResponse(200, { status: true }, headers);\n\t}\n\n\tif (path === \"/two-factor/verify-otp\" && method === \"POST\") {\n\t\tconst resolved = await ctx.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst code = requireStringField(body, \"code\");\n\t\tconst verification = await stores.getVerificationByValue(code);\n\t\tif (\n\t\t\t!verification ||\n\t\t\tverification.identifier !== `2fa_otp:${resolved.user.id}`\n\t\t) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid OTP code\");\n\t\t}\n\t\tawait stores.consumeVerification(code);\n\t\treturn jsonResponse(200, { status: true }, headers);\n\t}\n\n\tif (path === \"/two-factor/verify-backup-code\" && method === \"POST\") {\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst code = requireStringField(body, \"code\").toUpperCase();\n\t\tconst pendingToken =\n\t\t\tasStringField(body, \"token\") ??\n\t\t\treadBearerToken(request.headers.get(\"authorization\"));\n\t\tlet user: AuthUserRow | undefined;\n\t\tif (pendingToken?.startsWith(\"2fa_\")) {\n\t\t\tconst verification = await stores.consumeVerification(pendingToken);\n\t\t\tuser = verification\n\t\t\t\t? await stores.getUserById(\n\t\t\t\t\tverification.identifier.replace(/^2fa_pending:/, \"\"),\n\t\t\t\t)\n\t\t\t\t: undefined;\n\t\t} else {\n\t\t\tuser = (await ctx.requireSession(request, stores)).user;\n\t\t}\n\t\tif (!user) {\n\t\t\tthrow AthenaAuthRuntimeError.unauthenticated();\n\t\t}\n\t\tconst record = await stores.getTwoFactorByUserId(user.id);\n\t\tif (!record?.backup_codes) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid backup code\");\n\t\t}\n\t\tconst hashed = JSON.parse(record.backup_codes) as string[];\n\t\tlet matchedIndex = -1;\n\t\tfor (const [index, hash] of hashed.entries()) {\n\t\t\tif (await hasher.verify(code, hash)) {\n\t\t\t\tmatchedIndex = index;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matchedIndex < 0) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid backup code\");\n\t\t}\n\t\thashed.splice(matchedIndex, 1);\n\t\tawait stores.updateTwoFactorBackupCodes(user.id, JSON.stringify(hashed));\n\t\tconst session = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: { kind: \"user\", userId: user.id },\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"session.issue\",\n\t\t\texecute: (scope) =>\n\t\t\t\tctx.issueSession(request, scope.stores, user.id, headers),\n\t\t\tinput: { userId: user.id },\n\t\t\tresultOf: (issued) => ({ session: sanitizeHookSession(issued) }),\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\tsession: {\n\t\t\t\t\ttoken: session.token,\n\t\t\t\t\tuserId: user.id,\n\t\t\t\t},\n\t\t\t\tuser: toPublicUser(user),\n\t\t\t},\n\t\t\theaders,\n\t\t);\n\t}\n\n\treturn undefined;\n}\n\nexport async function resolveApiKeyUser(\n\trequest: Request,\n\tstores: AthenaAuthStores,\n): Promise<AuthUserRow | undefined> {\n\tconst rawKey = request.headers.get(\"x-api-key\")?.trim();\n\tif (!rawKey) {\n\t\treturn undefined;\n\t}\n\tconst hash = await sha256Base64Url(rawKey);\n\tconst key = await stores.getApiKeyByHash(hash);\n\tif (!key?.enabled || isApiKeyExpired(key)) {\n\t\treturn undefined;\n\t}\n\tawait stores.touchApiKey(key.id);\n\treturn stores.getUserById(key.user_id);\n}\n\nfunction nowIso(): string {\n\treturn new Date().toISOString();\n}\n","import { missingRequiredRights } from \"../../rights/matching.ts\";\nimport type { AthenaRightKey } from \"../../rights/key.ts\";\nimport {\n\tORGANIZATION_LIFECYCLE_DELETE,\n\tORGANIZATION_MEMBERS_INVITE,\n\tORGANIZATION_MEMBERS_WRITE,\n\tORGANIZATION_OWNERS_ASSIGN,\n} from \"../../runtime/authorization/catalog.ts\";\nimport { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport type { AthenaAuthStores } from \"./memory-stores.ts\";\nimport type { AuthMemberRow } from \"./models.ts\";\nimport type { AthenaAuthorizationRoleRecord } from \"../../runtime/authorization/types.ts\";\nimport {\n\tgrantRankRole,\n\tpersistedMemberRole,\n} from \"../../runtime/authorization/templates.ts\";\nimport {\n\tGRANT_HIGHER_ROLE_FORBIDDEN,\n\tGRANT_OWNER_FORBIDDEN,\n\tSELF_ELEVATION_FORBIDDEN,\n\tassertMemberRoleAssignmentAllowed,\n} from \"./organization-invariants.ts\";\n\nexport {\n\tGRANT_HIGHER_ROLE_FORBIDDEN,\n\tGRANT_OWNER_FORBIDDEN,\n\tSELF_ELEVATION_FORBIDDEN,\n\tassertMemberRoleAssignmentAllowed,\n};\n\nasync function actorRights(\n\tstores: AthenaAuthStores,\n\tuserId: string,\n\torganizationId: string,\n) {\n\treturn stores.authorization.resolveEffectiveRights({\n\t\tactiveOrganizationId: organizationId,\n\t\tgetMember: (orgId, memberUserId) => stores.getMember(orgId, memberUserId),\n\t\tuserId,\n\t});\n}\n\nexport async function actorHoldsRight(\n\tstores: AthenaAuthStores,\n\tuserId: string,\n\torganizationId: string,\n\trequired: readonly AthenaRightKey[],\n): Promise<boolean> {\n\tconst rights = await actorRights(stores, userId, organizationId);\n\treturn missingRequiredRights(rights, required).length === 0;\n}\n\nexport async function requireOrgMemberManager(\n\tstores: AthenaAuthStores,\n\tuserId: string,\n\torganizationId: string,\n\tactor: AuthMemberRow | undefined,\n): Promise<void> {\n\tif (!actor) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n\tif (\n\t\tawait actorHoldsRight(stores, userId, organizationId, [\n\t\t\tORGANIZATION_MEMBERS_WRITE,\n\t\t])\n\t) {\n\t\treturn;\n\t}\n\tthrow AthenaAuthRuntimeError.forbidden();\n}\n\nexport async function requireOrgInviteManager(\n\tstores: AthenaAuthStores,\n\tuserId: string,\n\torganizationId: string,\n\tactor: AuthMemberRow | undefined,\n): Promise<void> {\n\tif (!actor) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n\tif (\n\t\tawait actorHoldsRight(stores, userId, organizationId, [\n\t\t\tORGANIZATION_MEMBERS_WRITE,\n\t\t])\n\t) {\n\t\treturn;\n\t}\n\tif (\n\t\tawait actorHoldsRight(stores, userId, organizationId, [\n\t\t\tORGANIZATION_MEMBERS_INVITE,\n\t\t])\n\t) {\n\t\treturn;\n\t}\n\tthrow AthenaAuthRuntimeError.forbidden();\n}\n\nexport async function requireOrgDelete(\n\tstores: AthenaAuthStores,\n\tuserId: string,\n\torganizationId: string,\n\tactor: AuthMemberRow | undefined,\n): Promise<void> {\n\tif (!actor) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n\tif (\n\t\tawait actorHoldsRight(stores, userId, organizationId, [\n\t\t\tORGANIZATION_LIFECYCLE_DELETE,\n\t\t])\n\t) {\n\t\treturn;\n\t}\n\tthrow AthenaAuthRuntimeError.forbidden();\n}\n\nexport async function actorCanAssignOwner(\n\tstores: AthenaAuthStores,\n\tuserId: string,\n\torganizationId: string,\n): Promise<boolean> {\n\treturn actorHoldsRight(stores, userId, organizationId, [\n\t\tORGANIZATION_OWNERS_ASSIGN,\n\t]);\n}\n\nexport function verifiedOrganizationScope(input: {\n\tactiveOrganizationId: string | null | undefined;\n\trequestedOrganizationId?: string | null;\n}): string {\n\tconst active = input.activeOrganizationId?.trim() ?? \"\";\n\tconst requested = input.requestedOrganizationId?.trim() ?? \"\";\n\tif (requested.length > 0 && active.length > 0 && requested !== active) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n\tif (requested.length > 0 && active.length === 0) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n\tconst organizationId = active || requested;\n\tif (!organizationId) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t}\n\treturn organizationId;\n}\n\nexport function verifiedAuthorizationCommandScope(input: {\n\tactiveOrganizationId: string | null | undefined;\n\tcanManageOrganizationRoles: boolean;\n\tcanManagePlatformRoles: boolean;\n\trequestedOrganizationId?: string | null;\n}): { kind: \"organization\" | \"platform\"; organizationId: string | null } {\n\tconst active = input.activeOrganizationId?.trim() ?? \"\";\n\tconst requested = input.requestedOrganizationId?.trim() ?? \"\";\n\tif (requested.length > 0 && active.length > 0 && requested !== active) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n\tif (requested.length > 0 && active.length === 0) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n\tif (active.length > 0) {\n\t\tif (!input.canManageOrganizationRoles) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t}\n\t\treturn { kind: \"organization\", organizationId: active };\n\t}\n\tif (!input.canManagePlatformRoles) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n\treturn { kind: \"platform\", organizationId: null };\n}\n\nexport async function requireOrganizationRoleGrant(\n\tstores: AthenaAuthStores,\n\tuserId: string,\n\torganizationId: string,\n\tactor: AuthMemberRow | undefined,\n\trequestedRole: string,\n\ttarget?: {\n\t\trole: string;\n\t\tuserId: string;\n\t},\n): Promise<{\n\tpersistedRole: string;\n\trole: AthenaAuthorizationRoleRecord;\n}> {\n\tif (!actor) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n\tconst role = await stores.authorization.lookupAssignableOrganizationRole(\n\t\torganizationId,\n\t\trequestedRole,\n\t);\n\tif (!role) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Role is not assignable\");\n\t}\n\tassertMemberRoleAssignmentAllowed({\n\t\tactorCanAssignOwner: await actorCanAssignOwner(\n\t\t\tstores,\n\t\t\tuserId,\n\t\t\torganizationId,\n\t\t),\n\t\tactorRole: actor.role,\n\t\tactorUserId: userId,\n\t\tnextRole: grantRankRole(role),\n\t\ttargetRole: target?.role ?? \"member\",\n\t\ttargetUserId: target?.userId ?? userId,\n\t});\n\treturn {\n\t\tpersistedRole: persistedMemberRole(role),\n\t\trole,\n\t};\n}\n","import {\n\tAUTHORIZATION_PLATFORM_READ,\n\tAUTHORIZATION_PLATFORM_WRITE,\n\tAUTHORIZATION_ROLES_READ,\n\tAUTHORIZATION_ROLES_WRITE,\n\tlistAthenaAuthorizationRights,\n} from \"../../runtime/authorization/catalog.ts\";\nimport { requireExpectedVersion } from \"../../runtime/authorization/role-invariants.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport {\n\tverifiedAuthorizationCommandScope,\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 { asStringField, readJsonBody, requireStringField } from \"./security.ts\";\nimport { resolveFoundingOwnerUserId } from \"./organization-invariants.ts\";\n\nfunction asStringArray(body: Record<string, unknown>, key: string): string[] {\n\tconst value = body[key];\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\treturn value.filter((entry): entry is string => typeof entry === \"string\");\n}\n\nfunction roleIdFromPath(path: string): string | undefined {\n\tconst match = /^\\/authorization\\/roles\\/([^/]+)(?:\\/rights)?$/.exec(path);\n\tconst id = match?.[1];\n\tif (!id || id === \"clone\") {\n\t\treturn undefined;\n\t}\n\treturn id;\n}\n\nexport async function handleAuthorizationRoute(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tstores: AthenaAuthStores,\n\theaders: Headers,\n\trequireSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t) => Promise<{ session: AuthSessionRow; user: AuthUserRow }>,\n\tbodyLimitBytes: number,\n): Promise<Response | undefined> {\n\tif (path === \"/authorization/snapshot\" && method === \"GET\") {\n\t\tconst resolved = await requireSession(request, stores);\n\t\tconst snapshot = await buildSnapshot(stores, resolved);\n\t\treturn jsonResponse(200, snapshot, headers);\n\t}\n\n\tif (path === \"/authorization/rights\" && method === \"GET\") {\n\t\tconst resolved = await requireSession(request, stores);\n\t\tawait requireRoleAccess(stores, resolved, request, \"read\");\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ rights: listAthenaAuthorizationRights() },\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/authorization/roles\" && method === \"GET\") {\n\t\tconst resolved = await requireSession(request, stores);\n\t\tconst command = await requireRoleAccess(stores, resolved, request, \"read\");\n\t\tconst roles = await stores.authorization.listRoles({\n\t\t\torganizationId: command.scope.organizationId,\n\t\t\tscopeKind: command.scope.kind,\n\t\t});\n\t\treturn jsonResponse(200, { roles }, headers);\n\t}\n\n\tif (path === \"/authorization/roles\" && method === \"POST\") {\n\t\tconst resolved = await requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, bodyLimitBytes);\n\t\tconst command = await requireRoleAccess(\n\t\t\tstores,\n\t\t\tresolved,\n\t\t\trequest,\n\t\t\t\"write\",\n\t\t\tbody,\n\t\t);\n\t\tconst name = requireStringField(body, \"name\");\n\t\tconst role = await stores.authorization.createRole({\n\t\t\tactorUserId: resolved.user.id,\n\t\t\tname,\n\t\t\torganizationId: command.scope.organizationId,\n\t\t\trights: asStringArray(body, \"rights\"),\n\t\t\tscopeKind: command.scope.kind,\n\t\t});\n\t\treturn jsonResponse(200, { role }, headers);\n\t}\n\n\tif (path === \"/authorization/roles/clone\" && method === \"POST\") {\n\t\tconst resolved = await requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, bodyLimitBytes);\n\t\tconst sourceRoleId = requireStringField(body, \"sourceRoleId\");\n\t\tconst name = asStringField(body, \"name\") ?? \"Cloned role\";\n\t\tconst command = await requireRoleAccess(\n\t\t\tstores,\n\t\t\tresolved,\n\t\t\trequest,\n\t\t\t\"write\",\n\t\t\tbody,\n\t\t);\n\t\tif (command.scope.kind === \"organization\") {\n\t\t\tconst member = await stores.getMember(\n\t\t\t\tcommand.scope.organizationId ?? \"\",\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\tif (!member) {\n\t\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t\t}\n\t\t}\n\t\tconst cloned = await stores.authorization.cloneRole({\n\t\t\tactorUserId: resolved.user.id,\n\t\t\tname,\n\t\t\torganizationId: command.scope.organizationId,\n\t\t\tsourceRoleId,\n\t\t});\n\t\treturn jsonResponse(200, { role: cloned }, headers);\n\t}\n\n\tconst roleId = roleIdFromPath(path);\n\tif (\n\t\tmethod === \"GET\" &&\n\t\t(path === \"/authorization/roles/{id}\" ||\n\t\t\t(Boolean(roleId) && path === `/authorization/roles/${roleId}`))\n\t) {\n\t\tconst resolved = await requireSession(request, stores);\n\t\tconst command = await requireRoleAccess(stores, resolved, request, \"read\");\n\t\tconst id = roleIdFromPath(path) ?? \"\";\n\t\tconst role = await stores.authorization.getRole(\n\t\t\tid,\n\t\t\tcommand.scope.organizationId,\n\t\t);\n\t\tif (!role) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Role not found\");\n\t\t}\n\t\treturn jsonResponse(200, { role }, headers);\n\t}\n\n\tif (\n\t\tmethod === \"PATCH\" &&\n\t\t(path === \"/authorization/roles/{id}\" ||\n\t\t\t(Boolean(roleId) && path === `/authorization/roles/${roleId}`))\n\t) {\n\t\tconst resolved = await requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, bodyLimitBytes);\n\t\tconst command = await requireRoleAccess(\n\t\t\tstores,\n\t\t\tresolved,\n\t\t\trequest,\n\t\t\t\"write\",\n\t\t\tbody,\n\t\t);\n\t\tconst id = roleIdFromPath(path) ?? \"\";\n\t\tconst role = await stores.authorization.updateRole({\n\t\t\tactorUserId: resolved.user.id,\n\t\t\texpectedVersion: requireExpectedVersion(body.expectedVersion),\n\t\t\tid,\n\t\t\tname: requireStringField(body, \"name\"),\n\t\t\torganizationId: command.scope.organizationId,\n\t\t});\n\t\treturn jsonResponse(200, { role }, headers);\n\t}\n\n\tif (\n\t\tmethod === \"PUT\" &&\n\t\t(path === \"/authorization/roles/{id}/rights\" ||\n\t\t\t(Boolean(roleId) && path === `/authorization/roles/${roleId}/rights`))\n\t) {\n\t\tconst resolved = await requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, bodyLimitBytes);\n\t\tconst command = await requireRoleAccess(\n\t\t\tstores,\n\t\t\tresolved,\n\t\t\trequest,\n\t\t\t\"write\",\n\t\t\tbody,\n\t\t);\n\t\tconst id = roleIdFromPath(path) ?? \"\";\n\t\tconst role = await stores.authorization.replaceRoleRights({\n\t\t\tactorUserId: resolved.user.id,\n\t\t\texpectedVersion: requireExpectedVersion(body.expectedVersion),\n\t\t\tid,\n\t\t\torganizationId: command.scope.organizationId,\n\t\t\trights: asStringArray(body, \"rights\"),\n\t\t});\n\t\treturn jsonResponse(200, { role }, headers);\n\t}\n\n\tif (\n\t\tmethod === \"DELETE\" &&\n\t\t(path === \"/authorization/roles/{id}\" ||\n\t\t\t(Boolean(roleId) && path === `/authorization/roles/${roleId}`))\n\t) {\n\t\tconst resolved = await requireSession(request, stores);\n\t\tconst url = new URL(request.url);\n\t\tlet body: Record<string, unknown> = {};\n\t\tconst contentType = request.headers.get(\"content-type\") ?? \"\";\n\t\tif (contentType.includes(\"application/json\")) {\n\t\t\tbody = await readJsonBody(request, bodyLimitBytes);\n\t\t}\n\t\tconst command = await requireRoleAccess(\n\t\t\tstores,\n\t\t\tresolved,\n\t\t\trequest,\n\t\t\t\"write\",\n\t\t\tbody,\n\t\t);\n\t\tconst reassignmentRoleId =\n\t\t\tasStringField(body, \"reassignmentRoleId\") ??\n\t\t\turl.searchParams.get(\"reassignmentRoleId\");\n\t\tawait stores.authorization.deleteRole({\n\t\t\tactorUserId: resolved.user.id,\n\t\t\texpectedVersion: requireExpectedVersion(\n\t\t\t\tbody.expectedVersion ?? url.searchParams.get(\"expectedVersion\"),\n\t\t\t),\n\t\t\tid: roleIdFromPath(path) ?? \"\",\n\t\t\torganizationId: command.scope.organizationId,\n\t\t\treassignmentRoleId,\n\t\t});\n\t\treturn jsonResponse(200, { ok: true }, headers);\n\t}\n\n\tif (path === \"/authorization/audit\" && method === \"GET\") {\n\t\tconst resolved = await requireSession(request, stores);\n\t\tconst command = await requireRoleAccess(stores, resolved, request, \"write\");\n\t\tif (command.scope.kind === \"organization\") {\n\t\t\tconst member = await stores.getMember(\n\t\t\t\tcommand.scope.organizationId ?? \"\",\n\t\t\t\tresolved.user.id,\n\t\t\t);\n\t\t\tif (!member) {\n\t\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t\t}\n\t\t}\n\t\tconst entries = await stores.authorization.listAudit({\n\t\t\torganizationId: command.scope.organizationId,\n\t\t\tlimit: 50,\n\t\t});\n\t\treturn jsonResponse(200, { entries }, headers);\n\t}\n\n\treturn undefined;\n}\n\nasync function requireRoleAccess(\n\tstores: AthenaAuthStores,\n\tresolved: { session: AuthSessionRow; user: AuthUserRow },\n\trequest: Request,\n\taccess: \"read\" | \"write\",\n\tbody?: Record<string, unknown>,\n) {\n\tconst snapshot = await buildSnapshot(stores, resolved);\n\tconst rights = snapshot.effectiveRights;\n\tlet orgRight: typeof AUTHORIZATION_ROLES_READ;\n\tlet platformRight: typeof AUTHORIZATION_PLATFORM_READ;\n\tswitch (access) {\n\t\tcase \"read\":\n\t\t\torgRight = AUTHORIZATION_ROLES_READ;\n\t\t\tplatformRight = AUTHORIZATION_PLATFORM_READ;\n\t\t\tbreak;\n\t\tcase \"write\":\n\t\t\torgRight = AUTHORIZATION_ROLES_WRITE;\n\t\t\tplatformRight = AUTHORIZATION_PLATFORM_WRITE;\n\t\t\tbreak;\n\t\tdefault: {\n\t\t\tconst exhaustive: never = access;\n\t\t\tthrow new Error(`unreachable authorization access: ${exhaustive}`);\n\t\t}\n\t}\n\tconst orgOk = missingRequiredRights(rights, [orgRight]).length === 0;\n\tconst platformOk =\n\t\tmissingRequiredRights(rights, [platformRight]).length === 0;\n\tif (!orgOk && !platformOk) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n\tconst requestedOrganizationId =\n\t\tasStringField(body ?? {}, \"organizationId\") ??\n\t\t(new URL(request.url).searchParams.get(\"organizationId\") ?? undefined);\n\tconst scope = verifiedAuthorizationCommandScope({\n\t\tactiveOrganizationId: resolved.session.active_organization_id,\n\t\tcanManageOrganizationRoles: orgOk,\n\t\tcanManagePlatformRoles: platformOk,\n\t\trequestedOrganizationId,\n\t});\n\tif (scope.kind === \"organization\") {\n\t\tconst member = await stores.getMember(\n\t\t\tscope.organizationId ?? \"\",\n\t\t\tresolved.user.id,\n\t\t);\n\t\tif (!member) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t}\n\t}\n\treturn { scope, snapshot };\n}\n\nexport async function buildSnapshot(\n\tstores: AthenaAuthStores,\n\tresolved: { session: AuthSessionRow; user: AuthUserRow },\n) {\n\tconst organizationId = resolved.session.active_organization_id;\n\tconst organization = organizationId\n\t\t? await stores.getOrganization(organizationId)\n\t\t: undefined;\n\tconst members = organizationId\n\t\t? await stores.listMembers(organizationId)\n\t\t: [];\n\treturn stores.authorization.readSnapshot({\n\t\tactiveOrganizationId: organizationId,\n\t\tfoundingOwnerUserId: resolveFoundingOwnerUserId(organization, members),\n\t\tgetMember: (orgId, userId) => stores.getMember(orgId, userId),\n\t\tlistMembers: (orgId) => stores.listMembers(orgId),\n\t\tuserId: resolved.user.id,\n\t});\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\trequireOrgInviteManager,\n\trequireOrganizationRoleGrant,\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\tdeps: AuthRuntimeDependencies;\n\theaders: Headers;\n\tstores: AthenaAuthStores;\n\ttraceId: string;\n}\n\nexport async function handleOrganizationInvitationRoutes(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: AuthProcedureContext,\n): Promise<Response | undefined> {\n\tconst {\n\t\tconfig,\n\t\temitIfRecipient,\n\t\temitMail,\n\t\thookRequest,\n\t\tidentityOf,\n\t\tmutate,\n\t\trequireSession,\n\t} = ctx.deps;\n\tconst currentStores = ctx.stores;\n\tconst headers = ctx.headers;\n\tconst traceId = ctx.traceId;\n\tif (path === \"/organization/invite-member\" && method === \"POST\") {\n\t\tconst resolved = await requireSession(request, currentStores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst organizationId =\n\t\t\tasStringField(body, \"organizationId\") ??\n\t\t\tresolved.session.active_organization_id;\n\t\tif (!organizationId) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t}\n\t\tconst actor = await currentStores.getMember(\n\t\t\torganizationId,\n\t\t\tresolved.user.id,\n\t\t);\n\t\tawait requireOrgInviteManager(\n\t\t\tcurrentStores,\n\t\t\tresolved.user.id,\n\t\t\torganizationId,\n\t\t\tactor,\n\t\t);\n\t\tconst email = requireStringField(body, \"email\");\n\t\tconst requestedRole = asStringField(body, \"role\") ?? \"member\";\n\t\tconst granted = await requireOrganizationRoleGrant(\n\t\t\tcurrentStores,\n\t\t\tresolved.user.id,\n\t\t\torganizationId,\n\t\t\tactor,\n\t\t\trequestedRole,\n\t\t\t{ role: \"member\", userId: `invite:${email.trim().toLowerCase()}` },\n\t\t);\n\t\tconst role = granted.persistedRole;\n\t\tconst inviteEmail = email.trim().toLowerCase();\n\t\tconst actorEmail =\n\t\t\ttypeof resolved.user.email === \"string\"\n\t\t\t\t? resolved.user.email.trim().toLowerCase()\n\t\t\t\t: \"\";\n\t\tif (actorEmail.length > 0 && inviteEmail === actorEmail) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"You cannot invite your own email as a member\",\n\t\t\t);\n\t\t}\n\t\tconst invitation = await mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\torganizationId,\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\ttraceId,\n\t\t\t},\n\t\t\tevent: \"organization.invitation.create\",\n\t\t\texecute: (scope) =>\n\t\t\t\tscope.stores.createInvitation({\n\t\t\t\t\temail,\n\t\t\t\t\texpiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000),\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tinviterId: resolved.user.id,\n\t\t\t\t\torganizationId,\n\t\t\t\t\trole,\n\t\t\t\t}),\n\t\t\tinput: { email, organizationId, role },\n\t\t\tresultOf: (row) => ({ invitation: sanitizeHookInvitation(row) }),\n\t\t});\n\t\tconst organization = await currentStores.getOrganization(organizationId);\n\t\tconst origin = new URL(request.url).origin;\n\t\tconst basePath = config.basePath || ATHENA_AUTH_DEFAULT_BASE_PATH;\n\t\tawait emitMail({\n\t\t\tdata: {\n\t\t\t\tinvitation_url: `${origin}${basePath}/organization/accept-invitation?invitationId=${encodeURIComponent(invitation.id)}`,\n\t\t\t\tinviter_identity:\n\t\t\t\t\tresolved.user.email ?? resolved.user.name ?? resolved.user.id,\n\t\t\t\torganization_name: organization?.name ?? \"organization\",\n\t\t\t\trole: invitation.role ?? \"member\",\n\t\t\t},\n\t\t\teventType: authEmailEvents.organization.member.invite,\n\t\t\trecipient: invitation.email,\n\t\t});\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ invitation: toPublicInvitation(invitation) },\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/organization/accept-invitation\" && method === \"POST\") {\n\t\tconst resolved = await requireSession(request, currentStores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst invitationId = requireStringField(body, \"invitationId\");\n\t\tconst invitation = await currentStores.getInvitation(invitationId);\n\t\tif (\n\t\t\tinvitation?.status !== \"pending\" ||\n\t\t\tnew Date(invitation.expires_at).getTime() <= Date.now()\n\t\t) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invitation is not valid\");\n\t\t}\n\t\tif (\n\t\t\tinvitation.email &&\n\t\t\tresolved.user.email &&\n\t\t\tinvitation.email !== resolved.user.email\n\t\t) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t}\n\t\tconst existing = await currentStores.getMember(\n\t\t\tinvitation.organization_id,\n\t\t\tresolved.user.id,\n\t\t);\n\t\tconst accepted = await mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\torganizationId: invitation.organization_id,\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\ttraceId,\n\t\t\t},\n\t\t\tevent: \"organization.invitation.accept\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tif (!existing) {\n\t\t\t\t\tawait scope.stores.addMember({\n\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\torganizationId: invitation.organization_id,\n\t\t\t\t\t\trole: invitation.role,\n\t\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait scope.stores.updateInvitationStatus(invitation.id, \"accepted\");\n\t\t\t\treturn invitation;\n\t\t\t},\n\t\t\tinput: { invitationId },\n\t\t\tprevious: async () => ({\n\t\t\t\tinvitation: sanitizeHookInvitation(invitation),\n\t\t\t}),\n\t\t\tresultOf: (row) => ({\n\t\t\t\tinvitation: sanitizeHookInvitation({ ...row, status: \"accepted\" }),\n\t\t\t}),\n\t\t});\n\t\tvoid accepted;\n\t\treturn jsonResponse(200, { status: true }, headers);\n\t}\n\n\tif (path === \"/organization/cancel-invitation\" && method === \"POST\") {\n\t\tconst resolved = await requireSession(request, currentStores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst invitationId = requireStringField(body, \"invitationId\");\n\t\tconst invitation = await currentStores.getInvitation(invitationId);\n\t\tif (!invitation) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Invitation not found\");\n\t\t}\n\t\tconst actor = await currentStores.getMember(\n\t\t\tinvitation.organization_id,\n\t\t\tresolved.user.id,\n\t\t);\n\t\tawait requireOrgInviteManager(\n\t\t\tcurrentStores,\n\t\t\tresolved.user.id,\n\t\t\tinvitation.organization_id,\n\t\t\tactor,\n\t\t);\n\t\tawait mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\torganizationId: invitation.organization_id,\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\ttraceId,\n\t\t\t},\n\t\t\tevent: \"organization.invitation.cancel\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tawait scope.stores.updateInvitationStatus(invitation.id, \"canceled\");\n\t\t\t},\n\t\t\tinput: { invitationId },\n\t\t\tprevious: async () => ({\n\t\t\t\tinvitation: sanitizeHookInvitation(invitation),\n\t\t\t}),\n\t\t\tresultOf: () => ({\n\t\t\t\tinvitation: sanitizeHookInvitation({\n\t\t\t\t\t...invitation,\n\t\t\t\t\tstatus: \"canceled\",\n\t\t\t\t}),\n\t\t\t}),\n\t\t});\n\t\tconst revokedOrg = await currentStores.getOrganization(\n\t\t\tinvitation.organization_id,\n\t\t);\n\t\tawait emitIfRecipient(invitation.email, {\n\t\t\tdata: {\n\t\t\t\tinvited_email: invitation.email,\n\t\t\t\tinviter_identity: identityOf(resolved.user),\n\t\t\t\torganization_name: revokedOrg?.name ?? \"organization\",\n\t\t\t},\n\t\t\teventType: authEmailEvents.organization.member.inviteRevoked,\n\t\t});\n\t\treturn jsonResponse(200, { status: true }, headers);\n\t}\n\n\tif (path === \"/organization/list-invitations\" && method === \"GET\") {\n\t\tconst resolved = await requireSession(request, currentStores);\n\t\tconst organizationId =\n\t\t\tnew URL(request.url).searchParams.get(\"organizationId\") ??\n\t\t\tresolved.session.active_organization_id;\n\t\tif (!organizationId) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t}\n\t\tconst member = await timeAuthSpan(\"authz\", () =>\n\t\t\tcurrentStores.getMember(organizationId, resolved.user.id),\n\t\t);\n\t\tif (!member) {\n\t\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t\t}\n\t\tconst invitations = await currentStores.listInvitations(organizationId);\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\tinvitations.map((invitation) => toPublicInvitation(invitation)),\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/organization/invite-member-reminder\" && method === \"POST\") {\n\t\tconst resolved = await requireSession(request, currentStores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst invitationId = requireStringField(body, \"invitationId\");\n\t\tconst invitation = await currentStores.getInvitation(invitationId);\n\t\tif (invitation?.status !== \"pending\") {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invitation is not pending\");\n\t\t}\n\t\tconst actor = await currentStores.getMember(\n\t\t\tinvitation.organization_id,\n\t\t\tresolved.user.id,\n\t\t);\n\t\tawait requireOrgInviteManager(\n\t\t\tcurrentStores,\n\t\t\tresolved.user.id,\n\t\t\tinvitation.organization_id,\n\t\t\tactor,\n\t\t);\n\t\tawait mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\torganizationId: invitation.organization_id,\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\ttraceId,\n\t\t\t},\n\t\t\tevent: \"organization.member.invite.reminder\",\n\t\t\texecute: async () => invitation,\n\t\t\tinput: { invitationId },\n\t\t\tprevious: async () => ({\n\t\t\t\tinvitation: sanitizeHookInvitation(invitation),\n\t\t\t}),\n\t\t\tresultOf: (row) => ({ invitation: sanitizeHookInvitation(row) }),\n\t\t});\n\t\tconst reminderOrg = await currentStores.getOrganization(\n\t\t\tinvitation.organization_id,\n\t\t);\n\t\tconst origin = new URL(request.url).origin;\n\t\tconst basePath = config.basePath || ATHENA_AUTH_DEFAULT_BASE_PATH;\n\t\tawait emitMail({\n\t\t\tdata: {\n\t\t\t\tinvitation_url: `${origin}${basePath}/organization/accept-invitation?invitationId=${encodeURIComponent(invitation.id)}`,\n\t\t\t\tinviter_identity: identityOf(resolved.user),\n\t\t\t\torganization_name: reminderOrg?.name ?? \"organization\",\n\t\t\t\trole: invitation.role ?? \"member\",\n\t\t\t},\n\t\t\teventType: authEmailEvents.organization.member.inviteReminder,\n\t\t\trecipient: invitation.email,\n\t\t});\n\t\treturn jsonResponse(200, { status: true }, headers);\n\t}\n\n\tif (path === \"/organization/get-invitation\" && method === \"GET\") {\n\t\tawait requireSession(request, currentStores);\n\t\tconst invitationId = new URL(request.url).searchParams.get(\"invitationId\");\n\t\tif (!invitationId) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"invitationId is required\");\n\t\t}\n\t\tconst invitation = await currentStores.getInvitation(invitationId);\n\t\tif (!invitation) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Invitation not found\");\n\t\t}\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ invitation: toPublicInvitation(invitation) },\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/organization/list-user-invitations\" && method === \"GET\") {\n\t\tconst resolved = await requireSession(request, currentStores);\n\t\tconst email = resolved.user.email;\n\t\tconst invitations = email\n\t\t\t? await currentStores.listInvitationsForEmail(email)\n\t\t\t: [];\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\tinvitations.map((invitation) => toPublicInvitation(invitation)),\n\t\t\theaders,\n\t\t);\n\t}\n\n\tif (path === \"/organization/reject-invitation\" && method === \"POST\") {\n\t\tconst resolved = await requireSession(request, currentStores);\n\t\tconst body = await readJsonBody(request, config.security.bodyLimitBytes);\n\t\tconst invitationId = requireStringField(body, \"invitationId\");\n\t\tconst invitation = await currentStores.getInvitation(invitationId);\n\t\tif (!invitation) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Invitation not found\");\n\t\t}\n\t\tconst actor = await currentStores.getMember(\n\t\t\tinvitation.organization_id,\n\t\t\tresolved.user.id,\n\t\t);\n\t\tconst isInvitee =\n\t\t\tinvitation.email &&\n\t\t\tresolved.user.email &&\n\t\t\tinvitation.email === resolved.user.email;\n\t\tif (!isInvitee) {\n\t\t\tawait requireOrgInviteManager(\n\t\t\t\tcurrentStores,\n\t\t\t\tresolved.user.id,\n\t\t\t\tinvitation.organization_id,\n\t\t\t\tactor,\n\t\t\t);\n\t\t}\n\t\tawait mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: {\n\t\t\t\t\tkind: \"user\",\n\t\t\t\t\torganizationId: invitation.organization_id,\n\t\t\t\t\tsessionId: resolved.session.id,\n\t\t\t\t\tuserId: resolved.user.id,\n\t\t\t\t},\n\t\t\t\trequest: hookRequest(request, path),\n\t\t\t\ttraceId,\n\t\t\t},\n\t\t\tevent: \"organization.invitation.reject\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tawait scope.stores.updateInvitationStatus(invitation.id, \"rejected\");\n\t\t\t},\n\t\t\tinput: { invitationId },\n\t\t\tprevious: async () => ({\n\t\t\t\tinvitation: sanitizeHookInvitation(invitation),\n\t\t\t}),\n\t\t\tresultOf: () => ({\n\t\t\t\tinvitation: sanitizeHookInvitation({\n\t\t\t\t\t...invitation,\n\t\t\t\t\tstatus: \"rejected\",\n\t\t\t\t}),\n\t\t\t}),\n\t\t});\n\t\treturn jsonResponse(200, { status: true }, headers);\n\t}\n\n\treturn undefined;\n}\n","function toUint8Array(input: string | ArrayBuffer | Uint8Array): Uint8Array {\n\tif (typeof input === \"string\") {\n\t\treturn new TextEncoder().encode(input);\n\t}\n\tif (input instanceof Uint8Array) {\n\t\treturn input;\n\t}\n\treturn new Uint8Array(input);\n}\n\nfunction bytesToBase64(\n\tbytes: Uint8Array,\n\turlSafe: boolean,\n\tpadding: boolean,\n): string {\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\tlet encoded = btoa(binary);\n\tif (urlSafe) {\n\t\tencoded = encoded.replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n\t}\n\tif (!padding) {\n\t\tencoded = encoded.replace(/[=]+$/g, \"\");\n\t}\n\treturn encoded;\n}\n\nfunction base64ToBytes(encoded: string, urlSafe: boolean): Uint8Array {\n\tlet normalized = encoded.trim();\n\tif (urlSafe) {\n\t\tnormalized = normalized.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\t}\n\tconst padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, \"=\");\n\tconst binary = atob(padded);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let index = 0; index < binary.length; index++) {\n\t\tbytes[index] = binary.charCodeAt(index);\n\t}\n\treturn bytes;\n}\n\n/**\n * Standard Base64 helpers (RFC 4648) used for HTTP Basic Auth credentials.\n */\nexport const base64 = {\n\tencode(input: string | ArrayBuffer | Uint8Array): string {\n\t\treturn bytesToBase64(toUint8Array(input), false, true);\n\t},\n};\n\n/**\n * Base64URL helpers used for PKCE code challenges.\n */\nexport const base64Url = {\n\tencode(\n\t\tinput: string | ArrayBuffer | Uint8Array,\n\t\toptions?: { padding?: boolean },\n\t): string {\n\t\treturn bytesToBase64(toUint8Array(input), true, options?.padding !== false);\n\t},\n\tdecode(input: string): Uint8Array {\n\t\treturn base64ToBytes(input, true);\n\t},\n};\n","import { ATHENA_AUTH_TABLES } from \"../contract/index.ts\";\nimport { PostgresAuthorizationStore } from \"../../runtime/authorization/postgres.ts\";\nimport {\n\tmapLegacyUserRole,\n\tresolveMemberAssignmentRole,\n} from \"../../runtime/authorization/templates.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  banned?: boolean;\n  banExpires?: Date | null;\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  permissions: string | null;\n  prefix: string | null;\n  remaining: number | null;\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  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 {\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 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(`DELETE FROM ${ATHENA_AUTH_TABLES.users} WHERE id = $1`, [\n      id,\n    ]);\n  }\n\n  async createSession(input: CreateSessionInput): Promise<AuthSessionRow> {\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)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, $8, TRUE)\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      ]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      throw new Error(\"Failed to create session\");\n    }\n    return row;\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 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(organizationId: string): 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(userId: string, exceptToken?: string): 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 consumeVerification(value: string): 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 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(userId: string): 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 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)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)\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      ]\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 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 hydrateUser(row: AuthUserRow | undefined): AuthUserRow | undefined {\n  if (!row) {\n    return undefined;\n  }\n  return {\n    ...row,\n    metadata: parseMetadata(row.metadata),\n  };\n}\n","import type { PasskeyChallengeStore } from \"../../passkey/server/challenge-store.ts\";\nimport type {\n\tAthenaPasskeyChallenge,\n\tAthenaPasskeyChallengeConsume,\n\tAthenaPasskeyChallengeCreate,\n\tAthenaPasskeyChallengePurpose,\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\t\"authentication\",\n\t\"registration\",\n]);\n\nexport interface PasskeyVerificationHost {\n\tconsumeVerificationByIdentifierAndValue(\n\t\tidentifier: string,\n\t\tvalue: string,\n\t): Promise<AuthVerificationRow | undefined>;\n\tcreateVerification(input: {\n\t\texpiresAt: Date;\n\t\tid: string;\n\t\tidentifier: string;\n\t\tvalue: string;\n\t}): Promise<AuthVerificationRow>;\n\texpirePasskeyVerifications(now: Date): Promise<number>;\n}\n\nfunction isPasskeyVerificationHost(\n\tvalue: object,\n): value is PasskeyVerificationHost {\n\treturn (\n\t\t\"createVerification\" in value &&\n\t\ttypeof (value as PasskeyVerificationHost).createVerification ===\n\t\t\t\"function\" &&\n\t\t\"consumeVerificationByIdentifierAndValue\" in value &&\n\t\ttypeof (value as PasskeyVerificationHost)\n\t\t\t.consumeVerificationByIdentifierAndValue === \"function\" &&\n\t\t\"expirePasskeyVerifications\" in value &&\n\t\ttypeof (value as PasskeyVerificationHost).expirePasskeyVerifications ===\n\t\t\t\"function\"\n\t);\n}\n\nfunction isAthenaAuthDatabase(value: object): value is AthenaAuthDatabase {\n\treturn (\n\t\t\"query\" in value &&\n\t\ttypeof (value as AthenaAuthDatabase).query === \"function\"\n\t);\n}\n\nfunction encodeValue(challengeHash: Uint8Array): string {\n\treturn base64Url.encode(challengeHash, { padding: false });\n}\n\nasync function rpIdHashToken(rpId: string): Promise<string> {\n\tconst digest = new Uint8Array(\n\t\tawait crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(rpId)),\n\t);\n\treturn encodeValue(digest);\n}\n\nfunction userToken(userId: string | null): string {\n\treturn userId === null ? \"anonymous\" : userId;\n}\n\nasync function bindIdentifier(input: {\n\tpurpose: AthenaPasskeyChallengePurpose;\n\trpId: string;\n\tuserId: string | null;\n}): Promise<{ identifier: string; rpId: string }> {\n\tconst rpId = input.rpId.trim();\n\tif (rpId.length === 0 || rpId.includes(\":\")) {\n\t\tthrow new Error(\"passkey challenge rpId is invalid\");\n\t}\n\tif (\n\t\tinput.userId !== null &&\n\t\t(input.userId.length === 0 || input.userId.includes(\":\"))\n\t) {\n\t\tthrow new Error(\"passkey challenge userId is invalid\");\n\t}\n\tconst rpHash = await rpIdHashToken(rpId);\n\treturn {\n\t\tidentifier: `passkey:${input.purpose}:${rpHash}:${userToken(input.userId)}`,\n\t\trpId,\n\t};\n}\n\nfunction assertPurpose(\n\tpurpose: string,\n): asserts purpose is AthenaPasskeyChallengePurpose {\n\tif (!PASSKEY_PURPOSES.has(purpose as AthenaPasskeyChallengePurpose)) {\n\t\tthrow new Error(\"passkey challenge purpose is invalid\");\n\t}\n}\n\nfunction assertChallengeHash(challengeHash: Uint8Array): void {\n\tif (challengeHash.byteLength !== CHALLENGE_HASH_BYTES) {\n\t\tthrow new Error(\"passkey challengeHash must be a 32-byte SHA-256 digest\");\n\t}\n}\n\nfunction validateCreate(input: AthenaPasskeyChallengeCreate): void {\n\tassertPurpose(input.purpose);\n\tassertChallengeHash(input.challengeHash);\n\tif (input.purpose === \"registration\" && input.userId === null) {\n\t\tthrow new Error(\"registration passkey challenges require a userId\");\n\t}\n}\n\nfunction toChallenge(\n\trow: AuthVerificationRow,\n\tinput: {\n\t\tchallengeHash: Uint8Array;\n\t\tpurpose: AthenaPasskeyChallengePurpose;\n\t\trpId: string;\n\t\tuserId: string | null;\n\t},\n\tconsumedAt: Date | null,\n): AthenaPasskeyChallenge {\n\treturn {\n\t\tchallengeHash: new Uint8Array(input.challengeHash),\n\t\tconsumedAt,\n\t\tcreatedAt: new Date(row.created_at),\n\t\texpiresAt: new Date(row.expires_at),\n\t\tid: row.id,\n\t\tpurpose: input.purpose,\n\t\trpId: input.rpId,\n\t\tuserId: input.userId,\n\t};\n}\n\nexport class LocalPasskeyChallengeStore implements PasskeyChallengeStore {\n\tconstructor(private readonly host: PasskeyVerificationHost) {}\n\n\tasync create(\n\t\tinput: AthenaPasskeyChallengeCreate,\n\t): Promise<AthenaPasskeyChallenge> {\n\t\tvalidateCreate(input);\n\t\tconst { identifier, rpId } = await bindIdentifier(input);\n\t\tconst row = await this.host.createVerification({\n\t\t\texpiresAt: input.expiresAt,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tidentifier,\n\t\t\tvalue: encodeValue(input.challengeHash),\n\t\t});\n\t\treturn toChallenge(row, { ...input, rpId }, null);\n\t}\n\n\tasync consume(\n\t\tinput: AthenaPasskeyChallengeConsume,\n\t): Promise<AthenaPasskeyChallenge> {\n\t\tassertPurpose(input.purpose);\n\t\tassertChallengeHash(input.challengeHash);\n\t\tconst { identifier, rpId } = await bindIdentifier(input);\n\t\tconst row = await this.host.consumeVerificationByIdentifierAndValue(\n\t\t\tidentifier,\n\t\t\tencodeValue(input.challengeHash),\n\t\t);\n\t\tif (!row) {\n\t\t\tthrow new Error(\"passkey challenge consume missed\");\n\t\t}\n\t\treturn toChallenge(row, { ...input, rpId }, new Date());\n\t}\n\n\tasync expire(now?: Date): Promise<number> {\n\t\treturn this.host.expirePasskeyVerifications(now ?? new Date());\n\t}\n}\n\nexport class MemoryPasskeyChallengeStore extends LocalPasskeyChallengeStore {}\n\nexport class PostgresPasskeyChallengeStore extends LocalPasskeyChallengeStore {\n\tconstructor(storesOrDb: PostgresAuthStores | AthenaAuthDatabase) {\n\t\tsuper(resolvePostgresHost(storesOrDb));\n\t}\n}\n\nfunction resolvePostgresHost(\n\tstoresOrDb: PostgresAuthStores | AthenaAuthDatabase | PasskeyVerificationHost,\n): PasskeyVerificationHost {\n\tif (isPasskeyVerificationHost(storesOrDb)) {\n\t\treturn storesOrDb;\n\t}\n\tif (isAthenaAuthDatabase(storesOrDb)) {\n\t\treturn new PostgresAuthStores(storesOrDb);\n\t}\n\tthrow new Error(\n\t\t\"postgres passkey challenge store requires Auth stores or a database\",\n\t);\n}\n\nexport function createMemoryPasskeyChallengeStore(\n\tstores: MemoryAuthStores,\n): PasskeyChallengeStore {\n\treturn new MemoryPasskeyChallengeStore(stores);\n}\n\nexport function createPostgresPasskeyChallengeStore(\n\tstoresOrDb: PostgresAuthStores | AthenaAuthDatabase,\n): PasskeyChallengeStore {\n\treturn new PostgresPasskeyChallengeStore(storesOrDb);\n}\n\nexport function createPasskeyChallengeStore(\n\tstoresOrDb: PasskeyVerificationHost | AthenaAuthDatabase,\n): PasskeyChallengeStore {\n\tif (isPasskeyVerificationHost(storesOrDb)) {\n\t\treturn new LocalPasskeyChallengeStore(storesOrDb);\n\t}\n\tif (isAthenaAuthDatabase(storesOrDb)) {\n\t\treturn new PostgresPasskeyChallengeStore(storesOrDb);\n\t}\n\tthrow new Error(\"passkey challenge store requires Auth stores or a database\");\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\tAthenaStoredPasskey,\n\tAthenaStoredPasskeyCreate,\n} from \"../../passkey/server/types.ts\";\nimport {\n\tparseStoredPasskeyTransports,\n\tserializePasskeyTransports,\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\treturn (\n\t\t\"query\" in value &&\n\t\ttypeof (value as AthenaAuthDatabase).query === \"function\"\n\t);\n}\n\nfunction resolvePostgresDatabase(\n\tstoresOrDb: PostgresAuthStores | AthenaAuthDatabase,\n): AthenaAuthDatabase {\n\tif (isAthenaAuthDatabase(storesOrDb)) {\n\t\treturn storesOrDb;\n\t}\n\tconst nested = (storesOrDb as unknown as { db?: unknown }).db;\n\tif (nested && typeof nested === \"object\" && isAthenaAuthDatabase(nested)) {\n\t\treturn nested;\n\t}\n\tthrow new Error(\n\t\t\"postgres passkey repository requires Auth stores or a database\",\n\t);\n}\n\nfunction encodePasskeyBytes(bytes: Uint8Array): string {\n\treturn base64Url.encode(bytes, { padding: false });\n}\n\nfunction decodePasskeyBytes(value: string): Uint8Array {\n\treturn base64Url.decode(value);\n}\n\nfunction asDate(value: Date | string | null | undefined): Date {\n\tif (value instanceof Date) {\n\t\treturn value;\n\t}\n\tif (typeof value === \"string\" && value.trim()) {\n\t\treturn new Date(value);\n\t}\n\treturn new Date();\n}\n\nfunction asBigInt(value: unknown): bigint {\n\tif (typeof value === \"bigint\") {\n\t\treturn value;\n\t}\n\tif (typeof value === \"number\" && Number.isFinite(value)) {\n\t\treturn BigInt(Math.trunc(value));\n\t}\n\tif (typeof value === \"string\" && value.trim()) {\n\t\treturn BigInt(value);\n\t}\n\tthrow new Error(\"passkey counter is not a bigint\");\n}\n\nfunction assertNonNegativeCounter(value: bigint): void {\n\tif (value < 0n) {\n\t\tthrow new Error(\"passkey counter must not be negative\");\n\t}\n}\n\nfunction isZeroToZero(expected: bigint, next: bigint): boolean {\n\treturn expected === 0n && next === 0n;\n}\n\nfunction assertIncreasingCounter(expected: bigint, next: bigint): void {\n\tassertNonNegativeCounter(expected);\n\tassertNonNegativeCounter(next);\n\tif (isZeroToZero(expected, next)) {\n\t\treturn;\n\t}\n\tif (next <= expected) {\n\t\tthrow new Error(\"passkey counter regression\");\n\t}\n}\n\nfunction persistName(name: string | null | undefined): string {\n\treturn name ?? \"\";\n}\n\nfunction domainName(name: string): string | null {\n\treturn name === \"\" ? null : name;\n}\n\nfunction uniqueCredentialError(): Error {\n\tconst error = new Error(\"duplicate key value violates unique constraint\");\n\t(error as { code?: string }).code = \"23505\";\n\treturn error;\n}\n\nfunction casMissError(): Error {\n\treturn new Error(\"passkey credential counter CAS missed\");\n}\n\nfunction notFoundError(): Error {\n\treturn new Error(\"passkey not found\");\n}\n\nfunction toStoredPasskey(row: AuthPasskeyRow): AthenaStoredPasskey {\n\tconst transports = parseStoredPasskeyTransports(\n\t\trow.transports == null ? null : String(row.transports),\n\t);\n\treturn {\n\t\taaguid: row.aaguid ?? null,\n\t\tbackedUp: Boolean(row.backed_up),\n\t\tcounter: asBigInt(row.counter),\n\t\tcreatedAt: asDate(row.created_at),\n\t\tcredentialId: decodePasskeyBytes(row.credential_id),\n\t\tdeviceType: normalizePasskeyDeviceType(row.device_type),\n\t\tid: row.id,\n\t\tname: domainName(row.name),\n\t\tpublicKey: decodePasskeyBytes(row.public_key),\n\t\tresidentKey: row.resident_key == null ? null : Boolean(row.resident_key),\n\t\ttransports: (transports ?? []) as AuthenticatorTransport[],\n\t\tupdatedAt: asDate(row.updated_at),\n\t\tuserId: row.user_id,\n\t};\n}\n\nfunction requireRow(\n\trow: AuthPasskeyRow | undefined,\n\terror: Error,\n): AthenaStoredPasskey {\n\tif (!row) {\n\t\tthrow error;\n\t}\n\treturn 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\tconstructor(private readonly db: AthenaAuthDatabase) {}\n\n\tasync create(\n\t\trecord: AthenaStoredPasskeyCreate,\n\t): Promise<AthenaStoredPasskey> {\n\t\tconst counter = asBigInt(record.counter);\n\t\tassertNonNegativeCounter(counter);\n\t\tconst result = await this.db.query<AuthPasskeyRow>(\n\t\t\t`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\t\t\t[\n\t\t\t\trecord.id ?? crypto.randomUUID(),\n\t\t\t\tpersistName(record.name),\n\t\t\t\tencodePasskeyBytes(record.publicKey),\n\t\t\t\trecord.userId,\n\t\t\t\tencodePasskeyBytes(record.credentialId),\n\t\t\t\tcounter,\n\t\t\t\tnormalizePasskeyDeviceType(record.deviceType),\n\t\t\t\tBoolean(record.backedUp),\n\t\t\t\tserializePasskeyTransports(record.transports),\n\t\t\t\trecord.aaguid,\n\t\t\t\trecord.residentKey,\n\t\t\t],\n\t\t);\n\t\treturn requireRow(result.rows[0], new Error(\"Failed to create passkey\"));\n\t}\n\n\tasync findByCredentialId(\n\t\tcredentialId: Uint8Array,\n\t): Promise<AthenaStoredPasskey | null> {\n\t\tconst result = await this.db.query<AuthPasskeyRow>(\n\t\t\t`SELECT * FROM ${ATHENA_AUTH_TABLES.passkeys} WHERE credential_id = $1`,\n\t\t\t[encodePasskeyBytes(credentialId)],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\treturn row ? toStoredPasskey(row) : null;\n\t}\n\n\tasync listByUser(userId: string): Promise<AthenaStoredPasskey[]> {\n\t\tconst result = await this.db.query<AuthPasskeyRow>(\n\t\t\t`SELECT * FROM ${ATHENA_AUTH_TABLES.passkeys}\n        WHERE user_id = $1\n        ORDER BY created_at DESC`,\n\t\t\t[userId],\n\t\t);\n\t\treturn result.rows.map((row) => toStoredPasskey(row));\n\t}\n\n\tasync updateCounter(input: {\n\t\tcredentialId: Uint8Array;\n\t\texpected: bigint;\n\t\tnext: bigint;\n\t}): Promise<AthenaStoredPasskey> {\n\t\tassertIncreasingCounter(input.expected, input.next);\n\t\tif (isZeroToZero(input.expected, input.next)) {\n\t\t\tconst current = await this.findByCredentialId(input.credentialId);\n\t\t\tif (!current || current.counter !== 0n) {\n\t\t\t\tthrow casMissError();\n\t\t\t}\n\t\t\treturn current;\n\t\t}\n\t\tconst result = await this.db.query<AuthPasskeyRow>(\n\t\t\t`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\t\t\t[input.next, encodePasskeyBytes(input.credentialId), input.expected],\n\t\t);\n\t\treturn requireRow(result.rows[0], casMissError());\n\t}\n\n\tasync updateName(input: {\n\t\tid: string;\n\t\tuserId: string;\n\t\tname: string;\n\t}): Promise<AthenaStoredPasskey> {\n\t\tconst result = await this.db.query<AuthPasskeyRow>(\n\t\t\t`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\t\t\t[persistName(input.name), input.id, input.userId],\n\t\t);\n\t\treturn requireRow(result.rows[0], notFoundError());\n\t}\n\n\tasync delete(input: { id: string; userId: string }): Promise<void> {\n\t\tconst result = await this.db.query<AuthPasskeyRow>(\n\t\t\t`DELETE FROM ${ATHENA_AUTH_TABLES.passkeys}\n        WHERE id = $1\n          AND user_id = $2\n        RETURNING *`,\n\t\t\t[input.id, input.userId],\n\t\t);\n\t\tif (!result.rows[0]) {\n\t\t\tthrow notFoundError();\n\t\t}\n\t}\n}\n\nexport class MemoryPasskeyRepository implements PasskeyRepository {\n\tconstructor(private readonly stores: MemoryAuthStores) {}\n\n\tasync create(\n\t\trecord: AthenaStoredPasskeyCreate,\n\t): Promise<AthenaStoredPasskey> {\n\t\tconst counter = asBigInt(record.counter);\n\t\tassertNonNegativeCounter(counter);\n\t\tconst credentialId = encodePasskeyBytes(record.credentialId);\n\t\tfor (const existing of this.stores.passkeys.values()) {\n\t\t\tif (existing.credential_id === credentialId) {\n\t\t\t\tthrow uniqueCredentialError();\n\t\t\t}\n\t\t}\n\t\tconst stamp = new Date();\n\t\tconst row: AuthPasskeyRow = {\n\t\t\taaguid: record.aaguid ?? null,\n\t\t\tbacked_up: Boolean(record.backedUp),\n\t\t\tcounter,\n\t\t\tcreated_at: stamp,\n\t\t\tcredential_id: credentialId,\n\t\t\tdevice_type: normalizePasskeyDeviceType(record.deviceType),\n\t\t\tid: record.id ?? crypto.randomUUID(),\n\t\t\tname: persistName(record.name),\n\t\t\tpublic_key: encodePasskeyBytes(record.publicKey),\n\t\t\tresident_key: record.residentKey ?? null,\n\t\t\ttransports: serializePasskeyTransports(record.transports),\n\t\t\tupdated_at: stamp,\n\t\t\tuser_id: record.userId,\n\t\t};\n\t\tthis.stores.passkeys.set(row.id, row);\n\t\treturn toStoredPasskey(row);\n\t}\n\n\tasync findByCredentialId(\n\t\tcredentialId: Uint8Array,\n\t): Promise<AthenaStoredPasskey | null> {\n\t\tconst encoded = encodePasskeyBytes(credentialId);\n\t\tfor (const row of this.stores.passkeys.values()) {\n\t\t\tif (row.credential_id === encoded) {\n\t\t\t\treturn toStoredPasskey(row);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tasync listByUser(userId: string): Promise<AthenaStoredPasskey[]> {\n\t\treturn [...this.stores.passkeys.values()]\n\t\t\t.filter((row) => row.user_id === userId)\n\t\t\t.sort(\n\t\t\t\t(left, right) =>\n\t\t\t\t\tasDate(right.created_at).getTime() -\n\t\t\t\t\tasDate(left.created_at).getTime(),\n\t\t\t)\n\t\t\t.map((row) => toStoredPasskey(row));\n\t}\n\n\tasync updateCounter(input: {\n\t\tcredentialId: Uint8Array;\n\t\texpected: bigint;\n\t\tnext: bigint;\n\t}): Promise<AthenaStoredPasskey> {\n\t\tassertIncreasingCounter(input.expected, input.next);\n\t\tconst encoded = encodePasskeyBytes(input.credentialId);\n\t\tlet found: AuthPasskeyRow | undefined;\n\t\tfor (const row of this.stores.passkeys.values()) {\n\t\t\tif (row.credential_id === encoded) {\n\t\t\t\tfound = row;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!found || asBigInt(found.counter) !== input.expected) {\n\t\t\tthrow casMissError();\n\t\t}\n\t\tif (isZeroToZero(input.expected, input.next)) {\n\t\t\treturn toStoredPasskey(found);\n\t\t}\n\t\tfound.counter = input.next;\n\t\tfound.updated_at = new Date();\n\t\treturn toStoredPasskey(found);\n\t}\n\n\tasync updateName(input: {\n\t\tid: string;\n\t\tuserId: string;\n\t\tname: string;\n\t}): Promise<AthenaStoredPasskey> {\n\t\tconst row = this.stores.passkeys.get(input.id);\n\t\tif (!row || row.user_id !== input.userId) {\n\t\t\tthrow notFoundError();\n\t\t}\n\t\trow.name = persistName(input.name);\n\t\trow.updated_at = new Date();\n\t\treturn toStoredPasskey(row);\n\t}\n\n\tasync delete(input: { id: string; userId: string }): Promise<void> {\n\t\tconst row = this.stores.passkeys.get(input.id);\n\t\tif (!row || row.user_id !== input.userId) {\n\t\t\tthrow notFoundError();\n\t\t}\n\t\tthis.stores.passkeys.delete(input.id);\n\t}\n}\n\nexport class PostgresPasskeyRepository extends LocalPasskeyRepository {\n\tconstructor(storesOrDb: PostgresAuthStores | AthenaAuthDatabase) {\n\t\tsuper(resolvePostgresDatabase(storesOrDb));\n\t}\n}\n\nexport function createMemoryPasskeyRepository(\n\tstores: MemoryAuthStores,\n): PasskeyRepository {\n\treturn new MemoryPasskeyRepository(stores);\n}\n\nexport function createPostgresPasskeyRepository(\n\tstoresOrDb: PostgresAuthStores | AthenaAuthDatabase,\n): PasskeyRepository {\n\treturn new PostgresPasskeyRepository(storesOrDb);\n}\n\nexport function createPasskeyRepository(\n\tstoresOrDb: MemoryAuthStores | PostgresAuthStores | AthenaAuthDatabase,\n): PasskeyRepository {\n\tif (storesOrDb instanceof MemoryAuthStores) {\n\t\treturn new MemoryPasskeyRepository(storesOrDb);\n\t}\n\treturn new PostgresPasskeyRepository(storesOrDb);\n}\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","import {\n  serializePasskeyTransports,\n} 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","/**\n * Local POST /passkey/generate-authenticate-options.\n * Optional session: identified credentials vs discoverable (empty allowCredentials).\n */\nimport {\n\ttype AuthenticatorTransportFuture,\n\tgenerateAuthenticationOptions,\n} from \"@simplewebauthn/server\";\n\nimport type { NormalizedAthenaAuthConfig } from \"../../config.ts\";\nimport type {\n\tAthenaPasskeyRelyingParty,\n\tAthenaStoredPasskey,\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\tconfig: NormalizedAthenaAuthConfig;\n\theaders: Headers;\n\trelyingParty: AthenaPasskeyRelyingParty | undefined;\n\tresolveSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t) => Promise<{\n\t\tsession: AuthSessionRow;\n\t\ttoken: string;\n\t\tuser: AuthUserRow;\n\t} | null>;\n\tstores: AthenaAuthStores;\n}\n\nasync function readIdentifierBody(\n\trequest: Request,\n): Promise<{ email?: string; userId?: string }> {\n\ttry {\n\t\tconst clone = request.clone();\n\t\tconst text = await clone.text();\n\t\tif (!text.trim()) {\n\t\t\treturn {};\n\t\t}\n\t\tconst parsed: unknown = JSON.parse(text);\n\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\treturn {};\n\t\t}\n\t\tconst record = parsed as Record<string, unknown>;\n\t\tconst email =\n\t\t\ttypeof record.email === \"string\" && record.email.trim()\n\t\t\t\t? record.email.trim()\n\t\t\t\t: undefined;\n\t\tconst userId =\n\t\t\ttypeof record.userId === \"string\" && record.userId.trim()\n\t\t\t\t? record.userId.trim()\n\t\t\t\t: undefined;\n\t\treturn { email, userId };\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nasync function resolveIdentifiedUserId(\n\trequest: Request,\n\tstores: AthenaAuthStores,\n): Promise<string | null> {\n\tconst body = await readIdentifierBody(request);\n\tif (body.userId) {\n\t\tconst user = await stores.getUserById(body.userId);\n\t\treturn user?.id ?? null;\n\t}\n\tif (body.email) {\n\t\tconst user = await stores.getUserByEmail(body.email);\n\t\treturn user?.id ?? null;\n\t}\n\treturn null;\n}\n\nfunction allowCredentialsFromStored(\n\trows: readonly AthenaStoredPasskey[],\n): NonNullable<AthenaPasskeyOptionsResponse[\"allowCredentials\"]> {\n\treturn rows.map((row) => {\n\t\tconst id = base64Url.encode(row.credentialId, { padding: false });\n\t\tif (row.transports.length === 0) {\n\t\t\treturn { id, type: \"public-key\" };\n\t\t}\n\t\treturn {\n\t\t\tid,\n\t\t\ttransports: [...row.transports],\n\t\t\ttype: \"public-key\",\n\t\t};\n\t});\n}\n\nfunction toLooseExtensions(\n\tvalue: unknown,\n): AthenaPasskeyOptionsResponse[\"extensions\"] {\n\tif (value == null || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst record: NonNullable<AthenaPasskeyOptionsResponse[\"extensions\"]> = {};\n\tfor (const [key, entry] of Object.entries(value)) {\n\t\trecord[key] = entry;\n\t}\n\treturn record;\n}\n\nfunction toWireOptions(\n\toptions: Awaited<ReturnType<typeof generateAuthenticationOptions>>,\n\trp: AthenaPasskeyRelyingParty,\n\tallowCredentials: NonNullable<\n\t\tAthenaPasskeyOptionsResponse[\"allowCredentials\"]\n\t>,\n): AthenaPasskeyOptionsResponse & { rpId: string } {\n\treturn {\n\t\tallowCredentials,\n\t\tchallenge: options.challenge,\n\t\textensions: toLooseExtensions(options.extensions),\n\t\trp: { id: rp.id, name: rp.name },\n\t\trpId: rp.id,\n\t\ttimeout: options.timeout,\n\t\tuserVerification: options.userVerification,\n\t};\n}\n\nexport async function handleGenerateAuthenticateOptionsRoute(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: GenerateAuthenticateOptionsContext,\n): Promise<Response | undefined> {\n\tif (path === \"/passkey/generate-authenticate-options\" && method === \"POST\") {\n\t\tconst rp = ctx.relyingParty;\n\t\tif (!rp) {\n\t\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t\t500,\n\t\t\t\t\"Passkey relying party snapshot is not configured\",\n\t\t\t\t{ code: \"ATHENA_RUNTIME_CONFIG_INVALID\" },\n\t\t\t);\n\t\t}\n\n\t\tconst resolved = await ctx.resolveSession(request, ctx.stores);\n\t\tconst identifiedUserId = resolved\n\t\t\t? resolved.user.id\n\t\t\t: await resolveIdentifiedUserId(request, ctx.stores);\n\t\tconst existing = identifiedUserId\n\t\t\t? await createPasskeyRepository(ctx.stores).listByUser(identifiedUserId)\n\t\t\t: [];\n\t\tconst allowCredentials = allowCredentialsFromStored(existing);\n\t\tconst rawChallenge = crypto.getRandomValues(\n\t\t\tnew Uint8Array(CHALLENGE_BYTES),\n\t\t);\n\t\tconst challengeHash = new Uint8Array(\n\t\t\tawait crypto.subtle.digest(\"SHA-256\", rawChallenge),\n\t\t);\n\t\tconst ttlSeconds = ctx.config.passkey.challengeTtlSeconds;\n\t\tawait createPasskeyChallengeStore(ctx.stores).create({\n\t\t\tchallengeHash,\n\t\t\texpiresAt: new Date(Date.now() + ttlSeconds * 1000),\n\t\t\tpurpose: \"authentication\",\n\t\t\trpId: rp.id,\n\t\t\tuserId: identifiedUserId,\n\t\t});\n\n\t\tconst options = await generateAuthenticationOptions({\n\t\t\tallowCredentials: allowCredentials.flatMap((item) => {\n\t\t\t\tif (!item.id) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tconst descriptor: {\n\t\t\t\t\tid: string;\n\t\t\t\t\ttransports?: AuthenticatorTransportFuture[];\n\t\t\t\t} = { id: item.id };\n\t\t\t\tif (item.transports && item.transports.length > 0) {\n\t\t\t\t\tdescriptor.transports = [\n\t\t\t\t\t\t...item.transports,\n\t\t\t\t\t] as AuthenticatorTransportFuture[];\n\t\t\t\t}\n\t\t\t\treturn [descriptor];\n\t\t\t}),\n\t\t\tchallenge: rawChallenge,\n\t\t\trpID: rp.id,\n\t\t\ttimeout: ttlSeconds * 1000,\n\t\t\tuserVerification:\n\t\t\t\tctx.config.passkey.authentication.userVerification ?? \"preferred\",\n\t\t});\n\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\ttoWireOptions(options, rp, allowCredentials),\n\t\t\tctx.headers,\n\t\t);\n\t}\n\treturn undefined;\n}\n","/**\n * Local GET /passkey/generate-register-options.\n * Session: existing user ceremony. No session + onboarding: durable transaction.\n */\nimport {\n\ttype AuthenticatorTransportFuture,\n\tgenerateRegistrationOptions,\n} from \"@simplewebauthn/server\";\n\nimport type { NormalizedAthenaAuthConfig } from \"../../config.ts\";\nimport {\n\tregistrationAuthenticatorSelection,\n\tsupportedRegistrationExtensions,\n\ttype AthenaPasskeyAuthenticatorAttachment,\n} from \"../../passkey/policy.ts\";\nimport type {\n\tAthenaPasskeyRelyingParty,\n\tAthenaStoredPasskey,\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\tconfig: NormalizedAthenaAuthConfig;\n\theaders: Headers;\n\trelyingParty: AthenaPasskeyRelyingParty | undefined;\n\tresolveSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t) => Promise<{\n\t\tsession: AuthSessionRow;\n\t\ttoken: string;\n\t\tuser: AuthUserRow;\n\t} | null>;\n\tstores: AthenaAuthStores;\n}\n\nfunction userLabel(user: AuthUserRow): {\n\tuserDisplayName: string;\n\tuserName: string;\n} {\n\tconst email = user.email?.trim() || undefined;\n\tconst name = user.name?.trim() || undefined;\n\treturn {\n\t\tuserDisplayName: name ?? email ?? user.id,\n\t\tuserName: email ?? name ?? user.id,\n\t};\n}\n\nfunction excludeCredentialsFromStored(\n\trows: readonly AthenaStoredPasskey[],\n): NonNullable<AthenaPasskeyOptionsResponse[\"excludeCredentials\"]> {\n\treturn rows.map((row) => {\n\t\tconst id = base64Url.encode(row.credentialId, { padding: false });\n\t\tif (row.transports.length === 0) {\n\t\t\treturn { id, type: \"public-key\" };\n\t\t}\n\t\treturn {\n\t\t\tid,\n\t\t\ttransports: [...row.transports],\n\t\t\ttype: \"public-key\",\n\t\t};\n\t});\n}\n\nfunction toLooseExtensions(\n\tvalue: unknown,\n): AthenaPasskeyOptionsResponse[\"extensions\"] {\n\tif (value == null || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst record: NonNullable<AthenaPasskeyOptionsResponse[\"extensions\"]> = {};\n\tfor (const [key, entry] of Object.entries(value)) {\n\t\trecord[key] = entry;\n\t}\n\treturn record;\n}\n\nfunction toWireOptions(\n\toptions: Awaited<ReturnType<typeof generateRegistrationOptions>>,\n\trp: AthenaPasskeyRelyingParty,\n\texcludeCredentials: NonNullable<\n\t\tAthenaPasskeyOptionsResponse[\"excludeCredentials\"]\n\t>,\n): AthenaPasskeyOptionsResponse {\n\treturn {\n\t\tattestation: options.attestation,\n\t\tauthenticatorSelection: options.authenticatorSelection,\n\t\tchallenge: options.challenge,\n\t\texcludeCredentials,\n\t\textensions: toLooseExtensions(options.extensions),\n\t\tpubKeyCredParams: options.pubKeyCredParams,\n\t\trp: { id: rp.id, name: rp.name },\n\t\ttimeout: options.timeout,\n\t\tuser: {\n\t\t\tdisplayName: options.user.displayName,\n\t\t\tid: options.user.id,\n\t\t\tname: options.user.name,\n\t\t},\n\t};\n}\n\nfunction queryAttachment(\n\trequest: Request,\n): AthenaPasskeyAuthenticatorAttachment | null {\n\tconst attachment = new URL(request.url).searchParams\n\t\t.get(\"authenticatorAttachment\")\n\t\t?.trim();\n\tif (attachment === \"platform\" || attachment === \"cross-platform\") {\n\t\treturn attachment;\n\t}\n\treturn null;\n}\n\nfunction queryText(request: Request, key: string): string | undefined {\n\tconst value = new URL(request.url).searchParams.get(key)?.trim();\n\treturn value || undefined;\n}\n\nexport async function handleGenerateRegisterOptionsRoute(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: GenerateRegisterOptionsContext,\n): Promise<Response | undefined> {\n\tif (path === \"/passkey/generate-register-options\" && method === \"GET\") {\n\t\tconst rp = ctx.relyingParty;\n\t\tif (!rp) {\n\t\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t\t500,\n\t\t\t\t\"Passkey relying party snapshot is not configured\",\n\t\t\t\t{ code: \"ATHENA_RUNTIME_CONFIG_INVALID\" },\n\t\t\t);\n\t\t}\n\n\t\tconst session = await ctx.resolveSession(request, ctx.stores);\n\t\tif (\n\t\t\t!session &&\n\t\t\t(request.headers.get(\"authorization\") || request.headers.get(\"cookie\"))\n\t\t) {\n\t\t\tthrow AthenaAuthRuntimeError.sessionNotFound();\n\t\t}\n\t\tconst onboarding = !session && ctx.config.passkey.onboardingEnabled;\n\t\tif (!session && !onboarding) {\n\t\t\tthrow AthenaAuthRuntimeError.unauthenticated();\n\t\t}\n\n\t\tconst existing = session\n\t\t\t? await createPasskeyRepository(ctx.stores).listByUser(session.user.id)\n\t\t\t: [];\n\t\tconst excludeCredentials = excludeCredentialsFromStored(existing);\n\t\tconst labels = session\n\t\t\t? userLabel(session.user)\n\t\t\t: {\n\t\t\t\t\tuserDisplayName:\n\t\t\t\t\t\tqueryText(request, \"name\") ??\n\t\t\t\t\t\tqueryText(request, \"email\") ??\n\t\t\t\t\t\t\"Passkey\",\n\t\t\t\t\tuserName:\n\t\t\t\t\t\tqueryText(request, \"email\") ??\n\t\t\t\t\t\tqueryText(request, \"name\") ??\n\t\t\t\t\t\t\"passkey\",\n\t\t\t\t};\n\t\tconst rawChallenge = crypto.getRandomValues(\n\t\t\tnew Uint8Array(CHALLENGE_BYTES),\n\t\t);\n\t\tconst challengeHash = new Uint8Array(\n\t\t\tawait crypto.subtle.digest(\"SHA-256\", rawChallenge),\n\t\t);\n\t\tconst ttlSeconds = ctx.config.passkey.challengeTtlSeconds;\n\t\tconst expiresAt = new Date(Date.now() + ttlSeconds * 1000);\n\t\tconst userHandle = session\n\t\t\t? new TextEncoder().encode(session.user.id)\n\t\t\t: crypto.getRandomValues(new Uint8Array(USER_HANDLE_BYTES));\n\n\t\tif (session) {\n\t\t\tawait createPasskeyChallengeStore(ctx.stores).create({\n\t\t\t\tchallengeHash,\n\t\t\t\texpiresAt,\n\t\t\t\tpurpose: \"registration\",\n\t\t\t\trpId: rp.id,\n\t\t\t\tuserId: session.user.id,\n\t\t\t});\n\t\t} else {\n\t\t\tawait createPasskeyRegistrationTransactionStore(ctx.stores).create({\n\t\t\t\tchallengeHash,\n\t\t\t\tcontext: {\n\t\t\t\t\temail: queryText(request, \"email\"),\n\t\t\t\t\tname: queryText(request, \"name\"),\n\t\t\t\t},\n\t\t\t\texpiresAt,\n\t\t\t\tmode: \"onboarding\",\n\t\t\t\trpId: rp.id,\n\t\t\t\tuserHandle,\n\t\t\t});\n\t\t}\n\n\t\tconst policy = ctx.config.passkey.registration;\n\t\tconst authenticatorSelection = registrationAuthenticatorSelection({\n\t\t\tattachmentOverride: queryAttachment(request),\n\t\t\tpolicy,\n\t\t});\n\t\tconst extensions =\n\t\t\tpolicy.extensions.credProps === false\n\t\t\t\t? { credProps: false }\n\t\t\t\t: supportedRegistrationExtensions(policy);\n\t\tconst options = await generateRegistrationOptions({\n\t\t\tattestationType: \"none\",\n\t\t\tauthenticatorSelection,\n\t\t\tchallenge: rawChallenge,\n\t\t\texcludeCredentials: excludeCredentials.flatMap((item) => {\n\t\t\t\tif (!item.id) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tconst descriptor: {\n\t\t\t\t\tid: string;\n\t\t\t\t\ttransports?: AuthenticatorTransportFuture[];\n\t\t\t\t} = { id: item.id };\n\t\t\t\tif (item.transports && item.transports.length > 0) {\n\t\t\t\t\tdescriptor.transports = [\n\t\t\t\t\t\t...item.transports,\n\t\t\t\t\t] as AuthenticatorTransportFuture[];\n\t\t\t\t}\n\t\t\t\treturn [descriptor];\n\t\t\t}),\n\t\t\t...(extensions ? { extensions } : {}),\n\t\t\trpID: rp.id,\n\t\t\trpName: rp.name,\n\t\t\ttimeout: ttlSeconds * 1000,\n\t\t\tuserDisplayName: labels.userDisplayName,\n\t\t\tuserID: userHandle,\n\t\t\tuserName: labels.userName,\n\t\t});\n\n\t\tconst wire = toWireOptions(options, rp, excludeCredentials);\n\t\tif (policy.extensions.credProps === false) {\n\t\t\tconst extensions = { ...wire.extensions };\n\t\t\tdelete extensions.credProps;\n\t\t\twire.extensions =\n\t\t\t\tObject.keys(extensions).length > 0 ? extensions : undefined;\n\t\t}\n\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\twire,\n\t\t\tctx.headers,\n\t\t);\n\t}\n\treturn undefined;\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\tchallengeHash: Uint8Array;\n\tconsumedAt: Date | null;\n\tcontext: unknown;\n\tcreatedAt: Date;\n\texpiresAt: Date;\n\tid: string;\n\tmode: AthenaPasskeyRegistrationMode;\n\trpId: string;\n\tuserHandle: Uint8Array;\n}\n\nexport interface AthenaPasskeyRegistrationTransactionCreate {\n\tchallengeHash: Uint8Array;\n\tcontext?: unknown;\n\texpiresAt: Date;\n\tmode: AthenaPasskeyRegistrationMode;\n\trpId: string;\n\tuserHandle: Uint8Array;\n}\n\ninterface RegistrationTransactionRow {\n\tchallenge_hash: string;\n\tconsumed_at: Date | string | null;\n\tcontext: string | null;\n\tcreated_at: Date | string;\n\texpires_at: Date | string;\n\tid: string;\n\tmode: string;\n\trp_id: string;\n\tuser_handle: string;\n}\n\nfunction asDate(value: Date | string | null | undefined): Date | null {\n\tif (!value) {\n\t\treturn null;\n\t}\n\treturn value instanceof Date ? value : new Date(value);\n}\n\nfunction encodeBytes(bytes: Uint8Array): string {\n\treturn base64Url.encode(bytes, { padding: false });\n}\n\nfunction decodeBytes(value: string): Uint8Array {\n\treturn base64Url.decode(value);\n}\n\nfunction parseContext(value: string | null): unknown {\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn JSON.parse(value) as unknown;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction serializeContext(value: unknown): string | null {\n\tif (value == null) {\n\t\treturn null;\n\t}\n\treturn JSON.stringify(value);\n}\n\nfunction toTransaction(\n\trow: RegistrationTransactionRow,\n): AthenaPasskeyRegistrationTransaction {\n\treturn {\n\t\tchallengeHash: decodeBytes(row.challenge_hash),\n\t\tconsumedAt: asDate(row.consumed_at),\n\t\tcontext: parseContext(row.context),\n\t\tcreatedAt: asDate(row.created_at) ?? new Date(),\n\t\texpiresAt: asDate(row.expires_at) ?? new Date(),\n\t\tid: row.id,\n\t\tmode: row.mode === \"onboarding\" ? \"onboarding\" : \"authenticated\",\n\t\trpId: row.rp_id,\n\t\tuserHandle: decodeBytes(row.user_handle),\n\t};\n}\n\nfunction expiredError(): Error {\n\treturn new Error(\"passkey registration transaction expired\");\n}\n\nfunction consumedError(): Error {\n\treturn new Error(\"passkey registration transaction already consumed\");\n}\n\nfunction missingError(): Error {\n\treturn new Error(\"passkey registration transaction not found\");\n}\n\nexport class MemoryPasskeyRegistrationTransactionStore {\n\tconstructor(private readonly stores: MemoryAuthStores) {}\n\n\tasync create(\n\t\tinput: AthenaPasskeyRegistrationTransactionCreate,\n\t): Promise<AthenaPasskeyRegistrationTransaction> {\n\t\tconst stamp = new Date();\n\t\tconst row: RegistrationTransactionRow = {\n\t\t\tchallenge_hash: encodeBytes(input.challengeHash),\n\t\t\tconsumed_at: null,\n\t\t\tcontext: serializeContext(input.context),\n\t\t\tcreated_at: stamp,\n\t\t\texpires_at: input.expiresAt,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tmode: input.mode,\n\t\t\trp_id: input.rpId,\n\t\t\tuser_handle: encodeBytes(input.userHandle),\n\t\t};\n\t\tfor (const existing of this.stores.passkeyRegistrationTransactions.values()) {\n\t\t\tif (existing.challenge_hash === row.challenge_hash) {\n\t\t\t\tconst error = new Error(\n\t\t\t\t\t\"duplicate key value violates unique constraint\",\n\t\t\t\t);\n\t\t\t\t(error as { code?: string }).code = \"23505\";\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tthis.stores.passkeyRegistrationTransactions.set(row.id, row);\n\t\treturn toTransaction(row);\n\t}\n\n\tasync findActive(input: {\n\t\tchallengeHash: Uint8Array;\n\t\trpId: string;\n\t}): Promise<AthenaPasskeyRegistrationTransaction> {\n\t\tconst encoded = encodeBytes(input.challengeHash);\n\t\tconst now = Date.now();\n\t\tfor (const row of this.stores.passkeyRegistrationTransactions.values()) {\n\t\t\tif (row.challenge_hash !== encoded || row.rp_id !== input.rpId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (row.consumed_at) {\n\t\t\t\tthrow consumedError();\n\t\t\t}\n\t\t\tif ((asDate(row.expires_at)?.getTime() ?? 0) <= now) {\n\t\t\t\tthrow expiredError();\n\t\t\t}\n\t\t\treturn toTransaction(row);\n\t\t}\n\t\tthrow missingError();\n\t}\n\n\tasync consume(input: {\n\t\tchallengeHash: Uint8Array;\n\t\trpId: string;\n\t}): Promise<AthenaPasskeyRegistrationTransaction> {\n\t\tconst encoded = encodeBytes(input.challengeHash);\n\t\tconst now = Date.now();\n\t\tfor (const row of this.stores.passkeyRegistrationTransactions.values()) {\n\t\t\tif (row.challenge_hash !== encoded || row.rp_id !== input.rpId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (row.consumed_at) {\n\t\t\t\tthrow consumedError();\n\t\t\t}\n\t\t\tif ((asDate(row.expires_at)?.getTime() ?? 0) <= now) {\n\t\t\t\tthrow expiredError();\n\t\t\t}\n\t\t\trow.consumed_at = new Date();\n\t\t\treturn toTransaction(row);\n\t\t}\n\t\tthrow missingError();\n\t}\n}\n\nexport class PostgresPasskeyRegistrationTransactionStore {\n\tconstructor(private readonly db: AthenaAuthDatabase) {}\n\n\tasync create(\n\t\tinput: AthenaPasskeyRegistrationTransactionCreate,\n\t): Promise<AthenaPasskeyRegistrationTransaction> {\n\t\tconst result = await this.db.query<RegistrationTransactionRow>(\n\t\t\t`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\t\t\t[\n\t\t\t\tcrypto.randomUUID(),\n\t\t\t\tencodeBytes(input.challengeHash),\n\t\t\t\tinput.rpId,\n\t\t\t\tencodeBytes(input.userHandle),\n\t\t\t\tinput.mode,\n\t\t\t\tserializeContext(input.context),\n\t\t\t\tinput.expiresAt,\n\t\t\t],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row) {\n\t\t\tthrow new Error(\"Failed to create passkey registration transaction\");\n\t\t}\n\t\treturn toTransaction(row);\n\t}\n\n\tasync findActive(input: {\n\t\tchallengeHash: Uint8Array;\n\t\trpId: string;\n\t}): Promise<AthenaPasskeyRegistrationTransaction> {\n\t\tconst result = await this.db.query<RegistrationTransactionRow>(\n\t\t\t`SELECT * FROM ${ATHENA_AUTH_TABLES.passkeyRegistrationTransactions}\n        WHERE challenge_hash = $1 AND rp_id = $2`,\n\t\t\t[encodeBytes(input.challengeHash), input.rpId],\n\t\t);\n\t\tconst found = result.rows[0];\n\t\tif (!found) {\n\t\t\tthrow missingError();\n\t\t}\n\t\tif (found.consumed_at) {\n\t\t\tthrow consumedError();\n\t\t}\n\t\tif ((asDate(found.expires_at)?.getTime() ?? 0) <= Date.now()) {\n\t\t\tthrow expiredError();\n\t\t}\n\t\treturn toTransaction(found);\n\t}\n\n\tasync consume(input: {\n\t\tchallengeHash: Uint8Array;\n\t\trpId: string;\n\t}): Promise<AthenaPasskeyRegistrationTransaction> {\n\t\tconst result = await this.db.query<RegistrationTransactionRow>(\n\t\t\t`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\t\t\t[encodeBytes(input.challengeHash), input.rpId],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (row) {\n\t\t\treturn toTransaction(row);\n\t\t}\n\t\tconst existing = await this.db.query<RegistrationTransactionRow>(\n\t\t\t`SELECT * FROM ${ATHENA_AUTH_TABLES.passkeyRegistrationTransactions}\n        WHERE challenge_hash = $1 AND rp_id = $2`,\n\t\t\t[encodeBytes(input.challengeHash), input.rpId],\n\t\t);\n\t\tconst found = existing.rows[0];\n\t\tif (!found) {\n\t\t\tthrow missingError();\n\t\t}\n\t\tif (found.consumed_at) {\n\t\t\tthrow consumedError();\n\t\t}\n\t\tthrow expiredError();\n\t}\n}\n\nfunction resolvePostgresDatabase(storesOrDb: object): AthenaAuthDatabase {\n\tif (\n\t\t\"query\" in storesOrDb &&\n\t\ttypeof (storesOrDb as AthenaAuthDatabase).query === \"function\"\n\t) {\n\t\treturn storesOrDb as AthenaAuthDatabase;\n\t}\n\tconst nested = (storesOrDb as { db?: unknown }).db;\n\tif (\n\t\tnested &&\n\t\ttypeof nested === \"object\" &&\n\t\t\"query\" in nested &&\n\t\ttypeof (nested as AthenaAuthDatabase).query === \"function\"\n\t) {\n\t\treturn nested as AthenaAuthDatabase;\n\t}\n\tthrow new Error(\"passkey registration transactions require a database\");\n}\n\nexport function createPasskeyRegistrationTransactionStore(\n\tstoresOrDb: MemoryAuthStores | object,\n):\n\t| MemoryPasskeyRegistrationTransactionStore\n\t| PostgresPasskeyRegistrationTransactionStore {\n\tif (storesOrDb instanceof MemoryAuthStores) {\n\t\treturn new MemoryPasskeyRegistrationTransactionStore(storesOrDb);\n\t}\n\treturn new PostgresPasskeyRegistrationTransactionStore(\n\t\tresolvePostgresDatabase(storesOrDb),\n\t);\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 { ATHENA_AUTH_CREDENTIAL_PROVIDER_ID } from \"../../contract/index.ts\";\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 { 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\tconfig: NormalizedAthenaAuthConfig;\n\theaders: Headers;\n\thookRequest: (\n\t\trequest: Request,\n\t\tpath: string,\n\t) => {\n\t\tipAddress?: string;\n\t\tmethod: string;\n\t\tpath: string;\n\t\tuserAgent?: string;\n\t};\n\tmutate: AuthDomainMutate;\n\trequireSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t) => Promise<{ session: AuthSessionRow; token: string; user: AuthUserRow }>;\n\tstores: AthenaAuthStores;\n\ttraceId: string;\n}\n\nfunction requireNonEmptyString(value: unknown, field: string): string {\n\tif (typeof value !== \"string\" || value.trim().length === 0) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(`${field} is required`);\n\t}\n\treturn value.trim();\n}\n\nfunction mapPasskeyNotFound(error: unknown): never {\n\tif (\n\t\terror instanceof Error &&\n\t\terror.message.toLowerCase().includes(\"passkey not found\")\n\t) {\n\t\tthrow AthenaAuthRuntimeError.notFound(\"Passkey not found\");\n\t}\n\tthrow error;\n}\n\nasync function loadOwnedPasskey(\n\tstores: AthenaAuthStores,\n\tuserId: string,\n\tid: string,\n): Promise<AthenaStoredPasskey> {\n\tconst rows = await createPasskeyRepository(stores).listByUser(userId);\n\tconst row = rows.find((item) => item.id === id);\n\tif (!row) {\n\t\tthrow AthenaAuthRuntimeError.notFound(\"Passkey not found\");\n\t}\n\treturn row;\n}\n\nfunction identifyingPasskey(row: AthenaStoredPasskey) {\n\treturn sanitizeHookPasskey({\n\t\tcreatedAt: row.createdAt,\n\t\tid: row.id,\n\t\tname: row.name,\n\t\tuserId: row.userId,\n\t});\n}\n\nexport async function handleListUserPasskeysRoute(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: ManagePasskeysContext,\n): Promise<Response | undefined> {\n\tif (path === \"/passkey/list-user-passkeys\" && method === \"GET\") {\n\t\tconst { user } = await ctx.requireSession(request, ctx.stores);\n\t\tconst rows = await createPasskeyRepository(ctx.stores).listByUser(user.id);\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\trows.map((row) => toPasskeyView(row)),\n\t\t\tctx.headers,\n\t\t);\n\t}\n\treturn undefined;\n}\n\nexport async function handleDeletePasskeyRoute(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: ManagePasskeysContext,\n): Promise<Response | undefined> {\n\tif (path === \"/passkey/delete-passkey\" && method === \"POST\") {\n\t\tconst { user } = await ctx.requireSession(request, ctx.stores);\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst id = requireNonEmptyString(body.id, \"id\");\n\t\tconst existing = await loadOwnedPasskey(ctx.stores, user.id, id);\n\t\tconst remainingPasskeys = (\n\t\t\tawait createPasskeyRepository(ctx.stores).listByUser(user.id)\n\t\t).filter((row) => row.id !== id);\n\t\tconst accounts = await ctx.stores.listAccounts(user.id);\n\t\tconst hasOtherAuthenticationMethod =\n\t\t\tremainingPasskeys.length > 0 ||\n\t\t\taccounts.some(\n\t\t\t\t(account) =>\n\t\t\t\t\taccount.provider_id === ATHENA_AUTH_CREDENTIAL_PROVIDER_ID ||\n\t\t\t\t\taccount.provider_id.length > 0,\n\t\t\t);\n\t\tif (!hasOtherAuthenticationMethod) {\n\t\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t\t409,\n\t\t\t\t\"Cannot delete the last authentication method\",\n\t\t\t\t{ code: \"ATHENA_AUTH_LAST_AUTHENTICATION_METHOD\" },\n\t\t\t);\n\t\t}\n\t\ttry {\n\t\t\tawait ctx.mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: { kind: \"user\", userId: user.id },\n\t\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\t\ttraceId: ctx.traceId,\n\t\t\t\t},\n\t\t\t\tevent: \"passkey.delete\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tawait createPasskeyRepository(scope.stores).delete({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tuserId: user.id,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tinput: { id },\n\t\t\t\tprevious: async () => ({ passkey: identifyingPasskey(existing) }),\n\t\t\t\tresultOf: () => ({\n\t\t\t\t\tdeleted: true as const,\n\t\t\t\t\tid,\n\t\t\t\t\tuserId: user.id,\n\t\t\t\t}),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tmapPasskeyNotFound(error);\n\t\t}\n\t\treturn jsonResponse(200, { status: true }, ctx.headers);\n\t}\n\treturn undefined;\n}\n\nexport async function handleUpdatePasskeyRoute(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: ManagePasskeysContext,\n): Promise<Response | undefined> {\n\tif (path === \"/passkey/update-passkey\" && method === \"POST\") {\n\t\tconst { user } = await ctx.requireSession(request, ctx.stores);\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst id = requireNonEmptyString(body.id, \"id\");\n\t\tconst name = requireNonEmptyString(body.name, \"name\");\n\t\tconst existing = await loadOwnedPasskey(ctx.stores, user.id, id);\n\t\ttry {\n\t\t\tconst updated = await ctx.mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: { kind: \"user\", userId: user.id },\n\t\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\t\ttraceId: ctx.traceId,\n\t\t\t\t},\n\t\t\t\tevent: \"passkey.update\",\n\t\t\t\texecute: (scope) =>\n\t\t\t\t\tcreatePasskeyRepository(scope.stores).updateName({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tuserId: user.id,\n\t\t\t\t\t}),\n\t\t\t\tinput: { id, name },\n\t\t\t\tprevious: async () => ({ passkey: identifyingPasskey(existing) }),\n\t\t\t\tresultOf: (row) => ({ passkey: identifyingPasskey(row) }),\n\t\t\t});\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{ passkey: toPasskeyView(updated) },\n\t\t\t\tctx.headers,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tmapPasskeyNotFound(error);\n\t\t}\n\t}\n\treturn undefined;\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\ttransports: readonly string[] | string | null | undefined,\n): string[] {\n\tif (Array.isArray(transports)) {\n\t\treturn transports.filter(\n\t\t\t(entry): entry is string =>\n\t\t\t\ttypeof entry === \"string\" && entry.length > 0,\n\t\t);\n\t}\n\tif (typeof transports === \"string\" && transports.trim()) {\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(transports);\n\t\t\tif (Array.isArray(parsed)) {\n\t\t\t\treturn parsed.filter(\n\t\t\t\t\t(entry): entry is string =>\n\t\t\t\t\t\ttypeof entry === \"string\" && entry.length > 0,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch {\n\t\t\treturn [transports];\n\t\t}\n\t}\n\treturn [];\n}\n\nexport function toPasskeyView(\n\tstored: AthenaStoredPasskey,\n\ttransports?: string | null,\n): AthenaPasskeyRecord {\n\tconst listed = asTransportList(\n\t\ttransports === undefined ? stored.transports : transports,\n\t);\n\tconst resolved = resolvePasskeyAuthenticatorDisplay({\n\t\taaguid: stored.aaguid,\n\t\tbackedUp: stored.backedUp,\n\t\tdeviceType: stored.deviceType,\n\t\tname: stored.name,\n\t\tresidentKey: stored.residentKey,\n\t\ttransports: listed,\n\t});\n\tconst authenticator: AthenaPasskeyRecord[\"authenticator\"] = {\n\t\tbackedUp: stored.backedUp,\n\t\tdeviceType: stored.deviceType,\n\t\tdisplayName: resolved.displayName,\n\t\tresidentKey: stored.residentKey,\n\t\ttransports: listed,\n\t};\n\tif (resolved.vendor) {\n\t\tauthenticator.vendor = resolved.vendor;\n\t}\n\tif (resolved.model) {\n\t\tauthenticator.model = resolved.model;\n\t}\n\tconst view: AthenaPasskeyRecord = {\n\t\tauthenticator,\n\t\tcreatedAt: stored.createdAt.toISOString(),\n\t\tid: stored.id,\n\t\tname: stored.name,\n\t\tuserId: stored.userId,\n\t};\n\tif (stored.updatedAt) {\n\t\tview.updatedAt = stored.updatedAt.toISOString();\n\t}\n\treturn 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\t_request: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: {\n\t\theaders: Headers;\n\t\trelyingParty: AthenaPasskeyRelyingParty | undefined;\n\t},\n): Promise<Response | undefined> {\n\tif (path === \"/.well-known/webauthn\" && method === \"GET\") {\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{ origins: [...(ctx.relyingParty?.relatedOrigins ?? [])] },\n\t\t\tctx.headers,\n\t\t);\n\t}\n\treturn undefined;\n}\n","/**\n * Local POST /passkey/verify-authentication.\n * Public. Consumes hash-only authentication challenge after credential lookup.\n */\nimport {\n\ttype AuthenticationResponseJSON,\n\ttype AuthenticatorTransportFuture,\n\tverifyAuthenticationResponse,\n} from \"@simplewebauthn/server\";\nimport { isoBase64URL } from \"@simplewebauthn/server/helpers\";\n\nimport type { NormalizedAthenaAuthConfig } from \"../../config.ts\";\nimport { requireUserVerificationFromPolicy } from \"../../passkey/policy.ts\";\nimport type { AuthDomainMutate } from \"../../hooks/execute.ts\";\nimport { sanitizeHookSession } from \"../../hooks/sanitize.ts\";\nimport type { AthenaPasskeyRelyingParty } from \"../../passkey/server/types.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AthenaAuthStores } from \"../memory-stores.ts\";\nimport {\n\ttype AuthSessionRow,\n\ttoPublicSession,\n\ttoPublicUser,\n} from \"../models.ts\";\nimport { readJsonBody } from \"../security.ts\";\nimport { createPasskeyChallengeStore } from \"./challenge-store.ts\";\nimport { createPasskeyRepository } from \"./repository.ts\";\nimport { asPasskeyRecord, challengeHashFromClientData, normalizeWebAuthnResponsePayload } from \"./wire.ts\";\n\nexport interface VerifyAuthenticationContext {\n\tconfig: NormalizedAthenaAuthConfig;\n\theaders: Headers;\n\thookRequest: (request: Request, path: string) => {\n\t\tipAddress?: string;\n\t\tmethod: string;\n\t\tpath: string;\n\t\tuserAgent?: string;\n\t};\n\tissueSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t\tuserId: string,\n\t) => Promise<AuthSessionRow>;\n\tmutate: AuthDomainMutate;\n\trelyingParty: AthenaPasskeyRelyingParty | undefined;\n\tstores: AthenaAuthStores;\n\ttraceId: string;\n}\n\nfunction toAuthenticationResponseJSON(\n\tcredential: Record<string, unknown>,\n): AuthenticationResponseJSON {\n\tconst id = typeof credential.id === \"string\" ? credential.id : \"\";\n\tconst rawId = typeof credential.rawId === \"string\" ? credential.rawId : id;\n\tconst nested = asPasskeyRecord(credential.response);\n\tconst clientDataJSON =\n\t\ttypeof nested?.clientDataJSON === \"string\" ? nested.clientDataJSON : \"\";\n\tconst authenticatorData =\n\t\ttypeof nested?.authenticatorData === \"string\"\n\t\t\t? nested.authenticatorData\n\t\t\t: \"\";\n\tconst signature =\n\t\ttypeof nested?.signature === \"string\" ? nested.signature : \"\";\n\tconst userHandle =\n\t\ttypeof nested?.userHandle === \"string\" ? nested.userHandle : undefined;\n\tif (!id || !clientDataJSON || !authenticatorData || !signature) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"Invalid passkey authentication response\",\n\t\t);\n\t}\n\treturn {\n\t\tclientExtensionResults: asPasskeyRecord(credential.clientExtensionResults) ?? {},\n\t\tid,\n\t\trawId,\n\t\tresponse: {\n\t\t\tauthenticatorData,\n\t\t\tclientDataJSON,\n\t\t\tsignature,\n\t\t\t...(userHandle ? { userHandle } : {}),\n\t\t},\n\t\ttype: \"public-key\",\n\t};\n}\n\nasync function consumeAuthenticationChallenge(input: {\n\tchallengeHash: Uint8Array;\n\trpId: string;\n\tstores: AthenaAuthStores;\n\tuserId: string;\n}): Promise<void> {\n\tconst store = createPasskeyChallengeStore(input.stores);\n\ttry {\n\t\tawait store.consume({\n\t\t\tchallengeHash: input.challengeHash,\n\t\t\tpurpose: \"authentication\",\n\t\t\trpId: input.rpId,\n\t\t\tuserId: input.userId,\n\t\t});\n\t\treturn;\n\t} catch (error) {\n\t\tif (error instanceof AthenaAuthRuntimeError) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\ttry {\n\t\tawait store.consume({\n\t\t\tchallengeHash: input.challengeHash,\n\t\t\tpurpose: \"authentication\",\n\t\t\trpId: input.rpId,\n\t\t\tuserId: null,\n\t\t});\n\t} catch {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"Passkey authentication challenge is invalid or expired\",\n\t\t);\n\t}\n}\n\nexport async function handleVerifyAuthenticationRoute(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: VerifyAuthenticationContext,\n): Promise<Response | undefined> {\n\tif (path === \"/passkey/verify-authentication\" && method === \"POST\") {\n\t\tconst rp = ctx.relyingParty;\n\t\tif (!rp) {\n\t\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t\t500,\n\t\t\t\t\"Passkey relying party snapshot is not configured\",\n\t\t\t\t{ code: \"ATHENA_RUNTIME_CONFIG_INVALID\" },\n\t\t\t);\n\t\t}\n\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst credential = normalizeWebAuthnResponsePayload(\n\t\t\tasPasskeyRecord(body)?.response ?? body,\n\t\t\t\"passkey authentication response\",\n\t\t);\n\t\tconst authenticationResponse = toAuthenticationResponseJSON(credential);\n\t\tconst { challenge, challengeHash } = await challengeHashFromClientData(\n\t\t\tauthenticationResponse.response.clientDataJSON,\n\t\t);\n\n\t\tlet credentialId: Uint8Array;\n\t\ttry {\n\t\t\tcredentialId = isoBase64URL.toBuffer(authenticationResponse.id);\n\t\t} catch {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Invalid passkey authentication response\",\n\t\t\t);\n\t\t}\n\n\t\tconst repository = createPasskeyRepository(ctx.stores);\n\t\tconst stored = await repository.findByCredentialId(credentialId);\n\t\tif (!stored) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Passkey not found for credential\",\n\t\t\t);\n\t\t}\n\n\t\tconst user = await ctx.stores.getUserById(stored.userId);\n\t\tif (!user) {\n\t\t\tthrow AthenaAuthRuntimeError.notFound(\"User not found\");\n\t\t}\n\n\t\tlet newCounter: number;\n\t\ttry {\n\t\t\tconst verified = await verifyAuthenticationResponse({\n\t\t\t\tcredential: {\n\t\t\t\t\tcounter: Number(stored.counter),\n\t\t\t\t\tid: authenticationResponse.id,\n\t\t\t\t\tpublicKey: new Uint8Array(stored.publicKey),\n\t\t\t\t\ttransports: stored.transports as AuthenticatorTransportFuture[],\n\t\t\t\t},\n\t\t\t\texpectedChallenge: challenge,\n\t\t\t\texpectedOrigin: [...rp.origins],\n\t\t\t\texpectedRPID: rp.id,\n\t\t\t\trequireUserVerification: requireUserVerificationFromPolicy(\n\t\t\t\t\tctx.config.passkey.authentication.userVerification,\n\t\t\t\t),\n\t\t\t\tresponse: authenticationResponse,\n\t\t\t});\n\t\t\tif (verified.verified !== true) {\n\t\t\t\tthrow new Error(\"unverified\");\n\t\t\t}\n\t\t\tnewCounter = verified.authenticationInfo.newCounter;\n\t\t} catch (error) {\n\t\t\tif (error instanceof AthenaAuthRuntimeError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Passkey authentication ceremony is invalid\",\n\t\t\t);\n\t\t}\n\n\t\tconst received = BigInt(newCounter);\n\t\tif (!(stored.counter === 0n && received === 0n) && received <= stored.counter) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Passkey signature counter regression\",\n\t\t\t);\n\t\t}\n\n\t\tconst session = await ctx.mutate({\n\t\t\tcontext: {\n\t\t\t\tactor: { kind: \"user\", userId: stored.userId },\n\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\ttraceId: ctx.traceId,\n\t\t\t},\n\t\t\tevent: \"session.issue\",\n\t\t\texecute: async (scope) => {\n\t\t\t\tawait consumeAuthenticationChallenge({\n\t\t\t\t\tchallengeHash,\n\t\t\t\t\trpId: rp.id,\n\t\t\t\t\tstores: scope.stores,\n\t\t\t\t\tuserId: stored.userId,\n\t\t\t\t});\n\t\t\t\tif (!(stored.counter === 0n && received === 0n)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait createPasskeyRepository(scope.stores).updateCounter({\n\t\t\t\t\t\t\tcredentialId: stored.credentialId,\n\t\t\t\t\t\t\texpected: stored.counter,\n\t\t\t\t\t\t\tnext: received,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (error instanceof AthenaAuthRuntimeError) {\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\t\t\t\"Passkey signature counter regression\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn ctx.issueSession(request, scope.stores, stored.userId);\n\t\t\t},\n\t\t\tinput: { userId: stored.userId },\n\t\t\tresultOf: (issued) => ({ session: sanitizeHookSession(issued) }),\n\t\t});\n\n\t\tconst refreshed = (await ctx.stores.getUserById(stored.userId)) ?? user;\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\tsession: toPublicSession(session),\n\t\t\t\ttoken: session.token,\n\t\t\t\tuser: toPublicUser(refreshed),\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\n\treturn undefined;\n}\n","import { decodeClientDataJSON, isoBase64URL } from \"@simplewebauthn/server/helpers\";\n\nimport { AthenaAuthRuntimeError } from \"../errors.ts\";\n\nexport function asPasskeyRecord(\n\tvalue: unknown,\n): Record<string, unknown> | undefined {\n\tif (value && typeof value === \"object\" && !Array.isArray(value)) {\n\t\treturn value as Record<string, unknown>;\n\t}\n\treturn undefined;\n}\n\nfunction parseJsonValue(value: unknown, label: string): unknown {\n\tif (typeof value !== \"string\") {\n\t\treturn value;\n\t}\n\ttry {\n\t\treturn JSON.parse(value) as unknown;\n\t} catch {\n\t\tthrow AthenaAuthRuntimeError.badRequest(`Invalid ${label}`);\n\t}\n}\n\n/** Rust `normalize_webauthn_response_payload`: string JSON + unwrap nested `response` until `id`. */\nexport function normalizeWebAuthnResponsePayload(\n\traw: unknown,\n\tlabel: string,\n): Record<string, unknown> {\n\tlet payload: unknown = parseJsonValue(raw, label);\n\tfor (let index = 0; index < 3; index++) {\n\t\tconst object = asPasskeyRecord(payload);\n\t\tif (!object) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(`Invalid ${label}`);\n\t\t}\n\t\tif (typeof object.id === \"string\" && object.id.length > 0) {\n\t\t\treturn object;\n\t\t}\n\t\tif (!(\"response\" in object)) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(`Invalid ${label}`);\n\t\t}\n\t\tpayload = parseJsonValue(object.response, label);\n\t}\n\tthrow AthenaAuthRuntimeError.badRequest(`Invalid ${label}`);\n}\n\nfunction toArrayBufferBytes(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n\tconst copy = new Uint8Array(bytes.byteLength);\n\tcopy.set(bytes);\n\treturn copy;\n}\n\nexport async function challengeHashFromClientData(\n\tclientDataJSON: string,\n): Promise<{ challenge: string; challengeHash: Uint8Array }> {\n\tlet challenge: string;\n\ttry {\n\t\tconst clientData = decodeClientDataJSON(clientDataJSON);\n\t\tif (typeof clientData.challenge !== \"string\" || !clientData.challenge) {\n\t\t\tthrow new Error(\"missing challenge\");\n\t\t}\n\t\tchallenge = clientData.challenge;\n\t} catch {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid clientDataJSON\");\n\t}\n\tlet challengeBytes: Uint8Array;\n\ttry {\n\t\tchallengeBytes = isoBase64URL.toBuffer(challenge);\n\t} catch {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid clientDataJSON\");\n\t}\n\treturn {\n\t\tchallenge,\n\t\tchallengeHash: new Uint8Array(\n\t\t\tawait crypto.subtle.digest(\"SHA-256\", toArrayBufferBytes(challengeBytes)),\n\t\t),\n\t};\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\ttype AuthenticatorTransportFuture,\n\ttype RegistrationResponseJSON,\n\ttype VerifiedRegistrationResponse,\n\tverifyRegistrationResponse,\n} from \"@simplewebauthn/server\";\nimport {\n\tdecodeAttestationObject,\n\tdecodeClientDataJSON,\n\tisoBase64URL,\n\tparseAuthenticatorData,\n} from \"@simplewebauthn/server/helpers\";\n\nimport type {\n\tAthenaPasskeyCeremonyContext,\n\tAthenaPasskeyOnboardingResolution,\n\tNormalizedAthenaAuthConfig,\n} from \"../../config.ts\";\nimport { resolveAthenaPasskeyOnboardingUser } from \"../../config.ts\";\nimport type { AuthDomainMutate } from \"../../hooks/execute.ts\";\nimport {\n\tsanitizeHookPasskey,\n\tsanitizeHookSession,\n\tsanitizeHookUser,\n} from \"../../hooks/sanitize.ts\";\nimport { normalizePasskeyAaguid } from \"../../passkey/aaguid.ts\";\nimport { mapPasskeyAuthenticatorMetadata } from \"../../passkey/metadata.ts\";\nimport {\n\tnormalizeCredPropsResidentKey,\n\trequireUserVerificationFromPolicy,\n} from \"../../passkey/policy.ts\";\nimport type {\n\tAthenaPasskeyRelyingParty,\n\tAthenaStoredPasskey,\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\tconfig: NormalizedAthenaAuthConfig;\n\theaders: Headers;\n\thookRequest: (request: Request, path: string) => {\n\t\tipAddress?: string;\n\t\tmethod: string;\n\t\tpath: string;\n\t\tuserAgent?: string;\n\t};\n\tissueSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t\tuserId: string,\n\t) => Promise<AuthSessionRow>;\n\tmutate: AuthDomainMutate;\n\trelyingParty: AthenaPasskeyRelyingParty | undefined;\n\tresolveOnboardingUser?: (\n\t\tcontext: AthenaPasskeyCeremonyContext,\n\t) =>\n\t\t| AthenaPasskeyOnboardingResolution\n\t\t| Promise<AthenaPasskeyOnboardingResolution>;\n\tresolveSession: (\n\t\trequest: Request,\n\t\tstores: AthenaAuthStores,\n\t) => Promise<{\n\t\tsession: AuthSessionRow;\n\t\ttoken: string;\n\t\tuser: AuthUserRow;\n\t} | null>;\n\tstores: AthenaAuthStores;\n\ttraceId: string;\n}\n\nfunction isUniqueViolation(error: unknown): boolean {\n\treturn Boolean(\n\t\terror &&\n\t\t\ttypeof error === \"object\" &&\n\t\t\t\"code\" in error &&\n\t\t\t(error as { code?: string }).code === \"23505\",\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\treturn undefined;\n}\n\nfunction parseJsonValue(value: unknown, label: string): unknown {\n\tif (typeof value !== \"string\") {\n\t\treturn value;\n\t}\n\ttry {\n\t\treturn JSON.parse(value) as unknown;\n\t} catch {\n\t\tthrow AthenaAuthRuntimeError.badRequest(`Invalid ${label}`);\n\t}\n}\n\n/** Rust `normalize_webauthn_response_payload`: string JSON + unwrap nested `response` until `id`. */\nfunction normalizeWebAuthnResponsePayload(\n\traw: unknown,\n): Record<string, unknown> {\n\tlet payload: unknown = parseJsonValue(raw, \"passkey registration response\");\n\tfor (let index = 0; index < 3; index++) {\n\t\tconst object = asRecord(payload);\n\t\tif (!object) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Invalid passkey registration response\",\n\t\t\t);\n\t\t}\n\t\tif (typeof object.id === \"string\" && object.id.length > 0) {\n\t\t\treturn object;\n\t\t}\n\t\tif (!(\"response\" in object)) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Invalid passkey registration response\",\n\t\t\t);\n\t\t}\n\t\tpayload = parseJsonValue(object.response, \"passkey registration response\");\n\t}\n\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\"Invalid passkey registration response\",\n\t);\n}\n\nfunction readClientTransports(\n\tcredential: Record<string, unknown>,\n): string[] | undefined {\n\tconst nested = asRecord(credential.response);\n\tconst raw = Array.isArray(nested?.transports)\n\t\t? nested.transports\n\t\t: Array.isArray(credential.transports)\n\t\t\t? credential.transports\n\t\t\t: undefined;\n\tif (!raw) {\n\t\treturn undefined;\n\t}\n\tconst listed = raw.filter(\n\t\t(entry): entry is string => typeof entry === \"string\" && entry.length > 0,\n\t);\n\treturn listed.length > 0 ? listed : undefined;\n}\n\nfunction toRegistrationResponseJSON(\n\tcredential: Record<string, unknown>,\n): RegistrationResponseJSON {\n\tconst id = typeof credential.id === \"string\" ? credential.id : \"\";\n\tconst rawId = typeof credential.rawId === \"string\" ? credential.rawId : id;\n\tconst nested = asRecord(credential.response);\n\tconst clientDataJSON =\n\t\ttypeof nested?.clientDataJSON === \"string\" ? nested.clientDataJSON : \"\";\n\tconst attestationObject =\n\t\ttypeof nested?.attestationObject === \"string\"\n\t\t\t? nested.attestationObject\n\t\t\t: \"\";\n\tif (!id || !clientDataJSON) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"Invalid passkey registration response\",\n\t\t);\n\t}\n\tif (!attestationObject) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"Invalid passkey registration response\",\n\t\t);\n\t}\n\tconst transports = readClientTransports(credential);\n\treturn {\n\t\tclientExtensionResults: asRecord(credential.clientExtensionResults) ?? {},\n\t\tid,\n\t\trawId,\n\t\tresponse: {\n\t\t\tattestationObject,\n\t\t\tclientDataJSON,\n\t\t\t...(transports\n\t\t\t\t? { transports: [...transports] as AuthenticatorTransportFuture[] }\n\t\t\t\t: {}),\n\t\t},\n\t\ttype: \"public-key\",\n\t};\n}\n\nfunction toArrayBufferBytes(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n\tconst copy = new Uint8Array(bytes.byteLength);\n\tcopy.set(bytes);\n\treturn copy;\n}\n\nasync function challengeHashFromClientData(\n\tclientDataJSON: string,\n): Promise<{ challenge: string; challengeHash: Uint8Array }> {\n\tlet challenge: string;\n\ttry {\n\t\tconst clientData = decodeClientDataJSON(clientDataJSON);\n\t\tif (typeof clientData.challenge !== \"string\" || !clientData.challenge) {\n\t\t\tthrow new Error(\"missing challenge\");\n\t\t}\n\t\tchallenge = clientData.challenge;\n\t} catch {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid clientDataJSON\");\n\t}\n\tlet challengeBytes: Uint8Array;\n\ttry {\n\t\tchallengeBytes = isoBase64URL.toBuffer(challenge);\n\t} catch {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"Invalid clientDataJSON\");\n\t}\n\treturn {\n\t\tchallenge,\n\t\tchallengeHash: new Uint8Array(\n\t\t\tawait crypto.subtle.digest(\"SHA-256\", toArrayBufferBytes(challengeBytes)),\n\t\t),\n\t};\n}\n\nfunction flagsAndAaguidFromVerifiedAttestation(attestationObject: Uint8Array): {\n\taaguid: string | null;\n\tflags: number;\n} {\n\tconst decoded = decodeAttestationObject(\n\t\ttoArrayBufferBytes(attestationObject),\n\t);\n\tconst parsed = parseAuthenticatorData(decoded.get(\"authData\"));\n\tconst aaguidSource =\n\t\t\"aaguid\" in parsed\n\t\t\t? (parsed as { aaguid?: unknown }).aaguid\n\t\t\t: undefined;\n\treturn {\n\t\taaguid: normalizePasskeyAaguid(aaguidSource),\n\t\tflags: parsed.flags.flagsInt,\n\t};\n}\n\nfunction asStringField(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction defaultResolveOnboardingUser(\n\tcontext: AthenaPasskeyCeremonyContext,\n): AthenaPasskeyOnboardingResolution {\n\ttry {\n\t\treturn resolveAthenaPasskeyOnboardingUser(context);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error ? error.message : \"Passkey onboarding failed\";\n\t\tthrow AthenaAuthRuntimeError.badRequest(message);\n\t}\n}\n\nfunction overlayName(body: Record<string, unknown>): string | null {\n\treturn typeof body.name === \"string\" ? body.name : null;\n}\n\nfunction mapRegistrationTransactionError(error: unknown): never {\n\tif (error instanceof AthenaAuthRuntimeError) {\n\t\tthrow error;\n\t}\n\tconst message = error instanceof Error ? error.message : \"\";\n\tif (message.includes(\"already consumed\")) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"Passkey onboarding transaction was already completed\",\n\t\t);\n\t}\n\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\"Passkey registration challenge is invalid or expired\",\n\t);\n}\n\nexport async function handleVerifyRegistrationRoute(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: VerifyRegistrationContext,\n): Promise<Response | undefined> {\n\tif (path === \"/passkey/verify-registration\" && method === \"POST\") {\n\t\tconst rp = ctx.relyingParty;\n\t\tif (!rp) {\n\t\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t\t500,\n\t\t\t\t\"Passkey relying party snapshot is not configured\",\n\t\t\t\t{ code: \"ATHENA_RUNTIME_CONFIG_INVALID\" },\n\t\t\t);\n\t\t}\n\n\t\tconst session = await ctx.resolveSession(request, ctx.stores);\n\t\tif (\n\t\t\t!session &&\n\t\t\t(request.headers.get(\"authorization\") || request.headers.get(\"cookie\"))\n\t\t) {\n\t\t\tthrow AthenaAuthRuntimeError.sessionNotFound();\n\t\t}\n\t\tconst onboarding = !session && ctx.config.passkey.onboardingEnabled;\n\t\tif (!session && !onboarding) {\n\t\t\tthrow AthenaAuthRuntimeError.unauthenticated();\n\t\t}\n\n\t\tconst body = await readJsonBody(\n\t\t\trequest,\n\t\t\tctx.config.security.bodyLimitBytes,\n\t\t);\n\t\tconst credential = normalizeWebAuthnResponsePayload(body.response);\n\t\tconst registrationResponse = toRegistrationResponseJSON(credential);\n\t\tconst { challenge, challengeHash } = await challengeHashFromClientData(\n\t\t\tregistrationResponse.response.clientDataJSON,\n\t\t);\n\n\t\tconst transactions = createPasskeyRegistrationTransactionStore(ctx.stores);\n\t\tif (session) {\n\t\t\ttry {\n\t\t\t\tawait createPasskeyChallengeStore(ctx.stores).consume({\n\t\t\t\t\tchallengeHash,\n\t\t\t\t\tpurpose: \"registration\",\n\t\t\t\t\trpId: rp.id,\n\t\t\t\t\tuserId: session.user.id,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof AthenaAuthRuntimeError) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\t\"Passkey registration challenge is invalid or expired\",\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tawait transactions.findActive({ challengeHash, rpId: rp.id });\n\t\t\t} catch (error) {\n\t\t\t\tmapRegistrationTransactionError(error);\n\t\t\t}\n\t\t}\n\n\t\tconst requireUserVerification = requireUserVerificationFromPolicy(\n\t\t\tsession\n\t\t\t\t? ctx.config.passkey.registration.userVerification\n\t\t\t\t: ctx.config.passkey.registration.userVerification,\n\t\t);\n\t\tlet verified: VerifiedRegistrationResponse;\n\t\ttry {\n\t\t\tverified = await verifyRegistrationResponse({\n\t\t\t\texpectedChallenge: challenge,\n\t\t\t\texpectedOrigin: [...rp.origins],\n\t\t\t\texpectedRPID: rp.id,\n\t\t\t\trequireUserVerification,\n\t\t\t\tresponse: registrationResponse,\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Passkey registration ceremony is invalid\",\n\t\t\t);\n\t\t}\n\t\tif (verified.verified !== true || !verified.registrationInfo) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Passkey registration ceremony is invalid\",\n\t\t\t);\n\t\t}\n\n\t\tconst info = verified.registrationInfo;\n\t\tlet flags: number;\n\t\tlet aaguid: string | null;\n\t\ttry {\n\t\t\tconst parsed = flagsAndAaguidFromVerifiedAttestation(\n\t\t\t\tinfo.attestationObject,\n\t\t\t);\n\t\t\tflags = parsed.flags;\n\t\t\taaguid =\n\t\t\t\tparsed.aaguid ??\n\t\t\t\tnormalizePasskeyAaguid(\n\t\t\t\t\t(info as { aaguid?: unknown }).aaguid,\n\t\t\t\t);\n\t\t} catch {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Passkey registration ceremony is invalid\",\n\t\t\t);\n\t\t}\n\n\t\tconst mapped = mapPasskeyAuthenticatorMetadata({\n\t\t\tflags,\n\t\t\ttransports: readClientTransports(credential),\n\t\t});\n\t\tconst credentialId = isoBase64URL.toBuffer(info.credential.id);\n\t\tconst residentKey = normalizeCredPropsResidentKey(\n\t\t\tregistrationResponse.clientExtensionResults,\n\t\t);\n\t\tconst passkeyCreateBase = {\n\t\t\taaguid,\n\t\t\tbackedUp: mapped.backedUp,\n\t\t\tcounter: BigInt(info.credential.counter),\n\t\t\tcredentialId,\n\t\t\tdeviceType: mapped.deviceType,\n\t\t\tname: overlayName(body),\n\t\t\tpublicKey: new Uint8Array(info.credential.publicKey),\n\t\t\tresidentKey,\n\t\t\ttransports: (parseStoredPasskeyTransports(mapped.transports) ??\n\t\t\t\t[]) as AthenaStoredPasskey[\"transports\"],\n\t\t};\n\n\t\tif (session) {\n\t\t\tlet stored: AthenaStoredPasskey;\n\t\t\ttry {\n\t\t\t\tstored = await ctx.mutate({\n\t\t\t\t\tcontext: {\n\t\t\t\t\t\tactor: { kind: \"user\", userId: session.user.id },\n\t\t\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\t\t\ttraceId: ctx.traceId,\n\t\t\t\t\t},\n\t\t\t\t\tevent: \"passkey.register\",\n\t\t\t\t\texecute: (scope) =>\n\t\t\t\t\t\tcreatePasskeyRepository(scope.stores).create({\n\t\t\t\t\t\t\t...passkeyCreateBase,\n\t\t\t\t\t\t\tuserId: session.user.id,\n\t\t\t\t\t\t}),\n\t\t\t\t\tinput: { userId: session.user.id },\n\t\t\t\t\tresultOf: (row) => ({\n\t\t\t\t\t\tpasskey: sanitizeHookPasskey({\n\t\t\t\t\t\t\tid: row.id,\n\t\t\t\t\t\t\tname: row.name ?? overlayName(body),\n\t\t\t\t\t\t\tuserId: row.userId,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (isUniqueViolation(error)) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\t\t\"Passkey credential already registered\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\ttoPasskeyView(stored, mapped.transports),\n\t\t\t\tctx.headers,\n\t\t\t);\n\t\t}\n\n\t\tconst pending = await transactions.findActive({\n\t\t\tchallengeHash,\n\t\t\trpId: rp.id,\n\t\t});\n\t\tconst mergedContext = {\n\t\t\t...(asRecord(pending.context) ?? {}),\n\t\t\t...(asStringField(body.email) ? { email: asStringField(body.email) } : {}),\n\t\t\t...(asStringField(body.name) ? { name: asStringField(body.name) } : {}),\n\t\t};\n\t\tlet resolution: AthenaPasskeyOnboardingResolution;\n\t\ttry {\n\t\t\tresolution = ctx.resolveOnboardingUser\n\t\t\t\t? await ctx.resolveOnboardingUser(mergedContext)\n\t\t\t\t: defaultResolveOnboardingUser(mergedContext);\n\t\t} catch (error) {\n\t\t\tif (error instanceof AthenaAuthRuntimeError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\"Passkey onboarding user resolution failed\",\n\t\t\t);\n\t\t}\n\n\t\ttype OnboardingResult = {\n\t\t\tsession?: AuthSessionRow;\n\t\t\tstored: AthenaStoredPasskey;\n\t\t\tuser: AuthUserRow;\n\t\t};\n\t\tlet completed: OnboardingResult;\n\t\ttry {\n\t\t\tcompleted = await ctx.mutate({\n\t\t\t\tcontext: {\n\t\t\t\t\tactor: { kind: \"user\" },\n\t\t\t\t\trequest: ctx.hookRequest(request, path),\n\t\t\t\t\ttraceId: ctx.traceId,\n\t\t\t\t},\n\t\t\t\tevent: \"passkey.register\",\n\t\t\t\texecute: async (scope) => {\n\t\t\t\t\tawait createPasskeyRegistrationTransactionStore(\n\t\t\t\t\t\tscope.stores,\n\t\t\t\t\t).consume({ challengeHash, rpId: rp.id });\n\t\t\t\t\tlet user: AuthUserRow | undefined;\n\t\t\t\t\tif (\"existingUserId\" in resolution) {\n\t\t\t\t\t\tuser = await scope.stores.getUserById(resolution.existingUserId);\n\t\t\t\t\t\tif (!user) {\n\t\t\t\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\t\t\t\t\"Passkey onboarding user was not found\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (await scope.stores.getUserByEmail(resolution.create.email)) {\n\t\t\t\t\t\t\tthrow AthenaAuthRuntimeError.conflict(\n\t\t\t\t\t\t\t\t\"A user with this email already exists\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tuser = await scope.stores.createUser({\n\t\t\t\t\t\t\temail: resolution.create.email,\n\t\t\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\t\t\tname:\n\t\t\t\t\t\t\t\tresolution.create.name ??\n\t\t\t\t\t\t\t\tresolution.create.email.split(\"@\")[0] ??\n\t\t\t\t\t\t\t\tresolution.create.email,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (!user) {\n\t\t\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\t\t\t\"Passkey onboarding user was not found\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst stored = await createPasskeyRepository(scope.stores).create({\n\t\t\t\t\t\t...passkeyCreateBase,\n\t\t\t\t\t\tuserId: user.id,\n\t\t\t\t\t});\n\t\t\t\t\tif (!ctx.config.passkey.onboardingCreateSession) {\n\t\t\t\t\t\treturn { stored, user };\n\t\t\t\t\t}\n\t\t\t\t\tconst issued = await ctx.issueSession(request, scope.stores, user.id);\n\t\t\t\t\treturn { session: issued, stored, user };\n\t\t\t\t},\n\t\t\t\tinput: {\n\t\t\t\t\tuserId:\n\t\t\t\t\t\t\"existingUserId\" in resolution\n\t\t\t\t\t\t\t? resolution.existingUserId\n\t\t\t\t\t\t\t: resolution.create.email,\n\t\t\t\t},\n\t\t\t\tresultOf: ({ stored }) => ({\n\t\t\t\t\tpasskey: sanitizeHookPasskey({\n\t\t\t\t\t\tid: stored.id,\n\t\t\t\t\t\tname: stored.name ?? overlayName(body),\n\t\t\t\t\t\tuserId: stored.userId,\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t\tsecondaryEvents: ({ session, user }) => {\n\t\t\t\t\tconst extras = [];\n\t\t\t\t\tif (\"create\" in resolution) {\n\t\t\t\t\t\textras.push({\n\t\t\t\t\t\t\tevent: \"user.create\" as const,\n\t\t\t\t\t\t\tinput: {\n\t\t\t\t\t\t\t\temail: user.email ?? resolution.create.email,\n\t\t\t\t\t\t\t\tname: user.name ?? resolution.create.name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tresult: { user: sanitizeHookUser(user) },\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (session) {\n\t\t\t\t\t\textras.push({\n\t\t\t\t\t\t\tevent: \"session.issue\" as const,\n\t\t\t\t\t\t\tinput: { userId: session.user_id },\n\t\t\t\t\t\t\tresult: { session: sanitizeHookSession(session) },\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn extras;\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (isUniqueViolation(error)) {\n\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\t\t\"Passkey credential already registered\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof AthenaAuthRuntimeError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : \"\";\n\t\t\tif (\n\t\t\t\tmessage.includes(\"already consumed\") ||\n\t\t\t\tmessage.includes(\"expired\") ||\n\t\t\t\tmessage.includes(\"not found\")\n\t\t\t) {\n\t\t\t\tmapRegistrationTransactionError(error);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (!completed.session) {\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{\n\t\t\t\t\tpasskey: toPasskeyView(completed.stored, mapped.transports),\n\t\t\t\t\tsession: null,\n\t\t\t\t\ttoken: null,\n\t\t\t\t\tuser: toPublicUser(completed.user),\n\t\t\t\t},\n\t\t\t\tctx.headers,\n\t\t\t);\n\t\t}\n\t\treturn jsonResponse(\n\t\t\t200,\n\t\t\t{\n\t\t\t\tpasskey: toPasskeyView(completed.stored, mapped.transports),\n\t\t\t\tsession: toPublicSession(completed.session),\n\t\t\t\ttoken: completed.session.token,\n\t\t\t\tuser: toPublicUser(completed.user),\n\t\t\t},\n\t\t\tctx.headers,\n\t\t);\n\t}\n\treturn undefined;\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 =\n\t/^[\\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\treturn value.toString(16).padStart(2, \"0\");\n}\n\nfunction uuidFrom16Bytes(bytes: Uint8Array): string {\n\tconst hex = Array.from(bytes, toHexByte).join(\"\");\n\treturn `${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\treturn `${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\tif (value == null) {\n\t\treturn null;\n\t}\n\tif (value instanceof Uint8Array) {\n\t\tif (value.byteLength !== 16) {\n\t\t\treturn null;\n\t\t}\n\t\tconst uuid = uuidFrom16Bytes(value);\n\t\treturn uuid === UNSPECIFIED ? null : uuid;\n\t}\n\tif (typeof value !== \"string\") {\n\t\treturn null;\n\t}\n\tconst trimmed = value.trim().toLowerCase();\n\tif (!trimmed) {\n\t\treturn null;\n\t}\n\tif (UUID_RE.test(trimmed)) {\n\t\treturn trimmed === UNSPECIFIED ? null : trimmed;\n\t}\n\tconst hex = trimmed.replaceAll(\"-\", \"\");\n\tif (!HEX_32_RE.test(hex)) {\n\t\treturn null;\n\t}\n\tconst uuid = uuidFromHex(hex);\n\treturn uuid === UNSPECIFIED ? null : uuid;\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\treadonly code: string;\n\n\tconstructor(code: string, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"AthenaSocialServerError\";\n\t\tthis.code = code;\n\t}\n}\n\nexport class AthenaSocialServerNotWiredError extends AthenaSocialServerError {\n\tconstructor() {\n\t\tsuper(\n\t\t\t\"ATHENA_AUTH_SOCIAL_SERVER_NOT_WIRED\",\n\t\t\t\"embedded social OAuth server engine is not wired for HTTP\",\n\t\t);\n\t}\n}\n\nexport class AthenaSocialOAuthProviderMixupError extends AthenaSocialServerError {\n\tconstructor() {\n\t\tsuper(\n\t\t\t\"ATHENA_AUTH_OAUTH_PROVIDER_MIXUP\",\n\t\t\t\"OAuth provider mix-up: callback provider does not match the transaction\",\n\t\t);\n\t}\n}\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\treturn levels.indexOf(level) >= levels.indexOf(current);\n}\n\nfunction resolveLogLevel(): LogLevel {\n\ttry {\n\t\tconst env = (\n\t\t\tglobalThis as { process?: { env?: { ATHENA_AUTH_LOG_LEVEL?: string } } }\n\t\t).process?.env?.ATHENA_AUTH_LOG_LEVEL;\n\t\tif (\n\t\t\tenv === \"debug\" ||\n\t\t\tenv === \"info\" ||\n\t\t\tenv === \"warn\" ||\n\t\t\tenv === \"error\" ||\n\t\t\tenv === \"success\"\n\t\t) {\n\t\t\treturn env;\n\t\t}\n\t} catch {\n\t\t// ignore non-Node environments\n\t}\n\treturn \"warn\";\n}\n\nfunction log(\n\tlevel: Exclude<LogLevel, \"success\">,\n\tmessage: string,\n\t...args: unknown[]\n): void {\n\tconst current = resolveLogLevel();\n\tif (!shouldPublishLog(current, level === \"info\" ? \"info\" : level)) {\n\t\treturn;\n\t}\n\n\tconst fn =\n\t\tlevel === \"error\"\n\t\t\t? console.error\n\t\t\t: level === \"warn\"\n\t\t\t\t? console.warn\n\t\t\t\t: console.log;\n\tfn(`[athena-auth] ${message}`, ...args);\n}\n\nexport const logger = {\n\tdebug: (message: string, ...args: unknown[]) =>\n\t\tlog(\"debug\", message, ...args),\n\terror: (message: string, ...args: unknown[]) =>\n\t\tlog(\"error\", message, ...args),\n\tinfo: (message: string, ...args: unknown[]) => log(\"info\", message, ...args),\n\tsuccess: (message: string, ...args: unknown[]) =>\n\t\tlog(\"info\", message, ...args),\n\twarn: (message: string, ...args: unknown[]) => log(\"warn\", message, ...args),\n};\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\tstatus: string | number;\n\tstatusCode: number;\n\tbody: Record<string, unknown> | undefined;\n\theaders: Headers | undefined;\n\n\tconstructor(\n\t\tstatus: string | number,\n\t\tbody?: { message?: string; code?: string; [key: string]: unknown } | string,\n\t\toptions?: { cause?: unknown },\n\t) {\n\t\tconst message =\n\t\t\ttypeof body === \"string\"\n\t\t\t\t? body\n\t\t\t\t: (body?.message ??\n\t\t\t\t\t(typeof status === \"string\" ? status : `HTTP ${status}`));\n\t\tsuper(message, options);\n\t\tthis.name = \"APIError\";\n\t\tthis.status = status;\n\t\tthis.statusCode = typeof status === \"number\" ? status : 500;\n\t\tthis.body = typeof body === \"string\" ? { message: body } : body;\n\t\tthis.headers = undefined;\n\t}\n\n\tstatic fromStatus(\n\t\tstatus: string | number,\n\t\tbody?: { message?: string; code?: string; [key: string]: unknown },\n\t): APIError {\n\t\treturn new APIError(status, body);\n\t}\n\n\tstatic from(\n\t\tstatus: string | number,\n\t\terror: { code: string; message: string },\n\t): APIError {\n\t\treturn new APIError(status, {\n\t\t\tcode: error.code,\n\t\t\tmessage: error.message,\n\t\t});\n\t}\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\tconstructor(message: string, options?: { cause?: unknown | undefined }) {\n\t\tsuper(message, options);\n\t\tthis.name = \"AthenaAuthError\";\n\t\tthis.message = message;\n\t\tthis.stack = \"\";\n\t}\n}\n\n/** @deprecated Use {@link AthenaAuthError}. */\nexport const BetterAuthError = AthenaAuthError;\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\tbody: AthenaFetchOption[\"body\"],\n): string | URLSearchParams | FormData | Blob | null | undefined {\n\tif (body === null) {\n\t\treturn body as null | undefined;\n\t}\n\tif (typeof body === \"string\") {\n\t\treturn body;\n\t}\n\tif (body instanceof URLSearchParams) {\n\t\treturn body;\n\t}\n\tif (body instanceof FormData) {\n\t\treturn body;\n\t}\n\tif (body instanceof Blob) {\n\t\treturn body;\n\t}\n\tif (typeof body === \"object\") {\n\t\treturn JSON.stringify(body);\n\t}\n\treturn String(body);\n}\n\n/**\n * Append query params to a URL string.\n */\nexport function applyFetchQuery(\n\turl: string,\n\tquery?: AthenaFetchOption[\"query\"],\n): string {\n\tif (!query) {\n\t\treturn url;\n\t}\n\tconst u = new URL(url);\n\tfor (const [key, value] of Object.entries(query)) {\n\t\tif (value === undefined || value === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tu.searchParams.set(key, String(value));\n\t}\n\treturn u.toString();\n}\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\turl: string,\n\toptions: AthenaFetchOption = {},\n): Promise<AthenaFetchResult<T>> {\n\tconst headers = new Headers(options.headers);\n\tif (options.auth?.token) {\n\t\tconst type = options.auth.type ?? \"Bearer\";\n\t\theaders.set(\"authorization\", `${type} ${options.auth.token}`);\n\t}\n\n\tconst target = applyFetchQuery(url, options.query);\n\tconst body = normalizeFetchBody(options.body);\n\n\tif (\n\t\tbody !== null &&\n\t\ttypeof body === \"string\" &&\n\t\t!headers.has(\"content-type\") &&\n\t\tbody.startsWith(\"{\")\n\t) {\n\t\theaders.set(\"content-type\", \"application/json\");\n\t}\n\n\ttry {\n\t\tconst response = await fetch(target, {\n\t\t\tbody: body ?? undefined,\n\t\t\theaders,\n\t\t\tmethod: options.method ?? \"GET\",\n\t\t\tredirect: options.redirect ?? \"follow\",\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\tawait options.onResponse?.({ response });\n\n\t\tif (!response.ok) {\n\t\t\tlet message = response.statusText || `HTTP ${response.status}`;\n\t\t\ttry {\n\t\t\t\tconst errBody = (await response.clone().json()) as {\n\t\t\t\t\tmessage?: string;\n\t\t\t\t\terror?: string;\n\t\t\t\t\terror_description?: string;\n\t\t\t\t};\n\t\t\t\tmessage =\n\t\t\t\t\terrBody.message ||\n\t\t\t\t\terrBody.error_description ||\n\t\t\t\t\terrBody.error ||\n\t\t\t\t\tmessage;\n\t\t\t} catch {\n\t\t\t\ttry {\n\t\t\t\t\tmessage = (await response.clone().text()) || message;\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore parse failures\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst error = {\n\t\t\t\tmessage,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t};\n\t\t\tawait options.onError?.({ error, response });\n\t\t\treturn { data: null, error };\n\t\t}\n\n\t\tconst contentType = response.headers.get(\"content-type\") ?? \"\";\n\t\tif (\n\t\t\tcontentType.includes(\"application/json\") ||\n\t\t\tcontentType.includes(\"+json\")\n\t\t) {\n\t\t\tconst data = (await response.json()) as T;\n\t\t\treturn { data, error: null };\n\t\t}\n\n\t\tconst text = await response.text();\n\t\tif (!text) {\n\t\t\treturn { data: {} as T, error: null };\n\t\t}\n\t\ttry {\n\t\t\treturn { data: JSON.parse(text) as T, error: null };\n\t\t} catch {\n\t\t\treturn { data: text as unknown as T, error: null };\n\t\t}\n\t} catch (cause) {\n\t\tconst error = {\n\t\t\tmessage: cause instanceof Error ? cause.message : String(cause),\n\t\t\tstatus: 0,\n\t\t\tstatusText: \"NetworkError\",\n\t\t};\n\t\t// Fetch Response status must be in 200–599; do not use status 0 (throws RangeError).\n\t\t// Use 502 as a stable stand-in for transport failures so onError hooks stay safe.\n\t\tawait options.onError?.({\n\t\t\terror: cause,\n\t\t\tresponse: new Response(null, {\n\t\t\t\tstatus: 502,\n\t\t\t\tstatusText: \"Network Error\",\n\t\t\t}),\n\t\t});\n\t\treturn { data: null, error };\n\t}\n}\n\n/** Alias kept so mechanical renames from better-fetch stay readable. */\nexport const betterFetch = athenaFetch;\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/**\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","﻿/**\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\tconst value = Array.isArray(clientId) ? clientId[0] : clientId;\n\treturn typeof value === \"string\" && value.length > 0 ? value : undefined;\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","﻿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 type { ProviderOptions } from \"./index.ts\";\nimport { generateCodeChallenge } from \"./utils.ts\";\n\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\tid: _id,\n\toptions,\n\tauthorizationEndpoint,\n\tstate,\n\tcodeVerifier,\n\tscopes,\n\tclaims,\n\tredirectURI,\n\tduration,\n\tprompt,\n\taccessType,\n\tresponseType,\n\tdisplay,\n\tloginHint,\n\thd,\n\tresponseMode,\n\tadditionalParams,\n\tscopeJoiner,\n}: {\n\tid: string;\n\toptions: AwaitableFunction<ProviderOptions>;\n\tredirectURI: string;\n\tauthorizationEndpoint: string;\n\tstate: string;\n\tcodeVerifier?: string | undefined;\n\tscopes?: string[] | undefined;\n\tclaims?: string[] | undefined;\n\tduration?: string | undefined;\n\tprompt?: string | undefined;\n\taccessType?: string | undefined;\n\tresponseType?: string | undefined;\n\tdisplay?: string | undefined;\n\tloginHint?: string | undefined;\n\thd?: string | undefined;\n\tresponseMode?: string | undefined;\n\tadditionalParams?: Record<string, string> | undefined;\n\tscopeJoiner?: string | undefined;\n}) {\n\tvoid _id;\n\toptions = typeof options === \"function\" ? await options() : options;\n\tconst url = new URL(options.authorizationEndpoint || authorizationEndpoint);\n\turl.searchParams.set(\"response_type\", responseType || \"code\");\n\tconst primaryClientId = Array.isArray(options.clientId)\n\t\t? options.clientId[0]\n\t\t: options.clientId;\n\turl.searchParams.set(\"client_id\", primaryClientId);\n\turl.searchParams.set(\"state\", state);\n\tif (scopes) {\n\t\turl.searchParams.set(\"scope\", scopes.join(scopeJoiner || \" \"));\n\t}\n\turl.searchParams.set(\"redirect_uri\", options.redirectURI || redirectURI);\n\tif (duration) {\n\t\turl.searchParams.set(\"duration\", duration);\n\t}\n\tif (display) {\n\t\turl.searchParams.set(\"display\", display);\n\t}\n\tif (loginHint) {\n\t\turl.searchParams.set(\"login_hint\", loginHint);\n\t}\n\tif (prompt) {\n\t\turl.searchParams.set(\"prompt\", prompt);\n\t}\n\tif (hd) {\n\t\turl.searchParams.set(\"hd\", hd);\n\t}\n\tif (accessType) {\n\t\turl.searchParams.set(\"access_type\", accessType);\n\t}\n\tif (responseMode) {\n\t\turl.searchParams.set(\"response_mode\", responseMode);\n\t}\n\tif (codeVerifier) {\n\t\tconst codeChallenge = await generateCodeChallenge(codeVerifier);\n\t\turl.searchParams.set(\"code_challenge_method\", \"S256\");\n\t\turl.searchParams.set(\"code_challenge\", codeChallenge);\n\t}\n\tif (claims) {\n\t\tconst claimsObj = claims.reduce(\n\t\t\t(acc, claim) => {\n\t\t\t\tacc[claim] = null;\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<string, null>,\n\t\t);\n\t\turl.searchParams.set(\n\t\t\t\"claims\",\n\t\t\tJSON.stringify({\n\t\t\t\tid_token: { email: null, email_verified: null, ...claimsObj },\n\t\t\t}),\n\t\t);\n\t}\n\tif (additionalParams) {\n\t\tObject.entries(additionalParams).forEach(([key, value]) => {\n\t\t\turl.searchParams.set(key, value);\n\t\t});\n\t}\n\treturn url;\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/**\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 { 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 { 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 { 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","/**\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 { 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 { 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. Defaults to `{issuer}/oauth2/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 this issuer when the explicit endpoint overrides are omitted.\n   */\n  issuer?: string | undefined;\n  /**\n   * Override the token endpoint. Defaults to `{issuer}/oauth2/token`.\n   */\n  tokenEndpoint?: string | undefined;\n  /**\n   * Override the userinfo endpoint. Defaults to `{issuer}/oauth2/userinfo`.\n   */\n  userInfoEndpoint?: string | undefined;\n}\n\nfunction resolveIssuer(options: AthenaOptions): string {\n  if (options.issuer) {\n    return trimTrailingSlash(options.issuer);\n  }\n  // Allow deriving issuer from an explicit authorization endpoint host.\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 * Athena Auth will expose an Athena identity provider; this client module is\n * ready so apps can configure `socialProviders.athena` the same way as Google,\n * GitHub, etc. Defaults endpoints to `{issuer}/oauth2/authorize|token|userinfo`.\n *\n * @param options - Client credentials and issuer (or full endpoint overrides)\n */\nexport const athena = (options: AthenaOptions) => {\n  const issuer = () => resolveIssuer(options);\n  const authorizationEndpoint = () =>\n    options.authorizationEndpoint || `${issuer()}/oauth2/authorize`;\n  const tokenEndpoint = () =>\n    options.tokenEndpoint || `${issuer()}/oauth2/token`;\n  const userInfoEndpoint = () =>\n    options.userInfoEndpoint || `${issuer()}/oauth2/userinfo`;\n\n  return {\n    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 _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: 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 { data: profile, error } = await betterFetch<AthenaProfile>(\n        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          refreshAccessToken({\n            options: {\n              clientId: options.clientId,\n              clientKey: options.clientKey,\n              clientSecret: options.clientSecret,\n            },\n            refreshToken,\n            tokenEndpoint: tokenEndpoint(),\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      validateAuthorizationCode({\n        code,\n        codeVerifier,\n        options,\n        redirectURI,\n        tokenEndpoint: tokenEndpoint(),\n      }),\n  } satisfies OAuthProvider<AthenaProfile, AthenaOptions>;\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 { 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 { 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 { 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 { 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 { 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 { 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 { 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","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","/**\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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 * 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 type { NormalizedSocialAuthConfig } from \"./social-config.ts\";\nimport type { OAuthProvider } from \"../../oauth2/types.ts\";\nimport { socialProviders } from \"../../social-providers/registry.ts\";\nimport { AthenaSocialServerError } from \"./errors.ts\";\n\nexport function resolveSocialProvider(\n\tconfig: NormalizedSocialAuthConfig,\n\tproviderId: string,\n): OAuthProvider {\n\tconst options = config.providers[providerId];\n\tif (!options?.clientId?.trim()) {\n\t\tthrow new AthenaSocialServerError(\n\t\t\t\"ATHENA_AUTH_OAUTH_PROVIDER_UNKNOWN\",\n\t\t\t`social provider ${providerId} is not configured`,\n\t\t);\n\t}\n\tif (!options.clientSecret?.trim()) {\n\t\tthrow new AthenaSocialServerError(\n\t\t\t\"ATHENA_AUTH_OAUTH_CLIENT_SECRET_REQUIRED\",\n\t\t\t`social provider ${providerId} requires a client secret`,\n\t\t);\n\t}\n\tconst factory =\n\t\tsocialProviders[providerId as keyof typeof socialProviders];\n\tif (typeof factory !== \"function\") {\n\t\tthrow new AthenaSocialServerError(\n\t\t\t\"ATHENA_AUTH_OAUTH_PROVIDER_UNKNOWN\",\n\t\t\t`social provider ${providerId} is not in the registry`,\n\t\t);\n\t}\n\treturn factory({\n\t\t...options,\n\t\tclientId: options.clientId,\n\t\tclientSecret: options.clientSecret,\n\t} as never);\n}\n","import { createAuthorizationURL } from \"../../oauth2/index.ts\";\nimport { AthenaSocialServerError, AthenaSocialServerNotWiredError } from \"./errors.ts\";\n\nexport async function buildSocialAuthorizationURL(\n\tinput: Parameters<typeof createAuthorizationURL>[0],\n) {\n\treturn createAuthorizationURL(input);\n}\n\nexport interface SocialRedirectPort {\n\tissue(input: { url: string }): Promise<never>;\n}\n\n/** Redirect issuance after authorize is a follow-on HTTP slice. */\nexport function createSocialRedirectPort(): SocialRedirectPort {\n\treturn {\n\t\tissue() {\n\t\t\treturn Promise.reject(new AthenaSocialServerNotWiredError());\n\t\t},\n\t};\n}\n\nconst TOKEN_QUERY_KEYS = [\n\t\"access_token\",\n\t\"id_token\",\n\t\"refresh_token\",\n\t\"session_token\",\n\t\"token\",\n] as const;\n\nfunction socialRedirectError(code: string, message: string): AthenaSocialServerError {\n\treturn new AthenaSocialServerError(code, message);\n}\n\nfunction stripDefaultPort(url: URL): string {\n\tconst protocol = url.protocol.toLowerCase();\n\tconst host = url.hostname.toLowerCase();\n\tconst port =\n\t\turl.port === \"\" ||\n\t\t(protocol === \"https:\" && url.port === \"443\") ||\n\t\t(protocol === \"http:\" && url.port === \"80\")\n\t\t\t? \"\"\n\t\t\t: `:${url.port}`;\n\treturn `${protocol}//${host}${port}`;\n}\n\nfunction parseHttpUrl(value: string): URL {\n\tif (value.startsWith(\"//\") || value.includes(\":///\") ) {\n\t\tthrow socialRedirectError(\n\t\t\t\"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n\t\t\t\"protocol-relative redirects are not trusted\",\n\t\t);\n\t}\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(value);\n\t} catch {\n\t\tthrow socialRedirectError(\n\t\t\t\"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n\t\t\t\"redirect URL is invalid\",\n\t\t);\n\t}\n\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\tthrow socialRedirectError(\n\t\t\t\"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n\t\t\t\"redirect URL must be http or https\",\n\t\t);\n\t}\n\tif (parsed.username !== \"\" || parsed.password !== \"\") {\n\t\tthrow socialRedirectError(\n\t\t\t\"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n\t\t\t\"redirect URL must not contain credentials\",\n\t\t);\n\t}\n\treturn parsed;\n}\n\nfunction originAllowed(\n\tcandidate: URL,\n\ttrustedOrigins: readonly string[],\n): boolean {\n\tconst candidateOrigin = stripDefaultPort(candidate);\n\tfor (const origin of trustedOrigins) {\n\t\ttry {\n\t\t\tif (stripDefaultPort(new URL(origin)) === candidateOrigin) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction stripTokenQuery(url: URL): URL {\n\tfor (const key of TOKEN_QUERY_KEYS) {\n\t\turl.searchParams.delete(key);\n\t}\n\treturn url;\n}\n\nexport function resolveSocialCallbackUri(input: {\n\tbasePath?: string;\n\tbaseURL: string;\n\tprovider: string;\n}): string {\n\tconst base = String(input.baseURL ?? \"\").replace(/\\/+$/, \"\");\n\tconst path = String(input.basePath ?? \"/api/auth\").replace(/\\/+$/, \"\") ||\n\t\t\"/api/auth\";\n\tconst provider = encodeURIComponent(String(input.provider ?? \"\").trim());\n\treturn `${base}${path}/callback/${provider}`;\n}\n\nexport function validateSocialCallbackUri(\n\turl: string,\n\toptions: { production: boolean; trustedOrigins: readonly string[] },\n): string {\n\tconst parsed = stripTokenQuery(parseHttpUrl(url));\n\tif (!parsed.pathname.includes(\"/callback/\")) {\n\t\tthrow socialRedirectError(\n\t\t\t\"ATHENA_AUTH_CALLBACK_URL_INVALID\",\n\t\t\t\"callback URL path must include /callback/{provider}\",\n\t\t);\n\t}\n\tif (\n\t\toptions.production &&\n\t\toptions.trustedOrigins.length === 0\n\t) {\n\t\tthrow socialRedirectError(\n\t\t\t\"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n\t\t\t\"production callback URL requires trusted origins\",\n\t\t);\n\t}\n\tif (\n\t\toptions.trustedOrigins.length > 0 &&\n\t\t!originAllowed(parsed, options.trustedOrigins)\n\t) {\n\t\tthrow socialRedirectError(\n\t\t\t\"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n\t\t\t\"callback URL origin is not trusted\",\n\t\t);\n\t}\n\treturn parsed.toString();\n}\n\nexport function validatePostAuthRedirect(\n\turl: string,\n\toptions: { production: boolean; trustedOrigins: readonly string[] },\n): string {\n\tconst parsed = stripTokenQuery(parseHttpUrl(url));\n\tif (options.production && options.trustedOrigins.length === 0) {\n\t\tthrow socialRedirectError(\n\t\t\t\"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n\t\t\t\"production post-auth redirect requires trusted origins\",\n\t\t);\n\t}\n\tif (\n\t\toptions.trustedOrigins.length > 0 &&\n\t\t!originAllowed(parsed, options.trustedOrigins)\n\t) {\n\t\tthrow socialRedirectError(\n\t\t\t\"ATHENA_AUTH_REDIRECT_UNTRUSTED\",\n\t\t\t\"post-auth redirect origin is not trusted\",\n\t\t);\n\t}\n\treturn parsed.toString();\n}\n","import type { OAuthTransactionIntent } from \"./types.ts\";\n\nexport type { OAuthTransactionIntent };\n\nexport interface OAuthTransactionRecord {\n\tcodeChallengeMethod: \"S256\";\n\tcreatedAt: Date;\n\texpiresAt: Date;\n\tid: string;\n\tintent: OAuthTransactionIntent;\n\tnonceHash: string;\n\tpkceVerifierCiphertext: string;\n\tproviderId: string;\n\tredirectUri: string;\n\tstateHash: string;\n\tuserId: string | null;\n}\n\nexport interface OAuthTransactionStore {\n\tconsume(stateHash: string): Promise<OAuthTransactionRecord | null>;\n\tcreate(row: OAuthTransactionRecord): Promise<void>;\n\texpire(now?: Date): Promise<number>;\n}\n\nexport async function sha256Hex(value: string): Promise<string> {\n\tconst digest = await crypto.subtle.digest(\n\t\t\"SHA-256\",\n\t\tnew TextEncoder().encode(value),\n\t);\n\treturn Buffer.from(digest).toString(\"hex\");\n}\n","const TEXT_ENCODER = new TextEncoder();\n\nexport interface PkceEnvelope {\n\tpostAuthRedirect?: string;\n\tverifier: string;\n}\n\nasync function aesGcmKey(secret: string, usage: KeyUsage): Promise<CryptoKey> {\n\tconst material = await crypto.subtle.digest(\n\t\t\"SHA-256\",\n\t\tTEXT_ENCODER.encode(secret),\n\t);\n\treturn crypto.subtle.importKey(\"raw\", material, \"AES-GCM\", false, [usage]);\n}\n\nfunction parsePkceEnvelope(plain: string): PkceEnvelope {\n\ttry {\n\t\tconst parsed = JSON.parse(plain) as { r?: unknown; v?: unknown };\n\t\tif (typeof parsed.v === \"string\" && parsed.v.length > 0) {\n\t\t\treturn {\n\t\t\t\tpostAuthRedirect:\n\t\t\t\t\ttypeof parsed.r === \"string\" && parsed.r.length > 0\n\t\t\t\t\t\t? parsed.r\n\t\t\t\t\t\t: undefined,\n\t\t\t\tverifier: parsed.v,\n\t\t\t};\n\t\t}\n\t} catch {\n\t\t// pre-envelope ciphertexts are the raw PKCE verifier\n\t}\n\treturn { verifier: plain };\n}\n\n/** AES-GCM seal of the PKCE verifier for athena.oauth_transactions. */\nexport async function encryptPkceVerifier(\n\tverifier: string,\n\tsecret: string,\n\tpostAuthRedirect?: string,\n): Promise<string> {\n\tconst key = await aesGcmKey(secret, \"encrypt\");\n\tconst iv = crypto.getRandomValues(new Uint8Array(12));\n\tconst payload = JSON.stringify({\n\t\tr: postAuthRedirect,\n\t\tv: verifier,\n\t});\n\tconst cipher = await crypto.subtle.encrypt(\n\t\t{ name: \"AES-GCM\", iv },\n\t\tkey,\n\t\tTEXT_ENCODER.encode(payload),\n\t);\n\tconst packed = new Uint8Array(iv.byteLength + cipher.byteLength);\n\tpacked.set(iv);\n\tpacked.set(new Uint8Array(cipher), iv.byteLength);\n\treturn Buffer.from(packed).toString(\"base64url\");\n}\n\nexport async function decryptPkcePlaintext(\n\tciphertext: string,\n\tsecret: string,\n): Promise<string> {\n\tconst packed = Buffer.from(ciphertext, \"base64url\");\n\tconst iv = packed.subarray(0, 12);\n\tconst data = packed.subarray(12);\n\tconst key = await aesGcmKey(secret, \"decrypt\");\n\tconst plain = await crypto.subtle.decrypt(\n\t\t{ name: \"AES-GCM\", iv },\n\t\tkey,\n\t\tdata,\n\t);\n\treturn new TextDecoder().decode(plain);\n}\n\nexport async function openPkceEnvelope(\n\tciphertext: string,\n\tsecret: string,\n): Promise<PkceEnvelope> {\n\treturn parsePkceEnvelope(await decryptPkcePlaintext(ciphertext, secret));\n}\n\nexport async function decryptPkceVerifier(\n\tciphertext: string,\n\tsecret: string,\n): Promise<string> {\n\treturn (await openPkceEnvelope(ciphertext, secret)).verifier;\n}\n","import {\n\tsanitizeHookAccount,\n\tsanitizeHookSession,\n\tsanitizeHookUser,\n} from \"../../hooks/sanitize.ts\";\nimport type { OAuth2Tokens } from \"../../oauth2/types.ts\";\nimport {\n\tAthenaSocialOAuthProviderMixupError,\n\tAthenaSocialServerError,\n} from \"../../social/server/errors.ts\";\nimport { resolveSocialProvider } from \"../../social/server/provider-registry.ts\";\nimport {\n\tresolveSocialCallbackUri,\n\tvalidatePostAuthRedirect,\n} from \"../../social/server/redirect.ts\";\nimport { sha256Hex } from \"../../social/server/transaction-store.ts\";\nimport type { OAuthTransactionRecord } from \"../../social/server/transaction-store.ts\";\nimport { isUserEffectivelyBanned } from \"../admin-contract.ts\";\nimport { createPasskeyRepository } from \"../passkey/repository.ts\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"../errors.ts\";\nimport type { AuthAccountRow, AuthUserRow } from \"../models.ts\";\nimport type { AuthProcedureContext } from \"../credential-password-routes.ts\";\nimport { asStringField, readJsonBody, requireStringField } from \"../security.ts\";\nimport { openPkceEnvelope } from \"./pkce-encryption.ts\";\nimport type { AthenaEmbeddedSocialRuntime } from \"./runtime.ts\";\n\nfunction socialIdTokenNonceMatches(\n\tclaim: string,\n\tnonceHash: string,\n\thashedClaim: string,\n): boolean {\n\treturn hashedClaim === nonceHash || claim === nonceHash;\n}\n\nfunction socialError(error: unknown): AthenaAuthRuntimeError {\n\tif (error instanceof AthenaAuthRuntimeError) {\n\t\treturn error;\n\t}\n\tif (error instanceof AthenaSocialServerError) {\n\t\tconst mixup = error instanceof AthenaSocialOAuthProviderMixupError;\n\t\treturn new AthenaAuthRuntimeError(400, error.message, {\n\t\t\tcode: error.code,\n\t\t\tcause: error,\n\t\t\tinternalMessage: mixup\n\t\t\t\t? \"OAuth provider mix-up\"\n\t\t\t\t: error.message,\n\t\t});\n\t}\n\treturn AthenaAuthRuntimeError.internal(error);\n}\n\nfunction redirectPolicyContext(trustedOrigins: readonly string[]) {\n\treturn {\n\t\tproduction: process.env.NODE_ENV === \"production\",\n\t\ttrustedOrigins,\n\t};\n}\n\nfunction safeLocationRedirect(headers: Headers, location: string): Response {\n\theaders.set(\"Location\", location);\n\treturn new Response(null, { headers, status: 302 });\n}\n\nasync function remainingAuthenticationMethods(\n\tstores: AuthProcedureContext[\"stores\"],\n\tuserId: string,\n\texceptAccountId?: string,\n): Promise<number> {\n\tconst accounts = (await stores.listAccounts(userId)).filter(\n\t\t(account) => account.id !== exceptAccountId,\n\t);\n\tconst passkeys = await createPasskeyRepository(stores).listByUser(userId);\n\treturn accounts.length + passkeys.length;\n}\n\nasync function runUserSignInSocial(\n\tctx: AuthProcedureContext,\n\tinput: {\n\t\temail?: string | null;\n\t\temailVerified?: boolean;\n\t\tname?: string | null;\n\t\tprovider: string;\n\t\tproviderUserId: string;\n\t\trequest: Request;\n\t},\n) {\n\tconst { deps, headers, traceId } = ctx;\n\treturn deps.mutate({\n\t\tcontext: {\n\t\t\tactor: { kind: \"user\" },\n\t\t\trequest: deps.hookRequest(input.request, `/callback/${input.provider}`),\n\t\t\ttraceId,\n\t\t},\n\t\tevent: \"user.sign-in.social\",\n\t\texecute: async (scope) => {\n\t\t\tconst resolved = await resolveOrCreateSocialAccount(scope.stores, {\n\t\t\t\temail: input.email,\n\t\t\t\temailVerified: input.emailVerified,\n\t\t\t\tintent: \"sign-in\",\n\t\t\t\tname: input.name,\n\t\t\t\tproviderId: input.provider,\n\t\t\t\tproviderUserId: input.providerUserId,\n\t\t\t});\n\t\t\tif (isUserEffectivelyBanned(resolved.user)) {\n\t\t\t\tthrow AthenaAuthRuntimeError.forbidden(\"User is banned\");\n\t\t\t}\n\t\t\tconst session = await deps.issueSession(\n\t\t\t\tinput.request,\n\t\t\t\tscope.stores,\n\t\t\t\tresolved.user.id,\n\t\t\t\theaders,\n\t\t\t);\n\t\t\tconst user =\n\t\t\t\t(await scope.stores.getUserById(resolved.user.id)) ?? resolved.user;\n\t\t\treturn { account: resolved.account, session, user };\n\t\t},\n\t\tinput: { provider: input.provider },\n\t\tresultOf: ({ account, session, user }) => ({\n\t\t\taccount: sanitizeHookAccount(account),\n\t\t\tsession: sanitizeHookSession(session),\n\t\t\tuser: sanitizeHookUser(user),\n\t\t}),\n\t\tsecondaryEvents: ({ session }) => [\n\t\t\t{\n\t\t\t\tevent: \"session.issue\" as const,\n\t\t\t\tinput: { userId: session.user_id },\n\t\t\t\tresult: { session: sanitizeHookSession(session) },\n\t\t\t},\n\t\t],\n\t});\n}\n\nasync function runAccountLink(\n\tctx: AuthProcedureContext,\n\tinput: {\n\t\temail?: string | null;\n\t\temailVerified?: boolean;\n\t\tname?: string | null;\n\t\tprovider: string;\n\t\tproviderUserId: string;\n\t\trequest: Request;\n\t\tuserId: string;\n\t},\n) {\n\tconst { deps, traceId } = ctx;\n\treturn deps.mutate({\n\t\tcontext: {\n\t\t\tactor: { kind: \"user\", userId: input.userId },\n\t\t\trequest: deps.hookRequest(input.request, \"/link-social\"),\n\t\t\ttraceId,\n\t\t},\n\t\tevent: \"account.link\",\n\t\texecute: async (scope) => {\n\t\t\tconst resolved = await resolveOrCreateSocialAccount(scope.stores, {\n\t\t\t\temail: input.email,\n\t\t\t\temailVerified: input.emailVerified,\n\t\t\t\tintent: \"link\",\n\t\t\t\tname: input.name,\n\t\t\t\tproviderId: input.provider,\n\t\t\t\tproviderUserId: input.providerUserId,\n\t\t\t\tuserId: input.userId,\n\t\t\t});\n\t\t\treturn { account: resolved.account, user: resolved.user };\n\t\t},\n\t\tinput: { provider: input.provider, userId: input.userId },\n\t\tresultOf: ({ account, user }) => ({\n\t\t\taccount: sanitizeHookAccount(account),\n\t\t\tuser: sanitizeHookUser(user),\n\t\t}),\n\t});\n}\n\nfunction findUnlinkAccount(\n\taccounts: readonly AuthAccountRow[],\n\tinput: { accountId?: string; providerId?: string },\n): AuthAccountRow | undefined {\n\treturn accounts.find((row) => {\n\t\tconst matchesRowId = Boolean(input.accountId) && row.id === input.accountId;\n\t\tconst matchesProviderSubject =\n\t\t\tBoolean(input.accountId) && row.account_id === input.accountId;\n\t\tconst matchesProvider =\n\t\t\tBoolean(input.providerId) && row.provider_id === input.providerId;\n\t\tconst matchesId = matchesRowId || matchesProviderSubject;\n\t\tif (input.accountId && input.providerId) {\n\t\t\treturn matchesId && matchesProvider;\n\t\t}\n\t\tif (input.accountId) {\n\t\t\treturn matchesId;\n\t\t}\n\t\treturn matchesProvider;\n\t});\n}\n\nasync function runAccountUnlink(\n\tctx: AuthProcedureContext,\n\tinput: {\n\t\taccountId?: string;\n\t\tproviderId?: string;\n\t\trequest: Request;\n\t\tuserId: string;\n\t},\n) {\n\tconst { deps, traceId } = ctx;\n\treturn deps.mutate({\n\t\tcontext: {\n\t\t\tactor: { kind: \"user\", userId: input.userId },\n\t\t\trequest: deps.hookRequest(input.request, \"/unlink-account\"),\n\t\t\ttraceId,\n\t\t},\n\t\tevent: \"account.unlink\",\n\t\texecute: async (scope) => {\n\t\t\tconst accounts = await scope.stores.listAccounts(input.userId);\n\t\t\tconst account = findUnlinkAccount(accounts, input);\n\t\t\tif (!account) {\n\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Account not found\");\n\t\t\t}\n\t\t\tconst remaining = await remainingAuthenticationMethods(\n\t\t\t\tscope.stores,\n\t\t\t\tinput.userId,\n\t\t\t\taccount.id,\n\t\t\t);\n\t\t\tif (remaining <= 0) {\n\t\t\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t\t\t400,\n\t\t\t\t\t\"Cannot unlink the last credential\",\n\t\t\t\t\t{ code: \"ATHENA_AUTH_LAST_CREDENTIAL\" },\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait scope.stores.deleteAccount(account.id);\n\t\t\treturn {\n\t\t\t\taccountId: account.id,\n\t\t\t\tdeleted: true as const,\n\t\t\t\tid: account.id,\n\t\t\t\tprovider: account.provider_id,\n\t\t\t\tuserId: account.user_id,\n\t\t\t};\n\t\t},\n\t\tinput: {\n\t\t\taccountId: input.accountId ?? \"\",\n\t\t\tprovider: input.providerId ?? \"\",\n\t\t\tuserId: input.userId,\n\t\t},\n\t\tprevious: async () => {\n\t\t\tconst accounts = await ctx.stores.listAccounts(input.userId);\n\t\t\tconst account = findUnlinkAccount(accounts, input);\n\t\t\tif (!account) {\n\t\t\t\tthrow AthenaAuthRuntimeError.notFound(\"Account not found\");\n\t\t\t}\n\t\t\treturn { account: sanitizeHookAccount(account) };\n\t\t},\n\t\tresultOf: (result) => result as {\n\t\t\taccountId: string;\n\t\t\tdeleted: true;\n\t\t\tid: string;\n\t\t\tprovider: string;\n\t\t\tuserId: string;\n\t\t},\n\t});\n}\n\nasync function resolveOrCreateSocialAccount(\n\tstores: AuthProcedureContext[\"stores\"],\n\tinput: {\n\t\temail?: string | null;\n\t\temailVerified?: boolean;\n\t\tintent: \"link\" | \"sign-in\";\n\t\tname?: string | null;\n\t\tproviderId: string;\n\t\tproviderUserId: string;\n\t\tuserId?: string | null;\n\t},\n): Promise<{ account: AuthAccountRow; created: boolean; user: AuthUserRow }> {\n\tconst existing = await stores.findAccountByProvider(\n\t\tinput.providerId,\n\t\tinput.providerUserId,\n\t);\n\tif (existing) {\n\t\tif (input.intent === \"link\" && input.userId && existing.user_id !== input.userId) {\n\t\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t\t409,\n\t\t\t\t\"Social account is already linked to another user\",\n\t\t\t\t{ code: \"ATHENA_AUTH_ACCOUNT_LINK_CONFLICT\" },\n\t\t\t);\n\t\t}\n\t\tconst user = await stores.getUserById(existing.user_id);\n\t\tif (!user) {\n\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\tnew Error(\"linked social account is missing its user\"),\n\t\t\t);\n\t\t}\n\t\treturn { account: existing, created: false, user };\n\t}\n\n\tif (input.intent === \"link\") {\n\t\tif (!input.userId) {\n\t\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t\t401,\n\t\t\t\t\"Linking a social account requires the current user\",\n\t\t\t\t{ code: \"ATHENA_AUTH_OAUTH_LINK_USER_REQUIRED\" },\n\t\t\t);\n\t\t}\n\t\tconst user = await stores.getUserById(input.userId);\n\t\tif (!user) {\n\t\t\tthrow AthenaAuthRuntimeError.unauthenticated();\n\t\t}\n\t\tconst account = await stores.createAccount({\n\t\t\taccountId: input.providerUserId,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tproviderId: input.providerId,\n\t\t\tuserId: user.id,\n\t\t});\n\t\treturn { account, created: true, user };\n\t}\n\n\tlet user: AuthUserRow | undefined;\n\tif (input.email) {\n\t\tuser = await stores.getUserByEmail(input.email);\n\t}\n\tif (!user) {\n\t\tuser = await stores.createUser({\n\t\t\temail: input.email ?? undefined,\n\t\t\temailVerified: input.emailVerified === true,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tname: input.name ?? undefined,\n\t\t});\n\t}\n\tconst account = await stores.createAccount({\n\t\taccountId: input.providerUserId,\n\t\tid: crypto.randomUUID(),\n\t\tproviderId: input.providerId,\n\t\tuserId: user.id,\n\t});\n\treturn { account, created: true, user };\n}\n\nasync function exchangeSocialIdentity(\n\truntime: AthenaEmbeddedSocialRuntime,\n\ttransaction: OAuthTransactionRecord,\n\tcode: string,\n): Promise<{\n\temail?: string | null;\n\temailVerified?: boolean;\n\tid: string;\n\tname?: string | null;\n} | null> {\n\tconst provider = resolveSocialProvider(runtime.social, transaction.providerId);\n\tconst envelope = await openPkceEnvelope(\n\t\ttransaction.pkceVerifierCiphertext,\n\t\truntime.secret,\n\t);\n\tlet tokens: OAuth2Tokens | null;\n\ttry {\n\t\ttokens = await provider.validateAuthorizationCode({\n\t\t\tcode,\n\t\t\tcodeVerifier: envelope.verifier,\n\t\t\tredirectURI: transaction.redirectUri,\n\t\t});\n\t} catch {\n\t\treturn null;\n\t}\n\tif (!tokens) {\n\t\treturn null;\n\t}\n\tif (tokens.idToken) {\n\t\tif (typeof provider.verifyIdToken !== \"function\") {\n\t\t\tthrow new AthenaAuthRuntimeError(400, \"Invalid ID token\", {\n\t\t\t\tcode: \"ATHENA_AUTH_OAUTH_ID_TOKEN_INVALID\",\n\t\t\t});\n\t\t}\n\t\tconst { decodeJwt } = await import(\"jose\");\n\t\tconst claims = decodeJwt(tokens.idToken) as { nonce?: unknown };\n\t\tif (typeof claims.nonce !== \"string\" || claims.nonce.length === 0) {\n\t\t\tthrow new AthenaAuthRuntimeError(400, \"OIDC nonce mismatch\", {\n\t\t\t\tcode: \"ATHENA_AUTH_OAUTH_NONCE_MISMATCH\",\n\t\t\t});\n\t\t}\n\t\tconst hashed = await sha256Hex(claims.nonce);\n\t\tif (!socialIdTokenNonceMatches(claims.nonce, transaction.nonceHash, hashed)) {\n\t\t\tthrow new AthenaAuthRuntimeError(400, \"OIDC nonce mismatch\", {\n\t\t\t\tcode: \"ATHENA_AUTH_OAUTH_NONCE_MISMATCH\",\n\t\t\t});\n\t\t}\n\t\tlet verified = false;\n\t\ttry {\n\t\t\tverified = await provider.verifyIdToken(tokens.idToken, claims.nonce);\n\t\t} catch {\n\t\t\tverified = false;\n\t\t}\n\t\tif (!verified) {\n\t\t\tthrow new AthenaAuthRuntimeError(400, \"Invalid ID token\", {\n\t\t\t\tcode: \"ATHENA_AUTH_OAUTH_ID_TOKEN_INVALID\",\n\t\t\t});\n\t\t}\n\t}\n\tconst profile = await provider.getUserInfo(tokens);\n\tconst id = profile?.user.id;\n\tif (id === undefined || id === null || String(id).length === 0) {\n\t\treturn null;\n\t}\n\treturn {\n\t\temail: profile?.user.email,\n\t\temailVerified: profile?.user.emailVerified,\n\t\tid: String(id),\n\t\tname: profile?.user.name,\n\t};\n}\n\nasync function handleSocialCallback(\n\trequest: Request,\n\tpath: string,\n\tctx: AuthProcedureContext,\n): Promise<Response> {\n\tconst { deps, headers } = ctx;\n\tconst provider =\n\t\tpath === \"/callback/{provider}\" ? \"\" : path.slice(\"/callback/\".length);\n\tif (!provider) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\"provider is required\");\n\t}\n\tconst { code, state } = await readCallbackParams(request);\n\tif (!(code && state)) {\n\t\tthrow new AthenaAuthRuntimeError(400, \"code and state are required\", {\n\t\t\tcode: \"ATHENA_AUTH_OAUTH_CALLBACK_INVALID\",\n\t\t});\n\t}\n\tconst runtime = await deps.getSocialRuntime();\n\tif (!runtime) {\n\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t501,\n\t\t\t\"Social authentication is not configured\",\n\t\t\t{ code: \"ATHENA_AUTH_SOCIAL_NOT_CONFIGURED\" },\n\t\t);\n\t}\n\tlet transaction: OAuthTransactionRecord;\n\ttry {\n\t\ttransaction = (await runtime.engine.consumeTransaction({\n\t\t\tprovider,\n\t\t\tstate,\n\t\t})) as OAuthTransactionRecord;\n\t} catch (error) {\n\t\tthrow socialError(error);\n\t}\n\tconst envelope = await openPkceEnvelope(\n\t\ttransaction.pkceVerifierCiphertext,\n\t\truntime.secret,\n\t);\n\tconst postAuth =\n\t\tenvelope.postAuthRedirect ??\n\t\tdeps.config.security.trustedOrigins[0] ??\n\t\tnew URL(request.url).origin;\n\tlet destination: string;\n\ttry {\n\t\tdestination = validatePostAuthRedirect(\n\t\t\tpostAuth,\n\t\t\tredirectPolicyContext(deps.config.security.trustedOrigins),\n\t\t);\n\t} catch (error) {\n\t\tthrow socialError(error);\n\t}\n\n\tif (transaction.providerId !== provider) {\n\t\tthrow new AthenaSocialOAuthProviderMixupError();\n\t}\n\n\tconst identity = await exchangeSocialIdentity(runtime, transaction, code);\n\tif (!identity) {\n\t\treturn safeLocationRedirect(headers, destination);\n\t}\n\n\tif (transaction.intent === \"link\") {\n\t\tawait runAccountLink(ctx, {\n\t\t\temail: identity.email,\n\t\t\temailVerified: identity.emailVerified,\n\t\t\tname: identity.name,\n\t\t\tprovider,\n\t\t\tproviderUserId: identity.id,\n\t\t\trequest,\n\t\t\tuserId: transaction.userId ?? \"\",\n\t\t});\n\t\treturn safeLocationRedirect(headers, destination);\n\t}\n\n\tawait runUserSignInSocial(ctx, {\n\t\temail: identity.email,\n\t\temailVerified: identity.emailVerified,\n\t\tname: identity.name,\n\t\tprovider,\n\t\tproviderUserId: identity.id,\n\t\trequest,\n\t});\n\treturn safeLocationRedirect(headers, destination);\n}\n\nasync function readCallbackParams(\n\trequest: Request,\n): Promise<{ code: string; state: string }> {\n\tif (request.method === \"POST\") {\n\t\tconst contentType = request.headers.get(\"content-type\") ?? \"\";\n\t\tif (\n\t\t\tcontentType.includes(\"application/x-www-form-urlencoded\") ||\n\t\t\tcontentType.includes(\"multipart/form-data\")\n\t\t) {\n\t\t\tconst form = await request.formData();\n\t\t\treturn {\n\t\t\t\tcode: String(form.get(\"code\") ?? \"\").trim(),\n\t\t\t\tstate: String(form.get(\"state\") ?? \"\").trim(),\n\t\t\t};\n\t\t}\n\t}\n\tconst params = new URL(request.url).searchParams;\n\treturn {\n\t\tcode: params.get(\"code\")?.trim() ?? \"\",\n\t\tstate: params.get(\"state\")?.trim() ?? \"\",\n\t};\n}\n\nexport async function handleSocialRoutes(\n\trequest: Request,\n\tpath: string,\n\tmethod: string,\n\tctx: AuthProcedureContext,\n): Promise<Response | undefined> {\n\tconst { deps, headers, stores } = ctx;\n\tconst trusted = deps.config.security.trustedOrigins;\n\n\tif (\n\t\t(method === \"GET\" || method === \"POST\") &&\n\t\t(path === \"/callback/{provider}\" || /^\\/callback\\/[^/]+$/.test(path))\n\t) {\n\t\ttry {\n\t\t\treturn await handleSocialCallback(request, path, ctx);\n\t\t} catch (error) {\n\t\t\tif (error instanceof AthenaSocialOAuthProviderMixupError) {\n\t\t\t\tthrow socialError(error);\n\t\t\t}\n\t\t\tthrow socialError(error);\n\t\t}\n\t}\n\n\tif (path === \"/sign-in/social\" && method === \"POST\") {\n\t\tconst body = await readJsonBody(request, deps.config.security.bodyLimitBytes);\n\t\tconst provider = requireStringField(body, \"provider\");\n\t\tconst callbackURL = requireStringField(body, \"callbackURL\");\n\t\tlet postAuth: string;\n\t\ttry {\n\t\t\tpostAuth = validatePostAuthRedirect(\n\t\t\t\tcallbackURL,\n\t\t\t\tredirectPolicyContext(trusted),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow socialError(error);\n\t\t}\n\t\tconst runtime = await deps.getSocialRuntime();\n\t\tif (!runtime) {\n\t\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t\t501,\n\t\t\t\t\"Social authentication is not configured\",\n\t\t\t\t{ code: \"ATHENA_AUTH_SOCIAL_NOT_CONFIGURED\" },\n\t\t\t);\n\t\t}\n\t\tconst redirectUri = resolveSocialCallbackUri({\n\t\t\tbasePath: deps.config.basePath,\n\t\t\tbaseURL: new URL(request.url).origin,\n\t\t\tprovider,\n\t\t});\n\t\ttry {\n\t\t\tconst started = await runtime.engine.startAuthorization({\n\t\t\t\tintent: \"sign-in\",\n\t\t\t\tpostAuthRedirect: postAuth,\n\t\t\t\tprovider,\n\t\t\t\tredirectUri,\n\t\t\t});\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{ redirect: true, url: started.url },\n\t\t\t\theaders,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow socialError(error);\n\t\t}\n\t}\n\n\tif (path === \"/link-social\" && method === \"POST\") {\n\t\tconst { user } = await deps.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, deps.config.security.bodyLimitBytes);\n\t\tconst provider = requireStringField(body, \"provider\");\n\t\tconst callbackURL = requireStringField(body, \"callbackURL\");\n\t\tlet postAuth: string;\n\t\ttry {\n\t\t\tpostAuth = validatePostAuthRedirect(\n\t\t\t\tcallbackURL,\n\t\t\t\tredirectPolicyContext(trusted),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow socialError(error);\n\t\t}\n\t\tconst runtime = await deps.getSocialRuntime();\n\t\tif (!runtime) {\n\t\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t\t501,\n\t\t\t\t\"Social authentication is not configured\",\n\t\t\t\t{ code: \"ATHENA_AUTH_SOCIAL_NOT_CONFIGURED\" },\n\t\t\t);\n\t\t}\n\t\tconst redirectUri = resolveSocialCallbackUri({\n\t\t\tbasePath: deps.config.basePath,\n\t\t\tbaseURL: new URL(request.url).origin,\n\t\t\tprovider,\n\t\t});\n\t\ttry {\n\t\t\tconst started = await runtime.engine.startAuthorization({\n\t\t\t\tintent: \"link\",\n\t\t\t\tpostAuthRedirect: postAuth,\n\t\t\t\tprovider,\n\t\t\t\tredirectUri,\n\t\t\t\tuserId: user.id,\n\t\t\t});\n\t\t\treturn jsonResponse(\n\t\t\t\t200,\n\t\t\t\t{ redirect: true, url: started.url },\n\t\t\t\theaders,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow socialError(error);\n\t\t}\n\t}\n\n\tif (path === \"/unlink-account\" && method === \"POST\") {\n\t\tconst { user } = await deps.requireSession(request, stores);\n\t\tconst body = await readJsonBody(request, deps.config.security.bodyLimitBytes);\n\t\tconst providerId =\n\t\t\tasStringField(body, \"providerId\") ?? asStringField(body, \"provider\");\n\t\tconst accountId = asStringField(body, \"accountId\");\n\t\tawait runAccountUnlink(ctx, {\n\t\t\taccountId,\n\t\t\tproviderId,\n\t\t\trequest,\n\t\t\tuserId: user.id,\n\t\t});\n\t\treturn jsonResponse(200, { status: true }, headers);\n\t}\n\n\treturn undefined;\n}\n","import {\n\tauthorizationCodeRequest,\n\tcreateAuthorizationURL,\n\tgenerateCodeChallenge,\n} from \"../../oauth2/index.ts\";\nimport {\n\tAthenaSocialOAuthProviderMixupError,\n\tAthenaSocialServerError,\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\tAthenaSocialServerEngine,\n\tAthenaSocialServerEnginePorts,\n\tSocialAuthorizationStartInput,\n\tSocialAuthorizationStartResult,\n\tSocialTransactionConsumeInput,\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\tconst bytes = new Uint8Array(32);\n\tcrypto.getRandomValues(bytes);\n\treturn Buffer.from(bytes).toString(\"base64url\");\n}\n\nasync function deriveAesKey(secret: string): Promise<CryptoKey> {\n\tconst material = await crypto.subtle.digest(\n\t\t\"SHA-256\",\n\t\tTEXT_ENCODER.encode(secret),\n\t);\n\treturn crypto.subtle.importKey(\"raw\", material, \"AES-GCM\", false, [\n\t\t\"encrypt\",\n\t]);\n}\n\nasync function encryptPkceVerifierAtRest(\n\tverifier: string,\n\tsecret: string,\n): Promise<string> {\n\tconst key = await deriveAesKey(secret);\n\tconst iv = crypto.getRandomValues(new Uint8Array(12));\n\tconst sealed = await crypto.subtle.encrypt(\n\t\t{ name: \"AES-GCM\", iv },\n\t\tkey,\n\t\tTEXT_ENCODER.encode(verifier),\n\t);\n\tconst packed = new Uint8Array(iv.byteLength + sealed.byteLength);\n\tpacked.set(iv);\n\tpacked.set(new Uint8Array(sealed), iv.byteLength);\n\treturn Buffer.from(packed).toString(\"base64url\");\n}\n\nfunction resolvePkceMethod(input: SocialAuthorizationStartInput): string {\n\treturn input.codeChallengeMethod ?? input.pkceMethod ?? PKCE_S256;\n}\n\nfunction resolveUserId(input: SocialAuthorizationStartInput): string | null {\n\tif (typeof input.userId === \"string\" && input.userId.trim()) {\n\t\treturn input.userId.trim();\n\t}\n\tif (typeof input.user_id === \"string\" && input.user_id.trim()) {\n\t\treturn input.user_id.trim();\n\t}\n\treturn null;\n}\n\nexport function createAthenaSocialServerEngine(\n\tports: AthenaSocialServerEnginePorts,\n): AthenaSocialServerEngine {\n\tconst secret = ports.encryptionKey ?? ports.secret;\n\tconst social = { providers: ports.social.providers ?? {} };\n\n\tasync function startAuthorization(\n\t\tinput: SocialAuthorizationStartInput,\n\t): Promise<SocialAuthorizationStartResult> {\n\t\tif (!secret) {\n\t\t\tthrow new AthenaSocialServerError(\n\t\t\t\t\"ATHENA_AUTH_OAUTH_ENCRYPTION_REQUIRED\",\n\t\t\t\t\"social OAuth engine requires encryptionKey or secret\",\n\t\t\t);\n\t\t}\n\t\tif (input.intent !== \"sign-in\" && input.intent !== \"link\") {\n\t\t\tthrow new AthenaSocialServerError(\n\t\t\t\t\"ATHENA_AUTH_OAUTH_INTENT_INVALID\",\n\t\t\t\t\"OAuth transaction intent must be sign-in or link\",\n\t\t\t);\n\t\t}\n\t\tconst pkceMethod = resolvePkceMethod(input);\n\t\tif (pkceMethod !== PKCE_S256) {\n\t\t\tthrow new AthenaSocialServerError(\n\t\t\t\t\"ATHENA_AUTH_OAUTH_PKCE_S256_REQUIRED\",\n\t\t\t\t`PKCE method must be S256, not ${pkceMethod} (plain rejected)`,\n\t\t\t);\n\t\t}\n\t\tconst userId =\n\t\t\tinput.intent === \"link\" ? resolveUserId(input) : null;\n\t\tif (input.intent === \"link\" && !userId) {\n\t\t\tthrow new AthenaSocialServerError(\n\t\t\t\t\"ATHENA_AUTH_OAUTH_LINK_USER_REQUIRED\",\n\t\t\t\t\"user_id is required for link intent\",\n\t\t\t);\n\t\t}\n\t\tconst verifier = input.codeVerifier?.trim() || randomToken();\n\t\tif (!verifier) {\n\t\t\tthrow new AthenaSocialServerError(\n\t\t\t\t\"ATHENA_AUTH_OAUTH_PKCE_VERIFIER_REQUIRED\",\n\t\t\t\t\"PKCE verifier is required for S256\",\n\t\t\t);\n\t\t}\n\t\tconst state = randomToken();\n\t\tlet nonce = randomToken();\n\t\twhile (nonce === state) {\n\t\t\tnonce = randomToken();\n\t\t}\n\t\tconst [stateHash, nonceHash, challenge] = await Promise.all([\n\t\t\tsha256Hex(state),\n\t\t\tsha256Hex(nonce),\n\t\t\tgenerateCodeChallenge(verifier),\n\t\t]);\n\t\tif (stateHash === nonceHash) {\n\t\t\tthrow new AthenaSocialServerError(\n\t\t\t\t\"ATHENA_AUTH_OAUTH_NONCE_STATE_COLLISION\",\n\t\t\t\t\"OIDC nonce must be distinct from CSRF state\",\n\t\t\t);\n\t\t}\n\t\tconst provider = resolveSocialProvider(social, input.provider);\n\t\tconst authorizationUrl = await provider.createAuthorizationURL({\n\t\t\tcodeVerifier: verifier,\n\t\t\tredirectURI: input.redirectUri,\n\t\t\tstate,\n\t\t});\n\t\tauthorizationUrl.searchParams.set(\"nonce\", nonce);\n\t\tauthorizationUrl.searchParams.set(\"code_challenge_method\", PKCE_S256);\n\t\tauthorizationUrl.searchParams.set(\"code_challenge\", challenge);\n\t\tconst ciphertext = await encryptPkceVerifierAtRest(\n\t\t\tJSON.stringify({\n\t\t\t\tr: input.postAuthRedirect,\n\t\t\t\tv: verifier,\n\t\t\t}),\n\t\t\tsecret,\n\t\t);\n\t\tconst now = new Date();\n\t\tif (typeof ports.transactions.expire === \"function\") {\n\t\t\tawait ports.transactions.expire(now);\n\t\t}\n\t\tawait ports.transactions.create({\n\t\t\tcodeChallengeMethod: PKCE_S256,\n\t\t\tcreatedAt: now,\n\t\t\texpiresAt: new Date(now.getTime() + DEFAULT_TTL_MS),\n\t\t\tid: crypto.randomUUID(),\n\t\t\tintent: input.intent,\n\t\t\tnonceHash,\n\t\t\tpkceVerifierCiphertext: ciphertext,\n\t\t\tproviderId: input.provider,\n\t\t\tredirectUri: input.redirectUri,\n\t\t\tstateHash,\n\t\t\tuserId,\n\t\t});\n\t\tconst url = authorizationUrl.toString();\n\t\treturn {\n\t\t\tauthorizationURL: url,\n\t\t\tnonce,\n\t\t\tstate,\n\t\t\turl,\n\t\t};\n\t}\n\n\tasync function consumeTransaction(input: SocialTransactionConsumeInput) {\n\t\tconst stateHash = await sha256Hex(String(input.state ?? \"\"));\n\t\tconst row = (await ports.transactions.consume(stateHash)) as\n\t\t\t| OAuthTransactionRecord\n\t\t\t| null\n\t\t\t| undefined;\n\t\tif (!row) {\n\t\t\tthrow new AthenaSocialServerError(\n\t\t\t\t\"ATHENA_AUTH_OAUTH_TRANSACTION_NOT_FOUND\",\n\t\t\t\t\"OAuth transaction not found, expired, or already consumed\",\n\t\t\t);\n\t\t}\n\t\tif (row.providerId !== input.provider) {\n\t\t\tthrow new AthenaSocialOAuthProviderMixupError();\n\t\t}\n\t\treturn row;\n\t}\n\n\treturn {\n\t\tconsume: consumeTransaction,\n\t\tconsumeTransaction,\n\t\tstartAuthorization,\n\t};\n}\n\nexport {\n\tauthorizationCodeRequest,\n\tcreateAuthorizationURL,\n\tgenerateCodeChallenge,\n};\n","import type {\n\tOAuthTransactionRecord,\n\tOAuthTransactionStore,\n} from \"../../social/server/transaction-store.ts\";\n\nfunction cloneRecord(row: OAuthTransactionRecord): OAuthTransactionRecord {\n\treturn {\n\t\tcodeChallengeMethod: row.codeChallengeMethod,\n\t\tcreatedAt: new Date(row.createdAt),\n\t\texpiresAt: new Date(row.expiresAt),\n\t\tid: row.id,\n\t\tintent: row.intent,\n\t\tnonceHash: row.nonceHash,\n\t\tpkceVerifierCiphertext: row.pkceVerifierCiphertext,\n\t\tproviderId: row.providerId,\n\t\tredirectUri: row.redirectUri,\n\t\tstateHash: row.stateHash,\n\t\tuserId: row.userId,\n\t};\n}\n\nexport class MemoryOAuthTransactionStore implements OAuthTransactionStore {\n\tprivate readonly rows = new Map<string, OAuthTransactionRecord>();\n\n\tconstructor() {\n\t\tthis.consume = this.consume.bind(this);\n\t\tthis.create = this.create.bind(this);\n\t\tthis.expire = this.expire.bind(this);\n\t}\n\n\tasync create(row: OAuthTransactionRecord): Promise<void> {\n\t\tthis.rows.set(row.stateHash, cloneRecord(row));\n\t}\n\n\tasync consume(stateHash: string): Promise<OAuthTransactionRecord | null> {\n\t\tconst row = this.rows.get(stateHash);\n\t\tif (!row) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.rows.delete(stateHash);\n\t\tif (row.expiresAt.getTime() <= Date.now()) {\n\t\t\treturn null;\n\t\t}\n\t\treturn cloneRecord(row);\n\t}\n\n\tasync expire(now: Date = new Date()): Promise<number> {\n\t\tconst cutoff = now.getTime();\n\t\tlet deleted = 0;\n\t\tfor (const [key, row] of [...this.rows.entries()]) {\n\t\t\tif (row.expiresAt.getTime() <= cutoff) {\n\t\t\t\tthis.rows.delete(key);\n\t\t\t\tdeleted += 1;\n\t\t\t}\n\t\t}\n\t\treturn deleted;\n\t}\n}\n\nexport function createMemoryOAuthTransactionStore(): MemoryOAuthTransactionStore {\n\treturn new MemoryOAuthTransactionStore();\n}\n","import { ATHENA_AUTH_TABLES } from \"../../contract/index.ts\";\nimport type {\n\tOAuthTransactionIntent,\n\tOAuthTransactionRecord,\n\tOAuthTransactionStore,\n} from \"../../social/server/transaction-store.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\n\ntype OauthTransactionRow = {\n\tcode_challenge_method: string;\n\tcreated_at: Date | string;\n\texpires_at: Date | string;\n\tid: string;\n\tintent: string;\n\tnonce_hash: string;\n\tpkce_verifier_ciphertext: string;\n\tprovider_id: string;\n\tredirect_uri: string;\n\tstate_hash: string;\n\tuser_id: string | null;\n};\n\nfunction hydrate(row: OauthTransactionRow): OAuthTransactionRecord {\n\treturn {\n\t\tcodeChallengeMethod: \"S256\",\n\t\tcreatedAt: new Date(row.created_at),\n\t\texpiresAt: new Date(row.expires_at),\n\t\tid: row.id,\n\t\tintent: row.intent as OAuthTransactionIntent,\n\t\tnonceHash: row.nonce_hash,\n\t\tpkceVerifierCiphertext: row.pkce_verifier_ciphertext,\n\t\tproviderId: row.provider_id,\n\t\tredirectUri: row.redirect_uri,\n\t\tstateHash: row.state_hash,\n\t\tuserId: row.user_id,\n\t};\n}\n\nexport class PostgresOAuthTransactionStore implements OAuthTransactionStore {\n\tconstructor(private readonly db: AthenaAuthDatabase) {}\n\n\tasync create(row: OAuthTransactionRecord): Promise<void> {\n\t\tawait this.db.query(\n\t\t\t`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\t\t\t[\n\t\t\t\trow.id,\n\t\t\t\trow.stateHash,\n\t\t\t\trow.providerId,\n\t\t\t\trow.intent,\n\t\t\t\trow.codeChallengeMethod,\n\t\t\t\trow.pkceVerifierCiphertext,\n\t\t\t\trow.nonceHash,\n\t\t\t\trow.redirectUri,\n\t\t\t\trow.userId,\n\t\t\t\trow.expiresAt.toISOString(),\n\t\t\t\trow.createdAt.toISOString(),\n\t\t\t],\n\t\t);\n\t}\n\n\tasync consume(stateHash: string): Promise<OAuthTransactionRecord | null> {\n\t\tawait this.expire();\n\t\tconst result = await this.db.query<OauthTransactionRow>(\n\t\t\t`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\t\t\t[stateHash],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\treturn row ? hydrate(row) : null;\n\t}\n\n\tasync expire(now: Date = new Date()): Promise<number> {\n\t\tconst result = await this.db.query(\n\t\t\t`DELETE FROM athena.oauth_transactions\n\t\t\t WHERE expires_at <= $1\n\t\t\t RETURNING *`,\n\t\t\t[now.toISOString()],\n\t\t);\n\t\treturn result.rowCount;\n\t}\n}\n\nexport function createPostgresOAuthTransactionStore(\n\tdb: AthenaAuthDatabase,\n): PostgresOAuthTransactionStore {\n\treturn new PostgresOAuthTransactionStore(db);\n}\n","import { socialProviders } from \"../../social-providers/registry.ts\";\nimport { createAthenaSocialServerEngine } from \"../../social/server/engine.ts\";\nimport type { AthenaSocialServerEngine } from \"../../social/server/types.ts\";\nimport type { NormalizedSocialAuthConfig } from \"../../social/server/social-config.ts\";\nimport type { OAuthTransactionStore } from \"../../social/server/transaction-store.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\nimport {\n\tcreateMemoryOAuthTransactionStore,\n} from \"./memory-store.ts\";\nimport {\n\tcreatePostgresOAuthTransactionStore,\n} from \"./postgres-store.ts\";\n\nexport interface AthenaEmbeddedSocialRuntime {\n\tengine: AthenaSocialServerEngine;\n\tsecret: string;\n\tsocial: NormalizedSocialAuthConfig;\n\tstore: OAuthTransactionStore;\n}\n\nexport interface ComposeEmbeddedSocialRuntimeInput {\n\tdatabase?: AthenaAuthDatabase;\n\tsecret?: string;\n\tsocial: NormalizedSocialAuthConfig;\n}\n\nfunction isRegisteredSocialProvider(id: string): boolean {\n\treturn (\n\t\ttypeof socialProviders[id as keyof typeof socialProviders] === \"function\"\n\t);\n}\n\nfunction configuredProviderIds(\n\tsocial: NormalizedSocialAuthConfig,\n): string[] {\n\treturn Object.entries(social.providers)\n\t\t.filter(\n\t\t\t([id, bag]) =>\n\t\t\t\tisRegisteredSocialProvider(id) &&\n\t\t\t\tBoolean(bag.clientId?.trim()) &&\n\t\t\t\tBoolean(bag.clientSecret?.trim()),\n\t\t)\n\t\t.map(([id]) => id)\n\t\t.sort();\n}\n\nexport function hasConfiguredSocialProviders(\n\tsocial: NormalizedSocialAuthConfig | undefined,\n): boolean {\n\treturn Boolean(social && configuredProviderIds(social).length > 0);\n}\n\nexport function advertisedSocialProviderIds(\n\tsocial: NormalizedSocialAuthConfig | undefined,\n): string[] {\n\treturn social ? configuredProviderIds(social) : [];\n}\n\nexport function resolveSocialEncryptionSecret(input: {\n\tconfigSecret?: string;\n\texplicitSecret?: string;\n\truntimeKeyMaterial?: string;\n}): string | undefined {\n\tfor (const value of [\n\t\tinput.explicitSecret,\n\t\tinput.configSecret,\n\t\tinput.runtimeKeyMaterial,\n\t]) {\n\t\tconst trimmed = value?.trim();\n\t\tif (trimmed) {\n\t\t\treturn trimmed;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function composeEmbeddedSocialRuntime(\n\tinput: ComposeEmbeddedSocialRuntimeInput,\n): AthenaEmbeddedSocialRuntime | null {\n\tif (!hasConfiguredSocialProviders(input.social)) {\n\t\treturn null;\n\t}\n\tconst secret = input.secret?.trim();\n\tif (!secret) {\n\t\treturn null;\n\t}\n\tconst store = input.database\n\t\t? createPostgresOAuthTransactionStore(input.database)\n\t\t: createMemoryOAuthTransactionStore();\n\tconst engine = createAthenaSocialServerEngine({\n\t\tsecret,\n\t\tsocial: input.social,\n\t\ttransactions: store,\n\t});\n\treturn {\n\t\tengine,\n\t\tsecret,\n\t\tsocial: input.social,\n\t\tstore,\n\t};\n}\n","import {\n\ttype CryptoKey,\n\texportJWK,\n\tgenerateKeyPair,\n\ttype JWK,\n\tSignJWT,\n} from \"jose\";\nimport { AthenaAuthRuntimeError, jsonResponse } from \"./errors.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\n\nconst JWKS_CACHE_CONTROL = \"public, max-age=300, stale-while-revalidate=300\";\n\nexport interface LocalTokenAuthority {\n\thandle(\n\t\tpath: string,\n\t\tmethod: string,\n\t\trequest: Request,\n\t\tsession: { session: AuthSessionRow; user: AuthUserRow } | null,\n\t): Promise<Response | undefined>;\n}\n\nexport async function createLocalTokenAuthority(options: {\n\taudiences?: string[];\n\tissuer: string;\n\ttokenEndpoint: string;\n}): Promise<LocalTokenAuthority> {\n\tconst { privateKey, publicKey } = await generateKeyPair(\"ES256\");\n\tconst kid = `athena-local-${new Date().toISOString().slice(0, 10)}`;\n\tconst jwk = await exportJWK(publicKey);\n\tconst publicJwk: JWK = {\n\t\t...jwk,\n\t\talg: \"ES256\",\n\t\tkid,\n\t\tuse: \"sig\",\n\t};\n\tconst allowlist = options.audiences ?? [];\n\n\treturn {\n\t\tasync handle(path, method, request, session) {\n\t\t\tif (path === \"/.well-known/jwks.json\" && method === \"GET\") {\n\t\t\t\tconst headers = new Headers({\n\t\t\t\t\t\"cache-control\": JWKS_CACHE_CONTROL,\n\t\t\t\t});\n\t\t\t\treturn jsonResponse(200, { keys: [publicJwk] }, headers);\n\t\t\t}\n\t\t\tif (path === \"/.well-known/openid-configuration\" && method === \"GET\") {\n\t\t\t\treturn jsonResponse(200, {\n\t\t\t\t\tid_token_signing_alg_values_supported: [\"ES256\"],\n\t\t\t\t\tissuer: options.issuer,\n\t\t\t\t\tjwks_uri: `${options.issuer}/.well-known/jwks.json`,\n\t\t\t\t\tresponse_types_supported: [],\n\t\t\t\t\tsubject_types_supported: [\"public\"],\n\t\t\t\t\ttoken_endpoint: options.tokenEndpoint,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(path === \"/token\" ||\n\t\t\t\t\tpath === \"/get-access-token\" ||\n\t\t\t\t\tpath === \"/refresh-token\") &&\n\t\t\t\tmethod === \"POST\"\n\t\t\t) {\n\t\t\t\tif (!session) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.unauthenticated();\n\t\t\t\t}\n\t\t\t\tif (session.user.banned) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.forbidden(\"User is banned\");\n\t\t\t\t}\n\t\t\t\tconst body = (await request.json().catch(() => ({}))) as {\n\t\t\t\t\taudience?: string | string[];\n\t\t\t\t\texpiresIn?: number;\n\t\t\t\t};\n\t\t\t\tconst requested = normalizeAudiences(body.audience);\n\t\t\t\tconst audiences =\n\t\t\t\t\trequested.length > 0 ? requested : allowlist.slice(0, 1);\n\t\t\t\tif (audiences.length === 0) {\n\t\t\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"audience is required\");\n\t\t\t\t}\n\t\t\t\tif (allowlist.length > 0) {\n\t\t\t\t\tfor (const audience of audiences) {\n\t\t\t\t\t\tif (!allowlist.includes(audience)) {\n\t\t\t\t\t\t\tthrow AthenaAuthRuntimeError.forbidden(\n\t\t\t\t\t\t\t\t`audience ${audience} is not in the configured allowlist`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst ttl = Math.min(Math.max(body.expiresIn ?? 900, 1), 3600);\n\t\t\t\tconst token = await signSessionJwt({\n\t\t\t\t\taudiences,\n\t\t\t\t\tissuer: options.issuer,\n\t\t\t\t\tkid,\n\t\t\t\t\tprivateKey,\n\t\t\t\t\tsession: session.session,\n\t\t\t\t\tttl,\n\t\t\t\t\tuser: session.user,\n\t\t\t\t});\n\t\t\t\treturn jsonResponse(200, {\n\t\t\t\t\taudience: audiences,\n\t\t\t\t\texpiresAt: new Date(Date.now() + ttl * 1000).toISOString(),\n\t\t\t\t\texpiresIn: ttl,\n\t\t\t\t\tissuer: options.issuer,\n\t\t\t\t\tkid,\n\t\t\t\t\ttoken,\n\t\t\t\t\ttokenType: \"Bearer\",\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t};\n}\n\nfunction normalizeAudiences(audience: string | string[] | undefined): string[] {\n\tif (audience == null) {\n\t\treturn [];\n\t}\n\treturn (Array.isArray(audience) ? audience : [audience])\n\t\t.map((value) => value.trim())\n\t\t.filter((value) => value.length > 0);\n}\n\nasync function signSessionJwt(input: {\n\taudiences: string[];\n\tissuer: string;\n\tkid: string;\n\tprivateKey: CryptoKey;\n\tsession: AuthSessionRow;\n\tttl: number;\n\tuser: AuthUserRow;\n}): Promise<string> {\n\treturn new SignJWT({\n\t\tsid: input.session.id,\n\t})\n\t\t.setProtectedHeader({ alg: \"ES256\", kid: input.kid, typ: \"JWT\" })\n\t\t.setIssuer(input.issuer)\n\t\t.setSubject(input.user.id)\n\t\t.setAudience(input.audiences)\n\t\t.setIssuedAt()\n\t\t.setNotBefore(0)\n\t\t.setExpirationTime(`${input.ttl}s`)\n\t\t.setJti(crypto.randomUUID())\n\t\t.sign(input.privateKey);\n}\n","import type { AthenaEmailDeliveryPort } from \"../../email/types.ts\";\nimport type { AuthBridgeCodeStore } from \"../bridge/store.ts\";\nimport {\n\ttype NormalizedAthenaAuthConfig,\n\tnormalizeAthenaAuthConfig,\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 { AuthMutationTransaction } from \"../hooks/scope.ts\";\nimport {\n\ttype AthenaAuthAuditWriter,\n\tcreateMemoryAuthAuditWriter,\n\tcreatePostgresAuthAuditWriter,\n\ttype MemoryAuthAuditSink,\n} from \"../observability/audit.ts\";\nimport { normalizeAthenaAuthObservability } from \"../observability/config.ts\";\nimport {\n\tcreatePasskeyRelyingPartyResolver,\n\tcreatePasskeyRelyingPartySnapshot,\n\ttype PasskeyRelyingPartyResolver,\n} from \"../passkey/server/relying-party.ts\";\nimport type { AthenaPasskeyRelyingParty } from \"../passkey/server/types.ts\";\nimport { isUserEffectivelyBanned } from \"./admin-contract.ts\";\nimport { createMemoryAuthBridgeCodeStore } from \"./bridge/memory-store.ts\";\nimport { createPostgresAuthBridgeCodeStore } from \"./bridge/postgres-store.ts\";\nimport {\n\tcreateSessionCookieHeader,\n\treadBearerToken,\n\treadSessionTokenFromCookies,\n\tshouldSetSecureCookie,\n} from \"./cookies.ts\";\nimport {\n\ttype AthenaAuthDatabase,\n\tcreatePostgresAuthDatabase,\n} from \"./database.ts\";\nimport { PostgresAuthEmailStore } from \"./email/postgres-store.ts\";\nimport {\n\ttype AthenaAuthEmailStore,\n\tMemoryAuthEmailStore,\n} from \"./email/store.ts\";\nimport { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport { resolveRuntimeKey } from \"./keyring.ts\";\nimport { type AthenaAuthStores, MemoryAuthStores } from \"./memory-stores.ts\";\nimport type { AuthSessionRow, AuthUserRow } from \"./models.ts\";\nimport { createAuthMutationTransaction } from \"./mutation-transaction.ts\";\nimport { normalizeSessionActiveOrganization } from \"./organization-invariants.ts\";\nimport {\n\ttype AthenaAuthPasswordHasher,\n\tcreateArgon2PasswordHasher,\n} from \"./password.ts\";\nimport { instrumentAuthStoreMethods, timeAuthSpan } from \"./request-timing.ts\";\nimport { createSessionToken } from \"./runtime-helpers.ts\";\nimport type { CreateAthenaAuthRuntimeOptions } from \"./runtime-types.ts\";\nimport {\n\tassertAthenaAuthSchemaCompatible,\n\tmigrateAthenaAuthSchema,\n} from \"./schema.ts\";\nimport { MemoryRateLimiter, requestClientIp } from \"./security.ts\";\nimport {\n\ttype AthenaEmbeddedSocialRuntime,\n\tcomposeEmbeddedSocialRuntime,\n\tresolveSocialEncryptionSecret,\n} from \"./social/runtime.ts\";\nimport { PostgresAuthStores } from \"./stores.ts\";\nimport type { createLocalTokenAuthority } from \"./token-authority.ts\";\n\nexport type AuthRuntimeTokenAuthority = Awaited<\n\tReturnType<typeof createLocalTokenAuthority>\n>;\n\nexport type AuthRuntimeMutate = <\n\tE extends AthenaAuthImplementedDomainEvent,\n\tTResult,\n>(\n\tinput: Omit<\n\t\tExecuteAuthMutationOptions<E, TResult>,\n\t\t\"auditWriter\" | \"hooks\" | \"transaction\"\n\t>,\n) => Promise<TResult>;\n\nexport type AuthRuntimeEmitMail = (\n\tinput: Parameters<typeof emitAuthEmail>[0],\n) => ReturnType<typeof emitAuthEmail>;\n\nexport interface AuthRuntimeDependencies {\n\tbridgeCodeStore: AuthBridgeCodeStore;\n\tclose(): Promise<void>;\n\tconfig: NormalizedAthenaAuthConfig;\n\temitIfRecipient: (\n\t\trecipient: string | null | undefined,\n\t\tinput: Omit<Parameters<typeof emitAuthEmail>[0], \"recipient\">,\n\t) => Promise<void>;\n\temitMail: AuthRuntimeEmitMail;\n\tensureReady(): Promise<AthenaAuthStores>;\n\tgetConnectionString(): string | undefined;\n\tgetDatabase(): AthenaAuthDatabase | undefined;\n\tgetBridgeCodeStore(): AuthBridgeCodeStore;\n\tgetDelivery(): AthenaEmailDeliveryPort | undefined;\n\tgetEmailStore(): AthenaAuthEmailStore;\n\tgetTokenAuthority(): AuthRuntimeTokenAuthority | undefined;\n\tgetSocialRuntime(): Promise<AthenaEmbeddedSocialRuntime | null>;\n\thasher: AthenaAuthPasswordHasher;\n\thookRequest: (\n\t\trequest: Request,\n\t\tpath: string,\n\t) => {\n\t\tipAddress?: string;\n\t\tmethod: string;\n\t\tpath: string;\n\t\tuserAgent?: string;\n\t};\n\thooksRef?: CreateAthenaAuthRuntimeOptions[\"hooks\"];\n\tidentityOf: (user?: {\n\t\temail?: string | null;\n\t\tid: string;\n\t\tname?: string | null;\n\t}) => string;\n\tissueSession: (\n\t\trequest: Request,\n\t\tcurrentStores: AthenaAuthStores,\n\t\tuserId: string,\n\t\theaders: Headers,\n\t) => Promise<AuthSessionRow>;\n\tmigrate(): Promise<void>;\n\tmutate: AuthRuntimeMutate;\n\tobservability: ReturnType<typeof normalizeAthenaAuthObservability>;\n\townsDatabase: boolean;\n\tpasskeyOnboarding?: CreateAthenaAuthRuntimeOptions[\"passkeyOnboarding\"];\n\tpasskeyRelyingParty?: AthenaPasskeyRelyingParty;\n\tpasskeyResolver?: PasskeyRelyingPartyResolver;\n\trateLimiter: MemoryRateLimiter;\n\trequireSession: (\n\t\trequest: Request,\n\t\tcurrentStores: AthenaAuthStores,\n\t) => Promise<{\n\t\tsession: AuthSessionRow;\n\t\ttoken: string;\n\t\tuser: AuthUserRow;\n\t}>;\n\tresolveSession: (\n\t\trequest: Request,\n\t\tcurrentStores: AthenaAuthStores,\n\t) => Promise<{\n\t\tsession: AuthSessionRow;\n\t\ttoken: string;\n\t\tuser: AuthUserRow;\n\t} | null>;\n\tsetDatabase(next: AthenaAuthDatabase | undefined): void;\n\tsetDelivery(next: AthenaEmailDeliveryPort | undefined): void;\n\tsetTokenAuthority(next: AuthRuntimeTokenAuthority | undefined): void;\n}\n\nexport function createRuntimeDependencies(\n\toptions: CreateAthenaAuthRuntimeOptions = {},\n): AuthRuntimeDependencies {\n\tconst config =\n\t\toptions.config ??\n\t\tnormalizeAthenaAuthConfig({\n\t\t\tbasePath: options.basePath,\n\t\t\tmode: \"local\",\n\t\t\tsecret: options.secret,\n\t\t});\n\tconst passkeyEnvironment =\n\t\tprocess.env.NODE_ENV === \"production\" ? \"production\" : \"development\";\n\tlet passkeyRelyingParty: AthenaPasskeyRelyingParty | undefined;\n\tlet passkeyResolver: PasskeyRelyingPartyResolver | undefined;\n\tif (passkeyEnvironment === \"development\" || config.passkeyConfigured) {\n\t\tpasskeyRelyingParty = createPasskeyRelyingPartySnapshot({\n\t\t\tappIdentity: config.appIdentity,\n\t\t\tenvironment: passkeyEnvironment,\n\t\t\tpasskey: config.passkey,\n\t\t\trequired: config.passkey.enabled,\n\t\t\ttrustedOrigins: config.security.trustedOrigins,\n\t\t});\n\t\tpasskeyResolver = createPasskeyRelyingPartyResolver(passkeyRelyingParty);\n\t}\n\tconst hasher = options.hasher ?? createArgon2PasswordHasher();\n\tconst rateLimiter = new MemoryRateLimiter(20, 60_000);\n\tconst hasExternalDatabase = Boolean(options.database);\n\tconst rawMemoryStores =\n\t\toptions.stores ?? (options.database ? undefined : new MemoryAuthStores());\n\tconst memoryStores =\n\t\trawMemoryStores && !hasExternalDatabase\n\t\t\t? instrumentAuthStoreMethods(rawMemoryStores)\n\t\t\t: rawMemoryStores;\n\tlet database: AthenaAuthDatabase | undefined =\n\t\ttypeof options.database === \"string\" ? undefined : options.database;\n\tconst connectionString =\n\t\ttypeof options.database === \"string\" ? options.database : undefined;\n\tlet stores: AthenaAuthStores | undefined = memoryStores;\n\tlet runtimeKeyMaterial: string | undefined;\n\tlet ready: Promise<void> | undefined;\n\tconst ownsDatabase = typeof options.database === \"string\";\n\tlet emailStore: AthenaAuthEmailStore = new MemoryAuthEmailStore();\n\tconst memoryBridgeCodeStore = createMemoryAuthBridgeCodeStore();\n\tlet postgresBridgeCodeStore: AuthBridgeCodeStore | undefined;\n\tlet delivery = options.delivery;\n\tlet tokenAuthority:\n\t\t| Awaited<ReturnType<typeof createLocalTokenAuthority>>\n\t\t| undefined;\n\tconst emitMail = (input: Parameters<typeof emitAuthEmail>[0]) =>\n\t\temitAuthEmail(input, {\n\t\t\tget store() {\n\t\t\t\treturn emailStore;\n\t\t\t},\n\t\t\tget delivery() {\n\t\t\t\treturn delivery;\n\t\t\t},\n\t\t\tlegacySend: options.legacySend,\n\t\t});\n\tconst identityOf = (user?: {\n\t\temail?: string | null;\n\t\tid: string;\n\t\tname?: string | null;\n\t}) => user?.email ?? user?.name ?? user?.id ?? \"member\";\n\tconst emitIfRecipient = async (\n\t\trecipient: string | null | undefined,\n\t\tinput: Omit<Parameters<typeof emitAuthEmail>[0], \"recipient\">,\n\t) => {\n\t\tif (!recipient) {\n\t\t\treturn;\n\t\t}\n\t\tawait emitMail({ ...input, recipient });\n\t};\n\n\tconst ensureReady = async (): Promise<AthenaAuthStores> => {\n\t\tif (!ready) {\n\t\t\tready = (async () => {\n\t\t\t\tif (!stores) {\n\t\t\t\t\tif (!database) {\n\t\t\t\t\t\tif (!connectionString) {\n\t\t\t\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\t\t\t\tnew Error(\"Local Athena Auth requires a database\"),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatabase = await createPostgresAuthDatabase(connectionString);\n\t\t\t\t\t}\n\t\t\t\t\tif (options.autoMigrate === true) {\n\t\t\t\t\t\tawait migrateAthenaAuthSchema(database);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait assertAthenaAuthSchemaCompatible(database);\n\t\t\t\t\t}\n\t\t\t\t\tconst resolvedKey = await resolveRuntimeKey(\n\t\t\t\t\t\tdatabase,\n\t\t\t\t\t\toptions.secret ?? config.secret,\n\t\t\t\t\t);\n\t\t\t\t\truntimeKeyMaterial = resolvedKey.material;\n\t\t\t\t\tstores = new PostgresAuthStores(database);\n\t\t\t\t\temailStore = new PostgresAuthEmailStore(database);\n\t\t\t\t\tpostgresBridgeCodeStore = createPostgresAuthBridgeCodeStore(database);\n\t\t\t\t}\n\t\t\t})();\n\t\t}\n\t\tawait ready;\n\t\tif (!stores) {\n\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\tnew Error(\"Auth stores were not initialized\"),\n\t\t\t);\n\t\t}\n\t\treturn stores;\n\t};\n\n\tconst observability =\n\t\tconfig.observability ?? normalizeAthenaAuthObservability();\n\tconst auditSink: MemoryAuthAuditSink = { entries: [] };\n\tconst resolveAuditWriter = (): AthenaAuthAuditWriter | undefined => {\n\t\tif (!observability.auditLog) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (database) {\n\t\t\treturn createPostgresAuthAuditWriter();\n\t\t}\n\t\treturn createMemoryAuthAuditWriter(auditSink);\n\t};\n\n\tlet mutationTransaction: AuthMutationTransaction | undefined;\n\tconst ensureTransaction = async (): Promise<AuthMutationTransaction> => {\n\t\tconst currentStores = await ensureReady();\n\t\tmutationTransaction ??= createAuthMutationTransaction({\n\t\t\tauditSink,\n\t\t\tdatabase,\n\t\t\tpersistAudit: observability.auditLog,\n\t\t\tstores: currentStores,\n\t\t});\n\t\treturn mutationTransaction;\n\t};\n\n\tconst hookRequest = (request: Request, path: string) => ({\n\t\tipAddress:\n\t\t\trequestClientIp(request, config.security.trustedProxy) ?? undefined,\n\t\tmethod: request.method.toUpperCase(),\n\t\tpath,\n\t\tuserAgent: request.headers.get(\"user-agent\") ?? undefined,\n\t});\n\n\tconst mutate = async <\n\t\tE extends AthenaAuthImplementedDomainEvent,\n\t\tTResult = any,\n\t>(\n\t\tinput: Omit<\n\t\t\tExecuteAuthMutationOptions<E, TResult>,\n\t\t\t\"auditWriter\" | \"hooks\" | \"transaction\"\n\t\t>,\n\t): Promise<TResult> =>\n\t\texecuteAuthMutation({\n\t\t\t...input,\n\t\t\tauditWriter: resolveAuditWriter(),\n\t\t\thooks: options.hooks,\n\t\t\ttransaction: await ensureTransaction(),\n\t\t} as ExecuteAuthMutationOptions<E, TResult>);\n\n\tconst resolveSession = async (\n\t\trequest: Request,\n\t\tcurrentStores: AthenaAuthStores,\n\t): Promise<{\n\t\tsession: AuthSessionRow;\n\t\ttoken: string;\n\t\tuser: AuthUserRow;\n\t} | null> =>\n\t\ttimeAuthSpan(\"session_lookup\", async () => {\n\t\t\tconst token =\n\t\t\t\treadBearerToken(request.headers.get(\"authorization\")) ??\n\t\t\t\treadSessionTokenFromCookies(\n\t\t\t\t\trequest.headers.get(\"cookie\"),\n\t\t\t\t\tconfig.session.cookieName,\n\t\t\t\t);\n\t\t\tif (!token) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst session = await currentStores.getSessionByToken(token);\n\t\t\tif (!session) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst user = await timeAuthSpan(\"user_lookup\", () =>\n\t\t\t\tcurrentStores.getUserById(session.user_id),\n\t\t\t);\n\t\t\tif (!user) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (user.banned && !isUserEffectivelyBanned(user)) {\n\t\t\t\tawait currentStores.updateUser(user.id, {\n\t\t\t\t\tbanned: false,\n\t\t\t\t\tbanExpires: null,\n\t\t\t\t\tbanReason: null,\n\t\t\t\t});\n\t\t\t\tuser.banned = false;\n\t\t\t\tuser.ban_expires = null;\n\t\t\t\tuser.ban_reason = null;\n\t\t\t} else if (isUserEffectivelyBanned(user)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t// AUTH-ORG-CTX-001: drop a stale activeOrganizationId on every resolve.\n\t\t\tconst sessionWithOrg = await normalizeSessionActiveOrganization(\n\t\t\t\tsession,\n\t\t\t\tcurrentStores,\n\t\t\t);\n\t\t\tif (\n\t\t\t\t!config.session.disableSessionRefresh &&\n\t\t\t\tDate.now() - new Date(sessionWithOrg.updated_at).getTime() >=\n\t\t\t\tconfig.session.updateAgeSeconds * 1000\n\t\t\t) {\n\t\t\t\tawait timeAuthSpan(\"session_refresh\", async () => {\n\t\t\t\t\tconst expiresAt = new Date(\n\t\t\t\t\t\tDate.now() + config.session.expiresInSeconds * 1000,\n\t\t\t\t\t);\n\t\t\t\t\tawait currentStores.updateSessionExpiry(token, expiresAt);\n\t\t\t\t\tsessionWithOrg.expires_at = expiresAt;\n\t\t\t\t\tsessionWithOrg.updated_at = new Date();\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn { session: sessionWithOrg, token, user };\n\t\t});\n\n\tconst requireSession = async (\n\t\trequest: Request,\n\t\tcurrentStores: AthenaAuthStores,\n\t) => {\n\t\tconst resolved = await resolveSession(request, currentStores);\n\t\tif (!resolved) {\n\t\t\tif (\n\t\t\t\treadBearerToken(request.headers.get(\"authorization\")) ||\n\t\t\t\treadSessionTokenFromCookies(\n\t\t\t\t\trequest.headers.get(\"cookie\"),\n\t\t\t\t\tconfig.session.cookieName,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrow AthenaAuthRuntimeError.sessionNotFound();\n\t\t\t}\n\t\t\tthrow AthenaAuthRuntimeError.unauthenticated();\n\t\t}\n\t\treturn resolved;\n\t};\n\n\tconst issueSession = async (\n\t\trequest: Request,\n\t\tcurrentStores: AthenaAuthStores,\n\t\tuserId: string,\n\t\theaders: Headers,\n\t) => {\n\t\tconst expiresAt = new Date(\n\t\t\tDate.now() + config.session.expiresInSeconds * 1000,\n\t\t);\n\t\tconst session = await currentStores.createSession({\n\t\t\texpiresAt,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tipAddress: requestClientIp(request, config.security.trustedProxy),\n\t\t\ttoken: createSessionToken(),\n\t\t\tuserAgent: request.headers.get(\"user-agent\"),\n\t\t\tuserId,\n\t\t});\n\t\tawait currentStores.updateUser(userId, { lastSignInAt: new Date() });\n\t\theaders.append(\n\t\t\t\"set-cookie\",\n\t\t\tcreateSessionCookieHeader(session.token, {\n\t\t\t\tcookieName: config.session.cookieName,\n\t\t\t\texpiresAt,\n\t\t\t\tsecure: shouldSetSecureCookie(request, config.security.cookieSecure),\n\t\t\t}),\n\t\t);\n\t\treturn session;\n\t};\n\n\tconst resolveBridgeCodeStore = async (): Promise<AuthBridgeCodeStore> => {\n\t\tif (memoryStores && !hasExternalDatabase && !connectionString) {\n\t\t\treturn memoryBridgeCodeStore;\n\t\t}\n\t\tawait ensureReady();\n\t\tif (!postgresBridgeCodeStore) {\n\t\t\tconst db = database;\n\t\t\tif (!db) {\n\t\t\t\tthrow AthenaAuthRuntimeError.internal(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\"Database-backed Auth runtime requires a Postgres bridge code store\",\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tpostgresBridgeCodeStore = createPostgresAuthBridgeCodeStore(db);\n\t\t}\n\t\treturn postgresBridgeCodeStore;\n\t};\n\n\tlet socialRuntime: AthenaEmbeddedSocialRuntime | null | undefined;\n\tconst getSocialRuntime =\n\t\tasync (): Promise<AthenaEmbeddedSocialRuntime | null> => {\n\t\t\tif (socialRuntime !== undefined) {\n\t\t\t\treturn socialRuntime;\n\t\t\t}\n\t\t\tawait ensureReady();\n\t\t\tsocialRuntime = composeEmbeddedSocialRuntime({\n\t\t\t\tdatabase,\n\t\t\t\tsecret: resolveSocialEncryptionSecret({\n\t\t\t\t\tconfigSecret: config.secret,\n\t\t\t\t\texplicitSecret: options.secret,\n\t\t\t\t\truntimeKeyMaterial,\n\t\t\t\t}),\n\t\t\t\tsocial: config.social,\n\t\t\t});\n\t\t\treturn socialRuntime;\n\t\t};\n\n\tconst bridgeCodeStore: AuthBridgeCodeStore = {\n\t\tconsume: async (input) => (await resolveBridgeCodeStore()).consume(input),\n\t\tdeleteExpired: async (now) =>\n\t\t\t(await resolveBridgeCodeStore()).deleteExpired(now),\n\t\tissue: async (input) => (await resolveBridgeCodeStore()).issue(input),\n\t\trevokeForSession: async (sessionId, reason) =>\n\t\t\t(await resolveBridgeCodeStore()).revokeForSession(sessionId, reason),\n\t};\n\n\treturn {\n\t\tbridgeCodeStore,\n\t\tclose: async () => {\n\t\t\tif (ownsDatabase) {\n\t\t\t\tawait database?.close?.();\n\t\t\t}\n\t\t},\n\t\tconfig,\n\t\temitIfRecipient,\n\t\temitMail,\n\t\tensureReady,\n\t\tgetBridgeCodeStore: () => bridgeCodeStore,\n\t\tgetConnectionString: () => connectionString,\n\t\tgetDatabase: () => database,\n\t\tgetDelivery: () => delivery,\n\t\tgetEmailStore: () => emailStore,\n\t\tgetTokenAuthority: () => tokenAuthority,\n\t\tgetSocialRuntime,\n\t\thasher,\n\t\thookRequest,\n\t\thooksRef: options.hooks,\n\t\tidentityOf,\n\t\tissueSession,\n\t\tmigrate: async () => {\n\t\t\tif (!database) {\n\t\t\t\tif (!connectionString) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdatabase = await createPostgresAuthDatabase(connectionString);\n\t\t\t}\n\t\t\tawait migrateAthenaAuthSchema(database);\n\t\t},\n\t\tmutate,\n\t\tobservability,\n\t\townsDatabase,\n\t\tpasskeyOnboarding: options.passkeyOnboarding,\n\t\tpasskeyRelyingParty,\n\t\tpasskeyResolver,\n\t\trateLimiter,\n\t\trequireSession,\n\t\tresolveSession,\n\t\tsetDatabase: (next) => {\n\t\t\tdatabase = next;\n\t\t},\n\t\tsetDelivery: (next) => {\n\t\t\tdelivery = next;\n\t\t},\n\t\tsetTokenAuthority: (next) => {\n\t\t\ttokenAuthority = next;\n\t\t},\n\t};\n}\n","import type { AthenaAuthImplementedDomainEvent } from \"../hooks/events.ts\";\nimport type { AthenaAuthHookEventPayloads } from \"../hooks/types.ts\";\nimport type {\n\tAthenaAuthMutationKind,\n\tAthenaAuthPreviousPolicy,\n\tAthenaAuthResultPolicy,\n} from \"../observability/contract.ts\";\nimport type { AthenaAuthActor } from \"./context.ts\";\n\nexport interface AthenaAuthEventSubject {\n\tid: string;\n\ttype: string;\n}\n\nexport interface AthenaAuthAuditResolveContext<\n\tE extends AthenaAuthImplementedDomainEvent = AthenaAuthImplementedDomainEvent,\n> {\n\tactor: AthenaAuthActor;\n\tinput: AthenaAuthHookEventPayloads[E][\"input\"];\n\tprevious: AthenaAuthHookEventPayloads[E][\"previous\"];\n\tresult: 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\tE extends AthenaAuthImplementedDomainEvent = AthenaAuthImplementedDomainEvent,\n> {\n\taudit: boolean;\n\tmutationKind: AthenaAuthMutationKind;\n\tprevious: AthenaAuthPreviousPolicy;\n\tresolveOrganizationId?: (\n\t\tcontext: AthenaAuthAuditResolveContext<E>,\n\t) => string | undefined;\n\tresolveSubject: (\n\t\tcontext: AthenaAuthAuditResolveContext<E>,\n\t) => AthenaAuthEventSubject | undefined;\n\tresult: AthenaAuthResultPolicy;\n\tsubjectType: string;\n}\n\nfunction subject(\n\ttype: string,\n\tid: string | null | undefined,\n): AthenaAuthEventSubject | undefined {\n\tif (typeof id !== \"string\" || id.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn { id, type };\n}\n\nfunction definedId(value: string | null | undefined): string | undefined {\n\treturn 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\t\"account.link\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ result }) => subject(\"account\", result.account.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"account\",\n\t},\n\t\"account.unlink\": {\n\t\taudit: true,\n\t\tmutationKind: \"delete\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ result }) => subject(\"account\", result.accountId),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"account\",\n\t},\n\t\"apiKey.create\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ result }) => subject(\"api_key\", result.apiKey.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"api_key\",\n\t},\n\t\"apiKey.delete\": {\n\t\taudit: true,\n\t\tmutationKind: \"delete\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\"api_key\", result.id ?? previous?.apiKey.id),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"api_key\",\n\t},\n\t\"apiKey.update\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ result }) => subject(\"api_key\", result.apiKey.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"api_key\",\n\t},\n\t\"organization.create\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveOrganizationId: ({ result }) => result.organization.id,\n\t\tresolveSubject: ({ result }) =>\n\t\t\tsubject(\"organization\", result.organization.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"organization\",\n\t},\n\t\"organization.delete\": {\n\t\taudit: true,\n\t\tmutationKind: \"delete\",\n\t\tprevious: \"required\",\n\t\tresolveOrganizationId: ({ previous, result }) =>\n\t\t\tdefinedId(result.id) ?? previous?.organization.id,\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\"organization\", result.id ?? previous?.organization.id),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"organization\",\n\t},\n\t\"organization.invitation.accept\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"required\",\n\t\tresolveOrganizationId: ({ previous, result }) =>\n\t\t\tdefinedId(result.invitation.organizationId) ??\n\t\t\tprevious?.invitation.organizationId,\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\n\t\t\t\t\"organization.invitation\",\n\t\t\t\tresult.invitation.id ?? previous?.invitation.id,\n\t\t\t),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"organization.invitation\",\n\t},\n\t\"organization.invitation.cancel\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"required\",\n\t\tresolveOrganizationId: ({ previous, result }) =>\n\t\t\tdefinedId(result.invitation.organizationId) ??\n\t\t\tprevious?.invitation.organizationId,\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\n\t\t\t\t\"organization.invitation\",\n\t\t\t\tresult.invitation.id ?? previous?.invitation.id,\n\t\t\t),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"organization.invitation\",\n\t},\n\t\"organization.invitation.create\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveOrganizationId: ({ result }) => result.invitation.organizationId,\n\t\tresolveSubject: ({ result }) =>\n\t\t\tsubject(\"organization.invitation\", result.invitation.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"organization.invitation\",\n\t},\n\t\"organization.invitation.reject\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"required\",\n\t\tresolveOrganizationId: ({ previous, result }) =>\n\t\t\tdefinedId(result.invitation.organizationId) ??\n\t\t\tprevious?.invitation.organizationId,\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\n\t\t\t\t\"organization.invitation\",\n\t\t\t\tresult.invitation.id ?? previous?.invitation.id,\n\t\t\t),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"organization.invitation\",\n\t},\n\t\"organization.member.add\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveOrganizationId: ({ result }) => result.member.organizationId,\n\t\tresolveSubject: ({ result }) =>\n\t\t\tsubject(\"organization.member\", result.member.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"organization.member\",\n\t},\n\t\"organization.member.invite.reminder\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"required\",\n\t\tresolveOrganizationId: ({ previous, result }) =>\n\t\t\tdefinedId(result.invitation.organizationId) ??\n\t\t\tprevious?.invitation.organizationId,\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\n\t\t\t\t\"organization.invitation\",\n\t\t\t\tresult.invitation.id ?? previous?.invitation.id,\n\t\t\t),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"organization.invitation\",\n\t},\n\t\"organization.member.remove\": {\n\t\taudit: true,\n\t\tmutationKind: \"delete\",\n\t\tprevious: \"required\",\n\t\tresolveOrganizationId: ({ previous, result }) =>\n\t\t\tdefinedId(result.organizationId) ?? previous?.member.organizationId,\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\"organization.member\", result.id ?? previous?.member.id),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"organization.member\",\n\t},\n\t\"organization.member.role.update\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveOrganizationId: ({ result }) => result.member.organizationId,\n\t\tresolveSubject: ({ result }) =>\n\t\t\tsubject(\"organization.member\", result.member.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"organization.member\",\n\t},\n\t\"organization.update\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveOrganizationId: ({ result }) => definedId(result.organization.id),\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\n\t\t\t\t\"organization\",\n\t\t\t\tdefinedId(result.organization.id) ?? previous?.organization.id,\n\t\t\t),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"organization\",\n\t},\n\t\"passkey.delete\": {\n\t\taudit: true,\n\t\tmutationKind: \"delete\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\"passkey\", result.id ?? previous?.passkey.id),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"passkey\",\n\t},\n\t\"passkey.register\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ result }) => subject(\"passkey\", result.passkey.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"passkey\",\n\t},\n\t\"passkey.update\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ result }) => subject(\"passkey\", result.passkey.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"passkey\",\n\t},\n\t\"session.activeOrganization.update\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveOrganizationId: ({ previous, result }) =>\n\t\t\tdefinedId(result.organizationId) ?? definedId(previous?.organizationId),\n\t\tresolveSubject: ({ actor }) => subject(\"session\", actor?.sessionId),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"session\",\n\t},\n\t\"session.impersonation.end\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ input, previous, result }) =>\n\t\t\tsubject(\"session\", result.id ?? previous?.session.id ?? input.sessionId),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"session\",\n\t},\n\t\"session.impersonation.start\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ result }) => subject(\"session\", result.session.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"session\",\n\t},\n\t\"session.issue\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ result }) => subject(\"session\", result.session.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"session\",\n\t},\n\t\"session.revoke\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\"session\", result.id ?? previous?.session.id),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"session\",\n\t},\n\t\"twoFactor.disable\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ actor, result }) =>\n\t\t\tsubject(\"user\", result.userId ?? actor?.userId),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"twoFactor.enable\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ actor, result }) =>\n\t\t\tsubject(\"user\", result.userId ?? actor?.userId),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.ban\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ result }) => subject(\"user\", result.user.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.create\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ result }) => subject(\"user\", result.user.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.delete\": {\n\t\taudit: true,\n\t\tmutationKind: \"delete\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ previous, result }) =>\n\t\t\tsubject(\"user\", result.id ?? previous?.user.id),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.email.update\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ result }) => subject(\"user\", result.user.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.email.verify\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ result }) => subject(\"user\", result.user.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.password.change\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ actor, result }) =>\n\t\t\tsubject(\"user\", result.userId ?? actor?.userId),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.password.reset\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ actor, result }) =>\n\t\t\tsubject(\"user\", result.userId ?? actor?.userId),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.role.update\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ result }) => subject(\"user\", result.user.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.security.alert\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ actor }) => subject(\"user\", actor?.userId),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.sign-in.email\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ actor }) => subject(\"user\", actor?.userId),\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.sign-in.social\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"none\",\n\t\tresolveSubject: ({ result }) => subject(\"user\", result.user.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.unban\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ result }) => subject(\"user\", result.user.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"user\",\n\t},\n\t\"user.update\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveSubject: ({ result }) => subject(\"user\", result.user.id),\n\t\tresult: \"resource\",\n\t\tsubjectType: \"user\",\n\t},\n} as const satisfies {\n\t[K in AthenaAuthImplementedDomainEvent]: AthenaAuthEventDefinition<K>;\n};\n\nexport function isAuditedAuthEvent(\n\tevent: AthenaAuthImplementedDomainEvent,\n): boolean {\n\treturn ATHENA_AUTH_EVENT_DEFINITIONS[event].audit;\n}\n\nexport function resolveAuthEventSubject<\n\tE extends AthenaAuthImplementedDomainEvent,\n>(\n\tevent: E,\n\tcontext: AthenaAuthAuditResolveContext<E>,\n): AthenaAuthEventSubject | undefined {\n\tconst ir = ATHENA_AUTH_EVENT_DEFINITIONS[event] as {\n\t\tresolveSubject: (\n\t\t\tctx: AthenaAuthAuditResolveContext<E>,\n\t\t) => AthenaAuthEventSubject | undefined;\n\t};\n\treturn 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\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn null;\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction isPresentSnapshot(value: unknown): boolean {\n\tif (value === undefined || value === null) {\n\t\treturn false;\n\t}\n\tconst record = asRecord(value);\n\tif (record && Object.keys(record).length === 0) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isTombstoneReceipt(value: unknown): boolean {\n\tconst record = asRecord(value);\n\treturn (\n\t\trecord !== null &&\n\t\trecord.deleted === true &&\n\t\ttypeof record.id === \"string\" &&\n\t\trecord.id.length > 0\n\t);\n}\n\nfunction isSessionRevokeReceipt(value: unknown): boolean {\n\tconst record = asRecord(value);\n\treturn (\n\t\trecord !== null &&\n\t\trecord.revoked === true &&\n\t\ttypeof record.id === \"string\" &&\n\t\trecord.id.length > 0 &&\n\t\ttypeof record.userId === \"string\" &&\n\t\trecord.userId.length > 0\n\t);\n}\n\nfunction auditError(code: string): AthenaAuthRuntimeError {\n\treturn new AthenaAuthRuntimeError(500, code, {\n\t\tcode,\n\t\tinternalMessage: code,\n\t});\n}\n\nexport function validateAuthAuditEntry(\n\tentry: AthenaAuthAuditEntry,\n\tir: {\n\t\tmutationKind: string;\n\t\tprevious: string;\n\t\tresolveOrganizationId?: unknown;\n\t\tresult: string;\n\t\tsubjectType?: string;\n\t},\n): void {\n\tif (!isPresentSnapshot(entry.result)) {\n\t\tthrow auditError(\"ATHENA_AUTH_AUDIT_RESULT_REQUIRED\");\n\t}\n\tif (ir.mutationKind === \"delete\" && !isTombstoneReceipt(entry.result)) {\n\t\tthrow auditError(\"ATHENA_AUTH_AUDIT_INVALID_RESULT\");\n\t}\n\tif (\n\t\t(entry.event === \"session.revoke\" ||\n\t\t\tentry.event === \"session.impersonation.end\") &&\n\t\t!isSessionRevokeReceipt(entry.result)\n\t) {\n\t\tthrow auditError(\"ATHENA_AUTH_AUDIT_INVALID_RESULT\");\n\t}\n\tif (ir.result === \"resource\" && asRecord(entry.result) === null) {\n\t\tthrow auditError(\"ATHENA_AUTH_AUDIT_INVALID_RESULT\");\n\t}\n\tif (ir.previous === \"required\" && !isPresentSnapshot(entry.previous)) {\n\t\tthrow auditError(\"ATHENA_AUTH_AUDIT_PREVIOUS_REQUIRED\");\n\t}\n\tif (\n\t\ttypeof entry.subject?.id !== \"string\" ||\n\t\tentry.subject.id.length === 0 ||\n\t\ttypeof entry.subject.type !== \"string\" ||\n\t\tentry.subject.type.length === 0\n\t) {\n\t\tthrow auditError(\"ATHENA_AUTH_AUDIT_SUBJECT_REQUIRED\");\n\t}\n\tif (entry.subject.type !== ir.subjectType) {\n\t\tthrow auditError(\"ATHENA_AUTH_AUDIT_SUBJECT_TYPE_MISMATCH\");\n\t}\n\tif (\n\t\ttypeof ir.resolveOrganizationId === \"function\" &&\n\t\t(typeof entry.organizationId !== \"string\" ||\n\t\t\tentry.organizationId.length === 0)\n\t) {\n\t\tthrow auditError(\"ATHENA_AUTH_AUDIT_ORGANIZATION_UNRESOLVED\");\n\t}\n}\n","import { AthenaAuthRuntimeError } from \"../local/errors.ts\";\nimport type { AthenaAuthImplementedDomainEvent } from \"./events.ts\";\nimport type {\n\tAthenaAuthAfterHookPayload,\n\tAthenaAuthBeforeHookPayload,\n\tAthenaAuthHookContext,\n\tAthenaAuthHookErrorInput,\n\tAthenaAuthHookHandler,\n\tAthenaAuthHookHandlerList,\n\tAthenaAuthHooks,\n} from \"./types.ts\";\n\nfunction asHandlerList<\n\tE extends AthenaAuthImplementedDomainEvent,\n\tPhase extends \"after\" | \"before\",\n>(\n\tvalue: AthenaAuthHookHandlerList<E, Phase> | undefined,\n): AthenaAuthHookHandler<E, Phase>[] {\n\tif (!value) {\n\t\treturn [];\n\t}\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction toHookRejected(error: unknown): AthenaAuthRuntimeError {\n\tif (error instanceof AthenaAuthRuntimeError) {\n\t\treturn error;\n\t}\n\tconst message =\n\t\terror instanceof Error && error.message.trim()\n\t\t\t? error.message\n\t\t\t: \"Auth hook rejected the operation\";\n\treturn new AthenaAuthRuntimeError(400, message, {\n\t\tcause: error,\n\t\tcode: \"ATHENA_AUTH_HOOK_REJECTED\",\n\t});\n}\n\nasync function reportHookError(\n\thooks: AthenaAuthHooks | undefined,\n\tinput: AthenaAuthHookErrorInput,\n): Promise<void> {\n\tif (!hooks?.onError) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait hooks.onError(input);\n\t} catch (error) {\n\t\tconsole.error(\"[athena-auth]\", {\n\t\t\tcode: \"ATHENA_AUTH_HOOK_ON_ERROR_FAILED\",\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\tevent: input.event,\n\t\t\teventId: input.eventId,\n\t\t\tphase: \"onError\",\n\t\t\ttraceId: input.traceId,\n\t\t});\n\t}\n}\n\nexport async function runAuthBeforeHooks<\n\tE extends AthenaAuthImplementedDomainEvent,\n>(\n\thooks: AthenaAuthHooks | undefined,\n\tpayload: AthenaAuthBeforeHookPayload<E>,\n): Promise<void> {\n\tconst handlers = asHandlerList(\n\t\thooks?.before?.[payload.event] as\n\t\t\t| AthenaAuthHookHandlerList<E, \"before\">\n\t\t\t| undefined,\n\t);\n\tfor (const handler of handlers) {\n\t\ttry {\n\t\t\tawait handler(payload);\n\t\t} catch (error) {\n\t\t\tawait reportHookError(hooks, {\n\t\t\t\terror,\n\t\t\t\tevent: payload.event,\n\t\t\t\teventId: payload.eventId,\n\t\t\t\tphase: \"before\",\n\t\t\t\ttraceId: payload.traceId,\n\t\t\t});\n\t\t\tthrow toHookRejected(error);\n\t\t}\n\t}\n}\n\nexport async function runAuthAfterHooks<\n\tE extends AthenaAuthImplementedDomainEvent,\n>(\n\thooks: AthenaAuthHooks | undefined,\n\tpayload: AthenaAuthAfterHookPayload<E>,\n): Promise<void> {\n\tconst handlers = asHandlerList(\n\t\thooks?.after?.[payload.event] as\n\t\t\t| AthenaAuthHookHandlerList<E, \"after\">\n\t\t\t| undefined,\n\t);\n\tfor (const handler of handlers) {\n\t\ttry {\n\t\t\tawait handler(payload);\n\t\t} catch (error) {\n\t\t\tawait reportHookError(hooks, {\n\t\t\t\terror,\n\t\t\t\tevent: payload.event,\n\t\t\t\teventId: payload.eventId,\n\t\t\t\tphase: \"after\",\n\t\t\t\ttraceId: payload.traceId,\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function createAuthHookContext(\n\tcontext: Omit<AthenaAuthHookContext, \"eventId\">,\n\teventId = crypto.randomUUID(),\n): AthenaAuthHookContext {\n\treturn {\n\t\tactor: context.actor,\n\t\teventId,\n\t\trequest: context.request,\n\t\ttraceId: context.traceId,\n\t};\n}\n","import {\n\tATHENA_AUTH_EVENT_DEFINITIONS,\n\tisAuditedAuthEvent,\n\ttype AthenaAuthAuditResolveContext,\n\ttype AthenaAuthEventDefinition,\n\ttype AthenaAuthEventSubject,\n} from \"../domain/catalog.ts\";\nimport type {\n\tAthenaAuthActor,\n\tAthenaAuthRequestContext,\n} from \"../domain/context.ts\";\nimport type { AthenaAuthAuditWriter } from \"../observability/audit.ts\";\nimport type { AthenaAuthAuditEntry } from \"../observability/types.ts\";\nimport { currentAuthTrace } from \"../observability/traces.ts\";\nimport { validateAuthAuditEntry } from \"../observability/validate.ts\";\nimport type { AthenaAuthImplementedDomainEvent } from \"./events.ts\";\nimport {\n\tcreateAuthHookContext,\n\trunAuthAfterHooks,\n\trunAuthBeforeHooks,\n} from \"./runner.ts\";\nimport type {\n\tAthenaAuthMutationScope,\n\tAuthMutationTransaction,\n} from \"./scope.ts\";\nimport type {\n\tAthenaAuthHookEventPayloads,\n\tAthenaAuthHooks,\n} from \"./types.ts\";\n\nexport type AuthDomainMutate = <\n\tE extends AthenaAuthImplementedDomainEvent,\n\tTResult = any,\n>(\n\tinput: Omit<\n\t\tExecuteAuthMutationOptions<E, TResult>,\n\t\t\"auditWriter\" | \"hooks\" | \"transaction\"\n\t>,\n) => Promise<TResult>;\n\nexport interface AthenaAuthMutationContext {\n\tactor: AthenaAuthActor;\n\trequest: AthenaAuthRequestContext;\n\ttraceId: string;\n}\n\nexport interface AthenaAuthSecondaryEvent<\n\tE extends AthenaAuthImplementedDomainEvent = AthenaAuthImplementedDomainEvent,\n> {\n\tevent: E;\n\tinput: AthenaAuthHookEventPayloads[E][\"input\"];\n\tprevious?: AthenaAuthHookEventPayloads[E][\"previous\"];\n\tresult: AthenaAuthHookEventPayloads[E][\"result\"];\n}\n\ntype EventPreviousPolicy<E extends AthenaAuthImplementedDomainEvent> =\n\t(typeof ATHENA_AUTH_EVENT_DEFINITIONS)[E][\"previous\"];\n\nexport type PreviousOption<E extends AthenaAuthImplementedDomainEvent> =\n\tEventPreviousPolicy<E> extends \"required\"\n\t\t? () => Promise<AthenaAuthHookEventPayloads[E][\"previous\"]>\n\t\t: () => Promise<AthenaAuthHookEventPayloads[E][\"previous\"] | undefined>;\n\ntype PreviousField<E extends AthenaAuthImplementedDomainEvent> =\n\tEventPreviousPolicy<E> extends \"required\"\n\t\t? { previous: PreviousOption<E> }\n\t\t: { previous?: PreviousOption<E> };\n\nexport type ExecuteAuthMutationOptions<\n\tE extends AthenaAuthImplementedDomainEvent,\n\tTResult = any,\n> = {\n\tauditWriter?: AthenaAuthAuditWriter;\n\tcontext: AthenaAuthMutationContext;\n\tevent: E;\n\texecute: (scope: AthenaAuthMutationScope) => Promise<TResult>;\n\thooks?: AthenaAuthHooks;\n\tinput: AthenaAuthHookEventPayloads[E][\"input\"];\n\tpreviousOf?: (\n\t\tresult: TResult,\n\t) => AthenaAuthHookEventPayloads[E][\"previous\"] | undefined;\n\tresultOf: (result: any) => AthenaAuthHookEventPayloads[E][\"result\"];\n\tsecondaryEvents?: (result: any) => readonly AthenaAuthSecondaryEvent[];\n\tshouldPersistAudit?: (result: TResult) => boolean;\n\ttransaction: AuthMutationTransaction;\n} & PreviousField<E>;\n\nfunction eventDefinition<E extends AthenaAuthImplementedDomainEvent>(\n\tevent: E,\n): AthenaAuthEventDefinition<E> {\n\treturn ATHENA_AUTH_EVENT_DEFINITIONS[event] as AthenaAuthEventDefinition<E>;\n}\n\nasync function timePhase<T>(\n\tname: \"after_hooks\" | \"authorize\" | \"before_hooks\" | \"transaction\" | \"validate\",\n\tfn: () => Promise<T>,\n): Promise<T> {\n\tconst span = currentAuthTrace()?.phase(name);\n\ttry {\n\t\treturn await fn();\n\t} finally {\n\t\tspan?.finish();\n\t}\n}\n\nfunction resolveAuditOrganizationId<E extends AthenaAuthImplementedDomainEvent>(\n\tevent: E,\n\tcontext: AthenaAuthAuditResolveContext<E>,\n\tactor: AthenaAuthActor,\n): string | undefined {\n\tconst ir = eventDefinition(event);\n\tif (typeof ir.resolveOrganizationId === \"function\") {\n\t\treturn ir.resolveOrganizationId(context);\n\t}\n\treturn actor.organizationId;\n}\n\nfunction buildAuditEntry<E extends AthenaAuthImplementedDomainEvent>(input: {\n\tactor: AthenaAuthActor;\n\tevent: E;\n\teventId: string;\n\thookInput: AthenaAuthHookEventPayloads[E][\"input\"];\n\tprevious: AthenaAuthHookEventPayloads[E][\"previous\"];\n\trequest: AthenaAuthMutationContext[\"request\"];\n\tresult: AthenaAuthHookEventPayloads[E][\"result\"];\n\ttraceId: string;\n}): AthenaAuthAuditEntry {\n\tconst ir = eventDefinition(input.event);\n\tconst resolveContext = {\n\t\tactor: input.actor,\n\t\tinput: input.hookInput,\n\t\tprevious: input.previous,\n\t\tresult: input.result,\n\t} as AthenaAuthAuditResolveContext<E>;\n\tconst subject: AthenaAuthEventSubject | undefined =\n\t\tir.resolveSubject(resolveContext);\n\tconst organizationId = resolveAuditOrganizationId(\n\t\tinput.event,\n\t\tresolveContext,\n\t\tinput.actor,\n\t);\n\treturn {\n\t\tactor: input.actor,\n\t\tevent: input.event,\n\t\teventId: input.eventId,\n\t\tid: crypto.randomUUID(),\n\t\torganizationId,\n\t\toutcome: \"success\",\n\t\tprevious: input.previous,\n\t\trequest: {\n\t\t\tipAddress: input.request.ipAddress,\n\t\t\tuserAgent: input.request.userAgent,\n\t\t},\n\t\tresult: input.result,\n\t\tsubject,\n\t\ttraceId: input.traceId,\n\t};\n}\n\nexport async function executeAuthMutation<\n\tE extends AthenaAuthImplementedDomainEvent,\n\tTResult,\n>(options: ExecuteAuthMutationOptions<E, TResult>): Promise<TResult> {\n\tconst envelope = createAuthHookContext(options.context);\n\tcurrentAuthTrace()?.setActor(options.context.actor);\n\tcurrentAuthTrace()?.setEvent(options.event, envelope.eventId);\n\tconst previous = options.previous ? await options.previous() : undefined;\n\tawait timePhase(\"before_hooks\", () =>\n\t\trunAuthBeforeHooks(options.hooks, {\n\t\t\t...envelope,\n\t\t\tevent: options.event,\n\t\t\tinput: options.input,\n\t\t\tprevious,\n\t\t}),\n\t);\n\tlet secondaryWork: Array<{\n\t\tenvelope: ReturnType<typeof createAuthHookContext>;\n\t\textra: AthenaAuthSecondaryEvent;\n\t}> = [];\n\tconst result = await timePhase(\"transaction\", () =>\n\t\toptions.transaction(async (scope) => {\n\t\t\tconst executed = await options.execute(scope);\n\t\t\tconst persistAudit =\n\t\t\t\toptions.shouldPersistAudit?.(executed) !== false;\n\t\t\tconst secondary = options.secondaryEvents?.(executed) ?? [];\n\t\t\tsecondaryWork = secondary.map((extra) => ({\n\t\t\t\tenvelope: createAuthHookContext(options.context),\n\t\t\t\textra,\n\t\t\t}));\n\t\t\tif (persistAudit) {\n\t\t\t\tconst auditPrevious = options.previousOf?.(executed) ?? previous;\n\t\t\t\tif (options.auditWriter || scope.persistAudit) {\n\t\t\t\t\tconst persistRow = async (entry: AthenaAuthAuditEntry) => {\n\t\t\t\t\t\tif (options.auditWriter) {\n\t\t\t\t\t\t\tawait options.auditWriter.write(scope, entry);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait scope.persistAudit?.(entry);\n\t\t\t\t\t};\n\t\t\t\t\tconst primaryResult = options.resultOf(executed);\n\t\t\t\t\tif (isAuditedAuthEvent(options.event)) {\n\t\t\t\t\t\tconst primaryEntry = buildAuditEntry({\n\t\t\t\t\t\t\tactor: options.context.actor,\n\t\t\t\t\t\t\tevent: options.event,\n\t\t\t\t\t\t\teventId: envelope.eventId,\n\t\t\t\t\t\t\thookInput: options.input,\n\t\t\t\t\t\t\tprevious: auditPrevious,\n\t\t\t\t\t\t\trequest: options.context.request,\n\t\t\t\t\t\t\tresult: primaryResult,\n\t\t\t\t\t\t\ttraceId: options.context.traceId,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tvalidateAuthAuditEntry(\n\t\t\t\t\t\t\tprimaryEntry,\n\t\t\t\t\t\t\teventDefinition(options.event) as never,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tasync function writeAudit(\n\t\t\t\t\t\t\tentry: AthenaAuthAuditEntry,\n\t\t\t\t\t\t): Promise<void> {\n\t\t\t\t\t\t\tawait persistRow(entry);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait writeAudit(primaryEntry);\n\t\t\t\t\t\tfor (const { envelope: extraEnvelope, extra } of secondaryWork) {\n\t\t\t\t\t\t\tif (!isAuditedAuthEvent(extra.event)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst extraEntry = buildAuditEntry({\n\t\t\t\t\t\t\t\tactor: options.context.actor,\n\t\t\t\t\t\t\t\tevent: extra.event,\n\t\t\t\t\t\t\t\teventId: extraEnvelope.eventId,\n\t\t\t\t\t\t\t\thookInput: extra.input,\n\t\t\t\t\t\t\t\tprevious: extra.previous,\n\t\t\t\t\t\t\t\trequest: options.context.request,\n\t\t\t\t\t\t\t\tresult: extra.result,\n\t\t\t\t\t\t\t\ttraceId: options.context.traceId,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tvalidateAuthAuditEntry(\n\t\t\t\t\t\t\t\textraEntry,\n\t\t\t\t\t\t\t\teventDefinition(extra.event) as never,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tawait writeAudit(extraEntry);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const { envelope: extraEnvelope, extra } of secondaryWork) {\n\t\t\t\t\t\t\tif (!isAuditedAuthEvent(extra.event)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst extraEntry = buildAuditEntry({\n\t\t\t\t\t\t\t\tactor: options.context.actor,\n\t\t\t\t\t\t\t\tevent: extra.event,\n\t\t\t\t\t\t\t\teventId: extraEnvelope.eventId,\n\t\t\t\t\t\t\t\thookInput: extra.input,\n\t\t\t\t\t\t\t\tprevious: extra.previous,\n\t\t\t\t\t\t\t\trequest: options.context.request,\n\t\t\t\t\t\t\t\tresult: extra.result,\n\t\t\t\t\t\t\t\ttraceId: options.context.traceId,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tvalidateAuthAuditEntry(\n\t\t\t\t\t\t\t\textraEntry,\n\t\t\t\t\t\t\t\teventDefinition(extra.event) as never,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tawait persistRow(extraEntry);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn executed;\n\t\t}),\n\t);\n\tawait timePhase(\"after_hooks\", () =>\n\t\trunAuthAfterHooks(options.hooks, {\n\t\t\t...envelope,\n\t\t\tevent: options.event,\n\t\t\tinput: options.input,\n\t\t\tprevious: options.previousOf?.(result) ?? previous,\n\t\t\tresult: options.resultOf(result),\n\t\t}),\n\t);\n\tfor (const { envelope: extraEnvelope, extra } of secondaryWork) {\n\t\tawait runAuthAfterHooks(options.hooks, {\n\t\t\t...extraEnvelope,\n\t\t\tevent: extra.event,\n\t\t\tinput: extra.input,\n\t\t\tprevious: extra.previous,\n\t\t\tresult: extra.result,\n\t\t} as never);\n\t}\n\treturn result;\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\twrite(\n\t\tscope: AthenaAuthMutationScope,\n\t\tentry: AthenaAuthAuditEntry,\n\t): Promise<void>;\n}\n\nexport interface MemoryAuthAuditSink {\n\tentries: AthenaAuthAuditEntry[];\n}\n\nfunction jsonValue(value: unknown): unknown {\n\treturn value === undefined ? null : value;\n}\n\nexport function createMemoryAuthAuditWriter(\n\tsink: MemoryAuthAuditSink,\n): AthenaAuthAuditWriter {\n\treturn {\n\t\tasync write(_scope, entry) {\n\t\t\tsink.entries.push({ ...entry });\n\t\t},\n\t};\n}\n\nexport function createPostgresAuthAuditWriter(): AthenaAuthAuditWriter {\n\treturn {\n\t\tasync write(scope, entry) {\n\t\t\tif (!scope.persistAudit) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"ATHENA_AUTH_AUDIT_REQUIRES_TRANSACTION: audit_log_auth writes must use the mutation transaction\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait scope.persistAudit(entry);\n\t\t},\n\t};\n}\n\nexport async function insertAuditLogAuth(\n\tdb: AthenaAuthDatabase,\n\tentry: AthenaAuthAuditEntry,\n): Promise<void> {\n\tawait db.query(\n\t\t`\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\t\t[\n\t\t\tentry.id,\n\t\t\tentry.eventId,\n\t\t\tentry.traceId,\n\t\t\tentry.event,\n\t\t\tentry.actor.kind,\n\t\t\tentry.actor.userId ?? null,\n\t\t\tentry.actor.sessionId ?? null,\n\t\t\tentry.subject?.type ?? null,\n\t\t\tentry.subject?.id ?? null,\n\t\t\tentry.organizationId ?? null,\n\t\t\tjsonValue(entry.previous),\n\t\t\tjsonValue(entry.result),\n\t\t\tentry.request.ipAddress ?? null,\n\t\t\tentry.request.userAgent ?? null,\n\t\t\tentry.outcome,\n\t\t],\n\t);\n}\n","import type { AthenaAppIdentity } from \"../../app-identity.ts\";\nimport { AthenaConfigurationError } from \"../../../config/errors.ts\";\nimport type { NormalizedAthenaAuthConfig } from \"../../config.ts\";\nimport type { AthenaPasskeyRelyingParty } from \"./types.ts\";\n\n/**\n * Trusted RP snapshot source (INV-PK-09).\n * Never arbitrary Host / x-forwarded-host.\n */\nexport interface PasskeyRelyingPartyResolver {\n  resolve(): AthenaPasskeyRelyingParty;\n}\n\nexport const ATHENA_PASSKEY_DEFAULT_RP_NAME = \"Athena\";\n\nexport const ATHENA_PASSKEY_DEV_DEFAULT_ORIGINS = Object.freeze([\n  \"http://localhost\",\n  \"http://localhost:3000\",\n  \"http://127.0.0.1\",\n  \"http://127.0.0.1:3000\",\n] as const);\n\nconst EMPTY_RELATED_ORIGINS: readonly string[] = Object.freeze([]);\n\nexport const ATHENA_PASSKEY_DEV_DEFAULT_RELYING_PARTY: AthenaPasskeyRelyingParty =\n  Object.freeze({\n    id: \"localhost\",\n    name: ATHENA_PASSKEY_DEFAULT_RP_NAME,\n    origins: ATHENA_PASSKEY_DEV_DEFAULT_ORIGINS,\n    relatedOrigins: EMPTY_RELATED_ORIGINS,\n  });\n\nexport type PasskeyRelyingPartySnapshotInput = {\n  appIdentity?: AthenaAppIdentity | null;\n  environment: \"production\" | \"development\";\n  passkey: Pick<\n    NormalizedAthenaAuthConfig[\"passkey\"],\n    \"origins\" | \"relatedOrigins\" | \"rpId\" | \"rpName\"\n  >;\n  /** Production + passkeys + no origin uses ATHENA_PASSKEY_APP_ORIGIN_REQUIRED. */\n  required?: boolean;\n  trustedOrigins: readonly string[];\n};\n\nfunction passkeyRpConfigError(\n  message: string,\n  code:\n    | \"ATHENA_RUNTIME_CONFIG_INVALID\"\n    | \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\"\n    | \"ATHENA_PASSKEY_RP_AMBIGUOUS\" = \"ATHENA_RUNTIME_CONFIG_INVALID\",\n): AthenaConfigurationError {\n  return new AthenaConfigurationError(code, message, \"auth\");\n}\n\nfunction isExactAbsoluteOrigin(value: string): boolean {\n  if (value.length === 0 || value.includes(\"*\")) {\n    return false;\n  }\n  try {\n    const url = new URL(value);\n    if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n      return false;\n    }\n    if (!url.hostname || url.hostname.includes(\"*\")) {\n      return false;\n    }\n    return value === url.origin || value === `${url.origin}/`;\n  } catch {\n    return false;\n  }\n}\n\nfunction assertExactOrigins(origins: readonly string[]): void {\n  for (const origin of origins) {\n    if (!isExactAbsoluteOrigin(origin)) {\n      throw passkeyRpConfigError(\n        \"Passkey origins must be exact absolute origins (no wildcards, empty members, or relative hosts).\"\n      );\n    }\n  }\n}\n\nfunction uniqueTrustedHostname(\n  trustedOrigins: readonly string[]\n): string | null {\n  if (trustedOrigins.length === 0) {\n    return null;\n  }\n  const hosts = new Set<string>();\n  for (const origin of trustedOrigins) {\n    if (!isExactAbsoluteOrigin(origin)) {\n      return null;\n    }\n    hosts.add(new URL(origin).hostname);\n  }\n  if (hosts.size !== 1) {\n    return null;\n  }\n  const [hostname] = hosts;\n  return hostname ?? null;\n}\n\nfunction trimmedNonEmpty(value: string | null | undefined): string | undefined {\n  if (typeof value !== \"string\") {\n    return undefined;\n  }\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\n/**\n * Freeze one immutable domain RP at Auth init.\n * Precedence: explicit passkey origins / app identity → unique-host\n * trustedOrigins for rpId only → documented localhost/dev defaults\n * (non-production only). Trusted origins never become ceremony origins.\n */\nexport function createPasskeyRelyingPartySnapshot(\n  input: PasskeyRelyingPartySnapshotInput\n): AthenaPasskeyRelyingParty {\n  const { appIdentity, environment, passkey, required, trustedOrigins } = input;\n  const explicitOrigins = passkey.origins;\n  const explicitRelated = passkey.relatedOrigins;\n\n  if (explicitOrigins.length > 0) {\n    assertExactOrigins(explicitOrigins);\n  }\n  if (explicitRelated.length > 0) {\n    assertExactOrigins(explicitRelated);\n  }\n\n  let id = trimmedNonEmpty(passkey.rpId);\n  let name = trimmedNonEmpty(passkey.rpName) ?? trimmedNonEmpty(appIdentity?.name);\n  let origins: readonly string[] =\n    explicitOrigins.length > 0\n      ? explicitOrigins\n      : appIdentity\n        ? [appIdentity.origin]\n        : [];\n  const relatedOrigins: readonly string[] =\n    explicitRelated.length > 0 ? explicitRelated : [];\n\n  if (!id && appIdentity) {\n    id = appIdentity.hostname;\n  }\n  if (!id && origins.length > 0) {\n    const hosts = new Set<string>();\n    for (const origin of origins) {\n      if (isExactAbsoluteOrigin(origin)) {\n        hosts.add(new URL(origin).hostname);\n      }\n    }\n    if (hosts.size === 1) {\n      const [hostname] = hosts;\n      id = hostname ?? undefined;\n    } else if (hosts.size > 1) {\n      throw passkeyRpConfigError(\n        \"Passkey relying party is ambiguous: multiple WebAuthn hostnames require an explicit passkey.rpId.\",\n        \"ATHENA_PASSKEY_RP_AMBIGUOUS\",\n      );\n    }\n  }\n  if (!id) {\n    const trustedHost = uniqueTrustedHostname(trustedOrigins);\n    if (trustedHost) {\n      id = trustedHost;\n    }\n  }\n  if (!name) {\n    name = ATHENA_PASSKEY_DEFAULT_RP_NAME;\n  }\n\n  if (!id) {\n    if (environment === \"production\") {\n      throw passkeyRpConfigError(\n        required\n          ? \"Passkeys require a trusted application origin (createClient app.url or APP_URL). Production does not default to localhost.\"\n          : \"Passkey relying party requires a trusted rpId (explicit passkey.rpId or a unique hostname in security.trustedOrigins). Production does not default to localhost.\",\n        required ? \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\" : \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      );\n    }\n    id = \"localhost\";\n  }\n\n  if (origins.length === 0) {\n    if (environment === \"production\") {\n      throw passkeyRpConfigError(\n        required\n          ? \"Passkeys require a trusted application origin (createClient app.url or APP_URL).\"\n          : \"Passkey relying party requires at least one exact origin in production.\",\n        required ? \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\" : \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      );\n    }\n    origins = ATHENA_PASSKEY_DEV_DEFAULT_ORIGINS;\n  }\n\n  assertExactOrigins(origins);\n  if (relatedOrigins.length > 0) {\n    assertExactOrigins(relatedOrigins);\n  }\n\n  const frozenOrigins = Object.freeze([...origins]);\n  const frozenRelated = Object.freeze([...relatedOrigins]);\n  return Object.freeze({\n    id,\n    name,\n    origins: frozenOrigins,\n    relatedOrigins: frozenRelated,\n  });\n}\n\nexport function createPasskeyRelyingPartyResolver(\n  snapshot: AthenaPasskeyRelyingParty\n): PasskeyRelyingPartyResolver {\n  return {\n    resolve() {\n      return snapshot;\n    },\n  };\n}\n","import { hashAuthBridgeCode } from \"../../bridge/code.ts\";\nimport type { AuthBridgeCodeStore } from \"../../bridge/store.ts\";\nimport type {\n\tAuthBridgeCodeRecord,\n\tAuthBridgeConsumeReason,\n\tConsumeAuthBridgeCodeInput,\n\tConsumedBridgeCode,\n\tIssueAuthBridgeCodeInput,\n} from \"../../bridge/types.ts\";\n\ntype MemoryBridgeRow = AuthBridgeCodeRecord;\n\nfunction cloneRecord(row: MemoryBridgeRow): AuthBridgeCodeRecord {\n\treturn {\n\t\tcodeHash: row.codeHash,\n\t\tconsumeReason: row.consumeReason,\n\t\tconsumedAt: row.consumedAt ? new Date(row.consumedAt) : null,\n\t\tcreatedAt: new Date(row.createdAt),\n\t\tdestinationOrigin: row.destinationOrigin,\n\t\texpiresAt: new Date(row.expiresAt),\n\t\tid: row.id,\n\t\torganizationId: row.organizationId,\n\t\tredirectPath: row.redirectPath,\n\t\tsessionId: row.sessionId,\n\t\tuserId: row.userId,\n\t};\n}\n\nfunction isOutstanding(row: MemoryBridgeRow, now: Date): boolean {\n\treturn row.consumedAt === null && row.expiresAt.getTime() > now.getTime();\n}\n\nexport function createMemoryAuthBridgeCodeStore(): AuthBridgeCodeStore {\n\tconst rows = new Map<string, MemoryBridgeRow>();\n\tlet chain: Promise<unknown> = Promise.resolve();\n\n\tconst withLock = <T>(fn: () => Promise<T>): Promise<T> => {\n\t\tconst run = chain.then(fn, fn);\n\t\tchain = run.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn run;\n\t};\n\n\treturn {\n\t\tasync issue(input: IssueAuthBridgeCodeInput): Promise<AuthBridgeCodeRecord> {\n\t\t\tconst record: MemoryBridgeRow = {\n\t\t\t\tcodeHash: input.codeHash,\n\t\t\t\tconsumeReason: null,\n\t\t\t\tconsumedAt: null,\n\t\t\t\tcreatedAt: new Date(),\n\t\t\t\tdestinationOrigin: input.destinationOrigin,\n\t\t\t\texpiresAt: new Date(input.expiresAt),\n\t\t\t\tid: input.id ?? crypto.randomUUID(),\n\t\t\t\torganizationId: input.organizationId ?? null,\n\t\t\t\tredirectPath: input.redirectPath,\n\t\t\t\tsessionId: input.sessionId,\n\t\t\t\tuserId: input.userId,\n\t\t\t};\n\t\t\trows.set(record.codeHash, record);\n\t\t\treturn cloneRecord(record);\n\t\t},\n\n\t\tconsume(input: ConsumeAuthBridgeCodeInput): Promise<ConsumedBridgeCode | null> {\n\t\t\treturn withLock(async () => {\n\t\t\t\tconst now = new Date();\n\t\t\t\tconst codeHash = await hashAuthBridgeCode(input.code);\n\t\t\t\tconst row = rows.get(codeHash);\n\t\t\t\tif (!row || !isOutstanding(row, now)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (row.destinationOrigin !== input.destinationOrigin) {\n\t\t\t\t\trow.consumedAt = now;\n\t\t\t\t\trow.consumeReason = \"destination_mismatch\";\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\trow.consumedAt = now;\n\t\t\t\trow.consumeReason = \"consumed\";\n\t\t\t\treturn {\n\t\t\t\t\tconsumedAt: new Date(now),\n\t\t\t\t\tdestinationOrigin: row.destinationOrigin,\n\t\t\t\t\torganizationId: row.organizationId,\n\t\t\t\t\tredirectPath: row.redirectPath,\n\t\t\t\t\tsessionId: row.sessionId,\n\t\t\t\t\tuserId: row.userId,\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\n\t\tasync revokeForSession(sessionId: string, _reason?: string): Promise<number> {\n\t\t\tconst now = new Date();\n\t\t\tconst consumeReason: AuthBridgeConsumeReason = \"session_revoked\";\n\t\t\tlet count = 0;\n\t\t\tfor (const row of rows.values()) {\n\t\t\t\tif (row.sessionId !== sessionId || !isOutstanding(row, now)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\trow.consumedAt = now;\n\t\t\t\trow.consumeReason = consumeReason;\n\t\t\t\tcount += 1;\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\tasync deleteExpired(now = new Date()): Promise<number> {\n\t\t\tlet count = 0;\n\t\t\tfor (const [hash, row] of rows) {\n\t\t\t\tif (row.expiresAt.getTime() > now.getTime()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\trows.delete(hash);\n\t\t\t\tcount += 1;\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\t};\n}\n","import { ATHENA_AUTH_TABLES } from \"../../contract/index.ts\";\nimport { hashAuthBridgeCode } from \"../../bridge/code.ts\";\nimport type { AuthBridgeCodeStore } from \"../../bridge/store.ts\";\nimport type {\n\tAuthBridgeCodeRecord,\n\tAuthBridgeConsumeReason,\n\tConsumeAuthBridgeCodeInput,\n\tConsumedBridgeCode,\n\tIssueAuthBridgeCodeInput,\n} from \"../../bridge/types.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\n\nconst TABLE = ATHENA_AUTH_TABLES.authBridgeCodes;\n\nfunction asDate(value: unknown): Date {\n\tif (value instanceof Date) {\n\t\treturn value;\n\t}\n\treturn new Date(String(value));\n}\n\nfunction asNullableDate(value: unknown): Date | null {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\treturn asDate(value);\n}\n\nfunction hydrate(row: Record<string, unknown>): AuthBridgeCodeRecord {\n\tconst consumeReason = row.consume_reason;\n\treturn {\n\t\tcodeHash: String(row.code_hash),\n\t\tconsumeReason:\n\t\t\tconsumeReason === \"consumed\" ||\n\t\t\tconsumeReason === \"destination_mismatch\" ||\n\t\t\tconsumeReason === \"session_revoked\"\n\t\t\t\t? consumeReason\n\t\t\t\t: null,\n\t\tconsumedAt: asNullableDate(row.consumed_at),\n\t\tcreatedAt: asDate(row.created_at),\n\t\tdestinationOrigin: String(row.destination_origin),\n\t\texpiresAt: asDate(row.expires_at),\n\t\tid: String(row.id),\n\t\torganizationId:\n\t\t\ttypeof row.organization_id === \"string\" ? row.organization_id : null,\n\t\tredirectPath: String(row.redirect_path),\n\t\tsessionId: String(row.session_id),\n\t\tuserId: String(row.user_id),\n\t};\n}\n\nexport function createPostgresAuthBridgeCodeStore(\n\tdatabase: AthenaAuthDatabase,\n): AuthBridgeCodeStore {\n\treturn {\n\t\tasync issue(input: IssueAuthBridgeCodeInput): Promise<AuthBridgeCodeRecord> {\n\t\t\tconst id = input.id ?? crypto.randomUUID();\n\t\t\tconst createdAt = new Date();\n\t\t\tawait database.query(\n\t\t\t\t`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\t\t\t\t[\n\t\t\t\t\tid,\n\t\t\t\t\tinput.codeHash,\n\t\t\t\t\tinput.sessionId,\n\t\t\t\t\tinput.userId,\n\t\t\t\t\tinput.organizationId ?? null,\n\t\t\t\t\tinput.destinationOrigin,\n\t\t\t\t\tinput.redirectPath,\n\t\t\t\t\tinput.expiresAt,\n\t\t\t\t\tcreatedAt,\n\t\t\t\t],\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcodeHash: input.codeHash,\n\t\t\t\tconsumeReason: null,\n\t\t\t\tconsumedAt: null,\n\t\t\t\tcreatedAt,\n\t\t\t\tdestinationOrigin: input.destinationOrigin,\n\t\t\t\texpiresAt: new Date(input.expiresAt),\n\t\t\t\tid,\n\t\t\t\torganizationId: input.organizationId ?? null,\n\t\t\t\tredirectPath: input.redirectPath,\n\t\t\t\tsessionId: input.sessionId,\n\t\t\t\tuserId: input.userId,\n\t\t\t};\n\t\t},\n\n\t\tasync consume(\n\t\t\tinput: ConsumeAuthBridgeCodeInput,\n\t\t): Promise<ConsumedBridgeCode | null> {\n\t\t\tconst codeHash = await hashAuthBridgeCode(input.code);\n\t\t\treturn database.transaction(async (tx) => {\n\t\t\t\tconst selected = await tx.query<Record<string, unknown>>(\n\t\t\t\t\t`SELECT * FROM ${TABLE} WHERE code_hash = $1 FOR UPDATE`,\n\t\t\t\t\t[codeHash],\n\t\t\t\t);\n\t\t\t\tconst raw = selected.rows[0];\n\t\t\t\tif (!raw) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst row = hydrate(raw);\n\t\t\t\tconst now = new Date();\n\t\t\t\tif (row.consumedAt !== null || row.expiresAt.getTime() <= now.getTime()) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst reason: AuthBridgeConsumeReason =\n\t\t\t\t\trow.destinationOrigin === input.destinationOrigin\n\t\t\t\t\t\t? \"consumed\"\n\t\t\t\t\t\t: \"destination_mismatch\";\n\t\t\t\tawait tx.query(\n\t\t\t\t\t`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\t\t\t\t\t[codeHash, now, reason],\n\t\t\t\t);\n\t\t\t\tif (reason === \"destination_mismatch\") {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tconsumedAt: now,\n\t\t\t\t\tdestinationOrigin: row.destinationOrigin,\n\t\t\t\t\torganizationId: row.organizationId,\n\t\t\t\t\tredirectPath: row.redirectPath,\n\t\t\t\t\tsessionId: row.sessionId,\n\t\t\t\t\tuserId: row.userId,\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\n\t\tasync revokeForSession(sessionId: string, _reason?: string): Promise<number> {\n\t\t\tconst result = await database.query(\n\t\t\t\t`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\t\t\t\t[sessionId, \"session_revoked\"],\n\t\t\t);\n\t\t\treturn result.rowCount;\n\t\t},\n\n\t\tasync deleteExpired(now = new Date()): Promise<number> {\n\t\t\tconst result = await database.query(\n\t\t\t\t`DELETE FROM ${TABLE} WHERE expires_at <= $1`,\n\t\t\t\t[now],\n\t\t\t);\n\t\t\treturn result.rowCount;\n\t\t},\n\t};\n}\n","import { ATHENA_AUTH_TABLES } from \"../../contract/index.ts\";\nimport type { AthenaAuthEmailEventDefinition } from \"../../email/events.ts\";\nimport type {\n  AthenaAuthEmailFailureRow,\n  AthenaAuthEmailRecordRow,\n  AthenaAuthEmailTemplateRow,\n} from \"../../email/contract.ts\";\nimport type { AthenaAuthDatabase } from \"../database.ts\";\nimport type { AthenaAuthEmailStore } from \"./store.ts\";\n\nconst TEMPLATE_COLUMNS = `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 = `id, user_id, recipient_email, flow, provider, error_message, metadata, resolved, resolution_note, created_at, updated_at`;\nconst EMAIL_COLUMNS = `id, recipient_email, subject, from_address, from_name, text_body, html_body, provider, flow, metadata, created_at, updated_at`;\nconst EVENT_COLUMNS = `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 undefined;\n  }\n  return {\n    attachment_failure_mode: row.attachment_failure_mode === \"skip\" ? \"skip\" : \"fail\",\n    attachments: asJson(row.attachments, []) 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: 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: 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 undefined;\n  }\n  return {\n    created_at: asIso(row.created_at),\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    resolved: row.resolved === true,\n    resolution_note: typeof row.resolution_note === \"string\" ? row.resolution_note : 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 undefined;\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(id: string): 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 undefined;\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, metadata, resolved, resolution_note,\n        created_at, updated_at\n      ) VALUES ($1, $2, $3, $4, $5, $6::jsonb, $7, $8, $9, $10)\n      RETURNING ${FAILURE_COLUMNS}`,\n      [\n        row.id,\n        row.recipient_email,\n        row.flow,\n        row.provider ?? null,\n        row.error_message,\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 undefined;\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      [id, next.resolved, next.resolution_note ?? null, new Date().toISOString()]\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(row: AthenaAuthEmailRecordRow): 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 undefined;\n    }\n    const next = { ...existing, ...patch, id };\n    const result = await this.db.query<Record<string, unknown>>(\n      `UPDATE ${ATHENA_AUTH_TABLES.emails} SET subject = $2, updated_at = $3 WHERE id = $1 RETURNING ${EMAIL_COLUMNS}`,\n      [id, next.subject, new Date().toISOString()]\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  AUTH_EMAIL_EVENT_CATALOG,\n  type AthenaAuthEmailEventDefinition,\n} from \"../../email/events.ts\";\n\nexport interface AthenaAuthEmailStore {\n  createEmail(row: AthenaAuthEmailRecordRow): Promise<AthenaAuthEmailRecordRow>;\n  createFailure(row: AthenaAuthEmailFailureRow): 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 (filters?.template_key && row.template_key !== filters.template_key) {\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 (filters?.is_active !== undefined && row.is_active !== filters.is_active) {\n          return false;\n        }\n        return true;\n      })\n      .map((row) => clone(row));\n  }\n\n  async getTemplate(id: string): 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 undefined;\n    }\n    const next = { ...existing, ...patch, id, updated_at: new Date().toISOString() };\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 undefined;\n    }\n    const next = { ...existing, ...patch, id, updated_at: new Date().toISOString() };\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(row: AthenaAuthEmailRecordRow): 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 undefined;\n    }\n    const next = { ...existing, ...patch, id, updated_at: new Date().toISOString() };\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 ? new Date(row.retired_at).toISOString() : 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 {\n\tAthenaAuthMutationScope,\n\tAuthMutationTransaction,\n} from \"../hooks/scope.ts\";\nimport {\n\tinsertAuditLogAuth,\n\ttype MemoryAuthAuditSink,\n} from \"../observability/audit.ts\";\nimport {\n\tMemoryAdminAuthStore,\n\tPostgresAdminAuthStore,\n} from \"./admin-store.ts\";\nimport type { AthenaAuthDatabase } from \"./database.ts\";\nimport { MemoryAuthStores } from \"./memory-stores.ts\";\nimport { PostgresAuthStores } from \"./stores.ts\";\n\ninterface MemoryStoreSnapshot {\n\taccounts: MemoryAuthStores[\"accounts\"];\n\tapiKeys: MemoryAuthStores[\"apiKeys\"];\n\tinvitations: MemoryAuthStores[\"invitations\"];\n\tmembers: MemoryAuthStores[\"members\"];\n\torganizations: MemoryAuthStores[\"organizations\"];\n\tpasskeys: MemoryAuthStores[\"passkeys\"];\n\tpasskeyRegistrationTransactions: MemoryAuthStores[\"passkeyRegistrationTransactions\"];\n\tsessions: MemoryAuthStores[\"sessions\"];\n\ttwoFactors: MemoryAuthStores[\"twoFactors\"];\n\tusers: MemoryAuthStores[\"users\"];\n\tverifications: MemoryAuthStores[\"verifications\"];\n}\n\nfunction cloneMap<K, V>(source: Map<K, V>): Map<K, V> {\n\treturn new Map(\n\t\t[...source.entries()].map(([key, value]) => [key, structuredClone(value)]),\n\t);\n}\n\nfunction snapshotMemoryStores(stores: MemoryAuthStores): MemoryStoreSnapshot {\n\treturn {\n\t\taccounts: cloneMap(stores.accounts),\n\t\tapiKeys: cloneMap(stores.apiKeys),\n\t\tinvitations: cloneMap(stores.invitations),\n\t\tmembers: cloneMap(stores.members),\n\t\torganizations: cloneMap(stores.organizations),\n\t\tpasskeys: cloneMap(stores.passkeys),\n\t\tpasskeyRegistrationTransactions: cloneMap(\n\t\t\tstores.passkeyRegistrationTransactions,\n\t\t),\n\t\tsessions: cloneMap(stores.sessions),\n\t\ttwoFactors: cloneMap(stores.twoFactors),\n\t\tusers: cloneMap(stores.users),\n\t\tverifications: cloneMap(stores.verifications),\n\t};\n}\n\nfunction restoreMemoryStores(\n\tstores: MemoryAuthStores,\n\tsnapshot: MemoryStoreSnapshot,\n): void {\n\treplaceMap(stores.accounts, snapshot.accounts);\n\treplaceMap(stores.apiKeys, snapshot.apiKeys);\n\treplaceMap(stores.invitations, snapshot.invitations);\n\treplaceMap(stores.members, snapshot.members);\n\treplaceMap(stores.organizations, snapshot.organizations);\n\treplaceMap(stores.passkeys, snapshot.passkeys);\n\treplaceMap(\n\t\tstores.passkeyRegistrationTransactions,\n\t\tsnapshot.passkeyRegistrationTransactions,\n\t);\n\treplaceMap(stores.sessions, snapshot.sessions);\n\treplaceMap(stores.twoFactors, snapshot.twoFactors);\n\treplaceMap(stores.users, snapshot.users);\n\treplaceMap(stores.verifications, snapshot.verifications);\n}\n\nfunction replaceMap<K, V>(target: Map<K, V>, source: Map<K, V>): void {\n\ttarget.clear();\n\tfor (const [key, value] of source) {\n\t\ttarget.set(key, structuredClone(value));\n\t}\n}\n\nexport function createMemoryAuthMutationTransaction(\n\tstores: MemoryAuthStores,\n\tadmin = new MemoryAdminAuthStore(stores),\n\tauditSink?: MemoryAuthAuditSink,\n): AuthMutationTransaction {\n\tlet queue: Promise<unknown> = Promise.resolve();\n\treturn async <T>(fn: (scope: AthenaAuthMutationScope) => Promise<T>) => {\n\t\tconst run = async () => {\n\t\t\tconst snapshot = snapshotMemoryStores(stores);\n\t\t\tconst auditSnapshot = auditSink ? auditSink.entries.slice() : undefined;\n\t\t\ttry {\n\t\t\t\treturn await fn({ admin, stores });\n\t\t\t} catch (error) {\n\t\t\t\trestoreMemoryStores(stores, snapshot);\n\t\t\t\tif (auditSink && auditSnapshot) {\n\t\t\t\t\tauditSink.entries.splice(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tauditSink.entries.length,\n\t\t\t\t\t\t...auditSnapshot,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t};\n\t\tconst next = queue.then(run, run);\n\t\tqueue = next.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn next;\n\t};\n}\n\nexport function createPostgresAuthMutationTransaction(\n\tdatabase: AthenaAuthDatabase,\n\tpersistAudit = false,\n): AuthMutationTransaction {\n\treturn async <T>(fn: (scope: AthenaAuthMutationScope) => Promise<T>) =>\n\t\tdatabase.transaction(async (txDb) =>\n\t\t\tfn({\n\t\t\t\tadmin: new PostgresAdminAuthStore(txDb),\n\t\t\t\tpersistAudit: persistAudit\n\t\t\t\t\t? (entry) => insertAuditLogAuth(txDb, entry)\n\t\t\t\t\t: undefined,\n\t\t\t\tstores: new PostgresAuthStores(txDb),\n\t\t\t}),\n\t\t);\n}\n\nexport function createAuthMutationTransaction(input: {\n\tauditSink?: MemoryAuthAuditSink;\n\tdatabase?: AthenaAuthDatabase;\n\tpersistAudit?: boolean;\n\tstores: MemoryAuthStores | PostgresAuthStores;\n}): AuthMutationTransaction {\n\tif (input.database) {\n\t\treturn createPostgresAuthMutationTransaction(\n\t\t\tinput.database,\n\t\t\tinput.persistAudit === true,\n\t\t);\n\t}\n\tif (input.stores instanceof MemoryAuthStores) {\n\t\treturn createMemoryAuthMutationTransaction(\n\t\t\tinput.stores,\n\t\t\tundefined,\n\t\t\tinput.auditSink,\n\t\t);\n\t}\n\tthrow new Error(\n\t\t\"Auth mutation transactions require a database or MemoryAuthStores\",\n\t);\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\tAthenaAuthHttpHandlers,\n\tAthenaAuthRuntime,\n\tAthenaAuthServerSurface,\n\tCreateAthenaAuthRuntimeOptions,\n} from \"./runtime-types.ts\";\n\nexport {\n\tcreateAuthRequestMiddleware,\n\tcreateRequestMiddleware,\n} from \"./request-middleware.ts\";\nexport { createAuthRouter } from \"./router.ts\";\nexport { createRuntimeDependencies } from \"./runtime-dependencies.ts\";\nexport type {\n\tAthenaAuthHttpHandlers,\n\tAthenaAuthRuntime,\n\tAthenaAuthServerSurface,\n\tCreateAthenaAuthRuntimeOptions,\n} from \"./runtime-types.ts\";\n\nexport function createAthenaAuthRuntime(\n\toptions: CreateAthenaAuthRuntimeOptions = {},\n): AthenaAuthRuntime {\n\tconst deps = createRuntimeDependencies(options);\n\tconst { handleRoute } = createAuthRouter(deps);\n\tconst handle = createAuthRequestMiddleware({ deps, handleRoute });\n\tconst handlers: AthenaAuthHttpHandlers = {\n\t\tDELETE: handle,\n\t\tGET: handle,\n\t\tHEAD: handle,\n\t\tOPTIONS: handle,\n\t\tPATCH: handle,\n\t\tPOST: handle,\n\t\tPUT: handle,\n\t};\n\treturn {\n\t\tclose: deps.close,\n\t\tconfig: deps.config,\n\t\tgetStores: deps.ensureReady,\n\t\thandle,\n\t\thandlers,\n\t\thooksRef: deps.hooksRef,\n\t\tsetDelivery: deps.setDelivery,\n\t\tmigrate: deps.migrate,\n\t\tpasskeyRelyingParty: deps.passkeyRelyingParty,\n\t\tpasskeyResolver: deps.passkeyResolver,\n\t};\n}\n\nexport function createAthenaAuth(\n\toptions: CreateAthenaAuthRuntimeOptions & {\n\t\tdatabase: string | AthenaAuthDatabase;\n\t},\n): AthenaAuthRuntime {\n\treturn createAthenaAuthRuntime({\n\t\t...options,\n\t\tautoMigrate: options.autoMigrate === true,\n\t});\n}\n\nexport function createAthenaAuthHttpHandlers(\n\truntime: AthenaAuthServerSurface,\n): AthenaAuthHttpHandlers {\n\treturn runtime.handlers;\n}\n","/**\r\n * Node-safe social OAuth provider bags and alias collapse.\r\n *\r\n * CLI and `v3-client.ts` import this module. The public framework wrapper\r\n * (`auth/social/server/social-config.ts`) re-exports it behind `server-only`.\r\n */\r\n\r\nimport { AthenaConfigurationError } from \"../../../config/errors.ts\";\r\n\r\nexport interface AthenaAuthSocialProviderOptions {\r\n\tclientId: string;\r\n\tclientSecret: string;\r\n}\r\n\r\nexport interface AthenaAuthSocialOptions {\r\n\tproviders?: Record<string, AthenaAuthSocialProviderOptions>;\r\n}\r\n\r\nexport interface NormalizedSocialAuthConfig {\r\n\tproviders: Record<string, AthenaAuthSocialProviderOptions>;\r\n}\r\n\r\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\r\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\r\n\t\treturn undefined;\r\n\t}\r\n\treturn value as Record<string, unknown>;\r\n}\r\n\r\nfunction asString(value: unknown): string | undefined {\r\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\r\n}\r\n\r\nfunction assertSocialConfigObject(key: string, value: unknown): void {\r\n\tif (value === undefined || value === null) {\r\n\t\treturn;\r\n\t}\r\n\tif (typeof value !== \"object\" || Array.isArray(value)) {\r\n\t\tthrow new AthenaConfigurationError(\r\n\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\r\n\t\t\t`auth.${key} must be an object provider map`,\r\n\t\t\t\"auth\",\r\n\t\t);\r\n\t}\r\n}\r\n\r\nfunction normalizeSocialProviderBag(\r\n\tvalue: unknown,\r\n): AthenaAuthSocialProviderOptions | undefined {\r\n\tconst record = asRecord(value);\r\n\tif (!record) {\r\n\t\treturn undefined;\r\n\t}\r\n\treturn {\r\n\t\t...record,\r\n\t\tclientId: asString(record.clientId) ?? \"\",\r\n\t\tclientSecret: asString(record.clientSecret) ?? \"\",\r\n\t};\r\n}\r\n\r\nfunction normalizeSocialProviderMap(\r\n\tvalue: unknown,\r\n): Record<string, AthenaAuthSocialProviderOptions> {\r\n\tconst record = asRecord(value);\r\n\tif (!record) {\r\n\t\treturn {};\r\n\t}\r\n\tconst providers: Record<string, AthenaAuthSocialProviderOptions> = {};\r\n\tfor (const [id, bag] of Object.entries(record)) {\r\n\t\tconst normalized = normalizeSocialProviderBag(bag);\r\n\t\tif (!normalized) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tproviders[id] = normalized;\r\n\t}\r\n\treturn providers;\r\n}\r\n\r\nfunction extractSocialProviderMap(value: unknown): unknown {\r\n\tconst record = asRecord(value);\r\n\tif (!record) {\r\n\t\treturn undefined;\r\n\t}\r\n\tconst nested = asRecord(record.providers);\r\n\treturn nested ?? record;\r\n}\r\n\r\n/**\r\n * Collapse `auth.social` / `auth.oauth` / `auth.socialProviders` object maps\r\n * into one internal `NormalizedSocialAuthConfig`. Boolean `true` stays invalid.\r\n */\r\nexport function normalizeSocialAuthConfig(\r\n\traw: Record<string, unknown>,\r\n): NormalizedSocialAuthConfig {\r\n\tassertSocialConfigObject(\"social\", raw.social);\r\n\tassertSocialConfigObject(\"oauth\", raw.oauth);\r\n\tassertSocialConfigObject(\"socialProviders\", raw.socialProviders);\r\n\tconst providers = normalizeSocialProviderMap(\r\n\t\textractSocialProviderMap(raw.social) ?? raw.oauth ?? raw.socialProviders,\r\n\t);\r\n\treturn { providers };\r\n}\r\n","/**\n * Webhook ownership identity is an installation id, not a display name.\n * `app.name` must never enter `athena:{id}:{connection}:billing`.\n */\nexport function resolveBillingWebhookApplicationId(input: {\n\tapp?: { id?: string | null; name?: string | null } | null;\n\tclient?: string | null;\n}): string | undefined {\n\tconst fromApp = trimId(input.app?.id);\n\tif (fromApp != null) {\n\t\treturn fromApp;\n\t}\n\treturn trimId(input.client);\n}\n\nfunction trimId(value: string | null | undefined): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n","import { ATHENA_AUTH_TABLES } from \"../auth/contract/index.ts\";\nimport type {\n\tNotificationPreferenceDeleteInput,\n\tNotificationPreferenceListInput,\n\tNotificationPreferenceSqlExecutor,\n\tNotificationPreferenceStore,\n\tNotificationPreferenceUpsertInput,\n} from \"./store.ts\";\nimport type {\n\tNotificationChannelId,\n\tNotificationDigest,\n\tNotificationPreferenceOverride,\n\tNotificationPreferenceRow,\n} from \"./types.ts\";\n\nconst TABLE = ATHENA_AUTH_TABLES.notificationPreferences;\n\ntype PreferenceSqlRow = {\n\tchannel: string;\n\tcreated_at: Date | string;\n\tdigest: string | null;\n\tenabled: boolean;\n\tid: string;\n\tmetadata: unknown;\n\torganization_id: string | null;\n\ttopic: string;\n\tupdated_at: Date | string;\n\tuser_id: string;\n};\n\nfunction asIso(value: Date | string): string {\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\treturn value;\n}\n\nfunction asMetadata(value: unknown): Record<string, unknown> {\n\tif (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n\t\treturn value as Record<string, unknown>;\n\t}\n\treturn {};\n}\n\nfunction hydrate(row: PreferenceSqlRow): NotificationPreferenceRow {\n\treturn {\n\t\tchannel: row.channel as NotificationChannelId,\n\t\tcreatedAt: asIso(row.created_at),\n\t\tdigest: row.digest as NotificationDigest | null,\n\t\tenabled: row.enabled,\n\t\tid: row.id,\n\t\tmetadata: asMetadata(row.metadata),\n\t\torganizationId: row.organization_id,\n\t\ttopic: row.topic,\n\t\tupdatedAt: asIso(row.updated_at),\n\t\tuserId: row.user_id,\n\t};\n}\n\nfunction toOverride(\n\trow: NotificationPreferenceRow,\n): NotificationPreferenceOverride {\n\treturn {\n\t\tchannel: row.channel,\n\t\tdigest: row.digest,\n\t\tenabled: row.enabled,\n\t\torganizationId: row.organizationId,\n\t\ttopic: row.topic,\n\t\tuserId: row.userId,\n\t};\n}\n\nexport function createPostgresNotificationPreferenceStore(\n\tdb: NotificationPreferenceSqlExecutor,\n): NotificationPreferenceStore {\n\treturn {\n\t\tasync delete(\n\t\t\tinput: NotificationPreferenceDeleteInput,\n\t\t): Promise<boolean> {\n\t\t\tconst organizationId = input.organizationId ?? null;\n\t\t\tconst result = await db.query(\n\t\t\t\torganizationId === null\n\t\t\t\t\t? `DELETE FROM ${TABLE}\n\t\t\t\t\t\t WHERE user_id = $1 AND channel = $2 AND topic = $3 AND organization_id IS NULL\n\t\t\t\t\t\t RETURNING id`\n\t\t\t\t\t: `DELETE FROM ${TABLE}\n\t\t\t\t\t\t WHERE user_id = $1 AND channel = $2 AND topic = $3 AND organization_id = $4\n\t\t\t\t\t\t RETURNING id`,\n\t\t\t\torganizationId === null\n\t\t\t\t\t? [input.userId, input.channel, input.topic]\n\t\t\t\t\t: [input.userId, input.channel, input.topic, organizationId],\n\t\t\t);\n\t\t\treturn result.rows.length > 0;\n\t\t},\n\t\tasync list(\n\t\t\tinput: NotificationPreferenceListInput,\n\t\t): Promise<NotificationPreferenceOverride[]> {\n\t\t\tconst result = await db.query(\n\t\t\t\t`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\t\t\t\t[input.userId],\n\t\t\t);\n\t\t\treturn result.rows.map((row) =>\n\t\t\t\ttoOverride(hydrate(row as PreferenceSqlRow)),\n\t\t\t);\n\t\t},\n\t\tasync upsert(\n\t\t\tinput: NotificationPreferenceUpsertInput,\n\t\t): Promise<NotificationPreferenceRow> {\n\t\t\tconst organizationId = input.organizationId ?? null;\n\t\t\tconst digest = input.digest ?? null;\n\t\t\tconst result = await db.query(\n\t\t\t\torganizationId === null\n\t\t\t\t\t? `INSERT INTO ${TABLE} (\n\t\t\t\t\t\t\tid, user_id, organization_id, channel, topic, enabled, digest, metadata\n\t\t\t\t\t\t) VALUES ($1, $2, NULL, $3, $4, $5, $6, '{}'::jsonb)\n\t\t\t\t\t\tON CONFLICT (user_id, channel, topic) WHERE organization_id IS NULL\n\t\t\t\t\t\tDO UPDATE SET\n\t\t\t\t\t\t\tenabled = EXCLUDED.enabled,\n\t\t\t\t\t\t\tdigest = EXCLUDED.digest,\n\t\t\t\t\t\t\tupdated_at = NOW()\n\t\t\t\t\t\tRETURNING *`\n\t\t\t\t\t: `INSERT INTO ${TABLE} (\n\t\t\t\t\t\t\tid, user_id, organization_id, channel, topic, enabled, digest, metadata\n\t\t\t\t\t\t) VALUES ($1, $2, $3, $4, $5, $6, $7, '{}'::jsonb)\n\t\t\t\t\t\tON CONFLICT (user_id, organization_id, channel, topic) WHERE organization_id IS NOT NULL\n\t\t\t\t\t\tDO UPDATE SET\n\t\t\t\t\t\t\tenabled = EXCLUDED.enabled,\n\t\t\t\t\t\t\tdigest = EXCLUDED.digest,\n\t\t\t\t\t\t\tupdated_at = NOW()\n\t\t\t\t\t\tRETURNING *`,\n\t\t\t\torganizationId === null\n\t\t\t\t\t? [\n\t\t\t\t\t\t\tcrypto.randomUUID(),\n\t\t\t\t\t\t\tinput.userId,\n\t\t\t\t\t\t\tinput.channel,\n\t\t\t\t\t\t\tinput.topic,\n\t\t\t\t\t\t\tinput.enabled,\n\t\t\t\t\t\t\tdigest,\n\t\t\t\t\t\t]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\tcrypto.randomUUID(),\n\t\t\t\t\t\t\tinput.userId,\n\t\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\t\tinput.channel,\n\t\t\t\t\t\t\tinput.topic,\n\t\t\t\t\t\t\tinput.enabled,\n\t\t\t\t\t\t\tdigest,\n\t\t\t\t\t\t],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\tif (!row) {\n\t\t\t\treturn {\n\t\t\t\t\tchannel: input.channel,\n\t\t\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\t\t\tdigest,\n\t\t\t\t\tenabled: input.enabled,\n\t\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\t\tmetadata: {},\n\t\t\t\t\torganizationId,\n\t\t\t\t\ttopic: input.topic,\n\t\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t\t\tuserId: input.userId,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn hydrate(row as PreferenceSqlRow);\n\t\t},\n\t};\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\ttype AthenaClient,\n\ttype AthenaClientConfig,\n\tcreateClientWithNormalizer,\n\tnormalizeUniversalCreateClientConfig,\n} from \"../../../client/create-client.ts\";\nimport { AthenaConfigurationError } from \"../../../config/errors.ts\";\nimport type { AthenaPostgresPool } from \"../../../postgres/driver.ts\";\nimport { getAthenaClientInternals } from \"../../../runtime/client-internals.ts\";\nimport { assertDataLifecycleConfig } from \"../../../runtime/data/lifecycle/assert.ts\";\nimport { createAthenaRuntimeReadiness } from \"../../../runtime/readiness/index.ts\";\nimport { resolveDatabaseUri } from \"../../../runtime/resolve.ts\";\nimport type { AthenaBillingConfig } from \"../../create-client-config.ts\";\nimport { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport { shouldAutomaticallyImportBillingCustomers } from \"../../import/automatic.ts\";\nimport { resolveBillingWebhookApplicationId } from \"../../ingestion/application-id.ts\";\nimport {\n\tassertAthenaBillingIngestion,\n\tsigningSecretsFromWebhookConfig,\n} from \"../../ingestion/config.ts\";\nimport {\n\tcreatePostgresBillingWebhookSecretStore,\n\trememberConnectionSigningSecret,\n\trememberConnectionSigningSecretSet,\n\tresolveBillingWebhookMasterKey,\n\tsigningSecretsForConnection,\n\ttype BillingConnectionSigningSecretCache,\n} from \"../../ingestion/secrets/index.ts\";\nimport { resolveBillingIngressEndpoints } from \"../../ingestion/urls.ts\";\nimport type { AthenaBillingModule } from \"../../module.ts\";\nimport {\n\tassertLocalBillingObservability,\n\tnormalizeAthenaBillingObservability,\n} from \"../../observability/config.ts\";\nimport { purgeBillingObservability } from \"../../observability/retention.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport {\n\tDEFAULT_BILLING_WEBHOOK_RECONCILIATION_SCHEDULE,\n\tregisterEmbeddedBillingScheduler,\n} from \"../../reconciliation/scheduler.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { AthenaBillingCatalogConfig } from \"../../types.ts\";\nimport { resolveBillingEnvironment } from \"../environment.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport {\n\tassertLocalBillingRuntimeEnvironment,\n\ttype BillingRuntimeModePreference,\n\tresolveBillingRuntimeMode,\n} from \"../resolve-mode.ts\";\nimport {\n\ttype AthenaBillingInspectedConnection,\n\tpatchBillingDiagnostics,\n} from \"../diagnostics.ts\";\nimport {\n\ttype MaterializedBillingConnection,\n\tconfiguredBillingConnectionInitKey,\n\tmaterializeConfiguredBillingConnections,\n\tsingleFlightConfiguredBillingConnectionMaterialize,\n} from \"./connections/materialize.ts\";\nimport { attachEventIngressRuntime } from \"./ingress/attach.ts\";\nimport { assertBillingProviderRuntimeEnvironment } from \"./providers/config.ts\";\nimport { createBillingProviderRegistry } from \"./providers/create-registry.ts\";\nimport type { BillingProviderRegistry } from \"./providers/registry.ts\";\nimport { createLocalBillingRuntime } from \"./runtime.ts\";\n\n\nexport const BILLING_BOOTSTRAP_EVENT = {\n\tconnectionMaterialized: \"connection-materialized\",\n\timportSchedulerRegistered: \"import-scheduler-registered\",\n\tpostgresReady: \"postgres-ready\",\n\tproviderRegistryReady: \"provider-registry-ready\",\n\truntimeReady: \"runtime-ready\",\n\twebhookSchedulerRegistered: \"webhook-scheduler-registered\",\n} as const;\n\nfunction recordBillingBootstrapEvent(\n\tevents: string[] | undefined,\n\tevent: string,\n): void {\n\tevents?.push(event);\n}\n\nfunction isAthenaPostgresPool(value: unknown): value is AthenaPostgresPool {\n\treturn (\n\t\tvalue != null &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as AthenaPostgresPool).query === \"function\" &&\n\t\ttypeof (value as AthenaPostgresPool).connect === \"function\"\n\t);\n}\n\nfunction billingSqlFromInternals(client: {\n\tbilling: AthenaBillingModule;\n}): BillingSqlExecutor | undefined {\n\tconst internals = getAthenaClientInternals(client);\n\tconst owned = internals?.postgresRuntime;\n\tif (!owned) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tasync query(sql, params) {\n\t\t\tconst pool = await owned.getPool();\n\t\t\tif (!isAthenaPostgresPool(pool)) {\n\t\t\t\tthrow new AthenaBillingCapabilityError({\n\t\t\t\t\toperation: \"invoices.list\",\n\t\t\t\t\treason: \"runtime_unavailable\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst result =\n\t\t\t\tparams != null && params.length > 0\n\t\t\t\t\t? await pool.query(sql, [...params])\n\t\t\t\t\t: await pool.query(sql);\n\t\t\treturn { rows: result.rows as Record<string, unknown>[] };\n\t\t},\n\t};\n}\n\nexport function attachLocalBillingRuntime(\n\tclient: { billing: AthenaBillingModule },\n\tinput: {\n\t\tappUrl?: string | null;\n\t\tapplicationId?: string;\n\t\tcatalog?: AthenaBillingCatalogConfig;\n\t\tconfiguredProviders?: BillingProviderConfigMap;\n\t\tcustomerImport?: AthenaBillingConfig[\"import\"];\n\t\tingestion?: AthenaBillingConfig[\"ingestion\"];\n\t\tmode?: BillingRuntimeModePreference;\n\t\tobservability?: AthenaBillingConfig[\"observability\"];\n\t\tregistry?: BillingProviderRegistry;\n\t\ttestMode?: boolean;\n\t},\n): void {\n\tconst billingMode = resolveBillingRuntimeMode({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tmode: input.mode,\n\t});\n\tif (billingMode !== \"local\") {\n\t\treturn;\n\t}\n\tconst testMode = resolveBillingEnvironment({\n\t\ttestMode: input.testMode,\n\t}).testMode;\n\tconst mollieKind = input.configuredProviders?.mollie?.credentialKind;\n\tconst ingestion = assertAthenaBillingIngestion({\n\t\tappUrl: input.appUrl,\n\t\tcredentialKind: mollieKind,\n\t\tingestion: input.ingestion,\n\t\tlive: testMode === false,\n\t});\n\tconst observability = normalizeAthenaBillingObservability(\n\t\tinput.observability,\n\t);\n\tconst endpoints = resolveBillingIngressEndpoints({\n\t\tappUrl: input.appUrl,\n\t\tpublicBaseUrl: ingestion.webhooks.publicBaseUrl,\n\t});\n\tconst existing = getAthenaClientInternals(client);\n\tconst registry =\n\t\tinput.registry ??\n\t\texisting?.billingProviderRegistry ??\n\t\tcreateBillingProviderRegistry(input.configuredProviders, input.catalog);\n\tif (endpoints && ingestion.webhooks.providers.mollie.classic.enabled) {\n\t\tregistry.ingress = { classicWebhookUrl: endpoints.classicUrl };\n\t}\n\tconst webhookApplicationId = input.applicationId?.trim();\n\tif (\n\t\tingestion.webhooks.enabled &&\n\t\t(webhookApplicationId == null || webhookApplicationId.length === 0)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_APPLICATION_ID_REQUIRED\",\n\t\t\t\"createClient({ app: { id } }) or client is required when billing webhook management is enabled. app.name is not a webhook ownership id.\",\n\t\t\t\"billing\",\n\t\t);\n\t}\n\tconst bootstrapEvents: string[] = [];\n\trecordBillingBootstrapEvent(\n\t\tbootstrapEvents,\n\t\tBILLING_BOOTSTRAP_EVENT.providerRegistryReady,\n\t);\n\tif (existing) {\n\t\tpatchBillingDiagnostics(existing, {\n\t\t\tconnectionCount: 0,\n\t\t\tphase: \"provider-registry\",\n\t\t\tstartedAt: Date.now(),\n\t\t});\n\t}\n\tconst sql = billingSqlFromInternals(client);\n\tif (sql != null) {\n\t\trecordBillingBootstrapEvent(\n\t\t\tbootstrapEvents,\n\t\t\tBILLING_BOOTSTRAP_EVENT.postgresReady,\n\t\t);\n\t}\n\tconst webhookMasterKey = resolveBillingWebhookMasterKey({\n\t\tconfigured: ingestion.webhooks.secretMasterKey,\n\t\tdatabaseUrl: existing ? resolveDatabaseUri(existing.config) : undefined,\n\t});\n\tconst secretStore =\n\t\tsql != null && webhookMasterKey != null\n\t\t\t? createPostgresBillingWebhookSecretStore({\n\t\t\t\t\tmasterKey: webhookMasterKey,\n\t\t\t\t\tsql,\n\t\t\t\t})\n\t\t\t: undefined;\n\tconst connectionState: {\n\t\tconnections: MaterializedBillingConnection[];\n\t\tinitializationFailed?: boolean;\n\t\tinitializationMessage?: string;\n\t\tinitialized: boolean;\n\t} = { connections: [], initialized: false };\n\tconst readiness =\n\t\texisting?.runtimeReadiness ?? createAthenaRuntimeReadiness();\n\tconst billingReady = readiness.waitFor(\"billing\");\n\tif (existing) {\n\t\texisting.billingBootstrapEvents = bootstrapEvents;\n\t\texisting.billingReady = billingReady;\n\t\texisting.runtimeReadiness = readiness;\n\t}\n\tconst localRuntime = createLocalBillingRuntime({\n\t\tapplicationId: webhookApplicationId,\n\t\tappUrl: input.appUrl,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tconnectionState,\n\t\tcustomerImport: input.customerImport,\n\t\tingestion: input.ingestion,\n\t\tinvocation: PROCESS_BILLING_INVOCATION,\n\t\tobservability,\n\t\tready: billingReady,\n\t\tregistry,\n\t\tsql,\n\t\ttestMode,\n\t});\n\tconst billing = client.billing;\n\tbilling.payments = localRuntime.payments as AthenaBillingModule[\"payments\"];\n\tbilling.customers = localRuntime.customers;\n\tbilling.refunds = localRuntime.refunds;\n\tbilling.paymentLinks = localRuntime.paymentLinks;\n\tbilling.subscriptions = localRuntime.subscriptions;\n\tbilling.invoices = localRuntime.invoices;\n\tbilling.webhooks = localRuntime.webhooks;\n\tbilling.catalog = {\n\t\tprices: localRuntime.prices,\n\t\tproducts: localRuntime.products,\n\t};\n\tbilling.checkout = localRuntime.checkout;\n\tbilling.self = localRuntime.self;\n\tbilling.admin = localRuntime.admin;\n\tbilling.getCapabilities =\n\t\tlocalRuntime.getCapabilities as AthenaBillingModule[\"getCapabilities\"];\n\tconst signingSecretCache: BillingConnectionSigningSecretCache = new Map();\n\tconst configuredSecrets = signingSecretsFromWebhookConfig(ingestion.webhooks);\n\tconst rememberSigningSecret = (entry: {\n\t\tconnectionId: string;\n\t\tsecret: string;\n\t}): void => {\n\t\trememberConnectionSigningSecret(\n\t\t\tsigningSecretCache,\n\t\t\tentry.connectionId,\n\t\t\tentry.secret,\n\t\t);\n\t};\n\tconst resolveSigningSecrets = (connectionId: string): readonly string[] =>\n\t\tsigningSecretsForConnection(signingSecretCache, connectionId);\n\tif (existing) {\n\t\texisting.billingRuntime = localRuntime;\n\t\texisting.billingProviderRegistry = registry;\n\t\tpatchBillingDiagnostics(existing, {\n\t\t\tphase: \"attaching-ingress\",\n\t\t});\n\t\tattachEventIngressRuntime(existing, {\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tregistry,\n\t\t\tresolveSigningSecrets,\n\t\t\ttestMode,\n\t\t});\n\t}\n\tvoid (async () => {\n\t\ttry {\n\t\t\tpatchBillingDiagnostics(existing, {\n\t\t\t\tphase: \"materializing-connections\",\n\t\t\t});\n\t\t\tif (\n\t\t\t\tsql != null &&\n\t\t\t\twebhookApplicationId != null &&\n\t\t\t\twebhookApplicationId.length > 0\n\t\t\t) {\n\t\t\t\tconst materialized =\n\t\t\t\t\tawait singleFlightConfiguredBillingConnectionMaterialize(\n\t\t\t\t\t\tconfiguredBillingConnectionInitKey({\n\t\t\t\t\t\t\tapplicationId: webhookApplicationId,\n\t\t\t\t\t\t\ttestMode,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tmaterializeConfiguredBillingConnections({\n\t\t\t\t\t\t\t\tapplicationId: webhookApplicationId,\n\t\t\t\t\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\t\t\t\t\tsql,\n\t\t\t\t\t\t\t\ttestMode,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\tconnectionState.connections = [...materialized.connections];\n\t\t\t\tif (existing) {\n\t\t\t\t\tconst inspected: AthenaBillingInspectedConnection[] =\n\t\t\t\t\t\tconnectionState.connections.map((row) => ({\n\t\t\t\t\t\t\taccountReference: row.accountReference,\n\t\t\t\t\t\t\tcredentialReference: row.credentialReference,\n\t\t\t\t\t\t\tid: row.id,\n\t\t\t\t\t\t\tprovider: row.provider,\n\t\t\t\t\t\t}));\n\t\t\t\t\texisting.billingMaterializedConnections = inspected;\n\t\t\t\t\tpatchBillingDiagnostics(existing, {\n\t\t\t\t\t\tconnectionCount: inspected.length,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (const connection of connectionState.connections) {\n\t\t\t\t\tif (secretStore) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst stored = await secretStore.resolve(connection.id);\n\t\t\t\t\t\t\trememberConnectionSigningSecretSet(\n\t\t\t\t\t\t\t\tsigningSecretCache,\n\t\t\t\t\t\t\t\tconnection.id,\n\t\t\t\t\t\t\t\tstored,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\t\"[athena-billing] webhook signing secrets could not be loaded; apply embedded billing migrations through 0015\",\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (connectionState.connections.length === 1) {\n\t\t\t\t\t\trememberConnectionSigningSecretSet(\n\t\t\t\t\t\t\tsigningSecretCache,\n\t\t\t\t\t\t\tconnection.id,\n\t\t\t\t\t\t\tconfiguredSecrets,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\trecordBillingBootstrapEvent(\n\t\t\t\tbootstrapEvents,\n\t\t\t\tBILLING_BOOTSTRAP_EVENT.connectionMaterialized,\n\t\t\t);\n\t\t\tconnectionState.initialized = true;\n\t\t\trecordBillingBootstrapEvent(\n\t\t\t\tbootstrapEvents,\n\t\t\t\tBILLING_BOOTSTRAP_EVENT.runtimeReady,\n\t\t\t);\n\t\t\tpatchBillingDiagnostics(existing, {\n\t\t\t\tphase: \"registering-schedulers\",\n\t\t\t});\n\t\t\tregisterEmbeddedBillingScheduler({\n\t\t\t\tenabled: ingestion.webhooks.enabled,\n\t\t\t\texecution: ingestion.webhooks.execution,\n\t\t\t\trun: async (trigger) => {\n\t\t\t\t\tawait billingReady;\n\t\t\t\t\tconst schedulerSql = billingSqlFromInternals(client);\n\t\t\t\t\tif (!schedulerSql || webhookApplicationId == null) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst { runAutomaticBillingWebhookReconcileIfEnabled } = await import(\n\t\t\t\t\t\t\"../../ingestion/automatic.ts\"\n\t\t\t\t\t);\n\t\t\t\t\tawait runAutomaticBillingWebhookReconcileIfEnabled({\n\t\t\t\t\t\tapplicationId: webhookApplicationId,\n\t\t\t\t\t\tappUrl: input.appUrl,\n\t\t\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\t\t\tobservability,\n\t\t\t\t\t\tregistry,\n\t\t\t\t\t\trememberSigningSecret,\n\t\t\t\t\t\tsecretStore,\n\t\t\t\t\t\tsql: schedulerSql,\n\t\t\t\t\t\ttestMode,\n\t\t\t\t\t\ttrigger,\n\t\t\t\t\t\twebhooks: ingestion.webhooks,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tschedule: DEFAULT_BILLING_WEBHOOK_RECONCILIATION_SCHEDULE,\n\t\t\t});\n\t\t\trecordBillingBootstrapEvent(\n\t\t\t\tbootstrapEvents,\n\t\t\t\tBILLING_BOOTSTRAP_EVENT.webhookSchedulerRegistered,\n\t\t\t);\n\t\t\tregisterEmbeddedBillingScheduler({\n\t\t\t\tenabled: shouldAutomaticallyImportBillingCustomers({\n\t\t\t\t\tenabled: input.customerImport?.customers?.enabled === true,\n\t\t\t\t\tmode: input.customerImport?.customers?.mode,\n\t\t\t\t}),\n\t\t\t\texecution: input.customerImport?.customers?.execution,\n\t\t\t\trun: async (trigger) => {\n\t\t\t\t\tawait billingReady;\n\t\t\t\t\tconst schedulerSql = billingSqlFromInternals(client);\n\t\t\t\t\tif (!schedulerSql) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst { runAutomaticBillingCustomerImportIfEnabled } = await import(\n\t\t\t\t\t\t\"../../import/assemble.ts\"\n\t\t\t\t\t);\n\t\t\t\t\tawait runAutomaticBillingCustomerImportIfEnabled({\n\t\t\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\t\t\tcustomerImport: input.customerImport,\n\t\t\t\t\t\tobservability,\n\t\t\t\t\t\tsql: schedulerSql,\n\t\t\t\t\t\ttestMode,\n\t\t\t\t\t\ttrigger,\n\t\t\t\t\t});\n\t\t\t\t\tawait purgeBillingObservability({\n\t\t\t\t\t\tobservability,\n\t\t\t\t\t\tsql: schedulerSql,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tschedule: input.customerImport?.customers?.schedule,\n\t\t\t});\n\t\t\trecordBillingBootstrapEvent(\n\t\t\t\tbootstrapEvents,\n\t\t\t\tBILLING_BOOTSTRAP_EVENT.importSchedulerRegistered,\n\t\t\t);\n\t\t\tpatchBillingDiagnostics(existing, {\n\t\t\t\tconnectionCount:\n\t\t\t\t\texisting?.billingMaterializedConnections?.length ??\n\t\t\t\t\tconnectionState.connections.length,\n\t\t\t\tphase: \"ready\",\n\t\t\t\treadyAt: Date.now(),\n\t\t\t});\n\t\t\treadiness.ready(\"billing\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t\"[athena-billing] configured billing connections failed to materialize\",\n\t\t\t\t{\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t},\n\t\t\t);\n\t\t\tconnectionState.initializationFailed = true;\n\t\t\tconnectionState.initializationMessage =\n\t\t\t\terror instanceof Error ? error.message : String(error);\n\t\t\tconst raw =\n\t\t\t\terror instanceof Error && error.message.trim().length > 0\n\t\t\t\t\t? error.message.trim()\n\t\t\t\t\t: \"billing initialization failed\";\n\t\t\tconst sanitized = /access_|live_|test_|sk_|secret|password|token/i.test(\n\t\t\t\traw,\n\t\t\t)\n\t\t\t\t? \"billing initialization failed\"\n\t\t\t\t: raw.length > 240\n\t\t\t\t\t? `${raw.slice(0, 237)}...`\n\t\t\t\t\t: raw;\n\t\t\tpatchBillingDiagnostics(existing, {\n\t\t\t\tfailure: {\n\t\t\t\t\tmessage: sanitized,\n\t\t\t\t\tstage: \"materializing-connections\",\n\t\t\t\t},\n\t\t\t\tphase: \"failed\",\n\t\t\t});\n\t\t\treadiness.fail(\"billing\", error);\n\t\t}\n\t})();\n}\n\n/** Core createClient plus local Billing overlay. Used by Cloudflare façades. */\nexport function createClientWithAttachedLocalBilling<\n\tTModels extends AthenaClientConfig[\"models\"] = AthenaClientConfig[\"models\"],\n>(config: AthenaClientConfig<TModels>): AthenaClient<TModels> {\n\tassertDataLifecycleConfig(config);\n\tassertBillingProviderRuntimeEnvironment(config.billing?.providers);\n\tconst factory = createClientWithNormalizer as unknown as (\n\t\tinput: unknown,\n\t\tnormalizer: (c: unknown) => unknown,\n\t) => unknown;\n\tconst normalize = normalizeUniversalCreateClientConfig as unknown as (\n\t\tc: unknown,\n\t) => unknown;\n\tconst client = factory(config, normalize) as AthenaClient<TModels>;\n\tassertLocalAuthHooks(athenaAuthConfig(config.auth));\n\tassertLocalAuthObservability(athenaAuthConfig(config.auth));\n\tassertLocalBillingObservability(config.billing);\n\tattachLocalBillingRuntime(client, {\n\t\tappUrl: config.app?.url,\n\t\tapplicationId: resolveBillingWebhookApplicationId({\n\t\t\tapp: config.app,\n\t\t\tclient: config.client,\n\t\t}),\n\t\tcatalog: config.billing?.catalog,\n\t\tconfiguredProviders: config.billing?.providers,\n\t\tcustomerImport: config.billing?.import,\n\t\tingestion: config.billing?.ingestion,\n\t\tmode: config.billing?.mode,\n\t\tobservability: config.billing?.observability,\n\t\ttestMode: config.billing?.testMode,\n\t});\n\tassertLocalBillingRuntimeEnvironment({\n\t\tconfiguredProviders: config.billing?.providers,\n\t\tlocalMaterialized: true,\n\t\tmode: config.billing?.mode,\n\t});\n\treturn client;\n}\n","export type AthenaRuntimeSubsystem =\n\t| \"database\"\n\t| \"auth\"\n\t| \"billing\"\n\t| \"storage\"\n\t| \"event-ingress\";\n\nexport interface AthenaRuntimeReadiness {\n\tfail(subsystem: AthenaRuntimeSubsystem, error: unknown): void;\n\tready(subsystem: AthenaRuntimeSubsystem): void;\n\twaitFor(subsystem: AthenaRuntimeSubsystem): Promise<void>;\n}\n\ninterface DeferredSlot {\n\tpromise: Promise<void>;\n\treject: (reason?: unknown) => void;\n\tresolve: () => void;\n\tsettled: boolean;\n}\n\nfunction createSlot(): DeferredSlot {\n\tlet resolve!: () => void;\n\tlet reject!: (reason?: unknown) => void;\n\tconst promise = new Promise<void>((res, rej) => {\n\t\tresolve = () => {\n\t\t\tres();\n\t\t};\n\t\treject = (reason) => {\n\t\t\trej(reason);\n\t\t};\n\t});\n\tpromise.catch(() => undefined);\n\treturn { promise, reject, resolve, settled: false };\n}\n\nexport function createAthenaRuntimeReadiness(): AthenaRuntimeReadiness {\n\tconst slots = new Map<AthenaRuntimeSubsystem, DeferredSlot>();\n\tconst slot = (subsystem: AthenaRuntimeSubsystem): DeferredSlot => {\n\t\tconst existing = slots.get(subsystem);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst created = createSlot();\n\t\tslots.set(subsystem, created);\n\t\treturn created;\n\t};\n\treturn {\n\t\tfail(subsystem, error) {\n\t\t\tconst current = slot(subsystem);\n\t\t\tif (current.settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcurrent.settled = true;\n\t\t\tcurrent.reject(error);\n\t\t},\n\t\tready(subsystem) {\n\t\t\tconst current = slot(subsystem);\n\t\t\tif (current.settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcurrent.settled = true;\n\t\t\tcurrent.resolve();\n\t\t},\n\t\twaitFor(subsystem) {\n\t\t\treturn slot(subsystem).promise;\n\t\t},\n\t};\n}\n","import { AthenaConfigurationError } from \"../../../config/errors.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport { fingerprintBillingSigningSecret } from \"../ownership.ts\";\nimport { openBillingWebhookSecret, sealBillingWebhookSecret } from \"./envelope.ts\";\nimport type { BillingWebhookSecretStore } from \"./types.ts\";\n\nexport function createPostgresBillingWebhookSecretStore(input: {\n\tmasterKey: string;\n\tsql: BillingSqlExecutor;\n}): BillingWebhookSecretStore {\n\tconst masterKey = input.masterKey.trim();\n\tif (masterKey.length === 0) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_INGESTION_CONFIG_INVALID\",\n\t\t\t\"Encrypted billing webhook secrets require ATHENA_BILLING_WEBHOOK_MASTER_KEY (or billing.ingestion.webhooks.secretMasterKey).\",\n\t\t\t\"billing\",\n\t\t);\n\t}\n\tconst sql = input.sql;\n\treturn {\n\t\tasync resolve(connectionId) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT fingerprint, ciphertext, status\nFROM athena_internal.billing_webhook_signing_secrets\nWHERE connection_id = $1::uuid AND status IN ('current', 'previous')\nORDER BY CASE status WHEN 'current' THEN 0 ELSE 1 END, created_at DESC\n`,\n\t\t\t\t[connectionId],\n\t\t\t);\n\t\t\tlet current: string | undefined;\n\t\t\tconst previous: string[] = [];\n\t\t\tfor (const row of result.rows) {\n\t\t\t\tconst secret = openBillingWebhookSecret(\n\t\t\t\t\tString(row.ciphertext),\n\t\t\t\t\tmasterKey,\n\t\t\t\t);\n\t\t\t\tif (row.status === \"current\" && current == null) {\n\t\t\t\t\tcurrent = secret;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (row.status === \"previous\") {\n\t\t\t\t\tprevious.push(secret);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tprevious,\n\t\t\t\t...(current ? { current } : {}),\n\t\t\t};\n\t\t},\n\t\tasync rotate(inputRotate) {\n\t\t\tawait replaceConnectionSecrets(sql, masterKey, inputRotate.connectionId, [\n\t\t\t\t{ secret: inputRotate.current, status: \"current\" },\n\t\t\t\t...inputRotate.previous.map((secret) => ({\n\t\t\t\t\tsecret,\n\t\t\t\t\tstatus: \"previous\" as const,\n\t\t\t\t})),\n\t\t\t]);\n\t\t},\n\t\tasync storeCurrent(storeInput) {\n\t\t\tconst existing = await sql.query(\n\t\t\t\t`\nSELECT fingerprint, ciphertext, status\nFROM athena_internal.billing_webhook_signing_secrets\nWHERE connection_id = $1::uuid AND status IN ('current', 'previous')\n`,\n\t\t\t\t[storeInput.connectionId],\n\t\t\t);\n\t\t\tconst next: { secret: string; status: \"current\" | \"previous\" }[] = [\n\t\t\t\t{ secret: storeInput.secret, status: \"current\" },\n\t\t\t];\n\t\t\tfor (const row of existing.rows) {\n\t\t\t\tif (String(row.fingerprint) === storeInput.fingerprint) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst secret = openBillingWebhookSecret(\n\t\t\t\t\tString(row.ciphertext),\n\t\t\t\t\tmasterKey,\n\t\t\t\t);\n\t\t\t\tif (row.status === \"current\") {\n\t\t\t\t\tnext.push({ secret, status: \"previous\" });\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait replaceConnectionSecrets(\n\t\t\t\tsql,\n\t\t\t\tmasterKey,\n\t\t\t\tstoreInput.connectionId,\n\t\t\t\tnext,\n\t\t\t);\n\t\t},\n\t};\n}\n\nasync function replaceConnectionSecrets(\n\tsql: BillingSqlExecutor,\n\tmasterKey: string,\n\tconnectionId: string,\n\tsecrets: readonly { secret: string; status: \"current\" | \"previous\" }[],\n): Promise<void> {\n\tawait sql.query(\n\t\t`\nUPDATE athena_internal.billing_webhook_signing_secrets\nSET status = 'retired', retired_at = now()\nWHERE connection_id = $1::uuid AND status IN ('current', 'previous')\n`,\n\t\t[connectionId],\n\t);\n\tfor (const entry of secrets) {\n\t\tconst fingerprint = fingerprintBillingSigningSecret(entry.secret);\n\t\tconst ciphertext = sealBillingWebhookSecret(entry.secret, masterKey);\n\t\tawait sql.query(\n\t\t\t`\nINSERT INTO athena_internal.billing_webhook_signing_secrets (\n\tconnection_id, key_version, fingerprint, ciphertext, status, created_at\n) VALUES ($1::uuid, 1, $2, $3, $4, now())\nON CONFLICT (connection_id, fingerprint) DO UPDATE SET\n\tciphertext = EXCLUDED.ciphertext,\n\tstatus = EXCLUDED.status,\n\tretired_at = NULL,\n\tkey_version = EXCLUDED.key_version\n`,\n\t\t\t[connectionId, fingerprint, ciphertext, entry.status],\n\t\t);\n\t}\n}\n","import { createCipheriv, createDecipheriv, createHash, randomBytes } from \"node:crypto\";\n\nconst VERSION = \"v1\";\nconst IV_LENGTH = 12;\nconst AUTH_TAG_LENGTH = 16;\n\nfunction aesKey(masterKey: string): Buffer {\n\treturn createHash(\"sha256\").update(masterKey, \"utf8\").digest();\n}\n\nexport function sealBillingWebhookSecret(\n\tsecret: string,\n\tmasterKey: string,\n): string {\n\tconst key = aesKey(masterKey);\n\tconst iv = randomBytes(IV_LENGTH);\n\tconst cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n\tconst encrypted = Buffer.concat([\n\t\tcipher.update(secret, \"utf8\"),\n\t\tcipher.final(),\n\t]);\n\tconst tag = cipher.getAuthTag();\n\treturn `${VERSION}.${iv.toString(\"base64url\")}.${encrypted.toString(\"base64url\")}.${tag.toString(\"base64url\")}`;\n}\n\nexport function openBillingWebhookSecret(\n\tciphertext: string,\n\tmasterKey: string,\n): string {\n\tconst parts = ciphertext.split(\".\");\n\tif (parts.length !== 4 || parts[0] !== VERSION) {\n\t\tthrow new Error(\"Unsupported billing webhook secret envelope.\");\n\t}\n\tconst ivPart = parts[1];\n\tconst dataPart = parts[2];\n\tconst tagPart = parts[3];\n\tif (ivPart == null || dataPart == null || tagPart == null) {\n\t\tthrow new Error(\"Unsupported billing webhook secret envelope.\");\n\t}\n\tconst iv = Buffer.from(ivPart, \"base64url\");\n\tconst data = Buffer.from(dataPart, \"base64url\");\n\tconst tag = Buffer.from(tagPart, \"base64url\");\n\tif (iv.length !== IV_LENGTH || tag.length !== AUTH_TAG_LENGTH) {\n\t\tthrow new Error(\"Invalid billing webhook secret envelope.\");\n\t}\n\tconst key = aesKey(masterKey);\n\tconst decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n\tdecipher.setAuthTag(tag);\n\treturn Buffer.concat([decipher.update(data), decipher.final()]).toString(\n\t\t\"utf8\",\n\t);\n}\n","import { flattenSigningSecrets } from \"../config.ts\";\nimport type { BillingSigningSecretSet } from \"../types.ts\";\n\nexport type BillingConnectionSigningSecretCache = Map<string, string[]>;\n\nexport function rememberConnectionSigningSecret(\n\tcache: BillingConnectionSigningSecretCache,\n\tconnectionId: string,\n\tsecret: string,\n): void {\n\tconst trimmed = secret.trim();\n\tif (trimmed.length === 0) {\n\t\treturn;\n\t}\n\tconst existing = cache.get(connectionId) ?? [];\n\tif (!existing.includes(trimmed)) {\n\t\texisting.push(trimmed);\n\t\tcache.set(connectionId, existing);\n\t}\n}\n\nexport function rememberConnectionSigningSecretSet(\n\tcache: BillingConnectionSigningSecretCache,\n\tconnectionId: string,\n\tsecrets: BillingSigningSecretSet,\n): void {\n\tfor (const secret of flattenSigningSecrets(secrets)) {\n\t\trememberConnectionSigningSecret(cache, connectionId, secret);\n\t}\n}\n\nexport function signingSecretsForConnection(\n\tcache: BillingConnectionSigningSecretCache,\n\tconnectionId: string | undefined,\n): readonly string[] {\n\tif (connectionId == null || connectionId.length === 0) {\n\t\treturn [];\n\t}\n\treturn cache.get(connectionId) ?? [];\n}\n","import { createHash } from \"node:crypto\";\n\nexport function resolveBillingWebhookMasterKey(input: {\n\tconfigured?: string;\n\tdatabaseUrl?: string;\n}): string | undefined {\n\tconst fromEnv = process.env.ATHENA_BILLING_WEBHOOK_MASTER_KEY?.trim();\n\tif (fromEnv && fromEnv.length > 0) {\n\t\treturn fromEnv;\n\t}\n\tconst configured = input.configured?.trim();\n\tif (configured && configured.length > 0) {\n\t\treturn configured;\n\t}\n\tconst databaseUrl = input.databaseUrl?.trim();\n\tif (databaseUrl && databaseUrl.length > 0) {\n\t\treturn createHash(\"sha256\")\n\t\t\t.update(`athena-billing-webhook-secrets:${databaseUrl}`, \"utf8\")\n\t\t\t.digest(\"hex\");\n\t}\n\treturn undefined;\n}\n","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type { NormalizedAthenaBillingObservability } from \"./types.ts\";\n\nexport async function purgeBillingObservability(input: {\n\tnow?: Date;\n\tobservability: NormalizedAthenaBillingObservability;\n\tsql: BillingSqlExecutor;\n}): Promise<void> {\n\tconst now = input.now ?? new Date();\n\tconst traceDays = input.observability.traces.retentionDays ?? 30;\n\tconst auditDays = input.observability.auditRetentionDays;\n\tawait input.sql.query(\n\t\t`DELETE FROM athena.traces_billing WHERE completed_at < $1::timestamptz`,\n\t\t[new Date(now.getTime() - traceDays * 24 * 60 * 60 * 1000)],\n\t);\n\tawait input.sql.query(\n\t\t`DELETE FROM billing.billing_import_runs WHERE started_at < $1::timestamptz`,\n\t\t[new Date(now.getTime() - traceDays * 24 * 60 * 60 * 1000)],\n\t);\n\tawait input.sql.query(\n\t\t`DELETE FROM billing.billing_import_candidates\n\t\t WHERE created_at < $1::timestamptz`,\n\t\t[new Date(now.getTime() - traceDays * 24 * 60 * 60 * 1000)],\n\t);\n\tawait input.sql.query(\n\t\t`DELETE FROM billing.billing_webhook_ingress_stages WHERE occurred_at < $1::timestamptz`,\n\t\t[\n\t\t\tnew Date(\n\t\t\t\tnow.getTime() -\n\t\t\t\t\tinput.observability.webhookIngressRetentionDays * 24 * 60 * 60 * 1000,\n\t\t\t),\n\t\t],\n\t);\n\tif (auditDays != null) {\n\t\tawait input.sql.query(\n\t\t\t`DELETE FROM athena.audit_log_billing WHERE created_at < $1::timestamptz`,\n\t\t\t[new Date(now.getTime() - auditDays * 24 * 60 * 60 * 1000)],\n\t\t);\n\t}\n}\n","import type { AthenaClientInternals } from \"../../runtime/client-internals.ts\";\n\nexport type AthenaBillingDiagnosticsPhase =\n\t| \"unconfigured\"\n\t| \"provider-registry\"\n\t| \"materializing-connections\"\n\t| \"attaching-ingress\"\n\t| \"registering-schedulers\"\n\t| \"ready\"\n\t| \"failed\";\n\nexport type AthenaBillingDiagnostics = {\n\tconnectionCount: number;\n\tfailure?: {\n\t\tcode?: string;\n\t\tmessage: string;\n\t\tstage: string;\n\t};\n\tphase: AthenaBillingDiagnosticsPhase;\n\treadyAt?: number;\n\tstartedAt?: number;\n};\n\nexport type AthenaBillingInspectedConnection = {\n\taccountReference: string;\n\tcredentialReference: string;\n\tid: string;\n\tprovider: \"mollie\";\n};\n\nexport function emptyBillingDiagnostics(): AthenaBillingDiagnostics {\n\treturn {\n\t\tconnectionCount: 0,\n\t\tphase: \"unconfigured\",\n\t};\n}\n\nexport function patchBillingDiagnostics(\n\tinternals: AthenaClientInternals | undefined,\n\tpatch: Partial<AthenaBillingDiagnostics>,\n): void {\n\tif (!internals) {\n\t\treturn;\n\t}\n\tconst current = internals.billingDiagnostics ?? emptyBillingDiagnostics();\n\tinternals.billingDiagnostics = {\n\t\t...current,\n\t\t...patch,\n\t\tfailure: patch.failure ?? current.failure,\n\t};\n}\n","import { randomBytes } from \"node:crypto\";\nimport type {\n\tBillingProviderConfigMap,\n\tMollieBillingProviderConfig,\n} from \"../../../providers/types.ts\";\nimport type { BillingSqlExecutor } from \"../../../subject/repository.ts\";\nimport { resolveBillingEnvironment } from \"../../environment.ts\";\nimport { defaultBillingCredentialReference } from \"../providers/connection-binding.ts\";\nimport {\n\ttype BillingConnectionIdentity,\n\tderiveConfiguredProviderAccountReference,\n} from \"./identity.ts\";\n\nexport interface MaterializedBillingConnection {\n\taccountReference: string;\n\tcredentialReference: string;\n\tid: string;\n\tprovider: \"mollie\";\n\twebhookIngressToken: string;\n}\n\nexport interface MaterializeConfiguredBillingConnectionsResult {\n\tconnections: readonly MaterializedBillingConnection[];\n}\n\nexport interface ConfiguredBillingConnectionIntent {\n\taccountReference: string;\n\tcredentialKind: string;\n\tcredentialReference: string;\n\tenvironment: \"test\" | \"live\";\n\tidentity: BillingConnectionIdentity;\n\tprovider: \"mollie\";\n\t/**\n\t * Provider-confirmed remote account identity (e.g. a Mollie organization\n\t * id returned by discovery). Null until verification — never invent one\n\t * from config. `accountReference` stays the local upsert identity.\n\t */\n\tproviderAccountId: string | null;\n}\n\nfunction mollieCredentialKind(config: MollieBillingProviderConfig): string {\n\tif (config.credentialKind != null) {\n\t\treturn config.credentialKind;\n\t}\n\tif (\"accessToken\" in config) {\n\t\treturn \"advanced_access_token\";\n\t}\n\treturn \"api_key\";\n}\n\nexport function configuredBillingConnectionIntents(input: {\n\tapplicationId: string;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tprovider?: \"mollie\";\n\ttestMode?: boolean;\n}): readonly ConfiguredBillingConnectionIntent[] {\n\tconst applicationId = input.applicationId.trim();\n\tif (applicationId.length === 0) {\n\t\treturn [];\n\t}\n\tconst environment = resolveBillingEnvironment({\n\t\ttestMode: input.testMode,\n\t}).name;\n\tconst intents: ConfiguredBillingConnectionIntent[] = [];\n\tconst mollie = input.configuredProviders?.mollie;\n\tif (mollie != null && (input.provider == null || input.provider === \"mollie\")) {\n\t\tconst credentialReference = defaultBillingCredentialReference(\n\t\t\t\"mollie\",\n\t\t\tenvironment,\n\t\t);\n\t\tconst accountReference = deriveConfiguredProviderAccountReference({\n\t\t\tapplicationId,\n\t\t\tenvironment,\n\t\t\tprovider: \"mollie\",\n\t\t\tscope: \"organization\",\n\t\t});\n\t\tintents.push({\n\t\t\taccountReference,\n\t\t\tcredentialKind: mollieCredentialKind(mollie),\n\t\t\tcredentialReference,\n\t\t\tenvironment,\n\t\t\tidentity: {\n\t\t\t\tcredentialReference,\n\t\t\t\tenvironment,\n\t\t\t\tprovider: \"mollie\",\n\t\t\t},\n\t\t\tprovider: \"mollie\",\n\t\t\tproviderAccountId: null,\n\t\t});\n\t}\n\tconst accounts = input.configuredProviders?.mollieAccounts;\n\tif (\n\t\taccounts != null &&\n\t\t(input.provider == null || input.provider === \"mollie\")\n\t) {\n\t\tfor (const [accountId, config] of Object.entries(accounts)) {\n\t\t\tif (config == null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst slot = accountId.trim();\n\t\t\tif (slot.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst accountReference = deriveConfiguredProviderAccountReference({\n\t\t\t\tapplicationId,\n\t\t\t\tenvironment,\n\t\t\t\tprovider: \"mollie\",\n\t\t\t\tscope: slot,\n\t\t\t});\n\t\t\tconst credentialReference = `providers.mollie:${slot}`;\n\t\t\tintents.push({\n\t\t\t\taccountReference,\n\t\t\t\tcredentialKind: mollieCredentialKind(config),\n\t\t\t\tcredentialReference,\n\t\t\t\tenvironment,\n\t\t\t\tidentity: {\n\t\t\t\t\tcredentialReference,\n\t\t\t\t\tenvironment,\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tscopeKey: slot,\n\t\t\t\t},\n\t\t\t\tprovider: \"mollie\",\n\t\t\t\tproviderAccountId: null,\n\t\t\t});\n\t\t}\n\t}\n\treturn intents;\n}\n\nconst DEDUPLICATE_DECLARED_SLOT_SQL = `\nWITH ranked AS (\n\tSELECT id,\n\t\trow_number() OVER (\n\t\t\tPARTITION BY owner_id, provider, environment, credential_reference\n\t\t\tORDER BY\n\t\t\t\tCASE WHEN status = 'active' THEN 0 ELSE 1 END,\n\t\t\t\tupdated_at DESC,\n\t\t\t\tcreated_at DESC\n\t\t) AS rn\n\tFROM billing.billing_provider_connections\n\tWHERE deleted_at IS NULL\n)\nUPDATE billing.billing_provider_connections AS connections\nSET deleted_at = now(),\n\tstatus = 'disabled',\n\tupdated_at = now()\nFROM ranked\nWHERE connections.id = ranked.id\n  AND ranked.rn > 1\n`;\n\nconst ENSURE_DECLARED_SLOT_INDEX_SQL = `\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_provider_connections_declared_slot\nON billing.billing_provider_connections (\n\towner_id,\n\tprovider,\n\tenvironment,\n\tcredential_reference\n)\nWHERE deleted_at IS NULL\n`;\n\nconst billingConnectionDeclaredSlotSql = ENSURE_DECLARED_SLOT_INDEX_SQL;\n\nfunction sqlTextLiteral(value: string, label: string): string {\n\tif (value.length === 0 || value.length > 256) {\n\t\tthrow new Error(\n\t\t\t`Configured billing connection ${label} is empty or too long.`,\n\t\t);\n\t}\n\tif (!/^[A-Za-z0-9._:+-]+$/.test(value)) {\n\t\tthrow new Error(\n\t\t\t`Configured billing connection ${label} must not contain SQL metacharacters.`,\n\t\t);\n\t}\n\treturn `'${value}'`;\n}\n\nfunction sqlNullableProviderAccountId(value: string | null): string {\n\tif (value == null) {\n\t\treturn \"NULL\";\n\t}\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) {\n\t\tthrow new Error(\n\t\t\t\"Configured billing connection provider_account_id must be null or non-empty.\",\n\t\t);\n\t}\n\treturn sqlTextLiteral(trimmed, \"provider_account_id\");\n}\n\nconst CONFIGURED_CONNECTION_INIT = Symbol.for(\n\t\"@xylex-group/athena.billingConfiguredConnectionInit\",\n);\n\ntype ConfiguredConnectionInitCache = Map<\n\tstring,\n\tPromise<MaterializeConfiguredBillingConnectionsResult>\n>;\n\nfunction configuredConnectionInitCache(): ConfiguredConnectionInitCache {\n\tconst holder = globalThis as typeof globalThis & {\n\t\t[CONFIGURED_CONNECTION_INIT]?: ConfiguredConnectionInitCache;\n\t};\n\tholder[CONFIGURED_CONNECTION_INIT] ??= new Map();\n\treturn holder[CONFIGURED_CONNECTION_INIT];\n}\n\nexport function configuredBillingConnectionInitKey(input: {\n\tapplicationId: string;\n\tprovider?: \"mollie\";\n\ttestMode?: boolean;\n}): string {\n\tconst environment = resolveBillingEnvironment({\n\t\ttestMode: input.testMode,\n\t}).name;\n\treturn `${input.applicationId.trim()}\\0${environment}\\0${input.provider ?? \"*\"}`;\n}\n\n/**\n * One initialization promise per process runtime. Concurrent callers await\n * the same promise. Failed bootstrap is cached so capabilities/sign-in\n * probes do not rematerialize (retry is deliberate — admin rematerialize).\n */\nexport function singleFlightConfiguredBillingConnectionMaterialize(\n\tkey: string,\n\trun: () => Promise<MaterializeConfiguredBillingConnectionsResult>,\n): Promise<MaterializeConfiguredBillingConnectionsResult> {\n\tconst cache = configuredConnectionInitCache();\n\tconst existing = cache.get(key);\n\tif (existing) {\n\t\treturn existing;\n\t}\n\tconst started = run();\n\tcache.set(key, started);\n\treturn started;\n}\n\nfunction upsertConfiguredConnectionSql(input: {\n\taccountReference: string;\n\tapplicationId: string;\n\tcredentialKind: string;\n\tcredentialReference: string;\n\tenvironment: \"test\" | \"live\";\n\tprovider: \"mollie\";\n\tproviderAccountId: string | null;\n\twebhookIngressToken: string;\n}): string {\n\tconst applicationId = sqlTextLiteral(input.applicationId, \"owner_id\");\n\tconst provider = sqlTextLiteral(input.provider, \"provider\");\n\tconst environment = sqlTextLiteral(input.environment, \"environment\");\n\tconst credentialKind = sqlTextLiteral(\n\t\tinput.credentialKind,\n\t\t\"credential_kind\",\n\t);\n\tconst credentialReference = sqlTextLiteral(\n\t\tinput.credentialReference,\n\t\t\"credential_reference\",\n\t);\n\tconst accountReference = sqlTextLiteral(\n\t\tinput.accountReference,\n\t\t\"account_reference\",\n\t);\n\tconst webhookIngressToken = sqlTextLiteral(\n\t\tinput.webhookIngressToken,\n\t\t\"webhook_ingress_token\",\n\t);\n\tconst providerAccountId = sqlNullableProviderAccountId(\n\t\tinput.providerAccountId,\n\t);\n\treturn `\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${applicationId},\n\t${provider},\n\t${environment},\n\t${environment},\n\t'active',\n\t${credentialKind},\n\t${credentialReference},\n\t${providerAccountId},\n\t${accountReference},\n\t'[]'::jsonb,\n\t'{}'::jsonb,\n\tjsonb_build_object(\n\t\t'managedBy', 'application_config',\n\t\t'webhookIngressToken', ${webhookIngressToken}\n\t)\n)\nON CONFLICT (provider, account_reference, environment)\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\towner_kind = EXCLUDED.owner_kind,\n\towner_id = EXCLUDED.owner_id,\n\tupdated_at = now()\nRETURNING id::text AS id,\n\tmetadata->>'webhookIngressToken' AS webhook_ingress_token\n`;\n}\n\nfunction supersedeOtherEnvironmentSql(input: {\n\tapplicationId: string;\n\tcredentialReference: string;\n\tenvironment: \"test\" | \"live\";\n\tid: string;\n\tprovider: \"mollie\";\n}): string {\n\tconst applicationId = sqlTextLiteral(input.applicationId, \"owner_id\");\n\tconst provider = sqlTextLiteral(input.provider, \"provider\");\n\tconst credentialReference = sqlTextLiteral(\n\t\tinput.credentialReference,\n\t\t\"credential_reference\",\n\t);\n\tconst environment = sqlTextLiteral(input.environment, \"environment\");\n\tconst id = sqlTextLiteral(input.id, \"id\");\n\treturn `\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', ${environment},\n\t\t\t'supersededByCredentialReference', ${credentialReference}\n\t\t)\nWHERE deleted_at IS NULL\n  AND status = 'active'\n  AND owner_kind = 'tenant'\n  AND owner_id = ${applicationId}\n  AND lower(provider) = lower(${provider})\n  AND id::text <> ${id}\n  AND (\n    credential_reference = ${credentialReference}\n    OR (\n      position(':' in credential_reference) = 0\n      AND environment <> ${environment}\n    )\n  )\n`;\n}\n\nfunction mintWebhookIngressToken(): string {\n\treturn randomBytes(24).toString(\"base64url\");\n}\n\nfunction assertNoSecretMaterial(\n\tvalue: unknown,\n\tlabel: string,\n): void {\n\tif (typeof value !== \"string\") {\n\t\treturn;\n\t}\n\tconst lowered = value.toLowerCase();\n\tif (\n\t\tlowered.startsWith(\"access_\") ||\n\t\tlowered.startsWith(\"live_\") ||\n\t\tlowered.startsWith(\"test_\") ||\n\t\tlowered.startsWith(\"sk_\") ||\n\t\tlowered.includes(\"secret\")\n\t) {\n\t\tthrow new Error(\n\t\t\t`Configured billing connection ${label} must not contain credential material.`,\n\t\t);\n\t}\n}\n\nexport async function materializeConfiguredBillingConnections(input: {\n\tapplicationId: string;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tprovider?: \"mollie\";\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): Promise<MaterializeConfiguredBillingConnectionsResult> {\n\tconst applicationId = input.applicationId.trim();\n\tconst testMode = resolveBillingEnvironment({\n\t\ttestMode: input.testMode,\n\t}).testMode;\n\tconst intents = configuredBillingConnectionIntents({\n\t\tapplicationId,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tprovider: input.provider,\n\t\ttestMode,\n\t});\n\tfor (const intent of intents) {\n\t\tassertNoSecretMaterial(intent.credentialReference, \"credential_reference\");\n\t\tassertNoSecretMaterial(intent.accountReference, \"account_reference\");\n\t}\n\tconst connections: MaterializedBillingConnection[] = [];\n\tif (intents.length > 0) {\n\t\tawait input.sql.query(DEDUPLICATE_DECLARED_SLOT_SQL);\n\t\ttry {\n\t\t\tawait input.sql.query(billingConnectionDeclaredSlotSql);\n\t\t} catch {\n\t\t\t// Upsert targets idx_billing_provider_connections_identity from 0003.\n\t\t}\n\t}\n\tfor (const intent of intents) {\n\t\tconst mintedWebhookIngressToken = mintWebhookIngressToken();\n\t\tassertNoSecretMaterial(mintedWebhookIngressToken, \"webhook_ingress_token\");\n\t\tconst result = await input.sql.query(\n\t\t\tupsertConfiguredConnectionSql({\n\t\t\t\taccountReference: intent.accountReference,\n\t\t\t\tapplicationId,\n\t\t\t\tcredentialKind: intent.credentialKind,\n\t\t\t\tcredentialReference: intent.credentialReference,\n\t\t\t\tenvironment: intent.environment,\n\t\t\t\tprovider: intent.provider,\n\t\t\t\tproviderAccountId: intent.providerAccountId,\n\t\t\t\twebhookIngressToken: mintedWebhookIngressToken,\n\t\t\t}),\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tconst id = row?.id;\n\t\tconst webhookIngressToken = row?.webhook_ingress_token;\n\t\tif (typeof id !== \"string\" || id.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Configured billing connection materialization did not return an id.\",\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\ttypeof webhookIngressToken !== \"string\" ||\n\t\t\twebhookIngressToken.length === 0\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Configured billing connection materialization did not return a webhook ingress token.\",\n\t\t\t);\n\t\t}\n\t\tassertNoSecretMaterial(webhookIngressToken, \"webhook_ingress_token\");\n\t\tawait input.sql.query(\n\t\t\tsupersedeOtherEnvironmentSql({\n\t\t\t\tapplicationId,\n\t\t\t\tcredentialReference: intent.credentialReference,\n\t\t\t\tenvironment: intent.environment,\n\t\t\t\tid,\n\t\t\t\tprovider: intent.provider,\n\t\t\t}),\n\t\t);\n\t\tconnections.push({\n\t\t\taccountReference: intent.accountReference,\n\t\t\tcredentialReference: intent.credentialReference,\n\t\t\tid,\n\t\t\tprovider: intent.provider,\n\t\t\twebhookIngressToken,\n\t\t});\n\t}\n\treturn { connections };\n}\n","export type BillingConnectionProvider = \"mollie\" | \"stripe\";\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 type BillingConnectionIdentity = {\n\tprovider: BillingConnectionProvider;\n\tenvironment: BillingConnectionEnvironment;\n\tcredentialReference: string;\n\tscopeKey?: 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\tapplicationId: string;\n\tenvironment: BillingConnectionEnvironment;\n\tprovider: string;\n\tscope?: ConfiguredBillingProviderAccountScope;\n}): string {\n\tconst applicationId = input.applicationId.trim();\n\tconst provider = input.provider.trim();\n\tconst scope = input.scope?.trim();\n\tif (\n\t\tscope == null ||\n\t\tscope.length === 0 ||\n\t\tscope === \"organization\"\n\t) {\n\t\treturn `${applicationId}-${provider}-${input.environment}`;\n\t}\n\treturn `${applicationId}-${provider}-${scope}-${input.environment}`;\n}\n","export const ATHENA_EVENT_INGRESS_UNAVAILABLE =\n\t\"ATHENA_EVENT_INGRESS_UNAVAILABLE\" as const;\nexport const ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED =\n\t\"ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED\" as const;\nexport const ATHENA_EVENT_INGRESS_FAILED =\n\t\"ATHENA_EVENT_INGRESS_FAILED\" as const;\nexport const ATHENA_INGRESS_MOLLIE_UNAVAILABLE =\n\t\"ATHENA_INGRESS_MOLLIE_UNAVAILABLE\" as const;\nexport const ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID =\n\t\"ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID\" as const;\nexport const ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID =\n\t\"ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID\" as const;\n\nexport type AthenaEventIngressErrorCode =\n\t| typeof ATHENA_EVENT_INGRESS_UNAVAILABLE\n\t| typeof ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED\n\t| typeof ATHENA_EVENT_INGRESS_FAILED\n\t| typeof ATHENA_INGRESS_MOLLIE_UNAVAILABLE\n\t| typeof ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID\n\t| typeof ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID;\n\nexport class AthenaEventIngressError extends Error {\n\treadonly code: AthenaEventIngressErrorCode;\n\treadonly domain: \"billing\" | \"ingress\";\n\treadonly retryable: boolean;\n\treadonly provider?: string;\n\t/** Safe envelope facts only — never raw webhook bodies or secrets. */\n\treadonly diagnostics?: Readonly<{\n\t\tbodyBytes?: number;\n\t\tbodyKind?: \"empty\" | \"json\" | \"form\" | \"unknown\";\n\t\tcontentType?: string;\n\t}>;\n\n\tconstructor(input: {\n\t\tcode: AthenaEventIngressErrorCode;\n\t\tmessage: string;\n\t\tdomain?: \"billing\" | \"ingress\";\n\t\tretryable?: boolean;\n\t\tprovider?: string;\n\t\tdiagnostics?: {\n\t\t\tbodyBytes?: number;\n\t\t\tbodyKind?: \"empty\" | \"json\" | \"form\" | \"unknown\";\n\t\t\tcontentType?: string;\n\t\t};\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaEventIngressError\";\n\t\tthis.code = input.code;\n\t\tthis.domain = input.domain ?? \"ingress\";\n\t\tthis.retryable = input.retryable ?? false;\n\t\tif (input.provider) {\n\t\t\tthis.provider = input.provider;\n\t\t}\n\t\tif (input.diagnostics) {\n\t\t\tthis.diagnostics = input.diagnostics;\n\t\t}\n\t}\n}\n\nexport function isAthenaEventIngressError(\n\terror: unknown,\n): error is AthenaEventIngressError {\n\tif (error instanceof AthenaEventIngressError) {\n\t\treturn true;\n\t}\n\tif (error == null || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst record = error as { code?: unknown; name?: unknown };\n\treturn (\n\t\trecord.name === \"AthenaEventIngressError\" &&\n\t\ttypeof record.code === \"string\"\n\t);\n}\n\nexport function eventIngressHttpStatus(error: unknown): number {\n\tif (!isAthenaEventIngressError(error)) {\n\t\treturn 400;\n\t}\n\tif (error.code === ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID) {\n\t\treturn 401;\n\t}\n\tif (\n\t\terror.code === ATHENA_EVENT_INGRESS_UNAVAILABLE ||\n\t\terror.code === ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED ||\n\t\terror.code === ATHENA_INGRESS_MOLLIE_UNAVAILABLE\n\t) {\n\t\treturn 503;\n\t}\n\treturn 400;\n}\n","import type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\nimport type {\n\tEventIngressDatabase,\n\tEventIngressQueryResult,\n} from \"./persistence.ts\";\n\nfunction toEventIngressQueryResult<T>(\n\tresult: { rowCount?: number | null; rows: unknown[] },\n): EventIngressQueryResult<T> {\n\treturn {\n\t\trowCount: result.rowCount ?? result.rows.length,\n\t\trows: result.rows as T[],\n\t};\n}\n\nexport function eventIngressDatabaseFromPool(\n\tpool: AthenaPostgresPool,\n): EventIngressDatabase {\n\treturn {\n\t\tasync query<T = Record<string, unknown>>(\n\t\t\ttext: string,\n\t\t\tvalues?: unknown[],\n\t\t) {\n\t\t\tconst result = await pool.query(text, values);\n\t\t\treturn toEventIngressQueryResult<T>(result);\n\t\t},\n\t\tasync transaction(fn) {\n\t\t\tconst client = await pool.connect();\n\t\t\tconst tx: EventIngressDatabase = {\n\t\t\t\tasync query<T = Record<string, unknown>>(\n\t\t\t\t\ttext: string,\n\t\t\t\t\tvalues?: unknown[],\n\t\t\t\t) {\n\t\t\t\t\tconst result = await client.query(text, values);\n\t\t\t\t\treturn toEventIngressQueryResult<T>(result);\n\t\t\t\t},\n\t\t\t\ttransaction(inner) {\n\t\t\t\t\treturn inner(tx);\n\t\t\t\t},\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait client.query(\"BEGIN\");\n\t\t\t\tconst result = await fn(tx);\n\t\t\t\tawait client.query(\"COMMIT\");\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t},\n\t};\n}\n","import type { CanonicalEventIR } from \"../events/ir.ts\";\nimport type { AthenaIngressIR } from \"./ir.ts\";\nimport type {\n\tEventIngressDatabase,\n\tEventIngressPersistence,\n} from \"./persistence.ts\";\n\nexport interface EventIngressResult<\n\tTDocument = unknown,\n\tTEvent extends CanonicalEventIR = CanonicalEventIR,\n> {\n\tduplicate: boolean;\n\tignored?: boolean;\n\tevents: readonly TEvent[];\n\tdocument?: TDocument;\n\t/**\n\t * Downstream customer import / reconciliation after the ingress row is\n\t * persisted. HTTP 202 can still report `failed` here.\n\t */\n\treconciliation?: \"completed\" | \"failed\" | \"skipped\";\n}\n\nexport interface EventIngressRuntimeContext<TDomain = unknown> {\n\tdatabase: EventIngressDatabase;\n\tpersistence: EventIngressPersistence;\n\tdomain: TDomain;\n}\n\nexport interface EventIngressDomainHandler<\n\tTDomain = unknown,\n\tTDocument = unknown,\n\tTEvent extends CanonicalEventIR = CanonicalEventIR,\n> {\n\tingest(\n\t\tingress: AthenaIngressIR,\n\t\truntime: EventIngressRuntimeContext<TDomain>,\n\t): Promise<EventIngressResult<TDocument, TEvent>>;\n}\n\nexport interface EventIngressRuntime<\n\tTDocument = unknown,\n\tTEvent extends CanonicalEventIR = CanonicalEventIR,\n> {\n\tingest(\n\t\tingress: AthenaIngressIR,\n\t): Promise<EventIngressResult<TDocument, TEvent>>;\n}\n\nexport function createEventIngressRuntime<\n\tTDomain = unknown,\n\tTDocument = unknown,\n\tTEvent extends CanonicalEventIR = CanonicalEventIR,\n>(input: {\n\tcontext: EventIngressRuntimeContext<TDomain>;\n\thandler: EventIngressDomainHandler<TDomain, TDocument, TEvent>;\n}): EventIngressRuntime<TDocument, TEvent> {\n\treturn {\n\t\tingest(ingress) {\n\t\t\treturn input.handler.ingest(ingress, input.context);\n\t\t},\n\t};\n}\n","import type { AthenaIngressIR } from \"./ir.ts\";\nimport type {\n\tEventIngressDatabase,\n\tEventIngressPersistence,\n\tEventIngressRecord,\n} from \"./persistence.ts\";\n\nfunction asRecord(value: unknown): Record<string, string> {\n\tif (value && typeof value === \"object\" && !Array.isArray(value)) {\n\t\treturn value as Record<string, string>;\n\t}\n\treturn {};\n}\n\nexport type EventIngressRow = {\n\tid: string;\n\tdomain: string;\n\tprovider: string | null;\n\tprovider_event_id: string | null;\n\tconnection_id: string | null;\n\tstatus: EventIngressRecord[\"status\"];\n\tbody: Buffer;\n\theaders: unknown;\n\treceived_at: Date;\n\tcorrelation_id: string | null;\n\ttrace_id: string | null;\n\tattempt_count: number;\n\tfailure_stage?: string | null;\n\tfirst_failed_at?: Date | null;\n\tnext_attempt_at?: Date | null;\n\tlease_expires_at?: Date | null;\n};\n\nexport function mapIngressRow(row: EventIngressRow): EventIngressRecord {\n\treturn {\n\t\tid: row.id,\n\t\tdomain: row.domain,\n\t\tprovider: row.provider,\n\t\tproviderEventId: row.provider_event_id,\n\t\tconnectionId: row.connection_id,\n\t\tstatus: row.status,\n\t\tbody: new Uint8Array(row.body),\n\t\theaders: asRecord(row.headers),\n\t\treceivedAt: new Date(row.received_at),\n\t\tcorrelationId: row.correlation_id,\n\t\ttraceId: row.trace_id,\n\t\tattemptCount: row.attempt_count,\n\t\tfailureStage: row.failure_stage ?? null,\n\t\tfirstFailedAt: row.first_failed_at\n\t\t\t? new Date(row.first_failed_at)\n\t\t\t: null,\n\t\tnextAttemptAt: row.next_attempt_at\n\t\t\t? new Date(row.next_attempt_at)\n\t\t\t: null,\n\t\tleaseExpiresAt: row.lease_expires_at\n\t\t\t? new Date(row.lease_expires_at)\n\t\t\t: null,\n\t};\n}\n\nfunction insertValues(\n\tingress: AthenaIngressIR,\n\tmeta: { provider: string | null; providerEventId: string | null },\n): unknown[] {\n\treturn [\n\t\tingress.id,\n\t\tingress.domain,\n\t\tmeta.provider,\n\t\tmeta.providerEventId,\n\t\tingress.connectionId ?? null,\n\t\tingress.receivedAt.toISOString(),\n\t\tBuffer.from(ingress.body),\n\t\tJSON.stringify(ingress.headers),\n\t\tingress.correlationId ?? null,\n\t\tingress.traceId ?? null,\n\t];\n}\n\nasync function lockProviderEventClaim(\n\ttx: EventIngressDatabase,\n\tinput: {\n\t\tdomain: string;\n\t\tprovider: string | null;\n\t\tproviderEventId: string;\n\t},\n): Promise<void> {\n\tawait tx.query(\n\t\t`SELECT pg_advisory_xact_lock(\n\t\t\thashtext($1::text),\n\t\t\thashtext(json_build_array($2::text, $3::text)::text)\n\t\t)`,\n\t\t[input.domain, input.provider ?? \"\", input.providerEventId],\n\t);\n}\n\nasync function selectByProviderEvent(\n\ttx: EventIngressDatabase,\n\tinput: {\n\t\tdomain: string;\n\t\tprovider: string | null;\n\t\tproviderEventId: string;\n\t},\n): Promise<{ id: string } | undefined> {\n\tconst result = await tx.query<{ id: string }>(\n\t\t`\nSELECT id, status\nFROM athena.event_ingress\nWHERE domain = $1\n  AND provider IS NOT DISTINCT FROM $2\n  AND provider_event_id = $3\n`,\n\t\t[input.domain, input.provider, input.providerEventId],\n\t);\n\treturn result.rows[0];\n}\n\nfunction duplicateFromRow(\n\trow: { id: string },\n\tingressId: string,\n): { duplicate: boolean; ingressId: string } {\n\tif (row.id !== ingressId) {\n\t\treturn {\n\t\t\tduplicate: true,\n\t\t\tingressId: row.id,\n\t\t};\n\t}\n\treturn {\n\t\tduplicate: false,\n\t\tingressId: row.id,\n\t};\n}\n\nasync function insertReceivedById(\n\ttx: EventIngressDatabase,\n\tingress: AthenaIngressIR,\n\tprovider: string | null,\n): Promise<void> {\n\tawait tx.query(\n\t\t`\nINSERT INTO athena.event_ingress (\n  id, domain, provider, provider_event_id, connection_id,\n  received_at, body, headers, status, correlation_id, trace_id, attempt_count\n) VALUES (\n  $1, $2, $3, $4, $5, $6, $7, $8::jsonb, 'received', $9, $10, 0\n)\nON CONFLICT (id) DO NOTHING\n`,\n\t\tinsertValues(ingress, { provider, providerEventId: null }),\n\t);\n}\n\nasync function claimProviderEventOnRow(\n\ttx: EventIngressDatabase,\n\tinput: {\n\t\tingressId: string;\n\t\tdomain: string;\n\t\tprovider: string | null;\n\t\tproviderEventId: string;\n\t},\n): Promise<string | undefined> {\n\tconst result = await tx.query<{ id: string }>(\n\t\t`\nUPDATE athena.event_ingress AS target\nSET provider_event_id = $4\nWHERE target.id = $1\n  AND (target.provider_event_id IS NULL OR target.provider_event_id = $4)\n  AND NOT EXISTS (\n    SELECT 1\n    FROM athena.event_ingress AS claimed\n    WHERE claimed.domain = $2\n      AND claimed.provider IS NOT DISTINCT FROM $3\n      AND claimed.provider_event_id = $4\n      AND claimed.id <> $1\n  )\nRETURNING target.id\n`,\n\t\t[input.ingressId, input.domain, input.provider, input.providerEventId],\n\t);\n\treturn result.rows[0]?.id;\n}\n\nasync function insertReceivedByProviderEvent(\n\ttx: EventIngressDatabase,\n\tingress: AthenaIngressIR,\n\tmeta: { provider: string | null; providerEventId: string },\n): Promise<string | undefined> {\n\tconst result = await tx.query<{ id: string }>(\n\t\t`\nINSERT INTO athena.event_ingress (\n  id, domain, provider, provider_event_id, connection_id,\n  received_at, body, headers, status, correlation_id, trace_id, attempt_count\n) VALUES (\n  $1, $2, $3, $4, $5, $6, $7, $8::jsonb, 'received', $9, $10, 0\n)\nON CONFLICT (domain, provider, provider_event_id) WHERE provider_event_id IS NOT NULL\nDO NOTHING\nRETURNING id\n`,\n\t\tinsertValues(ingress, meta),\n\t);\n\treturn result.rows[0]?.id;\n}\n\nexport function createSqlEventIngressPersistence(): EventIngressPersistence {\n\treturn {\n\t\tasync insertReceived(tx, ingress, meta) {\n\t\t\tconst provider = meta.provider ?? null;\n\t\t\tconst providerEventId = meta.providerEventId;\n\t\t\tif (!providerEventId) {\n\t\t\t\tawait insertReceivedById(tx, ingress, provider);\n\t\t\t\treturn {\n\t\t\t\t\tduplicate: false,\n\t\t\t\t\tingressId: ingress.id,\n\t\t\t\t};\n\t\t\t}\n\t\t\tawait lockProviderEventClaim(tx, {\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tconst existing = await selectByProviderEvent(tx, {\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tif (existing) {\n\t\t\t\treturn duplicateFromRow(existing, ingress.id);\n\t\t\t}\n\t\t\tconst claimedOnRow = await claimProviderEventOnRow(tx, {\n\t\t\t\tingressId: ingress.id,\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tif (claimedOnRow) {\n\t\t\t\treturn {\n\t\t\t\t\tduplicate: false,\n\t\t\t\t\tingressId: claimedOnRow,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst afterClaim = await selectByProviderEvent(tx, {\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tif (afterClaim) {\n\t\t\t\treturn duplicateFromRow(afterClaim, ingress.id);\n\t\t\t}\n\t\t\tconst inserted = await insertReceivedByProviderEvent(tx, ingress, {\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tif (inserted) {\n\t\t\t\treturn {\n\t\t\t\t\tduplicate: false,\n\t\t\t\t\tingressId: inserted,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst afterInsert = await selectByProviderEvent(tx, {\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tif (afterInsert) {\n\t\t\t\treturn duplicateFromRow(afterInsert, ingress.id);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tduplicate: false,\n\t\t\t\tingressId: ingress.id,\n\t\t\t};\n\t\t},\n\t\tasync lock(tx, ingressId) {\n\t\t\tconst result = await tx.query<EventIngressRow>(\n\t\t\t\t`SELECT * FROM athena.event_ingress WHERE id = $1 FOR UPDATE`,\n\t\t\t\t[ingressId],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\tif (!row) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn mapIngressRow(row);\n\t\t},\n\t\tasync markStatus(tx, input) {\n\t\t\tawait tx.query(\n\t\t\t\t`\nUPDATE athena.event_ingress\nSET status = $2,\n    attempt_count = CASE\n      WHEN $2 IN ('retryable_failure', 'terminal_failure') THEN attempt_count + 1\n      ELSE attempt_count\n    END,\n    failed_at = CASE WHEN $2 IN ('retryable_failure', 'terminal_failure') THEN now() ELSE failed_at END,\n    error = $3::jsonb,\n    failure_stage = $4,\n    next_attempt_at = $5,\n    lease_owner = CASE WHEN $2 = 'resolving' THEN lease_owner ELSE NULL END,\n    lease_expires_at = CASE\n      WHEN $2 = 'resolving' THEN COALESCE($6::timestamptz, now() + interval '5 minutes')\n      WHEN $2 IN ('retryable_failure', 'terminal_failure', 'processed', 'ignored') THEN NULL\n      ELSE lease_expires_at\n    END,\n    first_failed_at = COALESCE(first_failed_at, $7::timestamptz),\n    last_failed_at = $8::timestamptz\nWHERE id = $1\n`,\n\t\t\t\t[\n\t\t\t\t\tinput.ingressId,\n\t\t\t\t\tinput.status,\n\t\t\t\t\tinput.error == null ? null : JSON.stringify(input.error),\n\t\t\t\t\tinput.failureStage ?? null,\n\t\t\t\t\tinput.nextAttemptAt?.toISOString() ?? null,\n\t\t\t\t\tinput.leaseExpiresAt?.toISOString() ?? null,\n\t\t\t\t\tinput.firstFailedAt?.toISOString() ?? null,\n\t\t\t\t\tinput.lastFailedAt?.toISOString() ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t\tasync markProcessed(tx, input) {\n\t\t\tawait tx.query(\n\t\t\t\t`\nUPDATE athena.event_ingress\nSET status = 'processed', processed_at = now()\nWHERE id = $1\n`,\n\t\t\t\t[input.ingressId],\n\t\t\t);\n\t\t\tvoid input.eventIds;\n\t\t},\n\t};\n}\n\nexport function toDirectIngress(ingress: AthenaIngressIR): AthenaIngressIR {\n\treturn { ...ingress, transport: { kind: \"direct\" } };\n}\n","import type { AthenaPostgresPool } from \"../../../../postgres/driver.ts\";\nimport type { AthenaClientInternals } from \"../../../../runtime/client-internals.ts\";\nimport {\n\tATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED,\n\tATHENA_INGRESS_MOLLIE_UNAVAILABLE,\n\tAthenaEventIngressError,\n} from \"../../../../runtime/ingress/errors.ts\";\nimport type { AthenaIngressIR } from \"../../../../runtime/ingress/ir.ts\";\nimport { eventIngressDatabaseFromPool } from \"../../../../runtime/ingress/postgres.ts\";\nimport { createEventIngressRuntime } from \"../../../../runtime/ingress/runtime.ts\";\nimport { createSqlEventIngressPersistence } from \"../../../../runtime/ingress/sql.ts\";\nimport { runBillingCustomerImportWithPostgres } from \"../../../import/assemble.ts\";\nimport { createBillingImportDatabase } from \"../../../import/database.ts\";\nimport {\n\tcreateBillingSqlExecutor,\n\tlistActiveBillingImportConnections,\n\tresolveBillingImportConnection,\n} from \"../../../import/postgres.ts\";\nimport { createLazyBillingWebhookIngressObservability } from \"../../../ingestion/observability/health.ts\";\nimport { createPostgresBillingWebhookRegistrationStore } from \"../../../ingestion/reconciliation/repository.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport { billingReconciliationContextFromIngress } from \"../../../reconciliation/webhook.ts\";\nimport type { BillingSqlExecutor } from \"../../../subject/repository.ts\";\nimport { advanceSelfSubscriptionEnrollment } from \"../../self/advance-enrollment.ts\";\nimport {\n\tcreateConnectionProviderExecutionContext,\n\teligibleBillingConnectionsForProcess,\n\tmollieConfigForCredentialReference,\n\tpickSoleEligibleBillingConnection,\n} from \"../providers/connection-binding.ts\";\nimport { normalizeMollieRuntimeConfig } from \"../providers/mollie/config.ts\";\nimport { resolveMollieWebhookResource } from \"../providers/mollie/resolve-resource.ts\";\nimport { MollieSdkClientPool } from \"../providers/mollie/sdk/client-factory.ts\";\nimport { createMollieWebhookPort } from \"../providers/mollie/webhook-port.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport { createBillingEventIngressHandler } from \"./handler.ts\";\nimport { createSqlBillingRepositories } from \"./sql.ts\";\n\nfunction isAthenaPostgresPool(value: unknown): value is AthenaPostgresPool {\n\treturn (\n\t\tvalue != null &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as AthenaPostgresPool).query === \"function\" &&\n\t\ttypeof (value as AthenaPostgresPool).connect === \"function\"\n\t);\n}\n\nexport function attachEventIngressRuntime(\n\tinternals: AthenaClientInternals,\n\tinput: {\n\t\tconfiguredProviders?: BillingProviderConfigMap;\n\t\tregistry: BillingProviderRegistry;\n\t\ttestMode?: boolean;\n\t\tresolveSigningSecrets?: (connectionId: string) => readonly string[];\n\t\tsigningSecrets?: readonly string[];\n\t},\n): void {\n\tconst getSql = async (): Promise<BillingSqlExecutor | undefined> => {\n\t\tconst owned = internals.postgresRuntime;\n\t\tconst pool = owned ? await owned.getPool() : undefined;\n\t\tif (!isAthenaPostgresPool(pool)) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createBillingSqlExecutor(pool);\n\t};\n\tconst handler = createBillingEventIngressHandler({\n\t\tobservability: createLazyBillingWebhookIngressObservability(getSql),\n\t\tonAuthoritativeDocument: async ({ document, ingress }) => {\n\t\t\tconst owned = internals.postgresRuntime;\n\t\t\tconst pool = owned ? await owned.getPool() : undefined;\n\t\t\tif (!isAthenaPostgresPool(pool)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst sql = createBillingSqlExecutor(pool);\n\t\t\tif (document.kind === \"payment\") {\n\t\t\t\ttry {\n\t\t\t\t\tawait advanceSelfSubscriptionEnrollment({\n\t\t\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\t\t\tdocument,\n\t\t\t\t\t\tregistry: input.registry,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(\"[athena-billing] enrollment advance failed\", {\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\tingressId: ingress.id,\n\t\t\t\t\t});\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst providerCustomerId = document.providerCustomerId;\n\t\t\tconst connectionId = ingress.connectionId;\n\t\t\tif (\n\t\t\t\ttypeof providerCustomerId !== \"string\" ||\n\t\t\t\tproviderCustomerId.length === 0 ||\n\t\t\t\ttypeof connectionId !== \"string\" ||\n\t\t\t\tconnectionId.length === 0\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (typeof connectionId === \"string\" && connectionId.length > 0) {\n\t\t\t\t\tconst kind =\n\t\t\t\t\t\tingress.operation === \"webhook.mollie.classic\"\n\t\t\t\t\t\t\t? \"classic\"\n\t\t\t\t\t\t\t: \"next_gen\";\n\t\t\t\t\tawait createPostgresBillingWebhookRegistrationStore(\n\t\t\t\t\t\tsql,\n\t\t\t\t\t).touchLastDelivery({\n\t\t\t\t\t\tconnectionId,\n\t\t\t\t\t\tkind,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait runBillingCustomerImportWithPostgres({\n\t\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tcustomerId: providerCustomerId,\n\t\t\t\t\tdatabase: createBillingImportDatabase(pool),\n\t\t\t\t\tdryRun: false,\n\t\t\t\t\tpool,\n\t\t\t\t\tsql,\n\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t\ttrigger: \"webhook\",\n\t\t\t\t\treconciliationContext: billingReconciliationContextFromIngress({\n\t\t\t\t\t\tconnectionId,\n\t\t\t\t\t\tcorrelationId: ingress.correlationId,\n\t\t\t\t\t\tingressId: ingress.id,\n\t\t\t\t\t\tprovider: document.provider,\n\t\t\t\t\t\ttraceId: ingress.traceId,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"[athena-billing] webhook reconciliation failed\", {\n\t\t\t\t\tconnectionId,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tingressId: ingress.id,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tport: createMollieWebhookPort({\n\t\t\tresolveResource: createMollieResourceResolver({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tgetSql,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\t\t...(input.resolveSigningSecrets\n\t\t\t\t? { resolveSigningSecrets: input.resolveSigningSecrets }\n\t\t\t\t: {}),\n\t\t\tsigningSecrets: input.signingSecrets,\n\t\t\tverification:\n\t\t\t\tinput.resolveSigningSecrets ||\n\t\t\t\t(input.signingSecrets && input.signingSecrets.length > 0)\n\t\t\t\t\t? \"signature_and_refetch\"\n\t\t\t\t\t: \"authoritative_refetch\",\n\t\t}),\n\t});\n\n\tinternals.eventIngressRuntime = {\n\t\tasync ingest(ingress: AthenaIngressIR) {\n\t\t\tconst owned = internals.postgresRuntime;\n\t\t\tconst pool = owned ? await owned.getPool() : undefined;\n\t\t\tif (!isAthenaPostgresPool(pool)) {\n\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\tcode: ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED,\n\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Financial webhook ingest requires durable PostgreSQL persistence.\",\n\t\t\t\t\tretryable: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst sql = createBillingSqlExecutor(pool);\n\t\t\tconst bound = await bindBillingIngressConnection(ingress, sql, {\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t});\n\t\t\tconst sqlRepos = createSqlBillingRepositories();\n\t\t\tconst runtime = createEventIngressRuntime({\n\t\t\t\tcontext: {\n\t\t\t\t\tdatabase: eventIngressDatabaseFromPool(pool),\n\t\t\t\t\tpersistence: createSqlEventIngressPersistence(),\n\t\t\t\t\tdomain: sqlRepos,\n\t\t\t\t},\n\t\t\t\thandler,\n\t\t\t});\n\t\t\treturn runtime.ingest(bound);\n\t\t},\n\t};\n}\n\nasync function bindBillingIngressConnection(\n\tingress: AthenaIngressIR,\n\tsql: BillingSqlExecutor,\n\tinput: {\n\t\tconfiguredProviders?: BillingProviderConfigMap;\n\t\ttestMode?: boolean;\n\t},\n): Promise<AthenaIngressIR> {\n\tif (ingress.connectionId != null && ingress.connectionId.length > 0) {\n\t\treturn ingress;\n\t}\n\tconst only = await resolveSoleActiveMollieConnection(sql, input);\n\treturn { ...ingress, connectionId: only.id };\n}\n\nfunction unavailableMollieRefetch(message: string): never {\n\tthrow new AthenaEventIngressError({\n\t\tcode: ATHENA_INGRESS_MOLLIE_UNAVAILABLE,\n\t\tdomain: \"billing\",\n\t\tmessage,\n\t\tprovider: \"mollie\",\n\t\tretryable: false,\n\t});\n}\n\nfunction createMollieResourceResolver(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tgetSql: () => Promise<BillingSqlExecutor | undefined>;\n\ttestMode?: boolean;\n}): (request: {\n\tconnectionId?: string;\n\tid: string;\n\tkind: \"payment\" | \"subscription\" | \"invoice\";\n}) => Promise<unknown> {\n\tconst pools = new Map<string, MollieSdkClientPool>();\n\treturn async (request) => {\n\t\tconst sql = await input.getSql();\n\t\tif (sql == null) {\n\t\t\tunavailableMollieRefetch(\n\t\t\t\t\"Mollie webhook resource refetch requires PostgreSQL so the connection credential can be resolved.\",\n\t\t\t);\n\t\t}\n\t\tconst connection =\n\t\t\trequest.connectionId != null && request.connectionId.length > 0\n\t\t\t\t? await resolveBillingImportConnection(sql, {\n\t\t\t\t\tconnectionId: request.connectionId,\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t})\n\t\t\t\t: await resolveSoleActiveMollieConnection(sql, {\n\t\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t});\n\t\tconst mollie = mollieConfigForCredentialReference(\n\t\t\tinput.configuredProviders,\n\t\t\tconnection.credentialReference,\n\t\t);\n\t\tif (mollie == null) {\n\t\t\tunavailableMollieRefetch(\n\t\t\t\t`Mollie is not configured for credential_reference \"${connection.credentialReference}\".`,\n\t\t\t);\n\t\t}\n\t\tlet pool = pools.get(connection.credentialReference);\n\t\tif (pool == null) {\n\t\t\tpool = new MollieSdkClientPool(normalizeMollieRuntimeConfig(mollie));\n\t\t\tpools.set(connection.credentialReference, pool);\n\t\t}\n\t\tconst context = createConnectionProviderExecutionContext({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tconnection,\n\t\t\toperationScope: request.kind === \"invoice\" ? \"organization\" : \"profile\",\n\t\t});\n\t\treturn resolveMollieWebhookResource({\n\t\t\tcredential: context.credential,\n\t\t\tid: request.id,\n\t\t\tkind: request.kind,\n\t\t\toperationScope: context.operationScope,\n\t\t\tpool,\n\t\t\tprofileId: context.target.profileId,\n\t\t});\n\t};\n}\n\nasync function resolveSoleActiveMollieConnection(\n\tsql: BillingSqlExecutor,\n\tinput: {\n\t\tconfiguredProviders?: BillingProviderConfigMap;\n\t\ttestMode?: boolean;\n\t},\n) {\n\tconst active = await listActiveBillingImportConnections(sql, \"mollie\");\n\tconst eligible = eligibleBillingConnectionsForProcess({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tconnections: active,\n\t\tprocessTestMode: input.testMode,\n\t});\n\tconst only = pickSoleEligibleBillingConnection(eligible);\n\tif (only == null && eligible.length > 1) {\n\t\tunavailableMollieRefetch(\n\t\t\t`Multiple active Mollie billing connections: webhook refetch requires ingress.connectionId (${eligible\n\t\t\t\t.map((connection) => `${connection.id}:${connection.environment}`)\n\t\t\t\t.join(\", \")}).`,\n\t\t);\n\t}\n\tif (only == null) {\n\t\tunavailableMollieRefetch(\n\t\t\t\"No active Mollie billing connection is available for webhook resource refetch.\",\n\t\t);\n\t}\n\treturn only;\n}\n","import type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingWebhookKind } from \"../types.ts\";\nimport type { BillingWebhookReconciliationOutcome } from \"./stages.ts\";\n\nexport interface BillingWebhookDeliveryHealthRow {\n\tacceptedCount: number;\n\tconnectionId: string;\n\tduplicateCount: number;\n\tkind: BillingWebhookKind;\n\tlastAcceptedAt?: Date;\n\tlastReceivedAt?: Date;\n\tlastRejectedAt?: Date;\n\tlastRejectionCode?: string;\n\tlastRejectionMessage?: string;\n\tlastReconciliationCompletedAt?: Date;\n\tlastReconciliationError?: string;\n\tlastReconciliationFailedAt?: Date;\n\tlastReconciliationOutcome?: BillingWebhookReconciliationOutcome;\n\tlastReconciliationStartedAt?: Date;\n\trejectedCount: number;\n}\n\nexport type BillingWebhookDeliveryEvent =\n\t| \"received\"\n\t| \"accepted\"\n\t| \"rejected\"\n\t| \"duplicate\";\n\nconst UUID_RE =\n\t/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nfunction uuidOrNull(value: string | undefined): string | null {\n\tif (value == null || value.length === 0) {\n\t\treturn null;\n\t}\n\treturn UUID_RE.test(value) ? value : null;\n}\n\nfunction asDate(value: unknown): Date | undefined {\n\tif (value instanceof Date) {\n\t\treturn value;\n\t}\n\tif (typeof value === \"string\" && value.length > 0) {\n\t\treturn new Date(value);\n\t}\n\treturn undefined;\n}\n\nfunction mapRow(row: Record<string, unknown>): BillingWebhookDeliveryHealthRow {\n\tconst lastReconciliationOutcome = row.last_reconciliation_outcome;\n\treturn {\n\t\tacceptedCount: Number(row.accepted_count ?? 0),\n\t\tconnectionId: String(row.connection_id),\n\t\tduplicateCount: Number(row.duplicate_count ?? 0),\n\t\tkind: row.kind === \"classic\" ? \"classic\" : \"next_gen\",\n\t\trejectedCount: Number(row.rejected_count ?? 0),\n\t\t...(asDate(row.last_received_at)\n\t\t\t? { lastReceivedAt: asDate(row.last_received_at) }\n\t\t\t: {}),\n\t\t...(asDate(row.last_accepted_at)\n\t\t\t? { lastAcceptedAt: asDate(row.last_accepted_at) }\n\t\t\t: {}),\n\t\t...(asDate(row.last_rejected_at)\n\t\t\t? { lastRejectedAt: asDate(row.last_rejected_at) }\n\t\t\t: {}),\n\t\t...(typeof row.last_rejection_code === \"string\"\n\t\t\t? { lastRejectionCode: row.last_rejection_code }\n\t\t\t: {}),\n\t\t...(typeof row.last_rejection_message === \"string\"\n\t\t\t? { lastRejectionMessage: row.last_rejection_message }\n\t\t\t: {}),\n\t\t...(asDate(row.last_reconciliation_started_at)\n\t\t\t? { lastReconciliationStartedAt: asDate(row.last_reconciliation_started_at) }\n\t\t\t: {}),\n\t\t...(asDate(row.last_reconciliation_completed_at)\n\t\t\t? {\n\t\t\t\tlastReconciliationCompletedAt: asDate(\n\t\t\t\t\trow.last_reconciliation_completed_at,\n\t\t\t\t),\n\t\t\t}\n\t\t\t: {}),\n\t\t...(asDate(row.last_reconciliation_failed_at)\n\t\t\t? { lastReconciliationFailedAt: asDate(row.last_reconciliation_failed_at) }\n\t\t\t: {}),\n\t\t...(lastReconciliationOutcome === \"completed\" ||\n\t\tlastReconciliationOutcome === \"failed\" ||\n\t\tlastReconciliationOutcome === \"skipped\"\n\t\t\t? { lastReconciliationOutcome }\n\t\t\t: {}),\n\t\t...(typeof row.last_reconciliation_error === \"string\"\n\t\t\t? { lastReconciliationError: row.last_reconciliation_error }\n\t\t\t: {}),\n\t};\n}\n\nexport interface BillingWebhookDeliveryHealthStore {\n\tget(input: {\n\t\tconnectionId: string;\n\t\tkind: BillingWebhookKind;\n\t}): Promise<BillingWebhookDeliveryHealthRow | null>;\n\tlist(connectionId: string): Promise<readonly BillingWebhookDeliveryHealthRow[]>;\n\trecordDelivery(input: {\n\t\tcode?: string;\n\t\tconnectionId: string;\n\t\tevent: BillingWebhookDeliveryEvent;\n\t\tkind: BillingWebhookKind;\n\t\tmessage?: string;\n\t}): Promise<void>;\n\trecordReconciliation(input: {\n\t\tconnectionId: string;\n\t\terror?: string;\n\t\tkind: BillingWebhookKind;\n\t\toutcome: BillingWebhookReconciliationOutcome;\n\t\tphase: \"started\" | \"completed\" | \"failed\";\n\t}): Promise<void>;\n}\n\nexport function createMemoryBillingWebhookDeliveryHealthStore(): {\n\trows: BillingWebhookDeliveryHealthRow[];\n\tstore: BillingWebhookDeliveryHealthStore;\n} {\n\tconst rows: BillingWebhookDeliveryHealthRow[] = [];\n\tconst find = (connectionId: string, kind: BillingWebhookKind) =>\n\t\trows.find(\n\t\t\t(row) => row.connectionId === connectionId && row.kind === kind,\n\t\t);\n\tconst ensure = (\n\t\tconnectionId: string,\n\t\tkind: BillingWebhookKind,\n\t): BillingWebhookDeliveryHealthRow => {\n\t\tconst existing = find(connectionId, kind);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst created: BillingWebhookDeliveryHealthRow = {\n\t\t\tacceptedCount: 0,\n\t\t\tconnectionId,\n\t\t\tduplicateCount: 0,\n\t\t\tkind,\n\t\t\trejectedCount: 0,\n\t\t};\n\t\trows.push(created);\n\t\treturn created;\n\t};\n\treturn {\n\t\trows,\n\t\tstore: {\n\t\t\tasync get(input) {\n\t\t\t\treturn find(input.connectionId, input.kind) ?? null;\n\t\t\t},\n\t\t\tasync list(connectionId) {\n\t\t\t\treturn rows.filter((row) => row.connectionId === connectionId);\n\t\t\t},\n\t\t\tasync recordDelivery(input) {\n\t\t\t\tconst row = ensure(input.connectionId, input.kind);\n\t\t\t\tconst now = new Date();\n\t\t\t\trow.lastReceivedAt = now;\n\t\t\t\tif (input.event === \"accepted\") {\n\t\t\t\t\trow.lastAcceptedAt = now;\n\t\t\t\t\trow.acceptedCount += 1;\n\t\t\t\t} else if (input.event === \"duplicate\") {\n\t\t\t\t\trow.lastAcceptedAt = now;\n\t\t\t\t\trow.duplicateCount += 1;\n\t\t\t\t} else if (input.event === \"rejected\") {\n\t\t\t\t\trow.lastRejectedAt = now;\n\t\t\t\t\trow.rejectedCount += 1;\n\t\t\t\t\tif (input.code) {\n\t\t\t\t\t\trow.lastRejectionCode = input.code;\n\t\t\t\t\t}\n\t\t\t\t\tif (input.message) {\n\t\t\t\t\t\trow.lastRejectionMessage = input.message;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync recordReconciliation(input) {\n\t\t\t\tconst row = ensure(input.connectionId, input.kind);\n\t\t\t\tconst now = new Date();\n\t\t\t\trow.lastReconciliationOutcome = input.outcome;\n\t\t\t\tif (input.phase === \"started\") {\n\t\t\t\t\trow.lastReconciliationStartedAt = now;\n\t\t\t\t} else if (input.phase === \"completed\") {\n\t\t\t\t\trow.lastReconciliationCompletedAt = now;\n\t\t\t\t} else {\n\t\t\t\t\trow.lastReconciliationFailedAt = now;\n\t\t\t\t\tif (input.error) {\n\t\t\t\t\t\trow.lastReconciliationError = input.error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingWebhookDeliveryHealthStore(\n\tsql: BillingSqlExecutor,\n): BillingWebhookDeliveryHealthStore {\n\treturn {\n\t\tasync get(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT * FROM billing.billing_webhook_delivery_health\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t[input.connectionId, input.kind],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\treturn row ? mapRow(row) : null;\n\t\t},\n\t\tasync list(connectionId) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT * FROM billing.billing_webhook_delivery_health\nWHERE connection_id = $1::uuid\n`,\n\t\t\t\t[connectionId],\n\t\t\t);\n\t\t\treturn result.rows.map(mapRow);\n\t\t},\n\t\tasync recordDelivery(input) {\n\t\t\tconst connectionId = uuidOrNull(input.connectionId);\n\t\t\tif (!connectionId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait sql.query(\n\t\t\t\t`\nINSERT INTO billing.billing_webhook_delivery_health (\n\tconnection_id, kind, last_received_at, last_accepted_at, last_rejected_at,\n\tlast_rejection_code, last_rejection_message, accepted_count, rejected_count, duplicate_count\n) VALUES (\n\t$1::uuid, $2, now(),\n\tCASE WHEN $3 IN ('accepted', 'duplicate') THEN now() ELSE NULL END,\n\tCASE WHEN $3 = 'rejected' THEN now() ELSE NULL END,\n\tCASE WHEN $3 = 'rejected' THEN $4 ELSE NULL END,\n\tCASE WHEN $3 = 'rejected' THEN $5 ELSE NULL END,\n\tCASE WHEN $3 = 'accepted' THEN 1 ELSE 0 END,\n\tCASE WHEN $3 = 'rejected' THEN 1 ELSE 0 END,\n\tCASE WHEN $3 = 'duplicate' THEN 1 ELSE 0 END\n)\nON CONFLICT (connection_id, kind) DO UPDATE SET\n\tlast_received_at = now(),\n\tlast_accepted_at = CASE\n\t\tWHEN $3 IN ('accepted', 'duplicate') THEN now()\n\t\tELSE billing.billing_webhook_delivery_health.last_accepted_at\n\tEND,\n\tlast_rejected_at = CASE\n\t\tWHEN $3 = 'rejected' THEN now()\n\t\tELSE billing.billing_webhook_delivery_health.last_rejected_at\n\tEND,\n\tlast_rejection_code = CASE\n\t\tWHEN $3 = 'rejected' THEN $4\n\t\tELSE billing.billing_webhook_delivery_health.last_rejection_code\n\tEND,\n\tlast_rejection_message = CASE\n\t\tWHEN $3 = 'rejected' THEN $5\n\t\tELSE billing.billing_webhook_delivery_health.last_rejection_message\n\tEND,\n\taccepted_count = billing.billing_webhook_delivery_health.accepted_count\n\t\t+ CASE WHEN $3 = 'accepted' THEN 1 ELSE 0 END,\n\trejected_count = billing.billing_webhook_delivery_health.rejected_count\n\t\t+ CASE WHEN $3 = 'rejected' THEN 1 ELSE 0 END,\n\tduplicate_count = billing.billing_webhook_delivery_health.duplicate_count\n\t\t+ CASE WHEN $3 = 'duplicate' THEN 1 ELSE 0 END,\n\tupdated_at = now()\n`,\n\t\t\t\t[\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tinput.kind,\n\t\t\t\t\tinput.event,\n\t\t\t\t\tinput.code ?? null,\n\t\t\t\t\tinput.message ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t\tasync recordReconciliation(input) {\n\t\t\tconst connectionId = uuidOrNull(input.connectionId);\n\t\t\tif (!connectionId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait sql.query(\n\t\t\t\t`\nINSERT INTO billing.billing_webhook_delivery_health (\n\tconnection_id, kind, last_reconciliation_started_at, last_reconciliation_completed_at,\n\tlast_reconciliation_failed_at, last_reconciliation_outcome, last_reconciliation_error\n) VALUES (\n\t$1::uuid, $2,\n\tCASE WHEN $3 = 'started' THEN now() ELSE NULL END,\n\tCASE WHEN $3 = 'completed' THEN now() ELSE NULL END,\n\tCASE WHEN $3 = 'failed' THEN now() ELSE NULL END,\n\t$4, $5\n)\nON CONFLICT (connection_id, kind) DO UPDATE SET\n\tlast_reconciliation_started_at = CASE\n\t\tWHEN $3 = 'started' THEN now()\n\t\tELSE billing.billing_webhook_delivery_health.last_reconciliation_started_at\n\tEND,\n\tlast_reconciliation_completed_at = CASE\n\t\tWHEN $3 = 'completed' THEN now()\n\t\tELSE billing.billing_webhook_delivery_health.last_reconciliation_completed_at\n\tEND,\n\tlast_reconciliation_failed_at = CASE\n\t\tWHEN $3 = 'failed' THEN now()\n\t\tELSE billing.billing_webhook_delivery_health.last_reconciliation_failed_at\n\tEND,\n\tlast_reconciliation_outcome = $4,\n\tlast_reconciliation_error = COALESCE($5, billing.billing_webhook_delivery_health.last_reconciliation_error),\n\tupdated_at = now()\n`,\n\t\t\t\t[\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tinput.kind,\n\t\t\t\t\tinput.phase,\n\t\t\t\t\tinput.outcome,\n\t\t\t\t\tinput.error ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t};\n}\n","import type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingWebhookRegistrationRecord } from \"../reconciliation/types.ts\";\nimport type {\n\tBillingWebhookKind,\n\tResolvedBillingIngressEndpoints,\n} from \"../types.ts\";\nimport type {\n\tBillingWebhookDeliveryEvent,\n\tBillingWebhookDeliveryHealthRow,\n} from \"./delivery-health.ts\";\nimport {\n\tcreateMemoryBillingWebhookDeliveryHealthStore,\n\tcreatePostgresBillingWebhookDeliveryHealthStore,\n} from \"./delivery-health.ts\";\nimport type {\n\tBillingWebhookIngressStage,\n\tBillingWebhookReconciliationOutcome,\n} from \"./stages.ts\";\n\nexport interface BillingWebhookIngressStageRecord {\n\tconnectionId?: string;\n\tcorrelationId?: string;\n\terrorMessage?: string;\n\tingressId?: string;\n\tkind: BillingWebhookKind;\n\tmetadata?: Record<string, unknown>;\n\toccurredAt: Date;\n\toperation?: string;\n\tprovider?: string;\n\trejectionCode?: string;\n\tstage: BillingWebhookIngressStage | \"failed\";\n\tstatus?: string;\n\ttraceId?: string;\n}\n\nexport interface BillingWebhookIngressObservabilityWrite {\n\tconnectionId?: string;\n\tcorrelationId?: string;\n\tingressId?: string;\n\tkind: BillingWebhookKind;\n\tmetadata?: Record<string, unknown>;\n\tstage: BillingWebhookIngressStage | \"failed\";\n\ttraceId?: string;\n}\n\nexport interface BillingWebhookIngressObservability {\n\tlistRecentStages(\n\t\tconnectionId: string,\n\t\tlimit?: number,\n\t): Promise<readonly BillingWebhookIngressStageRecord[]>;\n\trecordAccepted(\n\t\tinput: BillingWebhookIngressObservabilityWrite & { connectionId: string },\n\t): Promise<void>;\n\trecordRejected(\n\t\tinput: BillingWebhookIngressObservabilityWrite & { code: string },\n\t): Promise<void>;\n\trecordReconciliation(\n\t\tinput: BillingWebhookIngressObservabilityWrite & {\n\t\t\tconnectionId: string;\n\t\t\toutcome: BillingWebhookReconciliationOutcome;\n\t\t},\n\t): Promise<void>;\n\trecordStage(input: BillingWebhookIngressStageRecord): Promise<void>;\n\trecordDelivery(input: {\n\t\tcode?: string;\n\t\tconnectionId: string;\n\t\tevent: BillingWebhookDeliveryEvent;\n\t\tkind: BillingWebhookKind;\n\t\tmessage?: string;\n\t}): Promise<void>;\n\tlistDelivery(\n\t\tconnectionId: string,\n\t): Promise<readonly BillingWebhookDeliveryHealthRow[]>;\n\taggregateRecent(\n\t\tconnectionId: string,\n\t\twindowMs?: number,\n\t): Promise<{\n\t\taccepted: number;\n\t\tduplicates: number;\n\t\treceived: number;\n\t\treconciliationFailures: number;\n\t\trejected: number;\n\t}>;\n}\n\nconst UUID_RE =\n\t/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nfunction uuidOrNull(value: string | undefined): string | null {\n\tif (value == null || value.length === 0) {\n\t\treturn null;\n\t}\n\treturn UUID_RE.test(value) ? value : null;\n}\n\nfunction stageRecord(\n\tinput: BillingWebhookIngressObservabilityWrite & { rejectionCode?: string },\n): BillingWebhookIngressStageRecord {\n\treturn {\n\t\tkind: input.kind,\n\t\toccurredAt: new Date(),\n\t\tstage: input.stage,\n\t\t...(input.connectionId ? { connectionId: input.connectionId } : {}),\n\t\t...(input.correlationId ? { correlationId: input.correlationId } : {}),\n\t\t...(input.ingressId ? { ingressId: input.ingressId } : {}),\n\t\t...(input.metadata ? { metadata: input.metadata } : {}),\n\t\t...(input.rejectionCode ? { rejectionCode: input.rejectionCode } : {}),\n\t\t...(input.traceId ? { traceId: input.traceId } : {}),\n\t};\n}\n\nexport function createMemoryBillingWebhookIngressObservability(): {\n\tdelivery: ReturnType<typeof createMemoryBillingWebhookDeliveryHealthStore>[\"rows\"];\n\tstages: BillingWebhookIngressStageRecord[];\n\tstore: BillingWebhookIngressObservability;\n} {\n\tconst stages: BillingWebhookIngressStageRecord[] = [];\n\tconst delivery = createMemoryBillingWebhookDeliveryHealthStore();\n\tconst store: BillingWebhookIngressObservability = {\n\t\tasync aggregateRecent(connectionId, windowMs = 24 * 60 * 60 * 1000) {\n\t\t\tconst cutoff = Date.now() - windowMs;\n\t\t\tconst recent = stages.filter(\n\t\t\t\t(row) =>\n\t\t\t\t\trow.connectionId === connectionId &&\n\t\t\t\t\trow.occurredAt.getTime() >= cutoff,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\taccepted: recent.filter((row) => row.stage === \"persisted\").length,\n\t\t\t\tduplicates: recent.filter((row) => row.stage === \"duplicate\").length,\n\t\t\t\treceived: recent.filter((row) => row.stage === \"received\").length,\n\t\t\t\treconciliationFailures: recent.filter(\n\t\t\t\t\t(row) => row.stage === \"reconciliation_failed\",\n\t\t\t\t).length,\n\t\t\t\trejected: recent.filter(\n\t\t\t\t(row) => row.stage === \"rejected\" || row.stage === \"failed\",\n\t\t\t).length,\n\t\t\t};\n\t\t},\n\t\tasync listDelivery(connectionId) {\n\t\t\treturn delivery.store.list(connectionId);\n\t\t},\n\t\tasync listRecentStages(connectionId, limit = 32) {\n\t\t\treturn stages\n\t\t\t\t.filter((row) => row.connectionId === connectionId)\n\t\t\t\t.slice()\n\t\t\t\t.reverse()\n\t\t\t\t.slice(0, limit);\n\t\t},\n\t\tasync recordAccepted(input) {\n\t\t\tawait store.recordStage(stageRecord(input));\n\t\t\tawait delivery.store.recordDelivery({\n\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\tevent: input.stage === \"duplicate\" ? \"duplicate\" : \"accepted\",\n\t\t\t\tkind: input.kind,\n\t\t\t});\n\t\t},\n\t\tasync recordDelivery(input) {\n\t\t\tawait delivery.store.recordDelivery(input);\n\t\t},\n\t\tasync recordRejected(input) {\n\t\t\tawait store.recordStage(\n\t\t\t\tstageRecord({ ...input, rejectionCode: input.code }),\n\t\t\t);\n\t\t\tif (input.connectionId) {\n\t\t\t\tawait delivery.store.recordDelivery({\n\t\t\t\t\tcode: input.code,\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tevent: \"rejected\",\n\t\t\t\t\tkind: input.kind,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync recordReconciliation(input) {\n\t\t\tawait store.recordStage(stageRecord(input));\n\t\t\tawait delivery.store.recordReconciliation({\n\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\tkind: input.kind,\n\t\t\t\toutcome: input.outcome,\n\t\t\t\tphase:\n\t\t\t\t\tinput.stage === \"reconciliation_failed\"\n\t\t\t\t\t\t? \"failed\"\n\t\t\t\t\t\t: input.stage === \"reconciliation_started\"\n\t\t\t\t\t\t\t? \"started\"\n\t\t\t\t\t\t\t: \"completed\",\n\t\t\t});\n\t\t},\n\t\tasync recordStage(input) {\n\t\t\tstages.push({ ...input, occurredAt: input.occurredAt ?? new Date() });\n\t\t},\n\t};\n\treturn { delivery: delivery.rows, stages, store };\n}\n\nexport function createPostgresBillingWebhookIngressObservability(\n\tsql: BillingSqlExecutor,\n): BillingWebhookIngressObservability {\n\tconst delivery = createPostgresBillingWebhookDeliveryHealthStore(sql);\n\tconst store: BillingWebhookIngressObservability = {\n\t\tasync aggregateRecent(connectionId, windowMs = 24 * 60 * 60 * 1000) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT\n\tcount(*) FILTER (WHERE stage = 'received')::int AS received,\n\tcount(*) FILTER (WHERE stage = 'persisted')::int AS accepted,\n\tcount(*) FILTER (WHERE stage IN ('rejected', 'failed'))::int AS rejected,\n\tcount(*) FILTER (WHERE stage = 'duplicate')::int AS duplicates,\n\tcount(*) FILTER (WHERE stage = 'reconciliation_failed')::int AS reconciliation_failures\nFROM billing.billing_webhook_ingress_stages\nWHERE connection_id = $1::uuid\n\tAND occurred_at >= $2::timestamptz\n`,\n\t\t\t\t[connectionId, new Date(Date.now() - windowMs)],\n\t\t\t);\n\t\t\tconst row = result.rows[0] ?? {};\n\t\t\treturn {\n\t\t\t\taccepted: Number(row.accepted ?? 0),\n\t\t\t\tduplicates: Number(row.duplicates ?? 0),\n\t\t\t\treceived: Number(row.received ?? 0),\n\t\t\t\treconciliationFailures: Number(row.reconciliation_failures ?? 0),\n\t\t\t\trejected: Number(row.rejected ?? 0),\n\t\t\t};\n\t\t},\n\t\tasync listDelivery(connectionId) {\n\t\t\treturn delivery.list(connectionId);\n\t\t},\n\t\tasync listRecentStages(connectionId, limit = 32) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT connection_id, ingress_id, kind, stage, rejection_code, correlation_id, trace_id, occurred_at\nFROM billing.billing_webhook_ingress_stages\nWHERE connection_id = $1::uuid\nORDER BY occurred_at DESC\nLIMIT $2\n`,\n\t\t\t\t[connectionId, limit],\n\t\t\t);\n\t\t\treturn result.rows.map((row) => {\n\t\t\t\tconst occurredAt =\n\t\t\t\t\trow.occurred_at instanceof Date\n\t\t\t\t\t\t? row.occurred_at\n\t\t\t\t\t\t: new Date(String(row.occurred_at));\n\t\t\t\treturn {\n\t\t\t\t\tkind: row.kind === \"classic\" ? \"classic\" : \"next_gen\",\n\t\t\t\t\toccurredAt,\n\t\t\t\t\tstage: String(row.stage) as BillingWebhookIngressStage,\n\t\t\t\t\t...(typeof row.connection_id === \"string\"\n\t\t\t\t\t\t? { connectionId: row.connection_id }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(typeof row.ingress_id === \"string\"\n\t\t\t\t\t\t? { ingressId: row.ingress_id }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(typeof row.rejection_code === \"string\"\n\t\t\t\t\t\t? { rejectionCode: row.rejection_code }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(typeof row.correlation_id === \"string\"\n\t\t\t\t\t\t? { correlationId: row.correlation_id }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(typeof row.trace_id === \"string\" ? { traceId: row.trace_id } : {}),\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tasync recordAccepted(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`\nUPDATE billing.billing_webhook_registrations\nSET last_delivery_at = now(),\n\tlast_accepted_at = now(),\n\tlast_ingress_stage = $3,\n\tupdated_at = now()\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t[input.connectionId, input.kind, input.stage],\n\t\t\t);\n\t\t\tawait store.recordStage(stageRecord(input));\n\t\t\tawait delivery.recordDelivery({\n\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\tevent: input.stage === \"duplicate\" ? \"duplicate\" : \"accepted\",\n\t\t\t\tkind: input.kind,\n\t\t\t});\n\t\t},\n\t\tasync recordDelivery(input) {\n\t\t\tawait delivery.recordDelivery(input);\n\t\t},\n\t\tasync recordRejected(input) {\n\t\t\tif (input.connectionId) {\n\t\t\t\tawait sql.query(\n\t\t\t\t\t`\nUPDATE billing.billing_webhook_registrations\nSET last_rejected_at = now(),\n\tlast_rejection_code = $3,\n\tlast_error = jsonb_build_object('code', $3::text),\n\tlast_ingress_stage = $4,\n\tupdated_at = now()\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t\t[input.connectionId, input.kind, input.code, input.stage],\n\t\t\t\t);\n\t\t\t\tawait delivery.recordDelivery({\n\t\t\t\t\tcode: input.code,\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tevent: \"rejected\",\n\t\t\t\t\tkind: input.kind,\n\t\t\t\t\tmessage: input.code,\n\t\t\t\t});\n\t\t\t}\n\t\t\tawait store.recordStage(stageRecord({ ...input, rejectionCode: input.code }));\n\t\t},\n\t\tasync recordReconciliation(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`\nUPDATE billing.billing_webhook_registrations\nSET last_reconciliation_outcome = $3,\n\tlast_ingress_stage = $4,\n\tupdated_at = now()\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t[input.connectionId, input.kind, input.outcome, input.stage],\n\t\t\t);\n\t\t\tawait store.recordStage(stageRecord(input));\n\t\t\tawait delivery.recordReconciliation({\n\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\tkind: input.kind,\n\t\t\t\toutcome: input.outcome,\n\t\t\t\tphase:\n\t\t\t\t\tinput.stage === \"reconciliation_failed\"\n\t\t\t\t\t\t? \"failed\"\n\t\t\t\t\t\t: input.stage === \"reconciliation_started\"\n\t\t\t\t\t\t\t? \"started\"\n\t\t\t\t\t\t\t: \"completed\",\n\t\t\t});\n\t\t},\n\t\tasync recordStage(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`\nINSERT INTO billing.billing_webhook_ingress_stages (\n\tconnection_id, ingress_id, kind, stage, rejection_code, correlation_id, trace_id, occurred_at,\n\tprovider, operation, status, error_message, metadata\n) VALUES (\n\t$1::uuid, $2::uuid, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13::jsonb\n)\n`,\n\t\t\t\t[\n\t\t\t\t\tuuidOrNull(input.connectionId),\n\t\t\t\t\tuuidOrNull(input.ingressId),\n\t\t\t\t\tinput.kind,\n\t\t\t\t\tinput.stage,\n\t\t\t\t\tinput.rejectionCode ?? null,\n\t\t\t\t\tinput.correlationId ?? null,\n\t\t\t\t\tinput.traceId ?? null,\n\t\t\t\t\tinput.occurredAt,\n\t\t\t\t\tinput.provider ?? \"mollie\",\n\t\t\t\t\tinput.operation ?? null,\n\t\t\t\t\tinput.status ?? null,\n\t\t\t\t\tinput.errorMessage ?? null,\n\t\t\t\t\tJSON.stringify(input.metadata ?? {}),\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t};\n\treturn store;\n}\n\nexport function createLazyBillingWebhookIngressObservability(\n\tgetSql: () => Promise<BillingSqlExecutor | undefined>,\n): BillingWebhookIngressObservability {\n\tconst run = async (\n\t\twork: (store: BillingWebhookIngressObservability) => Promise<void>,\n\t): Promise<void> => {\n\t\tconst sql = await getSql();\n\t\tif (!sql) {\n\t\t\treturn;\n\t\t}\n\t\tawait work(createPostgresBillingWebhookIngressObservability(sql));\n\t};\n\tconst resolve = async () => {\n\t\tconst sql = await getSql();\n\t\treturn sql\n\t\t\t? createPostgresBillingWebhookIngressObservability(sql)\n\t\t\t: undefined;\n\t};\n\treturn {\n\t\tasync aggregateRecent(connectionId, windowMs) {\n\t\t\tconst store = await resolve();\n\t\t\tif (!store) {\n\t\t\t\treturn {\n\t\t\t\t\taccepted: 0,\n\t\t\t\t\tduplicates: 0,\n\t\t\t\t\treceived: 0,\n\t\t\t\t\treconciliationFailures: 0,\n\t\t\t\t\trejected: 0,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn store.aggregateRecent(connectionId, windowMs);\n\t\t},\n\t\tasync listDelivery(connectionId) {\n\t\t\tconst store = await resolve();\n\t\t\treturn store ? store.listDelivery(connectionId) : [];\n\t\t},\n\t\tasync listRecentStages(connectionId, limit = 32) {\n\t\t\tconst store = await resolve();\n\t\t\treturn store ? store.listRecentStages(connectionId, limit) : [];\n\t\t},\n\t\tasync recordAccepted(input) {\n\t\t\tawait run((store) => store.recordAccepted(input));\n\t\t},\n\t\tasync recordDelivery(input) {\n\t\t\tawait run((store) => store.recordDelivery(input));\n\t\t},\n\t\tasync recordRejected(input) {\n\t\t\tawait run((store) => store.recordRejected(input));\n\t\t},\n\t\tasync recordReconciliation(input) {\n\t\t\tawait run((store) => store.recordReconciliation(input));\n\t\t},\n\t\tasync recordStage(input) {\n\t\t\tawait run((store) => store.recordStage(input));\n\t\t},\n\t};\n}\n\n\nfunction billingWebhookDiagnosticDetail(error: unknown): { error: string } {\n\treturn {\n\t\terror: error instanceof Error ? error.message : String(error),\n\t};\n}\n\n/**\n * Best-effort operator stderr. Do not pass `Error` to `console.error` (Node\n * prints the stack). Skip under `node:test` so expected swallows stay quiet.\n */\nexport function reportBillingWebhookIngressDiagnostic(\n\tlabel: string,\n\terror: unknown,\n): void {\n\tif (process.env.NODE_TEST_CONTEXT) {\n\t\treturn;\n\t}\n\tconsole.error(label, billingWebhookDiagnosticDetail(error));\n}\n\nexport async function recordBillingWebhookIngressQuietly(\n\tstore: BillingWebhookIngressObservability | undefined,\n\twork: (store: BillingWebhookIngressObservability) => Promise<void>,\n): Promise<void> {\n\tif (!store) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait work(store);\n\t} catch (error) {\n\t\treportBillingWebhookIngressDiagnostic(\n\t\t\t\"[athena.billing] webhook ingress observability failed\",\n\t\t\terror,\n\t\t);\n\t}\n}\n\nexport interface BillingWebhookChannelDeliveryHealth {\n\tlastAcceptedAt?: string;\n\tlastDeliveryAt?: string;\n\tlastIngressStage?: string;\n\tlastReconciliationOutcome?: string;\n\tlastRejectedAt?: string;\n\tlastRejectionCode?: string;\n}\n\nexport interface BillingWebhookOperatorHealth {\n\tclassic: BillingWebhookChannelDeliveryHealth;\n\tnextGen: BillingWebhookChannelDeliveryHealth;\n\trouteMounted: boolean;\n\tsigningSecretConfigured: boolean;\n\tverification: {\n\t\tclassic: \"authoritative_refetch\";\n\t\tnextGen: \"signature_and_refetch\";\n\t};\n}\n\nfunction iso(value: Date | undefined): string | undefined {\n\treturn value ? value.toISOString() : undefined;\n}\n\nfunction channelHealth(\n\trow: BillingWebhookRegistrationRecord | undefined,\n): BillingWebhookChannelDeliveryHealth {\n\treturn {\n\t\t...(iso(row?.lastAcceptedAt) ? { lastAcceptedAt: iso(row?.lastAcceptedAt) } : {}),\n\t\t...(iso(row?.lastDeliveryAt) ? { lastDeliveryAt: iso(row?.lastDeliveryAt) } : {}),\n\t\t...(row?.lastIngressStage ? { lastIngressStage: row.lastIngressStage } : {}),\n\t\t...(row?.lastReconciliationOutcome\n\t\t\t? { lastReconciliationOutcome: row.lastReconciliationOutcome }\n\t\t\t: {}),\n\t\t...(iso(row?.lastRejectedAt) ? { lastRejectedAt: iso(row?.lastRejectedAt) } : {}),\n\t\t...(row?.lastRejectionCode\n\t\t\t? { lastRejectionCode: row.lastRejectionCode }\n\t\t\t: {}),\n\t};\n}\n\nexport function billingWebhookOperatorHealth(input: {\n\tclassic?: BillingWebhookRegistrationRecord;\n\tendpoints?: ResolvedBillingIngressEndpoints;\n\tnextGen?: BillingWebhookRegistrationRecord;\n\tsigningSecretConfigured: boolean;\n}): BillingWebhookOperatorHealth {\n\treturn {\n\t\tclassic: channelHealth(input.classic),\n\t\tnextGen: channelHealth(input.nextGen),\n\t\trouteMounted: Boolean(input.endpoints),\n\t\tsigningSecretConfigured: input.signingSecretConfigured,\n\t\tverification: {\n\t\t\tclassic: \"authoritative_refetch\",\n\t\t\tnextGen: \"signature_and_refetch\",\n\t\t},\n\t};\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError } from \"../../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { BillingExecutionTarget } from \"../../../types.ts\";\nimport { readBillingCredentialAuthority } from \"../../authority.ts\";\nimport type { BillingOperation } from \"../../capabilities.ts\";\nimport { availableBillingCredentialEnvironments } from \"../../credentials.ts\";\nimport { resolveBillingEnvironment } from \"../../environment.ts\";\nimport type { BillingInvocationAuthority } from \"../../invocation-authority.ts\";\nimport {\n\tisProcessBillingInvocation,\n\tresolveBillingInvocationAuthority,\n\tSESSION_BILLING_INVOCATION,\n} from \"../../invocation-authority.ts\";\nimport {\n\tauthorizeBillingOperation,\n\tauthorizeBillingSubjectBinding,\n\tPROCESS_OWNED_BILLING_PRINCIPAL,\n} from \"../../rights.ts\";\n\nimport {\n\tdecideLocalBillingOperationCapability,\n\tselectedModeAllowedForCapability,\n} from \"../capability-decision.ts\";\nimport { createConfiguredProviderBinding } from \"../providers/binding.ts\";\nimport { createBillingProviderExecutionContext } from \"../providers/execution-context.ts\";\nimport { mollieOperationScopeFor } from \"../providers/operation-scope.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport { resolveBillingExecutionTarget } from \"../providers/resolve-target.ts\";\nimport type {\n\tBillingProviderExecutionContext,\n\tBillingProviderPortCapabilities,\n\tBillingProviderPortMap,\n\tBillingProviderPortName,\n\tBillingProviderRuntime,\n\tConfiguredBillingProviderBinding,\n} from \"../providers/types.ts\";\n\nexport interface PreparedBillingInvocation {\n\treadonly authority: BillingInvocationAuthority;\n\treadonly binding: ConfiguredBillingProviderBinding;\n\treadonly context: BillingProviderExecutionContext;\n\treadonly operation: BillingOperation;\n\treadonly principal: AthenaPrincipal;\n\treadonly runtime: BillingProviderRuntime;\n\treadonly target: Extract<\n\t\tReturnType<typeof resolveBillingExecutionTarget>,\n\t\t{ kind: \"configured\" }\n\t>;\n}\n\nexport interface ResolvedLocalBillingProviderExecution {\n\tcontext: BillingProviderExecutionContext;\n\truntime: BillingProviderRuntime;\n}\n\nexport function rejectUnsupportedListOffset(\n\toperation: BillingOperation,\n\toffset?: number,\n): void {\n\tif (offset == null) {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation,\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\nexport function rejectUnsupportedLocalPaymentListSource(source?: string): void {\n\tif (source == null || source === \"provider\") {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation: \"payments.list\",\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\nfunction isBillingProviderPortName(\n\tname: string,\n): name is BillingProviderPortName {\n\tswitch (name) {\n\t\tcase \"checkout\":\n\t\tcase \"customers\":\n\t\tcase \"invoices\":\n\t\tcase \"paymentLinks\":\n\t\tcase \"payments\":\n\t\tcase \"prices\":\n\t\tcase \"products\":\n\t\tcase \"refunds\":\n\t\tcase \"subscriptions\":\n\t\tcase \"webhooks\":\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction providerPortIsAvailable(\n\truntime: BillingProviderRuntime,\n\tadvertised: BillingProviderPortCapabilities,\n\toperation: BillingOperation,\n): boolean {\n\tconst name = operation.split(\".\")[0] ?? \"\";\n\tif (!isBillingProviderPortName(name)) {\n\t\treturn false;\n\t}\n\tconst ports: BillingProviderPortMap = runtime;\n\treturn ports[name] != null && advertised[name] === true;\n}\n\nexport function requireProviderPort<T>(\n\tport: T | null | undefined,\n\toperation: BillingOperation,\n): NonNullable<T> {\n\tif (port == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason:\n\t\t\t\toperation === \"products.list\" || operation === \"prices.list\"\n\t\t\t\t\t? \"missing_catalog\"\n\t\t\t\t\t: \"unsupported_operation\",\n\t\t});\n\t}\n\treturn port;\n}\n\nexport async function prepareLocalBillingInvocation(input: {\n\tauthority: BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tidempotencyKey?: string;\n\toperation: BillingOperation;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttarget: BillingExecutionTarget;\n\ttestMode?: boolean;\n}): Promise<PreparedBillingInvocation> {\n\tconst target = resolveBillingExecutionTarget({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tregistry: input.registry,\n\t\ttarget: input.target,\n\t});\n\tif (target.kind === \"connection\") {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: \"missing_connection\",\n\t\t});\n\t}\n\tconst binding = createConfiguredProviderBinding({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tprovider: target.provider,\n\t});\n\tconst authority = resolveBillingInvocationAuthority({\n\t\tauthority: input.authority,\n\t});\n\tconst principal =\n\t\tinput.principal ??\n\t\t(isProcessBillingInvocation(authority)\n\t\t\t? PROCESS_OWNED_BILLING_PRINCIPAL\n\t\t\t: undefined);\n\tif (!principal && authority.kind === SESSION_BILLING_INVOCATION.kind) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tif (!principal) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tawait decideBillingCapability({\n\t\tbinding,\n\t\toperation: input.operation,\n\t\trequestedProfileId: input.target.profileId,\n\t\truntime: target.runtime,\n\t\ttestMode: input.testMode,\n\t});\n\tauthorizeBillingInvocation(principal, input.operation, authority);\n\tconst context = createBillingProviderExecutionContext({\n\t\tbinding,\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tingress: input.registry.ingress,\n\t\toperationScope: mollieOperationScopeFor(input.operation),\n\t\ttarget: {\n\t\t\tprofileId: input.target.profileId,\n\t\t},\n\t\ttestMode: input.testMode,\n\t});\n\treturn {\n\t\tauthority,\n\t\tbinding,\n\t\tcontext,\n\t\toperation: input.operation,\n\t\tprincipal,\n\t\truntime: target.runtime,\n\t\ttarget,\n\t};\n}\n\nexport async function resolveLocalBillingProviderExecution(input: {\n\tauthority?: BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tidempotencyKey?: string;\n\toperation: BillingOperation;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttarget: BillingExecutionTarget;\n\ttestMode?: boolean;\n}): Promise<ResolvedLocalBillingProviderExecution> {\n\tconst prepared = await prepareLocalBillingInvocation({\n\t\t...input,\n\t\tauthority: input.authority ?? SESSION_BILLING_INVOCATION,\n\t});\n\treturn {\n\t\tcontext: prepared.context,\n\t\truntime: prepared.runtime,\n\t};\n}\n\nasync function decideBillingCapability(input: {\n\tbinding: ConfiguredBillingProviderBinding;\n\toperation: BillingOperation;\n\trequestedProfileId?: string;\n\truntime: BillingProviderRuntime;\n\ttestMode?: boolean;\n}): Promise<void> {\n\tconst providerCapabilities = await input.runtime.getCapabilities(\n\t\tinput.binding,\n\t);\n\tconst authority = readBillingCredentialAuthority(input.binding.providerConfig);\n\tconst environment = resolveBillingEnvironment({\n\t\ttestMode: input.testMode,\n\t});\n\tconst capability = decideLocalBillingOperationCapability({\n\t\tanyCredentialConfigured:\n\t\t\tavailableBillingCredentialEnvironments(input.binding.credentials).length >\n\t\t\t0,\n\t\tauthority,\n\t\toperation: input.operation,\n\t\tportAvailable: providerPortIsAvailable(\n\t\t\tinput.runtime,\n\t\t\tproviderCapabilities.ports,\n\t\t\tinput.operation,\n\t\t),\n\t\tprovider: input.binding.provider,\n\t\tproviderConfig: input.binding.providerConfig,\n\t\tproviderOperationEnabled:\n\t\t\tproviderCapabilities.operations[input.operation] === true,\n\t\trequestedProfileId: input.requestedProfileId,\n\t\tselectedModeAllowed: selectedModeAllowedForCapability({\n\t\t\tauthority,\n\t\t\tselectedCredentialConfigured:\n\t\t\t\tinput.binding.credentials[environment.name] != null,\n\t\t\tselectedEnvironment: environment.name,\n\t\t}),\n\t});\n\tif (capability.available !== true) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: capability.reason ?? \"unsupported_operation\",\n\t\t});\n\t}\n}\n\nfunction authorizeBillingInvocation(\n\tprincipal: AthenaPrincipal,\n\toperation: BillingOperation,\n\tauthority: BillingInvocationAuthority,\n): void {\n\tconst denied =\n\t\tauthorizeBillingOperation(principal, operation) ??\n\t\tauthorizeBillingSubjectBinding(principal, operation, authority);\n\tif (denied) {\n\t\tthrow denied;\n\t}\n}\n\n","import {\n\tATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\tAthenaBillingProviderError,\n} from \"../errors.ts\";\nimport type {\n\tBillingOperationCapability,\n\tBillingOperationCapabilityReason,\n} from \"./capabilities.ts\";\n\nexport type BillingAuthoritySource = \"derived\" | \"declared\" | \"provider\";\n\nexport type BillingAuthorityScope =\n\t| { kind: \"organization\" }\n\t| { kind: \"profile\"; profileId?: string };\n\nexport interface BillingCredentialAuthority {\n\treadonly source: BillingAuthoritySource;\n\treadonly modes: {\n\t\treadonly test: boolean;\n\t\treadonly live: boolean;\n\t};\n\treadonly scope: BillingAuthorityScope;\n\treadonly permissions: Readonly<Record<string, boolean>>;\n}\n\n/**\n * Absent authority is unenforced provider-native scope (Stripe, catalog).\n * A present but incomplete `authority` object is a config error — never\n * fail-open by treating it as fully granted.\n */\nexport function readBillingCredentialAuthority(\n\tproviderConfig: Readonly<Record<string, unknown>> | undefined,\n): BillingCredentialAuthority | undefined {\n\tconst raw = providerConfig?.authority;\n\tif (raw == null) {\n\t\treturn undefined;\n\t}\n\tif (typeof raw !== \"object\" || Array.isArray(raw)) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage: \"billing.providers authority is invalid.\",\n\t\t});\n\t}\n\tconst record = raw as Partial<BillingCredentialAuthority>;\n\tif (record.source == null || record.modes == null || record.scope == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage: \"billing.providers authority is incomplete.\",\n\t\t});\n\t}\n\treturn {\n\t\tmodes: {\n\t\t\tlive: record.modes.live === true,\n\t\t\ttest: record.modes.test === true,\n\t\t},\n\t\tpermissions: record.permissions ?? {},\n\t\tscope: record.scope,\n\t\tsource: record.source,\n\t};\n}\n\nexport function grantedPermissionsFromAuthority(\n\tauthority: BillingCredentialAuthority,\n): ReadonlySet<string> {\n\tconst granted = new Set<string>();\n\tfor (const [permission, allowed] of Object.entries(authority.permissions)) {\n\t\tif (allowed) {\n\t\t\tgranted.add(permission);\n\t\t}\n\t}\n\treturn granted;\n}\n\nexport function authorityAllowsMode(\n\tauthority: BillingCredentialAuthority,\n\tenvironment: \"test\" | \"live\",\n): boolean {\n\treturn authority.modes[environment] === true;\n}\n\nexport function authorityAllowsProfile(\n\tauthority: BillingCredentialAuthority,\n\trequestedProfileId?: string | null,\n): boolean {\n\tif (authority.scope.kind === \"organization\") {\n\t\treturn true;\n\t}\n\tconst restricted = authority.scope.profileId;\n\tconst requested =\n\t\trequestedProfileId != null && requestedProfileId.length > 0\n\t\t\t? requestedProfileId\n\t\t\t: undefined;\n\tif (restricted == null || restricted.length === 0) {\n\t\treturn requested == null;\n\t}\n\tif (requested == null) {\n\t\treturn true;\n\t}\n\treturn requested === restricted;\n}\n\nexport function evaluateBillingOperationCapability(input: {\n\tanyCredentialConfigured: boolean;\n\tgrantedPermissions: ReadonlySet<string>;\n\timplemented: boolean;\n\trequiredPermissions: readonly string[];\n\tscopeAllowed: boolean;\n\tselectedModeAllowed: boolean;\n\tunimplementedReason?: BillingOperationCapabilityReason;\n}): BillingOperationCapability {\n\tif (!input.implemented) {\n\t\treturn unavailable(input.unimplementedReason ?? \"unsupported_operation\");\n\t}\n\tif (!input.anyCredentialConfigured) {\n\t\treturn unavailable(\"missing_credential\");\n\t}\n\tif (!input.selectedModeAllowed) {\n\t\treturn unavailable(\"missing_provider_scope\");\n\t}\n\tif (!input.scopeAllowed) {\n\t\treturn unavailable(\"missing_provider_scope\");\n\t}\n\tfor (const permission of input.requiredPermissions) {\n\t\tif (!input.grantedPermissions.has(permission)) {\n\t\t\treturn unavailable(\"missing_permission\");\n\t\t}\n\t}\n\treturn { available: true };\n}\n\nfunction unavailable(\n\treason: BillingOperationCapabilityReason,\n): BillingOperationCapability {\n\treturn { available: false, reason };\n}\n","import type { BillingOperation } from \"../../capabilities.ts\";\n\nexport interface MollieOperationAuthority {\n\tpermissions: readonly string[];\n}\n\nexport const MOLLIE_OPERATION_AUTHORITY = {\n\t\"customers.create\": { permissions: [\"customers.write\"] },\n\t\"customers.delete\": { permissions: [\"customers.write\"] },\n\t\"customers.get\": { permissions: [\"customers.read\"] },\n\t\"customers.list\": { permissions: [\"customers.read\"] },\n\t\"customers.update\": { permissions: [\"customers.write\"] },\n\t\"invoices.get\": { permissions: [\"sales-invoices.read\"] },\n\t\"invoices.list\": { permissions: [\"sales-invoices.read\"] },\n\t\"paymentLinks.create\": { permissions: [\"payment-links.write\"] },\n\t\"paymentLinks.delete\": { permissions: [\"payment-links.write\"] },\n\t\"paymentLinks.get\": { permissions: [\"payment-links.read\"] },\n\t\"paymentLinks.list\": { permissions: [\"payment-links.read\"] },\n\t\"paymentLinks.update\": { permissions: [\"payment-links.write\"] },\n\t\"payments.cancel\": { permissions: [\"payments.write\"] },\n\t\"payments.create\": { permissions: [\"payments.write\"] },\n\t\"payments.get\": { permissions: [\"payments.read\"] },\n\t\"payments.list\": { permissions: [\"payments.read\"] },\n\t\"refunds.cancel\": { permissions: [\"refunds.write\"] },\n\t\"refunds.create\": { permissions: [\"refunds.write\"] },\n\t\"refunds.get\": { permissions: [\"refunds.read\"] },\n\t\"refunds.list\": { permissions: [\"refunds.read\"] },\n\t\"subscriptions.cancel\": { permissions: [\"subscriptions.write\"] },\n\t\"subscriptions.create\": { permissions: [\"subscriptions.write\"] },\n\t\"subscriptions.get\": { permissions: [\"subscriptions.read\"] },\n\t\"subscriptions.list\": { permissions: [\"subscriptions.read\"] },\n\t\"subscriptions.update\": { permissions: [\"subscriptions.write\"] },\n\t\"webhooks.create\": { permissions: [\"webhooks.write\"] },\n\t\"webhooks.delete\": { permissions: [\"webhooks.write\"] },\n\t\"webhooks.get\": { permissions: [\"webhooks.read\"] },\n\t\"webhooks.list\": { permissions: [\"webhooks.read\"] },\n\t\"webhooks.test\": { permissions: [\"webhooks.write\"] },\n\t\"webhooks.update\": { permissions: [\"webhooks.write\"] },\n\t\"products.list\": { permissions: [] },\n\t\"prices.list\": { permissions: [] },\n\t\"checkout.create\": { permissions: [\"payments.write\"] },\n\t\"self.invoices.list\": { permissions: [] },\n\t\"self.invoices.get\": { permissions: [] },\n\t\"self.payments.list\": { permissions: [] },\n\t\"self.payments.get\": { permissions: [] },\n\t\"self.subscription.get\": { permissions: [] },\n\t\"self.subscription.cancel\": { permissions: [] },\n\t\"self.subscription.enroll\": { permissions: [] },\n\t\"self.checkout.create\": { permissions: [] },\n\t\"self.checkout.resume\": { permissions: [] },\n\t\"admin.connections.materialize\": { permissions: [] },\n\t\"admin.conflicts.resolve\": { permissions: [] },\n\t\"admin.ingestion.health\": { permissions: [] },\n\t\"admin.reconciliation.retry\": { permissions: [] },\n\t\"admin.reconciliation.run\": { permissions: [] },\n\t\"admin.webhooks.reconcile\": { permissions: [] },\n\t\"admin.webhooks.status\": { permissions: [] },\n\t\"admin.webhooks.verify\": { permissions: [] },\n} satisfies Record<BillingOperation, MollieOperationAuthority>;\n\nexport function requiredMolliePermissionsFor(\n\toperation: BillingOperation,\n): readonly string[] {\n\treturn MOLLIE_OPERATION_AUTHORITY[operation].permissions;\n}\n","import {\n\tauthorityAllowsMode,\n\tauthorityAllowsProfile,\n\tevaluateBillingOperationCapability,\n\tgrantedPermissionsFromAuthority,\n\ttype BillingCredentialAuthority,\n} from \"../authority.ts\";\nimport type {\n\tBillingOperation,\n\tBillingOperationCapability,\n} from \"../capabilities.ts\";\nimport { requiredMolliePermissionsFor } from \"./providers/operation-authority.ts\";\n\nfunction mollieCreateHasProfileSelector(input: {\n\tconfiguredProfileId?: string | null;\n\tcredentialKind?: string | null;\n\trequestedProfileId?: string | null;\n}): boolean {\n\tif (input.credentialKind == null || input.credentialKind === \"api_key\") {\n\t\treturn true;\n\t}\n\tconst requested = input.requestedProfileId;\n\tif (requested != null && requested.length > 0) {\n\t\treturn true;\n\t}\n\tconst configured = input.configuredProfileId;\n\treturn configured != null && configured.length > 0;\n}\n\nexport function requiredPermissionsFor(\n\tprovider: string,\n\toperation: BillingOperation,\n): readonly string[] {\n\treturn provider === \"mollie\" ? requiredMolliePermissionsFor(operation) : [];\n}\n\nexport function scopeAllowedForOperation(input: {\n\tauthority?: BillingCredentialAuthority;\n\toperation: BillingOperation;\n\tprovider: string;\n\tproviderConfig: Readonly<Record<string, unknown>>;\n\trequestedProfileId?: string | null;\n}): boolean {\n\tconst authorityAllows =\n\t\tinput.authority == null\n\t\t\t? true\n\t\t\t: authorityAllowsProfile(input.authority, input.requestedProfileId);\n\tif (!authorityAllows) {\n\t\treturn false;\n\t}\n\tif (input.provider !== \"mollie\" || input.operation !== \"payments.create\") {\n\t\treturn true;\n\t}\n\tconst credentialKind = input.providerConfig.credentialKind;\n\tconst configuredProfileId = input.providerConfig.profileId;\n\treturn mollieCreateHasProfileSelector({\n\t\tconfiguredProfileId:\n\t\t\ttypeof configuredProfileId === \"string\" || configuredProfileId === null\n\t\t\t\t? configuredProfileId\n\t\t\t\t: undefined,\n\t\tcredentialKind:\n\t\t\ttypeof credentialKind === \"string\" ? credentialKind : undefined,\n\t\trequestedProfileId: input.requestedProfileId,\n\t});\n}\n\nexport function decideLocalBillingOperationCapability(input: {\n\tanyCredentialConfigured: boolean;\n\tauthority?: BillingCredentialAuthority;\n\toperation: BillingOperation;\n\tportAvailable: boolean;\n\tprovider: string;\n\tproviderConfig: Readonly<Record<string, unknown>>;\n\tproviderOperationEnabled: boolean;\n\trequestedProfileId?: string | null;\n\tselectedModeAllowed: boolean;\n\tunimplementedReason?: BillingOperationCapability[\"reason\"];\n}): BillingOperationCapability {\n\tconst implemented =\n\t\tinput.portAvailable && input.providerOperationEnabled;\n\tconst requiredPermissions = requiredPermissionsFor(\n\t\tinput.provider,\n\t\tinput.operation,\n\t);\n\tconst catalogOperation =\n\t\tinput.operation === \"products.list\" || input.operation === \"prices.list\";\n\treturn evaluateBillingOperationCapability({\n\t\tanyCredentialConfigured: input.anyCredentialConfigured,\n\t\tgrantedPermissions: input.authority\n\t\t\t? grantedPermissionsFromAuthority(input.authority)\n\t\t\t: new Set(),\n\t\timplemented,\n\t\trequiredPermissions,\n\t\tscopeAllowed: scopeAllowedForOperation({\n\t\t\tauthority: input.authority,\n\t\t\toperation: input.operation,\n\t\t\tprovider: input.provider,\n\t\t\tproviderConfig: input.providerConfig,\n\t\t\trequestedProfileId: input.requestedProfileId,\n\t\t}),\n\t\tselectedModeAllowed: input.selectedModeAllowed,\n\t\tunimplementedReason:\n\t\t\tinput.unimplementedReason ??\n\t\t\t(catalogOperation ? \"missing_catalog\" : undefined),\n\t});\n}\n\nexport function selectedModeAllowedForCapability(input: {\n\tauthority?: BillingCredentialAuthority;\n\tselectedCredentialConfigured: boolean;\n\tselectedEnvironment: \"test\" | \"live\";\n}): boolean {\n\treturn input.authority == null\n\t\t? input.selectedCredentialConfigured\n\t\t: authorityAllowsMode(input.authority, input.selectedEnvironment);\n}\n","export type MollieOperationScope = \"organization\" | \"profile\" | \"automatic\";\n\n/**\n * Organization/control-plane calls must not send a profile-restricted SDK\n * client (`profileId` / defaultProfileId). Profile/data-plane calls may.\n */\nexport function mollieOperationScopeFor(\n\toperation: string,\n): MollieOperationScope {\n\tif (operation.startsWith(\"webhooks.\")) {\n\t\treturn \"organization\";\n\t}\n\tif (\n\t\toperation.startsWith(\"payments.\") ||\n\t\toperation.startsWith(\"refunds.\") ||\n\t\toperation.startsWith(\"paymentLinks.\") ||\n\t\toperation.startsWith(\"subscriptions.\")\n\t) {\n\t\treturn \"profile\";\n\t}\n\tif (\n\t\toperation.startsWith(\"customers.\") ||\n\t\toperation.startsWith(\"invoices.\")\n\t) {\n\t\treturn \"organization\";\n\t}\n\treturn \"automatic\";\n}\n","import {\n\tATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\tATHENA_BILLING_TARGET_AMBIGUOUS,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { BillingExecutionTarget, BillingProviderName } from \"../../../types.ts\";\nimport { normalizeBillingProviderName } from \"./registry.ts\";\nimport type { BillingProviderRegistry } from \"./registry.ts\";\nimport type { ResolvedBillingExecutionTarget } from \"./types.ts\";\n\nfunction configuredProviderNames(\n\tconfigured: BillingProviderConfigMap | undefined,\n): BillingProviderName[] {\n\tif (configured == null) {\n\t\treturn [];\n\t}\n\treturn Object.keys(configured)\n\t\t.filter((name) => configured[name] != null)\n\t\t.map((name) => normalizeBillingProviderName(name));\n}\n\nfunction isProviderConfigured(\n\tconfigured: BillingProviderConfigMap | undefined,\n\tprovider: BillingProviderName,\n): boolean {\n\treturn configuredProviderNames(configured).includes(provider);\n}\n\nexport function resolveBillingExecutionTarget(input: {\n\ttarget?: BillingExecutionTarget;\n\tconfiguredProviders: BillingProviderConfigMap | undefined;\n\tregistry: BillingProviderRegistry;\n}): ResolvedBillingExecutionTarget {\n\tconst connectionId = input.target?.connectionId?.trim() ?? \"\";\n\tconst explicitProvider = input.target?.provider?.trim() ?? \"\";\n\tconst hasConnectionId = connectionId.length > 0;\n\tconst hasProvider = explicitProvider.length > 0;\n\n\tif (hasConnectionId && hasProvider) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_TARGET_AMBIGUOUS,\n\t\t\tmessage:\n\t\t\t\t\"Billing target is ambiguous: provide either connectionId or provider, not both.\",\n\t\t});\n\t}\n\n\tif (hasConnectionId) {\n\t\treturn {\n\t\t\tkind: \"connection\",\n\t\t\tconnectionId,\n\t\t\tprovider: hasProvider\n\t\t\t\t? normalizeBillingProviderName(explicitProvider)\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\tif (hasProvider) {\n\t\tconst provider = normalizeBillingProviderName(explicitProvider);\n\t\tif (!isProviderConfigured(input.configuredProviders, provider)) {\n\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\t\tmessage: `Billing provider \"${provider}\" is not configured.`,\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\tkind: \"configured\",\n\t\t\tprovider,\n\t\t\truntime: input.registry.require(provider),\n\t\t};\n\t}\n\n\tconst configured = configuredProviderNames(input.configuredProviders);\n\tif (configured.length === 0) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: \"No billing provider is configured.\",\n\t\t});\n\t}\n\tif (configured.length > 1) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_TARGET_AMBIGUOUS,\n\t\t\tmessage:\n\t\t\t\t\"Billing target is ambiguous: multiple providers are configured and no provider was specified.\",\n\t\t});\n\t}\n\n\tconst provider = configured[0];\n\tif (provider == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: \"No billing provider is configured.\",\n\t\t});\n\t}\n\treturn {\n\t\tkind: \"configured\",\n\t\tprovider,\n\t\truntime: input.registry.require(provider),\n\t};\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport {\n\tfinalizeBillingCommand,\n\tprepareBillingCommand,\n} from \"../../../safety/prepare.ts\";\nimport type { BillingExecutionTarget } from \"../../../types.ts\";\nimport type { BillingOperation } from \"../../capabilities.ts\";\nimport type { BillingInvocationAuthority } from \"../../invocation-authority.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport type {\n\tBillingProviderExecutionContext,\n\tBillingProviderPortMap,\n\tBillingProviderPortName,\n} from \"../providers/types.ts\";\nimport {\n\tprepareLocalBillingInvocation,\n\trequireProviderPort,\n} from \"./shared.ts\";\n\nexport interface LocalBillingExecutorRequest<TPayload> {\n\tauthority: BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: TPayload;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}\n\nexport async function executeLocalBillingOperation<\n\tTPayload,\n\tTResult,\n\tTPort extends BillingProviderPortName,\n>(input: {\n\tbefore?: (payload: TPayload) => void;\n\tinvoke: (\n\t\tport: NonNullable<BillingProviderPortMap[TPort]>,\n\t\tcontext: BillingProviderExecutionContext,\n\t\tpayload: TPayload,\n\t) => Promise<TResult> | TResult;\n\toperation: BillingOperation;\n\tport: TPort;\n\trequest: LocalBillingExecutorRequest<TPayload>;\n\tsafety?: \"enforce\" | \"defer-then-finalize\";\n}): Promise<TResult> {\n\tlet payload = input.request.payload;\n\tconst deferSafety = input.safety === \"defer-then-finalize\";\n\tconst prepared = prepareBillingCommand({\n\t\tidempotency: deferSafety ? \"defer\" : \"enforce\",\n\t\toperation: input.operation,\n\t\tpayload,\n\t\ttestMode: input.request.testMode,\n\t});\n\tpayload = prepared.payload as TPayload;\n\tinput.before?.(payload);\n\tconst invocation = await prepareLocalBillingInvocation({\n\t\tauthority: input.request.authority,\n\t\tconfiguredProviders: input.request.configuredProviders,\n\t\tidempotencyKey: readIdempotencyKey(payload),\n\t\toperation: input.operation,\n\t\tprincipal: input.request.principal,\n\t\tregistry: input.request.registry,\n\t\ttarget: payload as TPayload & BillingExecutionTarget,\n\t\ttestMode: input.request.testMode,\n\t});\n\tif (deferSafety) {\n\t\tpayload = finalizeBillingCommand({\n\t\t\toperation: input.operation,\n\t\t\tpayload,\n\t\t\ttestMode: input.request.testMode,\n\t\t}).payload as TPayload;\n\t}\n\tconst ports: BillingProviderPortMap = invocation.runtime;\n\tconst port = requireProviderPort(ports[input.port], input.operation);\n\treturn input.invoke(port, invocation.context, payload);\n}\n\nfunction readIdempotencyKey(payload: unknown): string | undefined {\n\tif (\n\t\tpayload != null &&\n\t\ttypeof payload === \"object\" &&\n\t\t\"idempotencyKey\" in payload &&\n\t\ttypeof payload.idempotencyKey === \"string\"\n\t) {\n\t\treturn payload.idempotencyKey;\n\t}\n\treturn undefined;\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { BillingListPricesInput, BillingPrice } from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport { executeLocalBillingOperation } from \"./invoke.ts\";\nimport { rejectUnsupportedListOffset } from \"./shared.ts\";\n\nexport async function executeLocalBillingPriceList(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingListPricesInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPage<BillingPrice>> {\n\treturn executeLocalBillingOperation({\n\t\tbefore: (payload) =>\n\t\t\trejectUnsupportedListOffset(\"prices.list\", payload.offset),\n\t\toperation: \"prices.list\",\n\t\tport: \"prices\",\n\t\trequest: input,\n\t\tinvoke: (prices, context, payload) =>\n\t\t\tprices.list(context, {\n\t\t\t\tcursor: payload.cursor,\n\t\t\t\tlimit: payload.limit,\n\t\t\t\tproductId: payload.productId,\n\t\t\t}),\n\t});\n}\n","import type { BillingPrice } from \"../../types.ts\";\n\nexport type BillingCheckoutIntent =\n\t| {\n\t\tkind: \"one_time\";\n\t\tprice: BillingPrice;\n\t}\n\t| {\n\t\tkind: \"recurring\";\n\t\tinterval: string;\n\t\tprice: BillingPrice;\n\t};\n\nconst ONE_TIME_CATALOG_INTERVALS = new Set([\n\t\"one-off\",\n\t\"one_off\",\n\t\"once\",\n\t\"one-time\",\n]);\n\n/**\n * Recurring enrollment vs one-off checkout. Empty and explicit one-off\n * tokens are one-time; any other non-empty interval is recurring.\n */\nexport function isRecurringBillingCatalogInterval(\n\tinterval?: string | null,\n): boolean {\n\tconst value = typeof interval === \"string\" ? interval.trim() : \"\";\n\tif (value.length === 0) {\n\t\treturn false;\n\t}\n\treturn !ONE_TIME_CATALOG_INTERVALS.has(value.toLowerCase());\n}\n\n/**\n * Catalog interval is the only Athena checkout classifier.\n * Provider adapters must not infer recurring from metadata (CHK-003).\n */\nexport function resolveBillingCheckoutIntent(\n\tprice: BillingPrice,\n): BillingCheckoutIntent {\n\tif (!isRecurringBillingCatalogInterval(price.interval)) {\n\t\treturn { kind: \"one_time\", price };\n\t}\n\tconst interval =\n\t\ttypeof price.interval === \"string\" ? price.interval.trim() : \"\";\n\treturn { kind: \"recurring\", interval, price };\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport type { BillingOperation } from \"../capabilities.ts\";\nimport { requiredBillingRights } from \"../rights.ts\";\n\n/**\n * Process-invocation helper for self-service re-entry. Holds only the Rights\n * the listed operations need, bound to the caller's subject — never the\n * full operator overlay.\n */\nexport function selfDelegatedBillingPrincipal(\n\tsubject: AthenaPrincipal,\n\toperations: readonly BillingOperation[],\n): AthenaPrincipal {\n\tconst rights = Object.freeze([\n\t\t...new Set(operations.flatMap((operation) => requiredBillingRights(operation))),\n\t]);\n\treturn {\n\t\tauthenticated: true,\n\t\tgrants: [],\n\t\trights,\n\t\t...(subject.organizationId != null\n\t\t\t? { organizationId: subject.organizationId }\n\t\t\t: {}),\n\t\t...(subject.sessionId != null ? { sessionId: subject.sessionId } : {}),\n\t\t...(subject.userId != null ? { userId: subject.userId } : {}),\n\t};\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError, AthenaBillingError } from \"../../errors.ts\";\nimport { billingSubjectConflict } from \"../../subject/errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\";\nimport { ensureActiveProviderCustomer } from \"../../subject/ensure-provider-customer.ts\";\nimport { requireBillingPrincipalUserId } from \"../../subject/principal-user.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport {\n\trequireReadyBillingConnectionId,\n\tresolveActiveBillingConnection,\n} from \"../../subject/sole-connection.ts\";\nimport type { BillingPrice, BillingSubscription } from \"../../types.ts\";\nimport { executeLocalBillingPaymentCreate } from \"../local/execute/payments.ts\";\nimport { executeLocalBillingPriceList } from \"../local/execute/price-list.ts\";\nimport { executeLocalBillingSubscriptionCreate } from \"../local/execute/subscriptions.ts\";\nimport { billingHalLinkHref } from \"../hal-link-href.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport type {\n\tBillingSelfSubscriptionEnrollResult,\n\tBillingSelfSubscriptionEnrollmentStatus,\n} from \"../types.ts\";\nimport { resolveBillingCheckoutIntent } from \"./checkout-intent.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport {\n\ttype BillingCheckoutSessionRecord,\n\tcheckoutAttemptExpiresAtIso,\n\tgetCheckoutSessionByIdempotency,\n\tinsertCheckoutSession,\n\tisCheckoutSessionResumeExpired,\n\tlistUsableMandateSessions,\n\tupdateCheckoutSession,\n} from \"./enrollment-session.ts\";\nimport { resolveAllowedBillingRedirectUrl } from \"./redirect-url.ts\";\nimport {\n\tappendBillingReturnToken,\n\tcreateBillingReturnNonce,\n} from \"./return-token.ts\";\n\nconst PERSIST_OWNED_SUBSCRIPTION_SQL = `\nINSERT INTO billing.billing_subscriptions (\n\tconnection_id,\n\tprovider,\n\tprovider_subscription_id,\n\tprovider_customer_id,\n\tstatus,\n\tamount_currency,\n\tamount_value,\n\tinterval,\n\tdescription,\n\tmetadata,\n\traw,\n\tsubject_kind,\n\tsubject_id,\n\townership_status\n) VALUES (\n\t$1::uuid, $2, $3, $4, $5, $6, $7, $8, $9, $10::jsonb, $11::jsonb, 'user', $12, 'resolved'\n)\nON CONFLICT (connection_id, provider_subscription_id) WHERE connection_id IS NOT NULL DO UPDATE SET\n\tstatus = EXCLUDED.status,\n\tsubject_kind = EXCLUDED.subject_kind,\n\tsubject_id = EXCLUDED.subject_id,\n\townership_status = 'resolved',\n\tmetadata = EXCLUDED.metadata,\n\traw = EXCLUDED.raw\nWHERE\n\tbilling.billing_subscriptions.ownership_status IS DISTINCT FROM 'resolved'\n\tOR (\n\t\tbilling.billing_subscriptions.subject_kind IS NOT DISTINCT FROM EXCLUDED.subject_kind\n\t\tAND billing.billing_subscriptions.subject_id IS NOT DISTINCT FROM EXCLUDED.subject_id\n\t)\nRETURNING *\n`;\n\nconst LIVE_SELF_SUBSCRIPTION_SQL = `\nSELECT id\nFROM billing.billing_subscriptions\nWHERE subject_kind = $1\n  AND subject_id = $2\n  AND ownership_status = 'resolved'\n  AND lower(status) NOT IN ('canceled', 'cancelled', 'expired', 'completed')\nLIMIT 1\n`;\n\nfunction mollieInterval(interval: string): string {\n\tconst trimmed = interval.trim();\n\tif (/^\\d+\\s+\\S/.test(trimmed)) {\n\t\treturn trimmed;\n\t}\n\treturn `1 ${trimmed}`;\n}\n\nfunction sessionStatusToResult(\n\tstatus: BillingCheckoutSessionRecord[\"status\"],\n): BillingSelfSubscriptionEnrollmentStatus {\n\tif (status === \"enrolled\") {\n\t\treturn \"enrolled\";\n\t}\n\tif (status === \"first_payment_required\") {\n\t\treturn \"first_payment_required\";\n\t}\n\tif (status === \"first_payment_failed\" || status === \"first_payment_canceled\") {\n\t\treturn \"failed\";\n\t}\n\treturn \"pending\";\n}\n\nfunction resultFromSession(\n\tsession: BillingCheckoutSessionRecord,\n\tsubscription?: BillingSubscription,\n): BillingSelfSubscriptionEnrollResult {\n\treturn {\n\t\tcheckoutUrl: session.checkoutUrl,\n\t\tenrollmentId: session.id,\n\t\tmetadata: {\n\t\t\t...session.metadata,\n\t\t\tpriceId: session.priceId,\n\t\t},\n\t\tprovider: session.provider,\n\t\tstatus: sessionStatusToResult(session.status),\n\t\t...(subscription ? { subscription } : {}),\n\t};\n}\n\nexport async function persistOwnedSubscription(input: {\n\tconnectionId?: string | null;\n\tinterval: string;\n\tprincipal: AthenaPrincipal;\n\tsql: BillingSqlExecutor;\n\tsubscription: BillingSubscription;\n}): Promise<BillingSubscription> {\n\tconst connectionId =\n\t\tinput.connectionId?.trim() ||\n\t\trequireReadyBillingConnectionId(\n\t\t\tawait resolveActiveBillingConnection(input.sql),\n\t\t\t\"self.subscription.enroll\",\n\t\t);\n\tif (connectionId.length === 0) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.subscription.enroll\",\n\t\t\treason: \"provider_connection_missing\",\n\t\t});\n\t}\n\tconst result = await input.sql.query(PERSIST_OWNED_SUBSCRIPTION_SQL, [\n\t\tconnectionId,\n\t\tinput.subscription.provider,\n\t\tinput.subscription.providerSubscriptionId,\n\t\tinput.subscription.providerCustomerId,\n\t\tinput.subscription.status,\n\t\tinput.subscription.amount?.currency ?? null,\n\t\tinput.subscription.amount?.value ?? null,\n\t\tinput.interval,\n\t\tinput.subscription.description ?? null,\n\t\tJSON.stringify(input.subscription.metadata ?? {}),\n\t\tJSON.stringify(input.subscription.raw ?? {}),\n\t\trequireBillingPrincipalUserId(input.principal),\n\t]);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow billingSubjectConflict(\n\t\t\t\"This provider subscription is already bound to another billing subject.\",\n\t\t);\n\t}\n\treturn {\n\t\t...input.subscription,\n\t\tid: String(row.id ?? input.subscription.id ?? \"\"),\n\t};\n}\n\nexport async function hasUsableMandate(input: {\n\tproviderCustomerId: string;\n\tsql: BillingSqlExecutor;\n\tsubjectId: string;\n}): Promise<boolean> {\n\tconst sessions = await listUsableMandateSessions({\n\t\tproviderCustomerId: input.providerCustomerId,\n\t\tsql: input.sql,\n\t\tsubjectId: input.subjectId,\n\t\tsubjectKind: \"user\",\n\t});\n\treturn sessions.length > 0;\n}\n\nexport async function createRecurringSubscriptionForPrice(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tcustomerId: string;\n\tidempotencyKey: string;\n\tinterval: string;\n\tprincipal: AthenaPrincipal;\n\tprice: BillingPrice;\n\tregistry: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\tconst created = await executeLocalBillingSubscriptionCreate({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {\n\t\t\tamount: input.price.amount,\n\t\t\tcustomerId: input.customerId,\n\t\t\tdescription: `Athena plan ${input.price.id}`,\n\t\t\tidempotencyKey: `${input.idempotencyKey}:subscription`,\n\t\t\tinterval: mollieInterval(input.interval),\n\t\t\tmetadata: {\n\t\t\t\tathenaSubjectId: requireBillingPrincipalUserId(input.principal),\n\t\t\t\tathenaSubjectKind: \"user\",\n\t\t\t\tpriceId: input.price.id,\n\t\t\t},\n\t\t},\n\t\tprincipal: selfDelegatedBillingPrincipal(input.principal, [\n\t\t\t\"subscriptions.create\",\n\t\t]),\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tconst resolution = await resolveActiveBillingConnection(input.sql);\n\tif (resolution.status === \"none\") {\n\t\treturn created;\n\t}\n\treturn persistOwnedSubscription({\n\t\tconnectionId: requireReadyBillingConnectionId(\n\t\t\tresolution,\n\t\t\t\"self.subscription.enroll\",\n\t\t),\n\t\tinterval: input.interval,\n\t\tprincipal: input.principal,\n\t\tsql: input.sql,\n\t\tsubscription: created,\n\t});\n}\n\nexport async function enrollSelfSubscription(input: {\n\tallowedRedirectOrigins?: readonly string[];\n\tcancelUrl?: string;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tidempotencyKey: string;\n\tprincipal: AthenaPrincipal;\n\tpriceId: string;\n\tregistry?: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\tsuccessUrl?: string;\n\ttestMode?: boolean;\n}): Promise<BillingSelfSubscriptionEnrollResult> {\n\tconst command = prepareBillingCommand({\n\t\toperation: \"self.subscription.enroll\",\n\t\tpayload: {\n\t\t\tcancelUrl: input.cancelUrl,\n\t\t\tidempotencyKey: input.idempotencyKey,\n\t\t\tpriceId: input.priceId,\n\t\t\tsuccessUrl: input.successUrl,\n\t\t},\n\t});\n\tconst priceId = String(command.payload.priceId);\n\tconst idempotencyKey = String(command.payload.idempotencyKey);\n\tconst subjectUserId = requireBillingPrincipalUserId(input.principal);\n\tconst allowedRedirectOrigins = input.allowedRedirectOrigins ?? [];\n\tconst successUrl = resolveAllowedBillingRedirectUrl({\n\t\tallowedOrigins: allowedRedirectOrigins,\n\t\tfield: \"successUrl\",\n\t\turl: input.successUrl,\n\t});\n\tconst cancelUrl = resolveAllowedBillingRedirectUrl({\n\t\tallowedOrigins: allowedRedirectOrigins,\n\t\tfield: \"cancelUrl\",\n\t\turl: input.cancelUrl,\n\t});\n\tif (input.registry == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.subscription.enroll\",\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tconst existing = await getCheckoutSessionByIdempotency({\n\t\tidempotencyKey,\n\t\tsql: input.sql,\n\t\tsubjectId: subjectUserId,\n\t\tsubjectKind: \"user\",\n\t});\n\tif (existing) {\n\t\tif (isCheckoutSessionResumeExpired(existing)) {\n\t\t\tthrow new AthenaBillingError({\n\t\t\t\tbody: { sessionId: existing.id },\n\t\t\t\tcode: \"ATHENA_BILLING_INVALID_REQUEST\",\n\t\t\t\tendpoint: \"\",\n\t\t\t\tmessage:\n\t\t\t\t\t\"Billing checkout session has expired. Retry enroll with a new idempotencyKey.\",\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tstatus: 400,\n\t\t\t});\n\t\t}\n\t\treturn resultFromSession(existing);\n\t}\n\tconst live = await input.sql.query(LIVE_SELF_SUBSCRIPTION_SQL, [\n\t\t\"user\",\n\t\tsubjectUserId,\n\t]);\n\tif (live.rows[0]) {\n\t\tthrow billingSubjectConflict(\n\t\t\t\"An active subscription already exists. Cancel it before enrolling in another plan.\",\n\t\t);\n\t}\n\tconst delegated = selfDelegatedBillingPrincipal(input.principal, [\n\t\t\"prices.list\",\n\t\t\"payments.create\",\n\t\t\"subscriptions.create\",\n\t]);\n\tconst prices = await executeLocalBillingPriceList({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {},\n\t\tprincipal: delegated,\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tconst price = prices.items.find((item) => item.id === priceId);\n\tif (price == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.subscription.enroll\",\n\t\t\treason: \"missing_catalog\",\n\t\t});\n\t}\n\tconst intent = resolveBillingCheckoutIntent(price);\n\tif (intent.kind !== \"recurring\") {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\tmessage:\n\t\t\t\t\"One-time catalog prices must use self.checkout.create, not recurring enrollment.\",\n\t\t\toperation: \"self.subscription.enroll\",\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\tconst customer = await ensureActiveProviderCustomer({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tidempotencyKey,\n\t\tprincipal: input.principal,\n\t\tregistry: input.registry,\n\t\tsql: input.sql,\n\t\ttestMode: input.testMode,\n\t});\n\tconst mandateReady = await hasUsableMandate({\n\t\tproviderCustomerId: customer.customerId,\n\t\tsql: input.sql,\n\t\tsubjectId: subjectUserId,\n\t});\n\tif (mandateReady) {\n\t\tconst subscription = await createRecurringSubscriptionForPrice({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tcustomerId: customer.customerId,\n\t\t\tidempotencyKey,\n\t\t\tinterval: intent.interval,\n\t\t\tprincipal: input.principal,\n\t\t\tprice,\n\t\t\tregistry: input.registry,\n\t\t\tsql: input.sql,\n\t\t\ttestMode: input.testMode,\n\t\t});\n\t\tconst session = await insertCheckoutSession({\n\t\t\tcheckoutUrl: null,\n\t\t\texpiresAt: checkoutAttemptExpiresAtIso(),\n\t\t\tid: \"\",\n\t\t\tidempotencyKey,\n\t\t\tkind: \"subscription_enrollment\",\n\t\t\tmetadata: { priceId: price.id },\n\t\t\tpriceId: price.id,\n\t\t\tprovider: customer.provider,\n\t\t\tproviderCustomerId: customer.customerId,\n\t\t\tproviderPaymentId: null,\n\t\t\tproviderSubscriptionId: subscription.providerSubscriptionId,\n\t\t\tsql: input.sql,\n\t\t\tstatus: \"enrolled\",\n\t\t\tsubjectId: subjectUserId,\n\t\t\tsubjectKind: \"user\",\n\t\t});\n\t\treturn resultFromSession(session, subscription);\n\t}\n\tconst nonce = createBillingReturnNonce();\n\tconst expiresAt = checkoutAttemptExpiresAtIso();\n\tconst correlatedSuccess = successUrl\n\t\t? appendBillingReturnToken(successUrl, nonce.token)\n\t\t: undefined;\n\tconst correlatedCancel = cancelUrl\n\t\t? appendBillingReturnToken(cancelUrl, nonce.token)\n\t\t: undefined;\n\tconst redirectUrl = correlatedSuccess ?? correlatedCancel;\n\tif (redirectUrl == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.subscription.enroll\",\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\tconst sessionId = crypto.randomUUID();\n\tconst paymentIdempotencyKey = `${idempotencyKey}:first-payment`;\n\tawait insertCheckoutSession({\n\t\tcheckoutUrl: null,\n\t\texpiresAt,\n\t\tid: sessionId,\n\t\tidempotencyKey,\n\t\tkind: \"subscription_enrollment\",\n\t\tmetadata: {\n\t\t\tathenaCheckoutSessionId: sessionId,\n\t\t\tcancelUrl: correlatedCancel,\n\t\t\tpaymentIdempotencyKey,\n\t\t\tpriceId: price.id,\n\t\t\tsuccessUrl: correlatedSuccess,\n\t\t},\n\t\tpriceId: price.id,\n\t\tprovider: customer.provider,\n\t\tproviderCustomerId: customer.customerId,\n\t\tproviderPaymentId: null,\n\t\tproviderSubscriptionId: null,\n\t\treturnNonceHash: nonce.hash,\n\t\tsql: input.sql,\n\t\tstatus: \"first_payment_required\",\n\t\tsubjectId: subjectUserId,\n\t\tsubjectKind: \"user\",\n\t});\n\tconst payment = await executeLocalBillingPaymentCreate({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {\n\t\t\tamount: price.amount,\n\t\t\tcustomerId: customer.customerId,\n\t\t\tdescription: `Athena first payment ${price.id}`,\n\t\t\tidempotencyKey: paymentIdempotencyKey,\n\t\t\tmetadata: {\n\t\t\t\tathenaCheckoutSessionId: sessionId,\n\t\t\t\tathenaEnrollment: true,\n\t\t\t\tathenaSubjectId: requireBillingPrincipalUserId(input.principal),\n\t\t\t\tathenaSubjectKind: \"user\",\n\t\t\t\tpriceId: price.id,\n\t\t\t},\n\t\t\tredirectUrl,\n\t\t\tsequenceType: \"first\",\n\t\t},\n\t\tprincipal: delegated,\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tconst session = await updateCheckoutSession({\n\t\tcheckoutUrl: billingHalLinkHref(payment.raw, \"checkout\"),\n\t\tid: sessionId,\n\t\tproviderCustomerId: customer.customerId,\n\t\tproviderPaymentId: payment.providerPaymentId,\n\t\tsql: input.sql,\n\t\tstatus: \"first_payment_required\",\n\t});\n\treturn resultFromSession(session);\n}\n","import type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError } from \"../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport { executeLocalBillingCustomerCreate } from \"../runtime/local/execute/customers.ts\";\nimport type { BillingProviderRegistry } from \"../runtime/local/providers/registry.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../runtime/invocation-authority.ts\";\nimport { selfDelegatedBillingPrincipal } from \"../runtime/self/delegated-principal.ts\";\nimport type { BillingCustomer } from \"../types.ts\";\nimport { requireBillingPrincipalUserId } from \"./principal-user.ts\";\nimport {\n\tcreatePostgresBillingSubjectRepository,\n\tisBillingUniqueViolation,\n\tsubjectFromPrincipalUser,\n} from \"./postgres.ts\";\nimport type {\n\tBillingSqlExecutor,\n\tBillingSubjectBindingRecord,\n} from \"./repository.ts\";\nimport {\n\trequireReadyBillingConnectionId,\n\tresolveActiveBillingConnection,\n} from \"./sole-connection.ts\";\n\nfunction isPlaceholderProviderId(value: string): boolean {\n\treturn value.startsWith(\"reserve:\");\n}\n\nfunction usableProviderCustomer(\n\tbindings: readonly BillingSubjectBindingRecord[],\n): BillingSubjectBindingRecord | undefined {\n\treturn bindings.find(\n\t\t(binding) =>\n\t\t\tbinding.providerSubjectKind === \"customer\" &&\n\t\t\tbinding.status === \"active\" &&\n\t\t\t!isPlaceholderProviderId(binding.providerSubjectId),\n\t);\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\tconfiguredProviders?: BillingProviderConfigMap;\n\tidempotencyKey: string;\n\tprincipal: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): Promise<{ customerId: string; provider: BillingCustomer[\"provider\"] }> {\n\tconst connectionId = requireReadyBillingConnectionId(\n\t\tawait resolveActiveBillingConnection(input.sql),\n\t\t\"customers.create\",\n\t);\n\tconst createCustomer = () =>\n\t\texecuteLocalBillingCustomerCreate({\n\t\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tpayload: {\n\t\t\t\tidempotencyKey: `${input.idempotencyKey}:customer`,\n\t\t\t\tmetadata: {\n\t\t\t\t\tathenaSubjectId: requireBillingPrincipalUserId(input.principal),\n\t\t\t\t\tathenaSubjectKind: \"user\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tprincipal: selfDelegatedBillingPrincipal(input.principal, [\n\t\t\t\t\"customers.create\",\n\t\t\t]),\n\t\t\tregistry: input.registry,\n\t\t\ttestMode: input.testMode,\n\t\t});\n\tconst repository = createPostgresBillingSubjectRepository(input.sql);\n\tconst subject = subjectFromPrincipalUser(\n\t\trequireBillingPrincipalUserId(input.principal),\n\t);\n\tfor (let attempt = 0; attempt < 8; attempt++) {\n\t\tconst bindings = await repository.listActiveBindings({\n\t\t\tconnectionId,\n\t\t\tsubject,\n\t\t});\n\t\tconst usable = usableProviderCustomer(bindings);\n\t\tif (usable) {\n\t\t\treturn {\n\t\t\t\tcustomerId: usable.providerSubjectId,\n\t\t\t\tprovider: \"mollie\",\n\t\t\t};\n\t\t}\n\t\tconst reserved = await repository.reserve({\n\t\t\tconnectionId,\n\t\t\tproviderSubjectKind: \"customer\",\n\t\t\tsource: \"created\",\n\t\t\tsubject,\n\t\t});\n\t\tif (!reserved.inserted) {\n\t\t\tconst existing =\n\t\t\t\tusableProviderCustomer([reserved.binding]) ??\n\t\t\t\tusableProviderCustomer(\n\t\t\t\t\tawait repository.listActiveBindings({\n\t\t\t\t\t\tconnectionId,\n\t\t\t\t\t\tsubject,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\tif (existing) {\n\t\t\t\treturn {\n\t\t\t\t\tcustomerId: existing.providerSubjectId,\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst created = await createCustomer();\n\t\ttry {\n\t\t\tawait repository.activate({\n\t\t\t\tid: reserved.binding.id,\n\t\t\t\tproviderSubjectId: created.providerCustomerId,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (!isBillingUniqueViolation(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst after = usableProviderCustomer(\n\t\t\t\tawait repository.listActiveBindings({\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tsubject,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tif (after) {\n\t\t\t\treturn {\n\t\t\t\t\tcustomerId: after.providerSubjectId,\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn {\n\t\t\tcustomerId: created.providerCustomerId,\n\t\t\tprovider: created.provider,\n\t\t};\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation: \"customers.create\",\n\t\treason: \"runtime_unavailable\",\n\t});\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n\tBillingCreateCustomerInput,\n\tBillingCustomer,\n\tBillingDeleteCustomerInput,\n\tBillingGetCustomerInput,\n\tBillingListCustomersInput,\n\tBillingUpdateCustomerInput,\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\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingCreateCustomerInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingCustomer> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"customers.create\",\n\t\tport: \"customers\",\n\t\trequest: input,\n\t\tsafety: \"defer-then-finalize\",\n\t\tinvoke: (customers, context, payload) =>\n\t\t\tcustomers.create(context, {\n\t\t\t\temail: payload.email,\n\t\t\t\tidempotencyKey: payload.idempotencyKey,\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t\tname: payload.name,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingCustomerGet(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingGetCustomerInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingCustomer> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"customers.get\",\n\t\tport: \"customers\",\n\t\trequest: input,\n\t\tinvoke: (customers, context, payload) =>\n\t\t\tcustomers.get(context, { id: payload.id }),\n\t});\n}\n\nexport async function executeLocalBillingCustomerList(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingListCustomersInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPage<BillingCustomer>> {\n\treturn executeLocalBillingOperation({\n\t\tbefore: (payload) =>\n\t\t\trejectUnsupportedListOffset(\"customers.list\", payload.offset),\n\t\toperation: \"customers.list\",\n\t\tport: \"customers\",\n\t\trequest: input,\n\t\tinvoke: (customers, context, payload) =>\n\t\t\tcustomers.list(context, {\n\t\t\t\tcursor: payload.cursor,\n\t\t\t\tlimit: payload.limit,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingCustomerUpdate(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingUpdateCustomerInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingCustomer> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"customers.update\",\n\t\tport: \"customers\",\n\t\trequest: input,\n\t\tinvoke: (customers, context, payload) =>\n\t\t\tcustomers.update(context, {\n\t\t\t\temail: payload.email,\n\t\t\t\tid: payload.id,\n\t\t\t\tname: payload.name,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingCustomerDelete(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingDeleteCustomerInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<void> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"customers.delete\",\n\t\tport: \"customers\",\n\t\trequest: input,\n\t\tinvoke: async (customers, context, payload) => {\n\t\t\tawait customers.delete(context, { id: payload.id });\n\t\t},\n\t});\n}\n","import type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { AthenaBillingError } from \"../errors.ts\";\n\nexport function requireBillingPrincipalUserId(\n\tprincipal: AthenaPrincipal,\n): string {\n\tconst userId = principal.userId?.trim();\n\tif (userId == null || userId.length === 0) {\n\t\tthrow new AthenaBillingError({\n\t\t\tbody: { field: \"userId\" },\n\t\t\tcode: \"ATHENA_BILLING_INVALID_REQUEST\",\n\t\t\tendpoint: \"\",\n\t\t\tmessage: \"Authenticated billing subject is required.\",\n\t\t\tmethod: \"POST\",\n\t\t\tstatus: 400,\n\t\t});\n\t}\n\treturn userId;\n}\n","import { AthenaBillingCapabilityError } from \"../errors.ts\";\nimport type { BillingSqlExecutor } from \"./repository.ts\";\n\nexport type ActiveBillingConnectionResolution =\n\t| { status: \"none\" }\n\t| { status: \"ready\"; connectionId: string }\n\t| { status: \"ambiguous\" };\n\n/**\n * Active billing connection when exactly one row exists.\n * Zero and many active rows are distinct outcomes — never collapsed.\n */\nexport async function resolveActiveBillingConnection(\n\tsql: BillingSqlExecutor,\n): Promise<ActiveBillingConnectionResolution> {\n\tconst result = await sql.query(\n\t\t`SELECT id::text AS id\n\t\t\t FROM billing.billing_provider_connections\n\t\t\t WHERE status = 'active'\n\t\t\t LIMIT 2`,\n\t);\n\tif (result.rows.length === 0) {\n\t\treturn { status: \"none\" };\n\t}\n\tif (result.rows.length > 1) {\n\t\treturn { status: \"ambiguous\" };\n\t}\n\tconst id = result.rows[0]?.id;\n\tif (typeof id !== \"string\" || id.trim() === \"\") {\n\t\treturn { status: \"none\" };\n\t}\n\treturn { status: \"ready\", connectionId: id };\n}\n\n/**\n * @deprecated Prefer {@link resolveActiveBillingConnection}. Collapses none\n * and ambiguous into `undefined`.\n */\nexport async function resolveSoleActiveBillingConnectionId(\n\tsql: BillingSqlExecutor,\n): Promise<string | undefined> {\n\tconst resolution = await resolveActiveBillingConnection(sql);\n\treturn resolution.status === \"ready\" ? resolution.connectionId : undefined;\n}\n\nexport function requireReadyBillingConnectionId(\n\tresolution: ActiveBillingConnectionResolution,\n\toperation: string,\n): string {\n\tif (resolution.status === \"ready\") {\n\t\treturn resolution.connectionId;\n\t}\n\tif (resolution.status === \"ambiguous\") {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason: \"provider_connection_ambiguous\",\n\t\t});\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation,\n\t\treason: \"provider_connection_missing\",\n\t});\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n\tBillingCancelPaymentInput,\n\tBillingCreatePaymentInput,\n\tBillingGetPaymentInput,\n\tBillingListPaymentsInput,\n\tBillingPayment,\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\trejectUnsupportedListOffset,\n\trejectUnsupportedLocalPaymentListSource,\n} from \"./shared.ts\";\n\nexport async function executeLocalBillingPaymentCreate(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingCreatePaymentInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPayment> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"payments.create\",\n\t\tport: \"payments\",\n\t\trequest: input,\n\t\tsafety: \"defer-then-finalize\",\n\t\tinvoke: (payments, context, payload) => {\n\t\t\tconst providerInput: BillingProviderCreatePaymentInput = {\n\t\t\t\tamount: payload.amount,\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tdescription: payload.description,\n\t\t\t\tidempotencyKey: payload.idempotencyKey,\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t\tredirectUrl: payload.redirectUrl,\n\t\t\t\tsequenceType: payload.sequenceType,\n\t\t\t};\n\t\t\treturn payments.create(context, providerInput);\n\t\t},\n\t});\n}\n\nexport async function executeLocalBillingPaymentGet(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingGetPaymentInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPayment> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"payments.get\",\n\t\tport: \"payments\",\n\t\trequest: input,\n\t\tinvoke: (payments, context, payload) =>\n\t\t\tpayments.get(context, { id: payload.id }),\n\t});\n}\n\nexport async function executeLocalBillingPaymentCancel(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingCancelPaymentInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPayment> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"payments.cancel\",\n\t\tport: \"payments\",\n\t\trequest: input,\n\t\tinvoke: (payments, context, payload) =>\n\t\t\tpayments.cancel(context, { id: payload.id }),\n\t});\n}\n\nexport async function executeLocalBillingPaymentList(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingListPaymentsInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPage<BillingPayment>> {\n\treturn executeLocalBillingOperation({\n\t\tbefore: (payload) => {\n\t\t\trejectUnsupportedListOffset(\"payments.list\", payload.offset);\n\t\t\trejectUnsupportedLocalPaymentListSource(payload.source);\n\t\t},\n\t\toperation: \"payments.list\",\n\t\tport: \"payments\",\n\t\trequest: input,\n\t\tinvoke: (payments, context, payload) =>\n\t\t\tpayments.list(context, {\n\t\t\t\tcursor: payload.cursor,\n\t\t\t\tlimit: payload.limit,\n\t\t\t}),\n\t});\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n\tBillingCancelSubscriptionInput,\n\tBillingCreateSubscriptionInput,\n\tBillingGetSubscriptionInput,\n\tBillingListSubscriptionsInput,\n\tBillingSubscription,\n\tBillingUpdateSubscriptionInput,\n} from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport { executeLocalBillingOperation } from \"./invoke.ts\";\nimport { rejectUnsupportedListOffset } from \"./shared.ts\";\n\nexport async function executeLocalBillingSubscriptionCreate(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingCreateSubscriptionInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"subscriptions.create\",\n\t\tport: \"subscriptions\",\n\t\trequest: input,\n\t\tsafety: \"defer-then-finalize\",\n\t\tinvoke: (subscriptions, context, payload) =>\n\t\t\tsubscriptions.create(context, {\n\t\t\t\tamount: payload.amount,\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tdescription: payload.description,\n\t\t\t\tidempotencyKey: payload.idempotencyKey,\n\t\t\t\tinterval: payload.interval,\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingSubscriptionGet(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingGetSubscriptionInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"subscriptions.get\",\n\t\tport: \"subscriptions\",\n\t\trequest: input,\n\t\tinvoke: (subscriptions, context, payload) =>\n\t\t\tsubscriptions.get(context, {\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tsubscriptionId: payload.subscriptionId,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingSubscriptionList(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingListSubscriptionsInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPage<BillingSubscription>> {\n\treturn executeLocalBillingOperation({\n\t\tbefore: (payload) =>\n\t\t\trejectUnsupportedListOffset(\"subscriptions.list\", payload.offset),\n\t\toperation: \"subscriptions.list\",\n\t\tport: \"subscriptions\",\n\t\trequest: input,\n\t\tinvoke: (subscriptions, context, payload) =>\n\t\t\tsubscriptions.list(context, {\n\t\t\t\tcursor: payload.cursor,\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tlimit: payload.limit,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingSubscriptionUpdate(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingUpdateSubscriptionInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"subscriptions.update\",\n\t\tport: \"subscriptions\",\n\t\trequest: input,\n\t\tinvoke: (subscriptions, context, payload) =>\n\t\t\tsubscriptions.update(context, {\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tdescription: payload.description,\n\t\t\t\tsubscriptionId: payload.subscriptionId,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingSubscriptionCancel(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingCancelSubscriptionInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"subscriptions.cancel\",\n\t\tport: \"subscriptions\",\n\t\trequest: input,\n\t\tinvoke: (subscriptions, context, payload) =>\n\t\t\tsubscriptions.cancel(context, {\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tsubscriptionId: payload.subscriptionId,\n\t\t\t}),\n\t});\n}\n","import type { BillingProviderName } from \"../../types.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\n\nexport type BillingCheckoutSessionStatus =\n\t| \"first_payment_required\"\n\t| \"first_payment_paid\"\n\t| \"first_payment_failed\"\n\t| \"first_payment_canceled\"\n\t| \"enrolled\";\n\nexport type BillingCheckoutSessionKind =\n\t| \"one_off\"\n\t| \"subscription_enrollment\";\n\nexport interface BillingCheckoutSessionRecord {\n\tcheckoutUrl: string | null;\n\tconnectionId?: string | null;\n\tcreatedAt: string;\n\texpiresAt?: string | null;\n\tid: string;\n\tidempotencyKey: string;\n\tkind?: BillingCheckoutSessionKind;\n\tmetadata: Record<string, unknown>;\n\tpriceId: string;\n\tprovider: BillingProviderName;\n\tproviderCustomerId: string | null;\n\tproviderPaymentId: string | null;\n\tproviderSubscriptionId: string | null;\n\treturnNonceHash?: string | null;\n\tstatus: BillingCheckoutSessionStatus;\n\tsubjectId: string;\n\tsubjectKind: \"user\" | \"organization\";\n}\n\n/** Resume of `first_payment_required` checkout URLs after this age is rejected. */\nexport const CHECKOUT_SESSION_RESUME_TTL_MS = 24 * 60 * 60 * 1000;\n\nexport function isCheckoutSessionResumeExpired(\n\tsession: BillingCheckoutSessionRecord,\n\tnow = Date.now(),\n): boolean {\n\tif (session.status !== \"first_payment_required\") {\n\t\treturn false;\n\t}\n\tif (session.expiresAt != null && session.expiresAt.trim() !== \"\") {\n\t\tconst expires = Date.parse(session.expiresAt);\n\t\tif (Number.isFinite(expires)) {\n\t\t\treturn now > expires;\n\t\t}\n\t}\n\tconst created = Date.parse(session.createdAt);\n\tif (!Number.isFinite(created)) {\n\t\treturn true;\n\t}\n\treturn now - created > CHECKOUT_SESSION_RESUME_TTL_MS;\n}\n\nexport function checkoutAttemptExpiresAtIso(now = Date.now()): string {\n\treturn new Date(now + CHECKOUT_SESSION_RESUME_TTL_MS).toISOString();\n}\n\nfunction createdAtIso(value: unknown): string {\n\tif (value instanceof Date && !Number.isNaN(value.getTime())) {\n\t\treturn value.toISOString();\n\t}\n\tif (typeof value === \"string\" && value.trim().length > 0) {\n\t\tconst parsed = Date.parse(value);\n\t\tif (Number.isFinite(parsed)) {\n\t\t\treturn new Date(parsed).toISOString();\n\t\t}\n\t}\n\treturn new Date().toISOString();\n}\n\nfunction asStatus(value: unknown): BillingCheckoutSessionStatus {\n\tif (\n\t\tvalue === \"first_payment_paid\" ||\n\t\tvalue === \"first_payment_failed\" ||\n\t\tvalue === \"first_payment_canceled\" ||\n\t\tvalue === \"enrolled\"\n\t) {\n\t\treturn value;\n\t}\n\treturn \"first_payment_required\";\n}\n\nfunction asKind(value: unknown): BillingCheckoutSessionKind {\n\treturn value === \"one_off\" ? \"one_off\" : \"subscription_enrollment\";\n}\n\nfunction asRecord(row: Record<string, unknown>): BillingCheckoutSessionRecord {\n\tconst metadata = row.metadata;\n\treturn {\n\t\tcheckoutUrl: typeof row.checkout_url === \"string\" ? row.checkout_url : null,\n\t\tconnectionId:\n\t\t\ttypeof row.connection_id === \"string\" ? row.connection_id : null,\n\t\tcreatedAt: createdAtIso(row.created_at),\n\t\texpiresAt:\n\t\t\trow.expires_at instanceof Date\n\t\t\t\t? row.expires_at.toISOString()\n\t\t\t\t: typeof row.expires_at === \"string\"\n\t\t\t\t\t? row.expires_at\n\t\t\t\t\t: null,\n\t\tid: String(row.id ?? \"\"),\n\t\tidempotencyKey: String(row.idempotency_key ?? \"\"),\n\t\tkind: asKind(row.kind),\n\t\tmetadata:\n\t\t\tmetadata != null && typeof metadata === \"object\" && !Array.isArray(metadata)\n\t\t\t\t? (metadata as Record<string, unknown>)\n\t\t\t\t: {},\n\t\tpriceId: String(row.price_id ?? \"\"),\n\t\tprovider: row.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n\t\tproviderCustomerId:\n\t\t\ttypeof row.provider_customer_id === \"string\"\n\t\t\t\t? row.provider_customer_id\n\t\t\t\t: null,\n\t\tproviderPaymentId:\n\t\t\ttypeof row.provider_payment_id === \"string\"\n\t\t\t\t? row.provider_payment_id\n\t\t\t\t: null,\n\t\tproviderSubscriptionId:\n\t\t\ttypeof row.provider_subscription_id === \"string\"\n\t\t\t\t? row.provider_subscription_id\n\t\t\t\t: null,\n\t\treturnNonceHash:\n\t\t\ttypeof row.return_nonce_hash === \"string\" ? row.return_nonce_hash : null,\n\t\tstatus: asStatus(row.status),\n\t\tsubjectId: String(row.subject_id ?? \"\"),\n\t\tsubjectKind: row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n\t};\n}\n\nexport async function getCheckoutSessionByIdempotency(input: {\n\tidempotencyKey: string;\n\tsql: BillingSqlExecutor;\n\tsubjectId: string;\n\tsubjectKind: \"user\" | \"organization\";\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n\tconst result = await input.sql.query(\n\t\t`SELECT * FROM billing.billing_checkout_sessions\n\t\t WHERE subject_kind = $1\n\t\t   AND subject_id = $2\n\t\t   AND idempotency_key = $3\n\t\t LIMIT 1`,\n\t\t[input.subjectKind, input.subjectId, input.idempotencyKey],\n\t);\n\tconst row = result.rows[0];\n\treturn row ? asRecord(row) : undefined;\n}\n\nexport async function getCheckoutSessionByPayment(input: {\n\tprovider: BillingProviderName;\n\tproviderPaymentId: string;\n\tsql: BillingSqlExecutor;\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n\tconst result = await input.sql.query(\n\t\t`SELECT * FROM billing.billing_checkout_sessions\n\t\t WHERE provider = $1\n\t\t   AND provider_payment_id = $2\n\t\t LIMIT 1`,\n\t\t[input.provider, input.providerPaymentId],\n\t);\n\tconst row = result.rows[0];\n\treturn row ? asRecord(row) : undefined;\n}\n\nexport async function getCheckoutSessionByReturnNonce(input: {\n\treturnNonceHash: string;\n\tsql: BillingSqlExecutor;\n\tsubjectId: string;\n\tsubjectKind: \"user\" | \"organization\";\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n\tconst result = await input.sql.query(\n\t\t`SELECT * FROM billing.billing_checkout_sessions\n\t\t WHERE return_nonce_hash = $1\n\t\t   AND subject_kind = $2\n\t\t   AND subject_id = $3\n\t\t LIMIT 1`,\n\t\t[input.returnNonceHash, input.subjectKind, input.subjectId],\n\t);\n\tconst row = result.rows[0];\n\treturn row ? asRecord(row) : undefined;\n}\n\nexport async function listUsableMandateSessions(input: {\n\tproviderCustomerId: string;\n\tsql: BillingSqlExecutor;\n\tsubjectId: string;\n\tsubjectKind: \"user\" | \"organization\";\n}): Promise<readonly BillingCheckoutSessionRecord[]> {\n\tconst result = await input.sql.query(\n\t\t`SELECT * FROM billing.billing_checkout_sessions\n\t\t WHERE subject_kind = $1\n\t\t   AND subject_id = $2\n\t\t   AND provider_customer_id = $3\n\t\t   AND status IN ('enrolled', 'first_payment_paid')`,\n\t\t[input.subjectKind, input.subjectId, input.providerCustomerId],\n\t);\n\treturn result.rows.map(asRecord);\n}\n\nexport async function insertCheckoutSession(\n\tinput: Omit<BillingCheckoutSessionRecord, \"createdAt\"> & {\n\t\tconnectionId?: string | null;\n\t\tcreatedAt?: string;\n\t\texpiresAt?: string | null;\n\t\tkind?: BillingCheckoutSessionKind;\n\t\treturnNonceHash?: string | null;\n\t\tsql: BillingSqlExecutor;\n\t},\n): Promise<BillingCheckoutSessionRecord> {\n\tconst result = await input.sql.query(\n\t\t`INSERT INTO billing.billing_checkout_sessions (\n\t\t\tid,\n\t\t\tidempotency_key,\n\t\t\tsubject_kind,\n\t\t\tsubject_id,\n\t\t\tprice_id,\n\t\t\tprovider,\n\t\t\tprovider_customer_id,\n\t\t\tprovider_payment_id,\n\t\t\tprovider_subscription_id,\n\t\t\tstatus,\n\t\t\tcheckout_url,\n\t\t\tmetadata,\n\t\t\tkind,\n\t\t\tconnection_id,\n\t\t\treturn_nonce_hash,\n\t\t\texpires_at\n\t\t) VALUES (\n\t\t\tCOALESCE($1::uuid, gen_random_uuid()),\n\t\t\t$2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12::jsonb,\n\t\t\t$13, $14, $15, $16::timestamptz\n\t\t)\n\t\tON CONFLICT (subject_kind, subject_id, idempotency_key)\n\t\tDO UPDATE SET updated_at = billing.billing_checkout_sessions.updated_at\n\t\tRETURNING *`,\n\t\t[\n\t\t\tinput.id.trim() === \"\" ? null : input.id,\n\t\t\tinput.idempotencyKey,\n\t\t\tinput.subjectKind,\n\t\t\tinput.subjectId,\n\t\t\tinput.priceId,\n\t\t\tinput.provider,\n\t\t\tinput.providerCustomerId,\n\t\t\tinput.providerPaymentId,\n\t\t\tinput.providerSubscriptionId,\n\t\t\tinput.status,\n\t\t\tinput.checkoutUrl,\n\t\t\tJSON.stringify(input.metadata),\n\t\t\tinput.kind ?? \"subscription_enrollment\",\n\t\t\tinput.connectionId ?? null,\n\t\t\tinput.returnNonceHash ?? null,\n\t\t\tinput.expiresAt ?? null,\n\t\t],\n\t);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow new Error(\"Failed to persist billing checkout session.\");\n\t}\n\treturn asRecord(row);\n}\n\nexport const CHECKOUT_SESSION_ADVANCE_CLAIM = \"__claiming__\";\n\nexport async function claimCheckoutSessionForSubscriptionAdvance(input: {\n\tid: string;\n\tsql: BillingSqlExecutor;\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n\tconst result = await input.sql.query(\n\t\t`UPDATE billing.billing_checkout_sessions\n\t\t SET status = CASE\n\t\t       WHEN status = 'first_payment_required' THEN 'first_payment_paid'\n\t\t       ELSE status\n\t\t     END,\n\t\t     provider_subscription_id = $2,\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t   AND provider_subscription_id IS NULL\n\t\t   AND status IN ('first_payment_required', 'first_payment_paid')\n\t\t RETURNING *`,\n\t\t[input.id, CHECKOUT_SESSION_ADVANCE_CLAIM],\n\t);\n\tconst row = result.rows[0];\n\treturn row ? asRecord(row) : undefined;\n}\n\nexport async function releaseCheckoutSessionAdvanceClaim(input: {\n\tid: string;\n\tsql: BillingSqlExecutor;\n}): Promise<void> {\n\tawait input.sql.query(\n\t\t`UPDATE billing.billing_checkout_sessions\n\t\t SET provider_subscription_id = NULL,\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t   AND provider_subscription_id = $2`,\n\t\t[input.id, CHECKOUT_SESSION_ADVANCE_CLAIM],\n\t);\n}\n\nexport async function updateCheckoutSession(input: {\n\tid: string;\n\tsql: BillingSqlExecutor;\n\tcheckoutUrl?: string | null;\n\texpiresAt?: string | null;\n\tproviderCustomerId?: string | null;\n\tproviderPaymentId?: string | null;\n\tproviderSubscriptionId?: string | null;\n\treturnNonceHash?: string | null;\n\tstatus: BillingCheckoutSessionStatus;\n}): Promise<BillingCheckoutSessionRecord> {\n\tconst result = await input.sql.query(\n\t\t`UPDATE billing.billing_checkout_sessions\n\t\t SET status = $2,\n\t\t     checkout_url = COALESCE($3, checkout_url),\n\t\t     provider_customer_id = COALESCE($4, provider_customer_id),\n\t\t     provider_payment_id = COALESCE($5, provider_payment_id),\n\t\t     provider_subscription_id = COALESCE($6, provider_subscription_id),\n\t\t     return_nonce_hash = COALESCE($7, return_nonce_hash),\n\t\t     expires_at = COALESCE($8::timestamptz, expires_at),\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t RETURNING *`,\n\t\t[\n\t\t\tinput.id,\n\t\t\tinput.status,\n\t\t\tinput.checkoutUrl,\n\t\t\tinput.providerCustomerId,\n\t\t\tinput.providerPaymentId,\n\t\t\tinput.providerSubscriptionId,\n\t\t\tinput.returnNonceHash,\n\t\t\tinput.expiresAt,\n\t\t],\n\t);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow new Error(\"Failed to update billing checkout session.\");\n\t}\n\treturn asRecord(row);\n}\n","/**\n * Same-origin helpers. Compare `URL.origin` only — never startsWith/substring.\n */\n\nexport function parseWebOrigin(value: string | null | undefined): string | null {\n\tif (value == null) {\n\t\treturn null;\n\t}\n\tconst trimmed = value.trim();\n\tif (!trimmed || trimmed === \"null\") {\n\t\treturn null;\n\t}\n\ttry {\n\t\tconst url = new URL(trimmed);\n\t\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n\t\t\treturn null;\n\t\t}\n\t\treturn url.origin;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function requestOrigin(request: Request): string | null {\n\treturn parseWebOrigin(new URL(request.url).origin);\n}\n\nexport function headerOrigin(request: Request): string | null {\n\treturn parseWebOrigin(request.headers.get(\"origin\"));\n}\n\nexport function originsMatch(left: string | null, right: string | null): boolean {\n\treturn left != null && right != null && left === right;\n}\n\nexport type AllowedRequestOriginOptions = {\n\t/**\n\t * Same-origin GET/HEAD often omit `Origin`. Cross-origin CORS GET still\n\t * sends `Origin`. Do not enable this on mutating Data/Billing POST.\n\t */\n\tallowMissingOriginOnSafeMethods?: boolean;\n};\n\nexport function isAllowedRequestOrigin(\n\trequest: Request,\n\textraAllowed: readonly string[] = [],\n\toptions?: AllowedRequestOriginOptions,\n): boolean {\n\tconst incoming = headerOrigin(request);\n\tconst target = requestOrigin(request);\n\tif (incoming) {\n\t\tif (originsMatch(incoming, target)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn extraAllowed.some((candidate) =>\n\t\t\toriginsMatch(incoming, parseWebOrigin(candidate)),\n\t\t);\n\t}\n\tif (!options?.allowMissingOriginOnSafeMethods) {\n\t\treturn false;\n\t}\n\tconst method = request.method.toUpperCase();\n\tif (method !== \"GET\" && method !== \"HEAD\") {\n\t\treturn false;\n\t}\n\tconst referer = parseWebOrigin(request.headers.get(\"referer\"));\n\tif (referer) {\n\t\tif (originsMatch(referer, target)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn extraAllowed.some((candidate) =>\n\t\t\toriginsMatch(referer, parseWebOrigin(candidate)),\n\t\t);\n\t}\n\treturn true;\n}\n","import { parseWebOrigin } from \"../../../runtime/data/origin.ts\";\nimport { AthenaBillingError } from \"../../errors.ts\";\n\nexport function billingRedirectAllowlistFromAppUrl(\n\tappUrl?: string | null,\n): readonly string[] {\n\tconst origin = parseWebOrigin(appUrl ?? undefined);\n\treturn origin ? [origin] : [];\n}\n\nfunction rejectRedirect(field: string): never {\n\tthrow new AthenaBillingError({\n\t\tbody: { field },\n\t\tcode: \"ATHENA_BILLING_INVALID_REQUEST\",\n\t\tendpoint: \"\",\n\t\tmessage: `${field} must be an https (or loopback http) URL on the configured app origin.`,\n\t\tmethod: \"POST\",\n\t\tstatus: 400,\n\t});\n}\n\nfunction isLoopbackHostname(hostname: string): boolean {\n\tconst host = hostname.replace(/^\\[(.*)\\]$/, \"$1\").toLowerCase();\n\treturn host === \"localhost\" || host === \"127.0.0.1\" || host === \"::1\";\n}\n\nfunction isAllowedBillingRedirectProtocol(url: URL): boolean {\n\tif (url.protocol === \"https:\") {\n\t\treturn true;\n\t}\n\treturn url.protocol === \"http:\" && isLoopbackHostname(url.hostname);\n}\n\nfunction isSafeAbsolutePath(path: string): boolean {\n\tif (!path.startsWith(\"/\") || path.startsWith(\"//\") || path.includes(\"\\\\\")) {\n\t\treturn false;\n\t}\n\tif (/%5c/i.test(path) || /^\\/{2,}/.test(path)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction parseAbsoluteHttpUrl(value: string): URL | null {\n\ttry {\n\t\tconst url = new URL(value);\n\t\tif (url.username !== \"\" || url.password !== \"\") {\n\t\t\treturn null;\n\t\t}\n\t\tif (!isAllowedBillingRedirectProtocol(url)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn url;\n\t} catch {\n\t\treturn null;\n\t}\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\tallowedOrigins: readonly string[];\n\tfield: \"successUrl\" | \"cancelUrl\" | \"redirectUrl\";\n\turl: string | undefined;\n}): string | undefined {\n\tif (input.url == null || input.url.trim() === \"\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = input.url.trim();\n\tconst allowed = input.allowedOrigins\n\t\t.map((origin) => parseAbsoluteHttpUrl(origin))\n\t\t.filter((url): url is URL => url != null)\n\t\t.map((url) => url.origin);\n\tif (allowed.length === 0) {\n\t\trejectRedirect(input.field);\n\t}\n\tlet parsed: URL | null = null;\n\tif (isSafeAbsolutePath(trimmed)) {\n\t\tconst baseOrigin = allowed[0];\n\t\tif (baseOrigin === undefined) {\n\t\t\trejectRedirect(input.field);\n\t\t}\n\t\ttry {\n\t\t\tparsed = new URL(trimmed, `${baseOrigin}/`);\n\t\t} catch {\n\t\t\trejectRedirect(input.field);\n\t\t}\n\t\tif (parsed.origin !== baseOrigin) {\n\t\t\trejectRedirect(input.field);\n\t\t}\n\t} else {\n\t\tparsed = parseAbsoluteHttpUrl(trimmed);\n\t}\n\tif (parsed == null) {\n\t\trejectRedirect(input.field);\n\t}\n\tif (parsed.username !== \"\" || parsed.password !== \"\") {\n\t\trejectRedirect(input.field);\n\t}\n\tif (!isAllowedBillingRedirectProtocol(parsed)) {\n\t\trejectRedirect(input.field);\n\t}\n\tif (!allowed.includes(parsed.origin)) {\n\t\trejectRedirect(input.field);\n\t}\n\treturn 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\tallowedOrigins: readonly string[];\n\tfield: \"successUrl\" | \"cancelUrl\" | \"redirectUrl\";\n\turl: string | undefined;\n}): void {\n\tresolveAllowedBillingRedirectUrl(input);\n}\n","import { createHash, randomBytes } from \"node:crypto\";\n\nexport {\n\tATHENA_BILLING_RETURN_QUERY,\n\tappendBillingReturnToken,\n} from \"./return-query.ts\";\n\nexport function hashBillingReturnNonce(token: string): string {\n\treturn createHash(\"sha256\").update(token, \"utf8\").digest(\"hex\");\n}\n\nexport function createBillingReturnNonce(): {\n\thash: string;\n\ttoken: string;\n} {\n\tconst token = randomBytes(32).toString(\"base64url\");\n\treturn { hash: hashBillingReturnNonce(token), token };\n}\n","import type { CanonicalBillingDocument } from \"../../canonical/document.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport { executeLocalBillingPriceList } from \"../local/execute/price-list.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport { resolveBillingCheckoutIntent } from \"./checkout-intent.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport { createRecurringSubscriptionForPrice } from \"./enroll.ts\";\nimport {\n\tclaimCheckoutSessionForSubscriptionAdvance,\n\tgetCheckoutSessionByPayment,\n\treleaseCheckoutSessionAdvanceClaim,\n\tupdateCheckoutSession,\n} from \"./enrollment-session.ts\";\n\nexport async function advanceSelfSubscriptionEnrollment(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tdocument: CanonicalBillingDocument;\n\tregistry: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): Promise<void> {\n\tif (input.document.kind !== \"payment\") {\n\t\treturn;\n\t}\n\tconst session = await getCheckoutSessionByPayment({\n\t\tprovider: input.document.provider,\n\t\tproviderPaymentId: input.document.providerPaymentId,\n\t\tsql: input.sql,\n\t});\n\tif (session == null || session.status === \"enrolled\") {\n\t\treturn;\n\t}\n\tif (\n\t\tinput.document.status === \"failed\" ||\n\t\tinput.document.status === \"canceled\"\n\t) {\n\t\tawait updateCheckoutSession({\n\t\t\tid: session.id,\n\t\t\tsql: input.sql,\n\t\t\tstatus:\n\t\t\t\tinput.document.status === \"canceled\"\n\t\t\t\t\t? \"first_payment_canceled\"\n\t\t\t\t\t: \"first_payment_failed\",\n\t\t});\n\t\treturn;\n\t}\n\tif (input.document.status !== \"paid\") {\n\t\treturn;\n\t}\n\tconst claimed = await claimCheckoutSessionForSubscriptionAdvance({\n\t\tid: session.id,\n\t\tsql: input.sql,\n\t});\n\tif (claimed == null) {\n\t\treturn;\n\t}\n\ttry {\n\t\tconst prices = await executeLocalBillingPriceList({\n\t\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tpayload: {},\n\t\t\tprincipal: selfDelegatedBillingPrincipal(\n\t\t\t\t{\n\t\t\t\t\tauthenticated: true,\n\t\t\t\t\tgrants: [],\n\t\t\t\t\trights: [],\n\t\t\t\t\tuserId: session.subjectId,\n\t\t\t\t},\n\t\t\t\t[\"prices.list\"],\n\t\t\t),\n\t\t\tregistry: input.registry,\n\t\t\ttestMode: input.testMode,\n\t\t});\n\t\tconst price = prices.items.find((item) => item.id === session.priceId);\n\t\tif (price == null) {\n\t\t\tawait releaseCheckoutSessionAdvanceClaim({\n\t\t\t\tid: session.id,\n\t\t\t\tsql: input.sql,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst intent = resolveBillingCheckoutIntent(price);\n\t\tif (intent.kind !== \"recurring\") {\n\t\t\tawait releaseCheckoutSessionAdvanceClaim({\n\t\t\t\tid: session.id,\n\t\t\t\tsql: input.sql,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst customerId =\n\t\t\tsession.providerCustomerId ?? input.document.providerCustomerId;\n\t\tif (customerId == null || customerId.trim() === \"\") {\n\t\t\tawait releaseCheckoutSessionAdvanceClaim({\n\t\t\t\tid: session.id,\n\t\t\t\tsql: input.sql,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst subscription = await createRecurringSubscriptionForPrice({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tcustomerId,\n\t\t\tidempotencyKey: session.idempotencyKey,\n\t\t\tinterval: intent.interval,\n\t\t\tprincipal: {\n\t\t\t\tauthenticated: true,\n\t\t\t\tgrants: [],\n\t\t\t\trights: [],\n\t\t\t\tuserId: session.subjectId,\n\t\t\t},\n\t\t\tprice,\n\t\t\tregistry: input.registry,\n\t\t\tsql: input.sql,\n\t\t\ttestMode: input.testMode,\n\t\t});\n\t\tawait updateCheckoutSession({\n\t\t\tid: session.id,\n\t\t\tproviderCustomerId: customerId,\n\t\t\tproviderSubscriptionId: subscription.providerSubscriptionId,\n\t\t\tsql: input.sql,\n\t\t\tstatus: \"enrolled\",\n\t\t});\n\t} catch (error) {\n\t\tawait releaseCheckoutSessionAdvanceClaim({\n\t\t\tid: session.id,\n\t\t\tsql: input.sql,\n\t\t});\n\t\tthrow error;\n\t}\n}\n","import type { BillingResolvedCredential } from \"../../../credentials.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\n\nexport async function resolveMollieWebhookResource(input: {\n\tcredential: BillingResolvedCredential;\n\tid: string;\n\tkind: \"payment\" | \"subscription\" | \"invoice\";\n\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n\tpool: MollieSdkClientPool;\n\tprofileId?: string | null;\n}): Promise<unknown> {\n\tconst client = clientFromPool(input.pool, {\n\t\tcredential: input.credential,\n\t\toperationScope: input.operationScope,\n\t\ttarget: { profileId: input.profileId },\n\t});\n\tif (input.kind === \"subscription\") {\n\t\treturn callMollieSdk({\n\t\t\tclient,\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"subscriptions.get\",\n\t\t\trequest: { subscriptionId: input.id },\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t}\n\tif (input.kind === \"invoice\") {\n\t\treturn callMollieSdk({\n\t\t\tclient,\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"invoices.get\",\n\t\t\trequest: { invoiceId: input.id },\n\t\t\tresource: \"invoices\",\n\t\t});\n\t}\n\treturn callMollieSdk({\n\t\tclient,\n\t\tmethod: \"get\",\n\t\toperation: \"payments.get\",\n\t\trequest: { paymentId: input.id },\n\t\tresource: \"payments\",\n\t});\n}\n","import { createHash } from \"node:crypto\";\n\nexport function deriveIngressProviderEventId(input: {\n\tprovider: string;\n\tconnectionId?: string;\n\tresourceKind: string;\n\tresourceId: string;\n\tauthoritativeStateOrVersion: string;\n}): string {\n\tconst material = [\n\t\tinput.provider,\n\t\tinput.connectionId ?? \"\",\n\t\tinput.resourceKind,\n\t\tinput.resourceId,\n\t\tinput.authoritativeStateOrVersion,\n\t].join(\"\\0\");\n\treturn createHash(\"sha256\").update(material).digest(\"hex\");\n}\n","import type {\n\tBillingInvoiceStatus,\n\tBillingMoney,\n\tBillingPaymentStatus,\n\tBillingProviderName,\n\tBillingSubscriptionStatus,\n} from \"../types.ts\";\n\nexport interface CanonicalMoney {\n\tcurrency: string;\n\tvalue: string;\n}\n\nexport interface CanonicalPayment {\n\tkind: \"payment\";\n\tprovider: BillingProviderName;\n\tproviderPaymentId: string;\n\tproviderCustomerId?: string | null;\n\tproviderProfileId?: string | null;\n\tproviderSubscriptionId?: string | null;\n\tproviderPaymentLinkId?: string | null;\n\tstatus: BillingPaymentStatus;\n\tamount: BillingMoney;\n\tamountRefunded?: BillingMoney | null;\n\tdescription?: string | null;\n\tmetadata: unknown;\n\tpaidAt?: string | null;\n\tcreatedAt?: string | null;\n\tupdatedAt?: string | null;\n\traw: unknown;\n}\n\nexport interface CanonicalSubscription {\n\tkind: \"subscription\";\n\tprovider: BillingProviderName;\n\tproviderSubscriptionId: string;\n\tproviderCustomerId: string;\n\tproviderProfileId?: string | null;\n\tstatus: BillingSubscriptionStatus;\n\tamount?: BillingMoney | null;\n\tcurrency?: string | null;\n\tinterval?: string | null;\n\tdescription?: string | null;\n\tmetadata: unknown;\n\tnextPaymentDate?: string | null;\n\tcreatedAt?: string | null;\n\tcanceledAt?: string | null;\n\tupdatedAt?: string | null;\n\traw: unknown;\n}\n\nexport interface CanonicalInvoice {\n\tkind: \"invoice\";\n\tprovider: BillingProviderName;\n\tproviderInvoiceId: string;\n\tproviderProfileId?: string | null;\n\tproviderCustomerId?: string | null;\n\tstatus: BillingInvoiceStatus;\n\tamount?: BillingMoney | null;\n\tamountPaid?: BillingMoney | null;\n\tdescription?: string | null;\n\tmetadata: unknown;\n\tissuedAt?: string | null;\n\tpaidAt?: string | null;\n\tcreatedAt?: string | null;\n\tupdatedAt?: string | null;\n\traw: unknown;\n}\n\nexport type CanonicalBillingDocument =\n\t| CanonicalPayment\n\t| CanonicalSubscription\n\t| CanonicalInvoice;\n\nexport function canonicalDocumentSubjectId(\n\tdocument: CanonicalBillingDocument,\n): string {\n\tif (document.kind === \"payment\") {\n\t\treturn document.providerPaymentId;\n\t}\n\tif (document.kind === \"subscription\") {\n\t\treturn document.providerSubscriptionId;\n\t}\n\treturn document.providerInvoiceId;\n}\n\nexport function canonicalDocumentRevision(document: CanonicalBillingDocument): {\n\tproviderUpdatedAt?: Date;\n\tsequence?: string;\n} {\n\tconst stamp =\n\t\tdocument.updatedAt ??\n\t\t(document.kind === \"payment\"\n\t\t\t? document.paidAt ?? document.createdAt\n\t\t\t: document.kind === \"subscription\"\n\t\t\t\t? document.canceledAt ?? document.createdAt\n\t\t\t\t: document.paidAt ?? document.createdAt);\n\treturn {\n\t\tsequence: `${document.kind}:${canonicalDocumentSubjectId(document)}:${documentFingerprint(document)}`,\n\t\t...(stamp ? { providerUpdatedAt: new Date(stamp) } : {}),\n\t};\n}\n\nfunction documentFingerprint(document: CanonicalBillingDocument): string {\n\tconst amount =\n\t\tdocument.kind === \"payment\"\n\t\t\t? `${document.amount.currency}:${document.amount.value}`\n\t\t\t: `${document.amount?.currency ?? \"\"}:${document.amount?.value ?? \"\"}`;\n\tconst refunded =\n\t\tdocument.kind === \"payment\"\n\t\t\t? `${document.amountRefunded?.currency ?? \"\"}:${document.amountRefunded?.value ?? \"\"}`\n\t\t\t: \"\";\n\treturn [\n\t\tdocument.status,\n\t\tamount,\n\t\trefunded,\n\t\tdocument.updatedAt ?? \"\",\n\t\tdocument.kind === \"payment\"\n\t\t\t? (document.paidAt ?? \"\")\n\t\t\t: document.kind === \"subscription\"\n\t\t\t\t? (document.canceledAt ?? \"\")\n\t\t\t\t: (document.paidAt ?? \"\"),\n\t].join(\":\");\n}\n","import type { AthenaIngressIR } from \"../ingress/ir.ts\";\nimport type { CanonicalEventCausality } from \"./ir.ts\";\n\nexport function causalityFromIngress(\n\tingress: AthenaIngressIR,\n\tcausationId?: string,\n): CanonicalEventCausality {\n\treturn {\n\t\t...(ingress.correlationId\n\t\t\t? { correlationId: ingress.correlationId }\n\t\t\t: {}),\n\t\t...(causationId ? { causationId } : { causationId: ingress.id }),\n\t};\n}\n","import { createHash } from \"node:crypto\";\n\nexport function deriveCanonicalEventId(material: string): string {\n\tconst hex = createHash(\"sha256\").update(material).digest(\"hex\").slice(0, 32);\n\treturn `${hex.slice(0, 8)}-${hex.slice(8, 12)}-5${hex.slice(13, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;\n}\n","import type { CanonicalBillingEventName } from \"../../runtime/events/catalog.ts\";\nimport { causalityFromIngress } from \"../../runtime/events/causality.ts\";\nimport { deriveCanonicalEventId } from \"../../runtime/events/identity.ts\";\nimport type { CanonicalEventIR } from \"../../runtime/events/ir.ts\";\nimport type { AthenaIngressIR } from \"../../runtime/ingress/ir.ts\";\nimport {\n\ttype CanonicalBillingDocument,\n\tcanonicalDocumentRevision,\n\tcanonicalDocumentSubjectId,\n} from \"./document.ts\";\n\nexport type CanonicalBillingEvent = CanonicalEventIR<\n\tCanonicalBillingEventName,\n\tCanonicalBillingDocument\n>;\n\nexport class AthenaBillingIllegalTransitionError extends Error {\n\treadonly code = \"ATHENA_BILLING_ILLEGAL_TRANSITION\";\n\n\tconstructor(previous: string, current: string) {\n\t\tsuper(\n\t\t\t`Canonical billing transition ${previous} → ${current} is not allowed.`,\n\t\t);\n\t\tthis.name = \"AthenaBillingIllegalTransitionError\";\n\t}\n}\n\nconst PAYMENT_TRANSITIONS: Record<string, ReadonlySet<string>> = {\n\tpending: new Set([\"pending\", \"authorized\", \"paid\", \"failed\", \"canceled\"]),\n\tauthorized: new Set([\"authorized\", \"paid\", \"failed\", \"canceled\"]),\n\tpaid: new Set([\"paid\", \"refunded\", \"canceled\"]),\n\tfailed: new Set([\"failed\"]),\n\tcanceled: new Set([\"canceled\"]),\n\trefunded: new Set([\"refunded\"]),\n};\n\nconst SUBSCRIPTION_TRANSITIONS: Record<string, ReadonlySet<string>> = {\n\ttrialing: new Set([\"trialing\", \"active\", \"past_due\", \"canceled\", \"paused\"]),\n\tactive: new Set([\"active\", \"past_due\", \"canceled\", \"paused\"]),\n\tpast_due: new Set([\"past_due\", \"active\", \"canceled\", \"paused\"]),\n\tpaused: new Set([\"paused\", \"active\", \"canceled\"]),\n\tcanceled: new Set([\"canceled\"]),\n};\n\nconst INVOICE_TRANSITIONS: Record<string, ReadonlySet<string>> = {\n\tdraft: new Set([\"draft\", \"open\", \"void\"]),\n\topen: new Set([\"open\", \"paid\", \"void\", \"uncollectible\"]),\n\tpaid: new Set([\"paid\"]),\n\tvoid: new Set([\"void\"]),\n\tuncollectible: new Set([\"uncollectible\"]),\n};\n\nfunction allowedStatuses(\n\tkind: CanonicalBillingDocument[\"kind\"],\n\tstatus: string,\n): ReadonlySet<string> | undefined {\n\tif (kind === \"payment\") {\n\t\treturn PAYMENT_TRANSITIONS[status];\n\t}\n\tif (kind === \"subscription\") {\n\t\treturn SUBSCRIPTION_TRANSITIONS[status];\n\t}\n\treturn INVOICE_TRANSITIONS[status];\n}\n\nexport function assertCanonicalBillingTransition(\n\tprevious: CanonicalBillingDocument | null,\n\tcurrent: CanonicalBillingDocument,\n): void {\n\tif (previous == null || previous.kind !== current.kind) {\n\t\treturn;\n\t}\n\tconst allowed = allowedStatuses(previous.kind, previous.status);\n\tif (allowed == null || !allowed.has(current.status)) {\n\t\tthrow new AthenaBillingIllegalTransitionError(\n\t\t\t`${previous.kind}:${previous.status}`,\n\t\t\t`${current.kind}:${current.status}`,\n\t\t);\n\t}\n}\n\nfunction eventNameForTransition(\n\tprevious: CanonicalBillingDocument | null,\n\tcurrent: CanonicalBillingDocument,\n): CanonicalBillingEventName | undefined {\n\tif (current.kind === \"payment\") {\n\t\tif (previous == null) {\n\t\t\tif (current.status === \"paid\") {\n\t\t\t\treturn \"billing.payment.paid\";\n\t\t\t}\n\t\t\tif (current.status === \"failed\") {\n\t\t\t\treturn \"billing.payment.failed\";\n\t\t\t}\n\t\t\tif (current.status === \"canceled\") {\n\t\t\t\treturn \"billing.payment.canceled\";\n\t\t\t}\n\t\t\tif (current.status === \"refunded\") {\n\t\t\t\treturn \"billing.payment.refunded\";\n\t\t\t}\n\t\t\tif (current.status === \"pending\") {\n\t\t\t\treturn \"billing.payment.pending\";\n\t\t\t}\n\t\t\treturn \"billing.payment.created\";\n\t\t}\n\t\tif (previous.kind === \"payment\" && previous.status === current.status) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (current.status === \"paid\") {\n\t\t\treturn \"billing.payment.paid\";\n\t\t}\n\t\tif (current.status === \"failed\") {\n\t\t\treturn \"billing.payment.failed\";\n\t\t}\n\t\tif (current.status === \"canceled\") {\n\t\t\treturn \"billing.payment.canceled\";\n\t\t}\n\t\tif (current.status === \"refunded\") {\n\t\t\treturn \"billing.payment.refunded\";\n\t\t}\n\t\tif (current.status === \"pending\") {\n\t\t\treturn \"billing.payment.pending\";\n\t\t}\n\t\treturn \"billing.payment.created\";\n\t}\n\tif (current.kind === \"subscription\") {\n\t\tif (current.status === \"canceled\") {\n\t\t\treturn \"billing.subscription.canceled\";\n\t\t}\n\t\tif (current.status === \"active\") {\n\t\t\treturn previous == null\n\t\t\t\t? \"billing.subscription.created\"\n\t\t\t\t: \"billing.subscription.active\";\n\t\t}\n\t\treturn previous == null ? \"billing.subscription.created\" : undefined;\n\t}\n\tif (current.status === \"paid\") {\n\t\treturn \"billing.invoice.paid\";\n\t}\n\treturn previous == null ? \"billing.invoice.created\" : undefined;\n}\n\nexport function canonicalizeBillingEvents(input: {\n\tingress: AthenaIngressIR;\n\tprevious: CanonicalBillingDocument | null;\n\tcurrent: CanonicalBillingDocument;\n}): readonly CanonicalBillingEvent[] {\n\tconst name = eventNameForTransition(input.previous, input.current);\n\tif (!name) {\n\t\treturn [];\n\t}\n\tconst revision = canonicalDocumentRevision(input.current);\n\treturn [\n\t\t{\n\t\t\tid: deriveCanonicalEventId(\n\t\t\t\t[\n\t\t\t\t\tinput.ingress.id,\n\t\t\t\t\tname,\n\t\t\t\t\tinput.current.kind,\n\t\t\t\t\tcanonicalDocumentSubjectId(input.current),\n\t\t\t\t\tinput.current.status,\n\t\t\t\t].join(\"\\0\"),\n\t\t\t),\n\t\t\tname,\n\t\t\tsource: {\n\t\t\t\tdomain: \"billing\",\n\t\t\t\tprovider:\n\t\t\t\t\ttypeof input.current.provider === \"string\"\n\t\t\t\t\t\t? input.current.provider\n\t\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t\tsubject: {\n\t\t\t\ttype: input.current.kind,\n\t\t\t\tid: canonicalDocumentSubjectId(input.current),\n\t\t\t},\n\t\t\tingressId: input.ingress.id,\n\t\t\tcausality: causalityFromIngress(input.ingress),\n\t\t\toccurredAt: revision.providerUpdatedAt ?? input.ingress.receivedAt,\n\t\t\tobservedAt: input.ingress.receivedAt,\n\t\t\trevision,\n\t\t\tpayload: input.current,\n\t\t},\n\t];\n}\n","import { createHmac, timingSafeEqual } from \"node:crypto\";\n\nexport const MOLLIE_WEBHOOK_MAX_BODY_BYTES = 64 * 1024;\n\nexport function verifyMollieWebhookSignature(input: {\n\tbody: Uint8Array;\n\tsignatureHeader?: string;\n\tsigningSecrets: readonly string[];\n}): boolean {\n\tif (input.body.byteLength > MOLLIE_WEBHOOK_MAX_BODY_BYTES) {\n\t\treturn false;\n\t}\n\tconst header = input.signatureHeader?.trim();\n\tif (!header || input.signingSecrets.length === 0) {\n\t\treturn false;\n\t}\n\tconst providedHeaders = header\n\t\t.split(/[\\n,]/u)\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0);\n\tfor (const candidate of providedHeaders) {\n\t\tconst provided = candidate.startsWith(\"sha256=\")\n\t\t\t? candidate.slice(7)\n\t\t\t: candidate;\n\t\tconst providedBytes = decodeMollieWebhookSignatureHex(provided);\n\t\tif (providedBytes == null) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const secret of input.signingSecrets) {\n\t\t\tconst calculated = createHmac(\"sha256\", secret).update(input.body).digest();\n\t\t\tif (\n\t\t\t\tcalculated.length === providedBytes.length &&\n\t\t\t\ttimingSafeEqual(calculated, providedBytes)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n/** Mollie next-gen `X-Mollie-Signature` is HMAC-SHA256 hex (`sha256=<hex>`). */\nfunction decodeMollieWebhookSignatureHex(value: string): Buffer | null {\n\tconst hex = value.trim();\n\tif (!/^[0-9a-fA-F]+$/.test(hex) || hex.length !== 64) {\n\t\treturn null;\n\t}\n\treturn Buffer.from(hex, \"hex\");\n}\n","import {\n\tATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\tAthenaEventIngressError,\n} from \"../../../../../runtime/ingress/errors.ts\";\nimport { MOLLIE_WEBHOOK_MAX_BODY_BYTES } from \"./verify-webhook.ts\";\n\nexport const MOLLIE_WEBHOOK_MAX_AGE_MS = 15 * 60 * 1000;\n\nexport type MollieWebhookEnvelope =\n\t| { kind: \"classic\"; id: string }\n\t| {\n\t\tkind: \"next_gen\";\n\t\tid: string;\n\t\ttype: string;\n\t\tresource: string;\n\t\tentityId: string;\n\t\tcreatedAt: string;\n\t};\n\nexport type MollieWebhookBodyKind = \"empty\" | \"json\" | \"form\" | \"unknown\";\n\nexport interface MollieWebhookEnvelopeDiagnostics {\n\tbodyBytes: number;\n\tbodyKind: MollieWebhookBodyKind;\n\tcontentType?: string;\n}\n\nfunction decodeBody(body: Uint8Array): string {\n\treturn new TextDecoder().decode(body);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function classifyMollieWebhookBody(\n\tbody: Uint8Array,\n\tcontentType?: string,\n): MollieWebhookEnvelopeDiagnostics {\n\tconst text = decodeBody(body).trim();\n\tlet bodyKind: MollieWebhookBodyKind = \"unknown\";\n\tif (text.length === 0) {\n\t\tbodyKind = \"empty\";\n\t} else if (text.startsWith(\"{\") || text.startsWith(\"[\")) {\n\t\tbodyKind = \"json\";\n\t} else if (text.includes(\"=\")) {\n\t\tbodyKind = \"form\";\n\t}\n\treturn {\n\t\tbodyBytes: body.byteLength,\n\t\tbodyKind,\n\t\t...(contentType ? { contentType } : {}),\n\t};\n}\n\nfunction envelopeError(\n\tmessage: string,\n\tdiagnostics: MollieWebhookEnvelopeDiagnostics,\n): AthenaEventIngressError {\n\treturn new AthenaEventIngressError({\n\t\tcode: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\t\tdiagnostics,\n\t\tdomain: \"billing\",\n\t\tmessage,\n\t\tprovider: \"mollie\",\n\t\tretryable: false,\n\t});\n}\n\nfunction assertMollieWebhookBodySize(\n\tbody: Uint8Array,\n\tdiagnostics: MollieWebhookEnvelopeDiagnostics,\n): void {\n\tif (body.byteLength > MOLLIE_WEBHOOK_MAX_BODY_BYTES) {\n\t\tthrow envelopeError(\"Mollie webhook payload exceeds size limit.\", diagnostics);\n\t}\n}\n\nfunction assertMollieWebhookCreatedAt(\n\tcreatedAt: string | undefined,\n\tdiagnostics: MollieWebhookEnvelopeDiagnostics,\n): asserts createdAt is string {\n\tif (createdAt == null || createdAt.trim() === \"\") {\n\t\tthrow envelopeError(\"Mollie webhook createdAt is required.\", diagnostics);\n\t}\n\tconst created = Date.parse(createdAt);\n\tif (!Number.isFinite(created)) {\n\t\tthrow envelopeError(\"Mollie webhook createdAt is invalid.\", diagnostics);\n\t}\n\tif (Math.abs(Date.now() - created) > MOLLIE_WEBHOOK_MAX_AGE_MS) {\n\t\tthrow envelopeError(\"Mollie webhook createdAt is stale.\", diagnostics);\n\t}\n}\n\nexport function parseMollieWebhookBody(\n\tbody: Uint8Array,\n\tcontentType?: string,\n): MollieWebhookEnvelope {\n\tconst diagnostics = classifyMollieWebhookBody(body, contentType);\n\tassertMollieWebhookBodySize(body, diagnostics);\n\tconst text = decodeBody(body).trim();\n\tif (diagnostics.bodyKind === \"json\") {\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(text);\n\t\t} catch {\n\t\t\tthrow envelopeError(\"Mollie webhook envelope is invalid.\", diagnostics);\n\t\t}\n\t\tif (\n\t\t\tisRecord(parsed) &&\n\t\t\ttypeof parsed.id === \"string\" &&\n\t\t\ttypeof parsed.entityId === \"string\"\n\t\t) {\n\t\t\tconst createdAt =\n\t\t\t\ttypeof parsed.createdAt === \"string\" ? parsed.createdAt : undefined;\n\t\t\tassertMollieWebhookCreatedAt(createdAt, diagnostics);\n\t\t\treturn {\n\t\t\t\tkind: \"next_gen\",\n\t\t\t\tid: parsed.id,\n\t\t\t\ttype: typeof parsed.type === \"string\" ? parsed.type : \"unknown\",\n\t\t\t\tresource:\n\t\t\t\t\ttypeof parsed.resource === \"string\" ? parsed.resource : \"event\",\n\t\t\t\tentityId: parsed.entityId,\n\t\t\t\tcreatedAt,\n\t\t\t};\n\t\t}\n\t\tthrow envelopeError(\"Mollie webhook envelope is invalid.\", diagnostics);\n\t}\n\tconst params = new URLSearchParams(text);\n\tconst id = params.get(\"id\");\n\tif (!id) {\n\t\tthrow envelopeError(\"Mollie webhook envelope is invalid.\", diagnostics);\n\t}\n\treturn { kind: \"classic\", id };\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n\tBillingInvoice,\n\tBillingInvoiceStatus,\n\tBillingMoney,\n} from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction serializationRetry() {\n\treturn billingRetryDisposition({\n\t\tidempotencyKeyPresent: false,\n\t\tkind: \"serialization\",\n\t\toperation: \"invoices.get\",\n\t\trequestDispatchState: \"dispatched\",\n\t});\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn normalizeBillingMoney(value);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"ATHENA_BILLING_MONEY_INVALID\";\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage,\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n}\n\nexport function projectMollieInvoiceStatus(\n\tstatus: string,\n): BillingInvoiceStatus {\n\tif (status === \"draft\") {\n\t\treturn \"draft\";\n\t}\n\tif (\n\t\tstatus === \"issuing\" ||\n\t\tstatus === \"issued\" ||\n\t\tstatus === \"open\" ||\n\t\tstatus === \"pending-payment\"\n\t) {\n\t\treturn \"open\";\n\t}\n\tif (status === \"paid\") {\n\t\treturn \"paid\";\n\t}\n\tif (status === \"cancelled\" || status === \"canceled\") {\n\t\treturn \"void\";\n\t}\n\tif (status === \"failed\") {\n\t\treturn \"uncollectible\";\n\t}\n\tthrow new AthenaBillingProviderRequestError({\n\t\tkind: \"serialization\",\n\t\tmessage: `Mollie invoice status \"${status}\" is not supported.`,\n\t\tprovider: \"mollie\",\n\t\tretry: serializationRetry(),\n\t});\n}\n\nexport function projectMollieInvoice(raw: unknown): BillingInvoice {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie invoice response is missing an invoice id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst status =\n\t\ttypeof raw.status === \"string\"\n\t\t\t? projectMollieInvoiceStatus(raw.status)\n\t\t\t: projectMollieInvoiceStatus(\"\");\n\treturn {\n\t\tamount: projectMoney(raw.totalAmount) ?? null,\n\t\tamountPaid: projectMoney(raw.amountPaid) ?? null,\n\t\tcreatedAt: optionalString(raw.createdAt),\n\t\tdescription: optionalString(raw.description),\n\t\tissuedAt: optionalString(raw.issuedAt),\n\t\tmetadata: raw.metadata,\n\t\tpaidAt: optionalString(raw.paidAt),\n\t\tprovider: \"mollie\",\n\t\tproviderCustomerId: optionalString(raw.customerId),\n\t\tproviderInvoiceId: raw.id,\n\t\tproviderProfileId: optionalString(raw.profileId),\n\t\traw,\n\t\tstatus,\n\t};\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n\tBillingMoney,\n\tBillingSubscription,\n\tBillingSubscriptionStatus,\n} from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction serializationRetry() {\n\treturn billingRetryDisposition({\n\t\tidempotencyKeyPresent: false,\n\t\tkind: \"serialization\",\n\t\toperation: \"subscriptions.get\",\n\t\trequestDispatchState: \"dispatched\",\n\t});\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn normalizeBillingMoney(value);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"ATHENA_BILLING_MONEY_INVALID\";\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage,\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n}\n\nexport function projectMollieSubscriptionStatus(\n\tstatus: string,\n): BillingSubscriptionStatus {\n\tif (status === \"pending\") {\n\t\treturn \"trialing\";\n\t}\n\tif (status === \"active\") {\n\t\treturn \"active\";\n\t}\n\tif (status === \"canceled\" || status === \"completed\") {\n\t\treturn \"canceled\";\n\t}\n\tif (status === \"suspended\") {\n\t\treturn \"past_due\";\n\t}\n\tthrow new AthenaBillingProviderRequestError({\n\t\tkind: \"serialization\",\n\t\tmessage: `Mollie subscription status \"${status}\" is not supported.`,\n\t\tprovider: \"mollie\",\n\t\tretry: serializationRetry(),\n\t});\n}\n\nexport function projectMollieSubscription(\n\traw: unknown,\n\tcustomerId?: string,\n): BillingSubscription {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie subscription response is missing a subscription id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst resolvedCustomerId =\n\t\ttypeof raw.customerId === \"string\" ? raw.customerId : customerId;\n\tif (typeof resolvedCustomerId !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie subscription response is missing a customer id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst status =\n\t\ttypeof raw.status === \"string\"\n\t\t\t? projectMollieSubscriptionStatus(raw.status)\n\t\t\t: projectMollieSubscriptionStatus(\"\");\n\tconst amount = projectMoney(raw.amount);\n\treturn {\n\t\tamount: amount ?? null,\n\t\tcanceledAt: optionalString(raw.canceledAt),\n\t\tcreatedAt: optionalString(raw.createdAt),\n\t\tcurrency: amount?.currency ?? null,\n\t\tdescription: optionalString(raw.description),\n\t\tinterval: optionalString(raw.interval),\n\t\tmetadata: raw.metadata,\n\t\tnextPaymentDate: optionalString(raw.nextPaymentDate),\n\t\tprovider: \"mollie\",\n\t\tproviderCustomerId: resolvedCustomerId,\n\t\tproviderProfileId: optionalString(raw.profileId),\n\t\tproviderSubscriptionId: raw.id,\n\t\traw,\n\t\tstatus,\n\t};\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../safety/retry.ts\";\nimport type {\n\tBillingMoney,\n\tBillingPayment,\n\tBillingPaymentStatus,\n} from \"../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction serializationRetry() {\n\treturn billingRetryDisposition({\n\t\tidempotencyKeyPresent: false,\n\t\tkind: \"serialization\",\n\t\toperation: \"payments.get\",\n\t\trequestDispatchState: \"dispatched\",\n\t});\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn normalizeBillingMoney(value);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"ATHENA_BILLING_MONEY_INVALID\";\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage,\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n}\n\nfunction unknownStatusError(status: string): AthenaBillingProviderRequestError {\n\treturn new AthenaBillingProviderRequestError({\n\t\tkind: \"serialization\",\n\t\tmessage: `Mollie payment status \"${status}\" is not supported.`,\n\t\tprovider: \"mollie\",\n\t\tretry: serializationRetry(),\n\t});\n}\n\nexport function projectMolliePaymentStatus(\n\tstatus: string,\n): BillingPaymentStatus {\n\tif (status === \"open\" || status === \"pending\") {\n\t\treturn \"pending\";\n\t}\n\tif (status === \"authorized\") {\n\t\treturn \"authorized\";\n\t}\n\tif (status === \"paid\") {\n\t\treturn \"paid\";\n\t}\n\tif (status === \"failed\") {\n\t\treturn \"failed\";\n\t}\n\tif (status === \"canceled\") {\n\t\treturn \"canceled\";\n\t}\n\tif (status === \"expired\") {\n\t\treturn \"failed\";\n\t}\n\tthrow unknownStatusError(status);\n}\n\nexport function projectMolliePayment(raw: unknown): BillingPayment {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie payment response is missing a payment id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst amount = projectMoney(raw.amount);\n\tif (amount == null) {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie payment response is missing amount.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst status =\n\t\ttypeof raw.status === \"string\"\n\t\t\t? projectMolliePaymentStatus(raw.status)\n\t\t\t: projectMolliePaymentStatus(\"\");\n\treturn {\n\t\tid: raw.id,\n\t\tamount,\n\t\tamountRefunded: projectMoney(raw.amountRefunded) ?? null,\n\t\tcreatedAt: optionalString(raw.createdAt),\n\t\tdescription: optionalString(raw.description),\n\t\tmetadata: raw.metadata,\n\t\tpaidAt: optionalString(raw.paidAt),\n\t\tprovider: \"mollie\",\n\t\tproviderCustomerId: optionalString(raw.customerId),\n\t\tproviderPaymentId: raw.id,\n\t\tproviderPaymentLinkId: optionalString(raw.paymentLinkId),\n\t\tproviderProfileId: optionalString(raw.profileId),\n\t\tproviderSubscriptionId: optionalString(raw.subscriptionId),\n\t\traw,\n\t\tstatus,\n\t};\n}\n","import type { CanonicalBillingDocument } from \"../../../../canonical/document.ts\";\nimport { projectMollieInvoice } from \"./projection/invoice.ts\";\nimport { projectMollieSubscription } from \"./projection/subscription.ts\";\nimport { projectMolliePayment } from \"./projection.ts\";\n\nexport function projectMollieResourceToCanonical(\n\tresource: unknown,\n\tkind: \"payment\" | \"subscription\" | \"invoice\",\n): CanonicalBillingDocument {\n\tif (kind === \"subscription\") {\n\t\tconst projected = projectMollieSubscription(resource);\n\t\treturn {\n\t\t\tkind: \"subscription\",\n\t\t\tprovider: projected.provider,\n\t\t\tproviderSubscriptionId: projected.providerSubscriptionId,\n\t\t\tproviderCustomerId: projected.providerCustomerId,\n\t\t\tproviderProfileId: projected.providerProfileId,\n\t\t\tstatus: projected.status,\n\t\t\tamount: projected.amount,\n\t\t\tcurrency: projected.currency,\n\t\t\tinterval: projected.interval,\n\t\t\tdescription: projected.description,\n\t\t\tmetadata: projected.metadata,\n\t\t\tnextPaymentDate: projected.nextPaymentDate,\n\t\t\tcreatedAt: projected.createdAt,\n\t\t\tcanceledAt: projected.canceledAt,\n\t\t\traw: projected.raw,\n\t\t};\n\t}\n\tif (kind === \"invoice\") {\n\t\tconst projected = projectMollieInvoice(resource);\n\t\treturn {\n\t\t\tkind: \"invoice\",\n\t\t\tprovider: projected.provider,\n\t\t\tproviderInvoiceId: projected.providerInvoiceId,\n\t\t\tproviderProfileId: projected.providerProfileId,\n\t\t\tproviderCustomerId: projected.providerCustomerId,\n\t\t\tstatus: projected.status,\n\t\t\tamount: projected.amount,\n\t\t\tamountPaid: projected.amountPaid,\n\t\t\tdescription: projected.description,\n\t\t\tmetadata: projected.metadata,\n\t\t\tissuedAt: projected.issuedAt,\n\t\t\tpaidAt: projected.paidAt,\n\t\t\tcreatedAt: projected.createdAt,\n\t\t\traw: projected.raw,\n\t\t};\n\t}\n\tconst projected = projectMolliePayment(resource);\n\treturn {\n\t\tkind: \"payment\",\n\t\tprovider: projected.provider,\n\t\tproviderPaymentId: projected.providerPaymentId,\n\t\tproviderCustomerId: projected.providerCustomerId,\n\t\tproviderProfileId: projected.providerProfileId,\n\t\tproviderSubscriptionId: projected.providerSubscriptionId,\n\t\tproviderPaymentLinkId: projected.providerPaymentLinkId,\n\t\tstatus: projected.status,\n\t\tamount: projected.amount,\n\t\tamountRefunded: projected.amountRefunded,\n\t\tdescription: projected.description,\n\t\tmetadata: projected.metadata,\n\t\tpaidAt: projected.paidAt,\n\t\tcreatedAt: projected.createdAt,\n\t\traw: projected.raw,\n\t};\n}\n","import {\n\tATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\tATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n\tAthenaEventIngressError,\n} from \"../../../../../runtime/ingress/errors.ts\";\nimport { deriveIngressProviderEventId } from \"../../../../../runtime/ingress/identity.ts\";\nimport type { AthenaIngressIR } from \"../../../../../runtime/ingress/ir.ts\";\nimport {\n\ttype CanonicalBillingDocument,\n\tcanonicalDocumentRevision,\n\tcanonicalDocumentSubjectId,\n} from \"../../../../canonical/document.ts\";\nimport { canonicalizeBillingEvents } from \"../../../../canonical/transition.ts\";\nimport type {\n\tBillingProviderWebhookPort,\n\tBillingWebhookVerificationStrategy,\n} from \"../webhook-port.ts\";\nimport {\n\tclassifyMollieWebhookBody,\n\ttype MollieWebhookEnvelope,\n\tparseMollieWebhookBody,\n} from \"./parse-webhook.ts\";\nimport { projectMollieResourceToCanonical } from \"./project-document.ts\";\nimport {\n\tMOLLIE_WEBHOOK_MAX_BODY_BYTES,\n\tverifyMollieWebhookSignature,\n} from \"./verify-webhook.ts\";\n\nexport type MollieWebhookResource = {\n\tkind: \"payment\" | \"subscription\" | \"invoice\";\n\traw: unknown;\n};\n\nexport function mollieResourceKind(\n\tenvelope: MollieWebhookEnvelope,\n): \"payment\" | \"subscription\" | \"invoice\" {\n\tif (envelope.kind === \"classic\") {\n\t\treturn \"payment\";\n\t}\n\tif (\n\t\tenvelope.type.startsWith(\"subscription.\") ||\n\t\tenvelope.resource === \"subscription\"\n\t) {\n\t\treturn \"subscription\";\n\t}\n\tif (\n\t\tenvelope.type.startsWith(\"sales-invoice.\") ||\n\t\tenvelope.type.startsWith(\"invoice.\") ||\n\t\tenvelope.resource === \"invoice\"\n\t) {\n\t\treturn \"invoice\";\n\t}\n\treturn \"payment\";\n}\n\nexport function mollieEnvelopeResourceId(\n\tenvelope: MollieWebhookEnvelope,\n): string {\n\treturn envelope.kind === \"classic\" ? envelope.id : envelope.entityId;\n}\n\nfunction resolveVerification(input: {\n\trequireSignature?: boolean;\n\tresolveSigningSecrets?: (connectionId: string) => readonly string[];\n\tsigningSecrets?: readonly string[];\n\tverification?: BillingWebhookVerificationStrategy;\n}): BillingWebhookVerificationStrategy {\n\tif (input.verification) {\n\t\treturn input.verification;\n\t}\n\tif (input.requireSignature === false) {\n\t\treturn \"authoritative_refetch\";\n\t}\n\tif (\n\t\tinput.requireSignature === true ||\n\t\tinput.resolveSigningSecrets != null ||\n\t\t(input.signingSecrets && input.signingSecrets.length > 0)\n\t) {\n\t\treturn \"signature_and_refetch\";\n\t}\n\treturn \"authoritative_refetch\";\n}\n\nfunction signingSecretsForIngress(\n\tinput: {\n\t\tresolveSigningSecrets?: (connectionId: string) => readonly string[];\n\t\tsigningSecrets?: readonly string[];\n\t},\n\tconnectionId: string | undefined,\n): readonly string[] {\n\tif (input.resolveSigningSecrets) {\n\t\tif (connectionId == null || connectionId.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn input.resolveSigningSecrets(connectionId);\n\t}\n\treturn input.signingSecrets ?? [];\n}\n\nexport function createMollieWebhookPort(input: {\n\tsigningSecrets?: readonly string[];\n\tresolveSigningSecrets?: (connectionId: string) => readonly string[];\n\trequireSignature?: boolean;\n\tverification?: BillingWebhookVerificationStrategy;\n\tresolveResource: (input: {\n\t\tconnectionId?: string;\n\t\tkind: \"payment\" | \"subscription\" | \"invoice\";\n\t\tid: string;\n\t}) => Promise<unknown>;\n}): BillingProviderWebhookPort<MollieWebhookEnvelope, MollieWebhookResource> {\n\tconst verification = resolveVerification(input);\n\treturn {\n\t\tverification,\n\t\tparseIngress(ingress: AthenaIngressIR): MollieWebhookEnvelope {\n\t\t\tif (ingress.body.byteLength > MOLLIE_WEBHOOK_MAX_BODY_BYTES) {\n\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\t\t\t\t\tdiagnostics: classifyMollieWebhookBody(\n\t\t\t\t\t\tingress.body,\n\t\t\t\t\t\tingress.headers[\"content-type\"],\n\t\t\t\t\t),\n\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\tmessage: \"Mollie webhook payload exceeds size limit.\",\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tretryable: false,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst eventsRoute = ingress.operation === \"webhook.mollie.events\";\n\t\t\tconst classicRoute = ingress.operation === \"webhook.mollie.classic\";\n\t\t\tconst contentType = ingress.headers[\"content-type\"];\n\t\t\tconst envelope = parseMollieWebhookBody(ingress.body, contentType);\n\t\t\tif (envelope.kind === \"next_gen\") {\n\t\t\t\tconst requireSignature =\n\t\t\t\t\teventsRoute ||\n\t\t\t\t\t(!classicRoute &&\n\t\t\t\t\t\t(verification === \"signature\" ||\n\t\t\t\t\t\t\tverification === \"signature_and_refetch\"));\n\t\t\t\tif (requireSignature) {\n\t\t\t\t\tconst signature = ingress.headers[\"x-mollie-signature\"];\n\t\t\t\t\tconst signingSecrets = signingSecretsForIngress(input, ingress.connectionId);\n\t\t\t\t\tif (signingSecrets.length === 0) {\n\t\t\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n\t\t\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\"Mollie next-gen webhook HMAC secret is not configured. Set billing.ingestion.webhooks.providers.mollie.nextGen.signingSecret to the webhook secret Mollie returned at create, or let automatic registration persist that secret.\",\n\t\t\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\t!verifyMollieWebhookSignature({\n\t\t\t\t\t\t\tbody: ingress.body,\n\t\t\t\t\t\t\tsignatureHeader: signature,\n\t\t\t\t\t\t\tsigningSecrets,\n\t\t\t\t\t\t})\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n\t\t\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\t\t\tmessage: \"Mollie webhook signature is invalid.\",\n\t\t\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (classicRoute && envelope.kind !== \"classic\") {\n\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\t\t\t\t\tdiagnostics: classifyMollieWebhookBody(ingress.body, contentType),\n\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\tmessage: \"Classic Mollie webhook expected a form id payload.\",\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tretryable: false,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (eventsRoute && envelope.kind !== \"next_gen\") {\n\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\t\t\t\t\tdiagnostics: classifyMollieWebhookBody(ingress.body, contentType),\n\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\tmessage: \"Next-gen Mollie webhook expected a JSON event payload.\",\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tretryable: false,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn envelope;\n\t\t},\n\t\tasync resolveAuthoritativeState(envelope, ingress) {\n\t\t\tif (verification === \"signature\") {\n\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Mollie ingest requires authoritative refetch; signature-only is not supported.\",\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tretryable: false,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst kind = mollieResourceKind(envelope);\n\t\t\tconst id = mollieEnvelopeResourceId(envelope);\n\t\t\tconst raw = await input.resolveResource({\n\t\t\t\tkind,\n\t\t\t\tid,\n\t\t\t\t...(ingress.connectionId\n\t\t\t\t\t? { connectionId: ingress.connectionId }\n\t\t\t\t\t: {}),\n\t\t\t});\n\t\t\treturn { kind, raw };\n\t\t},\n\t\tprojectDocument(resource) {\n\t\t\treturn projectMollieResourceToCanonical(resource.raw, resource.kind);\n\t\t},\n\t\tcanonicalizeEvents(context) {\n\t\t\treturn canonicalizeBillingEvents(context);\n\t\t},\n\t};\n}\n\nexport function mollieDeterministicEventId(input: {\n\tconnectionId?: string;\n\tdocument: CanonicalBillingDocument;\n}): string {\n\tconst revision = canonicalDocumentRevision(input.document);\n\treturn deriveIngressProviderEventId({\n\t\tprovider: \"mollie\",\n\t\tconnectionId: input.connectionId,\n\t\tresourceKind: input.document.kind,\n\t\tresourceId: canonicalDocumentSubjectId(input.document),\n\t\tauthoritativeStateOrVersion: revision.sequence ?? input.document.status,\n\t});\n}\n","import type { CanonicalBillingEventName } from \"./catalog.ts\";\nimport type { CanonicalEventIR } from \"./ir.ts\";\n\nexport type CanonicalEventHook = (\n\tevent: CanonicalEventIR<CanonicalBillingEventName>,\n) => void | Promise<void>;\n\nconst hooks = new Map<string, CanonicalEventHook[]>();\n\nexport function onCanonicalEvent(\n\tname: CanonicalBillingEventName,\n\thook: CanonicalEventHook,\n): void {\n\tconst existing = hooks.get(name) ?? [];\n\texisting.push(hook);\n\thooks.set(name, existing);\n}\n\nexport async function dispatchCanonicalEventAfterCommit(\n\tevents: readonly CanonicalEventIR<CanonicalBillingEventName>[],\n): Promise<void> {\n\tfor (const event of events) {\n\t\tconst registered = hooks.get(event.name) ?? [];\n\t\tfor (const hook of registered) {\n\t\t\tawait hook(event);\n\t\t}\n\t}\n}\n\n/** @deprecated Mutation lifecycle hooks are not this registry. Prefer dispatchCanonicalEventAfterCommit. */\nexport async function dispatchCanonicalEventHooks(\n\tevents: readonly CanonicalEventIR<CanonicalBillingEventName>[],\n): Promise<void> {\n\tawait dispatchCanonicalEventAfterCommit(events);\n}\n","import { isAthenaEventIngressError } from \"./errors.ts\";\nimport type { AthenaIngressStatus } from \"./ir.ts\";\n\nexport const INGRESS_PROCESSING_LEASE_MS = 5 * 60 * 1000;\nexport const INGRESS_MAX_ATTEMPTS = 8;\nexport const INGRESS_MAX_BACKOFF_MS = 60 * 60 * 1000;\n\nexport type IngressFailureStage =\n\t| \"parse\"\n\t| \"verify\"\n\t| \"refetch\"\n\t| \"project\"\n\t| \"persist\"\n\t| \"unknown\";\n\nexport interface IngressFailureRecord {\n\tattemptCount: number;\n\tcode: string;\n\tfirstFailedAt: string;\n\tlastFailedAt: string;\n\tnextAttemptAt?: string;\n\tretryable: boolean;\n\tstage: IngressFailureStage;\n}\n\nexport interface ClassifiedIngressFailure {\n\tcode: string;\n\terror: IngressFailureRecord;\n\tnextAttemptAt?: Date;\n\tretryable: boolean;\n\tstage: IngressFailureStage;\n\tstatus: Extract<AthenaIngressStatus, \"retryable_failure\" | \"terminal_failure\">;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction pgCode(error: unknown): string | undefined {\n\tif (!isRecord(error)) {\n\t\treturn undefined;\n\t}\n\tif (typeof error.code === \"string\") {\n\t\treturn error.code;\n\t}\n\tconst cause = error.cause;\n\tif (isRecord(cause) && typeof cause.code === \"string\") {\n\t\treturn cause.code;\n\t}\n\treturn undefined;\n}\n\nfunction isTransientDatabaseFailure(error: unknown): boolean {\n\tconst code = pgCode(error);\n\tif (\n\t\tcode === \"40001\" ||\n\t\tcode === \"40P01\" ||\n\t\tcode === \"55P03\" ||\n\t\tcode === \"57P01\" ||\n\t\tcode === \"08006\" ||\n\t\tcode === \"08001\" ||\n\t\tcode === \"57P03\"\n\t) {\n\t\treturn true;\n\t}\n\tif (!isRecord(error)) {\n\t\treturn false;\n\t}\n\tconst message = typeof error.message === \"string\" ? error.message : \"\";\n\treturn (\n\t\terror.name === \"AthenaBillingCapabilityError\" ||\n\t\t/timeout|ECONNRESET|ECONNREFUSED|connection terminated/i.test(message)\n\t);\n}\n\nfunction isProjectionInvariantFailure(error: unknown): boolean {\n\tif (!isRecord(error)) {\n\t\treturn false;\n\t}\n\tconst name = typeof error.name === \"string\" ? error.name : \"\";\n\tconst code = typeof error.code === \"string\" ? error.code : \"\";\n\treturn (\n\t\tname === \"AthenaBillingIllegalTransitionError\" ||\n\t\tname === \"AthenaBillingRevisionStaleError\" ||\n\t\tcode === \"ATHENA_BILLING_ILLEGAL_TRANSITION\" ||\n\t\tcode === \"ATHENA_BILLING_REVISION_STALE\"\n\t);\n}\n\nexport function backoffAfterAttempt(attemptCount: number): Date {\n\tconst exponent = Math.max(0, attemptCount - 1);\n\tconst delay = Math.min(INGRESS_MAX_BACKOFF_MS, 1000 * 2 ** exponent);\n\treturn new Date(Date.now() + delay);\n}\n\nexport function classifyIngressFailure(input: {\n\tattemptCount: number;\n\terror: unknown;\n\tfirstFailedAt?: Date;\n\tstage: IngressFailureStage;\n}): ClassifiedIngressFailure {\n\tconst now = new Date();\n\tconst firstFailedAt = input.firstFailedAt ?? now;\n\tlet code = \"ATHENA_EVENT_INGRESS_FAILED\";\n\tlet retryable = false;\n\tif (isAthenaEventIngressError(input.error)) {\n\t\tcode = input.error.code;\n\t\tretryable = input.error.retryable;\n\t} else if (isProjectionInvariantFailure(input.error)) {\n\t\tcode =\n\t\t\tisRecord(input.error) && typeof input.error.code === \"string\"\n\t\t\t\t? input.error.code\n\t\t\t\t: \"ATHENA_BILLING_ILLEGAL_TRANSITION\";\n\t\tretryable = false;\n\t} else if (isTransientDatabaseFailure(input.error)) {\n\t\tcode = pgCode(input.error) ?? \"ATHENA_EVENT_INGRESS_FAILED\";\n\t\tretryable = true;\n\t} else if (input.stage === \"refetch\" || input.stage === \"persist\") {\n\t\tretryable = true;\n\t}\n\tif (input.attemptCount >= INGRESS_MAX_ATTEMPTS) {\n\t\tretryable = false;\n\t}\n\tconst status = retryable ? \"retryable_failure\" : \"terminal_failure\";\n\tconst nextAttemptAt = retryable ? backoffAfterAttempt(input.attemptCount) : undefined;\n\tconst record: IngressFailureRecord = {\n\t\tattemptCount: input.attemptCount,\n\t\tcode,\n\t\tfirstFailedAt: firstFailedAt.toISOString(),\n\t\tlastFailedAt: now.toISOString(),\n\t\tretryable,\n\t\tstage: input.stage,\n\t\t...(nextAttemptAt ? { nextAttemptAt: nextAttemptAt.toISOString() } : {}),\n\t};\n\treturn {\n\t\tcode,\n\t\terror: record,\n\t\tretryable,\n\t\tstage: input.stage,\n\t\tstatus,\n\t\t...(nextAttemptAt ? { nextAttemptAt } : {}),\n\t};\n}\n\nexport function redactedIngressFailure(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\treturn \"ingress failed\";\n}\n","export const BILLING_WEBHOOK_INGRESS_STAGES = [\n\t\"received\",\n\t\"parsed\",\n\t\"verified\",\n\t\"authoritative_refetch_started\",\n\t\"authoritative_refetch_completed\",\n\t\"canonicalized\",\n\t\"persisted\",\n\t\"reconciliation_started\",\n\t\"reconciliation_completed\",\n\t\"reconciliation_failed\",\n\t\"duplicate\",\n\t\"rejected\",\n] as const;\n\nexport type BillingWebhookIngressStage =\n\t(typeof BILLING_WEBHOOK_INGRESS_STAGES)[number];\n\n/** @deprecated Use `reconciliation_failed` or `rejected`. Kept for v8 rows. */\nexport type BillingWebhookIngressLegacyStage = \"failed\";\n\nexport type BillingWebhookReconciliationOutcome =\n\t| \"completed\"\n\t| \"failed\"\n\t| \"skipped\";\n\n/** Persistable CHECK value on v8 `billing_webhook_ingress_stages` (API name is `rejected`). */\nexport function persistableWebhookRejectionStage(): \"failed\" {\n\treturn \"failed\";\n}\n\nexport function isBillingWebhookIngressStage(\n\tvalue: string,\n): value is BillingWebhookIngressStage {\n\treturn (BILLING_WEBHOOK_INGRESS_STAGES as readonly string[]).includes(value);\n}\n\nexport function billingWebhookRegistrationKind(\n\toperation: string,\n): \"classic\" | \"next_gen\" {\n\treturn operation === \"webhook.mollie.classic\" ? \"classic\" : \"next_gen\";\n}\n\nexport function publicBillingRejectionCode(error: unknown): string {\n\tif (error != null && typeof error === \"object\" && \"code\" in error) {\n\t\tconst code = error.code;\n\t\tif (\n\t\t\ttypeof code === \"string\" &&\n\t\t\tcode.length > 0 &&\n\t\t\t!/secret/i.test(code)\n\t\t) {\n\t\t\treturn code;\n\t\t}\n\t}\n\treturn \"ATHENA_EVENT_INGRESS_FAILED\";\n}\n\nexport function publicBillingRejectionMessage(error: unknown): string {\n\tconst raw = error instanceof Error ? error.message : String(error);\n\tif (raw.length === 0 || /secret/i.test(raw)) {\n\t\treturn publicBillingRejectionCode(error);\n\t}\n\treturn raw.length > 240 ? `${raw.slice(0, 237)}...` : raw;\n}\n","import type { CanonicalEventIR } from \"./ir.ts\";\n\nexport interface CanonicalOutboxIntent {\n\treadonly id: string;\n\treadonly eventId: string;\n\treadonly name: string;\n\treadonly payload: unknown;\n}\n\nexport function projectOutboxIntents(\n\tevents: readonly CanonicalEventIR[],\n): CanonicalOutboxIntent[] {\n\treturn events.map((event) => ({\n\t\tid: crypto.randomUUID(),\n\t\teventId: event.id,\n\t\tname: event.name,\n\t\tpayload: event.payload,\n\t}));\n}\n","import type { CanonicalBillingDocument } from \"../../../canonical/document.ts\";\n\nexport class AthenaBillingRevisionStaleError extends Error {\n\treadonly code = \"ATHENA_BILLING_REVISION_STALE\";\n\n\tconstructor() {\n\t\tsuper(\"Canonical billing revision is stale relative to stored state.\");\n\t\tthis.name = \"AthenaBillingRevisionStaleError\";\n\t}\n}\n\nconst STATUS_RANK: Record<string, number> = {\n\tpending: 1,\n\tauthorized: 2,\n\topen: 2,\n\tdraft: 1,\n\ttrialing: 1,\n\tactive: 3,\n\tpaid: 4,\n\trefunded: 5,\n\tfailed: 4,\n\tcanceled: 4,\n\tpaused: 3,\n\tpast_due: 3,\n\tvoid: 4,\n\tuncollectible: 4,\n};\n\nfunction rank(document: CanonicalBillingDocument): number {\n\treturn STATUS_RANK[document.status] ?? 0;\n}\n\nexport function assertRevisionIsNotStale(\n\tprevious: CanonicalBillingDocument | null,\n\tcurrent: CanonicalBillingDocument,\n): void {\n\tif (previous == null || previous.kind !== current.kind) {\n\t\treturn;\n\t}\n\tconst previousTime = previous.updatedAt ?? previous.createdAt;\n\tconst currentTime = current.updatedAt ?? current.createdAt;\n\tif (\n\t\tpreviousTime &&\n\t\tcurrentTime &&\n\t\tnew Date(currentTime).getTime() < new Date(previousTime).getTime()\n\t) {\n\t\tthrow new AthenaBillingRevisionStaleError();\n\t}\n\tif (rank(current) < rank(previous)) {\n\t\tthrow new AthenaBillingRevisionStaleError();\n\t}\n}\n","import { projectOutboxIntents } from \"../../../../runtime/events/outbox.ts\";\nimport type { AthenaIngressIR } from \"../../../../runtime/ingress/ir.ts\";\nimport type {\n\tEventIngressDatabase,\n\tEventIngressPersistence,\n} from \"../../../../runtime/ingress/persistence.ts\";\nimport type { CanonicalBillingDocument } from \"../../../canonical/document.ts\";\nimport {\n\ttype CanonicalBillingEvent,\n\tassertCanonicalBillingTransition,\n\tcanonicalizeBillingEvents,\n} from \"../../../canonical/transition.ts\";\nimport type {\n\tBillingEventRepository,\n\tBillingIngressDocumentRepository,\n\tBillingOutboxRepository,\n} from \"./repository.ts\";\nimport { assertRevisionIsNotStale } from \"./revision.ts\";\n\nexport interface ApplyCanonicalBillingIngressInput {\n\tdatabase: EventIngressDatabase;\n\tingress: AthenaIngressIR;\n\tdocument: CanonicalBillingDocument;\n\tpersistence: EventIngressPersistence;\n\tdocuments: BillingIngressDocumentRepository;\n\tevents: BillingEventRepository;\n\toutbox: BillingOutboxRepository;\n\tcanonicalizeEvents?: typeof canonicalizeBillingEvents;\n}\n\nexport interface ApplyCanonicalBillingIngressResult {\n\tduplicate: boolean;\n\tevents: readonly CanonicalBillingEvent[];\n\tdocument: CanonicalBillingDocument;\n}\n\nexport async function applyCanonicalBillingIngress(\n\tinput: ApplyCanonicalBillingIngressInput,\n): Promise<ApplyCanonicalBillingIngressResult> {\n\treturn input.database.transaction(async (tx) => {\n\t\tconst locked = await input.persistence.lock(tx, input.ingress.id);\n\t\tif (locked?.status === \"processed\") {\n\t\t\treturn {\n\t\t\t\tduplicate: true,\n\t\t\t\tevents: [],\n\t\t\t\tdocument: input.document,\n\t\t\t};\n\t\t}\n\n\t\tconst previous = await input.documents.readCurrentForUpdate(\n\t\t\ttx,\n\t\t\tinput.document,\n\t\t\tinput.ingress.connectionId,\n\t\t);\n\t\tassertRevisionIsNotStale(previous, input.document);\n\t\tassertCanonicalBillingTransition(previous, input.document);\n\t\tawait input.documents.upsert(\n\t\t\ttx,\n\t\t\tinput.document,\n\t\t\tinput.ingress.connectionId,\n\t\t);\n\n\t\tconst canonicalize = input.canonicalizeEvents ?? canonicalizeBillingEvents;\n\t\tconst events = canonicalize({\n\t\t\tingress: input.ingress,\n\t\t\tprevious,\n\t\t\tcurrent: input.document,\n\t\t});\n\t\tawait input.events.append(tx, events);\n\t\tawait input.outbox.enqueue(tx, projectOutboxIntents(events));\n\t\tawait input.persistence.markProcessed(tx, {\n\t\t\tingressId: input.ingress.id,\n\t\t\teventIds: events.map((event) => event.id),\n\t\t});\n\t\treturn { duplicate: false, events, document: input.document };\n\t});\n}\n","import { dispatchCanonicalEventAfterCommit } from \"../../../../runtime/events/hooks.ts\";\nimport { deriveIngressProviderEventId } from \"../../../../runtime/ingress/identity.ts\";\nimport {\n\tclassifyIngressFailure,\n\tINGRESS_PROCESSING_LEASE_MS,\n\ttype IngressFailureStage,\n} from \"../../../../runtime/ingress/failure.ts\";\nimport type { AthenaIngressIR } from \"../../../../runtime/ingress/ir.ts\";\nimport type {\n\tEventIngressDomainHandler,\n\tEventIngressRuntimeContext,\n} from \"../../../../runtime/ingress/runtime.ts\";\nimport {\n\ttype CanonicalBillingDocument,\n\tcanonicalDocumentRevision,\n\tcanonicalDocumentSubjectId,\n} from \"../../../canonical/document.ts\";\nimport type { CanonicalBillingEvent } from \"../../../canonical/transition.ts\";\nimport {\n\ttype BillingWebhookIngressObservability,\n\trecordBillingWebhookIngressQuietly,\n\treportBillingWebhookIngressDiagnostic,\n} from \"../../../ingestion/observability/health.ts\";\nimport {\n\ttype BillingWebhookIngressStage,\n\tbillingWebhookRegistrationKind,\n} from \"../../../ingestion/observability/stages.ts\";\nimport type { BillingProviderWebhookPort } from \"../providers/webhook-port.ts\";\nimport {\n\ttype ApplyCanonicalBillingIngressResult,\n\tapplyCanonicalBillingIngress,\n} from \"./apply.ts\";\nimport type { BillingIngressDomainContext } from \"./repository.ts\";\n\nexport function billingDeterministicEventId(input: {\n\tprovider: string;\n\tconnectionId?: string;\n\tdocument: CanonicalBillingDocument;\n}): string {\n\tconst revision = canonicalDocumentRevision(input.document);\n\treturn deriveIngressProviderEventId({\n\t\tprovider: input.provider,\n\t\tconnectionId: input.connectionId,\n\t\tresourceKind: input.document.kind,\n\t\tresourceId: canonicalDocumentSubjectId(input.document),\n\t\tauthoritativeStateOrVersion:\n\t\t\trevision.sequence ??\n\t\t\t`${input.document.status}:${revision.providerUpdatedAt?.toISOString() ?? \"\"}`,\n\t});\n}\n\nfunction observeContext(ingress: AthenaIngressIR) {\n\treturn {\n\t\tkind: billingWebhookRegistrationKind(ingress.operation),\n\t\t...(ingress.connectionId ? { connectionId: ingress.connectionId } : {}),\n\t\t...(ingress.correlationId ? { correlationId: ingress.correlationId } : {}),\n\t\tingressId: ingress.id,\n\t\t...(ingress.traceId ? { traceId: ingress.traceId } : {}),\n\t};\n}\n\nfunction observabilityWrite(\n\tctx: ReturnType<typeof observeContext>,\n\tconnectionId: string,\n\tstage: BillingWebhookIngressStage,\n) {\n\treturn {\n\t\tconnectionId,\n\t\tkind: ctx.kind,\n\t\tstage,\n\t\tingressId: ctx.ingressId,\n\t\t...(ctx.correlationId ? { correlationId: ctx.correlationId } : {}),\n\t\t...(ctx.traceId ? { traceId: ctx.traceId } : {}),\n\t};\n}\n\nexport function createBillingEventIngressHandler<TEnvelope, TResource>(input: {\n\tobservability?: BillingWebhookIngressObservability;\n\tonAuthoritativeDocument?: (input: {\n\t\tdocument: CanonicalBillingDocument;\n\t\tingress: AthenaIngressIR;\n\t}) => Promise<void> | void;\n\tport: BillingProviderWebhookPort<TEnvelope, TResource>;\n\tprovider?: string;\n}): EventIngressDomainHandler<\n\tBillingIngressDomainContext,\n\tCanonicalBillingDocument,\n\tCanonicalBillingEvent\n> {\n\tconst provider = input.provider ?? \"mollie\";\n\treturn {\n\t\tasync ingest(ingress, runtime) {\n\t\t\tconst ctx = observeContext(ingress);\n\t\t\tconst connectionId = ctx.connectionId;\n\t\t\tconst note = async (stage: BillingWebhookIngressStage) => {\n\t\t\t\tawait recordBillingWebhookIngressQuietly(input.observability, (store) =>\n\t\t\t\t\tstore.recordStage({\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\toccurredAt: new Date(),\n\t\t\t\t\t\tstage,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\t\t\tconst acceptDuplicate = async () => {\n\t\t\t\tif (connectionId) {\n\t\t\t\t\tawait recordBillingWebhookIngressQuietly(\n\t\t\t\t\t\tinput.observability,\n\t\t\t\t\t\t(store) =>\n\t\t\t\t\t\t\tstore.recordAccepted(\n\t\t\t\t\t\t\t\tobservabilityWrite(ctx, connectionId, \"duplicate\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tawait note(\"duplicate\");\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tduplicate: true,\n\t\t\t\t\tevents: [],\n\t\t\t\t\treconciliation: \"skipped\" as const,\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst early = await runtime.database.transaction(async (tx) => {\n\t\t\t\tawait runtime.persistence.insertReceived(tx, ingress, {\n\t\t\t\t\tprovider,\n\t\t\t\t});\n\t\t\t\tconst existing = await runtime.persistence.lock(tx, ingress.id);\n\t\t\t\tif (existing?.status === \"processed\") {\n\t\t\t\t\treturn { duplicate: true as const };\n\t\t\t\t}\n\t\t\t\tawait runtime.persistence.markStatus(tx, {\n\t\t\t\t\tingressId: ingress.id,\n\t\t\t\t\tleaseExpiresAt: new Date(Date.now() + INGRESS_PROCESSING_LEASE_MS),\n\t\t\t\t\tstatus: \"resolving\",\n\t\t\t\t});\n\t\t\t\treturn { duplicate: false as const };\n\t\t\t});\n\t\t\tif (early.duplicate) {\n\t\t\t\treturn acceptDuplicate();\n\t\t\t}\n\t\t\tlet stage: IngressFailureStage = \"parse\";\n\t\t\tlet result: ApplyCanonicalBillingIngressResult;\n\t\t\tlet canonicalDocument: CanonicalBillingDocument | undefined;\n\t\t\ttry {\n\t\t\t\tconst envelope = await input.port.parseIngress(ingress);\n\t\t\t\tawait note(\"parsed\");\n\t\t\t\tif (input.port.verification !== \"authoritative_refetch\") {\n\t\t\t\t\tstage = \"verify\";\n\t\t\t\t\tawait note(\"verified\");\n\t\t\t\t}\n\t\t\t\tstage = \"refetch\";\n\t\t\t\tawait note(\"authoritative_refetch_started\");\n\t\t\t\tconst resource = await input.port.resolveAuthoritativeState(\n\t\t\t\t\tenvelope,\n\t\t\t\t\tingress,\n\t\t\t\t);\n\t\t\t\tawait note(\"authoritative_refetch_completed\");\n\t\t\t\tstage = \"project\";\n\t\t\t\tcanonicalDocument = input.port.projectDocument(resource);\n\t\t\t\tconst document = canonicalDocument;\n\t\t\t\tawait note(\"canonicalized\");\n\t\t\t\tconst providerEventId = billingDeterministicEventId({\n\t\t\t\t\tprovider,\n\t\t\t\t\tconnectionId: ingress.connectionId,\n\t\t\t\t\tdocument,\n\t\t\t\t});\n\t\t\t\tconst claimed = await runtime.database.transaction((tx) =>\n\t\t\t\t\truntime.persistence.insertReceived(tx, ingress, {\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tproviderEventId,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tif (claimed.duplicate) {\n\t\t\t\t\treturn acceptDuplicate();\n\t\t\t\t}\n\t\t\t\tstage = \"persist\";\n\t\t\t\tresult = await applyCanonicalBillingIngress({\n\t\t\t\t\tdatabase: runtime.database,\n\t\t\t\t\tingress,\n\t\t\t\t\tdocument,\n\t\t\t\t\tpersistence: runtime.persistence,\n\t\t\t\t\tdocuments: runtime.domain.documents,\n\t\t\t\t\tevents: runtime.domain.events,\n\t\t\t\t\toutbox: runtime.domain.outbox,\n\t\t\t\t\tcanonicalizeEvents: (context) =>\n\t\t\t\t\t\tinput.port.canonicalizeEvents(context),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tawait persistIngressFailure(runtime, ingress.id, error, stage);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst acceptStage: BillingWebhookIngressStage = result.duplicate\n\t\t\t\t? \"duplicate\"\n\t\t\t\t: \"persisted\";\n\t\t\tif (connectionId) {\n\t\t\t\tawait recordBillingWebhookIngressQuietly(input.observability, (store) =>\n\t\t\t\t\tstore.recordAccepted(\n\t\t\t\t\t\tobservabilityWrite(ctx, connectionId, acceptStage),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tawait note(acceptStage);\n\t\t\t}\n\t\t\tlet reconciliation: \"completed\" | \"failed\" | \"skipped\" = \"skipped\";\n\t\t\tif (!result.duplicate) {\n\t\t\t\ttry {\n\t\t\t\t\tawait dispatchCanonicalEventAfterCommit(result.events);\n\t\t\t\t\tif (input.onAuthoritativeDocument) {\n\t\t\t\t\t\tif (canonicalDocument == null) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\"Billing webhook accepted without a canonical document.\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait note(\"reconciliation_started\");\n\t\t\t\t\t\tawait input.onAuthoritativeDocument({\n\t\t\t\t\t\t\tdocument: canonicalDocument,\n\t\t\t\t\t\t\tingress,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (connectionId) {\n\t\t\t\t\t\t\tawait recordBillingWebhookIngressQuietly(\n\t\t\t\t\t\t\t\tinput.observability,\n\t\t\t\t\t\t\t\t(store) =>\n\t\t\t\t\t\t\t\t\tstore.recordReconciliation({\n\t\t\t\t\t\t\t\t\t\t...observabilityWrite(\n\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\tconnectionId,\n\t\t\t\t\t\t\t\t\t\t\t\"reconciliation_completed\",\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\toutcome: \"completed\",\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait note(\"reconciliation_completed\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treconciliation = \"completed\";\n\t\t\t\t\t} else if (connectionId) {\n\t\t\t\t\t\tawait recordBillingWebhookIngressQuietly(\n\t\t\t\t\t\t\tinput.observability,\n\t\t\t\t\t\t\t(store) =>\n\t\t\t\t\t\t\t\tstore.recordReconciliation({\n\t\t\t\t\t\t\t\t\t...observabilityWrite(ctx, connectionId, acceptStage),\n\t\t\t\t\t\t\t\t\toutcome: \"skipped\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\treportBillingWebhookIngressDiagnostic(\n\t\t\t\t\t\t\"[athena.billing] webhook reconciliation failed after accept\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t);\n\t\t\t\t\tif (connectionId) {\n\t\t\t\t\t\tawait recordBillingWebhookIngressQuietly(\n\t\t\t\t\t\t\tinput.observability,\n\t\t\t\t\t\t\t(store) =>\n\t\t\t\t\t\t\t\tstore.recordReconciliation({\n\t\t\t\t\t\t\t\t\t...observabilityWrite(\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\tconnectionId,\n\t\t\t\t\t\t\t\t\t\t\"reconciliation_failed\",\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\toutcome: \"failed\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait note(\"reconciliation_failed\");\n\t\t\t\t\t}\n\t\t\t\t\treconciliation = \"failed\";\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\treconciliation,\n\t\t\t};\n\t\t},\n\t};\n}\n\nasync function persistIngressFailure(\n\truntime: EventIngressRuntimeContext,\n\tingressId: string,\n\terror: unknown,\n\tstage: IngressFailureStage,\n): Promise<void> {\n\ttry {\n\t\tawait runtime.database.transaction(async (tx) => {\n\t\t\tconst locked = await runtime.persistence.lock(tx, ingressId);\n\t\t\tif (locked?.status === \"processed\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst classified = classifyIngressFailure({\n\t\t\t\tattemptCount: (locked?.attemptCount ?? 0) + 1,\n\t\t\t\terror,\n\t\t\t\tfirstFailedAt: locked?.firstFailedAt ?? undefined,\n\t\t\t\tstage,\n\t\t\t});\n\t\t\tawait runtime.persistence.markStatus(tx, {\n\t\t\t\terror: classified.error,\n\t\t\t\tfailureStage: classified.stage,\n\t\t\t\tfirstFailedAt: new Date(classified.error.firstFailedAt),\n\t\t\t\tingressId,\n\t\t\t\tlastFailedAt: new Date(classified.error.lastFailedAt),\n\t\t\t\tstatus: classified.status,\n\t\t\t\t...(classified.nextAttemptAt\n\t\t\t\t\t? { nextAttemptAt: classified.nextAttemptAt }\n\t\t\t\t\t: {}),\n\t\t\t});\n\t\t});\n\t} catch {\n\t\t/* persistence of the failure row must not hide the original error */\n\t}\n}\n","import type { EventIngressDatabase } from \"../ingress/persistence.ts\";\nimport type { CanonicalEventIR } from \"./ir.ts\";\nimport type { CanonicalOutboxIntent } from \"./outbox.ts\";\n\nexport interface CanonicalEventRepository {\n\tappend(\n\t\ttx: EventIngressDatabase,\n\t\tevents: readonly CanonicalEventIR[],\n\t): Promise<void>;\n}\n\nexport interface CanonicalOutboxRepository {\n\tenqueue(\n\t\ttx: EventIngressDatabase,\n\t\tintents: readonly CanonicalOutboxIntent[],\n\t): Promise<void>;\n}\n\nfunction jsonValue(value: unknown): string {\n\treturn JSON.stringify(value ?? {});\n}\n\nexport function createSqlCanonicalEventRepositories(): {\n\tevents: CanonicalEventRepository;\n\toutbox: CanonicalOutboxRepository;\n} {\n\treturn {\n\t\tevents: {\n\t\t\tasync append(tx, events) {\n\t\t\t\tfor (const event of events) {\n\t\t\t\t\tawait tx.query(\n\t\t\t\t\t\t`\nINSERT INTO athena.event_ledger (\n  id, name, domain, provider, subject_type, subject_id, ingress_id, payload, occurred_at, observed_at\n) VALUES ($1,$2,$3,$4,$5,$6,$7,$8::jsonb,$9,$10)\nON CONFLICT (id) DO NOTHING\n`,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tevent.id,\n\t\t\t\t\t\t\tevent.name,\n\t\t\t\t\t\t\tevent.source.domain,\n\t\t\t\t\t\t\tevent.source.provider ?? null,\n\t\t\t\t\t\t\tevent.subject.type,\n\t\t\t\t\t\t\tevent.subject.id,\n\t\t\t\t\t\t\tevent.ingressId ?? null,\n\t\t\t\t\t\t\tjsonValue(event.payload),\n\t\t\t\t\t\t\tevent.occurredAt.toISOString(),\n\t\t\t\t\t\t\tevent.observedAt.toISOString(),\n\t\t\t\t\t\t],\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\toutbox: {\n\t\t\tasync enqueue(tx, intents) {\n\t\t\t\tfor (const intent of intents) {\n\t\t\t\t\tawait tx.query(\n\t\t\t\t\t\t`\nINSERT INTO athena.event_outbox (id, event_id, name, payload, created_at)\nVALUES ($1,$2,$3,$4::jsonb, now())\nON CONFLICT (id) DO NOTHING\n`,\n\t\t\t\t\t\t[intent.id, intent.eventId, intent.name, jsonValue(intent.payload)],\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n}\n","import { createSqlCanonicalEventRepositories } from \"../../../../runtime/events/sql.ts\";\nimport {\n\tATHENA_EVENT_INGRESS_FAILED,\n\tAthenaEventIngressError,\n} from \"../../../../runtime/ingress/errors.ts\";\nimport type { CanonicalBillingDocument } from \"../../../canonical/document.ts\";\nimport type {\n\tBillingEventRepository,\n\tBillingIngressDocumentRepository,\n\tBillingOutboxRepository,\n} from \"./repository.ts\";\n\nfunction jsonValue(value: unknown): string {\n\treturn JSON.stringify(value ?? {});\n}\n\nfunction requirePersistConnectionId(connectionId: string | undefined): string {\n\tif (connectionId == null || connectionId.length === 0) {\n\t\tthrow new AthenaEventIngressError({\n\t\t\tcode: ATHENA_EVENT_INGRESS_FAILED,\n\t\t\tdomain: \"billing\",\n\t\t\tmessage:\n\t\t\t\t\"Billing document persist requires a billing connection id (uniqueness is connection-scoped).\",\n\t\t\tretryable: false,\n\t\t});\n\t}\n\treturn connectionId;\n}\n\nexport function createSqlBillingDocumentRepository(): BillingIngressDocumentRepository {\n\treturn {\n\t\tasync readCurrentForUpdate(tx, document, connectionId) {\n\t\t\tconst boundConnectionId = requirePersistConnectionId(connectionId);\n\t\t\tif (document.kind === \"payment\") {\n\t\t\t\tconst result = await tx.query<CanonicalBillingDocument>(\n\t\t\t\t\t`\nSELECT 'payment' AS kind, provider, provider_payment_id AS \"providerPaymentId\",\n  status, amount_currency, amount_value, created_at AS \"createdAt\", paid_at AS \"paidAt\"\nFROM billing.billing_payments\nWHERE connection_id = $1::uuid AND provider_payment_id = $2\nFOR UPDATE\n`,\n\t\t\t\t\t[boundConnectionId, document.providerPaymentId],\n\t\t\t\t);\n\t\t\t\treturn result.rows[0] ?? null;\n\t\t\t}\n\t\t\tif (document.kind === \"subscription\") {\n\t\t\t\tconst result = await tx.query<CanonicalBillingDocument>(\n\t\t\t\t\t`\nSELECT 'subscription' AS kind, provider,\n  provider_subscription_id AS \"providerSubscriptionId\", status\nFROM billing.billing_subscriptions\nWHERE connection_id = $1::uuid AND provider_subscription_id = $2\nFOR UPDATE\n`,\n\t\t\t\t\t[boundConnectionId, document.providerSubscriptionId],\n\t\t\t\t);\n\t\t\t\treturn result.rows[0] ?? null;\n\t\t\t}\n\t\t\tconst result = await tx.query<CanonicalBillingDocument>(\n\t\t\t\t`\nSELECT 'invoice' AS kind, provider, provider_invoice_id AS \"providerInvoiceId\", status\nFROM billing.billing_invoices\nWHERE connection_id = $1::uuid AND provider_invoice_id = $2\nFOR UPDATE\n`,\n\t\t\t\t[boundConnectionId, document.providerInvoiceId],\n\t\t\t);\n\t\t\treturn result.rows[0] ?? null;\n\t\t},\n\t\tasync upsert(tx, document, connectionId) {\n\t\t\tconst boundConnectionId = requirePersistConnectionId(connectionId);\n\t\t\tif (document.kind === \"payment\") {\n\t\t\t\tawait tx.query(\n\t\t\t\t\t`\nINSERT INTO billing.billing_payments (\n  connection_id, provider, provider_payment_id, provider_customer_id, provider_profile_id,\n  provider_subscription_id, provider_payment_link_id, status,\n  amount_currency, amount_value, description, metadata, raw, paid_at, created_at\n) VALUES ($1::uuid,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12::jsonb,$13::jsonb,$14,$15)\nON CONFLICT (connection_id, provider_payment_id) WHERE connection_id IS NOT NULL DO UPDATE SET\n  status = EXCLUDED.status,\n  amount_currency = EXCLUDED.amount_currency,\n  amount_value = EXCLUDED.amount_value,\n  metadata = EXCLUDED.metadata,\n  raw = EXCLUDED.raw,\n  paid_at = EXCLUDED.paid_at\n`,\n\t\t\t\t\t[\n\t\t\t\t\t\tboundConnectionId,\n\t\t\t\t\t\tdocument.provider,\n\t\t\t\t\t\tdocument.providerPaymentId,\n\t\t\t\t\t\tdocument.providerCustomerId ?? null,\n\t\t\t\t\t\tdocument.providerProfileId ?? null,\n\t\t\t\t\t\tdocument.providerSubscriptionId ?? null,\n\t\t\t\t\t\tdocument.providerPaymentLinkId ?? null,\n\t\t\t\t\t\tdocument.status,\n\t\t\t\t\t\tdocument.amount.currency,\n\t\t\t\t\t\tdocument.amount.value,\n\t\t\t\t\t\tdocument.description ?? null,\n\t\t\t\t\t\tjsonValue(document.metadata),\n\t\t\t\t\t\tjsonValue(document.raw),\n\t\t\t\t\t\tdocument.paidAt ?? null,\n\t\t\t\t\t\tdocument.createdAt ?? null,\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (document.kind === \"subscription\") {\n\t\t\t\tawait tx.query(\n\t\t\t\t\t`\nINSERT INTO billing.billing_subscriptions (\n  connection_id, provider, provider_subscription_id, provider_customer_id, provider_profile_id,\n  status, description, metadata, raw, created_at, canceled_at\n) VALUES ($1::uuid,$2,$3,$4,$5,$6,$7,$8::jsonb,$9::jsonb,$10,$11)\nON CONFLICT (connection_id, provider_subscription_id) WHERE connection_id IS NOT NULL DO UPDATE SET\n  status = EXCLUDED.status,\n  metadata = EXCLUDED.metadata,\n  raw = EXCLUDED.raw,\n  canceled_at = EXCLUDED.canceled_at\n`,\n\t\t\t\t\t[\n\t\t\t\t\t\tboundConnectionId,\n\t\t\t\t\t\tdocument.provider,\n\t\t\t\t\t\tdocument.providerSubscriptionId,\n\t\t\t\t\t\tdocument.providerCustomerId,\n\t\t\t\t\t\tdocument.providerProfileId ?? null,\n\t\t\t\t\t\tdocument.status,\n\t\t\t\t\t\tdocument.description ?? null,\n\t\t\t\t\t\tjsonValue(document.metadata),\n\t\t\t\t\t\tjsonValue(document.raw),\n\t\t\t\t\t\tdocument.createdAt ?? null,\n\t\t\t\t\t\tdocument.canceledAt ?? null,\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait tx.query(\n\t\t\t\t`\nINSERT INTO billing.billing_invoices (\n  connection_id, provider, provider_invoice_id, provider_profile_id, provider_customer_id,\n  status, description, metadata, raw, paid_at, created_at\n) VALUES ($1::uuid,$2,$3,$4,$5,$6,$7,$8::jsonb,$9::jsonb,$10,$11)\nON CONFLICT (connection_id, provider_invoice_id) WHERE connection_id IS NOT NULL DO UPDATE SET\n  status = EXCLUDED.status,\n  metadata = EXCLUDED.metadata,\n  raw = EXCLUDED.raw,\n  paid_at = EXCLUDED.paid_at\n`,\n\t\t\t\t[\n\t\t\t\t\tboundConnectionId,\n\t\t\t\t\tdocument.provider,\n\t\t\t\t\tdocument.providerInvoiceId,\n\t\t\t\t\tdocument.providerProfileId ?? null,\n\t\t\t\t\tdocument.providerCustomerId ?? null,\n\t\t\t\t\tdocument.status,\n\t\t\t\t\tdocument.description ?? null,\n\t\t\t\t\tjsonValue(document.metadata),\n\t\t\t\t\tjsonValue(document.raw),\n\t\t\t\t\tdocument.paidAt ?? null,\n\t\t\t\t\tdocument.createdAt ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport function createSqlBillingRepositories(): {\n\tdocuments: BillingIngressDocumentRepository;\n\tevents: BillingEventRepository;\n\toutbox: BillingOutboxRepository;\n} {\n\tconst ledger = createSqlCanonicalEventRepositories();\n\treturn {\n\t\tdocuments: createSqlBillingDocumentRepository(),\n\t\tevents: ledger.events,\n\t\toutbox: ledger.outbox,\n\t};\n}\n","import {\n\tATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../safety/money.ts\";\nimport type {\n\tAthenaBillingCatalogConfig,\n\tBillingPrice,\n\tBillingProduct,\n} from \"../../../types.ts\";\n\nexport interface NormalizedAthenaBillingCatalog {\n\tprices: readonly BillingPrice[] | null;\n\tproducts: readonly BillingProduct[] | null;\n}\n\nfunction nonEmptyId(value: unknown, label: string): string {\n\tif (typeof value !== \"string\" || value.trim().length === 0) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage: `billing.catalog ${label} requires a non-empty id.`,\n\t\t});\n\t}\n\treturn value.trim();\n}\n\nexport function normalizeAthenaBillingCatalog(\n\tcatalog?: AthenaBillingCatalogConfig,\n): NormalizedAthenaBillingCatalog | undefined {\n\tif (catalog == null) {\n\t\treturn undefined;\n\t}\n\tconst productsConfigured = Array.isArray(catalog.products);\n\tconst pricesConfigured = Array.isArray(catalog.prices);\n\tif (!productsConfigured && !pricesConfigured) {\n\t\treturn undefined;\n\t}\n\n\tconst products: BillingProduct[] = [];\n\tconst productIds = new Set<string>();\n\tif (productsConfigured) {\n\t\tfor (const entry of catalog.products ?? []) {\n\t\t\tconst id = nonEmptyId(entry.id, \"product\");\n\t\t\tif (productIds.has(id)) {\n\t\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\t\t\tmessage: `billing.catalog product id ${id} is duplicated.`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (typeof entry.name !== \"string\" || entry.name.trim().length === 0) {\n\t\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\t\t\tmessage: `billing.catalog product ${id} requires a name.`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tproductIds.add(id);\n\t\t\tproducts.push({\n\t\t\t\tdescription: entry.description,\n\t\t\t\tid,\n\t\t\t\tmetadata: entry.metadata ?? {},\n\t\t\t\tname: entry.name.trim(),\n\t\t\t\traw: entry,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst prices: BillingPrice[] = [];\n\tconst priceIds = new Set<string>();\n\tif (pricesConfigured) {\n\t\tfor (const entry of catalog.prices ?? []) {\n\t\t\tconst id = nonEmptyId(entry.id, \"price\");\n\t\t\tif (priceIds.has(id)) {\n\t\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\t\t\tmessage: `billing.catalog price id ${id} is duplicated.`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst productId = nonEmptyId(entry.productId, \"price.productId\");\n\t\t\tif (productsConfigured && !productIds.has(productId)) {\n\t\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\t\t\tmessage: `billing.catalog price ${id} references unknown product ${productId}.`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tpriceIds.add(id);\n\t\t\tprices.push({\n\t\t\t\tamount: normalizeBillingMoney(entry.amount),\n\t\t\t\tid,\n\t\t\t\tinterval: entry.interval,\n\t\t\t\tmetadata: entry.metadata ?? {},\n\t\t\t\tproductId,\n\t\t\t\traw: entry,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\tprices: pricesConfigured ? prices : null,\n\t\tproducts: productsConfigured ? products : null,\n\t};\n}\n","import type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { AthenaBillingCatalogConfig } from \"../../../types.ts\";\nimport { normalizeAthenaBillingCatalog } from \"../catalog/normalize.ts\";\nimport { firstConfiguredMollieProvider } from \"./connection-binding.ts\";\nimport { normalizeBillingProviderConfig } from \"./config.ts\";\nimport { createMollieBillingProviderRuntime } from \"./mollie/runtime.ts\";\nimport { BillingProviderRegistry } from \"./registry.ts\";\nimport { createStripeBillingProviderRuntime } from \"./stripe/runtime.ts\";\n\nexport function createBillingProviderRegistry(\n\tconfigured?: BillingProviderConfigMap,\n\tcatalog?: AthenaBillingCatalogConfig,\n): BillingProviderRegistry {\n\tconst fallbackMollie = firstConfiguredMollieProvider(configured);\n\tconst normalized = normalizeBillingProviderConfig(\n\t\tconfigured?.mollie == null && fallbackMollie != null\n\t\t\t? { ...configured, mollie: fallbackMollie }\n\t\t\t: configured,\n\t);\n\tconst athenaCatalog = normalizeAthenaBillingCatalog(catalog);\n\tconst runtimes = [];\n\tif (normalized.mollie != null) {\n\t\truntimes.push(\n\t\t\tcreateMollieBillingProviderRuntime(normalized.mollie, athenaCatalog),\n\t\t);\n\t}\n\tif (normalized.stripe != null) {\n\t\truntimes.push(createStripeBillingProviderRuntime(normalized.stripe));\n\t}\n\treturn new BillingProviderRegistry(runtimes);\n}\n","import { AthenaBillingCapabilityError } from \"../../../errors.ts\";\nimport type { BillingPage } from \"../../types.ts\";\n\nexport type AthenaCatalogListResource = \"products\" | \"prices\";\n\ninterface AthenaCatalogCursor {\n\toffset: number;\n\tprovider: \"athena\";\n\tresource: AthenaCatalogListResource;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction encodeBase64Url(value: string): string {\n\tconst bytes = new TextEncoder().encode(value);\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary)\n\t\t.replaceAll(\"+\", \"-\")\n\t\t.replaceAll(\"/\", \"_\")\n\t\t.replace(/=+$/u, \"\");\n}\n\nfunction decodeBase64Url(value: string): string {\n\tif (!/^[A-Za-z0-9_-]+$/u.test(value)) {\n\t\tthrow new TypeError(\"Invalid base64url value.\");\n\t}\n\tconst base64 = value.replaceAll(\"-\", \"+\").replaceAll(\"/\", \"_\");\n\tconst padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n\tconst binary = atob(padded);\n\tconst bytes = Uint8Array.from(binary, (character) =>\n\t\tcharacter.charCodeAt(0),\n\t);\n\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n}\n\nfunction decodeCatalogCursor(\n\tcursor: string,\n\tresource: AthenaCatalogListResource,\n): number {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(decodeBase64Url(cursor));\n\t} catch {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: `${resource}.list`,\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\tif (\n\t\t!isRecord(parsed) ||\n\t\tparsed.provider !== \"athena\" ||\n\t\tparsed.resource !== resource ||\n\t\ttypeof parsed.offset !== \"number\" ||\n\t\t!Number.isInteger(parsed.offset) ||\n\t\tparsed.offset < 0\n\t) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: `${resource}.list`,\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\treturn parsed.offset;\n}\n\nexport function pageAthenaCatalogItems<T>(\n\titems: readonly T[],\n\tinput: { cursor?: string; limit?: number },\n\tresource: AthenaCatalogListResource,\n): BillingPage<T> {\n\tconst start =\n\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t? decodeCatalogCursor(input.cursor, resource)\n\t\t\t: 0;\n\tconst limit =\n\t\tinput.limit != null && Number.isInteger(input.limit) && input.limit > 0\n\t\t\t? input.limit\n\t\t\t: 50;\n\tconst slice = items.slice(start, start + limit);\n\tconst nextOffset = start + slice.length;\n\tif (nextOffset >= items.length) {\n\t\treturn { items: [...slice], nextCursor: null };\n\t}\n\tconst cursor: AthenaCatalogCursor = {\n\t\toffset: nextOffset,\n\t\tprovider: \"athena\",\n\t\tresource,\n\t};\n\treturn {\n\t\titems: [...slice],\n\t\tnextCursor: encodeBase64Url(JSON.stringify(cursor)),\n\t};\n}\n","import type { BillingPrice } from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type {\n\tBillingPricesPort,\n\tBillingProviderExecutionContext,\n\tBillingProviderListInput,\n} from \"../providers/types.ts\";\nimport { pageAthenaCatalogItems } from \"./page.ts\";\n\nexport class AthenaBillingPricesPort implements BillingPricesPort {\n\treadonly kind = \"prices\" as const;\n\n\tconstructor(private readonly prices: readonly BillingPrice[]) {}\n\n\tasync list(\n\t\t_context: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput & { productId?: string },\n\t): Promise<BillingPage<BillingPrice>> {\n\t\tconst filtered =\n\t\t\tinput.productId != null && input.productId.length > 0\n\t\t\t\t? this.prices.filter((price) => price.productId === input.productId)\n\t\t\t\t: this.prices;\n\t\treturn pageAthenaCatalogItems(filtered, input, \"prices\");\n\t}\n}\n\nexport function createAthenaBillingPricesPort(\n\tprices: readonly BillingPrice[],\n): BillingPricesPort {\n\treturn new AthenaBillingPricesPort(prices);\n}\n","import type { BillingProduct } from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type {\n\tBillingProductsPort,\n\tBillingProviderExecutionContext,\n\tBillingProviderListInput,\n} from \"../providers/types.ts\";\nimport { pageAthenaCatalogItems } from \"./page.ts\";\n\nexport class AthenaBillingProductsPort implements BillingProductsPort {\n\treadonly kind = \"products\" as const;\n\n\tconstructor(private readonly products: readonly BillingProduct[]) {}\n\n\tasync list(\n\t\t_context: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingProduct>> {\n\t\treturn pageAthenaCatalogItems(this.products, input, \"products\");\n\t}\n}\n\nexport function createAthenaBillingProductsPort(\n\tproducts: readonly BillingProduct[],\n): BillingProductsPort {\n\treturn new AthenaBillingProductsPort(products);\n}\n","import type { BillingProviderCapabilities } from \"../types.ts\";\n\n/**\n * Native Mollie SDK surface. Athena catalog `products` / `prices` overlay\n * `getCapabilities` on the Mollie runtime when `billing.catalog` is configured.\n * Do not set these static flags true — that would claim Mollie-native catalog.\n */\nexport const MOLLIE_BILLING_PROVIDER_CAPABILITIES: BillingProviderCapabilities =\n{\n\toperations: {\n\t\t\"customers.create\": true,\n\t\t\"customers.delete\": true,\n\t\t\"customers.get\": true,\n\t\t\"customers.list\": true,\n\t\t\"customers.update\": true,\n\t\t\"invoices.get\": true,\n\t\t\"invoices.list\": true,\n\t\t\"paymentLinks.create\": true,\n\t\t\"paymentLinks.delete\": true,\n\t\t\"paymentLinks.get\": true,\n\t\t\"paymentLinks.list\": true,\n\t\t\"paymentLinks.update\": true,\n\t\t\"payments.cancel\": true,\n\t\t\"payments.create\": true,\n\t\t\"payments.get\": true,\n\t\t\"payments.list\": true,\n\t\t\"refunds.cancel\": true,\n\t\t\"refunds.create\": true,\n\t\t\"refunds.get\": true,\n\t\t\"refunds.list\": true,\n\t\t\"subscriptions.cancel\": true,\n\t\t\"subscriptions.create\": true,\n\t\t\"subscriptions.get\": true,\n\t\t\"subscriptions.list\": true,\n\t\t\"subscriptions.update\": true,\n\t\t\"webhooks.create\": true,\n\t\t\"webhooks.delete\": true,\n\t\t\"webhooks.get\": false,\n\t\t\"webhooks.list\": true,\n\t\t\"webhooks.test\": false,\n\t\t\"webhooks.update\": true,\n\t\t\"products.list\": false,\n\t\t\"prices.list\": false,\n\t\t\"checkout.create\": false,\n\t},\n\tports: {\n\t\tcustomers: true,\n\t\tinvoices: true,\n\t\tpaymentLinks: true,\n\t\tpayments: true,\n\t\trefunds: true,\n\t\tsubscriptions: true,\n\t\twebhooks: true,\n\t\tproducts: false,\n\t\tprices: false,\n\t\tcheckout: false,\n\t},\n};\n","import type {\n\tMollieBillingProviderConfig,\n\tNormalizedMollieBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport type { NormalizedAthenaBillingCatalog } from \"../../catalog/normalize.ts\";\nimport { createAthenaBillingPricesPort } from \"../../catalog/prices.ts\";\nimport { createAthenaBillingProductsPort } from \"../../catalog/products.ts\";\nimport type {\n\tBillingProviderBinding,\n\tBillingProviderCapabilities,\n\tMollieBillingProviderRuntime,\n} from \"../types.ts\";\nimport { MOLLIE_BILLING_PROVIDER_CAPABILITIES } from \"./capabilities.ts\";\nimport { normalizeMollieRuntimeConfig } from \"./config.ts\";\nimport { createMollieBillingCustomersPort } from \"./customers.ts\";\nimport { createMollieBillingInvoicesPort } from \"./invoices.ts\";\nimport { createMollieBillingPaymentLinksPort } from \"./payment-links.ts\";\nimport { createMollieBillingPaymentsPort } from \"./payments.ts\";\nimport { createMollieBillingRefundsPort } from \"./refunds.ts\";\nimport { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { createMollieBillingSubscriptionsPort } from \"./subscriptions.ts\";\nimport { resolveMollieWebhookManagementCapability } from \"./webhook-capability.ts\";\nimport { createMollieBillingWebhooksPort } from \"./webhooks.ts\";\n\nexport class MollieBillingProviderRuntimeImpl\n\timplements MollieBillingProviderRuntime {\n\treadonly provider = \"mollie\" as const;\n\treadonly payments;\n\treadonly customers;\n\treadonly refunds;\n\treadonly paymentLinks;\n\treadonly subscriptions;\n\treadonly invoices;\n\treadonly webhooks;\n\treadonly products;\n\treadonly prices;\n\treadonly checkout = undefined;\n\n\tconstructor(\n\t\treadonly config: NormalizedMollieBillingProviderConfig,\n\t\tcatalog?: NormalizedAthenaBillingCatalog,\n\t) {\n\t\tconst pool = new MollieSdkClientPool(config);\n\t\tthis.payments = createMollieBillingPaymentsPort(config, pool);\n\t\tthis.customers = createMollieBillingCustomersPort(config, pool);\n\t\tthis.refunds = createMollieBillingRefundsPort(config, pool);\n\t\tthis.paymentLinks = createMollieBillingPaymentLinksPort(config, pool);\n\t\tthis.subscriptions = createMollieBillingSubscriptionsPort(config, pool);\n\t\tthis.invoices = createMollieBillingInvoicesPort(config, pool);\n\t\tthis.webhooks = createMollieBillingWebhooksPort(pool);\n\t\tthis.products =\n\t\t\tcatalog?.products != null\n\t\t\t\t? createAthenaBillingProductsPort(catalog.products)\n\t\t\t\t: undefined;\n\t\tthis.prices =\n\t\t\tcatalog?.prices != null\n\t\t\t\t? createAthenaBillingPricesPort(catalog.prices)\n\t\t\t\t: undefined;\n\t}\n\n\tasync getCapabilities(\n\t\tbinding: BillingProviderBinding,\n\t): Promise<BillingProviderCapabilities> {\n\t\tconst hasProducts = this.products != null;\n\t\tconst hasPrices = this.prices != null;\n\t\tconst webhookCapability = resolveMollieWebhookManagementCapability(binding);\n\t\tconst managed = webhookCapability.nextGen.available;\n\t\treturn {\n\t\t\toperations: {\n\t\t\t\t...MOLLIE_BILLING_PROVIDER_CAPABILITIES.operations,\n\t\t\t\t\"products.list\": hasProducts,\n\t\t\t\t\"prices.list\": hasPrices,\n\t\t\t\t\"webhooks.list\": managed,\n\t\t\t\t\"webhooks.create\": managed,\n\t\t\t\t\"webhooks.update\": managed,\n\t\t\t\t\"webhooks.delete\": managed,\n\t\t\t\t\"webhooks.get\": false,\n\t\t\t\t\"webhooks.test\": false,\n\t\t\t},\n\t\t\tports: {\n\t\t\t\t...MOLLIE_BILLING_PROVIDER_CAPABILITIES.ports,\n\t\t\t\tproducts: hasProducts,\n\t\t\t\tprices: hasPrices,\n\t\t\t\twebhooks: true,\n\t\t\t},\n\t\t};\n\t}\n}\n\nexport function createMollieBillingProviderRuntime(\n\tconfig: MollieBillingProviderConfig | NormalizedMollieBillingProviderConfig,\n\tcatalog?: NormalizedAthenaBillingCatalog,\n): MollieBillingProviderRuntime {\n\treturn new MollieBillingProviderRuntimeImpl(\n\t\tnormalizeMollieRuntimeConfig(config),\n\t\tcatalog,\n\t);\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingCustomer } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingCustomersPort,\n\tBillingProviderCreateCustomerInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetResourceInput,\n\tBillingProviderListInput,\n\tBillingProviderUpdateCustomerInput,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n\tcustomerCreateBody,\n\tmapCreateCustomerToMollieSdk,\n\tmapGetCustomerToMollieSdk,\n\tmapUpdateCustomerToMollieSdk,\n} from \"./dialect/customers.ts\";\nimport { rejectUnenforcedMollieProfileTarget } from \"./profile-target.ts\";\nimport { projectMollieCustomer } from \"./projection/customer.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\n\nexport class MollieBillingCustomersPort implements BillingCustomersPort {\n\treadonly kind = \"customers\" as const;\n\n\tconstructor(\n\t\tconfig: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {\n\t\tvoid config;\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreateCustomerInput,\n\t): Promise<BillingCustomer> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"customers.create\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"create\",\n\t\t\toperation: \"customers.create\",\n\t\t\trequest: mapCreateCustomerToMollieSdk({\n\t\t\t\tbody: customerCreateBody(input),\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n\t\t\t}),\n\t\t\tresource: \"customers\",\n\t\t});\n\t\treturn projectMollieCustomer(raw);\n\t}\n\n\tasync delete(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<void> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"customers.delete\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tawait callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"delete\",\n\t\t\toperation: \"customers.delete\",\n\t\t\trequest: mapGetCustomerToMollieSdk(input),\n\t\t\tresource: \"customers\",\n\t\t});\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<BillingCustomer> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"customers.get\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"customers.get\",\n\t\t\trequest: mapGetCustomerToMollieSdk(input),\n\t\t\tresource: \"customers\",\n\t\t});\n\t\treturn projectMollieCustomer(raw);\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingCustomer>> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"customers.list\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"customers\")\n\t\t\t\t: undefined;\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"customers.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: { from, limit: input.limit },\n\t\t\tresource: \"customers\",\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"customers\");\n\t\treturn {\n\t\t\titems: page.items.map(projectMollieCustomer),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n\n\tasync update(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderUpdateCustomerInput,\n\t): Promise<BillingCustomer> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"customers.update\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"update\",\n\t\t\toperation: \"customers.update\",\n\t\t\trequest: mapUpdateCustomerToMollieSdk(input),\n\t\t\tresource: \"customers\",\n\t\t});\n\t\treturn projectMollieCustomer(raw);\n\t}\n}\n\nexport function createMollieBillingCustomersPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingCustomersPort {\n\treturn new MollieBillingCustomersPort(config, pool);\n}\n","import type {\n\tBillingProviderCreateCustomerInput,\n\tBillingProviderGetResourceInput,\n\tBillingProviderUpdateCustomerInput,\n} from \"../../types.ts\";\n\nexport function mapCreateCustomerToMollieSdk(input: {\n\tbody: Record<string, unknown>;\n\tidempotencyKey?: string;\n}): Record<string, unknown> {\n\treturn {\n\t\tcustomerRequest: input.body,\n\t\tidempotencyKey: input.idempotencyKey,\n\t};\n}\n\nexport function customerCreateBody(\n\tinput: BillingProviderCreateCustomerInput,\n): Record<string, unknown> {\n\tconst body: Record<string, unknown> = {};\n\tif (input.name != null) {\n\t\tbody.name = input.name;\n\t}\n\tif (input.email != null) {\n\t\tbody.email = input.email;\n\t}\n\tif (input.metadata != null) {\n\t\tbody.metadata = input.metadata;\n\t}\n\treturn body;\n}\n\nexport function mapGetCustomerToMollieSdk(\n\tinput: BillingProviderGetResourceInput,\n): Record<string, unknown> {\n\treturn { customerId: input.id };\n}\n\nexport function mapUpdateCustomerToMollieSdk(\n\tinput: BillingProviderUpdateCustomerInput,\n): Record<string, unknown> {\n\tconst body: Record<string, unknown> = {};\n\tif (input.name != null) {\n\t\tbody.name = input.name;\n\t}\n\tif (input.email != null) {\n\t\tbody.email = input.email;\n\t}\n\treturn {\n\t\tcustomerId: input.id,\n\t\tcustomerRequest: body,\n\t};\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type { BillingCustomer } from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nexport function projectMollieCustomer(raw: unknown): BillingCustomer {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie customer response is missing a customer id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: billingRetryDisposition({\n\t\t\tidempotencyKeyPresent: false,\n\t\t\tkind: \"serialization\",\n\t\t\toperation: \"customers.get\",\n\t\t\trequestDispatchState: \"dispatched\",\n\t\t}),\n\t\t});\n\t}\n\treturn {\n\t\temail: optionalString(raw.email),\n\t\tmetadata: raw.metadata,\n\t\tname: optionalString(raw.name),\n\t\tprovider: \"mollie\",\n\t\tproviderCustomerId: raw.id,\n\t\traw,\n\t};\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingInvoice } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingInvoicesPort,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetInvoiceInput,\n\tBillingProviderListInput,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport { mapGetInvoiceToMollieSdk } from \"./dialect/invoices.ts\";\nimport { rejectUnenforcedMollieProfileTarget } from \"./profile-target.ts\";\nimport { projectMollieInvoice } from \"./projection/invoice.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\nimport type { MollieSdkResourceClient } from \"./sdk/types.ts\";\n\nfunction invoiceResourceName(): keyof MollieSdkResourceClient {\n\treturn \"salesInvoices\";\n}\n\nexport class MollieBillingInvoicesPort implements BillingInvoicesPort {\n\treadonly kind = \"invoices\" as const;\n\n\tconstructor(\n\t\tconfig: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {\n\t\tvoid config;\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetInvoiceInput,\n\t): Promise<BillingInvoice> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"invoices.get\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst client = clientFromPool(this.pool, context);\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient,\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"invoices.get\",\n\t\t\trequest: mapGetInvoiceToMollieSdk(input),\n\t\t\tresource: invoiceResourceName(),\n\t\t});\n\t\treturn projectMollieInvoice(raw);\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingInvoice>> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"invoices.list\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"invoices\")\n\t\t\t\t: undefined;\n\t\tconst client = clientFromPool(this.pool, context);\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient,\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"invoices.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: { from, limit: input.limit },\n\t\t\tresource: invoiceResourceName(),\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"invoices\");\n\t\treturn {\n\t\t\titems: page.items.map(projectMollieInvoice),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n}\n\nexport function createMollieBillingInvoicesPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingInvoicesPort {\n\treturn new MollieBillingInvoicesPort(config, pool);\n}\n","import type { BillingProviderGetInvoiceInput } from \"../../types.ts\";\n\nexport function mapGetInvoiceToMollieSdk(\n\tinput: BillingProviderGetInvoiceInput,\n): Record<string, unknown> {\n\treturn { invoiceId: input.invoiceId };\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingPaymentLink } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingPaymentLinksPort,\n\tBillingProviderCreatePaymentLinkInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetResourceInput,\n\tBillingProviderListInput,\n\tBillingProviderUpdatePaymentLinkInput,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n\tmapCreatePaymentLinkToMollieSdk,\n\tmapGetPaymentLinkToMollieSdk,\n\tmapUpdatePaymentLinkToMollieSdk,\n} from \"./dialect/payment-links.ts\";\nimport { trustedClassicWebhookUrl } from \"./dialect/webhook-url.ts\";\nimport { rejectUnenforcedMollieProfileTarget } from \"./profile-target.ts\";\nimport { projectMolliePaymentLink } from \"./projection/payment-link.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\n\nexport class MollieBillingPaymentLinksPort implements BillingPaymentLinksPort {\n\treadonly kind = \"payment-links\" as const;\n\n\tconstructor(\n\t\tconfig: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {\n\t\tvoid config;\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreatePaymentLinkInput,\n\t): Promise<BillingPaymentLink> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"paymentLinks.create\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"create\",\n\t\t\toperation: \"paymentLinks.create\",\n\t\t\trequest: mapCreatePaymentLinkToMollieSdk({\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n\t\t\t\tinput,\n\t\t\t\twebhookUrl: trustedClassicWebhookUrl(context),\n\t\t\t}),\n\t\t\tresource: \"paymentLinks\",\n\t\t});\n\t\treturn projectMolliePaymentLink(raw);\n\t}\n\n\tasync delete(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<void> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"paymentLinks.delete\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tawait callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"delete\",\n\t\t\toperation: \"paymentLinks.delete\",\n\t\t\trequest: mapGetPaymentLinkToMollieSdk(input),\n\t\t\tresource: \"paymentLinks\",\n\t\t});\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<BillingPaymentLink> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"paymentLinks.get\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"paymentLinks.get\",\n\t\t\trequest: mapGetPaymentLinkToMollieSdk(input),\n\t\t\tresource: \"paymentLinks\",\n\t\t});\n\t\treturn projectMolliePaymentLink(raw);\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingPaymentLink>> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"paymentLinks.list\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"payment-links\")\n\t\t\t\t: undefined;\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"paymentLinks.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: { from, limit: input.limit },\n\t\t\tresource: \"paymentLinks\",\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"payment-links\");\n\t\treturn {\n\t\t\titems: page.items.map(projectMolliePaymentLink),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n\n\tasync update(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderUpdatePaymentLinkInput,\n\t): Promise<BillingPaymentLink> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"paymentLinks.update\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"update\",\n\t\t\toperation: \"paymentLinks.update\",\n\t\t\trequest: mapUpdatePaymentLinkToMollieSdk(input),\n\t\t\tresource: \"paymentLinks\",\n\t\t});\n\t\treturn projectMolliePaymentLink(raw);\n\t}\n}\n\nexport function createMollieBillingPaymentLinksPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingPaymentLinksPort {\n\treturn new MollieBillingPaymentLinksPort(config, pool);\n}\n","import type {\n\tBillingProviderCreatePaymentLinkInput,\n\tBillingProviderGetResourceInput,\n\tBillingProviderUpdatePaymentLinkInput,\n} from \"../../types.ts\";\n\nexport function mapCreatePaymentLinkToMollieSdk(input: {\n\tinput: BillingProviderCreatePaymentLinkInput;\n\tidempotencyKey: string;\n\twebhookUrl?: string;\n}): Record<string, unknown> {\n\tconst paymentLinkRequest: Record<string, unknown> = {\n\t\tamount: input.input.amount,\n\t\tdescription: input.input.description,\n\t};\n\tif (input.input.redirectUrl != null) {\n\t\tpaymentLinkRequest.redirectUrl = input.input.redirectUrl;\n\t}\n\tif (input.webhookUrl) {\n\t\tpaymentLinkRequest.webhookUrl = input.webhookUrl;\n\t}\n\treturn {\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tpaymentLinkRequest,\n\t};\n}\n\nexport function mapGetPaymentLinkToMollieSdk(\n\tinput: BillingProviderGetResourceInput,\n): Record<string, unknown> {\n\treturn { paymentLinkId: input.id };\n}\n\nexport function mapUpdatePaymentLinkToMollieSdk(\n\tinput: BillingProviderUpdatePaymentLinkInput,\n): Record<string, unknown> {\n\tconst paymentLinkRequest: Record<string, unknown> = {};\n\tif (input.description != null) {\n\t\tpaymentLinkRequest.description = input.description;\n\t}\n\treturn {\n\t\tpaymentLinkId: input.id,\n\t\tpaymentLinkRequest,\n\t};\n}\n","import type { BillingProviderExecutionContext } from \"../../types.ts\";\n\nexport function trustedClassicWebhookUrl(\n\tcontext: BillingProviderExecutionContext,\n): string | undefined {\n\tconst url = context.ingress?.classicWebhookUrl?.trim();\n\treturn url && url.length > 0 ? url : undefined;\n}\n\nexport function applyTrustedClassicWebhookUrl(\n\tbody: Record<string, unknown>,\n\tcontext: BillingProviderExecutionContext,\n): Record<string, unknown> {\n\tconst url = trustedClassicWebhookUrl(context);\n\tif (url) {\n\t\tbody.webhookUrl = url;\n\t}\n\treturn body;\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n\tBillingMoney,\n\tBillingPaymentLink,\n\tBillingPaymentLinkStatus,\n} from \"../../../../../types.ts\";\n\nimport { mollieLinkHref } from \"./links.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction serializationRetry() {\n\treturn billingRetryDisposition({\n\t\tidempotencyKeyPresent: false,\n\t\tkind: \"serialization\",\n\t\toperation: \"paymentLinks.get\",\n\t\trequestDispatchState: \"dispatched\",\n\t});\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn normalizeBillingMoney(value);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"ATHENA_BILLING_MONEY_INVALID\";\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage,\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n}\n\nexport function projectMolliePaymentLinkStatus(input: {\n\tarchived?: unknown;\n\tpaidAt?: unknown;\n}): BillingPaymentLinkStatus {\n\tif (input.archived === true) {\n\t\treturn \"canceled\";\n\t}\n\tif (typeof input.paidAt === \"string\" && input.paidAt.length > 0) {\n\t\treturn \"paid\";\n\t}\n\treturn \"open\";\n}\n\nexport function projectMolliePaymentLink(raw: unknown): BillingPaymentLink {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie payment link response is missing a payment link id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\treturn {\n\t\tamount: projectMoney(raw.amount) ?? null,\n\t\tcheckoutUrl: mollieLinkHref(raw, \"paymentLink\"),\n\t\tdescription: optionalString(raw.description),\n\t\tmetadata: raw.metadata,\n\t\tprovider: \"mollie\",\n\t\tproviderPaymentLinkId: raw.id,\n\t\traw,\n\t\tstatus: projectMolliePaymentLinkStatus({\n\t\t\tarchived: raw.archived,\n\t\t\tpaidAt: raw.paidAt,\n\t\t}),\n\t};\n}\n","import { AthenaBillingCapabilityError } from \"../../../../errors.ts\";\nimport type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingPayment } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingProviderCreatePaymentInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetResourceInput,\n\tBillingProviderListInput,\n\tBillingProviderPaymentPort,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n\tmapCreatePaymentToMollieSdk,\n\tmapGetPaymentToMollieSdk,\n\tmapListPaymentsToMollieSdk,\n\tpaymentCreateBody,\n} from \"./dialect/payments.ts\";\nimport {\n\tassertMolliePaymentMatchesSelectedProfile,\n\tresolveMollieRequestProfileId,\n} from \"./profile-target.ts\";\nimport { projectMolliePayment } from \"./projection.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\n\nexport class MollieBillingPaymentsPort implements BillingProviderPaymentPort {\n\tconstructor(\n\t\tprivate readonly config: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {}\n\n\tprivate profileId(\n\t\tcontext: BillingProviderExecutionContext,\n\t): string | undefined {\n\t\treturn resolveMollieRequestProfileId({\n\t\t\tconfiguredProfileId:\n\t\t\t\tthis.config.profileId ?? this.config.defaultProfileId,\n\t\t\tcredentialKind: this.config.credentialKind,\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t}\n\n\tasync cancel(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<BillingPayment> {\n\t\tconst client = clientFromPool(this.pool, context);\n\t\tconst profileId = this.profileId(context);\n\t\tif (profileId != null) {\n\t\t\tconst existing = await callMollieSdk({\n\t\t\t\tclient,\n\t\t\t\tmethod: \"get\",\n\t\t\t\toperation: \"payments.cancel\",\n\t\t\t\trequest: mapGetPaymentToMollieSdk(input),\n\t\t\t\tresource: \"payments\",\n\t\t\t});\n\t\t\tassertMolliePaymentMatchesSelectedProfile({\n\t\t\t\toperation: \"payments.cancel\",\n\t\t\t\tpayment: projectMolliePayment(existing),\n\t\t\t\tselectedProfileId: profileId,\n\t\t\t});\n\t\t}\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient,\n\t\t\tmethod: \"cancel\",\n\t\t\toperation: \"payments.cancel\",\n\t\t\trequest: mapGetPaymentToMollieSdk(input),\n\t\t\tresource: \"payments\",\n\t\t});\n\t\treturn projectMolliePayment(raw);\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreatePaymentInput,\n\t): Promise<BillingPayment> {\n\t\tconst profileId = this.profileId(context);\n\t\tif (this.config.credentialKind !== \"api_key\" && profileId == null) {\n\t\t\tthrow new AthenaBillingCapabilityError({\n\t\t\t\toperation: \"payments.create\",\n\t\t\t\treason: \"missing_provider_scope\",\n\t\t\t});\n\t\t}\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"create\",\n\t\t\toperation: \"payments.create\",\n\t\t\trequest: mapCreatePaymentToMollieSdk({\n\t\t\t\tbody: paymentCreateBody(input, profileId, context),\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n\t\t\t}),\n\t\t\tresource: \"payments\",\n\t\t});\n\t\treturn projectMolliePayment(raw);\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<BillingPayment> {\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"payments.get\",\n\t\t\trequest: mapGetPaymentToMollieSdk(input),\n\t\t\tresource: \"payments\",\n\t\t});\n\t\tconst payment = projectMolliePayment(raw);\n\t\tassertMolliePaymentMatchesSelectedProfile({\n\t\t\toperation: \"payments.get\",\n\t\t\tpayment,\n\t\t\tselectedProfileId: this.profileId(context),\n\t\t});\n\t\treturn payment;\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingPayment>> {\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"payments\")\n\t\t\t\t: undefined;\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"payments.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: mapListPaymentsToMollieSdk({\n\t\t\t\tfrom,\n\t\t\t\tlimit: input.limit,\n\t\t\t\tprofileId: this.profileId(context),\n\t\t\t}),\n\t\t\tresource: \"payments\",\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"payments\");\n\t\treturn {\n\t\t\titems: page.items.map(projectMolliePayment),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n}\n\nexport function createMollieBillingPaymentsPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingProviderPaymentPort {\n\treturn new MollieBillingPaymentsPort(config, pool);\n}\n","import type {\n\tBillingProviderCreatePaymentInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetResourceInput,\n\tBillingProviderListInput,\n} from \"../../types.ts\";\nimport { applyTrustedClassicWebhookUrl } from \"./webhook-url.ts\";\n\nexport function mapCreatePaymentToMollieSdk(input: {\n\tbody: Record<string, unknown>;\n\tidempotencyKey?: string;\n}): Record<string, unknown> {\n\treturn {\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tpaymentRequest: input.body,\n\t};\n}\n\nexport function mapGetPaymentToMollieSdk(\n\tinput: BillingProviderGetResourceInput,\n): Record<string, unknown> {\n\treturn { paymentId: input.id };\n}\n\nexport function mapListPaymentsToMollieSdk(input: {\n\tfrom?: string;\n\tlimit?: number;\n\tprofileId?: string;\n}): Record<string, unknown> {\n\treturn {\n\t\tfrom: input.from,\n\t\tlimit: input.limit,\n\t\tprofileId: input.profileId,\n\t};\n}\n\nexport function paymentCreateBody(\n\tinput: BillingProviderCreatePaymentInput,\n\tprofileId?: string,\n\tcontext?: BillingProviderExecutionContext,\n): Record<string, unknown> {\n\tconst body: Record<string, unknown> = {\n\t\tamount: input.amount,\n\t\tdescription: input.description ?? \"\",\n\t\tmetadata: input.metadata ?? {},\n\t};\n\tif (input.redirectUrl != null) {\n\t\tbody.redirectUrl = input.redirectUrl;\n\t}\n\tif (input.customerId != null) {\n\t\tbody.customerId = input.customerId;\n\t}\n\tif (input.sequenceType != null) {\n\t\tbody.sequenceType = input.sequenceType;\n\t}\n\tif (profileId != null) {\n\t\tbody.profileId = profileId;\n\t}\n\tif (context) {\n\t\tapplyTrustedClassicWebhookUrl(body, context);\n\t}\n\treturn body;\n}\n\nexport function mapListInputFrom(\n\tinput: BillingProviderListInput,\n): string | undefined {\n\treturn input.cursor != null && input.cursor.length > 0\n\t\t? input.cursor\n\t\t: undefined;\n}\n","import { isAthenaBillingProviderRequestError } from \"../../../../errors.ts\";\nimport type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingRefund } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingProviderCreateRefundInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetRefundInput,\n\tBillingProviderListInput,\n\tBillingRefundsPort,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport { mapGetPaymentToMollieSdk } from \"./dialect/payments.ts\";\nimport {\n\tmapCreateRefundToMollieSdk,\n\tmapCancelRefundToMollieSdk,\n\tmapGetRefundToMollieSdk,\n} from \"./dialect/refunds.ts\";\nimport {\n\tassertMolliePaymentMatchesSelectedProfile,\n\tresolveMollieRequestProfileId,\n} from \"./profile-target.ts\";\nimport { projectMolliePayment } from \"./projection.ts\";\nimport { projectMollieRefund } from \"./projection/refund.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\n\nexport class MollieBillingRefundsPort implements BillingRefundsPort {\n\treadonly kind = \"refunds\" as const;\n\n\tconstructor(\n\t\tprivate readonly config: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {}\n\n\tprivate selectedProfileId(\n\t\tcontext: BillingProviderExecutionContext,\n\t): string | undefined {\n\t\treturn resolveMollieRequestProfileId({\n\t\t\tconfiguredProfileId:\n\t\t\t\tthis.config.profileId ?? this.config.defaultProfileId,\n\t\t\tcredentialKind: this.config.credentialKind,\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t}\n\n\tprivate async assertParentPaymentProfile(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tpaymentId: string,\n\t\toperation: \"refunds.cancel\" | \"refunds.create\" | \"refunds.get\",\n\t): Promise<void> {\n\t\tconst selectedProfileId = this.selectedProfileId(context);\n\t\tif (selectedProfileId == null) {\n\t\t\treturn;\n\t\t}\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation,\n\t\t\trequest: mapGetPaymentToMollieSdk({ id: paymentId }),\n\t\t\tresource: \"payments\",\n\t\t});\n\t\tassertMolliePaymentMatchesSelectedProfile({\n\t\t\toperation,\n\t\t\tpayment: projectMolliePayment(raw),\n\t\t\tselectedProfileId,\n\t\t});\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreateRefundInput,\n\t): Promise<BillingRefund> {\n\t\tawait this.assertParentPaymentProfile(\n\t\t\tcontext,\n\t\t\tinput.paymentId,\n\t\t\t\"refunds.create\",\n\t\t);\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"create\",\n\t\t\toperation: \"refunds.create\",\n\t\t\trequest: mapCreateRefundToMollieSdk({\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n\t\t\t\tinput,\n\t\t\t}),\n\t\t\tresource: \"refunds\",\n\t\t});\n\t\treturn projectMollieRefund(raw);\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetRefundInput,\n\t): Promise<BillingRefund> {\n\t\tawait this.assertParentPaymentProfile(\n\t\t\tcontext,\n\t\t\tinput.paymentId,\n\t\t\t\"refunds.get\",\n\t\t);\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"refunds.get\",\n\t\t\trequest: mapGetRefundToMollieSdk(input),\n\t\t\tresource: \"refunds\",\n\t\t});\n\t\treturn projectMollieRefund(raw);\n\t}\n\n\tasync cancel(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetRefundInput,\n\t): Promise<BillingRefund> {\n\t\tawait this.assertParentPaymentProfile(\n\t\t\tcontext,\n\t\t\tinput.paymentId,\n\t\t\t\"refunds.cancel\",\n\t\t);\n\t\tawait callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"cancel\",\n\t\t\toperation: \"refunds.cancel\",\n\t\t\trequest: mapCancelRefundToMollieSdk({\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? \"\",\n\t\t\t\tinput,\n\t\t\t}),\n\t\t\tresource: \"refunds\",\n\t\t});\n\t\ttry {\n\t\t\treturn await this.get(context, input);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\tisAthenaBillingProviderRequestError(error) &&\n\t\t\t\terror.kind === \"not_found\"\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tamount: null,\n\t\t\t\t\tmetadata: undefined,\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tproviderPaymentId: input.paymentId,\n\t\t\t\t\tproviderRefundId: input.refundId,\n\t\t\t\t\traw: {\n\t\t\t\t\t\tcanceled: true,\n\t\t\t\t\t\tpaymentId: input.paymentId,\n\t\t\t\t\t\trefundId: input.refundId,\n\t\t\t\t\t},\n\t\t\t\t\tstatus: \"canceled\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingRefund>> {\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"refunds\")\n\t\t\t\t: undefined;\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"refunds.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: {\n\t\t\t\tfrom,\n\t\t\t\tlimit: input.limit,\n\t\t\t\tprofileId: this.selectedProfileId(context),\n\t\t\t},\n\t\t\tresource: \"refunds\",\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"refunds\");\n\t\treturn {\n\t\t\titems: page.items.map(projectMollieRefund),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n}\n\nexport function createMollieBillingRefundsPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingRefundsPort {\n\treturn new MollieBillingRefundsPort(config, pool);\n}\n","import type {\n\tBillingProviderCreateRefundInput,\n\tBillingProviderGetRefundInput,\n} from \"../../types.ts\";\n\nexport function mapCreateRefundToMollieSdk(input: {\n\tinput: BillingProviderCreateRefundInput;\n\tidempotencyKey: string;\n}): Record<string, unknown> {\n\tconst refundRequest: Record<string, unknown> = {\n\t\tamount: input.input.amount,\n\t};\n\tif (input.input.description != null) {\n\t\trefundRequest.description = input.input.description;\n\t}\n\treturn {\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tpaymentId: input.input.paymentId,\n\t\trefundRequest,\n\t};\n}\n\nexport function mapGetRefundToMollieSdk(\n\tinput: BillingProviderGetRefundInput,\n): Record<string, unknown> {\n\treturn {\n\t\tpaymentId: input.paymentId,\n\t\trefundId: input.refundId,\n\t};\n}\n\nexport function mapCancelRefundToMollieSdk(input: {\n\tinput: BillingProviderGetRefundInput;\n\tidempotencyKey: string;\n}): Record<string, unknown> {\n\treturn {\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tpaymentId: input.input.paymentId,\n\t\trefundId: input.input.refundId,\n\t};\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n\tBillingMoney,\n\tBillingRefund,\n\tBillingRefundStatus,\n} from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction serializationRetry() {\n\treturn billingRetryDisposition({\n\t\tidempotencyKeyPresent: false,\n\t\tkind: \"serialization\",\n\t\toperation: \"refunds.get\",\n\t\trequestDispatchState: \"dispatched\",\n\t});\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn normalizeBillingMoney(value);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"ATHENA_BILLING_MONEY_INVALID\";\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage,\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n}\n\nexport function projectMollieRefundStatus(status: string): BillingRefundStatus {\n\tif (\n\t\tstatus === \"queued\" ||\n\t\tstatus === \"pending\" ||\n\t\tstatus === \"processing\" ||\n\t\tstatus === \"refunded\" ||\n\t\tstatus === \"failed\" ||\n\t\tstatus === \"canceled\"\n\t) {\n\t\treturn status;\n\t}\n\tthrow new AthenaBillingProviderRequestError({\n\t\tkind: \"serialization\",\n\t\tmessage: `Mollie refund status \"${status}\" is not supported.`,\n\t\tprovider: \"mollie\",\n\t\tretry: serializationRetry(),\n\t});\n}\n\nexport function projectMollieRefund(raw: unknown): BillingRefund {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie refund response is missing a refund id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tif (typeof raw.status !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie refund response is missing status.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst status = projectMollieRefundStatus(raw.status);\n\treturn {\n\t\tamount: projectMoney(raw.amount) ?? null,\n\t\tdescription: optionalString(raw.description),\n\t\tmetadata: raw.metadata,\n\t\tprovider: \"mollie\",\n\t\tproviderPaymentId: optionalString(raw.paymentId),\n\t\tproviderRefundId: raw.id,\n\t\traw,\n\t\tstatus,\n\t};\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingSubscription } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingProviderCreateSubscriptionInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetSubscriptionInput,\n\tBillingProviderListSubscriptionsInput,\n\tBillingProviderUpdateSubscriptionInput,\n\tBillingSubscriptionsPort,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n\tmapCreateSubscriptionToMollieSdk,\n\tmapGetSubscriptionToMollieSdk,\n\tmapUpdateSubscriptionToMollieSdk,\n} from \"./dialect/subscriptions.ts\";\nimport { trustedClassicWebhookUrl } from \"./dialect/webhook-url.ts\";\nimport {\n\trejectUnenforcedMollieProfileTarget,\n\tresolveMollieRequestProfileId,\n} from \"./profile-target.ts\";\nimport { projectMollieSubscription } from \"./projection/subscription.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\n\nexport class MollieBillingSubscriptionsPort implements BillingSubscriptionsPort {\n\treadonly kind = \"subscriptions\" as const;\n\n\tconstructor(\n\t\tprivate readonly config: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {}\n\n\tprivate profileId(\n\t\tcontext: BillingProviderExecutionContext,\n\t): string | undefined {\n\t\treturn resolveMollieRequestProfileId({\n\t\t\tconfiguredProfileId:\n\t\t\t\tthis.config.profileId ?? this.config.defaultProfileId,\n\t\t\tcredentialKind: this.config.credentialKind,\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreateSubscriptionInput,\n\t): Promise<BillingSubscription> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"subscriptions.create\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"create\",\n\t\t\toperation: \"subscriptions.create\",\n\t\t\trequest: mapCreateSubscriptionToMollieSdk({\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n\t\t\t\tinput,\n\t\t\t\twebhookUrl: trustedClassicWebhookUrl(context),\n\t\t\t}),\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t\treturn projectMollieSubscription(raw, input.customerId);\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetSubscriptionInput,\n\t): Promise<BillingSubscription> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"subscriptions.get\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"subscriptions.get\",\n\t\t\trequest: mapGetSubscriptionToMollieSdk(input),\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t\treturn projectMollieSubscription(raw, input.customerId);\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListSubscriptionsInput,\n\t): Promise<BillingPage<BillingSubscription>> {\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"subscriptions\")\n\t\t\t\t: undefined;\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"subscriptions.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: {\n\t\t\t\tcustomerId: input.customerId,\n\t\t\t\tfrom,\n\t\t\t\tlimit: input.limit,\n\t\t\t\tprofileId: this.profileId(context),\n\t\t\t},\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"subscriptions\");\n\t\treturn {\n\t\t\titems: page.items.map((item) =>\n\t\t\t\tprojectMollieSubscription(item, input.customerId),\n\t\t\t),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n\n\tasync update(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderUpdateSubscriptionInput,\n\t): Promise<BillingSubscription> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"subscriptions.update\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"update\",\n\t\t\toperation: \"subscriptions.update\",\n\t\t\trequest: mapUpdateSubscriptionToMollieSdk(input),\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t\treturn projectMollieSubscription(raw, input.customerId);\n\t}\n\n\tasync cancel(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetSubscriptionInput,\n\t): Promise<BillingSubscription> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"subscriptions.cancel\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"cancel\",\n\t\t\toperation: \"subscriptions.cancel\",\n\t\t\trequest: mapGetSubscriptionToMollieSdk(input),\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t\treturn projectMollieSubscription(raw, input.customerId);\n\t}\n}\n\nexport function createMollieBillingSubscriptionsPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingSubscriptionsPort {\n\treturn new MollieBillingSubscriptionsPort(config, pool);\n}\n","import type {\n\tBillingProviderCreateSubscriptionInput,\n\tBillingProviderGetSubscriptionInput,\n\tBillingProviderUpdateSubscriptionInput,\n} from \"../../types.ts\";\n\nexport function mapCreateSubscriptionToMollieSdk(input: {\n\tinput: BillingProviderCreateSubscriptionInput;\n\tidempotencyKey: string;\n\twebhookUrl?: string;\n}): Record<string, unknown> {\n\tconst subscriptionRequest: Record<string, unknown> = {\n\t\tamount: input.input.amount,\n\t\tdescription: input.input.description,\n\t\tinterval: input.input.interval,\n\t};\n\tif (input.input.metadata != null) {\n\t\tsubscriptionRequest.metadata = input.input.metadata;\n\t}\n\tif (input.webhookUrl) {\n\t\tsubscriptionRequest.webhookUrl = input.webhookUrl;\n\t}\n\treturn {\n\t\tcustomerId: input.input.customerId,\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tsubscriptionRequest,\n\t};\n}\n\nexport function mapGetSubscriptionToMollieSdk(\n\tinput: BillingProviderGetSubscriptionInput,\n): Record<string, unknown> {\n\treturn {\n\t\tcustomerId: input.customerId,\n\t\tsubscriptionId: input.subscriptionId,\n\t};\n}\n\nexport function mapUpdateSubscriptionToMollieSdk(\n\tinput: BillingProviderUpdateSubscriptionInput,\n): Record<string, unknown> {\n\tconst subscriptionRequest: Record<string, unknown> = {};\n\tif (input.description != null) {\n\t\tsubscriptionRequest.description = input.description;\n\t}\n\treturn {\n\t\tcustomerId: input.customerId,\n\t\tsubscriptionId: input.subscriptionId,\n\t\tsubscriptionRequest,\n\t};\n}\n","import { billingWebhookUrlIsLoopback } from \"../../../../../ingestion/urls.ts\";\nimport type {\n\tBillingProviderCreateWebhookInput,\n\tBillingProviderUpdateWebhookInput,\n} from \"../../types.ts\";\nimport { createMollieProviderRequestError } from \"../errors.ts\";\n\n/** Same bound as {@link MOLLIE_WEBHOOK_OWNERSHIP_NAME_MAX}. */\nconst MOLLIE_WEBHOOK_NAME_MAX = 30;\n\n/**\n * mollie-api-typescript `webhooks.create` outbound `eventTypes` is\n * `string[] | WebhookEventTypes` (one enum value). Mollie `POST /v2/webhooks`\n * treats a JSON array as unset and returns 422 \"No event types were set\".\n * The wire value is a comma-separated string (same as Mollie's curl sample).\n * Do not send that string through Speakeasy `webhooks.create` — Zod drops it.\n */\nexport function encodeMollieWebhookEventTypes(\n\teventTypes: readonly string[],\n): string {\n\tconst encoded = eventTypes\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0)\n\t\t.join(\",\");\n\tif (encoded.length === 0) {\n\t\tthrow new Error(\"Mollie webhook create requires at least one event type.\");\n\t}\n\treturn encoded;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** Mollie returns `webhookSecret` only on create (and sometimes update). */\nexport function readMollieWebhookSigningSecret(\n\traw: unknown,\n): string | undefined {\n\tif (!isRecord(raw)) {\n\t\treturn undefined;\n\t}\n\tconst secret = raw.webhookSecret ?? raw.webhook_secret;\n\tif (typeof secret !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = secret.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function decodeMollieWebhookEventTypes(value: unknown): string[] {\n\tif (typeof value === \"string\") {\n\t\treturn value\n\t\t\t.split(\",\")\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.filter((entry) => entry.length > 0);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.filter((entry): entry is string => typeof entry === \"string\");\n\t}\n\treturn [];\n}\n\nfunction rejectLoopbackMollieWebhookUrl(\n\turl: string | undefined,\n\toperation: \"webhooks.create\" | \"webhooks.update\",\n): void {\n\tif (url == null || url.trim().length === 0) {\n\t\treturn;\n\t}\n\tif (!billingWebhookUrlIsLoopback(url)) {\n\t\treturn;\n\t}\n\tthrow createMollieProviderRequestError({\n\t\tfallbackMessage:\n\t\t\t\"Mollie cannot deliver webhooks to a loopback URL. Set APP_URL or billing.ingestion.webhooks.publicBaseUrl to a publicly reachable HTTPS origin, then register the webhook again.\",\n\t\tkind: \"invalid_request\",\n\t\toperation,\n\t\trequestDispatchState: \"not_dispatched\",\n\t\tstatus: 422,\n\t});\n}\n\nexport function mapCreateWebhookToMollieSdk(input: {\n\tinput: BillingProviderCreateWebhookInput;\n\ttestMode: boolean;\n}): Record<string, unknown> {\n\tconst name = input.input.name.trim();\n\tif (name.length === 0 || name.length > MOLLIE_WEBHOOK_NAME_MAX) {\n\t\tthrow new Error(\n\t\t\t`Mollie webhook name must be 1–${MOLLIE_WEBHOOK_NAME_MAX} characters.`,\n\t\t);\n\t}\n\trejectLoopbackMollieWebhookUrl(input.input.url, \"webhooks.create\");\n\treturn {\n\t\tidempotencyKey: input.input.idempotencyKey,\n\t\trequestBody: {\n\t\t\teventTypes: encodeMollieWebhookEventTypes(input.input.eventTypes),\n\t\t\tname,\n\t\t\ttestmode: input.testMode,\n\t\t\turl: input.input.url,\n\t\t},\n\t};\n}\n\nexport function mapUpdateWebhookToMollieSdk(input: {\n\tinput: BillingProviderUpdateWebhookInput;\n\ttestMode: boolean;\n}): Record<string, unknown> {\n\tconst requestBody: Record<string, unknown> = {\n\t\ttestmode: input.testMode,\n\t};\n\tif (input.input.eventTypes) {\n\t\trequestBody.eventTypes = encodeMollieWebhookEventTypes(\n\t\t\tinput.input.eventTypes,\n\t\t);\n\t}\n\tif (input.input.name) {\n\t\trequestBody.name = input.input.name;\n\t}\n\tif (input.input.url) {\n\t\trejectLoopbackMollieWebhookUrl(input.input.url, \"webhooks.update\");\n\t\trequestBody.url = input.input.url;\n\t}\n\treturn {\n\t\trequestBody,\n\t\twebhookId: input.input.id,\n\t};\n}\n","import type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingProviderBinding,\n\tBillingProviderCreateWebhookInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderUpdateWebhookInput,\n\tBillingProviderWebhook,\n\tBillingWebhookManagementCapability,\n\tBillingWebhooksPort,\n} from \"../types.ts\";\nimport {\n\tdecodeMollieWebhookEventTypes,\n\tmapCreateWebhookToMollieSdk,\n\tmapUpdateWebhookToMollieSdk,\n\treadMollieWebhookSigningSecret,\n} from \"./dialect/webhooks.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { sendMollieJson } from \"./sdk/json.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\nimport { resolveMollieWebhookManagementCapability } from \"./webhook-capability.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction projectMollieWebhook(\n\traw: unknown,\n\tenvironment: \"test\" | \"live\",\n): BillingProviderWebhook {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new Error(\"Mollie webhook projection requires an id.\");\n\t}\n\tconst eventTypes = decodeMollieWebhookEventTypes(\n\t\traw.eventTypes ?? raw.event_types,\n\t);\n\tconst status =\n\t\traw.status === \"disabled\" || raw.enabled === false ? \"disabled\" : \"active\";\n\tconst signingSecret = readMollieWebhookSigningSecret(raw);\n\treturn {\n\t\tenvironment,\n\t\teventTypes,\n\t\tid: raw.id,\n\t\t...(typeof raw.name === \"string\" ? { name: raw.name } : {}),\n\t\tprovider: \"mollie\",\n\t\tstatus,\n\t\turl: typeof raw.url === \"string\" ? raw.url : \"\",\n\t\t...(signingSecret ? { signingSecret } : {}),\n\t};\n}\n\nexport class MollieBillingWebhooksPort implements BillingWebhooksPort {\n\treadonly kind = \"webhooks\" as const;\n\n\tconstructor(private readonly pool: MollieSdkClientPool) { }\n\n\tasync getCapability(\n\t\tbinding: BillingProviderBinding,\n\t): Promise<BillingWebhookManagementCapability> {\n\t\treturn resolveMollieWebhookManagementCapability(binding);\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t): Promise<BillingPage<BillingProviderWebhook>> {\n\t\tconst capability = resolveMollieWebhookManagementCapability(context.binding);\n\t\tif (!capability.nextGen.available) {\n\t\t\treturn { items: [], nextCursor: null };\n\t\t}\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"webhooks.list\",\n\t\t\trequest: {},\n\t\t\tresource: \"webhooks\",\n\t\t\tunwrap: false,\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"webhooks\");\n\t\tconst environment = context.environment.testMode ? \"test\" : \"live\";\n\t\treturn {\n\t\t\titems: page.items.map((item) => projectMollieWebhook(item, environment)),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreateWebhookInput,\n\t): Promise<BillingProviderWebhook> {\n\t\tconst mapped = mapCreateWebhookToMollieSdk({\n\t\t\tinput,\n\t\t\ttestMode: context.environment.testMode,\n\t\t});\n\t\tconst requestBody = mapped.requestBody;\n\t\tif (!isRecord(requestBody)) {\n\t\t\tthrow new Error(\"Mollie webhook create requires a JSON request body.\");\n\t\t}\n\t\tconst raw = await sendMollieJson({\n\t\t\tapiBaseUrl: this.pool.apiBaseUrl(),\n\t\t\tbody: requestBody,\n\t\t\tcredential: context.credential,\n\t\t\t...(typeof mapped.idempotencyKey === \"string\"\n\t\t\t\t? { idempotencyKey: mapped.idempotencyKey }\n\t\t\t\t: {}),\n\t\t\tmethod: \"POST\",\n\t\t\toperation: \"webhooks.create\",\n\t\t\tpath: \"/v2/webhooks\",\n\t\t\tsignal: context.signal,\n\t\t});\n\t\treturn projectMollieWebhook(\n\t\t\traw,\n\t\t\tcontext.environment.testMode ? \"test\" : \"live\",\n\t\t);\n\t}\n\n\tasync update(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderUpdateWebhookInput,\n\t): Promise<BillingProviderWebhook> {\n\t\tconst mapped = mapUpdateWebhookToMollieSdk({\n\t\t\tinput,\n\t\t\ttestMode: context.environment.testMode,\n\t\t});\n\t\tconst requestBody = mapped.requestBody;\n\t\tconst webhookId = mapped.webhookId;\n\t\tif (!isRecord(requestBody) || typeof webhookId !== \"string\") {\n\t\t\tthrow new Error(\"Mollie webhook update requires an id and JSON body.\");\n\t\t}\n\t\tconst raw = await sendMollieJson({\n\t\t\tapiBaseUrl: this.pool.apiBaseUrl(),\n\t\t\tbody: requestBody,\n\t\t\tcredential: context.credential,\n\t\t\tmethod: \"PATCH\",\n\t\t\toperation: \"webhooks.update\",\n\t\t\tpath: `/v2/webhooks/${encodeURIComponent(webhookId)}`,\n\t\t\tsignal: context.signal,\n\t\t});\n\t\treturn projectMollieWebhook(\n\t\t\traw,\n\t\t\tcontext.environment.testMode ? \"test\" : \"live\",\n\t\t);\n\t}\n\n\tasync delete(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: { id: string },\n\t): Promise<void> {\n\t\tawait callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"delete\",\n\t\t\toperation: \"webhooks.delete\",\n\t\t\trequest: { webhookId: input.id },\n\t\t\tresource: \"webhooks\",\n\t\t});\n\t}\n}\n\nexport function createMollieBillingWebhooksPort(\n\tpool: MollieSdkClientPool,\n): BillingWebhooksPort {\n\treturn new MollieBillingWebhooksPort(pool);\n}\n","import type { BillingResolvedCredential } from \"../../../../credentials.ts\";\nimport { createMollieProviderRequestError } from \"../errors.ts\";\nimport { invokeMollieSdk } from \"./invoke.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport async function sendMollieJson(input: {\n\tapiBaseUrl: string;\n\tbody: Record<string, unknown>;\n\tcredential: BillingResolvedCredential;\n\tidempotencyKey?: string;\n\tmethod: \"PATCH\" | \"POST\";\n\toperation: string;\n\tpath: string;\n\tsignal?: AbortSignal;\n}): Promise<unknown> {\n\tconst url = `${input.apiBaseUrl.replace(/\\/$/, \"\")}${input.path}`;\n\tconst headers: Record<string, string> = {\n\t\tAccept: \"application/hal+json\",\n\t\tAuthorization: `Bearer ${input.credential.revealForProviderRuntime()}`,\n\t\t\"Content-Type\": \"application/json\",\n\t};\n\tif (input.idempotencyKey != null && input.idempotencyKey.trim() !== \"\") {\n\t\theaders[\"idempotency-key\"] = input.idempotencyKey;\n\t}\n\treturn invokeMollieSdk({\n\t\tidempotencyKeyPresent:\n\t\t\tinput.idempotencyKey != null && input.idempotencyKey.trim() !== \"\",\n\t\tinvoke: async () => {\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tbody: JSON.stringify(input.body),\n\t\t\t\theaders,\n\t\t\t\tmethod: input.method,\n\t\t\t\tsignal: input.signal,\n\t\t\t});\n\t\t\tconst text = await response.text();\n\t\t\tlet parsed: unknown;\n\t\t\ttry {\n\t\t\t\tparsed = text.length === 0 ? {} : JSON.parse(text);\n\t\t\t} catch {\n\t\t\t\tparsed = { detail: text };\n\t\t\t}\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow createMollieProviderRequestError({\n\t\t\t\t\tbody: parsed,\n\t\t\t\t\tfallbackMessage: `Mollie ${input.operation} failed.`,\n\t\t\t\t\tidempotencyKeyPresent:\n\t\t\t\t\t\tinput.idempotencyKey != null && input.idempotencyKey.trim() !== \"\",\n\t\t\t\t\toperation: input.operation,\n\t\t\t\t\trequestDispatchState: \"dispatched\",\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (!isRecord(parsed) && !Array.isArray(parsed)) {\n\t\t\t\tthrow createMollieProviderRequestError({\n\t\t\t\t\tfallbackMessage: `Mollie ${input.operation} returned a non-object body.`,\n\t\t\t\t\tkind: \"serialization\",\n\t\t\t\t\toperation: input.operation,\n\t\t\t\t\trequestDispatchState: \"dispatched\",\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn parsed;\n\t\t},\n\t\toperation: input.operation,\n\t});\n}\n","import type { BillingProviderCapabilities } from \"../types.ts\";\n\n/**\n * Reserved Stripe slot. Every flag is false — local Stripe has no HTTP client\n * and no webhook signature verification. Enabling any operation here without\n * an adapter is a product defect.\n */\nexport const STRIPE_BILLING_PROVIDER_CAPABILITIES: BillingProviderCapabilities =\n\t{\n\t\toperations: {\n\t\t\t\"customers.create\": false,\n\t\t\t\"customers.delete\": false,\n\t\t\t\"customers.get\": false,\n\t\t\t\"customers.list\": false,\n\t\t\t\"customers.update\": false,\n\t\t\t\"invoices.get\": false,\n\t\t\t\"invoices.list\": false,\n\t\t\t\"paymentLinks.create\": false,\n\t\t\t\"paymentLinks.delete\": false,\n\t\t\t\"paymentLinks.get\": false,\n\t\t\t\"paymentLinks.list\": false,\n\t\t\t\"paymentLinks.update\": false,\n\t\t\t\"payments.cancel\": false,\n\t\t\t\"payments.create\": false,\n\t\t\t\"payments.get\": false,\n\t\t\t\"payments.list\": false,\n\t\t\t\"refunds.cancel\": false,\n\t\t\t\"refunds.create\": false,\n\t\t\t\"refunds.get\": false,\n\t\t\t\"refunds.list\": false,\n\t\t\t\"subscriptions.cancel\": false,\n\t\t\t\"subscriptions.create\": false,\n\t\t\t\"subscriptions.get\": false,\n\t\t\t\"subscriptions.list\": false,\n\t\t\t\"subscriptions.update\": false,\n\t\t\t\"webhooks.create\": false,\n\t\t\t\"webhooks.delete\": false,\n\t\t\t\"webhooks.get\": false,\n\t\t\t\"webhooks.list\": false,\n\t\t\t\"webhooks.test\": false,\n\t\t\t\"webhooks.update\": false,\n\t\t\t\"products.list\": false,\n\t\t\t\"prices.list\": false,\n\t\t\t\"checkout.create\": false,\n\t\t},\n\t\tports: {\n\t\t\tcustomers: false,\n\t\t\tinvoices: false,\n\t\t\tpaymentLinks: false,\n\t\t\tpayments: false,\n\t\t\trefunds: false,\n\t\t\tsubscriptions: false,\n\t\t\twebhooks: false,\n\t\t\tproducts: false,\n\t\t\tprices: false,\n\t\t\tcheckout: false,\n\t\t},\n\t};\n","import type {\n\tNormalizedStripeBillingProviderConfig,\n\tStripeBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport type {\n\tBillingProviderBinding,\n\tBillingProviderCapabilities,\n\tStripeBillingProviderRuntime,\n} from \"../types.ts\";\nimport { STRIPE_BILLING_PROVIDER_CAPABILITIES } from \"./capabilities.ts\";\nimport { normalizeStripeRuntimeConfig } from \"./config.ts\";\n\nexport class StripeBillingProviderRuntimeImpl\n\timplements StripeBillingProviderRuntime\n{\n\treadonly provider = \"stripe\" as const;\n\treadonly payments = undefined;\n\treadonly customers = undefined;\n\treadonly refunds = undefined;\n\treadonly paymentLinks = undefined;\n\treadonly subscriptions = undefined;\n\treadonly invoices = undefined;\n\treadonly webhooks = undefined;\n\n\tconstructor(readonly config: NormalizedStripeBillingProviderConfig) {}\n\n\tasync getCapabilities(\n\t\t_binding: BillingProviderBinding,\n\t): Promise<BillingProviderCapabilities> {\n\t\treturn STRIPE_BILLING_PROVIDER_CAPABILITIES;\n\t}\n}\n\nexport function createStripeBillingProviderRuntime(\n\tconfig: StripeBillingProviderConfig | NormalizedStripeBillingProviderConfig,\n): StripeBillingProviderRuntime {\n\treturn new StripeBillingProviderRuntimeImpl(\n\t\tnormalizeStripeRuntimeConfig(config),\n\t);\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\n// Preflight lives in execute/invoke.ts: prepareBillingCommand (src/billing/safety).\nimport {\n\tAthenaBillingCapabilityError,\n\tisAthenaBillingCredentialError,\n} from \"../../errors.ts\";\nimport type {\n\tBillingCancelPaymentInput,\n\tBillingCancelRefundInput,\n\tBillingCancelSubscriptionInput,\n\tBillingCreateCustomerInput,\n\tBillingCreatePaymentInput,\n\tBillingCreatePaymentLinkInput,\n\tBillingCreateRefundInput,\n\tBillingCreateSubscriptionInput,\n\tBillingDeleteCustomerInput,\n\tBillingDeletePaymentLinkInput,\n\tBillingExecutionTarget,\n\tBillingGetCustomerInput,\n\tBillingGetInvoiceInput,\n\tBillingGetPaymentInput,\n\tBillingGetPaymentLinkInput,\n\tBillingGetRefundInput,\n\tBillingGetSubscriptionInput,\n\tBillingListCustomersInput,\n\tBillingListInvoicesInput,\n\tBillingListPaymentLinksInput,\n\tBillingListPaymentsInput,\n\tBillingListRefundsInput,\n\tBillingListSubscriptionsInput,\n\tBillingPayment,\n\tBillingUpdateCustomerInput,\n\tBillingUpdatePaymentLinkInput,\n\tBillingUpdateSubscriptionInput,\n} from \"../../types.ts\";\nimport {\n\tcreateBillingAdminPort,\n\texecuteAdminBillingOperation,\n\ttype BillingAdminRuntimeOptions,\n} from \"../admin/execute.ts\";\nimport { isAdminBillingOperation } from \"../admin/operations.ts\";\nimport {\n\ttype BillingCredentialAuthority,\n\treadBillingCredentialAuthority,\n} from \"../authority.ts\";\nimport type {\n\tBillingCapabilities,\n\tBillingOperation,\n\tBillingOperationCapability,\n\tBillingPortName,\n} from \"../capabilities.ts\";\nimport {\n\tavailableBillingCredentialEnvironments,\n\ttype BillingCredentialKind,\n\tresolveBillingCredential,\n} from \"../credentials.ts\";\nimport {\n\ttype AthenaBillingRuntimeDispatch,\n\tinvokeBillingRuntimePort,\n} from \"../dispatch.ts\";\nimport { resolveBillingEnvironment } from \"../environment.ts\";\nimport type { BillingInvocationAuthority } from \"../invocation-authority.ts\";\nimport {\n\tisProcessBillingInvocation,\n\tresolveBillingInvocationAuthority,\n\tSESSION_BILLING_INVOCATION,\n} from \"../invocation-authority.ts\";\nimport {\n\tcallerEffectiveBillingCapability,\n\tdenyBillingInvocation,\n\tPROCESS_OWNED_BILLING_PRINCIPAL,\n} from \"../rights.ts\";\nimport {\n\tcreateSelfBillingPort,\n\texecuteSelfBillingOperation,\n\tisSelfBillingOperation,\n} from \"../self/runtime.ts\";\nimport type {\n\tBillingCheckoutPort,\n\tBillingCustomerPort,\n\tBillingInvoicePort,\n\tBillingPage,\n\tBillingPaymentLinkPort,\n\tBillingPaymentPort,\n\tBillingPricePort,\n\tBillingProductPort,\n\tBillingRefundPort,\n\tBillingSubscriptionPort,\n\tBillingWebhookPort,\n} from \"../types.ts\";\nimport {\n\tdecideLocalBillingOperationCapability,\n\tselectedModeAllowedForCapability,\n} from \"./capability-decision.ts\";\nimport {\n\texecuteLocalBillingCustomerCreate,\n\texecuteLocalBillingCustomerDelete,\n\texecuteLocalBillingCustomerGet,\n\texecuteLocalBillingCustomerList,\n\texecuteLocalBillingCustomerUpdate,\n\texecuteLocalBillingInvoiceGet,\n\texecuteLocalBillingInvoiceList,\n\texecuteLocalBillingPaymentCancel,\n\texecuteLocalBillingPaymentCreate,\n\texecuteLocalBillingPaymentGet,\n\texecuteLocalBillingPaymentLinkCreate,\n\texecuteLocalBillingPaymentLinkDelete,\n\texecuteLocalBillingPaymentLinkGet,\n\texecuteLocalBillingPaymentLinkList,\n\texecuteLocalBillingPaymentLinkUpdate,\n\texecuteLocalBillingPaymentList,\n\texecuteLocalBillingPriceList,\n\texecuteLocalBillingProductList,\n\texecuteLocalBillingRefundCancel,\n\texecuteLocalBillingRefundCreate,\n\texecuteLocalBillingRefundGet,\n\texecuteLocalBillingRefundList,\n\texecuteLocalBillingSubscriptionCancel,\n\texecuteLocalBillingSubscriptionCreate,\n\texecuteLocalBillingSubscriptionGet,\n\texecuteLocalBillingSubscriptionList,\n\texecuteLocalBillingSubscriptionUpdate,\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\";\nimport type { MaterializedBillingConnection } from \"./connections/materialize.ts\";\n\nconst BILLING_OPERATIONS: BillingOperation[] = [\n\t\"payments.list\",\n\t\"payments.create\",\n\t\"payments.get\",\n\t\"payments.cancel\",\n\t\"customers.list\",\n\t\"customers.create\",\n\t\"customers.get\",\n\t\"customers.update\",\n\t\"customers.delete\",\n\t\"refunds.list\",\n\t\"refunds.create\",\n\t\"refunds.get\",\n\t\"refunds.cancel\",\n\t\"paymentLinks.list\",\n\t\"paymentLinks.create\",\n\t\"paymentLinks.get\",\n\t\"paymentLinks.update\",\n\t\"paymentLinks.delete\",\n\t\"subscriptions.list\",\n\t\"subscriptions.create\",\n\t\"subscriptions.get\",\n\t\"subscriptions.update\",\n\t\"subscriptions.cancel\",\n\t\"invoices.list\",\n\t\"invoices.get\",\n\t\"webhooks.list\",\n\t\"webhooks.create\",\n\t\"webhooks.get\",\n\t\"webhooks.update\",\n\t\"webhooks.delete\",\n\t\"webhooks.test\",\n\t\"products.list\",\n\t\"prices.list\",\n\t\"checkout.create\",\n\t\"self.invoices.list\",\n\t\"self.invoices.get\",\n\t\"self.payments.list\",\n\t\"self.payments.get\",\n\t\"self.subscription.get\",\n\t\"self.subscription.cancel\",\n\t\"self.subscription.enroll\",\n\t\"self.checkout.create\",\n\t\"self.checkout.resume\",\n\t\"admin.connections.materialize\",\n\t\"admin.reconciliation.run\",\n\t\"admin.reconciliation.retry\",\n\t\"admin.webhooks.reconcile\",\n\t\"admin.webhooks.verify\",\n\t\"admin.webhooks.status\",\n\t\"admin.ingestion.health\",\n\t\"admin.conflicts.resolve\",\n];\n\nfunction sanitizeBillingInitializationMessage(error: unknown): string {\n\tconst raw =\n\t\terror instanceof Error && error.message.trim().length > 0\n\t\t\t? error.message.trim()\n\t\t\t: \"billing initialization failed\";\n\tif (/access_|live_|test_|sk_|secret|password|token/i.test(raw)) {\n\t\treturn \"billing initialization failed\";\n\t}\n\treturn raw.length > 240 ? `${raw.slice(0, 237)}...` : raw;\n}\n\nfunction bootstrapFailedBillingCapabilities(input: {\n\terror: unknown;\n\tsqlPresent: boolean;\n\ttarget: BillingExecutionTarget;\n}): BillingCapabilities {\n\tconst operations = Object.fromEntries(\n\t\tBILLING_OPERATIONS.map((operation) => [\n\t\t\toperation,\n\t\t\t{ available: false, reason: \"bootstrap_failed\" as const },\n\t\t]),\n\t) as BillingCapabilities[\"operations\"];\n\tconst provider =\n\t\ttypeof input.target.provider === \"string\" ? input.target.provider : \"\";\n\treturn {\n\t\tconnected: false,\n\t\tdiagnostics: {\n\t\t\tinitializationFailed: true,\n\t\t\tinitializationMessage: sanitizeBillingInitializationMessage(input.error),\n\t\t\truntimeSource: \"local\",\n\t\t},\n\t\tinitialized: false,\n\t\toperations,\n\t\tports: {\n\t\t\tcheckout: false,\n\t\t\tcustomers: false,\n\t\t\tinvoices: false,\n\t\t\tpaymentLinks: false,\n\t\t\tpayments: false,\n\t\t\tprices: false,\n\t\t\tproducts: false,\n\t\t\trefunds: false,\n\t\t\tself: input.sqlPresent,\n\t\t\tsubscriptions: false,\n\t\t\twebhooks: false,\n\t\t},\n\t\tprovider,\n\t\truntime: \"local\",\n\t\ttarget: {\n\t\t\tkind: input.target.connectionId ? \"connection\" : \"configured\",\n\t\t\tprovider,\n\t\t\t...(typeof input.target.connectionId === \"string\"\n\t\t\t\t? { connectionId: input.target.connectionId }\n\t\t\t\t: {}),\n\t\t},\n\t};\n}\n\n\nfunction omitUndefinedKeys<T>(value: T): T {\n\tif (value === undefined || value === null || typeof value !== \"object\") {\n\t\treturn value;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => omitUndefinedKeys(entry)) as T;\n\t}\n\tconst out: Record<string, unknown> = {};\n\tfor (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n\t\tif (entry === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tout[key] = omitUndefinedKeys(entry);\n\t}\n\treturn out as T;\n}\n\nfunction unavailable(\n\toperation: BillingOperation,\n\treason: BillingOperationCapability[\"reason\"] = \"unsupported_operation\",\n): never {\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation,\n\t\treason: reason ?? \"unsupported_operation\",\n\t});\n}\n\nfunction createUnsupportedPort<T extends object>(\n\tmethods: Record<keyof T, BillingOperation>,\n\tprincipal: AthenaPrincipal,\n\tauthority: BillingInvocationAuthority,\n): T {\n\tconst port = {} as T;\n\tfor (const [method, operation] of Object.entries(methods) as Array<\n\t\t[keyof T, BillingOperation]\n\t>) {\n\t\tport[method] = ((..._args: unknown[]) => {\n\t\t\tconst denied = denyBillingInvocation(principal, operation, authority);\n\t\t\tif (denied) {\n\t\t\t\tthrow denied;\n\t\t\t}\n\t\t\treturn unavailable(operation);\n\t\t}) as T[keyof T];\n\t}\n\treturn port;\n}\n\n\nfunction operationsFromProviderCapabilities(input: {\n\tanyCredentialConfigured: boolean;\n\tauthority?: BillingCredentialAuthority;\n\tconfiguredProfileId?: string | null;\n\tcredentialKind?: string;\n\tinvocation?: BillingInvocationAuthority;\n\tmissingReason?: BillingOperationCapability[\"reason\"];\n\tports: BillingCapabilities[\"ports\"];\n\tprincipal?: AthenaPrincipal;\n\tprovider: string;\n\tproviderOperations?: BillingProviderCapabilities[\"operations\"];\n\trequestedProfileId?: string | null;\n\tselectedCredentialConfigured?: boolean;\n\tselectedEnvironment: \"test\" | \"live\";\n\tsqlPresent?: boolean;\n}): BillingCapabilities[\"operations\"] {\n\tconst operations: BillingCapabilities[\"operations\"] = {};\n\tconst selectedModeAllowed = selectedModeAllowedForCapability({\n\t\tauthority: input.authority,\n\t\tselectedCredentialConfigured:\n\t\t\tinput.selectedCredentialConfigured ?? input.anyCredentialConfigured,\n\t\tselectedEnvironment: input.selectedEnvironment,\n\t});\n\tconst providerConfig = {\n\t\tcredentialKind: input.credentialKind,\n\t\tprofileId: input.configuredProfileId,\n\t};\n\tconst decideBase = {\n\t\tanyCredentialConfigured: input.anyCredentialConfigured,\n\t\tauthority: input.authority,\n\t\tprovider: input.provider,\n\t\tproviderConfig,\n\t\trequestedProfileId: input.requestedProfileId,\n\t\tselectedModeAllowed,\n\t};\n\tfor (const operation of BILLING_OPERATIONS) {\n\t\tif (\n\t\t\tinput.missingReason != null &&\n\t\t\t!isSelfBillingOperation(operation) &&\n\t\t\t!isAdminBillingOperation(operation)\n\t\t) {\n\t\t\toperations[operation] = {\n\t\t\t\tavailable: false,\n\t\t\t\treason: input.missingReason,\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\t\tif (isAdminBillingOperation(operation)) {\n\t\t\tconst sqlPresent = input.sqlPresent === true;\n\t\t\toperations[operation] = decideLocalBillingOperationCapability({\n\t\t\t\t...decideBase,\n\t\t\t\tanyCredentialConfigured: true,\n\t\t\t\toperation,\n\t\t\t\tportAvailable: sqlPresent,\n\t\t\t\tproviderOperationEnabled: sqlPresent,\n\t\t\t\tunimplementedReason: \"runtime_unavailable\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isSelfBillingOperation(operation)) {\n\t\t\tconst sqlPresent = input.sqlPresent === true;\n\t\t\tif (\n\t\t\t\toperation === \"self.invoices.list\" ||\n\t\t\t\toperation === \"self.invoices.get\" ||\n\t\t\t\toperation === \"self.payments.list\" ||\n\t\t\t\toperation === \"self.payments.get\" ||\n\t\t\t\toperation === \"self.subscription.get\"\n\t\t\t) {\n\t\t\t\toperations[operation] = decideLocalBillingOperationCapability({\n\t\t\t\t\t...decideBase,\n\t\t\t\t\tanyCredentialConfigured: true,\n\t\t\t\t\toperation,\n\t\t\t\t\tportAvailable: sqlPresent,\n\t\t\t\t\tproviderOperationEnabled: sqlPresent,\n\t\t\t\t\tunimplementedReason: \"runtime_unavailable\",\n\t\t\t\t});\n\t\t\t} else if (operation === \"self.subscription.cancel\") {\n\t\t\t\toperations[operation] = decideLocalBillingOperationCapability({\n\t\t\t\t\t...decideBase,\n\t\t\t\t\toperation,\n\t\t\t\t\tportAvailable: sqlPresent && input.ports.subscriptions === true,\n\t\t\t\t\tproviderOperationEnabled:\n\t\t\t\t\t\tinput.providerOperations?.[\"subscriptions.cancel\"] === true,\n\t\t\t\t\tunimplementedReason: sqlPresent\n\t\t\t\t\t\t? \"unsupported_operation\"\n\t\t\t\t\t\t: \"runtime_unavailable\",\n\t\t\t\t});\n\t\t\t} else if (operation === \"self.subscription.enroll\") {\n\t\t\t\toperations[operation] = decideLocalBillingOperationCapability({\n\t\t\t\t\t...decideBase,\n\t\t\t\t\toperation,\n\t\t\t\t\tportAvailable:\n\t\t\t\t\t\tsqlPresent &&\n\t\t\t\t\t\tinput.ports.prices === true &&\n\t\t\t\t\t\tinput.ports.payments === true &&\n\t\t\t\t\t\tinput.ports.subscriptions === true &&\n\t\t\t\t\t\tinput.ports.customers === true,\n\t\t\t\t\tproviderOperationEnabled:\n\t\t\t\t\t\tinput.providerOperations?.[\"payments.create\"] === true &&\n\t\t\t\t\t\tinput.providerOperations?.[\"subscriptions.create\"] === true &&\n\t\t\t\t\t\tinput.providerOperations?.[\"customers.create\"] === true,\n\t\t\t\t\tunimplementedReason: sqlPresent\n\t\t\t\t\t\t? \"unsupported_operation\"\n\t\t\t\t\t\t: \"runtime_unavailable\",\n\t\t\t\t});\n\t\t\t} else if (operation === \"self.checkout.resume\") {\n\t\t\t\toperations[operation] = decideLocalBillingOperationCapability({\n\t\t\t\t\t...decideBase,\n\t\t\t\t\toperation,\n\t\t\t\t\tportAvailable: sqlPresent && input.ports.payments === true,\n\t\t\t\t\tproviderOperationEnabled:\n\t\t\t\t\t\tinput.providerOperations?.[\"payments.get\"] === true,\n\t\t\t\t\tunimplementedReason: sqlPresent\n\t\t\t\t\t\t? \"unsupported_operation\"\n\t\t\t\t\t\t: \"runtime_unavailable\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\toperations[operation] = decideLocalBillingOperationCapability({\n\t\t\t\t\t...decideBase,\n\t\t\t\t\toperation,\n\t\t\t\t\tportAvailable:\n\t\t\t\t\t\tsqlPresent &&\n\t\t\t\t\t\tinput.ports.prices === true &&\n\t\t\t\t\t\tinput.ports.payments === true,\n\t\t\t\t\tproviderOperationEnabled:\n\t\t\t\t\t\tinput.providerOperations?.[\"payments.create\"] === true,\n\t\t\t\t\tunimplementedReason:\n\t\t\t\t\t\tinput.ports.prices === true\n\t\t\t\t\t\t\t? \"unsupported_operation\"\n\t\t\t\t\t\t\t: \"missing_catalog\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst portName = operation.split(\".\")[0] as BillingPortName;\n\t\toperations[operation] = decideLocalBillingOperationCapability({\n\t\t\t...decideBase,\n\t\t\toperation,\n\t\t\tportAvailable: input.ports[portName] === true,\n\t\t\tproviderOperationEnabled: input.providerOperations?.[operation] === true,\n\t\t});\n\t}\n\tif (input.principal != null) {\n\t\tfor (const operation of BILLING_OPERATIONS) {\n\t\t\tconst capability = operations[operation];\n\t\t\tif (capability == null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toperations[operation] = callerEffectiveBillingCapability({\n\t\t\t\tauthority: input.invocation,\n\t\t\t\tcapability,\n\t\t\t\toperation,\n\t\t\t\tprincipal: input.principal,\n\t\t\t});\n\t\t}\n\t}\n\treturn operations;\n}\n\nexport interface CreateLocalBillingRuntimeInput extends BillingAdminRuntimeOptions {\n\tconnectionState?: {\n\t\tconnections: readonly MaterializedBillingConnection[];\n\t\tinitializationFailed?: boolean;\n\t\tinitializationMessage?: string;\n\t\tinitialized: boolean;\n\t};\n\tinvocation: BillingInvocationAuthority;\n\tprincipal?: AthenaPrincipal;\n\tready?: Promise<void>;\n}\n\nexport function createLocalBillingRuntime(\n\tinput: CreateLocalBillingRuntimeInput,\n): AthenaBillingRuntimeDispatch {\n\tconst invocation = resolveBillingInvocationAuthority({\n\t\tauthority: input.invocation,\n\t});\n\tconst principal =\n\t\tinput.principal ??\n\t\t(isProcessBillingInvocation(invocation)\n\t\t\t? PROCESS_OWNED_BILLING_PRINCIPAL\n\t\t\t: undefined);\n\tif (principal == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"payments.list\",\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tconst ready = input.ready ?? Promise.resolve();\n\tconst gate = <T>(run: () => Promise<T>): Promise<T> => ready.then(run);\n\tconst gatePort = <T extends object>(port: T): T => {\n\t\tconst wrapped = {} as T;\n\t\tfor (const [key, value] of Object.entries(port)) {\n\t\t\tif (typeof value === \"function\") {\n\t\t\t\t(wrapped as Record<string, unknown>)[key] = (\n\t\t\t\t\t...args: unknown[]\n\t\t\t\t) =>\n\t\t\t\t\tgate(() =>\n\t\t\t\t\t\t(value as (...inner: unknown[]) => Promise<unknown>)(...args),\n\t\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (value != null && typeof value === \"object\" && !Array.isArray(value)) {\n\t\t\t\t(wrapped as Record<string, unknown>)[key] = gatePort(\n\t\t\t\t\tvalue as object,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t(wrapped as Record<string, unknown>)[key] = value;\n\t\t}\n\t\treturn wrapped;\n\t};\n\n\tconst payments: BillingPaymentPort = {\n\t\tcancel: (payload: BillingCancelPaymentInput): Promise<BillingPayment> =>\n\t\t\texecuteLocalBillingPaymentCancel({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tcreate: (payload: BillingCreatePaymentInput): Promise<BillingPayment> =>\n\t\t\texecuteLocalBillingPaymentCreate({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tget: (payload: BillingGetPaymentInput): Promise<BillingPayment> =>\n\t\t\texecuteLocalBillingPaymentGet({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tlist: (\n\t\t\tpayload: BillingListPaymentsInput,\n\t\t): Promise<BillingPage<BillingPayment>> =>\n\t\t\texecuteLocalBillingPaymentList({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t};\n\n\tconst customers: BillingCustomerPort = {\n\t\tcreate: (payload: BillingCreateCustomerInput) =>\n\t\t\texecuteLocalBillingCustomerCreate({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tdelete: (payload: BillingDeleteCustomerInput) =>\n\t\t\texecuteLocalBillingCustomerDelete({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tget: (payload: BillingGetCustomerInput) =>\n\t\t\texecuteLocalBillingCustomerGet({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tlist: (payload: BillingListCustomersInput) =>\n\t\t\texecuteLocalBillingCustomerList({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tupdate: (payload: BillingUpdateCustomerInput) =>\n\t\t\texecuteLocalBillingCustomerUpdate({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t};\n\tconst refunds: BillingRefundPort = {\n\t\tcancel: (payload: BillingCancelRefundInput) =>\n\t\t\texecuteLocalBillingRefundCancel({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tcreate: (payload: BillingCreateRefundInput) =>\n\t\t\texecuteLocalBillingRefundCreate({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tget: (payload: BillingGetRefundInput) =>\n\t\t\texecuteLocalBillingRefundGet({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tlist: (payload: BillingListRefundsInput) =>\n\t\t\texecuteLocalBillingRefundList({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t};\n\tconst paymentLinks: BillingPaymentLinkPort = {\n\t\tcreate: (payload: BillingCreatePaymentLinkInput) =>\n\t\t\texecuteLocalBillingPaymentLinkCreate({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tdelete: (payload: BillingDeletePaymentLinkInput) =>\n\t\t\texecuteLocalBillingPaymentLinkDelete({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tget: (payload: BillingGetPaymentLinkInput) =>\n\t\t\texecuteLocalBillingPaymentLinkGet({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tlist: (payload: BillingListPaymentLinksInput) =>\n\t\t\texecuteLocalBillingPaymentLinkList({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tupdate: (payload: BillingUpdatePaymentLinkInput) =>\n\t\t\texecuteLocalBillingPaymentLinkUpdate({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t};\n\tconst subscriptions: BillingSubscriptionPort = {\n\t\tcancel: (payload: BillingCancelSubscriptionInput) =>\n\t\t\texecuteLocalBillingSubscriptionCancel({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tcreate: (payload: BillingCreateSubscriptionInput) =>\n\t\t\texecuteLocalBillingSubscriptionCreate({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tget: (payload: BillingGetSubscriptionInput) =>\n\t\t\texecuteLocalBillingSubscriptionGet({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tlist: (payload: BillingListSubscriptionsInput) =>\n\t\t\texecuteLocalBillingSubscriptionList({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tupdate: (payload: BillingUpdateSubscriptionInput) =>\n\t\t\texecuteLocalBillingSubscriptionUpdate({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t};\n\tconst invoices: BillingInvoicePort = {\n\t\tget: (payload: BillingGetInvoiceInput) =>\n\t\t\texecuteLocalBillingInvoiceGet({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\tlist: (payload: BillingListInvoicesInput) =>\n\t\t\texecuteLocalBillingInvoiceList({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t};\n\tconst webhooks = createUnsupportedPort<BillingWebhookPort>(\n\t\t{\n\t\t\tcreate: \"webhooks.create\",\n\t\t\tdelete: \"webhooks.delete\",\n\t\t\tget: \"webhooks.get\",\n\t\t\tlist: \"webhooks.list\",\n\t\t\ttest: \"webhooks.test\",\n\t\t\tupdate: \"webhooks.update\",\n\t\t},\n\t\tprincipal,\n\t\tinvocation,\n\t);\n\tconst products: BillingProductPort = {\n\t\tlist: (payload) =>\n\t\t\texecuteLocalBillingProductList({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t};\n\tconst prices: BillingPricePort = {\n\t\tlist: (payload) =>\n\t\t\texecuteLocalBillingPriceList({\n\t\t\t\tauthority: invocation,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tpayload,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t};\n\tconst checkout = createUnsupportedPort<BillingCheckoutPort>(\n\t\t{ create: \"checkout.create\" },\n\t\tprincipal,\n\t\tinvocation,\n\t);\n\tconst adminOptions = {\n\t\tapplicationId: input.applicationId,\n\t\tappUrl: input.appUrl,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tcustomerImport: input.customerImport,\n\t\tingestion: input.ingestion,\n\t\tobservability: input.observability,\n\t\tregistry: input.registry,\n\t\tsql: input.sql,\n\t\ttestMode: input.testMode,\n\t};\n\tconst admin = createBillingAdminPort({\n\t\tauthority: invocation,\n\t\toptions: adminOptions,\n\t\tprincipal,\n\t});\n\n\treturn {\n\t\t// Shared src/billing/safety preflight is applied in execute/* create paths.\n\t\tcustomers: gatePort(customers),\n\t\tadmin: gatePort(admin),\n\t\tcheckout: gatePort(checkout),\n\t\tasync execute(operation, payload, requestPrincipal) {\n\t\t\tawait ready;\n\t\t\tif (isSelfBillingOperation(operation)) {\n\t\t\t\treturn omitUndefinedKeys(\n\t\t\t\t\tawait executeSelfBillingOperation({\n\t\t\t\t\t\tappUrl: input.appUrl,\n\t\t\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\t\t\toperation: operation,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tprincipal: requestPrincipal,\n\t\t\t\t\t\tregistry: input.registry,\n\t\t\t\t\t\tsql: input.sql,\n\t\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (isAdminBillingOperation(operation)) {\n\t\t\t\treturn omitUndefinedKeys(\n\t\t\t\t\tawait executeAdminBillingOperation({\n\t\t\t\t\t\tauthority: invocation,\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\toptions: adminOptions,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tprincipal: requestPrincipal,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst scoped = createLocalBillingRuntime({\n\t\t\t\tapplicationId: input.applicationId,\n\t\t\t\tappUrl: input.appUrl,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tconnectionState: input.connectionState,\n\t\t\t\tcustomerImport: input.customerImport,\n\t\t\t\tingestion: input.ingestion,\n\t\t\t\tinvocation: SESSION_BILLING_INVOCATION,\n\t\t\t\tobservability: input.observability,\n\t\t\t\tprincipal: requestPrincipal,\n\t\t\t\tready,\n\t\t\t\tregistry: input.registry,\n\t\t\t\tsql: input.sql,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t});\n\t\t\treturn omitUndefinedKeys(\n\t\t\t\tawait invokeBillingRuntimePort(scoped, operation, payload),\n\t\t\t);\n\t\t},\n\t\tinvoices: gatePort(invoices),\n\t\tmode: \"local\",\n\t\tpaymentLinks: gatePort(paymentLinks),\n\t\tpayments: gatePort(payments),\n\t\tprices: gatePort(prices),\n\t\tproducts: gatePort(products),\n\t\trefunds: gatePort(refunds),\n\t\tself: gatePort(\n\t\t\tcreateSelfBillingPort({\n\t\t\t\tappUrl: input.appUrl,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tprincipal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\tsql: input.sql,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\t),\n\t\tsubscriptions: gatePort(subscriptions),\n\t\twebhooks: gatePort(webhooks),\n\t\tasync getCapabilities(\n\t\t\ttarget: BillingExecutionTarget,\n\t\t): Promise<BillingCapabilities> {\n\t\t\tif (input.connectionState?.initializationFailed) {\n\t\t\t\treturn bootstrapFailedBillingCapabilities({\n\t\t\t\t\terror:\n\t\t\t\t\t\tinput.connectionState.initializationMessage ??\n\t\t\t\t\t\t\"billing initialization failed\",\n\t\t\t\t\tsqlPresent: input.sql != null,\n\t\t\t\t\ttarget,\n\t\t\t\t});\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait ready;\n\t\t\t} catch (error) {\n\t\t\t\treturn bootstrapFailedBillingCapabilities({\n\t\t\t\t\terror,\n\t\t\t\t\tsqlPresent: input.sql != null,\n\t\t\t\t\ttarget,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst resolved = resolveBillingExecutionTarget({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tregistry: input.registry,\n\t\t\t\ttarget,\n\t\t\t});\n\t\t\tif (resolved.kind === \"connection\") {\n\t\t\t\tconst emptyPorts = {\n\t\t\t\t\tcheckout: false,\n\t\t\t\t\tcustomers: false,\n\t\t\t\t\tinvoices: false,\n\t\t\t\t\tpaymentLinks: false,\n\t\t\t\t\tpayments: false,\n\t\t\t\t\tprices: false,\n\t\t\t\t\tproducts: false,\n\t\t\t\t\trefunds: false,\n\t\t\t\t\tself: input.sql != null,\n\t\t\t\t\tsubscriptions: false,\n\t\t\t\t\twebhooks: false,\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tconnected: false,\n\t\t\t\t\tconnectionId: resolved.connectionId,\n\t\t\t\t\tinitialized: input.connectionState?.initialized !== false,\n\t\t\t\t\toperations: operationsFromProviderCapabilities({\n\t\t\t\t\t\tanyCredentialConfigured: false,\n\t\t\t\t\t\tinvocation,\n\t\t\t\t\t\tmissingReason: \"missing_connection\",\n\t\t\t\t\t\tports: emptyPorts,\n\t\t\t\t\t\tprincipal,\n\t\t\t\t\t\tprovider: resolved.provider ?? \"\",\n\t\t\t\t\t\tselectedEnvironment: \"test\",\n\t\t\t\t\t\tsqlPresent: input.sql != null,\n\t\t\t\t\t}),\n\t\t\t\t\tports: emptyPorts,\n\t\t\t\t\tprovider: resolved.provider ?? \"\",\n\t\t\t\t\truntime: \"local\",\n\t\t\t\t\ttarget: {\n\t\t\t\t\t\tconnectionId: resolved.connectionId,\n\t\t\t\t\t\tkind: \"connection\",\n\t\t\t\t\t\tprovider: resolved.provider ?? \"\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst environment = resolveBillingEnvironment({\n\t\t\t\ttestMode: input.testMode,\n\t\t\t});\n\t\t\tconst binding = createConfiguredProviderBinding({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tprovider: resolved.provider,\n\t\t\t});\n\t\t\tconst providerCapabilities =\n\t\t\t\tawait resolved.runtime.getCapabilities(binding);\n\t\t\tconst providerPorts = providerCapabilities.ports;\n\t\t\tconst ports = {\n\t\t\t\tcheckout: resolved.runtime.checkout != null && providerPorts.checkout,\n\t\t\t\tcustomers:\n\t\t\t\t\tresolved.runtime.customers != null && providerPorts.customers,\n\t\t\t\tinvoices: resolved.runtime.invoices != null && providerPorts.invoices,\n\t\t\t\tpaymentLinks:\n\t\t\t\t\tresolved.runtime.paymentLinks != null && providerPorts.paymentLinks,\n\t\t\t\tpayments: resolved.runtime.payments != null && providerPorts.payments,\n\t\t\t\tprices: resolved.runtime.prices != null && providerPorts.prices,\n\t\t\t\tproducts: resolved.runtime.products != null && providerPorts.products,\n\t\t\t\trefunds: resolved.runtime.refunds != null && providerPorts.refunds,\n\t\t\t\tself: input.sql != null,\n\t\t\t\tsubscriptions:\n\t\t\t\t\tresolved.runtime.subscriptions != null && providerPorts.subscriptions,\n\t\t\t\twebhooks: resolved.runtime.webhooks != null && providerPorts.webhooks,\n\t\t\t};\n\t\t\tconst availableEnvironments = availableBillingCredentialEnvironments(\n\t\t\t\tbinding.credentials,\n\t\t\t);\n\t\t\tconst authority = readBillingCredentialAuthority(binding.providerConfig);\n\t\t\tlet credentialKind: BillingCredentialKind | undefined =\n\t\t\t\ttypeof binding.providerConfig.credentialKind === \"string\"\n\t\t\t\t\t? (binding.providerConfig.credentialKind as BillingCredentialKind)\n\t\t\t\t\t: undefined;\n\t\t\tlet credentialAvailable = false;\n\t\t\ttry {\n\t\t\t\tconst selection = resolveBillingCredential({\n\t\t\t\t\tprovider: resolved.provider,\n\t\t\t\t\ttestMode: environment.testMode,\n\t\t\t\t\tbinding,\n\t\t\t\t});\n\t\t\t\tcredentialKind = selection.credentialKind;\n\t\t\t\tcredentialAvailable = true;\n\t\t\t} catch (error) {\n\t\t\t\tif (!isAthenaBillingCredentialError(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tcredentialAvailable = false;\n\t\t\t}\n\t\t\tconst configuredProfileId = binding.providerConfig.profileId;\n\t\t\tconst operations = operationsFromProviderCapabilities({\n\t\t\t\tanyCredentialConfigured: availableEnvironments.length > 0,\n\t\t\t\tauthority,\n\t\t\t\tconfiguredProfileId:\n\t\t\t\t\ttypeof configuredProfileId === \"string\" ||\n\t\t\t\t\t\tconfiguredProfileId === null\n\t\t\t\t\t\t? configuredProfileId\n\t\t\t\t\t\t: undefined,\n\t\t\t\tcredentialKind,\n\t\t\t\tinvocation,\n\t\t\t\tports,\n\t\t\t\tprincipal,\n\t\t\t\tprovider: resolved.provider,\n\t\t\t\tproviderOperations: providerCapabilities.operations,\n\t\t\t\trequestedProfileId: target.profileId,\n\t\t\t\tselectedCredentialConfigured:\n\t\t\t\t\tbinding.credentials[environment.name] != null,\n\t\t\t\tselectedEnvironment: environment.name,\n\t\t\t\tsqlPresent: input.sql != null,\n\t\t\t});\n\t\t\tconst materialized = input.connectionState?.connections.find(\n\t\t\t\t(connection) => connection.provider === resolved.provider,\n\t\t\t);\n\t\t\tconst developmentDiagnostics =\n\t\t\t\tprocess.env.NODE_ENV !== \"production\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tconnectionSource: \"application_config\",\n\t\t\t\t\t\t\tproviderRegistrationSource: \"createClient\",\n\t\t\t\t\t\t\truntimeSource: \"local\",\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined;\n\t\t\treturn {\n\t\t\t\tauthority:\n\t\t\t\t\tauthority == null\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\tmodes: authority.modes,\n\t\t\t\t\t\t\tpermissions: { ...authority.permissions },\n\t\t\t\t\t\t\tscope: authority.scope,\n\t\t\t\t\t\t\tsource: authority.source,\n\t\t\t\t\t\t},\n\t\t\t\tconnected: credentialAvailable,\n\t\t\t\tconnectionId: materialized?.id,\n\t\t\t\tcredentials: {\n\t\t\t\t\tavailableEnvironments,\n\t\t\t\t\tconfigured: true,\n\t\t\t\t\tcredentialKind,\n\t\t\t\t\tselectedEnvironment: environment.name,\n\t\t\t\t},\n\t\t\t\t...(developmentDiagnostics != null\n\t\t\t\t\t? { diagnostics: developmentDiagnostics }\n\t\t\t\t\t: {}),\n\t\t\t\tenvironment: environment.name,\n\t\t\t\tinitialized: input.connectionState?.initialized !== false,\n\t\t\t\toperations,\n\t\t\t\tports,\n\t\t\t\tprovider: resolved.provider,\n\t\t\t\truntime: \"local\",\n\t\t\t\ttarget: {\n\t\t\t\t\tkind: \"configured\",\n\t\t\t\t\tprovider: resolved.provider,\n\t\t\t\t\t...(materialized?.id != null\n\t\t\t\t\t\t? { connectionId: materialized.id }\n\t\t\t\t\t\t: {}),\n\t\t\t\t},\n\t\t\t\ttestMode: environment.testMode,\n\t\t\t};\n\t\t},\n\t};\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport { runBillingCustomerImportWithPostgres } from \"../../import/assemble.ts\";\nimport {\n\tcreatePostgresBillingImportBindingStore,\n\tcreatePostgresBillingImportDocumentStore,\n\tlistActiveBillingImportConnections,\n\tresolveBillingImportConnection,\n} from \"../../import/postgres.ts\";\nimport { reconcileBillingDocumentsForBinding } from \"../../import/project.ts\";\nimport {\n\ttype BillingImportRunReport,\n\tDEFAULT_BILLING_IMPORT_POLICY,\n} from \"../../import/types.ts\";\nimport { runAutomaticBillingWebhookReconcileIfEnabled } from \"../../ingestion/automatic.ts\";\nimport { assertAthenaBillingIngestion } from \"../../ingestion/config.ts\";\nimport {\n\tbillingWebhookOperatorHealth,\n\tcreatePostgresBillingWebhookIngressObservability,\n} from \"../../ingestion/observability/health.ts\";\nimport { billingWebhookOperationalStatus } from \"../../ingestion/observability/operational-status.ts\";\nimport {\n\tbillingWebhookConfigHash,\n\tbuildDesiredBillingWebhookState,\n} from \"../../ingestion/reconciliation/desired-state.ts\";\nimport { connectionIngestionHealthFromRegistrations } from \"../../ingestion/reconciliation/health.ts\";\nimport { createPostgresBillingWebhookRegistrationStore } from \"../../ingestion/reconciliation/repository.ts\";\nimport type {\n\tAthenaBillingIngestionConfig,\n\tNormalizedAthenaBillingIngestionConfig,\n} from \"../../ingestion/types.ts\";\nimport {\n\tBILLING_MOLLIE_CLASSIC_WEBHOOK_PATH,\n\tBILLING_MOLLIE_EVENTS_WEBHOOK_PATH,\n\tresolveBillingIngressEndpoints,\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\tmintBillingAuditIdentity,\n\tvalidateBillingAuditEntry,\n} from \"../../observability/validate.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.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 { createConnectionProviderExecutionContext } from \"../local/providers/connection-binding.ts\";\nimport { materializeConfiguredBillingConnections } from \"../local/connections/materialize.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\tADMIN_OP,\n\ttype AdminBillingOperation,\n\tisAdminBillingOperation,\n} from \"./operations.ts\";\nimport type {\n\tBillingAdminConflictResolveInput,\n\tBillingAdminConflictResolveResult,\n\tBillingAdminConnectionInput,\n\tBillingAdminIngestionHealth,\n\tBillingAdminPort,\n\tBillingAdminWebhookReconcileInput,\n\tBillingAdminWebhookStatus,\n\tBillingWebhookDesiredActualRow,\n} from \"./types.ts\";\n\nexport interface BillingAdminRuntimeOptions {\n\tapplicationId?: string;\n\tappUrl?: string | null;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tcustomerImport?: {\n\t\tcustomers?: { allowUniqueEmailAutoBind?: boolean };\n\t};\n\tingestion?: AthenaBillingIngestionConfig;\n\tobservability?: Parameters<typeof normalizeAthenaBillingObservability>[0];\n\tregistry: BillingProviderRegistry;\n\tsql?: BillingSqlExecutor;\n\ttestMode?: boolean;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n\tif (value != null && typeof value === \"object\" && !Array.isArray(value)) {\n\t\treturn value as Record<string, unknown>;\n\t}\n\treturn {};\n}\n\nfunction requireSql(\n\tsql: BillingSqlExecutor | undefined,\n\toperation: AdminBillingOperation,\n): BillingSqlExecutor {\n\tif (!sql) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\treturn sql;\n}\n\nfunction actorFromPrincipal(\n\tprincipal: AthenaPrincipal,\n): AthenaBillingAuditEntry[\"actor\"] {\n\tif (\n\t\tprincipal.authenticated === true &&\n\t\ttypeof principal.userId === \"string\"\n\t) {\n\t\treturn { kind: \"user\", userId: principal.userId };\n\t}\n\treturn { kind: \"system\" };\n}\n\nfunction requireString(record: Record<string, unknown>, key: string): string {\n\tconst value = record[key];\n\tif (typeof value !== \"string\" || value.trim() === \"\") {\n\t\tthrow new Error(`ATHENA_BILLING_FIELD_REQUIRED:${key}`);\n\t}\n\treturn value;\n}\n\nasync function latestImportRun(\n\tsql: BillingSqlExecutor,\n\tconnectionId?: string,\n): Promise<{ completedAt: string | null; status: string } | null> {\n\tconst result = connectionId\n\t\t? await sql.query(\n\t\t\t`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\t\t\t[connectionId],\n\t\t)\n\t\t: await sql.query(\n\t\t\t`SELECT status, completed_at FROM billing.billing_import_runs\n\t\t\t\t ORDER BY started_at DESC LIMIT 1`,\n\t\t);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tcompletedAt:\n\t\t\trow.completed_at instanceof Date\n\t\t\t\t? row.completed_at.toISOString()\n\t\t\t\t: typeof row.completed_at === \"string\"\n\t\t\t\t\t? row.completed_at\n\t\t\t\t\t: null,\n\t\tstatus: String(row.status ?? \"\"),\n\t};\n}\n\nasync function conflictCount(\n\tsql: BillingSqlExecutor,\n\tconnectionId?: string,\n): Promise<number> {\n\tconst result = connectionId\n\t\t? await sql.query(\n\t\t\t`SELECT count(*)::int AS n 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[connectionId],\n\t\t)\n\t\t: await sql.query(\n\t\t\t`SELECT count(*)::int AS n 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);\n\tconst n = result.rows[0]?.n;\n\treturn typeof n === \"number\" ? n : Number(n ?? 0);\n}\n\nasync function resolveConnectionId(\n\tsql: BillingSqlExecutor,\n\tinput: BillingAdminConnectionInput | undefined,\n\tprovider: string,\n): Promise<string> {\n\tif (\n\t\ttypeof input?.connectionId === \"string\" &&\n\t\tinput.connectionId.length > 0\n\t) {\n\t\treturn input.connectionId;\n\t}\n\tconst connections = await listActiveBillingImportConnections(sql, provider);\n\tconst first = connections[0];\n\tif (!first) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"admin.ingestion.health\",\n\t\t\treason: \"missing_connection\",\n\t\t});\n\t}\n\treturn first.id;\n}\n\nfunction webhookRejectionCode(error: unknown): string | null {\n\tif (error == null || typeof error !== \"object\" || Array.isArray(error)) {\n\t\treturn null;\n\t}\n\tif (!(\"code\" in error)) {\n\t\treturn null;\n\t}\n\tconst code = error.code;\n\tif (typeof code !== \"string\" || code.length === 0 || /secret/i.test(code)) {\n\t\treturn null;\n\t}\n\treturn code;\n}\n\nasync function webhookStatus(input: {\n\tapplicationId: string;\n\tappUrl?: string | null;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnectionId: string;\n\tingestion: NormalizedAthenaBillingIngestionConfig;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): Promise<BillingAdminWebhookStatus> {\n\tconst webhooks = input.ingestion.webhooks;\n\tconst endpoints = resolveBillingIngressEndpoints({\n\t\tappUrl: input.appUrl,\n\t\tpublicBaseUrl: webhooks.publicBaseUrl,\n\t});\n\tconst connection = await resolveBillingImportConnection(input.sql, {\n\t\tconnectionId: input.connectionId,\n\t\tprovider: \"mollie\",\n\t});\n\tconst execution = createConnectionProviderExecutionContext({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tconnection,\n\t\toperationScope: \"organization\",\n\t});\n\tconst capability = resolveMollieWebhookManagementCapability(\n\t\texecution.binding,\n\t);\n\tconst environment = connection.environment;\n\tconst desired = endpoints\n\t\t? buildDesiredBillingWebhookState({\n\t\t\tapplicationId: input.applicationId,\n\t\t\tcapability,\n\t\t\tconnectionId: input.connectionId,\n\t\t\tendpoints,\n\t\t\tenvironment,\n\t\t\tmanagement: webhooks.management,\n\t\t\tprovider: \"mollie\",\n\t\t\twebhooks,\n\t\t})\n\t\t: undefined;\n\tconst store = createPostgresBillingWebhookRegistrationStore(input.sql);\n\tconst rows = await store.list(input.connectionId);\n\tconst classic = rows.find((row) => row.kind === \"classic\");\n\tconst nextGen = rows.find((row) => row.kind === \"next_gen\");\n\tconst health = connectionIngestionHealthFromRegistrations(rows);\n\tconst desiredClassicUrl = desired?.classic?.url ?? null;\n\tconst desiredEvents = desired?.nextGen?.eventTypes.length ?? 0;\n\tconst actualEvents = nextGen?.eventTypes.length ?? 0;\n\tconst desiredHash = desired?.nextGen\n\t\t? billingWebhookConfigHash({\n\t\t\teventTypes: desired.nextGen.eventTypes,\n\t\t\tkind: \"next_gen\",\n\t\t\turl: desired.nextGen.url,\n\t\t})\n\t\t: null;\n\tconst comparison: BillingWebhookDesiredActualRow[] = [\n\t\t{\n\t\t\tactual: health.classic,\n\t\t\tdesired: desired?.classic ? \"enabled\" : \"disabled\",\n\t\t\tkey: \"classic\",\n\t\t},\n\t\t{\n\t\t\tactual: health.nextGen,\n\t\t\tdesired:\n\t\t\t\tdesired?.nextGen == null\n\t\t\t\t\t? \"disabled\"\n\t\t\t\t\t: desired.nextGen.enabled\n\t\t\t\t\t\t? \"auto\"\n\t\t\t\t\t\t: \"unsupported\",\n\t\t\tkey: \"nextGen\",\n\t\t},\n\t\t{\n\t\t\tactual: classic?.url ?? nextGen?.url ?? null,\n\t\t\tdesired: desiredClassicUrl ?? desired?.nextGen?.url ?? null,\n\t\t\tkey: \"endpoint\",\n\t\t},\n\t\t{\n\t\t\tactual: actualEvents,\n\t\t\tdesired: desiredEvents,\n\t\t\tkey: \"events\",\n\t\t},\n\t\t{\n\t\t\tactual: nextGen?.configHash ?? classic?.configHash ?? null,\n\t\t\tdesired: desiredHash,\n\t\t\tkey: \"configHash\",\n\t\t},\n\t\t{\n\t\t\tactual: \"authoritative_refetch\",\n\t\t\tdesired: \"authoritative_refetch\",\n\t\t\tkey: \"verification.classic\",\n\t\t},\n\t\t{\n\t\t\tactual: \"signature_and_refetch\",\n\t\t\tdesired: \"signature_and_refetch\",\n\t\t\tkey: \"verification.nextGen\",\n\t\t},\n\t\t{\n\t\t\tactual: desiredClassicUrl,\n\t\t\tdesired: desiredClassicUrl,\n\t\t\tkey: \"classic.url.configured\",\n\t\t},\n\t\t{\n\t\t\tactual: classic?.url ?? null,\n\t\t\tdesired: desiredClassicUrl,\n\t\t\tkey: \"classic.url.registered\",\n\t\t},\n\t\t{\n\t\t\tactual: desired?.nextGen?.url ?? null,\n\t\t\tdesired: desired?.nextGen?.url ?? null,\n\t\t\tkey: \"nextGen.url.configured\",\n\t\t},\n\t\t{\n\t\t\tactual: nextGen?.url ?? null,\n\t\t\tdesired: desired?.nextGen?.url ?? null,\n\t\t\tkey: \"nextGen.url.registered\",\n\t\t},\n\t\t{\n\t\t\tactual: classic?.lastDeliveryAt?.toISOString() ?? null,\n\t\t\tdesired: null,\n\t\t\tkey: \"classic.lastDeliveryAt\",\n\t\t},\n\t\t{\n\t\t\tactual: nextGen?.lastDeliveryAt?.toISOString() ?? null,\n\t\t\tdesired: null,\n\t\t\tkey: \"nextGen.lastDeliveryAt\",\n\t\t},\n\t\t{\n\t\t\tactual:\n\t\t\t\tclassic?.lastRejectionCode ??\n\t\t\t\tnextGen?.lastRejectionCode ??\n\t\t\t\twebhookRejectionCode(classic?.lastError ?? nextGen?.lastError),\n\t\t\tdesired: null,\n\t\t\tkey: \"lastRejectionCode\",\n\t\t},\n\t\t{\n\t\t\tactual: Boolean(endpoints),\n\t\t\tdesired: Boolean(endpoints),\n\t\t\tkey: \"routeMounted\",\n\t\t},\n\t\t{\n\t\t\tactual: classic?.lastAcceptedAt?.toISOString() ?? null,\n\t\t\tdesired: null,\n\t\t\tkey: \"classic.lastAcceptedAt\",\n\t\t},\n\t\t{\n\t\t\tactual: classic?.lastIngressStage ?? null,\n\t\t\tdesired: null,\n\t\t\tkey: \"classic.lastIngressStage\",\n\t\t},\n\t\t{\n\t\t\tactual: classic?.lastReconciliationOutcome ?? null,\n\t\t\tdesired: null,\n\t\t\tkey: \"classic.lastReconciliationOutcome\",\n\t\t},\n\t\t{\n\t\t\tactual: nextGen?.lastAcceptedAt?.toISOString() ?? null,\n\t\t\tdesired: null,\n\t\t\tkey: \"nextGen.lastAcceptedAt\",\n\t\t},\n\t\t{\n\t\t\tactual: nextGen?.lastIngressStage ?? null,\n\t\t\tdesired: null,\n\t\t\tkey: \"nextGen.lastIngressStage\",\n\t\t},\n\t\t{\n\t\t\tactual: nextGen?.lastReconciliationOutcome ?? null,\n\t\t\tdesired: null,\n\t\t\tkey: \"nextGen.lastReconciliationOutcome\",\n\t\t},\n\t];\n\tconst secretRow = nextGen ?? classic;\n\tconst signingSecretConfigured = Boolean(\n\t\twebhooks.providers.mollie.nextGen.signingSecret,\n\t);\n\tconst previousSigningSecretsConfigured =\n\t\twebhooks.providers.mollie.nextGen.previousSigningSecrets.length;\n\tconst deliveryRows = await createPostgresBillingWebhookIngressObservability(\n\t\tinput.sql,\n\t).listDelivery(input.connectionId);\n\tconst classicDelivery = deliveryRows.find((row) => row.kind === \"classic\");\n\tconst nextGenDelivery = deliveryRows.find((row) => row.kind === \"next_gen\");\n\tconst mounted = endpoints ? (\"unknown\" as const) : false;\n\tconst channels = {\n\t\tclassic: billingWebhookOperationalStatus({\n\t\t\tconnectionId: input.connectionId,\n\t\t\tendpoint: endpoints?.classicUrl ?? BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH,\n\t\t\tkind: \"classic\",\n\t\t\tmounted,\n\t\t\tpreviousSigningSecretsConfigured: 0,\n\t\t\tsigningSecretConfigured: false,\n\t\t\t...(classic ? { registration: classic } : {}),\n\t\t\t...(classicDelivery ? { delivery: classicDelivery } : {}),\n\t\t}),\n\t\tnextGen: billingWebhookOperationalStatus({\n\t\t\tconnectionId: input.connectionId,\n\t\t\tendpoint: endpoints?.eventsUrl ?? BILLING_MOLLIE_EVENTS_WEBHOOK_PATH,\n\t\t\tkind: \"next_gen\",\n\t\t\tmounted,\n\t\t\tpreviousSigningSecretsConfigured,\n\t\t\tsigningSecretConfigured,\n\t\t\t...(nextGen ? { registration: nextGen } : {}),\n\t\t\t...(nextGenDelivery ? { delivery: nextGenDelivery } : {}),\n\t\t}),\n\t};\n\treturn {\n\t\tclassic: health.classic,\n\t\tchannels,\n\t\tconfigSource: \"application_configuration\",\n\t\tconnectionId: input.connectionId,\n\t\tdelivery: billingWebhookOperatorHealth({\n\t\t\t...(classic ? { classic } : {}),\n\t\t\t...(endpoints ? { endpoints } : {}),\n\t\t\t...(nextGen ? { nextGen } : {}),\n\t\t\tsigningSecretConfigured,\n\t\t}),\n\t\tdrift: health.drifted || desiredEvents !== actualEvents,\n\t\tenvironment,\n\t\tmanagement: webhooks.management,\n\t\tnextGen: health.nextGen,\n\t\tprovider: \"mollie\",\n\t\trows: comparison,\n\t\tsecret: {\n\t\t\tconfigured: signingSecretConfigured,\n\t\t\t...(typeof secretRow?.secretFingerprint === \"string\"\n\t\t\t\t? { fingerprint: secretRow.secretFingerprint }\n\t\t\t\t: {}),\n\t\t\t...(typeof secretRow?.secretVersion === \"number\"\n\t\t\t\t? { version: secretRow.secretVersion }\n\t\t\t\t: {}),\n\t\t},\n\t\tstrategy: webhooks.providers.mollie.strategy,\n\t};\n}\n\nasync function runReconciliation(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnectionId?: string;\n\tcustomerImport?: BillingAdminRuntimeOptions[\"customerImport\"];\n\tdryRun?: boolean;\n\tobservability?: BillingAdminRuntimeOptions[\"observability\"];\n\tprovider?: string;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): Promise<BillingImportRunReport> {\n\treturn runBillingCustomerImportWithPostgres({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tconnectionId: input.connectionId,\n\t\tdryRun: input.dryRun === true,\n\t\tobservability: normalizeAthenaBillingObservability(input.observability),\n\t\tpolicy: {\n\t\t\t...DEFAULT_BILLING_IMPORT_POLICY,\n\t\t\tallowUniqueEmailAutoBind:\n\t\t\t\tinput.customerImport?.customers?.allowUniqueEmailAutoBind === true,\n\t\t},\n\t\tprovider: input.provider,\n\t\tsql: input.sql,\n\t\ttestMode: input.testMode,\n\t\ttrigger: \"manual\",\n\t});\n}\n\nasync function resolveConflict(input: {\n\tpayload: BillingAdminConflictResolveInput;\n\tprincipal: AthenaPrincipal;\n\tsql: BillingSqlExecutor;\n}): Promise<BillingAdminConflictResolveResult> {\n\tconst context = mintManualBillingReconciliationContext({\n\t\tconnectionId: input.payload.connectionId,\n\t\tprovider: \"mollie\",\n\t\ttrigger: \"manual\",\n\t});\n\tconst bindings = createPostgresBillingImportBindingStore(input.sql);\n\tconst existing = await bindings.findByLocator({\n\t\tconnectionId: input.payload.connectionId,\n\t\tproviderCustomerId: input.payload.providerCustomerId,\n\t});\n\tif (input.payload.action === \"keep\") {\n\t\treturn {\n\t\t\taction: \"keep\",\n\t\t\tbindingId: existing?.id,\n\t\t\ttraceId: context.traceId,\n\t\t};\n\t}\n\tconst subject = input.payload.subject;\n\tif (!subject) {\n\t\tthrow new Error(\"ATHENA_BILLING_FIELD_REQUIRED:subject\");\n\t}\n\tif (input.payload.action === \"reassign\") {\n\t\tif (input.payload.confirmReassign !== true) {\n\t\t\tthrow new Error(\"ATHENA_BILLING_FIELD_REQUIRED:confirmReassign\");\n\t\t}\n\t\tif (existing) {\n\t\t\tawait input.sql.query(\n\t\t\t\t`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\t\t\t\t[existing.id],\n\t\t\t);\n\t\t\tconst audit = createPostgresBillingAuditWriter(input.sql);\n\t\t\tconst ir = billingEventDefinition(\"billing.subject.binding.revoked\");\n\t\t\tconst entry: AthenaBillingAuditEntry = {\n\t\t\t\tactor: actorFromPrincipal(input.principal),\n\t\t\t\tcausationId: context.causationId,\n\t\t\t\tconnectionId: input.payload.connectionId,\n\t\t\t\tcorrelationId: context.correlationId,\n\t\t\t\tevent: \"billing.subject.binding.revoked\",\n\t\t\t\t...mintBillingAuditIdentity(),\n\t\t\t\toutcome: \"success\",\n\t\t\t\tprevious: existing,\n\t\t\t\tprovider: \"mollie\",\n\t\t\t\tproviderSubject: {\n\t\t\t\t\tid: input.payload.providerCustomerId,\n\t\t\t\t\tkind: \"customer\",\n\t\t\t\t},\n\t\t\t\tresult: { action: \"reassign\" },\n\t\t\t\tsubject,\n\t\t\t\ttraceId: context.traceId,\n\t\t\t};\n\t\t\tvalidateBillingAuditEntry(entry, ir);\n\t\t\tawait audit.write(entry);\n\t\t}\n\t}\n\tconst created = await bindings.insertActive({\n\t\tconnectionId: input.payload.connectionId,\n\t\tproviderCustomerId: input.payload.providerCustomerId,\n\t\tsource: \"reconciled\",\n\t\tsubject,\n\t});\n\tawait reconcileBillingDocumentsForBinding(\n\t\tcreatePostgresBillingImportDocumentStore(input.sql),\n\t\t{\n\t\t\tconnectionId: input.payload.connectionId,\n\t\t\tproviderCustomerId: input.payload.providerCustomerId,\n\t\t\tsubject,\n\t\t},\n\t);\n\tawait input.sql.query(\n\t\t`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\t\t[\n\t\t\tinput.payload.connectionId,\n\t\t\tinput.payload.providerCustomerId,\n\t\t\tsubject.kind,\n\t\t\tsubject.id,\n\t\t],\n\t);\n\tconst audit = createPostgresBillingAuditWriter(input.sql);\n\tconst ir = billingEventDefinition(\"billing.subject.binding.created\");\n\tconst entry: AthenaBillingAuditEntry = {\n\t\tactor: actorFromPrincipal(input.principal),\n\t\tcausationId: context.causationId,\n\t\tconnectionId: input.payload.connectionId,\n\t\tcorrelationId: context.correlationId,\n\t\tevent: \"billing.subject.binding.created\",\n\t\t...mintBillingAuditIdentity(),\n\t\toutcome: \"success\",\n\t\tprovider: \"mollie\",\n\t\tproviderSubject: {\n\t\t\tid: input.payload.providerCustomerId,\n\t\t\tkind: \"customer\",\n\t\t},\n\t\tresult: { action: input.payload.action, bindingId: created.id },\n\t\tsubject,\n\t\ttraceId: context.traceId,\n\t};\n\tvalidateBillingAuditEntry(entry, ir);\n\tawait audit.write(entry);\n\treturn {\n\t\taction: input.payload.action,\n\t\tbindingId: created.id,\n\t\ttraceId: context.traceId,\n\t};\n}\n\nexport async function executeAdminBillingOperation(input: {\n\tauthority: BillingInvocationAuthority;\n\toperation: string;\n\toptions: BillingAdminRuntimeOptions;\n\tpayload: unknown;\n\tprincipal: AthenaPrincipal;\n}): Promise<unknown> {\n\tif (!isAdminBillingOperation(input.operation)) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\tconst operation = input.operation;\n\tconst denied = denyBillingInvocation(\n\t\tinput.principal,\n\t\toperation as BillingOperation,\n\t\tinput.authority,\n\t);\n\tif (denied) {\n\t\tthrow denied;\n\t}\n\tprepareBillingCommand({\n\t\toperation: operation as BillingOperation,\n\t\tpayload: asRecord(input.payload),\n\t\ttestMode: input.options.testMode,\n\t});\n\tconst sql = requireSql(input.options.sql, operation);\n\tconst applicationId = input.options.applicationId?.trim();\n\tif (applicationId == null || applicationId.length === 0) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tconst payload = asRecord(input.payload);\n\tif (operation === \"admin.connections.materialize\") {\n\t\tconst provider =\n\t\t\tpayload.provider === \"mollie\" ? \"mollie\" : undefined;\n\t\treturn materializeConfiguredBillingConnections({\n\t\t\tapplicationId,\n\t\t\tconfiguredProviders: input.options.configuredProviders,\n\t\t\t...(provider != null ? { provider } : {}),\n\t\t\tsql,\n\t\t\ttestMode: input.options.testMode,\n\t\t});\n\t}\n\tconst ingestion = assertAthenaBillingIngestion({\n\t\tappUrl: input.options.appUrl,\n\t\tingestion: input.options.ingestion,\n\t\tlive: input.options.testMode === false,\n\t});\n\tif (operation === \"admin.reconciliation.run\") {\n\t\treturn runReconciliation({\n\t\t\tconfiguredProviders: input.options.configuredProviders,\n\t\t\tconnectionId:\n\t\t\t\ttypeof payload.connectionId === \"string\"\n\t\t\t\t\t? payload.connectionId\n\t\t\t\t\t: undefined,\n\t\t\tcustomerImport: input.options.customerImport,\n\t\t\tdryRun: payload.dryRun === true,\n\t\t\tobservability: input.options.observability,\n\t\t\tprovider:\n\t\t\t\ttypeof payload.provider === \"string\" ? payload.provider : undefined,\n\t\t\tsql,\n\t\t\ttestMode: input.options.testMode,\n\t\t});\n\t}\n\tif (operation === \"admin.reconciliation.retry\") {\n\t\tconst runId = requireString(payload, \"runId\");\n\t\tconst run = await sql.query(\n\t\t\t`SELECT connection_id, provider FROM billing.billing_import_runs WHERE id = $1::uuid`,\n\t\t\t[runId],\n\t\t);\n\t\tconst row = run.rows[0];\n\t\tif (!row) {\n\t\t\tthrow new AthenaBillingCapabilityError({\n\t\t\t\toperation,\n\t\t\t\treason: \"unsupported_operation\",\n\t\t\t});\n\t\t}\n\t\treturn runReconciliation({\n\t\t\tconfiguredProviders: input.options.configuredProviders,\n\t\t\tconnectionId: String(row.connection_id),\n\t\t\tcustomerImport: input.options.customerImport,\n\t\t\tobservability: input.options.observability,\n\t\t\tprovider: String(row.provider ?? \"mollie\"),\n\t\t\tsql,\n\t\t\ttestMode: input.options.testMode,\n\t\t});\n\t}\n\tif (operation === \"admin.webhooks.reconcile\") {\n\t\tawait runAutomaticBillingWebhookReconcileIfEnabled({\n\t\t\tapplicationId,\n\t\t\tappUrl: input.options.appUrl,\n\t\t\tconfiguredProviders: input.options.configuredProviders,\n\t\t\tobservability: normalizeAthenaBillingObservability(\n\t\t\t\tinput.options.observability,\n\t\t\t),\n\t\t\tregistry: input.options.registry,\n\t\t\tsql,\n\t\t\ttestMode: input.options.testMode,\n\t\t\ttrigger: \"manual\",\n\t\t\twebhooks: ingestion.webhooks,\n\t\t});\n\t\tconst connectionId = await resolveConnectionId(\n\t\t\tsql,\n\t\t\tpayload as BillingAdminWebhookReconcileInput,\n\t\t\t\"mollie\",\n\t\t);\n\t\treturn webhookStatus({\n\t\t\tapplicationId,\n\t\t\tappUrl: input.options.appUrl,\n\t\t\tconfiguredProviders: input.options.configuredProviders,\n\t\t\tconnectionId,\n\t\t\tingestion,\n\t\t\tsql,\n\t\t\ttestMode: input.options.testMode,\n\t\t});\n\t}\n\tif (\n\t\toperation === \"admin.webhooks.status\" ||\n\t\toperation === \"admin.webhooks.verify\"\n\t) {\n\t\tconst connectionId = await resolveConnectionId(\n\t\t\tsql,\n\t\t\tpayload as BillingAdminConnectionInput,\n\t\t\t\"mollie\",\n\t\t);\n\t\tif (operation === \"admin.webhooks.verify\") {\n\t\t\tconst store = createPostgresBillingWebhookRegistrationStore(sql);\n\t\t\tconst listed = await store.list(connectionId);\n\t\t\tfor (const row of listed) {\n\t\t\t\tawait store.upsert({\n\t\t\t\t\t...row,\n\t\t\t\t\tlastVerifiedAt: new Date(),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn webhookStatus({\n\t\t\tapplicationId,\n\t\t\tappUrl: input.options.appUrl,\n\t\t\tconfiguredProviders: input.options.configuredProviders,\n\t\t\tconnectionId,\n\t\t\tingestion,\n\t\t\tsql,\n\t\t\ttestMode: input.options.testMode,\n\t\t});\n\t}\n\tif (operation === \"admin.ingestion.health\") {\n\t\tconst connectionId =\n\t\t\ttypeof payload.connectionId === \"string\"\n\t\t\t\t? payload.connectionId\n\t\t\t\t: (await listActiveBillingImportConnections(sql, \"mollie\"))[0]?.id;\n\t\tconst warnings: string[] = [];\n\t\tif (!connectionId) {\n\t\t\treturn {\n\t\t\t\tclassic: \"unsupported\",\n\t\t\t\tconflicts: 0,\n\t\t\t\tconnectionStatus: \"missing\",\n\t\t\t\tdrift: false,\n\t\t\t\tenabled: false,\n\t\t\t\thealthy: false,\n\t\t\t\tnextGen: \"unsupported\",\n\t\t\t\tprovider: \"mollie\",\n\t\t\t\treconciliation: \"unknown\",\n\t\t\t\twarnings: [\"No billing provider connection\"],\n\t\t\t\twebhookIngestion: \"unsupported\",\n\t\t\t} satisfies BillingAdminIngestionHealth;\n\t\t}\n\t\tconst connection = await resolveBillingImportConnection(sql, {\n\t\t\tconnectionId,\n\t\t});\n\t\tconst status = await webhookStatus({\n\t\t\tapplicationId,\n\t\t\tappUrl: input.options.appUrl,\n\t\t\tconfiguredProviders: input.options.configuredProviders,\n\t\t\tconnectionId,\n\t\t\tingestion,\n\t\t\tsql,\n\t\t\ttestMode: input.options.testMode,\n\t\t});\n\t\tconst conflicts = await conflictCount(sql, connectionId);\n\t\tconst lastRun = await latestImportRun(sql, connectionId);\n\t\tif (status.drift) {\n\t\t\twarnings.push(\"Webhook config drift\");\n\t\t}\n\t\tif (conflicts > 0) {\n\t\t\twarnings.push(`${conflicts} unresolved identity conflicts`);\n\t\t}\n\t\tif (lastRun?.status === \"checkpointed\") {\n\t\t\twarnings.push(\"Reconciliation behind\");\n\t\t}\n\t\tconst webhookIngestion =\n\t\t\tstatus.classic === \"error\" || status.nextGen === \"error\"\n\t\t\t\t? \"error\"\n\t\t\t\t: status.drift\n\t\t\t\t\t? \"degraded\"\n\t\t\t\t\t: status.classic;\n\t\tconst recent = await createPostgresBillingWebhookIngressObservability(\n\t\t\tsql,\n\t\t).aggregateRecent(connectionId);\n\t\tconst healthy =\n\t\t\twarnings.length === 0 &&\n\t\t\trecent.rejected === 0 &&\n\t\t\trecent.reconciliationFailures === 0;\n\t\treturn {\n\t\t\tclassic: status.classic,\n\t\t\tconflicts,\n\t\t\tconnectionId,\n\t\t\tconnectionStatus: connection.status,\n\t\t\tdrift: status.drift,\n\t\t\tenabled: ingestion.webhooks.enabled,\n\t\t\thealthy,\n\t\t\t...(status.rows.find((row) => row.key === \"endpoint\") ? {} : {}),\n\t\t\tlastReconcileAt: lastRun?.completedAt ?? undefined,\n\t\t\tnextGen: status.nextGen,\n\t\t\tprovider: connection.provider,\n\t\t\trecent: { ...recent, window: \"24h\" },\n\t\t\treconciliation:\n\t\t\t\tlastRun?.status === \"checkpointed\"\n\t\t\t\t\t? \"behind\"\n\t\t\t\t\t: lastRun\n\t\t\t\t\t\t? \"caught_up\"\n\t\t\t\t\t\t: \"unknown\",\n\t\t\troutes: {\n\t\t\t\tclassic: {\n\t\t\t\t\texpected: BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH,\n\t\t\t\t\tmounted: status.channels.classic.route.mounted,\n\t\t\t\t},\n\t\t\t\tnextGen: {\n\t\t\t\t\texpected: BILLING_MOLLIE_EVENTS_WEBHOOK_PATH,\n\t\t\t\t\tmounted: status.channels.nextGen.route.mounted,\n\t\t\t\t},\n\t\t\t},\n\t\t\twarnings,\n\t\t\twebhookIngestion,\n\t\t} satisfies BillingAdminIngestionHealth;\n\t}\n\tif (operation === \"admin.conflicts.resolve\") {\n\t\tconst action = payload.action;\n\t\tif (action !== \"bind\" && action !== \"keep\" && action !== \"reassign\") {\n\t\t\tthrow new Error(\"ATHENA_BILLING_FIELD_REQUIRED:action\");\n\t\t}\n\t\tconst subjectRaw = payload.subject;\n\t\tconst subject =\n\t\t\tsubjectRaw != null &&\n\t\t\t\ttypeof subjectRaw === \"object\" &&\n\t\t\t\t!Array.isArray(subjectRaw)\n\t\t\t\t? {\n\t\t\t\t\tid: requireString(subjectRaw as Record<string, unknown>, \"id\"),\n\t\t\t\t\tkind:\n\t\t\t\t\t\t(subjectRaw as Record<string, unknown>).kind === \"organization\"\n\t\t\t\t\t\t\t? (\"organization\" as const)\n\t\t\t\t\t\t\t: (\"user\" as const),\n\t\t\t\t}\n\t\t\t\t: undefined;\n\t\treturn resolveConflict({\n\t\t\tpayload: {\n\t\t\t\taction,\n\t\t\t\tconfirmReassign: payload.confirmReassign === true,\n\t\t\t\tconnectionId: requireString(payload, \"connectionId\"),\n\t\t\t\tproviderCustomerId: requireString(payload, \"providerCustomerId\"),\n\t\t\t\t...(subject ? { subject } : {}),\n\t\t\t},\n\t\t\tprincipal: input.principal,\n\t\t\tsql,\n\t\t});\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation,\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\nexport function createBillingAdminPort(input: {\n\tauthority: BillingInvocationAuthority;\n\toptions: BillingAdminRuntimeOptions;\n\tprincipal: AthenaPrincipal;\n}): BillingAdminPort {\n\tconst bind = (key: keyof typeof ADMIN_OP) => (payload: unknown) =>\n\t\texecuteAdminBillingOperation({\n\t\t\tauthority: input.authority,\n\t\t\toperation: ADMIN_OP[key],\n\t\t\toptions: input.options,\n\t\t\tpayload,\n\t\t\tprincipal: input.principal,\n\t\t});\n\treturn {\n\t\tconflicts: {\n\t\t\tresolve: bind(\n\t\t\t\t\"conflictsResolve\",\n\t\t\t) as BillingAdminPort[\"conflicts\"][\"resolve\"],\n\t\t},\n\t\tconnections: {\n\t\t\tmaterialize: bind(\n\t\t\t\t\"connectionsMaterialize\",\n\t\t\t) as BillingAdminPort[\"connections\"][\"materialize\"],\n\t\t},\n\t\tingestion: {\n\t\t\thealth: bind(\n\t\t\t\t\"ingestionHealth\",\n\t\t\t) as BillingAdminPort[\"ingestion\"][\"health\"],\n\t\t},\n\t\treconciliation: {\n\t\t\tretry: bind(\n\t\t\t\t\"reconciliationRetry\",\n\t\t\t) as BillingAdminPort[\"reconciliation\"][\"retry\"],\n\t\t\trun: bind(\n\t\t\t\t\"reconciliationRun\",\n\t\t\t) as BillingAdminPort[\"reconciliation\"][\"run\"],\n\t\t},\n\t\twebhooks: {\n\t\t\treconcile: bind(\n\t\t\t\t\"webhooksReconcile\",\n\t\t\t) as BillingAdminPort[\"webhooks\"][\"reconcile\"],\n\t\t\tstatus: bind(\"webhooksStatus\") as BillingAdminPort[\"webhooks\"][\"status\"],\n\t\t\tverify: bind(\"webhooksVerify\") as BillingAdminPort[\"webhooks\"][\"verify\"],\n\t\t},\n\t};\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 interface BillingWebhookOperationalStatus {\n\tconnectionId: string;\n\tdelivery: {\n\t\tlastAcceptedAt?: Date;\n\t\tlastReceivedAt?: Date;\n\t\tlastRejectedAt?: Date;\n\t\tlastRejectionCode?: string;\n\t\tlastRejectionMessage?: string;\n\t};\n\tkind: BillingWebhookKind;\n\tprovider: \"mollie\";\n\treconciliation: {\n\t\tlastCompletedAt?: Date;\n\t\tlastError?: string;\n\t\tlastFailedAt?: Date;\n\t\tlastOutcome?: BillingWebhookReconciliationOutcome;\n\t\tlastStartedAt?: Date;\n\t};\n\tregistration: {\n\t\tlastReconciledAt?: Date;\n\t\tlastVerifiedAt?: Date;\n\t\tproviderWebhookId?: string;\n\t\tstatus: \"pending\" | \"active\" | \"error\" | \"disabled\";\n\t};\n\troute: {\n\t\tendpoint: string;\n\t\tmounted: BillingWebhookRouteMountState;\n\t};\n\tverification: {\n\t\tpreviousSigningSecretsConfigured: number;\n\t\tsigningSecretConfigured: boolean;\n\t\tstrategy: \"authoritative_refetch\" | \"signature_and_refetch\";\n\t};\n}\n\nfunction registrationStatus(\n\tstatus: BillingWebhookRegistrationRecord[\"status\"] | undefined,\n): BillingWebhookOperationalStatus[\"registration\"][\"status\"] {\n\tif (status === \"error\") {\n\t\treturn \"error\";\n\t}\n\tif (status === \"disabled\") {\n\t\treturn \"disabled\";\n\t}\n\tif (status === \"active\") {\n\t\treturn \"active\";\n\t}\n\treturn \"pending\";\n}\n\nexport function billingWebhookOperationalStatus(input: {\n\tconnectionId: string;\n\tdelivery?: BillingWebhookDeliveryHealthRow;\n\tendpoint: string;\n\tkind: BillingWebhookKind;\n\tmounted: BillingWebhookRouteMountState;\n\tpreviousSigningSecretsConfigured: number;\n\tregistration?: BillingWebhookRegistrationRecord;\n\tsigningSecretConfigured: boolean;\n}): BillingWebhookOperationalStatus {\n\tconst delivery = input.delivery;\n\treturn {\n\t\tconnectionId: input.connectionId,\n\t\tdelivery: {\n\t\t\t...(delivery?.lastAcceptedAt\n\t\t\t\t? { lastAcceptedAt: delivery.lastAcceptedAt }\n\t\t\t\t: {}),\n\t\t\t...(delivery?.lastReceivedAt\n\t\t\t\t? { lastReceivedAt: delivery.lastReceivedAt }\n\t\t\t\t: {}),\n\t\t\t...(delivery?.lastRejectedAt\n\t\t\t\t? { lastRejectedAt: delivery.lastRejectedAt }\n\t\t\t\t: {}),\n\t\t\t...(delivery?.lastRejectionCode\n\t\t\t\t? { lastRejectionCode: delivery.lastRejectionCode }\n\t\t\t\t: {}),\n\t\t\t...(delivery?.lastRejectionMessage\n\t\t\t\t? { lastRejectionMessage: delivery.lastRejectionMessage }\n\t\t\t\t: {}),\n\t\t},\n\t\tkind: input.kind,\n\t\tprovider: \"mollie\",\n\t\treconciliation: {\n\t\t\t...(delivery?.lastReconciliationCompletedAt\n\t\t\t\t? { lastCompletedAt: delivery.lastReconciliationCompletedAt }\n\t\t\t\t: {}),\n\t\t\t...(delivery?.lastReconciliationError\n\t\t\t\t? { lastError: delivery.lastReconciliationError }\n\t\t\t\t: {}),\n\t\t\t...(delivery?.lastReconciliationFailedAt\n\t\t\t\t? { lastFailedAt: delivery.lastReconciliationFailedAt }\n\t\t\t\t: {}),\n\t\t\t...(delivery?.lastReconciliationOutcome\n\t\t\t\t? { lastOutcome: delivery.lastReconciliationOutcome }\n\t\t\t\t: {}),\n\t\t\t...(delivery?.lastReconciliationStartedAt\n\t\t\t\t? { lastStartedAt: delivery.lastReconciliationStartedAt }\n\t\t\t\t: {}),\n\t\t},\n\t\tregistration: {\n\t\t\tstatus: registrationStatus(input.registration?.status),\n\t\t\t...(input.registration?.lastReconciledAt\n\t\t\t\t? { lastReconciledAt: input.registration.lastReconciledAt }\n\t\t\t\t: {}),\n\t\t\t...(input.registration?.lastVerifiedAt\n\t\t\t\t? { lastVerifiedAt: input.registration.lastVerifiedAt }\n\t\t\t\t: {}),\n\t\t\t...(input.registration?.providerWebhookId\n\t\t\t\t? { providerWebhookId: input.registration.providerWebhookId }\n\t\t\t\t: {}),\n\t\t},\n\t\troute: {\n\t\t\tendpoint: input.endpoint,\n\t\t\tmounted: input.mounted,\n\t\t},\n\t\tverification: {\n\t\t\tpreviousSigningSecretsConfigured: input.previousSigningSecretsConfigured,\n\t\t\tsigningSecretConfigured: input.signingSecretConfigured,\n\t\t\tstrategy:\n\t\t\t\tinput.kind === \"classic\"\n\t\t\t\t\t? \"authoritative_refetch\"\n\t\t\t\t\t: \"signature_and_refetch\",\n\t\t},\n\t};\n}\n","import type { BillingConnectionIngestionHealth } from \"../types.ts\";\nimport type { BillingWebhookRegistrationRecord } from \"./types.ts\";\n\nexport function connectionIngestionHealthFromRegistrations(\n\trows: readonly BillingWebhookRegistrationRecord[],\n): BillingConnectionIngestionHealth {\n\tconst classic = rows.find((row) => row.kind === \"classic\");\n\tconst nextGen = rows.find((row) => row.kind === \"next_gen\");\n\tconst mapClassic = (): BillingConnectionIngestionHealth[\"classic\"] => {\n\t\tif (!classic) {\n\t\t\treturn \"unsupported\";\n\t\t}\n\t\tif (classic.status === \"error\") {\n\t\t\treturn \"error\";\n\t\t}\n\t\tif (classic.status === \"disabled\") {\n\t\t\treturn \"disabled\";\n\t\t}\n\t\treturn \"active\";\n\t};\n\tconst mapNextGen = (): BillingConnectionIngestionHealth[\"nextGen\"] => {\n\t\tif (!nextGen) {\n\t\t\treturn \"unsupported\";\n\t\t}\n\t\tif (nextGen.status === \"error\") {\n\t\t\treturn \"error\";\n\t\t}\n\t\tif (nextGen.status === \"degraded\") {\n\t\t\treturn \"degraded\";\n\t\t}\n\t\tif (nextGen.status === \"disabled\") {\n\t\t\treturn \"disabled\";\n\t\t}\n\t\tif (nextGen.status === \"drifted\") {\n\t\t\treturn \"degraded\";\n\t\t}\n\t\treturn \"active\";\n\t};\n\treturn {\n\t\tclassic: mapClassic(),\n\t\tdrifted: rows.some((row) => row.status === \"drifted\"),\n\t\tnextGen: mapNextGen(),\n\t\t...(classic?.lastVerifiedAt ?? nextGen?.lastVerifiedAt\n\t\t\t? { lastVerifiedAt: classic?.lastVerifiedAt ?? nextGen?.lastVerifiedAt }\n\t\t\t: {}),\n\t\t...(classic?.lastDeliveryAt ?? nextGen?.lastDeliveryAt\n\t\t\t? { lastDeliveryAt: classic?.lastDeliveryAt ?? nextGen?.lastDeliveryAt }\n\t\t\t: {}),\n\t};\n}\n","import type { BillingAdminOperation } from \"../capabilities.ts\";\n\nexport type AdminBillingOperation = BillingAdminOperation;\n\nexport const ADMIN_BILLING_OPERATIONS = [\n\t\"admin.connections.materialize\",\n\t\"admin.reconciliation.run\",\n\t\"admin.reconciliation.retry\",\n\t\"admin.webhooks.reconcile\",\n\t\"admin.webhooks.verify\",\n\t\"admin.webhooks.status\",\n\t\"admin.ingestion.health\",\n\t\"admin.conflicts.resolve\",\n] as const satisfies readonly AdminBillingOperation[];\n\nexport const ADMIN_OP = {\n\tconflictsResolve: \"admin.conflicts.resolve\",\n\tconnectionsMaterialize: \"admin.connections.materialize\",\n\tingestionHealth: \"admin.ingestion.health\",\n\treconciliationRetry: \"admin.reconciliation.retry\",\n\treconciliationRun: \"admin.reconciliation.run\",\n\twebhooksReconcile: \"admin.webhooks.reconcile\",\n\twebhooksStatus: \"admin.webhooks.status\",\n\twebhooksVerify: \"admin.webhooks.verify\",\n} as const satisfies Record<string, AdminBillingOperation>;\n\nexport function isAdminBillingOperation(\n\toperation: string,\n): operation is AdminBillingOperation {\n\treturn (ADMIN_BILLING_OPERATIONS as readonly string[]).includes(operation);\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 { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { denyBillingInvocation } from \"../rights.ts\";\nimport type { BillingSelfPort } from \"../types.ts\";\nimport { createSelfCheckout } from \"./checkout.ts\";\nimport {\n\tisSelfBillingOperation,\n\trejectSelfPayloadSelectors,\n\ttype SelfBillingOperation,\n} from \"./dispatch.ts\";\nimport { enrollSelfSubscription } from \"./enroll.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\tcancelSelfSubscription,\n\tgetSelfSubscription,\n} from \"./subscriptions.ts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn {};\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction requireString(record: Record<string, unknown>, key: string): string {\n\tconst value = record[key];\n\tif (typeof value !== \"string\" || !value.trim()) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"invoices.get\",\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\treturn value;\n}\n\nexport async function executeSelfBillingOperation(input: {\n\tappUrl?: string | null;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\toperation: SelfBillingOperation;\n\tpayload: unknown;\n\tprincipal: AthenaPrincipal;\n\tregistry?: BillingProviderRegistry;\n\tsql?: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): Promise<unknown> {\n\trejectSelfPayloadSelectors(input.payload);\n\tconst denied = denyBillingInvocation(input.principal, input.operation, {\n\t\tkind: \"session\",\n\t});\n\tif (denied) {\n\t\tthrow denied;\n\t}\n\tif (!input.sql) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tconst payload = asRecord(input.payload);\n\tconst allowedRedirectOrigins = billingRedirectAllowlistFromAppUrl(\n\t\tinput.appUrl,\n\t);\n\tswitch (input.operation) {\n\t\tcase \"self.invoices.list\":\n\t\t\treturn listSelfInvoices({\n\t\t\t\tlimit: typeof payload.limit === \"number\" ? payload.limit : undefined,\n\t\t\t\tprincipal: input.principal,\n\t\t\t\tsql: input.sql,\n\t\t\t});\n\t\tcase \"self.invoices.get\":\n\t\t\treturn getSelfInvoice({\n\t\t\t\tinvoiceId: requireString(payload, \"invoiceId\"),\n\t\t\t\tprincipal: input.principal,\n\t\t\t\tsql: input.sql,\n\t\t\t});\n\t\tcase \"self.payments.list\":\n\t\t\treturn listSelfPayments({\n\t\t\t\tlimit: typeof payload.limit === \"number\" ? payload.limit : undefined,\n\t\t\t\tprincipal: input.principal,\n\t\t\t\tsql: input.sql,\n\t\t\t});\n\t\tcase \"self.payments.get\":\n\t\t\treturn getSelfPayment({\n\t\t\t\tpaymentId: requireString(payload, \"paymentId\"),\n\t\t\t\tprincipal: input.principal,\n\t\t\t\tsql: input.sql,\n\t\t\t});\n\t\tcase \"self.subscription.get\":\n\t\t\treturn getSelfSubscription({\n\t\t\t\tprincipal: input.principal,\n\t\t\t\tsql: input.sql,\n\t\t\t\tsubscriptionId:\n\t\t\t\t\ttypeof payload.subscriptionId === \"string\"\n\t\t\t\t\t\t? payload.subscriptionId\n\t\t\t\t\t\t: undefined,\n\t\t\t});\n\t\tcase \"self.subscription.cancel\":\n\t\t\treturn cancelSelfSubscription({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tprincipal: input.principal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\tsql: input.sql,\n\t\t\t\tsubscriptionId: requireString(payload, \"subscriptionId\"),\n\t\t\t\ttestMode: input.testMode,\n\t\t\t});\n\t\tcase \"self.subscription.enroll\":\n\t\t\treturn enrollSelfSubscription({\n\t\t\t\tallowedRedirectOrigins,\n\t\t\t\tcancelUrl:\n\t\t\t\t\ttypeof payload.cancelUrl === \"string\" ? payload.cancelUrl : undefined,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tidempotencyKey: requireString(payload, \"idempotencyKey\"),\n\t\t\t\tprincipal: input.principal,\n\t\t\t\tpriceId: requireString(payload, \"priceId\"),\n\t\t\t\tregistry: input.registry,\n\t\t\t\tsql: input.sql,\n\t\t\t\tsuccessUrl:\n\t\t\t\t\ttypeof payload.successUrl === \"string\" ? payload.successUrl : undefined,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t});\n\t\tcase \"self.checkout.create\":\n\t\t\treturn createSelfCheckout({\n\t\t\t\tallowedRedirectOrigins,\n\t\t\t\tcancelUrl:\n\t\t\t\t\ttypeof payload.cancelUrl === \"string\" ? payload.cancelUrl : undefined,\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tidempotencyKey: requireString(payload, \"idempotencyKey\"),\n\t\t\t\tprincipal: input.principal,\n\t\t\t\tpriceId: requireString(payload, \"priceId\"),\n\t\t\t\tregistry: input.registry,\n\t\t\t\tsql: input.sql,\n\t\t\t\tsuccessUrl:\n\t\t\t\t\ttypeof payload.successUrl === \"string\" ? payload.successUrl : undefined,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t});\n\t\tcase \"self.checkout.resume\":\n\t\t\treturn resumeSelfCheckout({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tprincipal: input.principal,\n\t\t\t\tregistry: input.registry,\n\t\t\t\treturnToken: requireString(payload, \"returnToken\"),\n\t\t\t\tsql: input.sql,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t});\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = input.operation;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n\nexport { createUnavailableBillingSelfPort } from \"./unavailable.ts\";\n\nexport function createSelfBillingPort(input: {\n\tappUrl?: string | null;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tprincipal: AthenaPrincipal;\n\tregistry?: BillingProviderRegistry;\n\tsql?: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): BillingSelfPort {\n\tconst run = async (\n\t\toperation: SelfBillingOperation,\n\t\tpayload: unknown,\n\t): Promise<unknown> =>\n\t\texecuteSelfBillingOperation({\n\t\t\tappUrl: input.appUrl,\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\toperation,\n\t\t\tpayload,\n\t\t\tprincipal: input.principal,\n\t\t\tregistry: input.registry,\n\t\t\tsql: input.sql,\n\t\t\ttestMode: input.testMode,\n\t\t});\n\treturn {\n\t\tcheckout: {\n\t\t\tcreate: (payload) =>\n\t\t\t\trun(\"self.checkout.create\", payload) as ReturnType<\n\t\t\t\t\tBillingSelfPort[\"checkout\"][\"create\"]\n\t\t\t\t>,\n\t\t\tresume: (payload) =>\n\t\t\t\trun(\"self.checkout.resume\", payload) as ReturnType<\n\t\t\t\t\tBillingSelfPort[\"checkout\"][\"resume\"]\n\t\t\t\t>,\n\t\t},\n\t\tinvoices: {\n\t\t\tget: (payload) =>\n\t\t\t\trun(\"self.invoices.get\", payload) as ReturnType<\n\t\t\t\t\tBillingSelfPort[\"invoices\"][\"get\"]\n\t\t\t\t>,\n\t\t\tlist: (payload) =>\n\t\t\t\trun(\"self.invoices.list\", payload ?? {}) as ReturnType<\n\t\t\t\t\tBillingSelfPort[\"invoices\"][\"list\"]\n\t\t\t\t>,\n\t\t},\n\t\tpayments: {\n\t\t\tget: (payload) =>\n\t\t\t\trun(\"self.payments.get\", payload) as ReturnType<\n\t\t\t\t\tBillingSelfPort[\"payments\"][\"get\"]\n\t\t\t\t>,\n\t\t\tlist: (payload) =>\n\t\t\t\trun(\"self.payments.list\", payload ?? {}) as ReturnType<\n\t\t\t\t\tBillingSelfPort[\"payments\"][\"list\"]\n\t\t\t\t>,\n\t\t},\n\t\tsubscription: {\n\t\t\tcancel: (payload) =>\n\t\t\t\trun(\"self.subscription.cancel\", payload) as ReturnType<\n\t\t\t\t\tBillingSelfPort[\"subscription\"][\"cancel\"]\n\t\t\t\t>,\n\t\t\tenroll: (payload) =>\n\t\t\t\trun(\"self.subscription.enroll\", payload) as ReturnType<\n\t\t\t\t\tBillingSelfPort[\"subscription\"][\"enroll\"]\n\t\t\t\t>,\n\t\t\tget: (payload) =>\n\t\t\t\trun(\"self.subscription.get\", payload ?? {}) as ReturnType<\n\t\t\t\t\tBillingSelfPort[\"subscription\"][\"get\"]\n\t\t\t\t>,\n\t\t},\n\t};\n}\n\nexport { isSelfBillingOperation };\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError, AthenaBillingError } from \"../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\";\nimport { requireBillingPrincipalUserId } from \"../../subject/principal-user.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingCheckout, BillingPrice } from \"../../types.ts\";\nimport { executeLocalBillingPaymentCreate } from \"../local/execute/payments.ts\";\nimport { executeLocalBillingPriceList } from \"../local/execute/price-list.ts\";\nimport { billingHalLinkHref } from \"../hal-link-href.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport { resolveBillingCheckoutIntent } from \"./checkout-intent.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport {\n\tcheckoutAttemptExpiresAtIso,\n\tgetCheckoutSessionByIdempotency,\n\tinsertCheckoutSession,\n\tisCheckoutSessionResumeExpired,\n\tupdateCheckoutSession,\n} from \"./enrollment-session.ts\";\nimport { resolveAllowedBillingRedirectUrl } from \"./redirect-url.ts\";\nimport {\n\tappendBillingReturnToken,\n} from \"./return-query.ts\";\nimport { createBillingReturnNonce } from \"./return-token.ts\";\n\nconst OWNED_SUBSCRIPTION_CUSTOMER_SQL = `\nSELECT provider_customer_id\nFROM billing.billing_subscriptions\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 1\n`;\n\nconst OWNED_PAYMENT_CUSTOMER_SQL = `\nSELECT provider_customer_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 1\n`;\n\nfunction checkoutUrlFromRaw(raw: unknown): string | null {\n\treturn billingHalLinkHref(raw, \"checkout\");\n}\n\nasync function ownedProviderCustomerId(input: {\n\tprincipal: AthenaPrincipal;\n\tsql: BillingSqlExecutor;\n}): Promise<string | undefined> {\n\tconst subjectUserId = requireBillingPrincipalUserId(input.principal);\n\tconst fromSubscription = await input.sql.query(\n\t\tOWNED_SUBSCRIPTION_CUSTOMER_SQL,\n\t\t[subjectUserId],\n\t);\n\tconst subscriptionCustomer = fromSubscription.rows[0]?.provider_customer_id;\n\tif (typeof subscriptionCustomer === \"string\" && subscriptionCustomer.trim()) {\n\t\treturn subscriptionCustomer;\n\t}\n\tconst fromPayment = await input.sql.query(OWNED_PAYMENT_CUSTOMER_SQL, [\n\t\tsubjectUserId,\n\t]);\n\tconst paymentCustomer = fromPayment.rows[0]?.provider_customer_id;\n\tif (typeof paymentCustomer === \"string\" && paymentCustomer.trim()) {\n\t\treturn paymentCustomer;\n\t}\n\treturn undefined;\n}\n\nexport async function createSelfCheckout(input: {\n\tallowedRedirectOrigins?: readonly string[];\n\tcancelUrl?: string;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tidempotencyKey: string;\n\tprincipal: AthenaPrincipal;\n\tpriceId: string;\n\tregistry?: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\tsuccessUrl?: string;\n\ttestMode?: boolean;\n}): Promise<BillingCheckout> {\n\tconst subjectUserId = requireBillingPrincipalUserId(input.principal);\n\tconst command = prepareBillingCommand({\n\t\toperation: \"self.checkout.create\",\n\t\tpayload: {\n\t\t\tcancelUrl: input.cancelUrl,\n\t\t\tidempotencyKey: input.idempotencyKey,\n\t\t\tpriceId: input.priceId,\n\t\t\tsuccessUrl: input.successUrl,\n\t\t},\n\t});\n\tconst priceId = String(command.payload.priceId);\n\tconst idempotencyKey = String(command.payload.idempotencyKey);\n\tif (input.registry == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.checkout.create\",\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tconst delegated = selfDelegatedBillingPrincipal(input.principal, [\n\t\t\"prices.list\",\n\t\t\"payments.create\",\n\t]);\n\tconst prices = await executeLocalBillingPriceList({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {},\n\t\tprincipal: delegated,\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tconst price: BillingPrice | undefined = prices.items.find(\n\t\t(item) => item.id === priceId,\n\t);\n\tif (price == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.checkout.create\",\n\t\t\treason: \"missing_catalog\",\n\t\t});\n\t}\n\tconst intent = resolveBillingCheckoutIntent(price);\n\tif (intent.kind === \"recurring\") {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\tmessage:\n\t\t\t\t\"Recurring catalog prices require recurring enrollment and must not execute as one-off payments.\",\n\t\t\toperation: \"self.checkout.create\",\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\tconst allowedRedirectOrigins = input.allowedRedirectOrigins ?? [];\n\tconst successUrl = resolveAllowedBillingRedirectUrl({\n\t\tallowedOrigins: allowedRedirectOrigins,\n\t\tfield: \"successUrl\",\n\t\turl: input.successUrl,\n\t});\n\tconst cancelUrl = resolveAllowedBillingRedirectUrl({\n\t\tallowedOrigins: allowedRedirectOrigins,\n\t\tfield: \"cancelUrl\",\n\t\turl: input.cancelUrl,\n\t});\n\tif (successUrl == null && cancelUrl == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.checkout.create\",\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\tconst existing = await getCheckoutSessionByIdempotency({\n\t\tidempotencyKey,\n\t\tsql: input.sql,\n\t\tsubjectId: subjectUserId,\n\t\tsubjectKind: \"user\",\n\t});\n\tif (existing) {\n\t\tif (isCheckoutSessionResumeExpired(existing)) {\n\t\t\tthrow new AthenaBillingError({\n\t\t\t\tbody: { sessionId: existing.id },\n\t\t\t\tcode: \"ATHENA_BILLING_INVALID_REQUEST\",\n\t\t\t\tendpoint: \"\",\n\t\t\t\tmessage:\n\t\t\t\t\t\"Billing checkout session has expired. Retry checkout with a new idempotencyKey.\",\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tstatus: 400,\n\t\t\t});\n\t\t}\n\t\tif (\n\t\t\texisting.providerPaymentId != null &&\n\t\t\texisting.providerPaymentId.trim() !== \"\"\n\t\t) {\n\t\t\treturn {\n\t\t\t\tcheckoutUrl: existing.checkoutUrl,\n\t\t\t\tmetadata: {\n\t\t\t\t\tpaymentId: existing.providerPaymentId,\n\t\t\t\t\tpriceId: existing.priceId,\n\t\t\t\t\tsessionId: existing.id,\n\t\t\t\t},\n\t\t\t\tprovider: existing.provider,\n\t\t\t\tproviderCheckoutId: existing.providerPaymentId,\n\t\t\t\traw: {},\n\t\t\t};\n\t\t}\n\t}\n\tconst customerId = await ownedProviderCustomerId({\n\t\tprincipal: input.principal,\n\t\tsql: input.sql,\n\t});\n\tconst nonce = createBillingReturnNonce();\n\tconst expiresAt = checkoutAttemptExpiresAtIso();\n\tconst correlatedSuccess = successUrl\n\t\t? appendBillingReturnToken(successUrl, nonce.token)\n\t\t: undefined;\n\tconst correlatedCancel = cancelUrl\n\t\t? appendBillingReturnToken(cancelUrl, nonce.token)\n\t\t: undefined;\n\tconst redirectUrl = correlatedSuccess ?? correlatedCancel;\n\tif (redirectUrl == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.checkout.create\",\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\tconst sessionId = existing?.id ?? crypto.randomUUID();\n\tconst session = existing\n\t\t? await updateCheckoutSession({\n\t\t\t\texpiresAt,\n\t\t\t\tid: existing.id,\n\t\t\t\treturnNonceHash: nonce.hash,\n\t\t\t\tsql: input.sql,\n\t\t\t\tstatus: existing.status,\n\t\t\t})\n\t\t: await insertCheckoutSession({\n\t\t\t\tcheckoutUrl: null,\n\t\t\t\texpiresAt,\n\t\t\t\tid: sessionId,\n\t\t\t\tidempotencyKey,\n\t\t\t\tkind: \"one_off\",\n\t\t\t\tmetadata: {\n\t\t\t\t\tathenaCheckoutSessionId: sessionId,\n\t\t\t\t\tcancelUrl: correlatedCancel,\n\t\t\t\t\tpaymentIdempotencyKey: idempotencyKey,\n\t\t\t\t\tpriceId: price.id,\n\t\t\t\t\tsuccessUrl: correlatedSuccess,\n\t\t\t\t},\n\t\t\t\tpriceId: price.id,\n\t\t\t\tprovider: \"mollie\",\n\t\t\t\tproviderCustomerId: customerId ?? null,\n\t\t\t\tproviderPaymentId: null,\n\t\t\t\tproviderSubscriptionId: null,\n\t\t\t\treturnNonceHash: nonce.hash,\n\t\t\t\tsql: input.sql,\n\t\t\t\tstatus: \"first_payment_required\",\n\t\t\t\tsubjectId: subjectUserId,\n\t\t\t\tsubjectKind: \"user\",\n\t\t\t});\n\tconst resolvedSessionId = session.id;\n\tconst payment = await executeLocalBillingPaymentCreate({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {\n\t\t\tamount: price.amount,\n\t\t\tcustomerId,\n\t\t\tdescription: `Athena checkout ${price.id}`,\n\t\t\tidempotencyKey,\n\t\t\tmetadata: {\n\t\t\t\tathenaCheckoutSessionId: resolvedSessionId,\n\t\t\t\tathenaSubjectId: subjectUserId,\n\t\t\t\tathenaSubjectKind: \"user\",\n\t\t\t\tpriceId: price.id,\n\t\t\t},\n\t\t\tredirectUrl,\n\t\t},\n\t\tprincipal: delegated,\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tconst checkoutUrl = checkoutUrlFromRaw(payment.raw);\n\tawait updateCheckoutSession({\n\t\tcheckoutUrl,\n\t\tid: resolvedSessionId,\n\t\tproviderCustomerId: payment.providerCustomerId ?? customerId ?? null,\n\t\tproviderPaymentId: payment.providerPaymentId,\n\t\tsql: input.sql,\n\t\tstatus: \"first_payment_required\",\n\t});\n\treturn {\n\t\tcheckoutUrl,\n\t\tmetadata: {\n\t\t\tpaymentId: payment.providerPaymentId,\n\t\t\tpriceId: price.id,\n\t\t\tsessionId: resolvedSessionId,\n\t\t},\n\t\tprovider: payment.provider,\n\t\tproviderCheckoutId: payment.providerPaymentId,\n\t\traw: payment.raw,\n\t};\n}\n","import { AthenaBillingError } from \"../../errors.ts\";\n\nconst FORBIDDEN_SELF_SELECTORS = [\n\t\"userId\",\n\t\"email\",\n\t\"customerId\",\n\t\"provider\",\n\t\"connectionId\",\n] as const;\n\nexport function rejectSelfPayloadSelectors(payload: unknown): void {\n\tif (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n\t\treturn;\n\t}\n\tconst record = payload as Record<string, unknown>;\n\tfor (const key of FORBIDDEN_SELF_SELECTORS) {\n\t\tif (record[key] != null) {\n\t\t\tthrow new AthenaBillingError({\n\t\t\t\tbody: { selector: key },\n\t\t\t\tcode: \"ATHENA_BILLING_INVALID_REQUEST\",\n\t\t\t\tendpoint: \"\",\n\t\t\t\tmessage: `Customer billing payloads cannot select ${key}.`,\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tstatus: 400,\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport type SelfBillingOperation =\n\t| \"self.invoices.list\"\n\t| \"self.invoices.get\"\n\t| \"self.payments.list\"\n\t| \"self.payments.get\"\n\t| \"self.subscription.get\"\n\t| \"self.subscription.cancel\"\n\t| \"self.subscription.enroll\"\n\t| \"self.checkout.create\"\n\t| \"self.checkout.resume\";\n\nexport function isSelfBillingOperation(\n\toperation: string,\n): operation is SelfBillingOperation {\n\treturn (\n\t\toperation === \"self.invoices.list\" ||\n\t\toperation === \"self.invoices.get\" ||\n\t\toperation === \"self.payments.list\" ||\n\t\toperation === \"self.payments.get\" ||\n\t\toperation === \"self.subscription.get\" ||\n\t\toperation === \"self.subscription.cancel\" ||\n\t\toperation === \"self.subscription.enroll\" ||\n\t\toperation === \"self.checkout.create\" ||\n\t\toperation === \"self.checkout.resume\"\n\t);\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\tconst raw =\n\t\ttypeof limit === \"number\" && Number.isFinite(limit)\n\t\t\t? Math.trunc(limit)\n\t\t\t: SELF_LIST_LIMIT_DEFAULT;\n\treturn 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\treturn {\n\t\tamount: {\n\t\t\tcurrency:\n\t\t\t\ttypeof row.amount_currency === \"string\" ? row.amount_currency : \"EUR\",\n\t\t\tvalue: String(row.amount_value ?? \"0\"),\n\t\t},\n\t\tmetadata: row.metadata ?? {},\n\t\tprovider: row.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n\t\tproviderInvoiceId: String(row.provider_invoice_id ?? \"\"),\n\t\traw: row.raw ?? {},\n\t\tstatus: String(row.status ?? \"open\"),\n\t} as BillingInvoice;\n}\n\nexport async function listSelfInvoices(input: {\n\tlimit?: number;\n\tprincipal: AthenaPrincipal;\n\tsql: BillingSqlExecutor;\n}): Promise<BillingPage<BillingInvoice>> {\n\tconst result = await input.sql.query(LIST_OWNED_INVOICES_SQL, [\n\t\t\"user\",\n\t\tinput.principal.userId,\n\t\tclampSelfListLimit(input.limit),\n\t]);\n\treturn { items: result.rows.map(asInvoice) };\n}\n\nexport async function getSelfInvoice(input: {\n\tinvoiceId: string;\n\tprincipal: AthenaPrincipal;\n\tsql: BillingSqlExecutor;\n}): Promise<BillingInvoice> {\n\tconst result = await input.sql.query(GET_OWNED_INVOICE_SQL, [\n\t\tinput.invoiceId,\n\t\t\"user\",\n\t\tinput.principal.userId,\n\t]);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow billingSubjectNotFound();\n\t}\n\treturn 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\tif (value instanceof Date && !Number.isNaN(value.getTime())) {\n\t\treturn value.toISOString();\n\t}\n\tif (typeof value === \"string\" && value.trim().length > 0) {\n\t\tconst parsed = Date.parse(value);\n\t\tif (Number.isFinite(parsed)) {\n\t\t\treturn new Date(parsed).toISOString();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function asSelfPaymentView(\n\trow: Record<string, unknown>,\n): BillingSelfPaymentView {\n\tconst createdAt =\n\t\tisoDate(row.created_at) ?? isoDate(row.ingested_at) ?? new Date(0).toISOString();\n\tconst paidAt = isoDate(row.paid_at);\n\tconst description =\n\t\ttypeof row.description === \"string\" && row.description.trim().length > 0\n\t\t\t? row.description\n\t\t\t: undefined;\n\tconst metadata = row.metadata;\n\tconst metadataPriceId =\n\t\tmetadata != null &&\n\t\ttypeof metadata === \"object\" &&\n\t\t!Array.isArray(metadata) &&\n\t\ttypeof (metadata as { priceId?: unknown }).priceId === \"string\"\n\t\t\t? (metadata as { priceId: string }).priceId\n\t\t\t: undefined;\n\tconst priceId =\n\t\ttypeof row.price_id === \"string\" && row.price_id.trim().length > 0\n\t\t\t? row.price_id\n\t\t\t: metadataPriceId && metadataPriceId.trim().length > 0\n\t\t\t\t? metadataPriceId\n\t\t\t\t: undefined;\n\tconst reference =\n\t\ttypeof row.provider_payment_id === \"string\" &&\n\t\trow.provider_payment_id.trim().length > 0\n\t\t\t? row.provider_payment_id\n\t\t\t: undefined;\n\treturn {\n\t\tamount: {\n\t\t\tcurrency:\n\t\t\t\ttypeof row.amount_currency === \"string\" ? row.amount_currency : \"EUR\",\n\t\t\tvalue: String(row.amount_value ?? \"0\"),\n\t\t},\n\t\tcreatedAt,\n\t\tid: String(row.id ?? \"\"),\n\t\tprovider: row.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n\t\tstatus: String(row.status ?? \"pending\"),\n\t\t...(description ? { description } : {}),\n\t\t...(paidAt ? { paidAt } : {}),\n\t\t...(priceId ? { priceId } : {}),\n\t\t...(reference ? { reference } : {}),\n\t};\n}\n\nexport async function listSelfPayments(input: {\n\tlimit?: number;\n\tprincipal: AthenaPrincipal;\n\tsql: BillingSqlExecutor;\n}): Promise<BillingPage<BillingSelfPaymentView>> {\n\tconst result = await input.sql.query(LIST_OWNED_PAYMENTS_SQL, [\n\t\t\"user\",\n\t\tinput.principal.userId,\n\t\tclampSelfListLimit(input.limit),\n\t]);\n\treturn { items: result.rows.map(asSelfPaymentView) };\n}\n\nexport async function getSelfPayment(input: {\n\tpaymentId: string;\n\tprincipal: AthenaPrincipal;\n\tsql: BillingSqlExecutor;\n}): Promise<BillingSelfPaymentView> {\n\tconst result = await input.sql.query(GET_OWNED_PAYMENT_SQL, [\n\t\tinput.paymentId,\n\t\t\"user\",\n\t\tinput.principal.userId,\n\t]);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow billingSubjectNotFound();\n\t}\n\treturn 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\tbillingSubjectNotFound,\n\tisAthenaBillingSubjectError,\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 {\n\texecuteLocalBillingPaymentCreate,\n\texecuteLocalBillingPaymentGet,\n} from \"../local/execute/payments.ts\";\nimport { executeLocalBillingPriceList } from \"../local/execute/price-list.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport type { BillingSelfCheckoutResumeResult } from \"../types.ts\";\nimport { advanceSelfSubscriptionEnrollment } from \"./advance-enrollment.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport {\n\ttype BillingCheckoutSessionRecord,\n\ttype BillingCheckoutSessionStatus,\n\tgetCheckoutSessionByReturnNonce,\n\tisCheckoutSessionResumeExpired,\n\tupdateCheckoutSession,\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\tif (\n\t\tvalue === \"authorized\" ||\n\t\tvalue === \"paid\" ||\n\t\tvalue === \"failed\" ||\n\t\tvalue === \"canceled\" ||\n\t\tvalue === \"refunded\"\n\t) {\n\t\treturn value;\n\t}\n\treturn \"pending\";\n}\n\nfunction sessionStatusFromPayment(\n\tstatus: BillingPaymentStatus,\n\tcurrent: BillingCheckoutSessionStatus,\n): BillingCheckoutSessionStatus {\n\tif (current === \"enrolled\") {\n\t\treturn \"enrolled\";\n\t}\n\tif (status === \"paid\" || status === \"authorized\" || status === \"refunded\") {\n\t\treturn \"first_payment_paid\";\n\t}\n\tif (status === \"failed\") {\n\t\treturn \"first_payment_failed\";\n\t}\n\tif (status === \"canceled\") {\n\t\treturn \"first_payment_canceled\";\n\t}\n\treturn \"first_payment_required\";\n}\n\nfunction paymentToCanonical(payment: BillingPayment): CanonicalPayment {\n\treturn {\n\t\tamount: payment.amount,\n\t\tcreatedAt: payment.createdAt,\n\t\tdescription: payment.description,\n\t\tkind: \"payment\",\n\t\tmetadata: payment.metadata ?? {},\n\t\tpaidAt: payment.paidAt,\n\t\tprovider: payment.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n\t\tproviderCustomerId: payment.providerCustomerId,\n\t\tproviderPaymentId: payment.providerPaymentId,\n\t\traw: payment.raw,\n\t\tstatus: asPaymentStatus(payment.status),\n\t};\n}\n\nfunction metadataString(\n\tmetadata: Record<string, unknown>,\n\tkey: string,\n): string | undefined {\n\tconst value = metadata[key];\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value\n\t\t: undefined;\n}\n\nfunction paymentCreateIdempotencyKey(\n\tsession: BillingCheckoutSessionRecord,\n): string {\n\tconst stored = metadataString(session.metadata, \"paymentIdempotencyKey\");\n\tif (stored) {\n\t\treturn stored;\n\t}\n\tif (session.kind === \"one_off\") {\n\t\treturn session.idempotencyKey;\n\t}\n\treturn `${session.idempotencyKey}:first-payment`;\n}\n\nasync function recoverProviderPayment(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tprincipal: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\tsession: BillingCheckoutSessionRecord;\n\ttestMode?: boolean;\n}): Promise<BillingPayment | undefined> {\n\tconst delegated = selfDelegatedBillingPrincipal(input.principal, [\n\t\t\"prices.list\",\n\t\t\"payments.create\",\n\t]);\n\tconst prices = await executeLocalBillingPriceList({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {},\n\t\tprincipal: delegated,\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tconst price = prices.items.find((item) => item.id === input.session.priceId);\n\tif (price == null) {\n\t\treturn undefined;\n\t}\n\tconst redirectUrl =\n\t\tmetadataString(input.session.metadata, \"successUrl\") ??\n\t\tmetadataString(input.session.metadata, \"cancelUrl\");\n\tif (redirectUrl == null) {\n\t\treturn undefined;\n\t}\n\treturn executeLocalBillingPaymentCreate({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {\n\t\t\tamount: price.amount,\n\t\t\tcustomerId: input.session.providerCustomerId ?? undefined,\n\t\t\tdescription:\n\t\t\t\tinput.session.kind === \"one_off\"\n\t\t\t\t\t? `Athena checkout ${price.id}`\n\t\t\t\t\t: `Athena first payment ${price.id}`,\n\t\t\tidempotencyKey: paymentCreateIdempotencyKey(input.session),\n\t\t\tmetadata: {\n\t\t\t\tathenaCheckoutSessionId: input.session.id,\n\t\t\t\tathenaSubjectId: input.session.subjectId,\n\t\t\t\tathenaSubjectKind: input.session.subjectKind,\n\t\t\t\tpriceId: price.id,\n\t\t\t},\n\t\t\tredirectUrl,\n\t\t\t...(input.session.kind === \"one_off\"\n\t\t\t\t? {}\n\t\t\t\t: { sequenceType: \"first\" as const }),\n\t\t},\n\t\tprincipal: delegated,\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n}\n\nexport async function resumeSelfCheckout(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tprincipal: AthenaPrincipal;\n\tregistry?: BillingProviderRegistry;\n\treturnToken: string;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): Promise<BillingSelfCheckoutResumeResult> {\n\tconst subjectUserId = requireBillingPrincipalUserId(input.principal);\n\tconst command = prepareBillingCommand({\n\t\toperation: \"self.checkout.resume\",\n\t\tpayload: { returnToken: input.returnToken },\n\t});\n\tconst returnToken = String(command.payload.returnToken);\n\tconst session = await getCheckoutSessionByReturnNonce({\n\t\treturnNonceHash: hashBillingReturnNonce(returnToken),\n\t\tsql: input.sql,\n\t\tsubjectId: subjectUserId,\n\t\tsubjectKind: \"user\",\n\t});\n\tif (session == null || isCheckoutSessionResumeExpired(session)) {\n\t\tthrow billingSubjectNotFound();\n\t}\n\tif (input.registry == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.checkout.resume\",\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tconst delegated = selfDelegatedBillingPrincipal(input.principal, [\n\t\t\"payments.get\",\n\t]);\n\tlet paymentId = session.providerPaymentId;\n\tif (paymentId == null || paymentId.trim() === \"\") {\n\t\tconst recovered = await recoverProviderPayment({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tprincipal: input.principal,\n\t\t\tregistry: input.registry,\n\t\t\tsession,\n\t\t\ttestMode: input.testMode,\n\t\t});\n\t\tif (recovered) {\n\t\t\tpaymentId = recovered.providerPaymentId;\n\t\t\tawait updateCheckoutSession({\n\t\t\t\tid: session.id,\n\t\t\t\tproviderCustomerId:\n\t\t\t\t\trecovered.providerCustomerId ?? session.providerCustomerId,\n\t\t\t\tproviderPaymentId: paymentId,\n\t\t\t\tsql: input.sql,\n\t\t\t\tstatus: session.status,\n\t\t\t});\n\t\t}\n\t}\n\tif (paymentId == null || paymentId.trim() === \"\") {\n\t\treturn {\n\t\t\tcheckout: {\n\t\t\t\tid: session.id,\n\t\t\t\tkind: session.kind === \"one_off\" ? \"one_off\" : \"subscription_enrollment\",\n\t\t\t\tpriceId: session.priceId,\n\t\t\t\tstatus: session.status,\n\t\t\t},\n\t\t\tpayment: null,\n\t\t};\n\t}\n\tconst payment = await executeLocalBillingPaymentGet({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: { id: paymentId },\n\t\tprincipal: delegated,\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tlet view;\n\ttry {\n\t\tview = await persistOwnedPayment({\n\t\t\tconnectionId: session.connectionId,\n\t\t\tpayment,\n\t\t\tprincipal: input.principal,\n\t\t\tsql: input.sql,\n\t\t});\n\t} catch (error) {\n\t\tif (isAthenaBillingSubjectError(error) && error.status === 409) {\n\t\t\tthrow billingSubjectNotFound();\n\t\t}\n\t\tthrow error;\n\t}\n\tconst nextStatus = sessionStatusFromPayment(\n\t\tasPaymentStatus(payment.status),\n\t\tsession.status,\n\t);\n\tif (nextStatus !== session.status) {\n\t\tawait updateCheckoutSession({\n\t\t\tid: session.id,\n\t\t\tproviderCustomerId:\n\t\t\t\tpayment.providerCustomerId ?? session.providerCustomerId,\n\t\t\tproviderPaymentId: payment.providerPaymentId,\n\t\t\tsql: input.sql,\n\t\t\tstatus: nextStatus,\n\t\t});\n\t}\n\tif (session.kind !== \"one_off\") {\n\t\tawait advanceSelfSubscriptionEnrollment({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tdocument: paymentToCanonical(payment),\n\t\t\tregistry: input.registry,\n\t\t\tsql: input.sql,\n\t\t\ttestMode: input.testMode,\n\t\t});\n\t}\n\treturn {\n\t\tcheckout: {\n\t\t\tid: session.id,\n\t\t\tkind: session.kind === \"one_off\" ? \"one_off\" : \"subscription_enrollment\",\n\t\t\tpriceId: session.priceId,\n\t\t\tstatus: nextStatus,\n\t\t},\n\t\tpayment: view,\n\t};\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\trequireReadyBillingConnectionId,\n\tresolveActiveBillingConnection,\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\tconnectionId?: string | null;\n\tpayment: BillingPayment;\n\tprincipal: AthenaPrincipal;\n\tsql: BillingSqlExecutor;\n}): Promise<BillingSelfPaymentView> {\n\tconst connectionId =\n\t\tinput.connectionId?.trim() ||\n\t\trequireReadyBillingConnectionId(\n\t\t\tawait resolveActiveBillingConnection(input.sql),\n\t\t\t\"self.checkout.resume\",\n\t\t);\n\tif (connectionId.length === 0) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.checkout.resume\",\n\t\t\treason: \"provider_connection_missing\",\n\t\t});\n\t}\n\tconst result = await input.sql.query(PERSIST_OWNED_PAYMENT_SQL, [\n\t\tconnectionId,\n\t\tinput.payment.provider,\n\t\tinput.payment.providerPaymentId,\n\t\tinput.payment.providerCustomerId ?? null,\n\t\tinput.payment.status,\n\t\tinput.payment.amount.currency,\n\t\tinput.payment.amount.value,\n\t\tinput.payment.description ?? null,\n\t\tJSON.stringify(input.payment.metadata ?? {}),\n\t\tJSON.stringify(input.payment.raw ?? {}),\n\t\tinput.payment.paidAt ?? null,\n\t\tinput.payment.createdAt ?? null,\n\t\trequireBillingPrincipalUserId(input.principal),\n\t]);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow billingSubjectConflict(\n\t\t\t\"This provider payment is already bound to another billing subject.\",\n\t\t);\n\t}\n\treturn asSelfPaymentView(row);\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 { executeLocalBillingSubscriptionCancel } from \"../local/execute/subscriptions.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.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\treturn {\n\t\tid: String(row.id ?? \"\"),\n\t\tmetadata: row.metadata ?? {},\n\t\tprovider: row.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n\t\tproviderCustomerId: String(row.provider_customer_id ?? \"\"),\n\t\tproviderSubscriptionId: String(row.provider_subscription_id ?? \"\"),\n\t\traw: row.raw ?? {},\n\t\tstatus: String(row.status ?? \"active\"),\n\t} as BillingSubscription;\n}\n\nconst CANONICAL_UUID =\n\t/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nfunction optionalCanonicalUuid(value: string | undefined): string | null {\n\tif (value == null || value.trim() === \"\") {\n\t\treturn null;\n\t}\n\tif (!CANONICAL_UUID.test(value.trim())) {\n\t\tthrow billingSubjectNotFound();\n\t}\n\treturn value.trim();\n}\n\nexport async function getSelfSubscription(input: {\n\tprincipal: AthenaPrincipal;\n\tsql: BillingSqlExecutor;\n\tsubscriptionId?: string;\n}): Promise<BillingSubscription> {\n\tconst subscriptionId = optionalCanonicalUuid(input.subscriptionId);\n\tconst result = await input.sql.query(GET_OWNED_SUBSCRIPTION_SQL, [\n\t\tsubscriptionId,\n\t\t\"user\",\n\t\tinput.principal.userId,\n\t]);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow billingSubjectNotFound();\n\t}\n\treturn asSubscription(row);\n}\n\nexport async function cancelSelfSubscription(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tprincipal: AthenaPrincipal;\n\tregistry?: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\tsubscriptionId: string;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\tconst owned = await input.sql.query(GET_OWNED_SUBSCRIPTION_SQL, [\n\t\tinput.subscriptionId,\n\t\t\"user\",\n\t\tinput.principal.userId,\n\t]);\n\tconst ownedRow = owned.rows[0];\n\tif (!ownedRow) {\n\t\tthrow billingSubjectNotFound();\n\t}\n\tif (input.registry == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.subscription.cancel\",\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tconst ownedSubscription = asSubscription(ownedRow);\n\tawait executeLocalBillingSubscriptionCancel({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {\n\t\t\tcustomerId: ownedSubscription.providerCustomerId,\n\t\t\tsubscriptionId: ownedSubscription.providerSubscriptionId,\n\t\t},\n\t\tprincipal: selfDelegatedBillingPrincipal(input.principal, [\n\t\t\t\"subscriptions.cancel\",\n\t\t]),\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tconst result = await input.sql.query(CANCEL_OWNED_SUBSCRIPTION_SQL, [\n\t\tinput.subscriptionId,\n\t\t\"user\",\n\t\tinput.principal.userId,\n\t]);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow billingSubjectNotFound();\n\t}\n\treturn asSubscription(row);\n}\n","import type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n\tBillingGetInvoiceInput,\n\tBillingInvoice,\n\tBillingListInvoicesInput,\n} from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type { AthenaPrincipal } from \"../../../../runtime/data/principal.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\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingGetInvoiceInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingInvoice> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"invoices.get\",\n\t\tport: \"invoices\",\n\t\trequest: input,\n\t\tinvoke: (invoices, context, payload) =>\n\t\t\tinvoices.get(context, { invoiceId: payload.invoiceId }),\n\t});\n}\n\nexport async function executeLocalBillingInvoiceList(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingListInvoicesInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPage<BillingInvoice>> {\n\treturn executeLocalBillingOperation({\n\t\tbefore: (payload) =>\n\t\t\trejectUnsupportedListOffset(\"invoices.list\", payload.offset),\n\t\toperation: \"invoices.list\",\n\t\tport: \"invoices\",\n\t\trequest: input,\n\t\tinvoke: (invoices, context, payload) =>\n\t\t\tinvoices.list(context, {\n\t\t\t\tcursor: payload.cursor,\n\t\t\t\tlimit: payload.limit,\n\t\t\t}),\n\t});\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n\tBillingCreatePaymentLinkInput,\n\tBillingDeletePaymentLinkInput,\n\tBillingGetPaymentLinkInput,\n\tBillingListPaymentLinksInput,\n\tBillingPaymentLink,\n\tBillingUpdatePaymentLinkInput,\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\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingCreatePaymentLinkInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPaymentLink> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"paymentLinks.create\",\n\t\tport: \"paymentLinks\",\n\t\trequest: input,\n\t\tsafety: \"defer-then-finalize\",\n\t\tinvoke: (paymentLinks, context, payload) =>\n\t\t\tpaymentLinks.create(context, {\n\t\t\t\tamount: payload.amount,\n\t\t\t\tdescription: payload.description,\n\t\t\t\tidempotencyKey: payload.idempotencyKey,\n\t\t\t\tredirectUrl: payload.redirectUrl,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingPaymentLinkGet(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingGetPaymentLinkInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPaymentLink> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"paymentLinks.get\",\n\t\tport: \"paymentLinks\",\n\t\trequest: input,\n\t\tinvoke: (paymentLinks, context, payload) =>\n\t\t\tpaymentLinks.get(context, { id: payload.id }),\n\t});\n}\n\nexport async function executeLocalBillingPaymentLinkList(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingListPaymentLinksInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPage<BillingPaymentLink>> {\n\treturn executeLocalBillingOperation({\n\t\tbefore: (payload) =>\n\t\t\trejectUnsupportedListOffset(\"paymentLinks.list\", payload.offset),\n\t\toperation: \"paymentLinks.list\",\n\t\tport: \"paymentLinks\",\n\t\trequest: input,\n\t\tinvoke: (paymentLinks, context, payload) =>\n\t\t\tpaymentLinks.list(context, {\n\t\t\t\tcursor: payload.cursor,\n\t\t\t\tlimit: payload.limit,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingPaymentLinkUpdate(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingUpdatePaymentLinkInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPaymentLink> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"paymentLinks.update\",\n\t\tport: \"paymentLinks\",\n\t\trequest: input,\n\t\tinvoke: (paymentLinks, context, payload) =>\n\t\t\tpaymentLinks.update(context, {\n\t\t\t\tdescription: payload.description,\n\t\t\t\tid: payload.id,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingPaymentLinkDelete(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingDeletePaymentLinkInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<void> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"paymentLinks.delete\",\n\t\tport: \"paymentLinks\",\n\t\trequest: input,\n\t\tinvoke: async (paymentLinks, context, payload) => {\n\t\t\tawait paymentLinks.delete(context, { id: payload.id });\n\t\t},\n\t});\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n\tBillingListProductsInput,\n\tBillingProduct,\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\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingListProductsInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPage<BillingProduct>> {\n\treturn executeLocalBillingOperation({\n\t\tbefore: (payload) =>\n\t\t\trejectUnsupportedListOffset(\"products.list\", payload.offset),\n\t\toperation: \"products.list\",\n\t\tport: \"products\",\n\t\trequest: input,\n\t\tinvoke: (products, context, payload) =>\n\t\t\tproducts.list(context, {\n\t\t\t\tcursor: payload.cursor,\n\t\t\t\tlimit: payload.limit,\n\t\t\t}),\n\t});\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n\tBillingCancelRefundInput,\n\tBillingCreateRefundInput,\n\tBillingGetRefundInput,\n\tBillingListRefundsInput,\n\tBillingRefund,\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\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingCreateRefundInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingRefund> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"refunds.create\",\n\t\tport: \"refunds\",\n\t\trequest: input,\n\t\tsafety: \"defer-then-finalize\",\n\t\tinvoke: (refunds, context, payload) =>\n\t\t\trefunds.create(context, {\n\t\t\t\tamount: payload.amount,\n\t\t\t\tdescription: payload.description,\n\t\t\t\tidempotencyKey: payload.idempotencyKey,\n\t\t\t\tpaymentId: payload.paymentId,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingRefundGet(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingGetRefundInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingRefund> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"refunds.get\",\n\t\tport: \"refunds\",\n\t\trequest: input,\n\t\tinvoke: (refunds, context, payload) =>\n\t\t\trefunds.get(context, {\n\t\t\t\tpaymentId: payload.paymentId,\n\t\t\t\trefundId: payload.refundId,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingRefundCancel(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingCancelRefundInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingRefund> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"refunds.cancel\",\n\t\tport: \"refunds\",\n\t\trequest: input,\n\t\tinvoke: (refunds, context, payload) =>\n\t\t\trefunds.cancel(context, {\n\t\t\t\t...(typeof payload.idempotencyKey === \"string\"\n\t\t\t\t\t? { idempotencyKey: payload.idempotencyKey }\n\t\t\t\t\t: {}),\n\t\t\t\tpaymentId: payload.paymentId,\n\t\t\t\trefundId: payload.refundId,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingRefundList(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingListRefundsInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPage<BillingRefund>> {\n\treturn executeLocalBillingOperation({\n\t\tbefore: (payload) =>\n\t\t\trejectUnsupportedListOffset(\"refunds.list\", payload.offset),\n\t\toperation: \"refunds.list\",\n\t\tport: \"refunds\",\n\t\trequest: input,\n\t\tinvoke: (refunds, context, payload) =>\n\t\t\trefunds.list(context, {\n\t\t\t\tcursor: payload.cursor,\n\t\t\t\tlimit: payload.limit,\n\t\t\t}),\n\t});\n}\n","/**\n * Node billing materializer — provider registry for local attach.\n */\n\nimport { attachLocalBillingRuntime } from \"../../billing/runtime/local/materialize.ts\";\nimport { createBillingProviderRegistry } from \"../../billing/runtime/local/providers/create-registry.ts\";\nimport type { BillingProviderRegistry } from \"../../billing/runtime/local/providers/registry.ts\";\nimport type { AthenaClientConfig } from \"../../v3-client-core.ts\";\nimport type { AthenaRuntimePlan } from \"../plan/types.ts\";\n\nexport { attachLocalBillingRuntime, createBillingProviderRegistry };\n\nexport function materializeBilling(\n\tconfig: AthenaClientConfig,\n\t_plan?: AthenaRuntimePlan,\n): BillingProviderRegistry {\n\treturn createBillingProviderRegistry(\n\t\tconfig.billing?.providers,\n\t\tconfig.billing?.catalog,\n\t);\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\t\"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\tAthenaDeletePayload,\n\tAthenaFetchPayload,\n\tAthenaGatewayCallOptions,\n\tAthenaGatewayConnectionOptions,\n\tAthenaGatewayConnectionResult,\n\tAthenaGatewayResponse,\n\tAthenaInsertPayload,\n\tAthenaQueryPayload,\n\tAthenaRpcCallOptions,\n\tAthenaRpcPayload,\n\tAthenaUpdatePayload,\n} from \"../gateway/types.ts\";\nimport {\n\tAthenaQueryError,\n\ttype AthenaRelationCatalog,\n} from \"../query/engine/index.ts\";\nimport { resolveMutationAffectedRows } from \"../result/mutation-meta.ts\";\nimport {\n\tcompilePostgresStructuredCount,\n\tcompilePostgresStructuredFetch,\n\tneedsPostgresAstPipeline,\n} from \"./compile-fetch.ts\";\nimport { ATHENA_PG_DIRECT_BASE_URL } from \"./constants.ts\";\nimport { type AthenaPostgresPool, createPostgresPool } from \"./driver.ts\";\nimport { mapPostgresDriverError, sanitizePostgresMessage } from \"./errors.ts\";\nimport {\n\tcreatePostgresIdentityCache,\n\tneedsBoundedIdentity,\n\tresolvePostgresBoundedIdentityColumn,\n} from \"./identity.ts\";\nimport type { AthenaPostgresRuntime } from \"./owned-runtime.ts\";\nimport { assertNodePostgresRuntime } from \"./runtime.ts\";\nimport {\n\tcompilePostgresCount,\n\tcompilePostgresDelete,\n\tcompilePostgresFetch,\n\tcompilePostgresInsert,\n\tcompilePostgresRpc,\n\tcompilePostgresUpdate,\n\textractAthenaCount,\n\ttype PostgresCompiledQuery,\n\ttype PostgresCompileOptions,\n\tPostgresSqlCompileError,\n} from \"./sql.ts\";\nimport { createPostgresTransactionTransport } from \"./transaction.ts\";\n\n/** Mirrors gateway client accept shape for findMany AST payloads. */\ninterface AthenaFindManyAstPayload {\n\tlimit?: number;\n\torderBy?: Record<string, unknown>;\n\tselect: Record<string, unknown>;\n\ttable_name: string;\n\twhere?: Record<string, unknown>;\n}\n\nexport interface PostgresDirectTransportOptions {\n\tconnectionString?: string;\n\t/**\n\t * Optional default unique identity column for bounded mutations.\n\t * Prefer schema-resolved PK; never invent `id` at the compiler.\n\t */\n\tdefaultIdentityColumn?: string;\n\t/** When false, dispose never ends the supplied pool. Default: true for URI-created pools. */\n\townsPool?: boolean;\n\tpool?: AthenaPostgresPool;\n\t/** Priority-1 relation metadata from AthenaModels. */\n\trelationCatalog?: AthenaRelationCatalog;\n\truntime?: AthenaPostgresRuntime;\n}\n\nfunction resolveStripNulls(\n\tpayloadStrip: boolean | undefined,\n\tcallOptions: AthenaGatewayCallOptions | undefined,\n\tdefaultValue: boolean,\n): boolean {\n\tif (typeof payloadStrip === \"boolean\") {\n\t\treturn payloadStrip;\n\t}\n\tif (typeof callOptions?.stripNulls === \"boolean\") {\n\t\treturn callOptions.stripNulls;\n\t}\n\treturn defaultValue;\n}\n\nfunction stripNullPropertiesFromRows(rows: unknown[]): unknown[] {\n\treturn rows.map((row) => {\n\t\tif (row === null || typeof row !== \"object\" || Array.isArray(row)) {\n\t\t\treturn row;\n\t\t}\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n\t\t\tif (value !== null) {\n\t\t\t\tout[key] = value;\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t});\n}\n\nfunction maybeStripNullRows(rows: unknown[], strip: boolean): unknown[] {\n\treturn strip ? stripNullPropertiesFromRows(rows) : rows;\n}\n\nfunction successResponse<T>(\n\tdata: T,\n\tcount: number | null | undefined,\n\traw: unknown,\n\tendpoint?: string,\n): AthenaGatewayResponse<T> {\n\tconst affectedRows = resolveMutationAffectedRows({\n\t\tcount,\n\t\tendpoint,\n\t\traw,\n\t});\n\treturn {\n\t\t...(affectedRows !== undefined ? { affectedRows } : {}),\n\t\tcount: count ?? null,\n\t\tdata,\n\t\terror: undefined,\n\t\terrorDetails: null,\n\t\tok: true,\n\t\traw,\n\t\tstatus: 200,\n\t\tstatusText: \"OK\",\n\t};\n}\n\nfunction errorResponse<T>(\n\tstatus: number,\n\tcode:\n\t\t| \"HTTP_ERROR\"\n\t\t| \"UNKNOWN_ERROR\"\n\t\t| \"INVALID_JSON\"\n\t\t| \"NETWORK_ERROR\"\n\t\t| \"INVALID_URL\",\n\tmessage: string,\n\tendpoint: string,\n\tmethod: string,\n\thint?: string,\n): AthenaGatewayResponse<T> {\n\tconst error = new AthenaGatewayError({\n\t\tcode,\n\t\tendpoint: endpoint as never,\n\t\thint,\n\t\tmessage,\n\t\tmethod: method as never,\n\t\tstatus,\n\t});\n\treturn {\n\t\tdata: null,\n\t\terror: error.message,\n\t\terrorDetails: error.toDetails(),\n\t\tok: false,\n\t\traw: { code, error: message },\n\t\tstatus,\n\t\tstatusText: null,\n\t};\n}\n\nfunction compileErrorResponse<T>(\n\terror: unknown,\n\tendpoint: string,\n\tmethod: string,\n): AthenaGatewayResponse<T> {\n\tif (error instanceof PostgresSqlCompileError) {\n\t\treturn errorResponse(\n\t\t\t400,\n\t\t\t\"HTTP_ERROR\",\n\t\t\terror.message,\n\t\t\tendpoint,\n\t\t\tmethod,\n\t\t\t`PostgreSQL SQL compile failed (${error.code})`,\n\t\t);\n\t}\n\tif (error instanceof AthenaQueryError) {\n\t\treturn errorResponse(\n\t\t\t400,\n\t\t\t\"HTTP_ERROR\",\n\t\t\terror.message,\n\t\t\tendpoint,\n\t\t\tmethod,\n\t\t\t`Athena query compile failed (${error.code})`,\n\t\t);\n\t}\n\treturn mapDriverError(error, endpoint, method);\n}\n\nfunction mapDriverError<T>(\n\terror: unknown,\n\tendpoint: string,\n\tmethod: string,\n): AthenaGatewayResponse<T> {\n\tconst mapped = mapPostgresDriverError(error);\n\treturn errorResponse(\n\t\tmapped.status,\n\t\tmapped.code,\n\t\tmapped.message,\n\t\tendpoint,\n\t\tmethod,\n\t\tmapped.hint,\n\t);\n}\n\n/**\n * Gateway-shaped transport that executes against a long-lived Node `pg.Pool`.\n */\nexport function createPostgresDirectTransport(\n\toptions: PostgresDirectTransportOptions,\n): AthenaGatewayClient {\n\tconst connectionString = options.connectionString?.trim();\n\tif (!(options.runtime || options.pool || connectionString)) {\n\t\tthrow new Error(\n\t\t\t\"@xylex-group/athena: db.pgUri must be a non-empty PostgreSQL connection string.\",\n\t\t);\n\t}\n\n\tassertNodePostgresRuntime();\n\n\tconst ownsPool =\n\t\toptions.ownsPool ??\n\t\tBoolean(connectionString && !options.runtime && !options.pool);\n\n\tlet poolPromise: Promise<AthenaPostgresPool> | undefined;\n\tlet disposed = false;\n\n\tconst attachPoolErrorHandler = (\n\t\tpool: AthenaPostgresPool,\n\t): AthenaPostgresPool => {\n\t\tconst maybeOn = pool as AthenaPostgresPool & {\n\t\t\ton?: (event: string, listener: (err: Error) => void) => void;\n\t\t};\n\t\tif (typeof maybeOn.on === \"function\") {\n\t\t\tmaybeOn.on(\"error\", () => {\n\t\t\t\t// Surface on next query via pool state; do not throw unbound.\n\t\t\t});\n\t\t}\n\t\treturn pool;\n\t};\n\n\tconst getPool = (): Promise<AthenaPostgresPool> => {\n\t\tif (disposed) {\n\t\t\treturn Promise.reject(\n\t\t\t\tnew AthenaConfigurationError(\n\t\t\t\t\t\"ATHENA_RUNTIME_DISPOSED\",\n\t\t\t\t\t\"Athena PostgreSQL runtime was disposed.\",\n\t\t\t\t\t\"db\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tassertNodePostgresRuntime();\n\t\tif (options.runtime) {\n\t\t\treturn options.runtime.getPool().then(attachPoolErrorHandler);\n\t\t}\n\t\tif (options.pool) {\n\t\t\treturn Promise.resolve(attachPoolErrorHandler(options.pool));\n\t\t}\n\t\tpoolPromise ??= createPostgresPool(connectionString as string).then(\n\t\t\tattachPoolErrorHandler,\n\t\t);\n\t\treturn poolPromise;\n\t};\n\n\tconst baseUrl = ATHENA_PG_DIRECT_BASE_URL;\n\tconst defaultIdentity = options.defaultIdentityColumn?.trim();\n\tconst identityCache = createPostgresIdentityCache();\n\n\tasync function compileOptionsForBoundedMutation(payload: {\n\t\ttable_name?: string;\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tcurrent_page?: number;\n\t\tpage_size?: number;\n\t\tsort_by?: unknown;\n\t}): Promise<PostgresCompileOptions | undefined> {\n\t\tif (!needsBoundedIdentity(payload)) {\n\t\t\treturn undefined;\n\t\t}\n\t\t// Compiler still raises order_without_bounds when sort_by alone.\n\t\tconst hasPage =\n\t\t\tpayload.limit !== undefined ||\n\t\t\tpayload.offset !== undefined ||\n\t\t\tpayload.page_size !== undefined ||\n\t\t\tpayload.current_page !== undefined;\n\t\tif (!hasPage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (defaultIdentity) {\n\t\t\treturn { identityColumn: defaultIdentity };\n\t\t}\n\t\tconst pool = await getPool();\n\t\tconst identityColumn = await resolvePostgresBoundedIdentityColumn(\n\t\t\tpool,\n\t\t\tpayload.table_name ?? \"\",\n\t\t\tidentityCache,\n\t\t);\n\t\treturn { identityColumn };\n\t}\n\n\tasync function runCompiled<T>(\n\t\tcompiled: PostgresCompiledQuery,\n\t\tendpoint: string,\n\t\tmethod: string,\n\t\tmapResult?: (\n\t\t\trows: unknown[],\n\t\t\trowCount: number,\n\t\t) => { data: T; count: number | null },\n\t\tstripNulls = true,\n\t): Promise<AthenaGatewayResponse<T>> {\n\t\ttry {\n\t\t\tconst pool = await getPool();\n\t\t\tconst result = await pool.query(compiled.text, compiled.values);\n\t\t\tconst rows = maybeStripNullRows(result.rows as unknown[], stripNulls);\n\t\t\tconst rowCount =\n\t\t\t\ttypeof result.rowCount === \"number\" ? result.rowCount : rows.length;\n\n\t\t\tconst mapped = mapResult?.(rows, rowCount) ?? {\n\t\t\t\tcount: rowCount,\n\t\t\t\tdata: rows as T,\n\t\t\t};\n\t\t\treturn successResponse(mapped.data, mapped.count, result, endpoint);\n\t\t} catch (error) {\n\t\t\tif (error instanceof PostgresSqlCompileError) {\n\t\t\t\treturn compileErrorResponse(error, endpoint, method);\n\t\t\t}\n\t\t\treturn mapDriverError(error, endpoint, method);\n\t\t}\n\t}\n\n\tconst transport: AthenaGatewayClient & {\n\t\t__athenaPgDispose?: () => Promise<void>;\n\t} = {\n\t\tbaseUrl,\n\t\tbuildHeaders(callOptions) {\n\t\t\treturn { ...(callOptions?.headers ?? {}) };\n\t\t},\n\t\tasync deleteGateway<T>(\n\t\t\tpayload: AthenaDeletePayload,\n\t\t\tcallOptions?: AthenaGatewayCallOptions,\n\t\t): Promise<AthenaGatewayResponse<T>> {\n\t\t\ttry {\n\t\t\t\tconst compileOptions = await compileOptionsForBoundedMutation(payload);\n\t\t\t\tconst compiled = compilePostgresDelete(payload, compileOptions);\n\t\t\t\tconst stripNulls = resolveStripNulls(undefined, callOptions, true);\n\t\t\t\treturn runCompiled(\n\t\t\t\t\tcompiled,\n\t\t\t\t\t\"/gateway/delete\",\n\t\t\t\t\t\"DELETE\",\n\t\t\t\t\tundefined,\n\t\t\t\t\tstripNulls,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\treturn compileErrorResponse(error, \"/gateway/delete\", \"DELETE\");\n\t\t\t}\n\t\t},\n\t\tasync fetchGateway<T>(\n\t\t\tpayload: AthenaFetchPayload | AthenaFindManyAstPayload,\n\t\t\tcallOptions?: AthenaGatewayCallOptions,\n\t\t): Promise<AthenaGatewayResponse<T>> {\n\t\t\ttry {\n\t\t\t\tif (callOptions?.signal?.aborted) {\n\t\t\t\t\tthrow new Error(\"The operation was aborted.\");\n\t\t\t\t}\n\t\t\t\tconst fetchPayload = payload as AthenaFetchPayload;\n\t\t\t\tconst compiled = needsPostgresAstPipeline(payload)\n\t\t\t\t\t? await compilePostgresStructuredFetch(payload, await getPool(), {\n\t\t\t\t\t\t\tcatalog: options.relationCatalog,\n\t\t\t\t\t\t})\n\t\t\t\t\t: compilePostgresFetch(fetchPayload);\n\t\t\t\tconst stripNulls = resolveStripNulls(\n\t\t\t\t\tfetchPayload.strip_nulls,\n\t\t\t\t\tcallOptions,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\n\t\t\t\tif (fetchPayload.head === true) {\n\t\t\t\t\treturn runCompiled(\n\t\t\t\t\t\tcompiled,\n\t\t\t\t\t\t\"/gateway/fetch\",\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t\t(rows) => ({ count: extractAthenaCount(rows), data: [] as T }),\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst wantsTotalCount =\n\t\t\t\t\tfetchPayload.count === \"exact\" ||\n\t\t\t\t\tfetchPayload.count === \"planned\" ||\n\t\t\t\t\tfetchPayload.count === \"estimated\";\n\n\t\t\t\tif (wantsTotalCount) {\n\t\t\t\t\tconst countCompiled = needsPostgresAstPipeline(payload)\n\t\t\t\t\t\t? await compilePostgresStructuredCount(payload, await getPool(), {\n\t\t\t\t\t\t\t\tcatalog: options.relationCatalog,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: compilePostgresCount(fetchPayload);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst pool = await getPool();\n\t\t\t\t\t\tconst [dataResult, countResult] = await Promise.all([\n\t\t\t\t\t\t\tpool.query(compiled.text, compiled.values),\n\t\t\t\t\t\t\tpool.query(countCompiled.text, countCompiled.values),\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tconst rows = maybeStripNullRows(\n\t\t\t\t\t\t\tdataResult.rows as unknown[],\n\t\t\t\t\t\t\tstripNulls,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst total = extractAthenaCount(countResult.rows as unknown[]);\n\t\t\t\t\t\treturn successResponse(\n\t\t\t\t\t\t\trows as T,\n\t\t\t\t\t\t\ttotal,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcount: countResult,\n\t\t\t\t\t\t\t\tdata: dataResult,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"/gateway/fetch\",\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treturn mapDriverError(error, \"/gateway/fetch\", \"POST\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn runCompiled(\n\t\t\t\t\tcompiled,\n\t\t\t\t\t\"/gateway/fetch\",\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t(rows) => ({ count: rows.length, data: rows as T }),\n\t\t\t\t\tstripNulls,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\treturn compileErrorResponse(error, \"/gateway/fetch\", \"POST\");\n\t\t\t}\n\t\t},\n\t\tasync insertGateway<T>(\n\t\t\tpayload: AthenaInsertPayload,\n\t\t\tcallOptions?: AthenaGatewayCallOptions,\n\t\t): Promise<AthenaGatewayResponse<T>> {\n\t\t\ttry {\n\t\t\t\tconst compiled = compilePostgresInsert(payload);\n\t\t\t\tconst stripNulls = resolveStripNulls(undefined, callOptions, true);\n\t\t\t\treturn runCompiled(\n\t\t\t\t\tcompiled,\n\t\t\t\t\t\"/gateway/insert\",\n\t\t\t\t\t\"PUT\",\n\t\t\t\t\t(rows, rowCount) => {\n\t\t\t\t\t\tif (!Array.isArray(payload.insert_body) && rows.length === 1) {\n\t\t\t\t\t\t\treturn { count: rowCount, data: rows[0] as T };\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { count: rowCount, data: rows as T };\n\t\t\t\t\t},\n\t\t\t\t\tstripNulls,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\treturn compileErrorResponse(error, \"/gateway/insert\", \"PUT\");\n\t\t\t}\n\t\t},\n\t\tasync queryGateway<T>(\n\t\t\tpayload: AthenaQueryPayload,\n\t\t\tcallOptions?: AthenaGatewayCallOptions,\n\t\t): Promise<AthenaGatewayResponse<T>> {\n\t\t\ttry {\n\t\t\t\tconst text = payload.query?.trim();\n\t\t\t\tif (!text) {\n\t\t\t\t\treturn errorResponse(\n\t\t\t\t\t\t400,\n\t\t\t\t\t\t\"HTTP_ERROR\",\n\t\t\t\t\t\t\"query is required\",\n\t\t\t\t\t\t\"/gateway/query\",\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst values = Array.isArray(payload.params) ? payload.params : [];\n\t\t\t\treturn runCompiled(\n\t\t\t\t\t{ text, values },\n\t\t\t\t\t\"/gateway/query\",\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t(rows, rowCount) => ({ count: rowCount, data: rows as T }),\n\t\t\t\t\tresolveStripNulls(undefined, callOptions, false),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\treturn compileErrorResponse(error, \"/gateway/query\", \"POST\");\n\t\t\t}\n\t\t},\n\t\tasync resolveCallOptions(callOptions) {\n\t\t\treturn callOptions;\n\t\t},\n\t\tasync rpcGateway<T>(\n\t\t\tpayload: AthenaRpcPayload,\n\t\t\tcallOptions?: AthenaRpcCallOptions,\n\t\t): Promise<AthenaGatewayResponse<T>> {\n\t\t\ttry {\n\t\t\t\tif (callOptions?.signal?.aborted) {\n\t\t\t\t\tthrow new Error(\"The operation was aborted.\");\n\t\t\t\t}\n\t\t\t\tconst compiled = compilePostgresRpc(payload);\n\t\t\t\tconst stripNulls = resolveStripNulls(undefined, callOptions, true);\n\t\t\t\tif (payload.head === true) {\n\t\t\t\t\treturn runCompiled(\n\t\t\t\t\t\tcompiled,\n\t\t\t\t\t\t\"/gateway/rpc\",\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t\t(rows) => ({ count: extractAthenaCount(rows), data: [] as T }),\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst wantsCount =\n\t\t\t\t\tpayload.count === \"exact\" ||\n\t\t\t\t\tpayload.count === \"planned\" ||\n\t\t\t\t\tpayload.count === \"estimated\";\n\t\t\t\tif (wantsCount) {\n\t\t\t\t\tconst countCompiled = compilePostgresRpc({\n\t\t\t\t\t\t...payload,\n\t\t\t\t\t\thead: true,\n\t\t\t\t\t});\n\t\t\t\t\tconst pool = await getPool();\n\t\t\t\t\tconst [dataResult, countResult] = await Promise.all([\n\t\t\t\t\t\tpool.query(compiled.text, compiled.values),\n\t\t\t\t\t\tpool.query(countCompiled.text, countCompiled.values),\n\t\t\t\t\t]);\n\t\t\t\t\tconst rows = maybeStripNullRows(\n\t\t\t\t\t\tdataResult.rows as unknown[],\n\t\t\t\t\t\tstripNulls,\n\t\t\t\t\t);\n\t\t\t\t\tconst total = extractAthenaCount(countResult.rows as unknown[]);\n\t\t\t\t\treturn successResponse(\n\t\t\t\t\t\trows as T,\n\t\t\t\t\t\ttotal,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcount: countResult,\n\t\t\t\t\t\t\tdata: dataResult,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"/gateway/rpc\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn runCompiled(\n\t\t\t\t\tcompiled,\n\t\t\t\t\t\"/gateway/rpc\",\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t(rows, rowCount) => ({ count: rowCount, data: rows as T }),\n\t\t\t\t\tstripNulls,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\treturn compileErrorResponse(error, \"/gateway/rpc\", \"POST\");\n\t\t\t}\n\t\t},\n\t\tasync updateGateway<T>(\n\t\t\tpayload: AthenaUpdatePayload,\n\t\t\tcallOptions?: AthenaGatewayCallOptions,\n\t\t): Promise<AthenaGatewayResponse<T>> {\n\t\t\ttry {\n\t\t\t\tconst compileOptions = await compileOptionsForBoundedMutation(payload);\n\t\t\t\tconst compiled = compilePostgresUpdate(payload, compileOptions);\n\t\t\t\tconst stripNulls = resolveStripNulls(undefined, callOptions, true);\n\t\t\t\treturn runCompiled(\n\t\t\t\t\tcompiled,\n\t\t\t\t\t\"/gateway/update\",\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t(rows, rowCount) => {\n\t\t\t\t\t\tif (rows.length === 1) {\n\t\t\t\t\t\t\treturn { count: rowCount, data: rows[0] as T };\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { count: rowCount, data: rows as T };\n\t\t\t\t\t},\n\t\t\t\t\tstripNulls,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\treturn compileErrorResponse(error, \"/gateway/update\", \"POST\");\n\t\t\t}\n\t\t},\n\t\ttransactions: createPostgresTransactionTransport({\n\t\t\tdefaultIdentityColumn: defaultIdentity,\n\t\t\tgetPool,\n\t\t\tidentityCache,\n\t\t}),\n\t\tasync verifyConnection(\n\t\t\t_connectionOptions?: AthenaGatewayConnectionOptions,\n\t\t): Promise<AthenaGatewayConnectionResult> {\n\t\t\tvoid _connectionOptions;\n\t\t\ttry {\n\t\t\t\tconst pool = await getPool();\n\t\t\t\tconst result = await pool.query(\"SELECT 1 AS ok\");\n\t\t\t\treturn {\n\t\t\t\t\tbaseUrl,\n\t\t\t\t\terror: undefined,\n\t\t\t\t\terrorDetails: null,\n\t\t\t\t\tok: true,\n\t\t\t\t\traw: result,\n\t\t\t\t\treachable: true,\n\t\t\t\t\tstatus: 200,\n\t\t\t\t\tstatusText: \"OK\",\n\t\t\t\t\turl: `${baseUrl}/pg`,\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tconst message = sanitizePostgresMessage(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tbaseUrl,\n\t\t\t\t\terror: message,\n\t\t\t\t\terrorDetails: null,\n\t\t\t\t\tok: false,\n\t\t\t\t\traw: null,\n\t\t\t\t\treachable: false,\n\t\t\t\t\tstatus: 0,\n\t\t\t\t\tstatusText: null,\n\t\t\t\t\turl: `${baseUrl}/pg`,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tasync __athenaPgDispose() {\n\t\t\tdisposed = true;\n\t\t\tif (!ownsPool) {\n\t\t\t\tpoolPromise = undefined;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (poolPromise) {\n\t\t\t\tconst pool = await poolPromise.catch(() => null);\n\t\t\t\tpoolPromise = undefined;\n\t\t\t\tif (pool) {\n\t\t\t\t\tawait pool.end();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t};\n\n\treturn 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\ttransport: AthenaGatewayClient,\n): Promise<void> {\n\tconst holder = transport as AthenaGatewayClient & {\n\t\t__athenaPgDispose?: () => Promise<void>;\n\t};\n\tif (typeof holder.__athenaPgDispose === \"function\") {\n\t\tawait holder.__athenaPgDispose();\n\t}\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\tAthenaDeletePayload,\n\tAthenaFetchPayload,\n\tAthenaGatewayCondition,\n\tAthenaInsertPayload,\n\tAthenaJsonObject,\n\tAthenaJsonValue,\n\tAthenaRpcPayload,\n\tAthenaSortBy,\n\tAthenaUpdatePayload,\n} from \"../gateway/types.ts\";\nimport {\n\tcompileLegacyBooleanNode,\n\tLegacyBooleanParseError,\n\tparseLegacyBooleanExpression,\n} from \"../query/legacy-boolean.ts\";\nimport { quoteQualifiedIdentifier } from \"../sql-identifiers.ts\";\n\nexport interface PostgresCompiledQuery {\n\ttext: string;\n\tvalues: unknown[];\n}\n\nexport interface PostgresCompileOptions {\n\t/**\n\t * Proven single-column unique identity for bounded UPDATE/DELETE\n\t * (PK or UNIQUE). Required when limit/offset/page bounds are set.\n\t */\n\tidentityColumn?: string;\n}\n\nexport class PostgresSqlCompileError extends Error {\n\treadonly code: string;\n\n\tconstructor(code: string, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"PostgresSqlCompileError\";\n\t\tthis.code = code;\n\t}\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\t/^([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\t/^([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\t\"text\",\n\t\"uuid\",\n\t\"int\",\n\t\"integer\",\n\t\"bigint\",\n\t\"boolean\",\n\t\"bool\",\n\t\"numeric\",\n\t\"float\",\n\t\"double\",\n\t\"json\",\n\t\"jsonb\",\n\t\"date\",\n\t\"timestamp\",\n\t\"timestamptz\",\n]);\n\nclass Binder {\n\treadonly values: unknown[] = [];\n\n\tadd(value: unknown): string {\n\t\tthis.values.push(value);\n\t\treturn `$${this.values.length}`;\n\t}\n}\n\nfunction hasPaginationBounds(payload: {\n\tlimit?: number;\n\toffset?: number;\n\tcurrent_page?: number;\n\tpage_size?: number;\n}): boolean {\n\treturn (\n\t\tpayload.limit !== undefined ||\n\t\tpayload.offset !== undefined ||\n\t\tpayload.page_size !== undefined ||\n\t\tpayload.current_page !== undefined\n\t);\n}\n\nfunction assertEffectiveMutationBounds(payload: {\n\tlimit?: number;\n\toffset?: number;\n\tcurrent_page?: number;\n\tpage_size?: number;\n}): void {\n\tif (\n\t\tpayload.current_page !== undefined &&\n\t\tpayload.page_size === undefined &&\n\t\tpayload.limit === undefined\n\t) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"page_without_size\",\n\t\t\t\"current_page requires page_size (or limit) for bounded update/delete on PostgreSQL direct\",\n\t\t);\n\t}\n\tconst clause = limitOffsetClause(payload);\n\tif (!clause.trim()) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"invalid_pagination_bounds\",\n\t\t\t\"Bounded update/delete requires limit, offset, and/or page_size on PostgreSQL direct\",\n\t\t);\n\t}\n}\n\nfunction quoteIdent(name: string): string {\n\tconst trimmed = name.trim();\n\tif (!trimmed) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"invalid_identifier\",\n\t\t\t\"Identifier is required\",\n\t\t);\n\t}\n\tif (!SAFE_QUALIFIED.test(trimmed)) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"invalid_identifier\",\n\t\t\t`Invalid SQL identifier for PostgreSQL direct: ${trimmed}`,\n\t\t);\n\t}\n\treturn quoteQualifiedIdentifier(trimmed);\n}\n\nfunction quoteAliasedSelectToken(\n\tbaseIdentifier: string | undefined,\n\taliasIdentifier: string | undefined,\n\ttoken: string,\n): string {\n\tif (!(baseIdentifier && aliasIdentifier)) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"unsafe_select\",\n\t\t\t`SELECT/RETURNING expressions are not supported on PostgreSQL direct; use column names or aliases only: ${token}`,\n\t\t);\n\t}\n\treturn `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteQualifiedIdentifier(aliasIdentifier)}`;\n}\n\nfunction quoteSelectTokenStrict(token: string): string {\n\tconst trimmed = token.trim();\n\tif (!trimmed || trimmed === \"*\") {\n\t\treturn trimmed || \"*\";\n\t}\n\n\tif (SAFE_QUALIFIED.test(trimmed)) {\n\t\treturn quoteQualifiedIdentifier(trimmed);\n\t}\n\n\tconst responseAlias = RESPONSE_ALIAS_PATTERN.exec(trimmed);\n\tif (responseAlias) {\n\t\tconst [, aliasIdentifier, baseIdentifier] = responseAlias;\n\t\treturn quoteAliasedSelectToken(baseIdentifier, aliasIdentifier, token);\n\t}\n\n\tconst sqlAlias = SQL_ALIAS_PATTERN.exec(trimmed);\n\tif (sqlAlias) {\n\t\tconst [, baseIdentifier, aliasIdentifier] = sqlAlias;\n\t\treturn quoteAliasedSelectToken(baseIdentifier, aliasIdentifier, token);\n\t}\n\n\tthrow new PostgresSqlCompileError(\n\t\t\"unsafe_select\",\n\t\t`SELECT/RETURNING expressions are not supported on PostgreSQL direct; use column names or aliases only: ${token}`,\n\t);\n}\n\nfunction selectClause(columns: string[] | string | undefined): string {\n\tif (columns === undefined || columns === \"*\" || columns === \"\") {\n\t\treturn \"*\";\n\t}\n\tif (typeof columns === \"string\") {\n\t\tconst trimmed = columns.trim();\n\t\tif (!trimmed || trimmed === \"*\") {\n\t\t\treturn \"*\";\n\t\t}\n\t\treturn trimmed\n\t\t\t.split(\",\")\n\t\t\t.map((part) => quoteSelectTokenStrict(part))\n\t\t\t.join(\", \");\n\t}\n\tif (columns.length === 0) {\n\t\treturn \"*\";\n\t}\n\treturn columns.map((column) => quoteSelectTokenStrict(column)).join(\", \");\n}\n\nfunction wantsReturning(payload: {\n\tcolumns?: string[] | string;\n\thead?: boolean;\n}): boolean {\n\treturn Boolean(payload.columns) && payload.head !== true;\n}\n\nfunction applyCast(expr: string, cast?: string | null): string {\n\tif (!cast) {\n\t\treturn expr;\n\t}\n\tconst normalized = cast.trim().toLowerCase();\n\tif (!SAFE_CASTS.has(normalized)) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"unsupported_cast\",\n\t\t\t`Cast type \"${cast}\" is not allowed on PostgreSQL direct`,\n\t\t);\n\t}\n\treturn `${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\tif (value === undefined) {\n\t\treturn null;\n\t}\n\tif (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n\t\treturn JSON.stringify(value);\n\t}\n\tif (Array.isArray(value)) {\n\t\t// Nested object arrays → JSON text; primitive arrays stay for PG arrays.\n\t\tif (value.some((item) => item !== null && typeof item === \"object\")) {\n\t\t\treturn JSON.stringify(value);\n\t\t}\n\t}\n\treturn value;\n}\n\ninterface WhereClause {\n\tsql: string;\n\tvalues: unknown[];\n}\n\nfunction conditionToWhere(\n\tcondition: AthenaGatewayCondition,\n\tbinder: Binder,\n): string {\n\tconst column = condition.column?.trim() || condition.eq_column?.trim() || \"\";\n\tconst operator = (condition.operator || \"eq\").toLowerCase();\n\tconst value =\n\t\tcondition.value === undefined ? condition.eq_value : condition.value;\n\n\tif (operator === \"or\" || operator === \"not\") {\n\t\tif (typeof value !== \"string\") {\n\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\"unsupported_operator\",\n\t\t\t\t`Condition operator \"${operator}\" requires a legacy expression string`,\n\t\t\t);\n\t\t}\n\t\ttry {\n\t\t\tconst tree = parseLegacyBooleanExpression(\n\t\t\t\tvalue,\n\t\t\t\toperator === \"or\" ? \"or\" : \"and\",\n\t\t\t);\n\t\t\tconst compiled = compileLegacyBooleanNode(tree, (predicate) =>\n\t\t\t\tconditionToWhere(predicate, binder),\n\t\t\t);\n\t\t\treturn operator === \"not\" ? `(NOT (${compiled}))` : compiled;\n\t\t} catch (error) {\n\t\t\tif (error instanceof PostgresSqlCompileError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst message =\n\t\t\t\terror instanceof LegacyBooleanParseError\n\t\t\t\t\t? error.message\n\t\t\t\t\t: `Condition operator \"${operator}\" requires structured AST; raw expressions are rejected on PostgreSQL direct`;\n\t\t\tthrow new PostgresSqlCompileError(\"unsupported_operator\", message);\n\t\t}\n\t}\n\n\tif (!column) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"invalid_condition\",\n\t\t\t\"Condition requires a column\",\n\t\t);\n\t}\n\n\tconst col = applyCast(quoteIdent(column), condition.column_cast);\n\n\tconst bind = (v: unknown, valueCast?: string | null): string =>\n\t\tapplyCast(binder.add(v), valueCast ?? condition.value_cast);\n\n\tswitch (operator) {\n\t\tcase \"eq\": {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tif (value.length === 0) {\n\t\t\t\t\treturn \"1 = 0\";\n\t\t\t\t}\n\t\t\t\tconst placeholders = value.map((item) => bind(item ?? null)).join(\", \");\n\t\t\t\treturn `${col} IN (${placeholders})`;\n\t\t\t}\n\t\t\tif (value === null) {\n\t\t\t\treturn `${col} IS NULL`;\n\t\t\t}\n\t\t\treturn `${col} = ${bind(value ?? null)}`;\n\t\t}\n\t\tcase \"neq\":\n\t\t\tif (value === null) {\n\t\t\t\treturn `${col} IS NOT NULL`;\n\t\t\t}\n\t\t\treturn `${col} <> ${bind(value ?? null)}`;\n\t\tcase \"gt\":\n\t\t\treturn `${col} > ${bind(value ?? null)}`;\n\t\tcase \"gte\":\n\t\t\treturn `${col} >= ${bind(value ?? null)}`;\n\t\tcase \"lt\":\n\t\t\treturn `${col} < ${bind(value ?? null)}`;\n\t\tcase \"lte\":\n\t\t\treturn `${col} <= ${bind(value ?? null)}`;\n\t\tcase \"like\":\n\t\t\treturn `${col} LIKE ${bind(value ?? null)}`;\n\t\tcase \"ilike\":\n\t\t\treturn `${col} ILIKE ${bind(value ?? null)}`;\n\t\tcase \"in\": {\n\t\t\tconst items = Array.isArray(value)\n\t\t\t\t? value\n\t\t\t\t: value === undefined\n\t\t\t\t\t? []\n\t\t\t\t\t: [value];\n\t\t\tif (items.length === 0) {\n\t\t\t\treturn \"1 = 0\";\n\t\t\t}\n\t\t\tconst placeholders = items.map((item) => bind(item ?? null)).join(\", \");\n\t\t\treturn `${col} IN (${placeholders})`;\n\t\t}\n\t\tcase \"is\": {\n\t\t\tif (value === null || value === \"null\") {\n\t\t\t\treturn `${col} IS NULL`;\n\t\t\t}\n\t\t\tif (value === true || value === \"true\") {\n\t\t\t\treturn `${col} IS TRUE`;\n\t\t\t}\n\t\t\tif (value === false || value === \"false\") {\n\t\t\t\treturn `${col} IS FALSE`;\n\t\t\t}\n\t\t\treturn `${col} IS ${bind(value)}`;\n\t\t}\n\t\tcase \"contains\": {\n\t\t\t// jsonb object containment or array @>\n\t\t\tif (\n\t\t\t\tvalue !== null &&\n\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t!Array.isArray(value)\n\t\t\t) {\n\t\t\t\treturn `${col} @> ${bind(JSON.stringify(value))}::jsonb`;\n\t\t\t}\n\t\t\treturn `${col} @> ${bind(value ?? null)}`;\n\t\t}\n\t\tcase \"containedby\": {\n\t\t\tif (\n\t\t\t\tvalue !== null &&\n\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t!Array.isArray(value)\n\t\t\t) {\n\t\t\t\treturn `${col} <@ ${bind(JSON.stringify(value))}::jsonb`;\n\t\t\t}\n\t\t\treturn `${col} <@ ${bind(value ?? null)}`;\n\t\t}\n\t\tdefault:\n\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\"unsupported_operator\",\n\t\t\t\t`Unknown condition operator \"${operator}\"`,\n\t\t\t);\n\t}\n}\n\nfunction buildWhere(\n\tconditions: AthenaGatewayCondition[] | undefined,\n): WhereClause {\n\tif (!conditions?.length) {\n\t\treturn { sql: \"\", values: [] };\n\t}\n\tconst binder = new Binder();\n\tconst parts: string[] = [];\n\tfor (const condition of conditions) {\n\t\tif (!condition.operator && condition.eq_column) {\n\t\t\tparts.push(\n\t\t\t\tconditionToWhere(\n\t\t\t\t\t{\n\t\t\t\t\t\t...condition,\n\t\t\t\t\t\tcolumn: condition.eq_column,\n\t\t\t\t\t\toperator: \"eq\",\n\t\t\t\t\t\tvalue: condition.eq_value,\n\t\t\t\t\t},\n\t\t\t\t\tbinder,\n\t\t\t\t),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tparts.push(conditionToWhere(condition, binder));\n\t}\n\treturn {\n\t\tsql: parts.length ? `WHERE ${parts.join(\" AND \")}` : \"\",\n\t\tvalues: binder.values,\n\t};\n}\n\nfunction orderClause(order?: AthenaSortBy): string {\n\tif (!order?.field?.trim()) {\n\t\treturn \"\";\n\t}\n\tconst direction = order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n\treturn `ORDER BY ${quoteIdent(order.field)} ${direction}`;\n}\n\nfunction limitOffsetClause(payload: {\n\tlimit?: number;\n\toffset?: number;\n\tcurrent_page?: number;\n\tpage_size?: number;\n}): string {\n\tlet limit = payload.limit;\n\tlet offset = payload.offset;\n\n\tif (limit === undefined && payload.page_size !== undefined) {\n\t\tlimit = payload.page_size;\n\t}\n\n\tif (payload.current_page !== undefined && offset === undefined) {\n\t\tconst pageSize = payload.page_size ?? payload.limit;\n\t\tif (pageSize !== undefined) {\n\t\t\toffset = Math.max(0, (payload.current_page - 1) * pageSize);\n\t\t}\n\t}\n\n\tconst parts: string[] = [];\n\t// PostgreSQL allows OFFSET without LIMIT (unlike SQLite/D1).\n\tif (limit !== undefined) {\n\t\tparts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n\t}\n\tif (offset !== undefined) {\n\t\tparts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n\t}\n\treturn parts.join(\" \");\n}\n\nfunction rejectStructuredRelations(payload: AthenaFetchPayload): void {\n\tconst select = payload.select;\n\tif (select && typeof select === \"object\" && !Array.isArray(select)) {\n\t\tfor (const value of Object.values(select)) {\n\t\t\tif (value && typeof value === \"object\") {\n\t\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\t\"relations_unsupported\",\n\t\t\t\t\t\"Nested relation selects are unsupported on PostgreSQL direct\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tif (payload.view_name) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"view_unsupported\",\n\t\t\t\"view_name is unsupported on PostgreSQL direct L1\",\n\t\t);\n\t}\n}\n\nfunction resolveWhere(payload: {\n\tconditions?: AthenaGatewayCondition[];\n\twhere?: AthenaJsonObject | Record<string, unknown>;\n}): WhereClause {\n\tlet where = buildWhere(payload.conditions);\n\tif (!where.sql && payload.where && typeof payload.where === \"object\") {\n\t\tconst eqConditions: AthenaGatewayCondition[] = Object.entries(\n\t\t\tpayload.where as AthenaJsonObject,\n\t\t).map(([column, value]) => ({\n\t\t\tcolumn,\n\t\t\toperator: \"eq\" as const,\n\t\t\tvalue: value as AthenaGatewayCondition[\"value\"],\n\t\t}));\n\t\twhere = buildWhere(eqConditions);\n\t}\n\treturn where;\n}\n\nfunction resolveBoundedIdentityColumn(\n\toptions?: PostgresCompileOptions,\n): string {\n\tconst identity = options?.identityColumn?.trim();\n\tif (!identity) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"bounded_mutation_no_unique_identity\",\n\t\t\t\"Bounded update/delete requires a proven unique identity column from the table schema \" +\n\t\t\t\t\"(single-column PRIMARY KEY or UNIQUE index). Cannot assume a column named id.\",\n\t\t);\n\t}\n\tif (!SAFE_QUALIFIED.test(identity)) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"bounded_mutation_unsafe_identity\",\n\t\t\t`Bounded update/delete cannot use identity column \"${identity}\"`,\n\t\t);\n\t}\n\treturn 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\ttable: string,\n\twhereSql: string,\n\twhereValues: unknown[],\n\tpayload: {\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tcurrent_page?: number;\n\t\tpage_size?: number;\n\t\tsort_by?: AthenaSortBy;\n\t},\n\toptions?: PostgresCompileOptions,\n): { sql: string; values: unknown[] } {\n\tassertEffectiveMutationBounds(payload);\n\tconst identity = resolveBoundedIdentityColumn(options);\n\tconst identitySql = quoteIdent(identity);\n\tconst tableSql = quoteIdent(table);\n\tconst innerWhere = whereSql.replace(/^WHERE\\s+/i, \"\");\n\tconst parts = [\n\t\t`SELECT ${identitySql} FROM ${tableSql}`,\n\t\tinnerWhere ? `WHERE ${innerWhere}` : \"\",\n\t\torderClause(payload.sort_by),\n\t\tlimitOffsetClause(payload),\n\t].filter(Boolean);\n\treturn {\n\t\tsql: `${identitySql} IN (${parts.join(\" \")})`,\n\t\tvalues: [...whereValues],\n\t};\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\tpayload: AthenaFetchPayload,\n): PostgresCompiledQuery {\n\trejectStructuredRelations(payload);\n\tconst table = payload.table_name?.trim();\n\tif (!table) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"missing_table\",\n\t\t\t\"table_name is required for fetch\",\n\t\t);\n\t}\n\n\tlet columns: string[] | string | undefined = payload.columns;\n\tif (\n\t\tpayload.select &&\n\t\ttypeof payload.select === \"object\" &&\n\t\t!Array.isArray(payload.select)\n\t) {\n\t\tconst keys = Object.entries(payload.select)\n\t\t\t.filter(([, enabled]) => enabled === true || enabled === 1)\n\t\t\t.map(([key]) => key);\n\t\tif (keys.length > 0) {\n\t\t\tcolumns = keys;\n\t\t}\n\t} else if (typeof payload.select === \"string\" && payload.select.trim()) {\n\t\tcolumns = payload.select;\n\t}\n\n\tconst where = resolveWhere(payload);\n\n\tif (payload.head === true) {\n\t\treturn compilePostgresCountFromWhere(table, where);\n\t}\n\n\tconst parts = [\n\t\t`SELECT ${selectClause(columns)} FROM ${quoteIdent(table)}`,\n\t\twhere.sql,\n\t\torderClause(payload.sort_by),\n\t\tlimitOffsetClause(payload),\n\t].filter(Boolean);\n\treturn { 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\tpayload: AthenaFetchPayload,\n): PostgresCompiledQuery {\n\trejectStructuredRelations(payload);\n\tconst table = payload.table_name?.trim();\n\tif (!table) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"missing_table\",\n\t\t\t\"table_name is required for count\",\n\t\t);\n\t}\n\tconst where = resolveWhere(payload);\n\treturn compilePostgresCountFromWhere(table, where);\n}\n\nfunction compilePostgresCountFromWhere(\n\ttable: string,\n\twhere: WhereClause,\n): PostgresCompiledQuery {\n\tconst parts = [\n\t\t`SELECT COUNT(*)::bigint AS __athena_count FROM ${quoteIdent(table)}`,\n\t\twhere.sql,\n\t].filter(Boolean);\n\treturn { text: parts.join(\" \"), values: where.values };\n}\n\nexport function extractAthenaCount(rows: unknown[]): number {\n\tconst first = rows[0];\n\tconst rawCount =\n\t\tfirst && typeof first === \"object\" && !Array.isArray(first)\n\t\t\t? (first as Record<string, unknown>).__athena_count\n\t\t\t: undefined;\n\tconst count =\n\t\ttypeof rawCount === \"number\"\n\t\t\t? rawCount\n\t\t\t: typeof rawCount === \"bigint\"\n\t\t\t\t? Number(rawCount)\n\t\t\t\t: Number(rawCount ?? 0);\n\treturn Number.isFinite(count) ? count : 0;\n}\n\nfunction parseOnConflictColumns(onConflict: string | string[]): string[] {\n\tconst raw = Array.isArray(onConflict) ? onConflict : [onConflict];\n\tconst columns: string[] = [];\n\tfor (const item of raw) {\n\t\tfor (const part of String(item).split(\",\")) {\n\t\t\tconst trimmed = part.trim();\n\t\t\tif (trimmed) {\n\t\t\t\tcolumns.push(trimmed);\n\t\t\t}\n\t\t}\n\t}\n\tif (columns.length === 0) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"invalid_on_conflict\",\n\t\t\t\"on_conflict requires at least one column\",\n\t\t);\n\t}\n\treturn columns;\n}\n\nfunction appendOnConflict(\n\tparts: string[],\n\tbinder: Binder,\n\tpayload: AthenaInsertPayload,\n\tinsertColumns: string[],\n): void {\n\tif (!payload.on_conflict) {\n\t\treturn;\n\t}\n\tconst conflictCols = parseOnConflictColumns(payload.on_conflict);\n\tconst conflictSql = conflictCols.map(quoteIdent).join(\", \");\n\n\tif (payload.update_body !== undefined && payload.update_body !== null) {\n\t\tconst entries = Object.entries(payload.update_body);\n\t\tif (entries.length === 0) {\n\t\t\tparts.push(`ON CONFLICT (${conflictSql}) DO NOTHING`);\n\t\t\treturn;\n\t\t}\n\t\tconst assignments = entries.map(([column, value]) => {\n\t\t\tconst ph = binder.add(jsonValue(value as AthenaJsonValue));\n\t\t\treturn `${quoteIdent(column)} = ${ph}`;\n\t\t});\n\t\tparts.push(\n\t\t\t`ON CONFLICT (${conflictSql}) DO UPDATE SET ${assignments.join(\", \")}`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst conflictSet = new Set(conflictCols);\n\tconst assignments = insertColumns\n\t\t.filter((column) => !conflictSet.has(column))\n\t\t.map((column) => {\n\t\t\tconst quoted = quoteIdent(column);\n\t\t\treturn `${quoted} = EXCLUDED.${quoted}`;\n\t\t});\n\tif (assignments.length === 0) {\n\t\tparts.push(`ON CONFLICT (${conflictSql}) DO NOTHING`);\n\t} else {\n\t\tparts.push(\n\t\t\t`ON CONFLICT (${conflictSql}) DO UPDATE SET ${assignments.join(\", \")}`,\n\t\t);\n\t}\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\tpayload: AthenaInsertPayload,\n): PostgresCompiledQuery {\n\tconst table = payload.table_name?.trim();\n\tif (!table) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"missing_table\",\n\t\t\t\"table_name is required for insert\",\n\t\t);\n\t}\n\n\tconst rows = Array.isArray(payload.insert_body)\n\t\t? payload.insert_body\n\t\t: [payload.insert_body];\n\tif (rows.length === 0) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"empty_insert\",\n\t\t\t\"insert_body must not be empty\",\n\t\t);\n\t}\n\n\tconst columns: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const row of rows) {\n\t\tfor (const key of Object.keys(row ?? {})) {\n\t\t\tif (seen.has(key)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tseen.add(key);\n\t\t\tcolumns.push(key);\n\t\t}\n\t}\n\n\tconst binder = new Binder();\n\tconst tableSql = quoteIdent(table);\n\n\tif (columns.length === 0) {\n\t\tif (rows.length !== 1) {\n\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\"empty_insert\",\n\t\t\t\t\"Multi-row insert_body cannot be empty objects; use a single {} for DEFAULT VALUES\",\n\t\t\t);\n\t\t}\n\t\tif (payload.on_conflict) {\n\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\"default_values_upsert_unsupported\",\n\t\t\t\t\"DEFAULT VALUES upsert is unsupported on PostgreSQL direct; provide insert columns or omit onConflict\",\n\t\t\t);\n\t\t}\n\t\tconst parts = [`INSERT INTO ${tableSql} DEFAULT VALUES`];\n\t\tif (wantsReturning(payload)) {\n\t\t\tparts.push(`RETURNING ${selectClause(payload.columns)}`);\n\t\t}\n\t\treturn { text: parts.join(\" \"), values: [] };\n\t}\n\n\tconst forceNullForMissing = payload.default_to_null === true;\n\n\tconst valueGroups = rows.map((row) => {\n\t\tconst placeholders = columns.map((column) => {\n\t\t\tconst has = Object.hasOwn(row ?? {}, column);\n\t\t\tif (!has) {\n\t\t\t\tif (forceNullForMissing) {\n\t\t\t\t\treturn binder.add(null);\n\t\t\t\t}\n\t\t\t\treturn \"DEFAULT\";\n\t\t\t}\n\t\t\treturn binder.add(jsonValue((row as AthenaJsonObject)[column]));\n\t\t});\n\t\treturn `(${placeholders.join(\", \")})`;\n\t});\n\n\tconst parts = [\n\t\t`INSERT INTO ${tableSql} (${columns.map(quoteIdent).join(\", \")})`,\n\t\t`VALUES ${valueGroups.join(\", \")}`,\n\t];\n\tappendOnConflict(parts, binder, payload, columns);\n\tif (wantsReturning(payload)) {\n\t\tparts.push(`RETURNING ${selectClause(payload.columns)}`);\n\t}\n\n\treturn { 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\tpayload: AthenaUpdatePayload,\n\toptions?: PostgresCompileOptions,\n): PostgresCompiledQuery {\n\tconst table = payload.table_name?.trim();\n\tif (!table) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"missing_table\",\n\t\t\t\"table_name is required for update\",\n\t\t);\n\t}\n\tconst entries = Object.entries(payload.update_body ?? {});\n\tif (entries.length === 0) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"empty_update\",\n\t\t\t\"update_body must not be empty\",\n\t\t);\n\t}\n\n\tif (!payload.conditions?.length) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"unfiltered_update\",\n\t\t\t\"UPDATE requires at least one condition on PostgreSQL direct\",\n\t\t);\n\t}\n\n\tconst binder = new Binder();\n\tconst assignments = entries.map(([column, value]) => {\n\t\tconst ph = binder.add(jsonValue(value as AthenaJsonValue));\n\t\treturn `${quoteIdent(column)} = ${ph}`;\n\t});\n\n\t// WHERE shares the same binder so $n continues after SET values.\n\tconst whereParts: string[] = [];\n\tfor (const condition of payload.conditions) {\n\t\tif (!condition.operator && condition.eq_column) {\n\t\t\twhereParts.push(\n\t\t\t\tconditionToWhere(\n\t\t\t\t\t{\n\t\t\t\t\t\t...condition,\n\t\t\t\t\t\tcolumn: condition.eq_column,\n\t\t\t\t\t\toperator: \"eq\",\n\t\t\t\t\t\tvalue: condition.eq_value,\n\t\t\t\t\t},\n\t\t\t\t\tbinder,\n\t\t\t\t),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\twhereParts.push(conditionToWhere(condition, binder));\n\t}\n\tif (whereParts.length === 0) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"unfiltered_update\",\n\t\t\t\"UPDATE requires at least one condition on PostgreSQL direct\",\n\t\t);\n\t}\n\n\tlet finalWhere = `WHERE ${whereParts.join(\" AND \")}`;\n\n\tif (hasPaginationBounds(payload) || payload.sort_by) {\n\t\tif (!hasPaginationBounds(payload)) {\n\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\"order_without_bounds\",\n\t\t\t\t\"UPDATE with sort_by requires limit/offset or page_size/current_page on PostgreSQL direct\",\n\t\t\t);\n\t\t}\n\t\t// Rebuild with SET binds first, then a fresh where-only binder for the IN subquery.\n\t\tconst setValues = binder.values.slice(0, entries.length);\n\t\tconst whereOnly = buildWhere(payload.conditions);\n\t\tconst bound = boundedIdentityInClause(\n\t\t\ttable,\n\t\t\twhereOnly.sql,\n\t\t\twhereOnly.values,\n\t\t\tpayload,\n\t\t\toptions,\n\t\t);\n\t\tbinder.values.length = 0;\n\t\tbinder.values.push(...setValues, ...bound.values);\n\t\tfinalWhere = `WHERE ${reindexPlaceholders(bound.sql, setValues.length)}`;\n\t}\n\n\tconst parts = [\n\t\t`UPDATE ${quoteIdent(table)}`,\n\t\t`SET ${assignments.join(\", \")}`,\n\t\tfinalWhere,\n\t];\n\tif (wantsReturning(payload)) {\n\t\tparts.push(`RETURNING ${selectClause(payload.columns)}`);\n\t}\n\treturn { 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\tif (!sql || offset === 0) {\n\t\treturn sql;\n\t}\n\treturn 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\tpayload: AthenaDeletePayload,\n\toptions?: PostgresCompileOptions,\n): PostgresCompiledQuery {\n\tconst table = payload.table_name?.trim();\n\tif (!table) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"missing_table\",\n\t\t\t\"table_name is required for delete\",\n\t\t);\n\t}\n\n\tconst conditions: AthenaGatewayCondition[] = [...(payload.conditions ?? [])];\n\tif (payload.resource_id !== undefined && payload.resource_id !== null) {\n\t\tconst hasResourceIdFilter = conditions.some((condition) => {\n\t\t\tconst column = (condition.column ?? condition.eq_column ?? \"\").trim();\n\t\t\treturn column === \"resource_id\";\n\t\t});\n\t\tconst hasIdFilter = conditions.some((condition) => {\n\t\t\tconst column = (condition.column ?? condition.eq_column ?? \"\").trim();\n\t\t\treturn column === \"id\";\n\t\t});\n\t\t// Only invent `id = resource_id` when the caller did not already filter by\n\t\t// resource_id or id (e.g. delete({ resourceId }) with no eq conditions).\n\t\tif (!(hasResourceIdFilter || hasIdFilter)) {\n\t\t\tconditions.unshift({\n\t\t\t\tcolumn: \"id\",\n\t\t\t\toperator: \"eq\",\n\t\t\t\tvalue: payload.resource_id,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst where = buildWhere(conditions);\n\tif (!where.sql) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"unfiltered_delete\",\n\t\t\t\"DELETE requires at least one condition or resource_id on PostgreSQL direct\",\n\t\t);\n\t}\n\n\tlet finalWhere = where.sql;\n\tlet values = where.values;\n\n\tif (hasPaginationBounds(payload) || payload.sort_by) {\n\t\tif (!hasPaginationBounds(payload)) {\n\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\"order_without_bounds\",\n\t\t\t\t\"DELETE with sort_by requires limit/offset or page_size/current_page on PostgreSQL direct\",\n\t\t\t);\n\t\t}\n\t\tconst bound = boundedIdentityInClause(\n\t\t\ttable,\n\t\t\twhere.sql,\n\t\t\twhere.values,\n\t\t\tpayload,\n\t\t\toptions,\n\t\t);\n\t\tfinalWhere = `WHERE ${bound.sql}`;\n\t\tvalues = bound.values;\n\t}\n\n\tconst parts = [`DELETE FROM ${quoteIdent(table)}`, finalWhere];\n\tif (wantsReturning(payload)) {\n\t\tparts.push(`RETURNING ${selectClause(payload.columns)}`);\n\t}\n\treturn { 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\tpayload: AthenaRpcPayload,\n): PostgresCompiledQuery {\n\tconst name = (payload.function || payload.function_name || \"\").trim();\n\tif (!name) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"missing_function\",\n\t\t\t\"function is required for rpc\",\n\t\t);\n\t}\n\tconst schema = payload.schema?.trim();\n\tconst qualified = schema ? `${schema}.${name}` : name;\n\tif (!SAFE_QUALIFIED.test(qualified)) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"invalid_identifier\",\n\t\t\t`Invalid RPC function identifier: ${qualified}`,\n\t\t);\n\t}\n\n\tconst binder = new Binder();\n\tconst args =\n\t\tpayload.args &&\n\t\ttypeof payload.args === \"object\" &&\n\t\t!Array.isArray(payload.args)\n\t\t\t? Object.entries(payload.args)\n\t\t\t: [];\n\tconst argSql = args\n\t\t.map(([key, value]) => {\n\t\t\tif (!SAFE_QUALIFIED.test(key)) {\n\t\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\t\"invalid_identifier\",\n\t\t\t\t\t`Invalid RPC argument name: ${key}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn `${quoteIdent(key)} => ${binder.add(jsonValue(value as AthenaJsonValue))}`;\n\t\t})\n\t\t.join(\", \");\n\n\tconst select = payload.head\n\t\t? \"COUNT(*)::bigint AS __athena_count\"\n\t\t: selectClause(payload.select);\n\tconst parts = [`SELECT ${select} FROM ${quoteIdent(qualified)}(${argSql})`];\n\n\tif (payload.filters?.length) {\n\t\tconst whereParts = payload.filters.map((filter) =>\n\t\t\tconditionToWhere(\n\t\t\t\t{\n\t\t\t\t\tcolumn: filter.column,\n\t\t\t\t\toperator: filter.operator,\n\t\t\t\t\tvalue: filter.value as AthenaGatewayCondition[\"value\"],\n\t\t\t\t},\n\t\t\t\tbinder,\n\t\t\t),\n\t\t);\n\t\tparts.push(`WHERE ${whereParts.join(\" AND \")}`);\n\t}\n\n\tif (payload.order?.column?.trim()) {\n\t\tconst direction = payload.order.ascending === false ? \"DESC\" : \"ASC\";\n\t\tparts.push(`ORDER BY ${quoteIdent(payload.order.column)} ${direction}`);\n\t}\n\n\tif (!payload.head && payload.limit !== undefined) {\n\t\tparts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`);\n\t}\n\tif (!payload.head && payload.offset !== undefined) {\n\t\tparts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`);\n\t}\n\n\treturn { text: parts.join(\" \"), values: binder.values };\n}\n","import {\n\ttype AthenaConditionAst,\n\tAthenaQueryError,\n\ttype AthenaQueryPlan,\n\ttype AthenaResolvedRelationConditionAst,\n\ttype AthenaResolvedSource,\n\tcanonicalizePagination,\n\tPOSTGRES_QUERY_CAPABILITIES,\n\tvalidatePlanAgainstCapabilities,\n} from \"../query/engine/index.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\treadonly values: unknown[] = [];\n\n\tadd(value: unknown): string {\n\t\tthis.values.push(value);\n\t\treturn `$${this.values.length}`;\n\t}\n}\n\nfunction quoteIdent(name: string): string {\n\tconst trimmed = name.trim();\n\tif (!trimmed || !SAFE_QUALIFIED.test(trimmed)) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"invalid_identifier\",\n\t\t\t`Invalid SQL identifier for PostgreSQL direct: ${name}`,\n\t\t);\n\t}\n\treturn quoteQualifiedIdentifier(trimmed);\n}\n\nfunction qualifyTable(source: AthenaResolvedSource): string {\n\tconst name = source.schema\n\t\t? `${source.schema}.${source.table}`\n\t\t: source.table;\n\treturn `${quoteIdent(name)} AS ${quoteIdent(source.alias)}`;\n}\n\nfunction qualifyNamedTable(\n\tschema: string | undefined,\n\ttable: string,\n\talias: string,\n): string {\n\tconst name = schema ? `${schema}.${table}` : table;\n\treturn `${quoteIdent(name)} AS ${quoteIdent(alias)}`;\n}\n\nfunction qualifyColumn(alias: string, column: string): string {\n\tif (column === \"*\") {\n\t\treturn `${quoteIdent(alias)}.*`;\n\t}\n\treturn `${quoteIdent(alias)}.${quoteIdent(column)}`;\n}\n\nfunction compileCondition(\n\tcondition: AthenaConditionAst,\n\tparent: AthenaResolvedSource,\n\tbinder: Binder,\n): string {\n\tswitch (condition.kind) {\n\t\tcase \"and\":\n\t\t\treturn `(${condition.conditions.map((child) => compileCondition(child, parent, binder)).join(\" AND \")})`;\n\t\tcase \"or\":\n\t\t\treturn `(${condition.conditions.map((child) => compileCondition(child, parent, binder)).join(\" OR \")})`;\n\t\tcase \"not\":\n\t\t\treturn `(NOT ${compileCondition(condition.condition, parent, binder)})`;\n\t\tcase \"is-null\":\n\t\t\treturn `${qualifyColumn(parent.alias, condition.field.field)} IS${condition.negated ? \" NOT\" : \"\"} NULL`;\n\t\tcase \"is-true\":\n\t\t\treturn `${qualifyColumn(parent.alias, condition.field.field)} IS TRUE`;\n\t\tcase \"is-false\":\n\t\t\treturn `${qualifyColumn(parent.alias, condition.field.field)} IS FALSE`;\n\t\tcase \"in\": {\n\t\t\tif (condition.values.length === 0) {\n\t\t\t\treturn \"1 = 0\";\n\t\t\t}\n\t\t\tconst placeholders = condition.values\n\t\t\t\t.map((value) => binder.add(value ?? null))\n\t\t\t\t.join(\", \");\n\t\t\treturn `${qualifyColumn(parent.alias, condition.field.field)} IN (${placeholders})`;\n\t\t}\n\t\tcase \"contains\": {\n\t\t\tconst value =\n\t\t\t\tcondition.value !== null &&\n\t\t\t\ttypeof condition.value === \"object\" &&\n\t\t\t\t!Array.isArray(condition.value)\n\t\t\t\t\t? JSON.stringify(condition.value)\n\t\t\t\t\t: condition.value;\n\t\t\treturn `${qualifyColumn(parent.alias, condition.field.field)} @> ${binder.add(value ?? null)}::jsonb`;\n\t\t}\n\t\tcase \"contained-by\": {\n\t\t\tconst value =\n\t\t\t\tcondition.value !== null &&\n\t\t\t\ttypeof condition.value === \"object\" &&\n\t\t\t\t!Array.isArray(condition.value)\n\t\t\t\t\t? JSON.stringify(condition.value)\n\t\t\t\t\t: condition.value;\n\t\t\treturn `${qualifyColumn(parent.alias, condition.field.field)} <@ ${binder.add(value ?? null)}::jsonb`;\n\t\t}\n\t\tcase \"compare\": {\n\t\t\tif (condition.value === null) {\n\t\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\t\"ATHENA_QUERY_INVALID_NORMALIZED_AST\",\n\t\t\t\t\t`Compare against null must be normalized to is-null before PostgreSQL compilation`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst column = qualifyColumn(parent.alias, condition.field.field);\n\t\t\tconst placeholder = binder.add(condition.value);\n\t\t\tswitch (condition.operator) {\n\t\t\t\tcase \"eq\":\n\t\t\t\t\treturn `${column} = ${placeholder}`;\n\t\t\t\tcase \"neq\":\n\t\t\t\t\treturn `${column} <> ${placeholder}`;\n\t\t\t\tcase \"gt\":\n\t\t\t\t\treturn `${column} > ${placeholder}`;\n\t\t\t\tcase \"gte\":\n\t\t\t\t\treturn `${column} >= ${placeholder}`;\n\t\t\t\tcase \"lt\":\n\t\t\t\t\treturn `${column} < ${placeholder}`;\n\t\t\t\tcase \"lte\":\n\t\t\t\t\treturn `${column} <= ${placeholder}`;\n\t\t\t\tcase \"like\":\n\t\t\t\t\treturn `${column} LIKE ${placeholder}`;\n\t\t\t\tcase \"ilike\":\n\t\t\t\t\treturn `${column} ILIKE ${placeholder}`;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\t\t\"unsupported_operator\",\n\t\t\t\t\t\t`Unknown compare operator \"${String((condition as { operator?: string }).operator)}\"`,\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tcase \"resolved-relation\":\n\t\t\treturn compileRelationPredicate(condition, parent, binder);\n\t\tcase \"relation\":\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_INVALID_NORMALIZED_AST\",\n\t\t\t\t`Unresolved relation predicate \"${condition.relation}\" reached the PostgreSQL compiler`,\n\t\t\t);\n\t\tdefault:\n\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\"unsupported_operator\",\n\t\t\t\t`Unsupported condition kind \"${String((condition as { kind?: string }).kind)}\"`,\n\t\t\t);\n\t}\n}\n\nfunction compileRelationPredicate(\n\tcondition: AthenaResolvedRelationConditionAst,\n\tparent: AthenaResolvedSource,\n\tbinder: Binder,\n): string {\n\tconst child: AthenaResolvedSource = {\n\t\talias: condition.target.alias,\n\t\tmodelId: condition.target.modelId,\n\t\tschema: condition.target.schema,\n\t\ttable: condition.target.table,\n\t};\n\tconst { fromSql, joinSql } = compileRelationScope(\n\t\tparent,\n\t\tchild,\n\t\tcondition.descriptor,\n\t\tcondition.junctionAlias,\n\t);\n\tconst filters = [joinSql];\n\tif (condition.filter) {\n\t\tconst inner = compileCondition(condition.filter, child, binder);\n\t\tif (condition.predicate === \"every\") {\n\t\t\tfilters.push(`(${inner}) IS NOT TRUE`);\n\t\t} else {\n\t\t\tfilters.push(inner);\n\t\t}\n\t}\n\tconst exists = `EXISTS (SELECT 1 FROM ${fromSql} WHERE ${filters.join(\" AND \")})`;\n\tif (\n\t\tcondition.predicate === \"none\" ||\n\t\tcondition.predicate === \"isNot\" ||\n\t\tcondition.predicate === \"every\"\n\t) {\n\t\treturn `NOT ${exists}`;\n\t}\n\treturn exists;\n}\n\ntype RelationScopeEndpoint = {\n\tcolumns: string[];\n\tschema?: string;\n\ttable: string;\n};\n\ntype RelationScopeJunction = {\n\tfromColumns: string[];\n\tschema?: string;\n\ttable: string;\n\ttoColumns: string[];\n};\n\ntype RelationScopeDescriptorShape = {\n\tcardinality: string;\n\tfrom: RelationScopeEndpoint;\n\tjunction?: RelationScopeJunction;\n\tto: RelationScopeEndpoint;\n};\n\nfunction compileRelationScope(\n\tparent: AthenaResolvedSource,\n\tchild: AthenaResolvedSource,\n\tdescriptor:\n\t\t| AthenaResolvedRelationConditionAst[\"descriptor\"]\n\t\t| RelationScopeDescriptorShape,\n\tjunctionAlias?: string,\n): { fromSql: string; joinSql: string } {\n\tif (descriptor.cardinality === \"many-to-many\") {\n\t\tif (!descriptor.junction || !junctionAlias) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_INVALID_NORMALIZED_AST\",\n\t\t\t\t`Many-to-many relation ${descriptor.from.table} → ${descriptor.to.table} is missing junction metadata`,\n\t\t\t);\n\t\t}\n\t\tconst junctionOn = descriptor.junction.toColumns\n\t\t\t.map(\n\t\t\t\t(column, index) =>\n\t\t\t\t\t`${qualifyColumn(junctionAlias, column)} = ${qualifyColumn(child.alias, descriptor.to.columns[index] as string)}`,\n\t\t\t)\n\t\t\t.join(\" AND \");\n\t\tconst parentOn = descriptor.from.columns\n\t\t\t.map(\n\t\t\t\t(column, index) =>\n\t\t\t\t\t`${qualifyColumn(parent.alias, column)} = ${qualifyColumn(junctionAlias, descriptor.junction?.fromColumns[index] as string)}`,\n\t\t\t)\n\t\t\t.join(\" AND \");\n\t\treturn {\n\t\t\tfromSql: `${qualifyTable(child)} JOIN ${qualifyNamedTable(descriptor.junction.schema, descriptor.junction.table, junctionAlias)} ON ${junctionOn}`,\n\t\t\tjoinSql: parentOn,\n\t\t};\n\t}\n\treturn {\n\t\tfromSql: qualifyTable(child),\n\t\tjoinSql: joinPredicate(\n\t\t\tparent,\n\t\t\tchild,\n\t\t\tdescriptor.from.columns,\n\t\t\tdescriptor.to.columns,\n\t\t),\n\t};\n}\n\nfunction joinPredicate(\n\tparent: AthenaResolvedSource,\n\tchild: AthenaResolvedSource,\n\tfromColumns: string[],\n\ttoColumns: string[],\n): string {\n\tif (fromColumns.length === 0 || fromColumns.length !== toColumns.length) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"invalid_condition\",\n\t\t\t\"Relation join requires matching composite key columns\",\n\t\t);\n\t}\n\treturn fromColumns\n\t\t.map(\n\t\t\t(column, index) =>\n\t\t\t\t`${qualifyColumn(parent.alias, column)} = ${qualifyColumn(child.alias, toColumns[index] as string)}`,\n\t\t)\n\t\t.join(\" AND \");\n}\n\nfunction compileSelectList(plan: AthenaQueryPlan, binder: Binder): string {\n\tconst parts: string[] = [];\n\tfor (const field of plan.selection) {\n\t\tif (field.kind === \"column\") {\n\t\t\tconst expr = qualifyColumn(plan.source.alias, field.column);\n\t\t\tparts.push(\n\t\t\t\tfield.alias && field.alias !== field.column\n\t\t\t\t\t? `${expr} AS ${quoteIdent(field.alias)}`\n\t\t\t\t\t: expr,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst childPlan = field.plan;\n\t\tconst { fromSql, joinSql } = compileRelationScope(\n\t\t\tplan.source,\n\t\t\tchildPlan.source,\n\t\t\tfield.descriptor,\n\t\t\tfield.junctionAlias,\n\t\t);\n\t\tconst innerSelect = compileSelectList(childPlan, binder);\n\t\tconst childWhere = [joinSql];\n\t\tif (childPlan.filter) {\n\t\t\tchildWhere.push(\n\t\t\t\tcompileCondition(childPlan.filter, childPlan.source, binder),\n\t\t\t);\n\t\t}\n\t\tconst childOrder = compileOrder(childPlan);\n\t\tconst childPage = canonicalizePagination(childPlan.pagination);\n\t\tconst toMany =\n\t\t\tfield.descriptor.cardinality === \"one-to-many\" ||\n\t\t\tfield.descriptor.cardinality === \"many-to-many\";\n\t\tconst childLimit = toMany\n\t\t\t? childPage.limit !== undefined\n\t\t\t\t? ` LIMIT ${Math.max(0, Math.trunc(childPage.limit))}`\n\t\t\t\t: \"\"\n\t\t\t: \" LIMIT 1\";\n\t\tconst childOffset =\n\t\t\tchildPage.offset !== undefined\n\t\t\t\t? ` OFFSET ${Math.max(0, Math.trunc(childPage.offset))}`\n\t\t\t\t: \"\";\n\n\t\tconst inner = `SELECT ${innerSelect} FROM ${fromSql} WHERE ${childWhere.join(\" AND \")}${childOrder}${childLimit}${childOffset}`;\n\t\tif (\n\t\t\tfield.descriptor.cardinality === \"one-to-many\" ||\n\t\t\tfield.descriptor.cardinality === \"many-to-many\"\n\t\t) {\n\t\t\tparts.push(\n\t\t\t\t`COALESCE((SELECT json_agg(row_to_json(${quoteIdent(childPlan.source.alias)})) FROM (${inner}) ${quoteIdent(childPlan.source.alias)}), '[]'::json) AS ${quoteIdent(field.alias)}`,\n\t\t\t);\n\t\t} else {\n\t\t\tparts.push(\n\t\t\t\t`(SELECT row_to_json(${quoteIdent(childPlan.source.alias)}) FROM (${inner}) ${quoteIdent(childPlan.source.alias)}) AS ${quoteIdent(field.alias)}`,\n\t\t\t);\n\t\t}\n\t}\n\treturn parts.join(\", \");\n}\n\nfunction compileOrder(plan: AthenaQueryPlan): string {\n\tif (!plan.orderBy?.length) {\n\t\treturn \"\";\n\t}\n\tconst parts = plan.orderBy.map((order) => {\n\t\tconst direction = order.direction === \"desc\" ? \"DESC\" : \"ASC\";\n\t\tconst nulls =\n\t\t\torder.nulls === \"first\"\n\t\t\t\t? \" NULLS FIRST\"\n\t\t\t\t: order.nulls === \"last\"\n\t\t\t\t\t? \" NULLS LAST\"\n\t\t\t\t\t: \"\";\n\t\treturn `${qualifyColumn(plan.source.alias, order.field.field)} ${direction}${nulls}`;\n\t});\n\treturn ` ORDER BY ${parts.join(\", \")}`;\n}\n\nexport function compilePostgresAst(\n\tplan: AthenaQueryPlan,\n): PostgresCompiledQuery {\n\tif (plan?.kind !== \"resolved-select\" || !Array.isArray(plan.selection)) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"unsupported_operator\",\n\t\t\t\"compilePostgresAst requires a resolved AthenaQueryPlan\",\n\t\t);\n\t}\n\tvalidatePlanAgainstCapabilities(plan, POSTGRES_QUERY_CAPABILITIES);\n\tconst binder = new Binder();\n\tconst selectList = compileSelectList(plan, binder);\n\tconst parts = [`SELECT ${selectList} FROM ${qualifyTable(plan.source)}`];\n\tif (plan.filter) {\n\t\tparts.push(`WHERE ${compileCondition(plan.filter, plan.source, binder)}`);\n\t}\n\tconst order = compileOrder(plan);\n\tif (order) {\n\t\tparts.push(order.trim());\n\t}\n\tconst page = canonicalizePagination(plan.pagination);\n\tlet limit = page.limit;\n\tif (plan.cardinality === \"first\" || plan.cardinality === \"unique\") {\n\t\tlimit = 1;\n\t}\n\tif (limit !== undefined) {\n\t\tparts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n\t}\n\tif (page.offset !== undefined) {\n\t\tparts.push(`OFFSET ${Math.max(0, Math.trunc(page.offset))}`);\n\t}\n\treturn { text: parts.join(\" \"), values: binder.values };\n}\n\nexport function compilePostgresAstCount(\n\tplan: AthenaQueryPlan,\n): PostgresCompiledQuery {\n\tvalidatePlanAgainstCapabilities(plan, POSTGRES_QUERY_CAPABILITIES);\n\tconst binder = new Binder();\n\tconst parts = [\n\t\t`SELECT COUNT(*)::bigint AS __athena_count FROM ${qualifyTable(plan.source)}`,\n\t];\n\tif (plan.filter) {\n\t\tparts.push(`WHERE ${compileCondition(plan.filter, plan.source, binder)}`);\n\t}\n\treturn { text: parts.join(\" \"), values: binder.values };\n}\n","import type {\n\tAthenaRelationCatalog,\n\tAthenaRelationDescriptor,\n} 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\ninterface ForeignKeyRow {\n\tconstraint_name: string;\n\tfrom_column: string;\n\tfrom_schema: string;\n\tfrom_table: string;\n\tposition: number | string;\n\tto_column: string;\n\tto_schema: string;\n\tto_table: string;\n}\n\nconst catalogCache = new WeakMap<\n\tAthenaPostgresQueryable,\n\tPromise<AthenaRelationCatalog>\n>();\n\nexport async function loadPostgresRelationCatalog(\n\tqueryable: AthenaPostgresQueryable,\n): Promise<AthenaRelationCatalog> {\n\tconst cached = catalogCache.get(queryable);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\tconst pending = queryable.query(FK_SQL).then((result) => {\n\t\tconst groups = new Map<string, AthenaRelationDescriptor>();\n\t\tfor (const raw of result.rows as ForeignKeyRow[]) {\n\t\t\tconst id = `${raw.from_schema}.${raw.from_table}.${raw.constraint_name}`;\n\t\t\tconst existing = groups.get(id);\n\t\t\tif (existing) {\n\t\t\t\texisting.from.columns.push(raw.from_column);\n\t\t\t\texisting.to.columns.push(raw.to_column);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tgroups.set(id, {\n\t\t\t\tcardinality: \"many-to-one\",\n\t\t\t\tfrom: {\n\t\t\t\t\tcolumns: [raw.from_column],\n\t\t\t\t\tschema: raw.from_schema,\n\t\t\t\t\ttable: raw.from_table,\n\t\t\t\t},\n\t\t\t\tid,\n\t\t\t\tname: raw.to_table,\n\t\t\t\tto: {\n\t\t\t\t\tcolumns: [raw.to_column],\n\t\t\t\t\tschema: raw.to_schema,\n\t\t\t\t\ttable: raw.to_table,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn { entries: [...groups.values()] };\n\t});\n\tcatalogCache.set(queryable, pending);\n\treturn pending;\n}\n","import {\n\tAthenaQueryError,\n\ttype AthenaQueryPlan,\n\ttype AthenaRelationCatalog,\n\tisAthenaQueryPlan,\n\tisAthenaSelectQueryAst,\n\tmergeRelationCatalogs,\n\tnormalizeTransportPayload,\n\tresetQueryPlanAliases,\n\tresolveQueryPlan,\n\tselectPayloadHasRelations,\n} from \"../query/engine/index.ts\";\nimport { compilePostgresAst, compilePostgresAstCount } from \"./compile-ast.ts\";\nimport type { AthenaPostgresQueryable } from \"./driver.ts\";\nimport { loadPostgresRelationCatalog } from \"./relation-catalog.ts\";\nimport type { PostgresCompiledQuery } from \"./sql.ts\";\nimport { PostgresSqlCompileError } from \"./sql.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function needsPostgresAstPipeline(payload: unknown): boolean {\n\tif (isAthenaSelectQueryAst(payload) || isAthenaQueryPlan(payload)) {\n\t\treturn true;\n\t}\n\tif (selectPayloadHasRelations(payload)) {\n\t\treturn true;\n\t}\n\treturn isRecord(payload) && payload.operation === \"select\";\n}\n\nasync function resolveStructuredPlan(\n\tpayload: unknown,\n\tqueryable: AthenaPostgresQueryable,\n\toptions?: { catalog?: AthenaRelationCatalog },\n): Promise<AthenaQueryPlan> {\n\tresetQueryPlanAliases();\n\tif (isAthenaQueryPlan(payload)) {\n\t\treturn payload;\n\t}\n\tconst ast = normalizeTransportPayload(payload);\n\tconst live = await loadPostgresRelationCatalog(queryable);\n\tconst catalog = mergeRelationCatalogs(options?.catalog, live);\n\treturn resolveQueryPlan(ast, { catalog });\n}\n\nfunction rethrowStructuredCompile(error: unknown): never {\n\tif (\n\t\terror instanceof PostgresSqlCompileError ||\n\t\terror instanceof AthenaQueryError\n\t) {\n\t\tthrow error instanceof PostgresSqlCompileError\n\t\t\t? error\n\t\t\t: new PostgresSqlCompileError(error.code, error.message);\n\t}\n\tthrow error;\n}\n\nexport async function compilePostgresStructuredFetch(\n\tpayload: unknown,\n\tqueryable: AthenaPostgresQueryable,\n\toptions?: { catalog?: AthenaRelationCatalog },\n): Promise<PostgresCompiledQuery> {\n\ttry {\n\t\treturn compilePostgresAst(\n\t\t\tawait resolveStructuredPlan(payload, queryable, options),\n\t\t);\n\t} catch (error) {\n\t\trethrowStructuredCompile(error);\n\t}\n}\n\nexport async function compilePostgresStructuredCount(\n\tpayload: unknown,\n\tqueryable: AthenaPostgresQueryable,\n\toptions?: { catalog?: AthenaRelationCatalog },\n): Promise<PostgresCompiledQuery> {\n\ttry {\n\t\treturn compilePostgresAstCount(\n\t\t\tawait resolveStructuredPlan(payload, queryable, options),\n\t\t);\n\t} catch (error) {\n\t\trethrowStructuredCompile(error);\n\t}\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\tcode: AthenaGatewayTransportErrorCode;\n\thint?: string;\n\tmessage: string;\n\tstatus: number;\n\t/** PostgreSQL SQLSTATE when known. */\n\tsqlState?: string;\n}\n\nexport interface PostgresDriverErrorLike {\n\tcode?: string;\n\tcolumn?: string;\n\tconstraint?: string;\n\tdetail?: string;\n\tmessage?: string;\n\tschema?: string;\n\ttable?: string;\n}\n\n/** Strip embedded connection URIs from driver messages. */\nexport function sanitizePostgresMessage(message: string): string {\n\treturn message.replace(/postgres(?:ql)?:\\/\\/[^\\s'\"]+/gi, \"postgresql://***\");\n}\n\nfunction asDriverError(error: unknown): PostgresDriverErrorLike {\n\tif (error && typeof error === \"object\") {\n\t\treturn error as PostgresDriverErrorLike;\n\t}\n\treturn {\n\t\tmessage: error instanceof Error ? error.message : String(error),\n\t};\n}\n\nfunction withConstraintHint(\n\tbase: string,\n\terr: PostgresDriverErrorLike,\n): string {\n\tif (err.constraint?.trim()) {\n\t\treturn `${base} (${err.constraint.trim()})`;\n\t}\n\treturn base;\n}\n\n/**\n * Extract PostgreSQL provider facts for Error IR. SQLSTATE is `providerCode`.\n */\nexport function postgresProviderFailure(error: unknown): AthenaProviderFailureIR {\n\tconst mapped = mapPostgresDriverError(error);\n\treturn {\n\t\tmessage: mapped.message,\n\t\tprovider: \"postgres\",\n\t\t...(mapped.sqlState ? { providerCode: mapped.sqlState } : {}),\n\t\tsource: \"provider\",\n\t\tstatus: mapped.status,\n\t};\n}\n\n/**\n * Classify a thrown `pg` error into HTTP-ish status + Athena gateway code.\n */\nexport function mapPostgresDriverError(error: unknown): MappedPostgresError {\n\tconst err = asDriverError(error);\n\tconst sqlState =\n\t\ttypeof err.code === \"string\" && /^[0-9A-Z]{5}$/i.test(err.code)\n\t\t\t? err.code.toUpperCase()\n\t\t\t: undefined;\n\tconst message = sanitizePostgresMessage(\n\t\terr.message?.trim() ||\n\t\t\t(error instanceof Error ? error.message : String(error)) ||\n\t\t\t\"PostgreSQL driver error\",\n\t);\n\n\tif (!sqlState) {\n\t\t// Non-SQLSTATE driver failures (pool exhausted, network before handshake).\n\t\tconst lower = message.toLowerCase();\n\t\tif (\n\t\t\tlower.includes(\"econnrefused\") ||\n\t\t\tlower.includes(\"enotfound\") ||\n\t\t\tlower.includes(\"econnreset\") ||\n\t\t\tlower.includes(\"connection terminated\") ||\n\t\t\tlower.includes(\"timeout\")\n\t\t) {\n\t\t\treturn {\n\t\t\t\tcode: \"NETWORK_ERROR\",\n\t\t\t\thint: \"connection\",\n\t\t\t\tmessage,\n\t\t\t\tstatus: 503,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tcode: \"HTTP_ERROR\",\n\t\t\tmessage,\n\t\t\tstatus: 400,\n\t\t};\n\t}\n\n\tswitch (sqlState) {\n\t\tcase \"23505\": // unique_violation\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: withConstraintHint(\"unique_violation\", err),\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 409,\n\t\t\t};\n\t\tcase \"23503\": // foreign_key_violation\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: withConstraintHint(\"foreign_key_violation\", err),\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 409,\n\t\t\t};\n\t\tcase \"23502\": // not_null_violation\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: err.column\n\t\t\t\t\t? `not_null_violation (${err.column})`\n\t\t\t\t\t: \"not_null_violation\",\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 400,\n\t\t\t};\n\t\tcase \"23514\": // check_violation\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: withConstraintHint(\"check_violation\", err),\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 400,\n\t\t\t};\n\t\tcase \"22P02\": // invalid_text_representation\n\t\tcase \"22003\": // numeric_value_out_of_range\n\t\tcase \"22007\": // invalid_datetime_format\n\t\tcase \"22008\": // datetime_field_overflow\n\t\tcase \"22012\": // division_by_zero\n\t\tcase \"22023\": // invalid_parameter_value\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: sqlState,\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 400,\n\t\t\t};\n\t\tcase \"42P01\": // undefined_table\n\t\tcase \"42703\": // undefined_column\n\t\tcase \"42883\": // undefined_function\n\t\tcase \"3F000\": // invalid_schema_name\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: sqlState,\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 404,\n\t\t\t};\n\t\tcase \"42P02\": // undefined_parameter\n\t\tcase \"42704\": // undefined_object\n\t\tcase \"42601\": // syntax_error\n\t\tcase \"42602\": // invalid_name\n\t\tcase \"42701\": // duplicate_column\n\t\tcase \"42P07\": // duplicate_table\n\t\tcase \"3D000\": // invalid_catalog_name\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: sqlState,\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 400,\n\t\t\t};\n\t\tcase \"40001\": // serialization_failure\n\t\tcase \"40P01\": // deadlock_detected\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: sqlState,\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 409,\n\t\t\t};\n\t\tcase \"55P03\": // lock_not_available\n\t\tcase \"53300\": // too_many_connections\n\t\tcase \"53400\": // configuration_limit_exceeded\n\t\tcase \"57P03\": // cannot_connect_now\n\t\tcase \"08000\": // connection_exception\n\t\tcase \"08003\": // connection_does_not_exist\n\t\tcase \"08006\": // connection_failure\n\t\tcase \"08001\": // sqlclient_unable_to_establish_sqlconnection\n\t\tcase \"08004\": // sqlserver_rejected_establishment_of_sqlconnection\n\t\t\treturn {\n\t\t\t\tcode: \"NETWORK_ERROR\",\n\t\t\t\thint: sqlState,\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 503,\n\t\t\t};\n\t\tcase \"28P01\": // invalid_password\n\t\tcase \"28000\": // invalid_authorization_specification\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: sqlState,\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 401,\n\t\t\t};\n\t\tcase \"42501\": // insufficient_privilege\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: sqlState,\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 403,\n\t\t\t};\n\t\tcase \"57014\": // query_canceled\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: sqlState,\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 408,\n\t\t\t};\n\t\tcase \"25006\": // read_only_sql_transaction\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: sqlState,\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 403,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: sqlState,\n\t\t\t\tmessage,\n\t\t\t\tsqlState,\n\t\t\t\tstatus: 400,\n\t\t\t};\n\t}\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\t/**\n\t * Schema when qualified (`public.users`).\n\t * `null` for bare names — resolve via the connection `search_path`.\n\t */\n\tschema: string | null;\n\ttable: string;\n\t/** Cache / display key before search_path resolve: bare table or schema.table */\n\tkey: string;\n\t/** True when the caller passed an unqualified relation name. */\n\tbare: boolean;\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\tconst trimmed = tableName.trim();\n\tif (!trimmed) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"missing_table\",\n\t\t\t\"table_name is required for bounded mutation identity resolve\",\n\t\t);\n\t}\n\tconst parts = trimmed\n\t\t.split(\".\")\n\t\t.map((p) => p.trim())\n\t\t.filter(Boolean);\n\tif (parts.length === 1) {\n\t\tconst table = parts[0]!;\n\t\tif (!SAFE_IDENT.test(table)) {\n\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\"invalid_identifier\",\n\t\t\t\t`Invalid table name for identity resolve: ${trimmed}`,\n\t\t\t);\n\t\t}\n\t\treturn { bare: true, key: table, schema: null, table };\n\t}\n\tif (parts.length === 2) {\n\t\tconst [schema, table] = parts as [string, string];\n\t\tif (!SAFE_IDENT.test(schema) || !SAFE_IDENT.test(table)) {\n\t\t\tthrow new PostgresSqlCompileError(\n\t\t\t\t\"invalid_identifier\",\n\t\t\t\t`Invalid schema-qualified name for identity resolve: ${trimmed}`,\n\t\t\t);\n\t\t}\n\t\treturn { bare: false, key: `${schema}.${table}`, schema, table };\n\t}\n\tthrow new PostgresSqlCompileError(\n\t\t\"invalid_identifier\",\n\t\t`Identity resolve supports schema.table only: ${trimmed}`,\n\t);\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\tif (!SAFE_IDENT.test(identifier)) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"invalid_identifier\",\n\t\t\t`Invalid table name for regclass resolve: ${identifier}`,\n\t\t);\n\t}\n\treturn `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nexport interface PostgresIdentityCache {\n\t/** Successful identity column by schema.table */\n\tget(key: string): string | undefined;\n\t/** Negative cache: resolved and none found */\n\tgetMissing(key: string): boolean;\n\tset(key: string, column: string): void;\n\tsetMissing(key: string): void;\n}\n\nexport function createPostgresIdentityCache(): PostgresIdentityCache {\n\tconst hits = new Map<string, string>();\n\tconst misses = new Set<string>();\n\treturn {\n\t\tget(key) {\n\t\t\treturn hits.get(key);\n\t\t},\n\t\tgetMissing(key) {\n\t\t\treturn misses.has(key);\n\t\t},\n\t\tset(key, column) {\n\t\t\tmisses.delete(key);\n\t\t\thits.set(key, column);\n\t\t},\n\t\tsetMissing(key) {\n\t\t\thits.delete(key);\n\t\t\tmisses.add(key);\n\t\t},\n\t};\n}\n\nfunction columnFromRows(rows: unknown[]): string | undefined {\n\tconst first = rows[0];\n\tif (!first || typeof first !== \"object\" || Array.isArray(first)) {\n\t\treturn undefined;\n\t}\n\tconst name = (first as { column_name?: unknown }).column_name;\n\treturn typeof name === \"string\" && name.trim() ? name.trim() : undefined;\n}\n\ninterface ResolvedRelation {\n\t/** Cache key for this relation (schema.table). */\n\tkey: string;\n\tschema: string;\n\ttable: string;\n}\n\nasync function resolveRelationTarget(\n\tpool: AthenaPostgresQueryable,\n\tparsed: ParsedTableName,\n): Promise<ResolvedRelation> {\n\tif (!parsed.bare && parsed.schema) {\n\t\treturn {\n\t\t\tkey: `${parsed.schema}.${parsed.table}`,\n\t\t\tschema: parsed.schema,\n\t\t\ttable: parsed.table,\n\t\t};\n\t}\n\n\tconst result = await pool.query<{\n\t\tschema_name: string;\n\t\ttable_name: string;\n\t}>(RESOLVE_BARE_RELATION_SQL, [quotePostgresRegclassName(parsed.table)]);\n\tconst first = result.rows[0];\n\tif (\n\t\t!first ||\n\t\ttypeof first !== \"object\" ||\n\t\ttypeof first.schema_name !== \"string\" ||\n\t\ttypeof first.table_name !== \"string\" ||\n\t\t!first.schema_name.trim() ||\n\t\t!first.table_name.trim()\n\t) {\n\t\tthrow new PostgresSqlCompileError(\n\t\t\t\"relation_not_found\",\n\t\t\t`Cannot resolve bare table \"${parsed.table}\" on the connection search_path for bounded mutation identity`,\n\t\t);\n\t}\n\tconst schema = first.schema_name.trim();\n\tconst table = first.table_name.trim();\n\treturn { 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\tpool: AthenaPostgresQueryable,\n\ttableName: string,\n\tcache?: PostgresIdentityCache,\n): Promise<string> {\n\tconst parsed = parsePostgresTableName(tableName);\n\n\t// Qualified names can consult the cache before any catalog round-trip.\n\tif (!parsed.bare && cache) {\n\t\tconst cached = cache.get(parsed.key);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\t\tif (cache.getMissing(parsed.key)) {\n\t\t\tthrow noIdentityError(parsed.key);\n\t\t}\n\t}\n\n\t// Bare names always resolve the live search_path target first.\n\tconst target = await resolveRelationTarget(pool, parsed);\n\n\tif (cache) {\n\t\tconst cachedQualified = cache.get(target.key);\n\t\tif (cachedQualified) {\n\t\t\treturn cachedQualified;\n\t\t}\n\t\tif (cache.getMissing(target.key)) {\n\t\t\tthrow noIdentityError(target.key);\n\t\t}\n\t}\n\n\tconst pk = await pool.query<{ column_name: string }>(PK_IDENTITY_SQL, [\n\t\ttarget.schema,\n\t\ttarget.table,\n\t]);\n\tconst pkCol = columnFromRows(pk.rows as unknown[]);\n\tif (pkCol) {\n\t\tcache?.set(target.key, pkCol);\n\t\treturn pkCol;\n\t}\n\n\tconst uniq = await pool.query<{ column_name: string }>(UNIQUE_IDENTITY_SQL, [\n\t\ttarget.schema,\n\t\ttarget.table,\n\t]);\n\tconst uniqCol = columnFromRows(uniq.rows as unknown[]);\n\tif (uniqCol) {\n\t\tcache?.set(target.key, uniqCol);\n\t\treturn uniqCol;\n\t}\n\n\tcache?.setMissing(target.key);\n\tthrow noIdentityError(target.key);\n}\n\nfunction noIdentityError(tableKey: string): PostgresSqlCompileError {\n\treturn new PostgresSqlCompileError(\n\t\t\"bounded_mutation_no_unique_identity\",\n\t\t`Bounded update/delete on \"${tableKey}\" requires a proven single-column PRIMARY KEY or UNIQUE NOT NULL index`,\n\t);\n}\n\n/**\n * True when payload needs identity resolution for bounded mutations.\n */\nexport function needsBoundedIdentity(payload: {\n\tlimit?: number;\n\toffset?: number;\n\tcurrent_page?: number;\n\tpage_size?: number;\n\tsort_by?: unknown;\n}): boolean {\n\treturn (\n\t\tpayload.limit !== undefined ||\n\t\tpayload.offset !== undefined ||\n\t\tpayload.page_size !== undefined ||\n\t\tpayload.current_page !== undefined ||\n\t\tBoolean(payload.sort_by)\n\t);\n}\n","import { AthenaGatewayError } from \"../gateway/errors.ts\";\nimport type {\n\tAthenaDeletePayload,\n\tAthenaFetchPayload,\n\tAthenaGatewayCallOptions,\n\tAthenaGatewayResponse,\n\tAthenaInsertPayload,\n\tAthenaUpdatePayload,\n} from \"../gateway/types.ts\";\nimport { AthenaQueryError } from \"../query/engine/index.ts\";\nimport { resolveMutationAffectedRows } from \"../result/mutation-meta.ts\";\nimport {\n\tcompilePostgresStructuredCount,\n\tcompilePostgresStructuredFetch,\n\tneedsPostgresAstPipeline,\n} from \"./compile-fetch.ts\";\nimport type { AthenaPostgresQueryable } from \"./driver.ts\";\nimport { mapPostgresDriverError, sanitizePostgresMessage } from \"./errors.ts\";\nimport {\n\tneedsBoundedIdentity,\n\ttype PostgresIdentityCache,\n\tresolvePostgresBoundedIdentityColumn,\n} from \"./identity.ts\";\nimport {\n\tcompilePostgresCount,\n\tcompilePostgresDelete,\n\tcompilePostgresFetch,\n\tcompilePostgresInsert,\n\tcompilePostgresUpdate,\n\textractAthenaCount,\n\ttype PostgresCompiledQuery,\n\ttype PostgresCompileOptions,\n\tPostgresSqlCompileError,\n} from \"./sql.ts\";\n\nexport function resolvePostgresStripNulls(\n\tpayloadStrip: boolean | undefined,\n\tcallOptions: AthenaGatewayCallOptions | undefined,\n\tdefaultValue: boolean,\n): boolean {\n\tif (typeof payloadStrip === \"boolean\") {\n\t\treturn payloadStrip;\n\t}\n\tif (typeof callOptions?.stripNulls === \"boolean\") {\n\t\treturn callOptions.stripNulls;\n\t}\n\treturn defaultValue;\n}\n\nexport function stripNullPropertiesFromRows(rows: unknown[]): unknown[] {\n\treturn rows.map((row) => {\n\t\tif (row === null || typeof row !== \"object\" || Array.isArray(row)) {\n\t\t\treturn row;\n\t\t}\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n\t\t\tif (value !== null) {\n\t\t\t\tout[key] = value;\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t});\n}\n\nexport function maybeStripNullRows(rows: unknown[], strip: boolean): unknown[] {\n\treturn strip ? stripNullPropertiesFromRows(rows) : rows;\n}\n\nexport function postgresSuccessResponse<T>(\n\tdata: T,\n\tcount: number | null | undefined,\n\traw: unknown,\n\taffectedRows?: number | null,\n): AthenaGatewayResponse<T> {\n\treturn {\n\t\t...(affectedRows !== undefined ? { affectedRows } : {}),\n\t\tcount: count ?? null,\n\t\tdata,\n\t\terror: undefined,\n\t\terrorDetails: null,\n\t\tok: true,\n\t\traw,\n\t\tstatus: 200,\n\t\tstatusText: \"OK\",\n\t};\n}\n\nexport function postgresErrorResponse<T>(\n\tstatus: number,\n\tcode:\n\t\t| \"HTTP_ERROR\"\n\t\t| \"UNKNOWN_ERROR\"\n\t\t| \"INVALID_JSON\"\n\t\t| \"NETWORK_ERROR\"\n\t\t| \"INVALID_URL\",\n\tmessage: string,\n\tendpoint: string,\n\tmethod: string,\n\thint?: string,\n): AthenaGatewayResponse<T> {\n\tconst error = new AthenaGatewayError({\n\t\tcode,\n\t\tendpoint: endpoint as never,\n\t\thint,\n\t\tmessage,\n\t\tmethod: method as never,\n\t\tstatus,\n\t});\n\treturn {\n\t\tdata: null,\n\t\terror: error.message,\n\t\terrorDetails: error.toDetails(),\n\t\tok: false,\n\t\traw: { code, error: message },\n\t\tstatus,\n\t\tstatusText: null,\n\t};\n}\n\nexport function postgresCompileErrorResponse<T>(\n\terror: unknown,\n\tendpoint: string,\n\tmethod: string,\n): AthenaGatewayResponse<T> {\n\tif (error instanceof PostgresSqlCompileError) {\n\t\treturn postgresErrorResponse(\n\t\t\t400,\n\t\t\t\"HTTP_ERROR\",\n\t\t\terror.message,\n\t\t\tendpoint,\n\t\t\tmethod,\n\t\t\t`PostgreSQL SQL compile failed (${error.code})`,\n\t\t);\n\t}\n\tif (error instanceof AthenaQueryError) {\n\t\treturn postgresErrorResponse(\n\t\t\t400,\n\t\t\t\"HTTP_ERROR\",\n\t\t\terror.message,\n\t\t\tendpoint,\n\t\t\tmethod,\n\t\t\t`Athena query compile failed (${error.code})`,\n\t\t);\n\t}\n\tconst mapped = mapPostgresDriverError(error);\n\treturn postgresErrorResponse(\n\t\tmapped.status,\n\t\tmapped.code,\n\t\tmapped.message,\n\t\tendpoint,\n\t\tmethod,\n\t\tmapped.hint,\n\t);\n}\n\nexport function mapPostgresQueryError<T>(\n\terror: unknown,\n\tendpoint: string,\n\tmethod: string,\n): AthenaGatewayResponse<T> {\n\tif (error instanceof PostgresSqlCompileError) {\n\t\treturn postgresCompileErrorResponse(error, endpoint, method);\n\t}\n\tconst mapped = mapPostgresDriverError(error);\n\treturn postgresErrorResponse(\n\t\tmapped.status,\n\t\tmapped.code,\n\t\tsanitizePostgresMessage(mapped.message),\n\t\tendpoint,\n\t\tmethod,\n\t\tmapped.hint,\n\t);\n}\n\nexport async function executePostgresCompiled<T>(input: {\n\tcompiled: PostgresCompiledQuery;\n\tendpoint: string;\n\tmapResult?: (\n\t\trows: unknown[],\n\t\trowCount: number,\n\t) => { count: number | null; data: T };\n\tmethod: string;\n\tqueryable: AthenaPostgresQueryable;\n\tstripNulls?: boolean;\n}): Promise<AthenaGatewayResponse<T>> {\n\ttry {\n\t\tconst result = await input.queryable.query(\n\t\t\tinput.compiled.text,\n\t\t\tinput.compiled.values,\n\t\t);\n\t\tconst strip = input.stripNulls ?? true;\n\t\tconst rows = maybeStripNullRows(result.rows as unknown[], strip);\n\t\tconst rowCount =\n\t\t\ttypeof result.rowCount === \"number\" ? result.rowCount : rows.length;\n\t\tconst mapped = input.mapResult?.(rows, rowCount) ?? {\n\t\t\tcount: rowCount,\n\t\t\tdata: rows as T,\n\t\t};\n\t\tconst affectedRows = resolveMutationAffectedRows({\n\t\t\tcount:\n\t\t\t\ttypeof result.rowCount === \"number\"\n\t\t\t\t\t? result.rowCount\n\t\t\t\t\t: (mapped.count ?? null),\n\t\t\tendpoint: input.endpoint,\n\t\t\traw: result,\n\t\t});\n\t\treturn postgresSuccessResponse(\n\t\t\tmapped.data,\n\t\t\tmapped.count,\n\t\t\tresult,\n\t\t\taffectedRows,\n\t\t);\n\t} catch (error) {\n\t\treturn mapPostgresQueryError(error, input.endpoint, input.method);\n\t}\n}\n\nexport async function resolvePostgresMutationCompileOptions(input: {\n\tcache: PostgresIdentityCache;\n\tdefaultIdentityColumn?: string;\n\tpayload: {\n\t\tcurrent_page?: number;\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tpage_size?: number;\n\t\tsort_by?: unknown;\n\t\ttable_name?: string;\n\t};\n\tqueryable: AthenaPostgresQueryable;\n}): Promise<PostgresCompileOptions | undefined> {\n\tif (!needsBoundedIdentity(input.payload)) {\n\t\treturn undefined;\n\t}\n\tconst hasPage =\n\t\tinput.payload.limit !== undefined ||\n\t\tinput.payload.offset !== undefined ||\n\t\tinput.payload.page_size !== undefined ||\n\t\tinput.payload.current_page !== undefined;\n\tif (!hasPage) {\n\t\treturn undefined;\n\t}\n\tif (input.defaultIdentityColumn) {\n\t\treturn { identityColumn: input.defaultIdentityColumn };\n\t}\n\tconst identityColumn = await resolvePostgresBoundedIdentityColumn(\n\t\tinput.queryable,\n\t\tinput.payload.table_name ?? \"\",\n\t\tinput.cache,\n\t);\n\treturn { identityColumn };\n}\n\nexport async function executePostgresFetch<T>(input: {\n\tcallOptions?: AthenaGatewayCallOptions;\n\tpayload: AthenaFetchPayload;\n\tqueryable: AthenaPostgresQueryable;\n}): Promise<AthenaGatewayResponse<T>> {\n\ttry {\n\t\tconst compiled = needsPostgresAstPipeline(input.payload)\n\t\t\t? await compilePostgresStructuredFetch(input.payload, input.queryable)\n\t\t\t: compilePostgresFetch(input.payload);\n\t\tconst stripNulls = resolvePostgresStripNulls(\n\t\t\tinput.payload.strip_nulls,\n\t\t\tinput.callOptions,\n\t\t\ttrue,\n\t\t);\n\t\tif (input.payload.head === true) {\n\t\t\treturn executePostgresCompiled({\n\t\t\t\tcompiled,\n\t\t\t\tendpoint: \"/gateway/fetch\",\n\t\t\t\tmapResult: (rows) => ({\n\t\t\t\t\tcount: extractAthenaCount(rows),\n\t\t\t\t\tdata: [] as T,\n\t\t\t\t}),\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tqueryable: input.queryable,\n\t\t\t\tstripNulls: false,\n\t\t\t});\n\t\t}\n\t\tconst wantsTotalCount =\n\t\t\tinput.payload.count === \"exact\" ||\n\t\t\tinput.payload.count === \"planned\" ||\n\t\t\tinput.payload.count === \"estimated\";\n\t\tif (wantsTotalCount) {\n\t\t\tconst countCompiled = needsPostgresAstPipeline(input.payload)\n\t\t\t\t? await compilePostgresStructuredCount(input.payload, input.queryable)\n\t\t\t\t: compilePostgresCount(input.payload);\n\t\t\tconst [dataResult, countResult] = await Promise.all([\n\t\t\t\tinput.queryable.query(compiled.text, compiled.values),\n\t\t\t\tinput.queryable.query(countCompiled.text, countCompiled.values),\n\t\t\t]);\n\t\t\tconst rows = maybeStripNullRows(dataResult.rows as unknown[], stripNulls);\n\t\t\tconst total = extractAthenaCount(countResult.rows as unknown[]);\n\t\t\treturn postgresSuccessResponse(rows as T, total, {\n\t\t\t\tcount: countResult,\n\t\t\t\tdata: dataResult,\n\t\t\t});\n\t\t}\n\t\treturn executePostgresCompiled({\n\t\t\tcompiled,\n\t\t\tendpoint: \"/gateway/fetch\",\n\t\t\tmapResult: (rows) => ({ count: rows.length, data: rows as T }),\n\t\t\tmethod: \"POST\",\n\t\t\tqueryable: input.queryable,\n\t\t\tstripNulls,\n\t\t});\n\t} catch (error) {\n\t\treturn postgresCompileErrorResponse(error, \"/gateway/fetch\", \"POST\");\n\t}\n}\n\nexport async function executePostgresInsert<T>(input: {\n\tcallOptions?: AthenaGatewayCallOptions;\n\tpayload: AthenaInsertPayload;\n\tqueryable: AthenaPostgresQueryable;\n}): Promise<AthenaGatewayResponse<T>> {\n\ttry {\n\t\tconst compiled = compilePostgresInsert(input.payload);\n\t\tconst stripNulls = resolvePostgresStripNulls(\n\t\t\tundefined,\n\t\t\tinput.callOptions,\n\t\t\ttrue,\n\t\t);\n\t\treturn executePostgresCompiled({\n\t\t\tcompiled,\n\t\t\tendpoint: \"/gateway/insert\",\n\t\t\tmapResult: (rows, rowCount) => {\n\t\t\t\tif (!Array.isArray(input.payload.insert_body) && rows.length === 1) {\n\t\t\t\t\treturn { count: rowCount, data: rows[0] as T };\n\t\t\t\t}\n\t\t\t\treturn { count: rowCount, data: rows as T };\n\t\t\t},\n\t\t\tmethod: \"PUT\",\n\t\t\tqueryable: input.queryable,\n\t\t\tstripNulls,\n\t\t});\n\t} catch (error) {\n\t\treturn postgresCompileErrorResponse(error, \"/gateway/insert\", \"PUT\");\n\t}\n}\n\nexport async function executePostgresUpdate<T>(input: {\n\tcache: PostgresIdentityCache;\n\tcallOptions?: AthenaGatewayCallOptions;\n\tdefaultIdentityColumn?: string;\n\tpayload: AthenaUpdatePayload;\n\tqueryable: AthenaPostgresQueryable;\n}): Promise<AthenaGatewayResponse<T>> {\n\ttry {\n\t\tconst compileOptions = await resolvePostgresMutationCompileOptions({\n\t\t\tcache: input.cache,\n\t\t\tdefaultIdentityColumn: input.defaultIdentityColumn,\n\t\t\tpayload: input.payload,\n\t\t\tqueryable: input.queryable,\n\t\t});\n\t\tconst compiled = compilePostgresUpdate(input.payload, compileOptions);\n\t\tconst stripNulls = resolvePostgresStripNulls(\n\t\t\tinput.payload.strip_nulls,\n\t\t\tinput.callOptions,\n\t\t\ttrue,\n\t\t);\n\t\treturn executePostgresCompiled({\n\t\t\tcompiled,\n\t\t\tendpoint: \"/gateway/update\",\n\t\t\tmapResult: (rows, rowCount) => {\n\t\t\t\tif (rows.length === 1) {\n\t\t\t\t\treturn { count: rowCount, data: rows[0] as T };\n\t\t\t\t}\n\t\t\t\treturn { count: rowCount, data: rows as T };\n\t\t\t},\n\t\t\tmethod: \"POST\",\n\t\t\tqueryable: input.queryable,\n\t\t\tstripNulls,\n\t\t});\n\t} catch (error) {\n\t\treturn postgresCompileErrorResponse(error, \"/gateway/update\", \"POST\");\n\t}\n}\n\nexport async function executePostgresDelete<T>(input: {\n\tcache: PostgresIdentityCache;\n\tcallOptions?: AthenaGatewayCallOptions;\n\tdefaultIdentityColumn?: string;\n\tpayload: AthenaDeletePayload;\n\tqueryable: AthenaPostgresQueryable;\n}): Promise<AthenaGatewayResponse<T>> {\n\ttry {\n\t\tconst compileOptions = await resolvePostgresMutationCompileOptions({\n\t\t\tcache: input.cache,\n\t\t\tdefaultIdentityColumn: input.defaultIdentityColumn,\n\t\t\tpayload: input.payload,\n\t\t\tqueryable: input.queryable,\n\t\t});\n\t\tconst compiled = compilePostgresDelete(input.payload, compileOptions);\n\t\tconst stripNulls = resolvePostgresStripNulls(\n\t\t\tundefined,\n\t\t\tinput.callOptions,\n\t\t\ttrue,\n\t\t);\n\t\treturn executePostgresCompiled({\n\t\t\tcompiled,\n\t\t\tendpoint: \"/gateway/delete\",\n\t\t\tmethod: \"DELETE\",\n\t\t\tqueryable: input.queryable,\n\t\t\tstripNulls,\n\t\t});\n\t} catch (error) {\n\t\treturn postgresCompileErrorResponse(error, \"/gateway/delete\", \"DELETE\");\n\t}\n}\n\nexport async function executePostgresTransactionOperation<T>(input: {\n\tcache: PostgresIdentityCache;\n\tcallOptions?: AthenaGatewayCallOptions;\n\tdefaultIdentityColumn?: string;\n\toperation: {\n\t\tkind: \"fetch\" | \"insert\" | \"update\" | \"delete\";\n\t\tpayload:\n\t\t\t| AthenaFetchPayload\n\t\t\t| AthenaInsertPayload\n\t\t\t| AthenaUpdatePayload\n\t\t\t| AthenaDeletePayload;\n\t};\n\tqueryable: AthenaPostgresQueryable;\n}): Promise<AthenaGatewayResponse<T>> {\n\tswitch (input.operation.kind) {\n\t\tcase \"fetch\":\n\t\t\treturn executePostgresFetch({\n\t\t\t\tcallOptions: input.callOptions,\n\t\t\t\tpayload: input.operation.payload as AthenaFetchPayload,\n\t\t\t\tqueryable: input.queryable,\n\t\t\t});\n\t\tcase \"insert\":\n\t\t\treturn executePostgresInsert({\n\t\t\t\tcallOptions: input.callOptions,\n\t\t\t\tpayload: input.operation.payload as AthenaInsertPayload,\n\t\t\t\tqueryable: input.queryable,\n\t\t\t});\n\t\tcase \"update\":\n\t\t\treturn executePostgresUpdate({\n\t\t\t\tcache: input.cache,\n\t\t\t\tcallOptions: input.callOptions,\n\t\t\t\tdefaultIdentityColumn: input.defaultIdentityColumn,\n\t\t\t\tpayload: input.operation.payload as AthenaUpdatePayload,\n\t\t\t\tqueryable: input.queryable,\n\t\t\t});\n\t\tcase \"delete\":\n\t\t\treturn executePostgresDelete({\n\t\t\t\tcache: input.cache,\n\t\t\t\tcallOptions: input.callOptions,\n\t\t\t\tdefaultIdentityColumn: input.defaultIdentityColumn,\n\t\t\t\tpayload: input.operation.payload as AthenaDeletePayload,\n\t\t\t\tqueryable: input.queryable,\n\t\t\t});\n\t\tdefault:\n\t\t\treturn postgresErrorResponse(\n\t\t\t\t400,\n\t\t\t\t\"HTTP_ERROR\",\n\t\t\t\t\"Unsupported transaction operation\",\n\t\t\t\t\"/gateway/transaction\",\n\t\t\t\t\"POST\",\n\t\t\t);\n\t}\n}\n","import {\n\tbuildPostgresBeginStatement,\n\tnextInternalSavepointName,\n} from \"../db/transaction/begin-sql.ts\";\nimport { AthenaTransactionError } from \"../db/transaction/errors.ts\";\nimport type {\n\tAthenaInteractiveTransactionTransport,\n\tAthenaResolvedTransactionOptions,\n\tAthenaTransactionOperation,\n\tAthenaTransactionTransport,\n\tAthenaTransactionTransportResult,\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, AthenaPostgresPool } from \"./driver.ts\";\nimport { executePostgresTransactionOperation } from \"./execute.ts\";\nimport type { PostgresIdentityCache } from \"./identity.ts\";\n\nfunction quoteSavepointIdent(name: string): string {\n\tif (!/^athena_sp_\\d+$/.test(name)) {\n\t\tthrow new AthenaTransactionError(\n\t\t\t\"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n\t\t\t\"Savepoint names must be generated internally\",\n\t\t);\n\t}\n\treturn `\"${name}\"`;\n}\n\nasync function runControl(\n\tclient: AthenaPostgresClient,\n\tsql: string,\n): Promise<void> {\n\tawait client.query(sql);\n}\n\nexport function createPostgresTransactionTransport(input: {\n\tdefaultIdentityColumn?: string;\n\tgetPool: () => Promise<AthenaPostgresPool>;\n\tidentityCache: PostgresIdentityCache;\n}): AthenaTransactionTransport {\n\treturn {\n\t\tcapabilities: POSTGRES_DIRECT_TRANSACTION_CAPABILITIES,\n\t\tasync beginInteractive(options?: AthenaResolvedTransactionOptions) {\n\t\t\tconst pool = await input.getPool();\n\t\t\tconst client = await pool.connect();\n\t\t\tlet released = false;\n\t\t\tconst release = (err?: Error | boolean) => {\n\t\t\t\tif (released) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treleased = true;\n\t\t\t\tclient.release(err);\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait runControl(client, buildPostgresBeginStatement(options));\n\t\t\t} catch (error) {\n\t\t\t\trelease(true);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst interactive: AthenaInteractiveTransactionTransport = {\n\t\t\t\tasync commit() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait runControl(client, \"COMMIT\");\n\t\t\t\t\t} finally {\n\t\t\t\t\t\trelease();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tasync createSavepoint(name) {\n\t\t\t\t\tawait runControl(client, `SAVEPOINT ${quoteSavepointIdent(name)}`);\n\t\t\t\t},\n\t\t\t\tasync execute(operation: AthenaTransactionOperation) {\n\t\t\t\t\treturn executePostgresTransactionOperation({\n\t\t\t\t\t\tcache: input.identityCache,\n\t\t\t\t\t\tcallOptions: options?.callOptions,\n\t\t\t\t\t\tdefaultIdentityColumn: input.defaultIdentityColumn,\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tqueryable: client,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tasync releaseSavepoint(name) {\n\t\t\t\t\tawait runControl(\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\t`RELEASE SAVEPOINT ${quoteSavepointIdent(name)}`,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tasync rollback() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait runControl(client, \"ROLLBACK\");\n\t\t\t\t\t} finally {\n\t\t\t\t\t\trelease();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tasync rollbackToSavepoint(name) {\n\t\t\t\t\tawait runControl(\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\t`ROLLBACK TO SAVEPOINT ${quoteSavepointIdent(name)}`,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn interactive;\n\t\t},\n\t\tasync executeAtomic(\n\t\t\toperations: readonly AthenaTransactionOperation[],\n\t\t\toptions?: AthenaResolvedTransactionOptions,\n\t\t): Promise<AthenaTransactionTransportResult> {\n\t\t\tconst pool = await input.getPool();\n\t\t\tconst client = await pool.connect();\n\t\t\tconst results: AthenaGatewayResponse<unknown>[] = [];\n\t\t\ttry {\n\t\t\t\tawait runControl(client, buildPostgresBeginStatement(options));\n\t\t\t\tfor (const operation of operations) {\n\t\t\t\t\tconst result = await executePostgresTransactionOperation({\n\t\t\t\t\t\tcache: input.identityCache,\n\t\t\t\t\t\tcallOptions: options?.callOptions,\n\t\t\t\t\t\tdefaultIdentityColumn: input.defaultIdentityColumn,\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tqueryable: client,\n\t\t\t\t\t});\n\t\t\t\t\tresults.push(result);\n\t\t\t\t\tif (!result.ok) {\n\t\t\t\t\t\tawait runControl(client, \"ROLLBACK\");\n\t\t\t\t\t\treturn { committed: false, results };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait runControl(client, \"COMMIT\");\n\t\t\t\treturn { committed: true, results };\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tawait runControl(client, \"ROLLBACK\");\n\t\t\t\t} catch {\n\t\t\t\t\t// Prefer the original failure.\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { nextInternalSavepointName };\n","/**\n * Node database transport materializer (postgres / D1 already on config).\n */\n\nimport { createPostgresDirectCapabilities } from \"../../cloudflare/capabilities.ts\";\nimport {\n\tATHENA_PG_DIRECT_API_KEY,\n\tATHENA_PG_DIRECT_BASE_URL,\n} from \"../../postgres/constants.ts\";\nimport type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\nimport {\n\tbindPostgresRuntime,\n\tcreateAthenaPostgresRuntime,\n} from \"../../postgres/owned-runtime.ts\";\nimport {\n\tcreatePostgresDirectTransport,\n\tdisposePostgresDirectTransport,\n} from \"../../postgres/transport.ts\";\nimport { catalogFromModels } from \"../../query/engine/index.ts\";\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\nimport { isLocalStorageConfig, isS3StorageConfig } from \"../../storage/runtime.ts\";\nimport {\n\ttype AthenaClientConfig,\n\tAthenaConfigurationError,\n\thasRemoteAuthService,\n\thasRemoteDbGatewayUrl,\n\thasRemoteHttpServices,\n\thasRemoteHttpStorage,\n\tisD1Binding,\n\tnormalizeOptional,\n\tresolveUnifiedRemoteRoot,\n} from \"../../v3-client-core.ts\";\nimport type { AthenaRuntimePlan } from \"../plan/types.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 function materializeDatabase<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(\n\tconfig: AthenaClientConfig<TModels>,\n\t_plan?: AthenaRuntimePlan,\n): AthenaClientConfig<TModels> {\n\tconst pgUri = normalizeOptional(config.db?.pgUri);\n\tconst borrowedPool = config.db?.pool;\n\tif (!(pgUri || borrowedPool)) {\n\t\treturn config;\n\t}\n\n\tif (isD1Binding(config.db?.d1)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_NO_SERVICE_CONFIGURED\",\n\t\t\t\"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\t\t\t\"db\",\n\t\t);\n\t}\n\n\t// Explicit gateway mode keeps historical header-only pgUri routing on HTTP.\n\tconst modeRaw =\n\t\tnormalizeOptional(\n\t\t\ttypeof config.mode === \"string\" ? config.mode : undefined,\n\t\t) ?? normalizeOptional(config.env?.ATHENA_EXECUTION_MODE);\n\tif (modeRaw) {\n\t\tconst modeKey = modeRaw.trim().toLowerCase();\n\t\tif (\n\t\t\tmodeKey === \"gateway\" ||\n\t\t\tmodeKey === \"http\" ||\n\t\t\tmodeKey === \"remote\" ||\n\t\t\tmodeKey === \"server\"\n\t\t) {\n\t\t\treturn config;\n\t\t}\n\t}\n\n\tif (config.gatewayTransport) {\n\t\treturn config;\n\t}\n\n\tconst remoteRoot = resolveUnifiedRemoteRoot(config);\n\tconst remoteServices = hasRemoteHttpServices(config);\n\tconst remoteStorage = hasRemoteHttpStorage(config);\n\tconst remoteAuth = hasRemoteAuthService(config);\n\tconst postgresRuntime = createAthenaPostgresRuntime(\n\t\tborrowedPool\n\t\t\t? { pool: borrowedPool as AthenaPostgresPool }\n\t\t\t: { connectionString: pgUri as string },\n\t);\n\tconst gatewayTransport = createPostgresDirectTransport({\n\t\trelationCatalog: catalogFromModels(config.models),\n\t\truntime: postgresRuntime,\n\t});\n\tbindPostgresRuntime(gatewayTransport, postgresRuntime);\n\tconst next: AthenaClientConfig<TModels> = {\n\t\t...config,\n\t\tgatewayTransport,\n\t};\n\n\tconst explicitDbUrl = normalizeOptional(config.db?.url);\n\tconst remoteDbGateway = hasRemoteDbGatewayUrl(config);\n\tnext.db = {\n\t\t...config.db,\n\t\tpgUri,\n\t\t// Prefer sentinel for pure local DB so resolveCore has urls.db without\n\t\t// implying a real HTTP gateway. Keep explicit/remote db.url when present.\n\t\turl:\n\t\t\texplicitDbUrl ??\n\t\t\t(remoteDbGateway ? undefined : ATHENA_PG_DIRECT_BASE_URL),\n\t};\n\n\tconst explicitKey = normalizeOptional(config.key);\n\tif (explicitKey) {\n\t\tnext.key = explicitKey;\n\t} else if (remoteServices) {\n\t\tnext.key = undefined;\n\t} else {\n\t\tnext.key = ATHENA_PG_DIRECT_API_KEY;\n\t}\n\n\tif (remoteRoot) {\n\t\tnext.billing = {\n\t\t\t...(config.billing ?? {}),\n\t\t\turl: normalizeOptional(config.billing?.url) ?? remoteRoot,\n\t\t};\n\t}\n\n\tif (!config.capabilities) {\n\t\tnext.capabilities = createPostgresDirectCapabilities({\n\t\t\tauthRemote: remoteAuth,\n\t\t\tfindManyAst: true,\n\t\t\tflatCrud: true,\n\t\t\tquery: true,\n\t\t\trelations: true,\n\t\t\trpc: true,\n\t\t\tstorageConfigured:\n\t\t\t\tremoteStorage ||\n\t\t\t\tisLocalStorageConfig(config.storage) ||\n\t\t\t\tisS3StorageConfig(config.storage),\n\t\t});\n\t\tif (isLocalStorageConfig(config.storage)) {\n\t\t\tnext.capabilities.storage.local = true;\n\t\t\tnext.capabilities.storage.objects = true;\n\t\t}\n\t\tif (isS3StorageConfig(config.storage)) {\n\t\t\tnext.capabilities.storage.objects = true;\n\t\t}\n\t}\n\tnext.findManyAst = config.findManyAst ?? true;\n\n\treturn next;\n}\n\nexport function disposeMaterializedDatabase(\n\ttransport: Parameters<typeof disposePostgresDirectTransport>[0],\n): Promise<void> {\n\treturn disposePostgresDirectTransport(transport);\n}\n","/**\n * Node auth materializer — embedded vs remote intent is recorded on the plan.\n * Handler attach stays on the Node constructor so request middleware can bind\n * the frozen client (email delivery port + proxy handlers).\n */\n\nimport type { AthenaRuntimePlan } from \"../plan/types.ts\";\n\nexport function materializeAuth<TConfig>(\n\tconfig: TConfig,\n\t_plan?: AthenaRuntimePlan,\n): TConfig {\n\treturn config;\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(\n\tvalue: unknown,\n): value is AthenaChatConfig {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction chatUrlOf(chat: boolean | AthenaChatConfig | undefined): string | undefined {\n\tif (!isAthenaChatConfig(chat)) {\n\t\treturn undefined;\n\t}\n\tconst url = chat.url?.trim();\n\treturn 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\tchat?: boolean | AthenaChatConfig;\n\tclusterUrl?: string | null;\n\tdatabaseUrl?: string | null;\n}): AthenaChatExecutionMode {\n\tconst chat = input.chat;\n\tif (chat === undefined || chat === false) {\n\t\treturn \"disabled\";\n\t}\n\n\tconst databaseUrl = input.databaseUrl?.trim() || undefined;\n\tconst url = chatUrlOf(chat);\n\tconst explicitMode = isAthenaChatConfig(chat) ? chat.mode : undefined;\n\n\tif (\n\t\texplicitMode !== undefined &&\n\t\texplicitMode !== \"local\" &&\n\t\texplicitMode !== \"remote\"\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_CHAT_MODE_INVALID\",\n\t\t\t'chat.mode must be \"local\" or \"remote\". Pass chat: false to disable Chat.',\n\t\t\t\"chat\",\n\t\t);\n\t}\n\n\tif (explicitMode === \"local\") {\n\t\tif (url) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_CHAT_LOCAL_REMOTE_CONFLICT\",\n\t\t\t\t'chat.mode \"local\" cannot be combined with chat.url. Use remote Chat or omit the URL.',\n\t\t\t\t\"chat\",\n\t\t\t);\n\t\t}\n\t\tif (!databaseUrl) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_CHAT_LOCAL_DATABASE_REQUIRED\",\n\t\t\t\t'chat.mode \"local\" requires databaseUrl (DATABASE_URL).',\n\t\t\t\t\"chat\",\n\t\t\t);\n\t\t}\n\t\treturn \"local\";\n\t}\n\n\tif (explicitMode === \"remote\") {\n\t\tif (!url) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_CHAT_REMOTE_URL_REQUIRED\",\n\t\t\t\t'chat.mode \"remote\" requires chat.url.',\n\t\t\t\t\"chat\",\n\t\t\t);\n\t\t}\n\t\treturn \"remote\";\n\t}\n\n\tif (chat === true) {\n\t\tif (databaseUrl) {\n\t\t\treturn \"local\";\n\t\t}\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_CHAT_LOCAL_DATABASE_REQUIRED\",\n\t\t\t\"chat: true requires databaseUrl for local Chat, or pass chat.url for remote Chat.\",\n\t\t\t\"chat\",\n\t\t);\n\t}\n\n\tif (url) {\n\t\treturn \"remote\";\n\t}\n\n\tconst clusterUrl = input.clusterUrl?.trim() || undefined;\n\tif (clusterUrl) {\n\t\treturn \"remote\";\n\t}\n\n\tif (databaseUrl) {\n\t\treturn \"local\";\n\t}\n\n\tthrow new AthenaConfigurationError(\n\t\t\"ATHENA_CHAT_CONFIG_INCOMPLETE\",\n\t\t\"Chat config needs chat.url (remote) or databaseUrl (local).\",\n\t\t\"chat\",\n\t);\n}\n","import type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\n\nexport type AthenaChatPoolOwnership = \"borrowed\" | \"owned\";\n\nexport interface AthenaChatQueryResult<TRow = Record<string, unknown>> {\n\trows: TRow[];\n}\n\nexport interface AthenaChatDatabase {\n\tclose(): Promise<void>;\n\tquery<TRow = Record<string, unknown>>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<AthenaChatQueryResult<TRow>>;\n\treadonly ownership: AthenaChatPoolOwnership;\n\ttransaction<T>(fn: (database: AthenaChatDatabase) => Promise<T>): Promise<T>;\n}\n\nclass BorrowedPoolDatabase implements AthenaChatDatabase {\n\treadonly ownership: AthenaChatPoolOwnership = \"borrowed\";\n\n\tconstructor(private readonly pool: AthenaPostgresPool) {}\n\n\tasync close(): Promise<void> {\n\t\t// Borrowed from root getPool(); Chat never ends the pool.\n\t}\n\n\tasync query<TRow = Record<string, unknown>>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<AthenaChatQueryResult<TRow>> {\n\t\tconst result = await this.pool.query(text, values);\n\t\treturn { rows: (result.rows ?? []) as TRow[] };\n\t}\n\n\tasync transaction<T>(fn: (database: AthenaChatDatabase) => Promise<T>): Promise<T> {\n\t\tconst client = await this.pool.connect();\n\t\ttry {\n\t\t\tawait client.query(\"BEGIN\");\n\t\t\tconst scoped: AthenaChatDatabase = {\n\t\t\t\tclose: async () => {},\n\t\t\t\townership: \"borrowed\",\n\t\t\t\tquery: async (text, values) => {\n\t\t\t\t\tconst result = await client.query(text, values);\n\t\t\t\t\treturn { rows: (result.rows ?? []) as never };\n\t\t\t\t},\n\t\t\t\ttransaction: (inner) => inner(scoped),\n\t\t\t};\n\t\t\tconst value = await fn(scoped);\n\t\t\tawait client.query(\"COMMIT\");\n\t\t\treturn value;\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t} catch {\n\t\t\t\t// ignore rollback failure\n\t\t\t}\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tclient.release();\n\t\t}\n\t}\n}\n\nexport function createChatDatabaseFromPool(pool: AthenaPostgresPool): AthenaChatDatabase {\n\treturn new BorrowedPoolDatabase(pool);\n}\n\nexport function createChatDatabaseFromRuntime(runtime: {\n\tgetPool(): Promise<AthenaPostgresPool>;\n}): AthenaChatDatabase {\n\tconst resolve = async (): Promise<AthenaChatDatabase> =>\n\t\tcreateChatDatabaseFromPool(await runtime.getPool());\n\n\treturn {\n\t\tasync close() {},\n\t\townership: \"borrowed\",\n\t\tasync query(text, values) {\n\t\t\treturn (await resolve()).query(text, values);\n\t\t},\n\t\tasync transaction(fn) {\n\t\t\treturn (await resolve()).transaction(fn);\n\t\t},\n\t};\n}\n","import { isLocalAthenaAuthConfig } from \"../../auth/config.ts\";\nimport type {\n\tAthenaRequestContext,\n\tAthenaRequestContextProvider,\n} from \"../../client/request-context.ts\";\nimport type { AthenaChatCallOptions } from \"../types.ts\";\nimport type {\n\tAthenaPrincipalResolver,\n\tAthenaResolvedPrincipal,\n} from \"../../runtime/data/principal.ts\";\nimport {\n\tnormalizeAthenaRuntimeAuth,\n\tresolveAthenaRuntimePrincipal,\n} from \"../../runtime/authority/index.ts\";\nimport { chatBadRequest, chatUnauthenticated } from \"./errors.ts\";\n\nexport type ChatActor = {\n\torganizationId: string;\n\tuserId: string;\n};\n\nexport function actorFromResolved(\n\tresolved: AthenaResolvedPrincipal | null | undefined,\n): ChatActor {\n\tconst userId = resolved?.principal.userId?.trim();\n\tconst organizationId = resolved?.principal.organizationId?.trim();\n\tif (!resolved?.principal.authenticated || !userId) {\n\t\tthrow chatUnauthenticated();\n\t}\n\tif (!organizationId) {\n\t\tthrow chatBadRequest(\"Authenticated principal is missing organization_id.\");\n\t}\n\treturn { organizationId, userId };\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 resolveChatActor(\n\tresolvePrincipal: AthenaPrincipalResolver,\n\toptions?: AthenaChatCallOptions,\n): Promise<ChatActor> {\n\tconst headers = new Headers(options?.headers);\n\tif (options?.bearerToken && !headers.has(\"authorization\")) {\n\t\theaders.set(\"authorization\", \"Bearer \" + options.bearerToken);\n\t}\n\tif (options?.sessionToken && !headers.has(\"cookie\")) {\n\t\theaders.set(\"cookie\", `athena_session=${options.sessionToken}`);\n\t}\n\tconst resolved = await resolvePrincipal({ headers });\n\treturn actorFromResolved(resolved);\n}\n\n/** Payload fields that must never become actor identity. */\nexport type ChatRootPrincipalSource = {\n\tauth?: unknown;\n\tcontext?: AthenaRequestContext | AthenaRequestContextProvider;\n\tdatabaseUrl?: string;\n\tresolvePrincipal?: AthenaPrincipalResolver;\n};\n\nasync function resolveRootContext(\n\tcontext: ChatRootPrincipalSource[\"context\"],\n): Promise<AthenaRequestContext | undefined> {\n\tif (typeof context === \"function\") {\n\t\treturn context();\n\t}\n\treturn context;\n}\n\nfunction applyRootContextHeaders(headers: Headers, context?: AthenaRequestContext): Headers {\n\tconst next = new Headers(headers);\n\tif (context?.headers) {\n\t\tfor (const [name, value] of Object.entries(context.headers)) {\n\t\t\tif (value && !next.has(name)) {\n\t\t\t\tnext.set(name, value);\n\t\t\t}\n\t\t}\n\t}\n\tif (context?.bearerToken && !next.has(\"authorization\")) {\n\t\tnext.set(\"authorization\", \"Bearer \" + context.bearerToken);\n\t}\n\tif (context?.sessionToken && !next.has(\"cookie\")) {\n\t\tnext.set(\"cookie\", `athena_session=${context.sessionToken}`);\n\t} else if (context?.cookie && !next.has(\"cookie\")) {\n\t\tnext.set(\"cookie\", context.cookie);\n\t}\n\tif (context?.organizationId && !next.has(\"x-athena-organization\")) {\n\t\tnext.set(\"x-athena-organization\", context.organizationId);\n\t}\n\treturn next;\n}\n\nfunction principalFromRootContext(\n\tcontext?: AthenaRequestContext,\n): AthenaResolvedPrincipal | null {\n\tconst userId = context?.userId?.trim();\n\tconst organizationId = context?.organizationId?.trim();\n\tif (!userId || !organizationId) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tauthority: \"custom-trusted\",\n\t\tprincipal: {\n\t\t\tauthenticated: true,\n\t\t\tgrants: [],\n\t\t\torganizationId,\n\t\t\trights: [],\n\t\t\tuserId,\n\t\t},\n\t};\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\tsource: ChatRootPrincipalSource,\n): AthenaPrincipalResolver {\n\tif (source.resolvePrincipal) {\n\t\treturn source.resolvePrincipal;\n\t}\n\n\tconst authMaterial = isLocalAthenaAuthConfig(source.auth)\n\t\t? normalizeAthenaRuntimeAuth(\n\t\t\t\t{ mode: \"athena-session\" },\n\t\t\t\t\"trusted\",\n\t\t\t\t{ databaseUrl: source.databaseUrl },\n\t\t\t)\n\t\t: { mode: false as const };\n\n\treturn async (input) => {\n\t\tconst context = await resolveRootContext(source.context);\n\t\tconst headers = applyRootContextHeaders(input.headers, context);\n\t\tif (authMaterial.mode !== false) {\n\t\t\tconst headerRecord: Record<string, string> = {};\n\t\t\theaders.forEach((value, name) => {\n\t\t\t\theaderRecord[name] = value;\n\t\t\t});\n\t\t\tconst outcome = await resolveAthenaRuntimePrincipal(authMaterial, \"trusted\", {\n\t\t\t\theaders: headerRecord,\n\t\t\t\trequest: input.request,\n\t\t\t\trequestId: input.requestId,\n\t\t\t});\n\t\t\tif (outcome.ok && outcome.resolved.principal.authenticated) {\n\t\t\t\treturn outcome.resolved;\n\t\t\t}\n\t\t}\n\t\treturn principalFromRootContext(context);\n\t};\n}\n\nexport const CHAT_NON_AUTHORITATIVE_IDENTITY_KEYS = [\n\t\"sender_id\",\n\t\"senderId\",\n\t\"user_id\",\n\t\"userId\",\n\t\"organization_id\",\n\t\"organizationId\",\n\t\"created_by\",\n\t\"createdBy\",\n] as const;\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(headers: Headers): string | undefined {\n  return (\n    readBearerToken(headers.get(\"authorization\")) ??\n    readSessionTokenFromCookies(headers.get(\"cookie\"))\n  );\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  anonymousResolvedPrincipal,\n  normalizeAthenaPrincipal,\n  type AthenaPrincipalResolutionInput,\n  type AthenaResolvedPrincipal,\n  type AthenaRuntimeAuthConfig,\n  type AthenaRuntimeAuthMaterial,\n  type AthenaRuntimeSessionLookup,\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  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  if (auth.mode === \"jwt\") {\n    throw authConfigInvalid(\n      \"JWT principal resolution is not implemented. Use athena-session, custom, or service.\"\n    );\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(configured.authorization);\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      lookupSession,\n      mode: \"athena-session\",\n      ...(verifyOrganizationMembership\n        ? { verifyOrganizationMembership }\n        : {}),\n    };\n  }\n\n  if (configured.mode === \"custom\") {\n    if (typeof configured.resolvePrincipal !== \"function\") {\n      throw authConfigInvalid(\n        \"auth.mode \\\"custom\\\" requires resolvePrincipal.\"\n      );\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 token = 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 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 {\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 { PostgresAuthStores } from \"../../auth/local/stores.ts\";\nimport { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport { compareAuthorizationShadow, hasLegacyRoleMap } from \"../authorization/shadow.ts\";\nimport type { AthenaAuthorizationStore } from \"../authorization/store.ts\";\nimport type {\n\tAthenaPrincipalRightsProjection,\n\tAthenaRuntimeAuthConfig,\n\tAthenaRuntimeAuthSessionStore,\n\tAthenaRuntimeOrganizationVerifier,\n\tAthenaRuntimeSessionLookup,\n\tAthenaRuntimeSessionLookupFn,\n} from \"./principal.ts\";\nimport {\n\ttype AthenaRightsResolution,\n\teffectiveRightsFromResolution,\n\tresolveStoredUserRightsResolution,\n\tvalidateAthenaRightsProjection,\n} from \"./rights-resolution.ts\";\n\nexport type { AthenaRightsResolution } from \"./rights-resolution.ts\";\n\n/** Create a lookup session from auth stores. */\nexport function createLookupSessionFromAuthStores(\n\tstores: AthenaRuntimeAuthSessionStore,\n\toptions?: { authorization?: AthenaPrincipalRightsProjection },\n): AthenaRuntimeSessionLookupFn {\n\tassertStrictRoleProjection(options?.authorization);\n\treturn async (token) => {\n\t\tconst session = await stores.getSessionByToken(token);\n\t\tif (!session) {\n\t\t\treturn null;\n\t\t}\n\t\tconst user = await stores.getUserById(session.user_id);\n\t\tif (!user) {\n\t\t\treturn null;\n\t\t}\n\t\tconst assigned = await resolveAssignedRights(stores, user.id, session.active_organization_id);\n\t\tconst useAssignment =\n\t\t\tassigned !== undefined && !hasLegacyRoleMap(options?.authorization);\n\t\tlet rights: readonly string[];\n\t\tif (useAssignment) {\n\t\t\trights = assigned;\n\t\t} else {\n\t\t\tconst resolution = resolveStoredUserRightsResolution(\n\t\t\t\tuser,\n\t\t\t\toptions?.authorization,\n\t\t\t\t{ userId: user.id },\n\t\t\t);\n\t\t\trights = effectiveRightsFromResolution(resolution);\n\t\t\tif (assigned !== undefined) {\n\t\t\t\tcompareAuthorizationShadow({\n\t\t\t\t\tassignedRights: assigned,\n\t\t\t\t\tlegacyRights: rights,\n\t\t\t\t\tuserId: user.id,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst grants = Array.isArray(user.grants)\n\t\t\t? user.grants.map((entry) => String(entry))\n\t\t\t: [];\n\t\tconst lookup: AthenaRuntimeSessionLookup = {\n\t\t\tsession: {\n\t\t\t\tactiveOrganizationId: session.active_organization_id ?? null,\n\t\t\t\texpiresAt: session.expires_at,\n\t\t\t\tid: session.id,\n\t\t\t\trevoked: session.active === false,\n\t\t\t\tuserId: session.user_id,\n\t\t\t},\n\t\t\tuser: {\n\t\t\t\tbanned: isUserEffectivelyBanned(user),\n\t\t\t\t...(grants.length > 0 ? { grants } : {}),\n\t\t\t\tid: user.id,\n\t\t\t\t...(rights.length > 0 ? { rights } : {}),\n\t\t\t\t...(user.role ? { role: user.role } : {}),\n\t\t\t},\n\t\t};\n\t\treturn lookup;\n\t};\n}\n\nexport function resolveStoredUserRights(\n\tuser: {\n\t\tmetadata?: unknown;\n\t\trights?: readonly string[];\n\t\trole?: string | null;\n\t},\n\tauthorization?: AthenaPrincipalRightsProjection,\n): AthenaRightsResolution {\n\treturn resolveStoredUserRightsResolution(user, authorization);\n}\n\nexport function createAthenaSessionAuthFromStores(input: {\n\tauthorization?: AthenaPrincipalRightsProjection;\n\tgetStores: () => Promise<AthenaRuntimeAuthSessionStore>;\n}): Extract<AthenaRuntimeAuthConfig, { mode: \"athena-session\" }> {\n\tassertStrictRoleProjection(input.authorization);\n\treturn {\n\t\tlookupSession: async (token) => {\n\t\t\tconst stores = await input.getStores();\n\t\t\treturn createLookupSessionFromAuthStores(stores, {\n\t\t\t\tauthorization: input.authorization,\n\t\t\t})(token);\n\t\t},\n\t\tmode: \"athena-session\",\n\t};\n}\n\nexport function readAuthRightsProjection(\n\tconfig: unknown,\n): AthenaPrincipalRightsProjection | undefined {\n\tif (!config || typeof config !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst auth = (config as { auth?: unknown }).auth;\n\tif (!auth || typeof auth !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst authorization = (auth as { authorization?: unknown }).authorization;\n\tif (!authorization || typeof authorization !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst record = authorization as AthenaPrincipalRightsProjection;\n\treturn {\n\t\t...(typeof record.defaultRole === \"string\"\n\t\t\t? { defaultRole: record.defaultRole }\n\t\t\t: {}),\n\t\t...(record.mode === \"role\" || record.mode === \"stored\"\n\t\t\t? { mode: record.mode }\n\t\t\t: {}),\n\t\t...(record.rightsByRole ? { rightsByRole: record.rightsByRole } : {}),\n\t\t...(record.strictRoles === true ? { strictRoles: true } : {}),\n\t};\n}\n\nfunction assertStrictRoleProjection(\n\tauthorization: AthenaPrincipalRightsProjection | undefined,\n): void {\n\tif (authorization?.strictRoles !== true) {\n\t\treturn;\n\t}\n\tconst projection = validateAthenaRightsProjection(authorization);\n\tconst first = projection.issues[0];\n\tif (!projection.ok && first) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t`ATHENA_AUTH_CONFIG_INVALID: ${first.message}`,\n\t\t\t\"auth\",\n\t\t);\n\t}\n}\n\n/** Create a membership verifier from auth stores. */\nexport function createMembershipVerifierFromAuthStores(\n\tstores: AthenaRuntimeAuthSessionStore,\n): AthenaRuntimeOrganizationVerifier | undefined {\n\tif (typeof stores.getMember !== \"function\") {\n\t\treturn undefined;\n\t}\n\treturn async ({ organizationId, userId }) => {\n\t\tconst member = await stores.getMember?.(organizationId, userId);\n\t\treturn member != null;\n\t};\n}\n\n/** Create deferred Postgres auth stores. */\nexport function createDeferredPostgresAuthStores(\n\tdatabaseUrl: string,\n): AthenaRuntimeAuthSessionStore {\n\tlet ready: Promise<PostgresAuthStores> | undefined;\n\tconst resolve = () => {\n\t\tready ??= (async () => {\n\t\t\tconst database = await createPostgresAuthDatabase(databaseUrl);\n\t\t\treturn new PostgresAuthStores(database);\n\t\t})();\n\t\treturn ready;\n\t};\n\treturn {\n\t\tasync getMember(organizationId, userId) {\n\t\t\tconst stores = await resolve();\n\t\t\treturn stores.getMember(organizationId, userId);\n\t\t},\n\t\tasync getSessionByToken(token) {\n\t\t\tconst stores = await resolve();\n\t\t\treturn stores.getSessionByToken(token);\n\t\t},\n\t\tasync getUserById(id) {\n\t\t\tconst stores = await resolve();\n\t\t\treturn stores.getUserById(id);\n\t\t},\n\t\tasync hasAuthorizationAssignment(userId) {\n\t\t\tconst stores = await resolve();\n\t\t\treturn stores.authorization.hasUserAssignment(userId);\n\t\t},\n\t\tasync resolveEffectiveRights(input) {\n\t\t\tconst stores = await resolve();\n\t\t\tconst rights = await stores.authorization.resolveEffectiveRights({\n\t\t\t\tactiveOrganizationId: input.activeOrganizationId,\n\t\t\t\tgetMember: (organizationId, userId) =>\n\t\t\t\t\tstores.getMember(organizationId, userId),\n\t\t\t\tuserId: input.userId,\n\t\t\t});\n\t\t\treturn [...rights];\n\t\t},\n\t};\n}\n\nasync function resolveAssignedRights(\n\tstores: AthenaRuntimeAuthSessionStore,\n\tuserId: string,\n\tactiveOrganizationId?: string | null,\n): Promise<readonly string[] | undefined> {\n\ttry {\n\t\treturn await resolveAssignedRightsOrThrow(\n\t\t\tstores,\n\t\t\tuserId,\n\t\t\tactiveOrganizationId,\n\t\t);\n\t} catch {\n\t\t// Missing authorization tables or a store fault must not fail the\n\t\t// session principal (Data/Billing HTTP would become 401).\n\t\treturn undefined;\n\t}\n}\n\nasync function resolveAssignedRightsOrThrow(\n\tstores: AthenaRuntimeAuthSessionStore,\n\tuserId: string,\n\tactiveOrganizationId?: string | null,\n): Promise<readonly string[] | undefined> {\n\tif (typeof stores.resolveEffectiveRights !== \"function\") {\n\t\tconst authorization = authorizationFromUnknownStore(stores);\n\t\tif (!authorization) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst hasAssignment = await authorization.hasUserAssignment(userId);\n\t\tif (!hasAssignment) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst getMember = stores.getMember;\n\t\tif (typeof getMember !== \"function\") {\n\t\t\treturn [...(await authorization.resolveEffectiveRights({\n\t\t\t\tactiveOrganizationId,\n\t\t\t\tgetMember: async () => undefined,\n\t\t\t\tuserId,\n\t\t\t}))];\n\t\t}\n\t\treturn [\n\t\t\t...(await authorization.resolveEffectiveRights({\n\t\t\t\tactiveOrganizationId,\n\t\t\t\tgetMember: async (organizationId, memberUserId) => {\n\t\t\t\t\tconst member = await getMember(organizationId, memberUserId);\n\t\t\t\t\treturn member as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tcreated_at: Date | string;\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\torganization_id: string;\n\t\t\t\t\t\t\t\trole: string;\n\t\t\t\t\t\t\t\tuser_id: string;\n\t\t\t\t\t\t  }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t},\n\t\t\t\tuserId,\n\t\t\t})),\n\t\t];\n\t}\n\tconst hasAssignment = await stores.hasAuthorizationAssignment?.(userId);\n\tif (hasAssignment === false) {\n\t\treturn undefined;\n\t}\n\treturn stores.resolveEffectiveRights({\n\t\tactiveOrganizationId,\n\t\tuserId,\n\t});\n}\n\nfunction authorizationFromUnknownStore(\n\tstores: AthenaRuntimeAuthSessionStore,\n): AthenaAuthorizationStore | undefined {\n\tif (!(\"authorization\" in stores)) {\n\t\treturn undefined;\n\t}\n\tconst candidate = (stores as { authorization?: AthenaAuthorizationStore })\n\t\t.authorization;\n\treturn candidate;\n}\n","import { type AthenaRightKey, parseAthenaRightKey } from \"../../rights/key.ts\";\nimport type { AthenaPrincipalRightsProjection } from \"./principal.ts\";\n\n/**\n * Legacy `rightsByRole` / `mode: \"role\"` projection. Persisted authorization\n * assignments are the product SSOT. Do not add new consumers of this path.\n */\n\nexport type AthenaRightsResolutionMode = \"role\" | \"stored\";\n\nexport type AthenaRightsResolutionSource =\n\t| \"role\"\n\t| \"default-role\"\n\t| \"stored\"\n\t| \"none\";\n\nexport type AthenaRightsResolutionReason =\n\t| \"role_not_mapped\"\n\t| \"default_role_not_mapped\"\n\t| \"no_rights_configured\";\n\nexport type AthenaRightsResolution =\n\t| {\n\t\tok: true;\n\t\trole: string;\n\t\tsource: Exclude<AthenaRightsResolutionSource, \"none\">;\n\t\trights: readonly string[];\n\t}\n\t| {\n\t\tok: false;\n\t\treason: AthenaRightsResolutionReason;\n\t\trole: string;\n\t\trights: readonly [];\n\t\tsource: \"none\";\n\t};\n\nexport const ATHENA_RIGHTS_RESOLUTION_KIND =\n\t\"athena_rights_resolution\" as const;\n\nexport interface AthenaRightsResolutionDiagnostic {\n\tkind: typeof ATHENA_RIGHTS_RESOLUTION_KIND;\n\tuserId: string;\n\tstoredRole?: string;\n\tdefaultRole?: string;\n\tselectedRole?: string;\n\tconfiguredRoles: readonly string[];\n\tsource: AthenaRightsResolutionSource;\n\teffectiveRights: readonly string[];\n\teffectiveRightCount: number;\n\tmode: AthenaRightsResolutionMode;\n\treason?: AthenaRightsResolutionReason;\n}\n\nexport type AthenaRightsResolutionDiagnosticListener = (\n\tdiagnostic: AthenaRightsResolutionDiagnostic,\n) => void;\n\nexport interface AthenaRightsProjectionValidationIssue {\n\tmessage: string;\n\tpath: string;\n}\n\nexport interface AthenaRightsProjectionValidation {\n\tissues: readonly AthenaRightsProjectionValidationIssue[];\n\tok: boolean;\n}\n\nconst listeners = new Set<AthenaRightsResolutionDiagnosticListener>();\nlet lastDiagnostic: AthenaRightsResolutionDiagnostic | undefined;\n\nexport function subscribeAthenaRightsResolutionDiagnostics(\n\tlistener: AthenaRightsResolutionDiagnosticListener,\n): () => void {\n\tlisteners.add(listener);\n\treturn () => {\n\t\tlisteners.delete(listener);\n\t};\n}\n\nexport function getLastAthenaRightsResolutionDiagnostic():\n\t| AthenaRightsResolutionDiagnostic\n\t| undefined {\n\treturn lastDiagnostic;\n}\n\nexport function resetAthenaRightsResolutionDiagnostics(): void {\n\tlastDiagnostic = undefined;\n}\n\nexport function defineAthenaRights(\n\tkeys: readonly string[],\n): readonly AthenaRightKey[] {\n\treturn Object.freeze(keys.map((key) => parseAthenaRightKey(key)));\n}\n\nexport function resolveAuthorizationMode(\n\tauthorization?: AthenaPrincipalRightsProjection,\n): AthenaRightsResolutionMode {\n\treturn authorization?.mode === \"stored\" ? \"stored\" : \"role\";\n}\n\nexport function configuredRoleNames(\n\tauthorization?: AthenaPrincipalRightsProjection,\n): readonly string[] {\n\treturn Object.keys(authorization?.rightsByRole ?? {});\n}\n\nexport function resolveStoredUserRightsResolution(\n\tuser: {\n\t\tmetadata?: unknown;\n\t\trights?: readonly string[];\n\t\trole?: string | null;\n\t},\n\tauthorization?: AthenaPrincipalRightsProjection,\n\toptions?: { userId?: string },\n): AthenaRightsResolution {\n\tconst mode = resolveAuthorizationMode(authorization);\n\tconst resolution =\n\t\tmode === \"stored\"\n\t\t\t? resolveStoredMode(user)\n\t\t\t: resolveRoleMode(user, authorization);\n\temitAthenaRightsResolutionDiagnostic(\n\t\tdiagnosticFromResolution(resolution, user, authorization, options?.userId),\n\t);\n\treturn resolution;\n}\n\nexport function effectiveRightsFromResolution(\n\tresolution: AthenaRightsResolution,\n): readonly string[] {\n\treturn resolution.rights;\n}\n\nexport function validateAthenaRightsProjection(\n\tauthorization: AthenaPrincipalRightsProjection | undefined,\n): AthenaRightsProjectionValidation {\n\tconst issues: AthenaRightsProjectionValidationIssue[] = [];\n\tif (!authorization) {\n\t\treturn { issues, ok: true };\n\t}\n\tconst mode = resolveAuthorizationMode(authorization);\n\tif (mode === \"stored\") {\n\t\treturn { issues, ok: true };\n\t}\n\tconst table = authorization.rightsByRole;\n\tconst roles = configuredRoleNames(authorization);\n\tif (!table || roles.length === 0) {\n\t\treturn { issues, ok: true };\n\t}\n\tconst defaultRole = authorization.defaultRole?.trim();\n\tif (defaultRole && (!table || !Object.hasOwn(table, defaultRole))) {\n\t\tissues.push({\n\t\t\tmessage: `defaultRole \"${defaultRole}\" is not present in rightsByRole`,\n\t\t\tpath: \"auth.authorization.defaultRole\",\n\t\t});\n\t}\n\tif (table) {\n\t\tfor (const role of roles) {\n\t\t\tconst mapped = table[role];\n\t\t\tif (!Array.isArray(mapped)) {\n\t\t\t\tissues.push({\n\t\t\t\t\tmessage: `rightsByRole.${role} must be a string array`,\n\t\t\t\t\tpath: `auth.authorization.rightsByRole.${role}`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const [index, entry] of mapped.entries()) {\n\t\t\t\tif (typeof entry !== \"string\") {\n\t\t\t\t\tissues.push({\n\t\t\t\t\t\tmessage: `rightsByRole.${role}[${index}] is not a string`,\n\t\t\t\t\t\tpath: `auth.authorization.rightsByRole.${role}`,\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tparseAthenaRightKey(entry);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tissues.push({\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\terror instanceof Error ? error.message : `invalid right ${entry}`,\n\t\t\t\t\t\tpath: `auth.authorization.rightsByRole.${role}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn { issues, ok: issues.length === 0 };\n}\n\nexport function formatAthenaRightsResolutionDiagnostic(\n\tdiagnostic: AthenaRightsResolutionDiagnostic,\n): string {\n\tconst lines = [\n\t\t\"Auth authorization\",\n\t\t`Stored role ........ ${diagnostic.storedRole ?? \"(absent)\"}`,\n\t\t`Configured roles ... ${diagnostic.configuredRoles.length > 0\n\t\t\t? diagnostic.configuredRoles.join(\", \")\n\t\t\t: \"(none)\"\n\t\t}`,\n\t\t`Selected role ...... ${diagnostic.selectedRole ?? \"none\"}`,\n\t\t`Effective rights ... ${String(diagnostic.effectiveRightCount)}`,\n\t];\n\tif (diagnostic.reason) {\n\t\tlines.push(`Reason .............. ${diagnostic.reason}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function projectAthenaRightsResolutionForDevtools(\n\tdiagnostic: AthenaRightsResolutionDiagnostic | undefined,\n): {\n\tconfiguredRoles: readonly string[];\n\tdefaultRole: string | null;\n\teffectiveRights: readonly string[];\n\tmode: AthenaRightsResolutionMode;\n\treason: AthenaRightsResolutionReason | null;\n\tselectedRole: string | null;\n\tsource: AthenaRightsResolutionSource;\n\tstoredRole: string | null;\n} | null {\n\tif (!diagnostic) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tconfiguredRoles: diagnostic.configuredRoles,\n\t\tdefaultRole: diagnostic.defaultRole ?? null,\n\t\teffectiveRights: diagnostic.effectiveRights,\n\t\tmode: diagnostic.mode,\n\t\treason: diagnostic.reason ?? null,\n\t\tselectedRole: diagnostic.selectedRole ?? null,\n\t\tsource: diagnostic.source,\n\t\tstoredRole: diagnostic.storedRole ?? null,\n\t};\n}\n\nexport function formatAthenaRightsProjectionValidateDetail(\n\tauthorization: AthenaPrincipalRightsProjection,\n): string {\n\tconst mode = resolveAuthorizationMode(authorization);\n\tconst roles = configuredRoleNames(authorization);\n\tconst defaultRole = authorization.defaultRole?.trim() ?? \"\";\n\tconst table = authorization.rightsByRole ?? {};\n\tconst mapped =\n\t\tdefaultRole.length > 0 && Object.hasOwn(table, defaultRole) ? \"yes\" : \"no\";\n\tconst lines = [\n\t\t`Mode ................ ${mode}`,\n\t\t`Default role ......... ${defaultRole || \"(none)\"}`,\n\t\t`Configured roles ..... ${roles.length > 0 ? roles.join(\", \") : \"(none)\"}`,\n\t];\n\tif (mode === \"role\") {\n\t\tlines.push(`Default role mapped .. ${mapped}`);\n\t\tlines.push(\"Rights\");\n\t\tif (roles.length === 0) {\n\t\t\tlines.push(\"  (none)\");\n\t\t} else {\n\t\t\tfor (const role of roles) {\n\t\t\t\tconst count = asStringList(table[role]).length;\n\t\t\t\tlines.push(\n\t\t\t\t\t`  ${role} ${\".\".repeat(Math.max(1, 18 - role.length))} ${String(count)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction resolveRoleMode(\n\tuser: {\n\t\trole?: string | null;\n\t},\n\tauthorization?: AthenaPrincipalRightsProjection,\n): AthenaRightsResolution {\n\tconst storedRole = user.role?.trim() ?? \"\";\n\tconst table = authorization?.rightsByRole;\n\tif (storedRole) {\n\t\tconst mapped = lookupMappedRights(table, storedRole);\n\t\tif (mapped !== undefined) {\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\trights: mapped,\n\t\t\t\trole: storedRole,\n\t\t\t\tsource: \"role\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tok: false,\n\t\t\treason: \"role_not_mapped\",\n\t\t\trights: [],\n\t\t\trole: storedRole,\n\t\t\tsource: \"none\",\n\t\t};\n\t}\n\tconst defaultRole = authorization?.defaultRole?.trim() ?? \"\";\n\tif (defaultRole) {\n\t\tconst mapped = lookupMappedRights(table, defaultRole);\n\t\tif (mapped !== undefined) {\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\trights: mapped,\n\t\t\t\trole: defaultRole,\n\t\t\t\tsource: \"default-role\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tok: false,\n\t\t\treason: \"default_role_not_mapped\",\n\t\t\trights: [],\n\t\t\trole: defaultRole,\n\t\t\tsource: \"none\",\n\t\t};\n\t}\n\treturn {\n\t\tok: false,\n\t\treason: \"no_rights_configured\",\n\t\trights: [],\n\t\trole: \"\",\n\t\tsource: \"none\",\n\t};\n}\n\nfunction resolveStoredMode(user: {\n\tmetadata?: unknown;\n\trights?: readonly string[];\n}): AthenaRightsResolution {\n\tif (user.rights !== undefined) {\n\t\tconst rights = asStringList(user.rights);\n\t\treturn {\n\t\t\tok: true,\n\t\t\trights,\n\t\t\trole: \"\",\n\t\t\tsource: \"stored\",\n\t\t};\n\t}\n\tconst metaRights = metadataRecord(user.metadata)?.rights;\n\tif (metaRights !== undefined) {\n\t\treturn {\n\t\t\tok: true,\n\t\t\trights: asStringList(metaRights),\n\t\t\trole: \"\",\n\t\t\tsource: \"stored\",\n\t\t};\n\t}\n\treturn {\n\t\tok: false,\n\t\treason: \"no_rights_configured\",\n\t\trights: [],\n\t\trole: \"\",\n\t\tsource: \"none\",\n\t};\n}\n\nfunction lookupMappedRights(\n\ttable: Readonly<Record<string, readonly string[]>> | undefined,\n\trole: string,\n): readonly string[] | undefined {\n\tif (!table || !Object.hasOwn(table, role)) {\n\t\treturn undefined;\n\t}\n\treturn asStringList(table[role]);\n}\n\nfunction asStringList(value: unknown): string[] {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\treturn value\n\t\t.filter((entry): entry is string => typeof entry === \"string\")\n\t\t.map((entry) => entry.trim())\n\t\t.filter(Boolean);\n}\n\nfunction metadataRecord(\n\tmetadata: unknown,\n): Record<string, unknown> | undefined {\n\tif (metadata && typeof metadata === \"object\" && !Array.isArray(metadata)) {\n\t\treturn metadata as Record<string, unknown>;\n\t}\n\tif (typeof metadata === \"string\" && metadata.trim()) {\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(metadata);\n\t\t\tif (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n\t\t\t\treturn parsed as Record<string, unknown>;\n\t\t\t}\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction diagnosticFromResolution(\n\tresolution: AthenaRightsResolution,\n\tuser: { role?: string | null },\n\tauthorization: AthenaPrincipalRightsProjection | undefined,\n\tuserId: string | undefined,\n): AthenaRightsResolutionDiagnostic {\n\tconst storedRole = user.role?.trim() || undefined;\n\tconst defaultRole = authorization?.defaultRole?.trim() || undefined;\n\tconst selectedRole =\n\t\tresolution.source === \"none\" || resolution.role.length === 0\n\t\t\t? undefined\n\t\t\t: resolution.role;\n\treturn Object.freeze({\n\t\tconfiguredRoles: configuredRoleNames(authorization),\n\t\tdefaultRole,\n\t\teffectiveRightCount: resolution.rights.length,\n\t\teffectiveRights: resolution.rights,\n\t\tkind: ATHENA_RIGHTS_RESOLUTION_KIND,\n\t\tmode: resolveAuthorizationMode(authorization),\n\t\treason: resolution.ok ? undefined : resolution.reason,\n\t\tselectedRole,\n\t\tsource: resolution.source,\n\t\tstoredRole,\n\t\tuserId: userId?.trim() || \"unknown\",\n\t});\n}\n\nfunction emitAthenaRightsResolutionDiagnostic(\n\tdiagnostic: AthenaRightsResolutionDiagnostic,\n): void {\n\tlastDiagnostic = diagnostic;\n\tfor (const listener of [...listeners]) {\n\t\tlistener(diagnostic);\n\t}\n\tif (diagnostic.reason) {\n\t\tconsole.warn(\n\t\t\t\"[athena]\",\n\t\t\tformatAthenaRightsResolutionDiagnostic(diagnostic),\n\t\t);\n\t}\n}\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\n\nexport type AthenaAuthorizationScopeKind = \"self\" | \"organization\" | \"platform\";\nexport type AthenaAuthorizationRiskLevel = \"low\" | \"elevated\" | \"critical\";\nexport type AthenaAuthorizationRoleScope = \"platform\" | \"organization\";\n\nexport interface AthenaAuthorizationRightDefinition {\n\tassignable: boolean;\n\tdescription: string;\n\tdisplayName: string;\n\tdomain: string;\n\tkey: AthenaRightKey;\n\triskLevel: AthenaAuthorizationRiskLevel;\n\tscopeKind: AthenaAuthorizationScopeKind;\n}\n\nexport interface AthenaAuthorizationRoleRecord {\n\tassignable: boolean;\n\tid: string;\n\tkey: string;\n\tname: string;\n\torganizationId: string | null;\n\tprotected: boolean;\n\tscopeKind: AthenaAuthorizationRoleScope;\n\tsystemKind: \"owner\" | \"admin\" | \"member\" | null;\n\tversion: number;\n}\n\nexport interface AssignedRoleSummary {\n\tdisplayName: string;\n\tkey: string;\n\tscopeKind: AthenaAuthorizationRoleScope;\n}\n\nexport interface RoleDescriptor {\n\tassignable: boolean;\n\tassignmentCount: number;\n\tdescription?: string;\n\tdisplayName: string;\n\tid: string;\n\tkey: string;\n\torganizationId: string | null;\n\tprotected: boolean;\n\trightCount: number;\n\tscopeKind: AthenaAuthorizationRoleScope;\n\tsystemKind: \"owner\" | \"admin\" | \"member\" | null;\n\tversion: number;\n}\n\nexport interface AthenaAuthorizationRoleDetail extends AthenaAuthorizationRoleRecord {\n\tassignmentCount: number;\n\trightCount: number;\n\trights: readonly AthenaRightKey[];\n}\n\nexport interface AuthorizationCapabilities {\n\tcanChangeMemberRole: boolean;\n\tcanDeleteOrganization: boolean;\n\tcanInviteMembers: boolean;\n\tcanManageOrganizationRoles: boolean;\n\tcanManagePlatformRoles: boolean;\n\tcanRemoveMember: boolean;\n}\n\nexport interface MemberAuthorizationActions {\n\tcanChangeRole: boolean;\n\tcanRemove: boolean;\n\tdenialReasons: {\n\t\tchangeRole?: string;\n\t\tremove?: string;\n\t};\n\troleDisplayName: string;\n\troleKey: string;\n}\n\nexport interface AuthorizationSnapshot {\n\tactiveOrganizationId?: string;\n\tassignableRoles: RoleDescriptor[];\n\tcapabilities: AuthorizationCapabilities;\n\teffectiveRights: readonly AthenaRightKey[];\n\trevision: number;\n\troles: AssignedRoleSummary[];\n}\n\nexport const ATHENA_AUTHORIZATION_SHADOW_KIND =\n\t\"athena_authorization_shadow\" as const;\n\nexport interface AthenaAuthorizationShadowDiagnostic {\n\tassignedRights: readonly string[];\n\tkind: typeof ATHENA_AUTHORIZATION_SHADOW_KIND;\n\tlegacyRights: readonly string[];\n\tmatched: boolean;\n\tuserId: string;\n}\n","import type { AthenaPrincipalRightsProjection } from \"../data/principal.ts\";\nimport {\n\teffectiveRightsFromResolution,\n\tresolveStoredUserRightsResolution,\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<(diagnostic: AthenaAuthorizationShadowDiagnostic) => void>();\n\nexport function subscribeAthenaAuthorizationShadow(\n\tlistener: (diagnostic: AthenaAuthorizationShadowDiagnostic) => void,\n): () => void {\n\tlisteners.add(listener);\n\treturn () => {\n\t\tlisteners.delete(listener);\n\t};\n}\n\nexport function emitAuthorizationShadow(diagnostic: AthenaAuthorizationShadowDiagnostic): void {\n\tfor (const listener of listeners) {\n\t\tlistener(diagnostic);\n\t}\n}\n\nexport function compareAuthorizationShadow(input: {\n\tassignedRights: readonly string[];\n\tlegacyRights: readonly string[];\n\tuserId: string;\n}): AthenaAuthorizationShadowDiagnostic {\n\tconst assigned = [...input.assignedRights].sort();\n\tconst legacy = [...input.legacyRights].sort();\n\tconst matched =\n\t\tassigned.length === legacy.length &&\n\t\tassigned.every((key, index) => key === legacy[index]);\n\tconst diagnostic: AthenaAuthorizationShadowDiagnostic = {\n\t\tassignedRights: assigned,\n\t\tkind: ATHENA_AUTHORIZATION_SHADOW_KIND,\n\t\tlegacyRights: legacy,\n\t\tmatched,\n\t\tuserId: input.userId,\n\t};\n\temitAuthorizationShadow(diagnostic);\n\treturn diagnostic;\n}\n\nexport function legacyRightsFromProjection(\n\tuser: {\n\t\tmetadata?: unknown;\n\t\trights?: readonly string[];\n\t\trole?: string | null;\n\t},\n\tauthorization?: AthenaPrincipalRightsProjection,\n): readonly string[] {\n\treturn effectiveRightsFromResolution(\n\t\tresolveStoredUserRightsResolution(user, authorization, {\n\t\t\tuserId: \"shadow\",\n\t\t}),\n\t);\n}\n\nexport function hasLegacyRoleMap(\n\tauthorization?: AthenaPrincipalRightsProjection,\n): boolean {\n\treturn Object.keys(authorization?.rightsByRole ?? {}).length > 0;\n}\n","export type AthenaMalformedRightsSource =\n\t| \"athena-session\"\n\t| \"custom-trusted\"\n\t| \"policy\"\n\t| \"principal\"\n\t| \"service\";\n\nexport const ATHENA_MALFORMED_RIGHTS_KIND = \"athena.rights.malformed\" as const;\n\nexport interface AthenaMalformedRightsDiagnostic {\n\tkind: typeof ATHENA_MALFORMED_RIGHTS_KIND;\n\tmalformedKeyCount: number;\n\tsource: AthenaMalformedRightsSource;\n}\n\nexport type AthenaMalformedRightsDiagnosticListener = (\n\tdiagnostic: AthenaMalformedRightsDiagnostic,\n) => void;\n\nconst listeners = new Set<AthenaMalformedRightsDiagnosticListener>();\n\nexport function subscribeAthenaMalformedRightsDiagnostics(\n\tlistener: AthenaMalformedRightsDiagnosticListener,\n): () => void {\n\tlisteners.add(listener);\n\treturn () => {\n\t\tlisteners.delete(listener);\n\t};\n}\n\nexport function emitAthenaMalformedRightsDiagnostic(\n\tsource: AthenaMalformedRightsSource,\n\tmalformedKeyCount: number,\n): void {\n\tif (malformedKeyCount <= 0) {\n\t\treturn;\n\t}\n\tconst diagnostic: AthenaMalformedRightsDiagnostic = Object.freeze({\n\t\tkind: ATHENA_MALFORMED_RIGHTS_KIND,\n\t\tmalformedKeyCount,\n\t\tsource,\n\t});\n\tfor (const listener of [...listeners]) {\n\t\tlistener(diagnostic);\n\t}\n\tconsole.warn(\"[athena]\", diagnostic);\n}\n","/**\n * Canonical Local Runtime caller identity (type SSOT).\n *\n * HTTP request → AthenaResolvedPrincipal lives in `src/runtime/authority/`.\n * One semantic principal for Auth, Policy, and execution context.\n * Authority (how it was obtained) is tracked separately so a `userId`\n * is never treated as trusted on its own. Do not add a second principal model.\n */\n\nimport {\n  type AthenaRightKey,\n  tryParseAthenaRightKey,\n} from \"../../rights/key.ts\";\nimport {\n  type AthenaMalformedRightsSource,\n  emitAthenaMalformedRightsDiagnostic,\n} from \"./rights-diagnostics.ts\";\n\nexport type {\n  AthenaMalformedRightsDiagnostic,\n  AthenaMalformedRightsSource,\n} from \"./rights-diagnostics.ts\";\nexport {\n  ATHENA_MALFORMED_RIGHTS_KIND,\n  subscribeAthenaMalformedRightsDiagnostics,\n} from \"./rights-diagnostics.ts\";\n\nexport interface AthenaPrincipal {\n  authenticated: boolean;\n  userId?: string;\n  sessionId?: string;\n  organizationId?: string;\n  role?: string;\n  rights: readonly AthenaRightKey[];\n  /** Legacy provenance; never used to satisfy Right checks. */\n  grants: readonly string[];\n  service?: string;\n  claims?: Readonly<Record<string, unknown>>;\n}\n\n/** Wire / session input. `rights` stays a string array at JSON edges. */\nexport type AthenaPrincipalInput = Omit<\n  AthenaPrincipal,\n  \"rights\" | \"grants\"\n> & {\n  grants?: readonly string[];\n  rights?: readonly string[];\n};\n\n/**\n * Role → Rights projection at session lookup. Not a second Rights catalog.\n * Invalid keys are dropped by {@link normalizeAthenaPrincipal}.\n */\nexport interface AthenaPrincipalRightsProjection {\n  defaultRole?: string;\n  /**\n   * @deprecated Compatibility only. Prefer persisted authorization assignments.\n   * `role`: project `user.role` / `defaultRole` through `rightsByRole`.\n   * `stored`: persist `user.rights` / `metadata.rights` only. The two modes\n   * never mix. Do not add new `role` consumers.\n   */\n  mode?: \"role\" | \"stored\";\n  /**\n   * @deprecated Compatibility projection only. Product SSOT is persisted\n   * `authorization_*` assignments. Do not add new `rightsByRole` consumers.\n   */\n  rightsByRole?: Readonly<Record<string, readonly string[]>>;\n  /** Fail closed at client construction when the role table is incomplete. */\n  strictRoles?: boolean;\n};\n\nexport type AthenaPrincipalAuthority =\n  | \"anonymous\"\n  | \"athena-session\"\n  | \"custom-trusted\"\n  | \"service\"\n  | \"jwt\";\n\nexport interface AthenaResolvedPrincipal {\n  authority: AthenaPrincipalAuthority;\n  principal: AthenaPrincipal;\n}\n\nexport interface AthenaPrincipalResolutionInput {\n  headers: Headers;\n  request?: Request;\n  requestId?: string;\n}\n\nexport type AthenaPrincipalResolver = (\n  input: AthenaPrincipalResolutionInput,\n) => Promise<AthenaResolvedPrincipal | null> | AthenaResolvedPrincipal | null;\n\n/** Trusted session lookup result. Never constructed from request identity headers. */\nexport interface AthenaRuntimeSessionLookup {\n  session: {\n    activeOrganizationId?: string | null;\n    expiresAt?: string | Date | null;\n    id: string;\n    revoked?: boolean;\n    userId?: string;\n  };\n  user: {\n    banned?: boolean;\n    grants?: readonly string[];\n    id: string;\n    rights?: readonly string[];\n    role?: string | null;\n  };\n}\n\nexport type AthenaRuntimeOrganizationVerifier = (input: {\n  organizationId: string;\n  userId: string;\n}) => boolean | Promise<boolean>;\n\n/**\n * Duck-typed Athena Auth store surface used by `{ mode: \"athena-session\" }`.\n * Implemented by MemoryAuthStores / PostgresAuthStores. Not a second principal model.\n */\nexport interface AthenaRuntimeAuthSessionStore {\n  getMember?(organizationId: string, userId: string): Promise<unknown>;\n  hasAuthorizationAssignment?(userId: string): Promise<boolean>;\n  resolveEffectiveRights?(input: {\n    activeOrganizationId?: string | null;\n    userId: string;\n  }): Promise<readonly string[]>;\n  getSessionByToken(token: string): Promise<\n    | {\n      active?: boolean;\n      active_organization_id?: string | null;\n      expires_at?: Date | string;\n      id: string;\n      user_id: string;\n    }\n    | undefined\n  >;\n  getUserById(id: string): Promise<\n    | {\n      ban_expires?: Date | string | null;\n      banned?: boolean | null;\n      grants?: readonly string[];\n      id: string;\n      metadata?: Record<string, unknown> | string | null;\n      rights?: readonly string[];\n      role?: string | null;\n    }\n    | undefined\n  >;\n}\n\nexport type AthenaRuntimeSessionLookupFn = (\n  token: string,\n) =>\n  | Promise<AthenaRuntimeSessionLookup | null>\n  | AthenaRuntimeSessionLookup\n  | null;\n\nexport type AthenaRuntimeAuthConfig =\n  | false\n  | {\n    authorization?: AthenaPrincipalRightsProjection;\n    lookupSession?: AthenaRuntimeSessionLookupFn;\n    mode: \"athena-session\";\n    stores?: AthenaRuntimeAuthSessionStore;\n    verifyOrganizationMembership?: AthenaRuntimeOrganizationVerifier;\n  }\n  | {\n    mode: \"custom\";\n    resolvePrincipal: AthenaPrincipalResolver;\n  }\n  | {\n    mode: \"service\";\n    principal: AthenaPrincipalInput;\n  };\n\nexport type AthenaRuntimeAuthMaterial =\n  | { mode: false }\n  | {\n    lookupSession: AthenaRuntimeSessionLookupFn;\n    mode: \"athena-session\";\n    verifyOrganizationMembership?: AthenaRuntimeOrganizationVerifier;\n  }\n  | {\n    mode: \"custom\";\n    resolvePrincipal: AthenaPrincipalResolver;\n  }\n  | {\n    mode: \"service\";\n    principal: AthenaPrincipal;\n  };\n\nexport function anonymousAthenaPrincipal(): AthenaPrincipal {\n  return {\n    authenticated: false,\n    grants: Object.freeze([]),\n    rights: Object.freeze([]),\n  };\n}\n\nexport function anonymousResolvedPrincipal(): AthenaResolvedPrincipal {\n  return {\n    authority: \"anonymous\",\n    principal: anonymousAthenaPrincipal(),\n  };\n}\n\nfunction parsePrincipalRights(\n  raw: readonly string[] | undefined,\n  source: AthenaMalformedRightsSource,\n): readonly AthenaRightKey[] {\n  const parsed: AthenaRightKey[] = [];\n  let malformedKeyCount = 0;\n  for (const item of raw ?? []) {\n    if (typeof item !== \"string\") {\n      malformedKeyCount += 1;\n      continue;\n    }\n    const key = tryParseAthenaRightKey(item);\n    if (key === undefined) {\n      malformedKeyCount += 1;\n      continue;\n    }\n    parsed.push(key);\n  }\n  emitAthenaMalformedRightsDiagnostic(source, malformedKeyCount);\n  return Object.freeze(parsed);\n}\n\nexport function normalizeAthenaPrincipal(\n  principal: AthenaPrincipalInput,\n  options?: { source?: AthenaMalformedRightsSource },\n): AthenaPrincipal {\n  return {\n    authenticated: principal.authenticated === true,\n    ...(principal.userId ? { userId: principal.userId } : {}),\n    ...(principal.sessionId ? { sessionId: principal.sessionId } : {}),\n    ...(principal.organizationId\n      ? { organizationId: principal.organizationId }\n      : {}),\n    ...(principal.role ? { role: principal.role } : {}),\n    grants: Object.freeze([...(principal.grants ?? [])]),\n    rights: parsePrincipalRights(\n      principal.rights,\n      options?.source ?? \"principal\",\n    ),\n    ...(principal.service ? { service: principal.service } : {}),\n    ...(principal.claims\n      ? { claims: Object.freeze({ ...principal.claims }) }\n      : {}),\n  };\n}\n","import { AthenaChatError } from \"../module.ts\";\n\nexport function chatError(\n\tstatus: number,\n\tmessage: string,\n\tcode: string,\n): AthenaChatError {\n\treturn new AthenaChatError({\n\t\tbody: { code, message },\n\t\tendpoint: \"local\",\n\t\tmessage,\n\t\tmethod: \"LOCAL\",\n\t\tstatus,\n\t});\n}\n\nexport function chatUnauthenticated(): AthenaChatError {\n\treturn chatError(401, \"Authentication required\", \"ATHENA_CHAT_UNAUTHENTICATED\");\n}\n\nexport function chatForbidden(message = \"Insufficient permissions\"): AthenaChatError {\n\treturn chatError(403, message, \"ATHENA_CHAT_FORBIDDEN\");\n}\n\nexport function chatNotFound(message = \"Not found\"): AthenaChatError {\n\treturn chatError(404, message, \"ATHENA_CHAT_NOT_FOUND\");\n}\n\nexport function chatConflict(message: string): AthenaChatError {\n\treturn chatError(409, message, \"ATHENA_CHAT_CONFLICT\");\n}\n\nexport function chatBadRequest(message: string): AthenaChatError {\n\treturn chatError(400, message, \"ATHENA_CHAT_BAD_REQUEST\");\n}\n\nexport function chatCapabilityUnsupported(\n\tcapability: string,\n\truntime: \"local\" | \"remote\" = \"local\",\n): AthenaChatError {\n\treturn new AthenaChatError({\n\t\tbody: {\n\t\t\tcapability,\n\t\t\tcode: \"ATHENA_CHAT_CAPABILITY_UNSUPPORTED\",\n\t\t\tmessage: `Chat capability \"${capability}\" is unsupported on ${runtime} realtime.`,\n\t\t\truntime,\n\t\t},\n\t\tendpoint: \"local\",\n\t\tmessage: `Chat capability \"${capability}\" is unsupported on ${runtime} realtime.`,\n\t\tmethod: \"LOCAL\",\n\t\tstatus: 501,\n\t});\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { AthenaPrincipalResolver } from \"../../runtime/data/principal.ts\";\nimport { LOCAL_CHAT_CAPABILITIES } from \"../capabilities.ts\";\nimport type { AthenaChatRuntime } from \"../runtime.ts\";\nimport type {\n\tAthenaChatCallOptions,\n\tAthenaChatConnectOptions,\n\tAthenaChatRealtimeInfoResponse,\n} from \"../types.ts\";\nimport type { AthenaChatDatabase } from \"./database.ts\";\nimport { resolveChatActor } from \"./principal.ts\";\nimport { createPostgresChatStore } from \"./postgres-store.ts\";\nimport {\n\tcreateInProcessRealtimeConnection,\n\tInProcessChatRealtimeBus,\n} from \"./realtime.ts\";\nimport type { MemoryChatStore } from \"./store.ts\";\n\nexport type LocalChatRuntimeDeps = {\n\tdatabase?: AthenaChatDatabase;\n\tresolvePrincipal: AthenaPrincipalResolver;\n\tstore?: MemoryChatStore;\n};\n\nfunction resolveLocalChatStore(deps: LocalChatRuntimeDeps) {\n\tif (deps.store) {\n\t\treturn deps.store;\n\t}\n\tif (deps.database) {\n\t\treturn createPostgresChatStore(deps.database);\n\t}\n\tthrow new AthenaConfigurationError(\n\t\t\"ATHENA_CHAT_LOCAL_DATABASE_REQUIRED\",\n\t\t\"Local Chat requires a borrowed AthenaChatDatabase or an explicit test store.\",\n\t\t\"chat\",\n\t);\n}\n\nexport function createLocalChatRuntime(\n\tdeps: LocalChatRuntimeDeps,\n): AthenaChatRuntime {\n\tconst store = resolveLocalChatStore(deps);\n\tconst database = deps.database;\n\tconst bus = new InProcessChatRealtimeBus();\n\n\tconst actorOf = (options?: AthenaChatCallOptions) =>\n\t\tresolveChatActor(deps.resolvePrincipal, options);\n\n\tconst runtime: AthenaChatRuntime = {\n\t\tcapabilities: LOCAL_CHAT_CAPABILITIES,\n\t\tmessage: {\n\t\t\treaction: {\n\t\t\t\tasync add(messageId, input, options) {\n\t\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\t\tconst reactions = await store.transaction((next) =>\n\t\t\t\t\t\tPromise.resolve(next.addReaction(messageId, actor, input.emoji)),\n\t\t\t\t\t);\n\t\t\t\t\treturn { message_id: messageId, reactions };\n\t\t\t\t},\n\t\t\t\tasync remove(messageId, emoji, options) {\n\t\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\t\tconst reactions = await store.transaction((next) =>\n\t\t\t\t\t\tPromise.resolve(next.removeReaction(messageId, actor, emoji)),\n\t\t\t\t\t);\n\t\t\t\t\treturn { message_id: messageId, reactions };\n\t\t\t\t},\n\t\t\t},\n\t\t\tasync search(input, options) {\n\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\tconst items = await store.search(actor, input);\n\t\t\t\treturn { items };\n\t\t\t},\n\t\t},\n\t\trealtime: {\n\t\t\tconnect(options?: AthenaChatConnectOptions) {\n\t\t\t\treturn createInProcessRealtimeConnection(bus, options);\n\t\t\t},\n\t\t\tasync info(): Promise<AthenaChatRealtimeInfoResponse> {\n\t\t\t\treturn {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tactions: [\"subscribe\", \"resume\"],\n\t\t\t\t\t\tpath: database?.ownership ?? \"memory\",\n\t\t\t\t\t\ttransport: \"in-process\",\n\t\t\t\t\t},\n\t\t\t\t\tmessage: \"Local Chat realtime is in-process.\",\n\t\t\t\t\tstatus: \"success\",\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t\troom: {\n\t\t\tasync archive(roomId, options) {\n\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\treturn store.transaction(async (next) => next.archiveRoom(roomId, actor));\n\t\t\t},\n\t\t\tasync create(input, options) {\n\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\tconst data = await store.transaction(async (next) => next.createRoom(actor, input));\n\t\t\t\treturn { data, message: \"Room created\", status: \"success\" };\n\t\t\t},\n\t\t\tasync get(roomId, options) {\n\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\treturn store.getRoom(roomId, actor);\n\t\t\t},\n\t\t\tasync list(query, options) {\n\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\treturn { items: await store.listRooms(actor, query?.include_archived) };\n\t\t\t},\n\t\t\tmember: {\n\t\t\t\tasync add(roomId, input, options) {\n\t\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\t\treturn store.transaction(async (next) =>\n\t\t\t\t\t\tnext.addMembers(roomId, actor, input.user_ids, input.role ?? \"member\"),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tasync list(roomId, options) {\n\t\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\t\treturn store.listMembers(roomId, actor);\n\t\t\t\t},\n\t\t\t\tasync remove(roomId, userId, options) {\n\t\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\t\tawait store.transaction(async (next) => {\n\t\t\t\t\t\tawait next.removeMember(roomId, actor, userId);\n\t\t\t\t\t});\n\t\t\t\t\treturn { ok: true, user_id: userId };\n\t\t\t\t},\n\t\t\t},\n\t\t\tmessage: {\n\t\t\t\tasync delete(roomId, messageId, options) {\n\t\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\t\tawait store.transaction(async (next) => {\n\t\t\t\t\t\tawait next.deleteMessage(roomId, messageId, actor);\n\t\t\t\t\t});\n\t\t\t\t\treturn { message_id: messageId, ok: true };\n\t\t\t\t},\n\t\t\t\tasync list(roomId, query, options) {\n\t\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\t\tconst items = await store.listMessages(roomId, actor, query);\n\t\t\t\t\treturn { items };\n\t\t\t\t},\n\t\t\t\tasync send(roomId, input, options) {\n\t\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\t\tconst result = await store.transaction(async (next) =>\n\t\t\t\t\t\tnext.sendMessage(roomId, actor, input),\n\t\t\t\t\t);\n\t\t\t\t\tbus.publish(result.event);\n\t\t\t\t\treturn { data: result.message, message: \"Message sent\", status: \"success\" };\n\t\t\t\t},\n\t\t\t\tasync update(roomId, messageId, input, options) {\n\t\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\t\tconst result = await store.transaction(async (next) =>\n\t\t\t\t\t\tnext.updateMessage(roomId, messageId, actor, input),\n\t\t\t\t\t);\n\t\t\t\t\tbus.publish(result.event);\n\t\t\t\t\treturn result.message;\n\t\t\t\t},\n\t\t\t},\n\t\t\treadCursor: {\n\t\t\t\tasync upTo(roomId, input, options) {\n\t\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\t\tconst cursor = await store.transaction(async (next) =>\n\t\t\t\t\t\tnext.markRead(roomId, actor, input),\n\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlast_read_message_id: cursor.last_read_message_id,\n\t\t\t\t\t\tlast_read_seq: cursor.last_read_seq,\n\t\t\t\t\t\troom_id: roomId,\n\t\t\t\t\t\tuser_id: actor.userId,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t\tasync resolveDirect(input, options) {\n\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\treturn store.transaction(async (next) =>\n\t\t\t\t\tnext.resolveDirect(actor, input.participant_user_ids),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync update(roomId, input, options) {\n\t\t\t\tconst actor = await actorOf(options);\n\t\t\t\treturn store.transaction(async (next) =>\n\t\t\t\t\tnext.updateRoom(roomId, actor, input.title),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t};\n\n\treturn runtime;\n}\n","import { randomUUID } from \"node:crypto\";\nimport type {\n\tAthenaChatAttachmentInput,\n\tAthenaChatAttachmentView,\n\tAthenaChatMember,\n\tAthenaChatMemberRole,\n\tAthenaChatMessage,\n\tAthenaChatReactionCount,\n\tAthenaChatRoom,\n\tAthenaChatRoomKind,\n} from \"../types.ts\";\nimport type { AthenaChatDatabase } from \"./database.ts\";\nimport { chatBadRequest, chatConflict, chatForbidden, chatNotFound } from \"./errors.ts\";\nimport type { ChatActor } from \"./principal.ts\";\nimport type { ChatDomainEvent } from \"./store.ts\";\n\ntype RoomRow = Record<string, unknown>;\ntype MessageRow = Record<string, unknown>;\ntype MemberRow = Record<string, unknown>;\n\nfunction nowIso(): string {\n\treturn new Date().toISOString();\n}\n\nfunction asString(value: unknown): string {\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\tif (value === null || value === undefined) {\n\t\treturn \"\";\n\t}\n\treturn String(value);\n}\n\nfunction asNullableString(value: unknown): string | null {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\tconst text = asString(value);\n\treturn text ? text : null;\n}\n\nfunction asNumber(value: unknown): number {\n\tif (typeof value === \"number\" && Number.isFinite(value)) {\n\t\treturn value;\n\t}\n\tif (typeof value === \"bigint\") {\n\t\treturn Number(value);\n\t}\n\tif (typeof value === \"string\" && value.trim()) {\n\t\treturn Number(value);\n\t}\n\treturn 0;\n}\n\nfunction asJson(value: unknown): Record<string, unknown> | null {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\tif (typeof value === \"string\") {\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(value);\n\t\t\tif (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n\t\t\t\treturn parsed as Record<string, unknown>;\n\t\t\t}\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t\treturn null;\n\t}\n\tif (typeof value === \"object\" && !Array.isArray(value)) {\n\t\treturn value as Record<string, unknown>;\n\t}\n\treturn null;\n}\n\nfunction isUniqueViolation(error: unknown): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error as { code?: string }).code === \"23505\"\n\t);\n}\n\nfunction canonicalPair(left: string, right: string): [string, string] {\n\treturn left < right ? [left, right] : [right, left];\n}\n\nfunction mapRoom(row: RoomRow): AthenaChatRoom {\n\treturn {\n\t\tarchived_at: asNullableString(row.archived_at) ?? undefined,\n\t\tcreated_at: asString(row.created_at),\n\t\tcreated_by: asString(row.created_by),\n\t\tid: asString(row.id),\n\t\tkind: asString(row.kind) as AthenaChatRoomKind,\n\t\tlast_message_at: asNullableString(row.last_message_at) ?? undefined,\n\t\tlast_message_id: asNullableString(row.last_message_id) ?? undefined,\n\t\tlast_message_seq: asNumber(row.last_message_seq),\n\t\torganization_id: asString(row.organization_id),\n\t\ttitle: asNullableString(row.title),\n\t\tupdated_at: asString(row.updated_at),\n\t\tversion: asNumber(row.version),\n\t};\n}\n\nfunction mapMember(row: MemberRow): AthenaChatMember {\n\treturn {\n\t\thidden_at: asNullableString(row.hidden_at) ?? undefined,\n\t\tjoined_at: asString(row.joined_at),\n\t\tlast_read_message_id: asNullableString(row.last_read_message_id) ?? undefined,\n\t\tlast_read_seq: asNumber(row.last_read_seq),\n\t\tmuted: row.muted === true,\n\t\tnotification_mode: asNullableString(row.notification_mode) ?? undefined,\n\t\trole: asString(row.role) as AthenaChatMemberRole,\n\t\troom_id: asString(row.room_id),\n\t\tuser_id: asString(row.user_id),\n\t};\n}\n\nfunction mapMessage(\n\trow: MessageRow,\n\tattachments: AthenaChatAttachmentView[],\n\treactions: AthenaChatReactionCount[],\n): AthenaChatMessage {\n\treturn {\n\t\tattachments,\n\t\tbody_json: asJson(row.body_json),\n\t\tbody_text: asNullableString(row.body_text),\n\t\tclient_message_id: asNullableString(row.client_message_id),\n\t\tcreated_at: asString(row.created_at),\n\t\tdeleted_at: asNullableString(row.deleted_at) ?? undefined,\n\t\tedited_at: asNullableString(row.edited_at) ?? undefined,\n\t\tid: asString(row.id),\n\t\tmetadata_json: asJson(row.metadata_json),\n\t\treactions,\n\t\treply_to_message_id: asNullableString(row.reply_to_message_id),\n\t\troom_id: asString(row.room_id),\n\t\troom_seq: asNumber(row.room_seq),\n\t\tsender_id: asString(row.sender_id),\n\t};\n}\n\nfunction attachmentView(input: AthenaChatAttachmentInput): AthenaChatAttachmentView {\n\treturn {\n\t\t...input,\n\t\tauthorized_url_path: `/files/${input.file_id}`,\n\t\tproxy_url_path: `/files/${input.file_id}`,\n\t\tpublic_url_path: `/files/${input.file_id}`,\n\t};\n}\n\nexport class PostgresChatStore {\n\tconstructor(private readonly database: AthenaChatDatabase) {}\n\n\tasync transaction<T>(fn: (store: PostgresChatStore) => Promise<T>): Promise<T> {\n\t\treturn this.database.transaction(async (scoped) => fn(new PostgresChatStore(scoped)));\n\t}\n\n\tasync requireMember(roomId: string, actor: ChatActor, lock = false): Promise<AthenaChatMember> {\n\t\tconst 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\t\tconst result = await this.database.query<RoomRow>(sql, [roomId, actor.userId]);\n\t\tconst row = result.rows[0];\n\t\tif (!row || asString(row.organization_id) !== actor.organizationId) {\n\t\t\tthrow chatNotFound(\"Chat room not found.\");\n\t\t}\n\t\tif (!row.user_id || row.hidden_at) {\n\t\t\tthrow chatForbidden(\"Not a member of this chat room.\");\n\t\t}\n\t\treturn mapMember(row);\n\t}\n\n\tasync listRooms(actor: ChatActor, includeArchived = false): Promise<AthenaChatRoom[]> {\n\t\tconst result = await this.database.query<RoomRow>(\n\t\t\t`\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.updated_at) DESC\n\t\t\t`,\n\t\t\t[actor.organizationId, actor.userId, includeArchived],\n\t\t);\n\t\treturn result.rows.map(mapRoom);\n\t}\n\n\tasync getRoom(roomId: string, actor: ChatActor): Promise<AthenaChatRoom> {\n\t\tawait this.requireMember(roomId, actor);\n\t\tconst result = await this.database.query<RoomRow>(\n\t\t\t\"SELECT * FROM athena.chat_rooms WHERE id = $1\",\n\t\t\t[roomId],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row) {\n\t\t\tthrow chatNotFound(\"Chat room not found.\");\n\t\t}\n\t\treturn mapRoom(row);\n\t}\n\n\tasync createRoom(\n\t\tactor: ChatActor,\n\t\tinput: { kind: AthenaChatRoomKind; member_user_ids?: string[]; title?: string | null },\n\t): Promise<AthenaChatRoom> {\n\t\tif (input.kind === \"dm\") {\n\t\t\tthrow chatBadRequest(\"Use resolveDirect for dm rooms.\");\n\t\t}\n\t\tconst createdAt = nowIso();\n\t\tconst room: AthenaChatRoom = {\n\t\t\tcreated_at: createdAt,\n\t\t\tcreated_by: actor.userId,\n\t\t\tid: randomUUID(),\n\t\t\tkind: input.kind,\n\t\t\tlast_message_seq: 0,\n\t\t\torganization_id: actor.organizationId,\n\t\t\ttitle: input.title ?? null,\n\t\t\tupdated_at: createdAt,\n\t\t\tversion: 1,\n\t\t};\n\t\tawait this.database.query(\n\t\t\t`\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\t\t\t[room.id, room.organization_id, room.kind, room.title, room.created_by, createdAt],\n\t\t);\n\t\tconst memberIds = new Set([actor.userId, ...(input.member_user_ids ?? [])]);\n\t\tfor (const userId of memberIds) {\n\t\t\tawait this.#putMember(room.id, userId, userId === actor.userId ? \"owner\" : \"member\");\n\t\t}\n\t\tawait this.#insertOutbox(\"chat_room\", room.id, room.id, null, \"chat.room.created\", {\n\t\t\troom,\n\t\t});\n\t\treturn room;\n\t}\n\n\tasync resolveDirect(actor: ChatActor, participantUserIds: [string, string]): Promise<AthenaChatRoom> {\n\t\tconst [left, right] = participantUserIds;\n\t\tif (!left || !right || left === right) {\n\t\t\tthrow chatBadRequest(\"Direct rooms require two distinct participants.\");\n\t\t}\n\t\tif (actor.userId !== left && actor.userId !== right) {\n\t\t\tthrow chatForbidden(\"Caller must be a direct-room participant.\");\n\t\t}\n\t\tconst [one, two] = canonicalPair(left, right);\n\t\tconst createdAt = nowIso();\n\t\tconst candidateId = randomUUID();\n\t\tawait this.database.query(\n\t\t\t`\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\t\t\t[candidateId, actor.organizationId, actor.userId, createdAt],\n\t\t);\n\t\tfor (const userId of [one, two]) {\n\t\t\tawait this.#putMember(candidateId, userId, userId === actor.userId ? \"owner\" : \"member\");\n\t\t}\n\t\tconst inserted = await this.database.query<{ room_id: string }>(\n\t\t\t`\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\t\t\t[actor.organizationId, one, two, candidateId],\n\t\t);\n\t\tconst createdId = inserted.rows[0]?.room_id;\n\t\tif (!createdId) {\n\t\t\tawait this.database.query(\"DELETE FROM athena.chat_rooms WHERE id = $1\", [candidateId]);\n\t\t\tconst existing = await this.database.query<{ room_id: string }>(\n\t\t\t\t`\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\t\t\t\t[actor.organizationId, one, two],\n\t\t\t);\n\t\t\tconst roomId = existing.rows[0]?.room_id;\n\t\t\tif (!roomId) {\n\t\t\t\tthrow chatConflict(\"direct room resolution conflicted without a durable room\");\n\t\t\t}\n\t\t\treturn this.getRoom(roomId, actor);\n\t\t}\n\t\tconst room: AthenaChatRoom = {\n\t\t\tcreated_at: createdAt,\n\t\t\tcreated_by: actor.userId,\n\t\t\tid: candidateId,\n\t\t\tkind: \"dm\",\n\t\t\tlast_message_seq: 0,\n\t\t\torganization_id: actor.organizationId,\n\t\t\ttitle: null,\n\t\t\tupdated_at: createdAt,\n\t\t\tversion: 1,\n\t\t};\n\t\tawait this.#insertOutbox(\"chat_room\", room.id, room.id, null, \"chat.room.created\", { room });\n\t\treturn room;\n\t}\n\n\tasync updateRoom(roomId: string, actor: ChatActor, title?: string | null): Promise<AthenaChatRoom> {\n\t\tconst member = await this.requireMember(roomId, actor, true);\n\t\tif (member.role === \"member\") {\n\t\t\tthrow chatForbidden(\"Only owners and admins can update this room.\");\n\t\t}\n\t\tawait this.database.query(\n\t\t\t`\n\t\t\tUPDATE athena.chat_rooms\n\t\t\tSET title = COALESCE($2, title),\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\t\t\t[roomId, title ?? null],\n\t\t);\n\t\treturn this.getRoom(roomId, actor);\n\t}\n\n\tasync archiveRoom(roomId: string, actor: ChatActor): Promise<AthenaChatRoom> {\n\t\tconst member = await this.requireMember(roomId, actor, true);\n\t\tif (member.role === \"member\") {\n\t\t\tthrow chatForbidden(\"Only owners and admins can archive this room.\");\n\t\t}\n\t\tawait this.database.query(\n\t\t\t`\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\t\t\t[roomId],\n\t\t);\n\t\treturn this.getRoom(roomId, actor);\n\t}\n\n\tasync listMembers(roomId: string, actor: ChatActor): Promise<AthenaChatMember[]> {\n\t\tawait this.requireMember(roomId, actor);\n\t\tconst result = await this.database.query<MemberRow>(\n\t\t\t`\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\t\t\t[roomId],\n\t\t);\n\t\treturn result.rows.map(mapMember);\n\t}\n\n\tasync addMembers(\n\t\troomId: string,\n\t\tactor: ChatActor,\n\t\tuserIds: string[],\n\t\trole: AthenaChatMemberRole = \"member\",\n\t): Promise<AthenaChatMember[]> {\n\t\tconst member = await this.requireMember(roomId, actor, true);\n\t\tif (member.role === \"member\") {\n\t\t\tthrow chatForbidden(\"Only owners and admins can add members.\");\n\t\t}\n\t\tfor (const userId of userIds) {\n\t\t\tawait this.#putMember(roomId, userId, role);\n\t\t}\n\t\treturn this.listMembers(roomId, actor);\n\t}\n\n\tasync removeMember(roomId: string, actor: ChatActor, userId: string): Promise<void> {\n\t\tconst member = await this.requireMember(roomId, actor, true);\n\t\tif (actor.userId !== userId && member.role === \"member\") {\n\t\t\tthrow chatForbidden(\"Only owners and admins can remove members.\");\n\t\t}\n\t\tconst result = await this.database.query(\n\t\t\t`\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\t\t\t[roomId, userId],\n\t\t);\n\t\tif ((result.rows?.length ?? 0) === 0) {\n\t\t\tthrow chatNotFound(\"Chat member not found.\");\n\t\t}\n\t}\n\n\tasync listMessages(\n\t\troomId: string,\n\t\tactor: ChatActor,\n\t\tquery?: { after_seq?: number; before_seq?: number; limit?: number },\n\t): Promise<AthenaChatMessage[]> {\n\t\tawait this.requireMember(roomId, actor);\n\t\tconst limit = query?.limit ?? 50;\n\t\tconst result = await this.database.query<MessageRow>(\n\t\t\t`\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 DESC\n\t\t\tLIMIT $4\n\t\t\t`,\n\t\t\t[roomId, query?.after_seq ?? null, query?.before_seq ?? null, limit],\n\t\t);\n\t\tconst rows = [...result.rows].reverse();\n\t\tconst messages: AthenaChatMessage[] = [];\n\t\tfor (const row of rows) {\n\t\t\tmessages.push(await this.#hydrateMessage(row, actor.userId));\n\t\t}\n\t\treturn messages;\n\t}\n\n\tasync sendMessage(\n\t\troomId: string,\n\t\tactor: ChatActor,\n\t\tinput: {\n\t\t\tattachments?: AthenaChatAttachmentInput[];\n\t\t\tbody_json?: Record<string, unknown> | null;\n\t\t\tbody_text?: string | null;\n\t\t\tclient_message_id?: string | null;\n\t\t\tmetadata_json?: Record<string, unknown> | null;\n\t\t\treply_to_message_id?: string | null;\n\t\t},\n\t): Promise<{ event: ChatDomainEvent; message: AthenaChatMessage }> {\n\t\tconst access = await this.#lockRoom(roomId, actor);\n\t\tif (access.archived_at) {\n\t\t\tthrow chatConflict(\"Cannot send to an archived room.\");\n\t\t}\n\t\tif (input.client_message_id) {\n\t\t\tconst existing = await this.database.query<MessageRow>(\n\t\t\t\t`\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\t\t\t\t[roomId, actor.userId, input.client_message_id],\n\t\t\t);\n\t\t\tconst row = existing.rows[0];\n\t\t\tif (row) {\n\t\t\t\tconst message = await this.#hydrateMessage(row, actor.userId);\n\t\t\t\treturn {\n\t\t\t\t\tevent: {\n\t\t\t\t\t\tkind: \"chat.message.created\",\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\troomId,\n\t\t\t\t\t\troomSeq: message.room_seq,\n\t\t\t\t\t},\n\t\t\t\t\tmessage,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tconst createdAt = nowIso();\n\t\tconst nextSeq = access.last_message_seq + 1;\n\t\tconst messageId = randomUUID();\n\t\tconst attachments = (input.attachments ?? []).map(attachmentView);\n\t\ttry {\n\t\t\tawait this.database.query(\n\t\t\t\t`\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\t\t\t\t[\n\t\t\t\t\tmessageId,\n\t\t\t\t\troomId,\n\t\t\t\t\tnextSeq,\n\t\t\t\t\tactor.userId,\n\t\t\t\t\tinput.client_message_id ?? null,\n\t\t\t\t\tinput.body_text ?? null,\n\t\t\t\t\tinput.body_json ?? null,\n\t\t\t\t\tinput.reply_to_message_id ?? null,\n\t\t\t\t\tinput.metadata_json ?? null,\n\t\t\t\t\tcreatedAt,\n\t\t\t\t],\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (isUniqueViolation(error) && input.client_message_id) {\n\t\t\t\tconst replayed = await this.database.query<MessageRow>(\n\t\t\t\t\t`\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\t\t\t\t\t[roomId, actor.userId, input.client_message_id],\n\t\t\t\t);\n\t\t\t\tconst replayedRow = replayed.rows[0];\n\t\t\t\tif (replayedRow) {\n\t\t\t\t\tconst message = await this.#hydrateMessage(replayedRow, actor.userId);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tevent: {\n\t\t\t\t\t\t\tkind: \"chat.message.created\",\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\troomId,\n\t\t\t\t\t\t\troomSeq: message.room_seq,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.#insertAttachments(messageId, attachments);\n\t\tawait this.database.query(\n\t\t\t`\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\t\t\t[roomId, messageId, nextSeq, createdAt],\n\t\t);\n\t\tconst message: AthenaChatMessage = {\n\t\t\tattachments,\n\t\t\tbody_json: input.body_json ?? null,\n\t\t\tbody_text: input.body_text ?? null,\n\t\t\tclient_message_id: input.client_message_id ?? null,\n\t\t\tcreated_at: createdAt,\n\t\t\tid: messageId,\n\t\t\tmetadata_json: input.metadata_json ?? null,\n\t\t\treactions: [],\n\t\t\treply_to_message_id: input.reply_to_message_id ?? null,\n\t\t\troom_id: roomId,\n\t\t\troom_seq: nextSeq,\n\t\t\tsender_id: actor.userId,\n\t\t};\n\t\tawait this.#insertOutbox(\"chat_message\", messageId, roomId, nextSeq, \"chat.message.created\", {\n\t\t\tmessage,\n\t\t});\n\t\treturn {\n\t\t\tevent: {\n\t\t\t\tkind: \"chat.message.created\",\n\t\t\t\tmessage,\n\t\t\t\troomId,\n\t\t\t\troomSeq: nextSeq,\n\t\t\t},\n\t\t\tmessage,\n\t\t};\n\t}\n\n\tasync updateMessage(\n\t\troomId: string,\n\t\tmessageId: string,\n\t\tactor: ChatActor,\n\t\tinput: {\n\t\t\tbody_json?: Record<string, unknown> | null;\n\t\t\tbody_text?: string | null;\n\t\t\tmetadata_json?: Record<string, unknown> | null;\n\t\t},\n\t): Promise<{ event: ChatDomainEvent; message: AthenaChatMessage }> {\n\t\tawait this.requireMember(roomId, actor, true);\n\t\tconst existing = await this.database.query<MessageRow>(\n\t\t\t`\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\t\t\t[messageId, roomId],\n\t\t);\n\t\tconst row = existing.rows[0];\n\t\tif (!row) {\n\t\t\tthrow chatNotFound(\"Chat message not found.\");\n\t\t}\n\t\tif (asString(row.sender_id) !== actor.userId) {\n\t\t\tthrow chatForbidden(\"Only the sender can edit this message.\");\n\t\t}\n\t\tawait this.database.query(\n\t\t\t`\n\t\t\tUPDATE athena.chat_messages\n\t\t\tSET body_text = COALESCE($2, body_text),\n\t\t\t\tbody_json = COALESCE($3, body_json),\n\t\t\t\tmetadata_json = COALESCE($4, metadata_json),\n\t\t\t\tedited_at = now()\n\t\t\tWHERE id = $1\n\t\t\t`,\n\t\t\t[messageId, input.body_text ?? null, input.body_json ?? null, input.metadata_json ?? null],\n\t\t);\n\t\tconst updated = await this.database.query<MessageRow>(\n\t\t\t\"SELECT * FROM athena.chat_messages WHERE id = $1\",\n\t\t\t[messageId],\n\t\t);\n\t\tconst updatedRow = updated.rows[0] ?? row;\n\t\tconst message = await this.#hydrateMessage(updatedRow, actor.userId);\n\t\tawait this.#insertOutbox(\n\t\t\t\"chat_message\",\n\t\t\tmessageId,\n\t\t\troomId,\n\t\t\tmessage.room_seq,\n\t\t\t\"chat.message.updated\",\n\t\t\t{ message },\n\t\t);\n\t\treturn {\n\t\t\tevent: {\n\t\t\t\tkind: \"chat.message.updated\",\n\t\t\t\tmessage,\n\t\t\t\troomId,\n\t\t\t\troomSeq: message.room_seq,\n\t\t\t},\n\t\t\tmessage,\n\t\t};\n\t}\n\n\tasync deleteMessage(roomId: string, messageId: string, actor: ChatActor): Promise<void> {\n\t\tawait this.requireMember(roomId, actor, true);\n\t\tconst existing = await this.database.query<MessageRow>(\n\t\t\t\"SELECT sender_id FROM athena.chat_messages WHERE id = $1 AND room_id = $2\",\n\t\t\t[messageId, roomId],\n\t\t);\n\t\tconst row = existing.rows[0];\n\t\tif (!row) {\n\t\t\tthrow chatNotFound(\"Chat message not found.\");\n\t\t}\n\t\tif (asString(row.sender_id) !== actor.userId) {\n\t\t\tthrow chatForbidden(\"Only the sender can delete this message.\");\n\t\t}\n\t\tawait this.database.query(\n\t\t\t\"UPDATE athena.chat_messages SET deleted_at = now() WHERE id = $1\",\n\t\t\t[messageId],\n\t\t);\n\t}\n\n\tasync addReaction(\n\t\tmessageId: string,\n\t\tactor: ChatActor,\n\t\temoji: string,\n\t): Promise<AthenaChatReactionCount[]> {\n\t\tconst message = await this.#requireMessageAccess(messageId, actor);\n\t\tawait this.database.query(\n\t\t\t`\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\t`,\n\t\t\t[messageId, actor.userId, emoji],\n\t\t);\n\t\treturn this.#reactionsFor(message.id, actor.userId);\n\t}\n\n\tasync removeReaction(\n\t\tmessageId: string,\n\t\tactor: ChatActor,\n\t\temoji: string,\n\t): Promise<AthenaChatReactionCount[]> {\n\t\tconst message = await this.#requireMessageAccess(messageId, actor);\n\t\tawait this.database.query(\n\t\t\t`\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\t`,\n\t\t\t[messageId, actor.userId, emoji],\n\t\t);\n\t\treturn this.#reactionsFor(message.id, actor.userId);\n\t}\n\n\tasync search(\n\t\tactor: ChatActor,\n\t\tinput: { query: string; room_id?: string | null; limit?: number | null },\n\t): Promise<{ message: AthenaChatMessage; room_id: string }[]> {\n\t\tconst query = input.query.trim();\n\t\tif (!query) {\n\t\t\tthrow chatBadRequest(\"Search query is required.\");\n\t\t}\n\t\tconst limit = input.limit ?? 20;\n\t\tconst result = await this.database.query<MessageRow>(\n\t\t\t`\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::uuid IS NULL OR m.room_id = $3)\n\t\t\t\tAND COALESCE(m.body_text, '') ILIKE '%' || $4 || '%'\n\t\t\tORDER BY m.created_at DESC\n\t\t\tLIMIT $5\n\t\t\t`,\n\t\t\t[actor.organizationId, actor.userId, input.room_id ?? null, query, limit],\n\t\t);\n\t\tconst hits: { message: AthenaChatMessage; room_id: string }[] = [];\n\t\tfor (const row of result.rows) {\n\t\t\tconst message = await this.#hydrateMessage(row, actor.userId);\n\t\t\thits.push({ message, room_id: message.room_id });\n\t\t}\n\t\treturn hits;\n\t}\n\n\tasync markRead(\n\t\troomId: string,\n\t\tactor: ChatActor,\n\t\tinput?: { message_id?: string | null; seq?: number | null },\n\t): Promise<{ last_read_message_id?: string | null; last_read_seq: number }> {\n\t\tconst member = await this.requireMember(roomId, actor, true);\n\t\tlet seq = input?.seq ?? member.last_read_seq;\n\t\tlet messageId = input?.message_id ?? member.last_read_message_id ?? null;\n\t\tif (input?.message_id) {\n\t\t\tconst existing = await this.database.query<MessageRow>(\n\t\t\t\t\"SELECT id, room_seq FROM athena.chat_messages WHERE id = $1 AND room_id = $2\",\n\t\t\t\t[input.message_id, roomId],\n\t\t\t);\n\t\t\tconst row = existing.rows[0];\n\t\t\tif (!row) {\n\t\t\t\tthrow chatNotFound(\"Chat message not found.\");\n\t\t\t}\n\t\t\tseq = asNumber(row.room_seq);\n\t\t\tmessageId = asString(row.id);\n\t\t}\n\t\tawait this.database.query(\n\t\t\t`\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\t\t\t[roomId, actor.userId, seq, messageId],\n\t\t);\n\t\treturn {\n\t\t\tlast_read_message_id: messageId,\n\t\t\tlast_read_seq: seq,\n\t\t};\n\t}\n\n\tasync #lockRoom(\n\t\troomId: string,\n\t\tactor: ChatActor,\n\t): Promise<{ archived_at: string | null; last_message_seq: number }> {\n\t\tconst result = await this.database.query<RoomRow>(\n\t\t\t`\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\t\t\t[roomId, actor.userId],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row || asString(row.organization_id) !== actor.organizationId) {\n\t\t\tthrow chatNotFound(\"Chat room not found.\");\n\t\t}\n\t\tif (!row.user_id || row.hidden_at) {\n\t\t\tthrow chatForbidden(\"Not a member of this chat room.\");\n\t\t}\n\t\treturn {\n\t\t\tarchived_at: asNullableString(row.archived_at),\n\t\t\tlast_message_seq: asNumber(row.last_message_seq),\n\t\t};\n\t}\n\n\tasync #putMember(roomId: string, userId: string, role: AthenaChatMemberRole): Promise<void> {\n\t\tawait this.database.query(\n\t\t\t`\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\t`,\n\t\t\t[roomId, userId, role],\n\t\t);\n\t}\n\n\tasync #insertAttachments(\n\t\tmessageId: string,\n\t\tattachments: AthenaChatAttachmentInput[],\n\t): Promise<void> {\n\t\tfor (const attachment of attachments) {\n\t\t\tawait this.database.query(\n\t\t\t\t`\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\t\t\t\t[attachment.file_id],\n\t\t\t);\n\t\t\tawait this.database.query(\n\t\t\t\t`\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\t\t\t\t[messageId, attachment.file_id, attachment.ordinal],\n\t\t\t);\n\t\t}\n\t}\n\n\tasync #insertOutbox(\n\t\taggregateType: \"chat_message\" | \"chat_room\" | \"read_cursor\",\n\t\taggregateId: string,\n\t\troomId: string,\n\t\troomSeq: number | null,\n\t\teventType: string,\n\t\tpayload: Record<string, unknown>,\n\t): Promise<void> {\n\t\tawait this.database.query(\n\t\t\t`\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\t\t\t[randomUUID(), aggregateType, aggregateId, roomId, roomSeq, eventType, payload],\n\t\t);\n\t}\n\n\tasync #requireMessageAccess(messageId: string, actor: ChatActor): Promise<AthenaChatMessage> {\n\t\tconst result = await this.database.query<MessageRow>(\n\t\t\t`\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\t\t\t[messageId, actor.organizationId],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row) {\n\t\t\tthrow chatNotFound(\"Chat message not found.\");\n\t\t}\n\t\tawait this.requireMember(asString(row.room_id), actor);\n\t\treturn this.#hydrateMessage(row, actor.userId);\n\t}\n\n\tasync #hydrateMessage(row: MessageRow, actorId: string): Promise<AthenaChatMessage> {\n\t\tconst messageId = asString(row.id);\n\t\tconst attachments = await this.#attachmentsFor(messageId);\n\t\tconst reactions = await this.#reactionsFor(messageId, actorId);\n\t\treturn mapMessage(row, attachments, reactions);\n\t}\n\n\tasync #attachmentsFor(messageId: string): Promise<AthenaChatAttachmentView[]> {\n\t\tconst result = await this.database.query<RoomRow>(\n\t\t\t`\n\t\t\tSELECT 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 = $1\n\t\t\tORDER BY a.ordinal\n\t\t\t`,\n\t\t\t[messageId],\n\t\t);\n\t\treturn result.rows.map((row) => ({\n\t\t\tauthorized_url_path: `/files/${asString(row.file_id)}`,\n\t\t\tbucket: asNullableString(row.bucket),\n\t\t\tcontent_type: asNullableString(row.content_type),\n\t\t\textension: asNullableString(row.extension),\n\t\t\tfile_id: asString(row.file_id),\n\t\t\tfile_name: asNullableString(row.file_name),\n\t\t\tfile_url: asNullableString(row.url),\n\t\t\tmime_type: asNullableString(row.mime_type),\n\t\t\tordinal: asNumber(row.ordinal),\n\t\t\toriginal_name: asNullableString(row.original_name),\n\t\t\tproxy_url_path: `/files/${asString(row.file_id)}`,\n\t\t\tpublic_url_path: `/files/${asString(row.file_id)}`,\n\t\t\tsize_bytes: row.size_bytes == null ? null : asNumber(row.size_bytes),\n\t\t\tstatus: asNullableString(row.status),\n\t\t\tstorage_key: asNullableString(row.storage_key),\n\t\t\tvisibility: asNullableString(row.visibility),\n\t\t}));\n\t}\n\n\tasync #reactionsFor(messageId: string, actorId: string): Promise<AthenaChatReactionCount[]> {\n\t\tconst result = await this.database.query<{\n\t\t\tcount: unknown;\n\t\t\temoji: string;\n\t\t\treacted: unknown;\n\t\t}>(\n\t\t\t`\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\t\t\t[messageId, actorId],\n\t\t);\n\t\treturn result.rows.map((row) => ({\n\t\t\tcount: asNumber(row.count),\n\t\t\temoji: asString(row.emoji),\n\t\t\treacted: row.reacted === true,\n\t\t}));\n\t}\n}\n\nexport function createPostgresChatStore(database: AthenaChatDatabase): PostgresChatStore {\n\treturn new PostgresChatStore(database);\n}\n","import type {\n\tAthenaChatConnectOptions,\n\tAthenaChatRealtimeConnection,\n\tAthenaChatResumeRoomCursor,\n\tAthenaChatWebSocketLike,\n\tAthenaChatWsClientCommand,\n} from \"../types.ts\";\nimport { chatCapabilityUnsupported } from \"./errors.ts\";\nimport type { ChatDomainEvent } from \"./store.ts\";\n\ntype Subscriber = {\n\tfromSeq: number;\n\tonEvent: (event: ChatDomainEvent) => void;\n};\n\nexport class InProcessChatRealtimeBus {\n\treadonly #rooms = new Map<string, Set<Subscriber>>();\n\n\tpublish(event: ChatDomainEvent): void {\n\t\tconst subscribers = this.#rooms.get(event.roomId);\n\t\tif (!subscribers) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const subscriber of subscribers) {\n\t\t\tif (event.roomSeq > subscriber.fromSeq) {\n\t\t\t\tsubscriber.onEvent(event);\n\t\t\t}\n\t\t}\n\t}\n\n\tsubscribe(roomId: string, fromSeq: number, onEvent: (event: ChatDomainEvent) => void): () => void {\n\t\tconst subscriber: Subscriber = { fromSeq, onEvent };\n\t\tconst bucket = this.#rooms.get(roomId) ?? new Set<Subscriber>();\n\t\tbucket.add(subscriber);\n\t\tthis.#rooms.set(roomId, bucket);\n\t\treturn () => {\n\t\t\tbucket.delete(subscriber);\n\t\t};\n\t}\n}\n\nclass InProcessSocket implements AthenaChatWebSocketLike {\n\treadyState = 1;\n\treadonly #listeners = new Map<string, Set<(event: unknown) => void>>();\n\n\taddEventListener(\n\t\ttype: \"open\" | \"message\" | \"error\" | \"close\",\n\t\tlistener: (event: unknown) => void,\n\t): void {\n\t\tconst bucket = this.#listeners.get(type) ?? new Set<(event: unknown) => void>();\n\t\tbucket.add(listener);\n\t\tthis.#listeners.set(type, bucket);\n\t}\n\n\tremoveEventListener?(\n\t\ttype: \"open\" | \"message\" | \"error\" | \"close\",\n\t\tlistener: (event: unknown) => void,\n\t): void {\n\t\tthis.#listeners.get(type)?.delete(listener);\n\t}\n\n\tsend(): void {\n\t\tthrow chatCapabilityUnsupported(\"websocket\");\n\t}\n\n\tclose(code?: number, reason?: string): void {\n\t\tthis.readyState = 3;\n\t\tfor (const listener of this.#listeners.get(\"close\") ?? []) {\n\t\t\tlistener({ code, reason });\n\t\t}\n\t}\n\n\temit(event: unknown): void {\n\t\tfor (const listener of this.#listeners.get(\"message\") ?? []) {\n\t\t\tlistener({ data: JSON.stringify(event) });\n\t\t}\n\t}\n}\n\nexport function createInProcessRealtimeConnection(\n\tbus: InProcessChatRealtimeBus,\n\toptions?: AthenaChatConnectOptions,\n): AthenaChatRealtimeConnection {\n\tconst socket = new InProcessSocket();\n\tconst unsubscribers = new Map<string, () => void>();\n\n\tconst deliver = (event: ChatDomainEvent): void => {\n\t\tconst payload = {\n\t\t\tmessage: event.message,\n\t\t\troom_id: event.roomId,\n\t\t\troom_seq: event.roomSeq,\n\t\t\ttype: event.kind,\n\t\t};\n\t\toptions?.onMessage?.(payload);\n\t\tsocket.emit(payload);\n\t};\n\n\tconst subscribe = (roomId: string, fromSeq?: number | null): void => {\n\t\tunsubscribers.get(roomId)?.();\n\t\tunsubscribers.set(\n\t\t\troomId,\n\t\t\tbus.subscribe(roomId, fromSeq ?? 0, deliver),\n\t\t);\n\t};\n\n\tconst resume = (rooms: AthenaChatResumeRoomCursor[]): void => {\n\t\t// Live cursor only: future in-process events with roomSeq > last_seq.\n\t\t// Does not replay persisted outbox/history (replayPersisted: false).\n\t\tfor (const room of rooms) {\n\t\t\tsubscribe(room.room_id, room.last_seq ?? 0);\n\t\t}\n\t};\n\n\tconst send = (command: AthenaChatWsClientCommand): void => {\n\t\tswitch (command.type) {\n\t\t\tcase \"chat.subscribe\":\n\t\t\t\tsubscribe(command.room_id, command.from_seq);\n\t\t\t\treturn;\n\t\t\tcase \"chat.unsubscribe\":\n\t\t\t\tunsubscribers.get(command.room_id)?.();\n\t\t\t\tunsubscribers.delete(command.room_id);\n\t\t\t\treturn;\n\t\t\tcase \"chat.resume\":\n\t\t\t\tresume(command.rooms);\n\t\t\t\treturn;\n\t\t\tcase \"auth.hello\":\n\t\t\t\tthrow chatCapabilityUnsupported(\"hello\");\n\t\t\tcase \"ping\":\n\t\t\t\tthrow chatCapabilityUnsupported(\"ping\");\n\t\t\tcase \"chat.typing.start\":\n\t\t\tcase \"chat.typing.stop\":\n\t\t\t\tthrow chatCapabilityUnsupported(\"typing\");\n\t\t\tcase \"chat.presence.heartbeat\":\n\t\t\t\tthrow chatCapabilityUnsupported(\"presence\");\n\t\t\tcase \"chat.read.up_to\":\n\t\t\t\tthrow chatCapabilityUnsupported(\"readUpTo\");\n\t\t\tdefault:\n\t\t\t\tthrow chatCapabilityUnsupported(\"websocket\");\n\t\t}\n\t};\n\n\treturn {\n\t\tclose(code, reason) {\n\t\t\tfor (const stop of unsubscribers.values()) {\n\t\t\t\tstop();\n\t\t\t}\n\t\t\tunsubscribers.clear();\n\t\t\tsocket.close(code, reason);\n\t\t},\n\t\thello() {\n\t\t\tthrow chatCapabilityUnsupported(\"hello\");\n\t\t},\n\t\tping() {\n\t\t\tthrow chatCapabilityUnsupported(\"ping\");\n\t\t},\n\t\tpresenceHeartbeat() {\n\t\t\tthrow chatCapabilityUnsupported(\"presence\");\n\t\t},\n\t\treadUpTo() {\n\t\t\tthrow chatCapabilityUnsupported(\"readUpTo\");\n\t\t},\n\t\tresume,\n\t\tsend,\n\t\tsocket,\n\t\tsubscribe,\n\t\ttypingStart() {\n\t\t\tthrow chatCapabilityUnsupported(\"typing\");\n\t\t},\n\t\ttypingStop() {\n\t\t\tthrow chatCapabilityUnsupported(\"typing\");\n\t\t},\n\t\tunsubscribe(roomId) {\n\t\t\tunsubscribers.get(roomId)?.();\n\t\t\tunsubscribers.delete(roomId);\n\t\t},\n\t};\n}\n","/**\n * Node chat materializer — local chat runtime + borrowed Postgres store.\n */\n\nimport { resolveChatMode } from \"../../chat/config.ts\";\nimport { createChatDatabaseFromRuntime } from \"../../chat/local/database.ts\";\nimport { createRootChatPrincipalResolver } from \"../../chat/local/principal.ts\";\nimport { createLocalChatRuntime } from \"../../chat/local/runtime.ts\";\nimport {\n\tbindPostgresRuntime,\n\tcreateAthenaPostgresRuntime,\n\tgetBoundPostgresRuntime,\n} from \"../../postgres/owned-runtime.ts\";\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\nimport {\n\ttype AthenaClientConfig,\n\tnormalizeOptional,\n} from \"../../v3-client-core.ts\";\nimport type { AthenaRuntimePlan } from \"../plan/types.ts\";\n\nexport function plantLocalChatRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n\tif (config.chatRuntime) {\n\t\treturn config;\n\t}\n\tif (config.chat === undefined || config.chat === false) {\n\t\treturn config;\n\t}\n\tconst pgUri =\n\t\tnormalizeOptional(config.db?.pgUri) ??\n\t\tnormalizeOptional(config.databaseUrl);\n\tconst mode = resolveChatMode({\n\t\tchat: config.chat,\n\t\tclusterUrl: config.url,\n\t\tdatabaseUrl: pgUri,\n\t});\n\tif (mode !== \"local\") {\n\t\treturn config;\n\t}\n\tif (!pgUri) {\n\t\treturn config;\n\t}\n\tconst postgresRuntime =\n\t\tgetBoundPostgresRuntime(config.gatewayTransport) ??\n\t\tcreateAthenaPostgresRuntime({ connectionString: pgUri });\n\tif (config.gatewayTransport) {\n\t\tbindPostgresRuntime(config.gatewayTransport, postgresRuntime);\n\t}\n\tconst chatObject =\n\t\ttypeof config.chat === \"object\" && config.chat ? config.chat : undefined;\n\treturn {\n\t\t...config,\n\t\tchatRuntime: createLocalChatRuntime({\n\t\t\tdatabase: createChatDatabaseFromRuntime(postgresRuntime),\n\t\t\tresolvePrincipal: createRootChatPrincipalResolver({\n\t\t\t\tauth: config.auth,\n\t\t\t\tcontext: config.context,\n\t\t\t\tdatabaseUrl: pgUri,\n\t\t\t\tresolvePrincipal: chatObject?.resolvePrincipal,\n\t\t\t}),\n\t\t}),\n\t};\n}\n\nexport function materializeChat<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(\n\tconfig: AthenaClientConfig<TModels>,\n\t_plan?: AthenaRuntimePlan,\n): AthenaClientConfig<TModels> {\n\treturn plantLocalChatRuntime(config);\n}\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(root: string, key: string): { 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  return;\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  return;\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(\n    (sum, file) => sum + file.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: 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?.(\n        progressSnapshot(\"preparing\", described, 0, 0, 0),\n      );\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(\n            \"uploading\",\n            described,\n            index,\n            0,\n            aggregateLoaded,\n          ),\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\") ??\n      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(\n      resolvedRoot,\n      applyPrefix(prefix, logical)\n    );\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(\n      resolvedRoot,\n      applyPrefix(prefix, logical)\n    );\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(\n      resolvedRoot,\n      applyPrefix(prefix, logical)\n    );\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(\n      resolvedRoot,\n      applyPrefix(prefix, from),\n    );\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 =\n      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\n      ? assertSafeObjectKey(rawPrefix)\n      : \"\";\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, start + limit) : listed.slice(start);\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    file,\n    files: {\n      upload: () => rejectUnsupported(\"files.upload\"),\n    },\n    folder,\n    object,\n    permission: unsupportedTree(\"permission\"),\n    permissions,\n    catalog: unsupportedTree(\"catalog\"),\n    connections: unsupportedTree(\"connections\"),\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\tmapProviderFailure,\n\tstorageErrorResult,\n\tstorageOkResult,\n} from \"../errors.ts\";\nimport type {\n\tAuthorizedStorageOperation,\n\tStorageObjectProvider,\n} from \"../types.ts\";\n\nexport function createLocalStorageProvider(\n\tstore: AthenaStorageModule,\n): StorageObjectProvider {\n\treturn {\n\t\tasync execute(op: AuthorizedStorageOperation) {\n\t\t\ttry {\n\t\t\t\tswitch (op.op) {\n\t\t\t\t\tcase \"put\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"put requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst data = await store.file.upload({\n\t\t\t\t\t\t\tbody: op.body ?? new Uint8Array(),\n\t\t\t\t\t\t\tname: op.key,\n\t\t\t\t\t\t\tsource: op.body ?? new Uint8Array(),\n\t\t\t\t\t\t\tstorage_key: op.key,\n\t\t\t\t\t\t} as never);\n\t\t\t\t\t\treturn storageOkResult(data);\n\t\t\t\t\t}\n\t\t\t\t\tcase \"get\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"get requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst data = await store.file.get({ storage_key: op.key } as never);\n\t\t\t\t\t\treturn storageOkResult(data);\n\t\t\t\t\t}\n\t\t\t\t\tcase \"head\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"head requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst data = await (\n\t\t\t\t\t\t\tstore.file as typeof store.file & {\n\t\t\t\t\t\t\t\thead: (input: never) => Promise<unknown>;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t).head({ storage_key: op.key } as never);\n\t\t\t\t\t\treturn storageOkResult(data);\n\t\t\t\t\t}\n\t\t\t\t\tcase \"delete\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"delete requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst data = await store.file.delete({\n\t\t\t\t\t\t\tstorage_key: op.key,\n\t\t\t\t\t\t} as never);\n\t\t\t\t\t\treturn storageOkResult(data);\n\t\t\t\t\t}\n\t\t\t\t\tcase \"list\": {\n\t\t\t\t\t\tconst data = await store.file.list({\n\t\t\t\t\t\t\tcursor: op.cursor,\n\t\t\t\t\t\t\tlimit: op.limit,\n\t\t\t\t\t\t\tprefix: op.prefix,\n\t\t\t\t\t\t} as never);\n\t\t\t\t\t\treturn storageOkResult(data);\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\tmessage: `unsupported op ${String(op.op)}`,\n\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\treturn mapProviderFailure(error);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function createLocalStorageProviderFromRoot(options: {\n\tprefix?: string | null;\n\troot: string;\n}): StorageObjectProvider {\n\treturn createLocalStorageProvider(\n\t\tcreateLocalStorageModule({\n\t\t\tprefix: options.prefix,\n\t\t\troot: options.root,\n\t\t}),\n\t);\n}\n","import {\n\ttype CloudflareR2ObjectStorage,\n\tcreateCloudflareR2ObjectStorage,\n} from \"../../../cloudflare/r2/storage.ts\";\nimport type { R2BucketLike } from \"../../../cloudflare/types.ts\";\nimport {\n\tmapProviderFailure,\n\tstorageErrorResult,\n\tstorageOkResult,\n} from \"../errors.ts\";\nimport type {\n\tAuthorizedStorageOperation,\n\tStorageObjectProvider,\n} from \"../types.ts\";\n\nexport function createR2StorageProvider(\n\tr2: R2BucketLike,\n\tprefix?: string | null,\n): StorageObjectProvider {\n\tconst objects: CloudflareR2ObjectStorage = createCloudflareR2ObjectStorage({\n\t\tprefix: prefix ?? undefined,\n\t\tr2,\n\t});\n\treturn {\n\t\tasync execute(op: AuthorizedStorageOperation) {\n\t\t\ttry {\n\t\t\t\tswitch (op.op) {\n\t\t\t\t\tcase \"put\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"put requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst data = await objects.putObject({\n\t\t\t\t\t\t\tbody: op.body ?? new Uint8Array(),\n\t\t\t\t\t\t\tcontentType: op.contentType,\n\t\t\t\t\t\t\tkey: op.key,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn storageOkResult(data);\n\t\t\t\t\t}\n\t\t\t\t\tcase \"get\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"get requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst object = await objects.getObject({ key: op.key });\n\t\t\t\t\t\tif (!object) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: `Object not found: ${op.key}`,\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 404,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst bytes = await readR2Body(object.body);\n\t\t\t\t\t\treturn storageOkResult(bytes);\n\t\t\t\t\t}\n\t\t\t\t\tcase \"head\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"head requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst object = await objects.getObject({ key: op.key });\n\t\t\t\t\t\tif (!object) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: `Object not found: ${op.key}`,\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 404,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn storageOkResult({\n\t\t\t\t\t\t\tkey: object.key,\n\t\t\t\t\t\t\tsize: object.size,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcase \"delete\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"delete requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst data = await objects.deleteObject({ key: op.key });\n\t\t\t\t\t\treturn storageOkResult(data);\n\t\t\t\t\t}\n\t\t\t\t\tcase \"list\": {\n\t\t\t\t\t\tconst data = await objects.listObjects({ prefix: op.prefix });\n\t\t\t\t\t\treturn storageOkResult(data);\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\tmessage: `unsupported op ${String(op.op)}`,\n\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\treturn mapProviderFailure(error);\n\t\t\t}\n\t\t},\n\t};\n}\n\nasync function readR2Body(body: {\n\tarrayBuffer?: () => Promise<ArrayBuffer>;\n\ttext?: () => Promise<string>;\n}): Promise<Uint8Array> {\n\tif (typeof body.arrayBuffer === \"function\") {\n\t\treturn new Uint8Array(await body.arrayBuffer());\n\t}\n\tif (typeof body.text === \"function\") {\n\t\treturn new TextEncoder().encode(await body.text());\n\t}\n\treturn new Uint8Array();\n}\n","import {\n\tmapProviderFailure,\n\tstorageErrorResult,\n\tstorageOkResult,\n} from \"../errors.ts\";\nimport type {\n\tAuthorizedStorageOperation,\n\tStorageObjectProvider,\n} from \"../types.ts\";\n\nexport interface AthenaS3ObjectClient {\n\tdeleteObject(input: { Bucket: string; Key: string }): Promise<unknown>;\n\tgetObject(input: { Bucket: string; Key: string }): Promise<{\n\t\tBody?: unknown;\n\t\tContentLength?: number;\n\t\tContentType?: string;\n\t\tETag?: string;\n\t\tMetadata?: Record<string, string>;\n\t}>;\n\theadObject(input: { Bucket: string; Key: string }): Promise<{\n\t\tContentLength?: number;\n\t\tContentType?: string;\n\t\tETag?: string;\n\t\tMetadata?: Record<string, string>;\n\t}>;\n\tlistObjectsV2(input: {\n\t\tBucket: string;\n\t\tContinuationToken?: string;\n\t\tMaxKeys?: number;\n\t\tPrefix?: string;\n\t}): Promise<{\n\t\tContents?: Array<{\n\t\t\tETag?: string;\n\t\t\tKey?: string;\n\t\t\tLastModified?: Date;\n\t\t\tSize?: number;\n\t\t}>;\n\t\tIsTruncated?: boolean;\n\t\tNextContinuationToken?: string;\n\t}>;\n\tputObject(input: {\n\t\tBody?: Uint8Array;\n\t\tBucket: string;\n\t\tContentType?: string;\n\t\tKey: string;\n\t\tMetadata?: Record<string, string>;\n\t}): Promise<unknown>;\n}\n\nexport function isAthenaS3ObjectClient(\n\tvalue: unknown,\n): value is AthenaS3ObjectClient {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst client = value as Record<string, unknown>;\n\treturn (\n\t\ttypeof client.getObject === \"function\" &&\n\t\ttypeof client.putObject === \"function\" &&\n\t\ttypeof client.headObject === \"function\" &&\n\t\ttypeof client.deleteObject === \"function\" &&\n\t\ttypeof client.listObjectsV2 === \"function\"\n\t);\n}\n\nexport function createS3StorageProvider(options: {\n\tbucket: string;\n\tprefix?: string | null;\n\ts3: AthenaS3ObjectClient;\n}): StorageObjectProvider {\n\tconst bucket = options.bucket.trim();\n\tconst prefix = normalizePrefix(options.prefix);\n\tconst { s3 } = options;\n\treturn {\n\t\tasync execute(op: AuthorizedStorageOperation) {\n\t\t\ttry {\n\t\t\t\tswitch (op.op) {\n\t\t\t\t\tcase \"put\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"put requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst key = toPhysicalKey(prefix, op.key);\n\t\t\t\t\t\tawait s3.putObject({\n\t\t\t\t\t\t\tBody: op.body ?? new Uint8Array(),\n\t\t\t\t\t\t\tBucket: bucket,\n\t\t\t\t\t\t\tContentType: op.contentType,\n\t\t\t\t\t\t\tKey: key,\n\t\t\t\t\t\t\tMetadata: op.metadata,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn storageOkResult({ key: toLogicalKey(prefix, key) });\n\t\t\t\t\t}\n\t\t\t\t\tcase \"get\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"get requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst result = await s3.getObject({\n\t\t\t\t\t\t\tBucket: bucket,\n\t\t\t\t\t\t\tKey: toPhysicalKey(prefix, op.key),\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn storageOkResult(await readS3Body(result.Body));\n\t\t\t\t\t}\n\t\t\t\t\tcase \"head\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"head requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst result = await s3.headObject({\n\t\t\t\t\t\t\tBucket: bucket,\n\t\t\t\t\t\t\tKey: toPhysicalKey(prefix, op.key),\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn storageOkResult({\n\t\t\t\t\t\t\tcontentType: result.ContentType,\n\t\t\t\t\t\t\tetag: result.ETag,\n\t\t\t\t\t\t\tkey: op.key,\n\t\t\t\t\t\t\tmetadata: result.Metadata,\n\t\t\t\t\t\t\tsize: result.ContentLength ?? 0,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcase \"delete\": {\n\t\t\t\t\t\tif (!op.key?.trim()) {\n\t\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\t\tmessage: \"delete requires key\",\n\t\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst key = toPhysicalKey(prefix, op.key);\n\t\t\t\t\t\tawait s3.deleteObject({ Bucket: bucket, Key: key });\n\t\t\t\t\t\treturn storageOkResult({\n\t\t\t\t\t\t\tdeleted: [toLogicalKey(prefix, key)],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcase \"list\": {\n\t\t\t\t\t\tconst listPrefix = joinPrefix(prefix, op.prefix);\n\t\t\t\t\t\tconst result = await s3.listObjectsV2({\n\t\t\t\t\t\t\tBucket: bucket,\n\t\t\t\t\t\t\tContinuationToken: op.cursor,\n\t\t\t\t\t\t\tMaxKeys: op.limit,\n\t\t\t\t\t\t\tPrefix: listPrefix || undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst objects = (result.Contents ?? [])\n\t\t\t\t\t\t\t.filter((entry) => typeof entry.Key === \"string\")\n\t\t\t\t\t\t\t.map((entry) => ({\n\t\t\t\t\t\t\t\tetag: entry.ETag,\n\t\t\t\t\t\t\t\tkey: toLogicalKey(prefix, entry.Key as string),\n\t\t\t\t\t\t\t\tsize: entry.Size ?? 0,\n\t\t\t\t\t\t\t\tuploaded: entry.LastModified,\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn storageOkResult({\n\t\t\t\t\t\t\tcursor: result.NextContinuationToken,\n\t\t\t\t\t\t\tobjects,\n\t\t\t\t\t\t\ttruncated: Boolean(result.IsTruncated),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\t\tmessage: `unsupported op ${String(op.op)}`,\n\t\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\treturn mapS3Failure(error);\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction normalizePrefix(prefix: string | null | undefined): string {\n\tif (!prefix?.trim()) {\n\t\treturn \"\";\n\t}\n\tconst normalized = prefix.replace(/^\\/+/, \"\").replace(/\\/?$/, \"/\");\n\tif (normalized.includes(\"\\0\") || normalized.split(\"/\").includes(\"..\")) {\n\t\tthrow new Error(\"storage prefix must not contain null bytes or .. segments\");\n\t}\n\treturn normalized;\n}\n\nfunction assertSafeObjectKey(key: string): string {\n\tif (!key.trim()) {\n\t\tthrow new Error(\"Object key is required\");\n\t}\n\tif (key.includes(\"\\0\")) {\n\t\tthrow new Error(\"Object key must not contain null bytes\");\n\t}\n\tconst cleaned = key.replace(/^\\/+/, \"\");\n\tif (!cleaned) {\n\t\tthrow new Error(\"Object key is required\");\n\t}\n\tif (cleaned.split(\"/\").includes(\"..\")) {\n\t\tthrow new Error('Object key must not contain \"..\" path segments');\n\t}\n\treturn cleaned;\n}\n\nfunction toPhysicalKey(prefix: string, key: string): string {\n\treturn `${prefix}${assertSafeObjectKey(key)}`;\n}\n\nfunction toLogicalKey(prefix: string, physicalKey: string): string {\n\tif (prefix && physicalKey.startsWith(prefix)) {\n\t\treturn physicalKey.slice(prefix.length);\n\t}\n\treturn physicalKey;\n}\n\nfunction joinPrefix(base: string, extra?: string): string {\n\tif (!extra?.trim()) {\n\t\treturn base;\n\t}\n\treturn `${base}${extra.replace(/^\\/+/, \"\")}`;\n}\n\nasync function readS3Body(body: unknown): Promise<Uint8Array> {\n\tif (body == null) {\n\t\treturn new Uint8Array();\n\t}\n\tif (body instanceof Uint8Array) {\n\t\treturn body;\n\t}\n\tif (typeof body === \"string\") {\n\t\treturn new TextEncoder().encode(body);\n\t}\n\tif (typeof body === \"object\") {\n\t\tconst record = body as {\n\t\t\tarrayBuffer?: () => Promise<ArrayBuffer>;\n\t\t\ttransformToByteArray?: () => Promise<Uint8Array | ArrayBuffer>;\n\t\t\ttransformToString?: () => Promise<string>;\n\t\t};\n\t\tif (typeof record.transformToByteArray === \"function\") {\n\t\t\treturn new Uint8Array(await record.transformToByteArray());\n\t\t}\n\t\tif (typeof record.arrayBuffer === \"function\") {\n\t\t\treturn new Uint8Array(await record.arrayBuffer());\n\t\t}\n\t\tif (typeof record.transformToString === \"function\") {\n\t\t\treturn new TextEncoder().encode(await record.transformToString());\n\t\t}\n\t}\n\treturn new Uint8Array();\n}\n\nfunction mapS3Failure(error: unknown): ReturnType<typeof storageErrorResult> {\n\tconst code = s3ErrorCode(error).toLowerCase();\n\tconst status = s3HttpStatus(error);\n\tif (\n\t\tstatus === 404 ||\n\t\tcode === \"nosuchkey\" ||\n\t\tcode === \"notfound\" ||\n\t\tcode === \"nosuchbucket\"\n\t) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn storageErrorResult({\n\t\t\tmessage,\n\t\t\tsource: \"provider\",\n\t\t\tstatus: 404,\n\t\t\tproviderCode: code,\n\t\t});\n\t}\n\tif (status === 400 || code === \"invalidargument\" || code === \"invalidbucketname\") {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn storageErrorResult({\n\t\t\tmessage,\n\t\t\tsource: \"provider\",\n\t\t\tstatus: 400,\n\t\t\tproviderCode: code,\n\t\t});\n\t}\n\tif (status === 503 || code === \"slowdown\") {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn storageErrorResult({\n\t\t\tmessage,\n\t\t\tsource: \"provider\",\n\t\t\tstatus: 500,\n\t\t\tproviderCode: code,\n\t\t});\n\t}\n\treturn mapProviderFailure(error);\n}\n\nfunction s3ErrorCode(error: unknown): string {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn \"\";\n\t}\n\tconst record = error as { Code?: string; code?: string; name?: string };\n\treturn String(record.Code ?? record.code ?? record.name ?? \"\");\n}\n\nfunction s3HttpStatus(error: unknown): number | undefined {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn undefined;\n\t}\n\treturn (error as { $metadata?: { httpStatusCode?: number } }).$metadata\n\t\t?.httpStatusCode;\n}\n","/**\n * Node storage materializer — local ObjectStore bind / HTTP module stays on core.\n */\n\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\nimport { createLocalStorageModule } from \"../../storage/local.ts\";\nimport type { AthenaStorageModule } from \"../../storage/module.ts\";\nimport {\n\tbindStorageProvider,\n\tbindStorageRuntime,\n\tcreateStorageRuntime,\n\tgetStorageProvider,\n} 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\tcreateS3StorageProvider,\n\tisAthenaS3ObjectClient,\n} from \"../../storage/runtime/providers/s3-provider.ts\";\nimport type { AthenaStorageLifecycleHooks } from \"../../storage/runtime/types.ts\";\nimport {\n\tbindLocalObjectStore,\n\tgetLocalObjectStore,\n\tisLocalStorageConfig,\n\tisS3StorageConfig,\n} from \"../../storage/runtime.ts\";\nimport {\n\ttype AthenaClientConfig,\n\tAthenaConfigurationError,\n\tnormalizeOptional,\n} from \"../../v3-client-core.ts\";\nimport type { AthenaRuntimePlan } from \"../plan/types.ts\";\n\nfunction isR2StorageConfig(\n\tstorage: unknown,\n): storage is { prefix?: string | null; r2: { get: unknown; put: unknown } } {\n\treturn Boolean(\n\t\tstorage &&\n\t\t\ttypeof storage === \"object\" &&\n\t\t\ttypeof (storage as { r2?: { get?: unknown; put?: unknown } }).r2?.get ===\n\t\t\t\t\"function\" &&\n\t\t\ttypeof (storage as { r2?: { put?: unknown } }).r2?.put === \"function\",\n\t);\n}\n\nfunction attachRuntime<TStorage extends object>(\n\tstorage: TStorage,\n\tlifecycle?: AthenaStorageLifecycleHooks,\n): TStorage {\n\tconst provider = getStorageProvider(storage);\n\tif (!provider) {\n\t\treturn storage;\n\t}\n\treturn bindStorageRuntime(\n\t\tstorage,\n\t\tcreateStorageRuntime({\n\t\t\tlifecycle,\n\t\t\tprovider,\n\t\t}),\n\t);\n}\n\nexport function materializeStorage<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(\n\tconfig: AthenaClientConfig<TModels>,\n\t_plan?: AthenaRuntimePlan,\n): AthenaClientConfig<TModels> {\n\tif (isLocalStorageConfig(config.storage)) {\n\t\tconst root = normalizeOptional(config.storage.root);\n\t\tif (!root) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t\t'storage.provider \"local\" requires a filesystem root.',\n\t\t\t\t\"storage\",\n\t\t\t);\n\t\t}\n\t\tconst store: AthenaStorageModule =\n\t\t\tgetLocalObjectStore<AthenaStorageModule>(config.storage) ??\n\t\t\tcreateLocalStorageModule({\n\t\t\t\tprefix: config.storage.prefix,\n\t\t\t\troot,\n\t\t\t});\n\t\tconst withStore = getLocalObjectStore(config.storage)\n\t\t\t? config.storage\n\t\t\t: bindLocalObjectStore(config.storage, store);\n\t\tconst provider =\n\t\t\tgetStorageProvider(withStore) ?? createLocalStorageProvider(store);\n\t\tconst next: AthenaClientConfig<TModels> = {\n\t\t\t...config,\n\t\t\tstorage: attachRuntime(\n\t\t\t\tbindStorageProvider(withStore, provider),\n\t\t\t\tconfig.lifecycle?.storage,\n\t\t\t),\n\t\t};\n\t\tif (next.capabilities && !config.capabilities) {\n\t\t\tnext.capabilities = {\n\t\t\t\t...next.capabilities,\n\t\t\t\tstorage: {\n\t\t\t\t\t...next.capabilities.storage,\n\t\t\t\t\tlocal: true,\n\t\t\t\t\tobjects: true,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\treturn next;\n\t}\n\n\tif (isR2StorageConfig(config.storage)) {\n\t\tconst provider =\n\t\t\tgetStorageProvider(config.storage) ??\n\t\t\tcreateR2StorageProvider(config.storage.r2 as never, config.storage.prefix);\n\t\treturn {\n\t\t\t...config,\n\t\t\tstorage: attachRuntime(\n\t\t\t\tbindStorageProvider(config.storage, provider),\n\t\t\t\tconfig.lifecycle?.storage,\n\t\t\t),\n\t\t};\n\t}\n\n\tif (isS3StorageConfig(config.storage)) {\n\t\tconst bucket = normalizeOptional(config.storage.bucket);\n\t\tif (!bucket || !isAthenaS3ObjectClient(config.storage.s3)) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t\t'storage.provider \"s3\" requires a bucket and an injected S3 object client (getObject/putObject/headObject/deleteObject/listObjectsV2).',\n\t\t\t\t\"storage\",\n\t\t\t);\n\t\t}\n\t\tconst provider =\n\t\t\tgetStorageProvider(config.storage) ??\n\t\t\tcreateS3StorageProvider({\n\t\t\t\tbucket,\n\t\t\t\tprefix: config.storage.prefix,\n\t\t\t\ts3: config.storage.s3,\n\t\t\t});\n\t\treturn {\n\t\t\t...config,\n\t\t\tstorage: attachRuntime(\n\t\t\t\tbindStorageProvider(config.storage, provider),\n\t\t\t\tconfig.lifecycle?.storage,\n\t\t\t),\n\t\t};\n\t}\n\n\treturn config;\n}\n","/**\n * Fail closed on conflicting local/remote runtime intent.\n */\n\nimport { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { AthenaRuntimePlan } from \"./types.ts\";\n\nexport function validateRuntimePlan(plan: unknown): AthenaRuntimePlan {\n\tif (!plan || typeof plan !== \"object\") {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t\"AthenaRuntimePlan is missing; construction cannot continue.\",\n\t\t);\n\t}\n\tconst next = plan as AthenaRuntimePlan;\n\tconst storage = next.storage;\n\tif (\n\t\tstorage?.wantsLocal &&\n\t\t(storage.hasUrl || storage.hasR2 || storage.wantsS3)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t'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\t\t\t\"storage\",\n\t\t);\n\t}\n\tif (\n\t\tstorage?.wantsS3 &&\n\t\t(storage.hasUrl || storage.hasR2 || storage.wantsLocal || storage.root)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t'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\t\t\t\"storage\",\n\t\t);\n\t}\n\tif (next.db?.hasD1 && (next.db.pgUri || next.db.hasPool)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_NO_SERVICE_CONFIGURED\",\n\t\t\t\"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\t\t\t\"db\",\n\t\t);\n\t}\n\treturn next;\n}\n","/**\n * Dispatch AthenaRuntimePlan to Node domain materializers.\n */\n\nimport type { BillingProviderRegistry } from \"../../billing/runtime/local/providers/registry.ts\";\nimport type { AthenaClientConfig } from \"../../v3-client-core.ts\";\nimport { materializeAuth } from \"../materializers/auth.ts\";\nimport { materializeBilling } from \"../materializers/billing.ts\";\nimport { materializeChat } from \"../materializers/chat.ts\";\nimport { materializeDatabase } from \"../materializers/database.ts\";\nimport { materializeStorage } from \"../materializers/storage.ts\";\nimport { validateRuntimePlan } from \"./validate.ts\";\nimport type { AthenaRuntimePlan } from \"./types.ts\";\n\nexport interface AthenaMaterializedRuntime {\n\tbillingProviderRegistry: BillingProviderRegistry;\n\tconfig: AthenaClientConfig;\n\tplan: AthenaRuntimePlan;\n}\n\nexport function materializeRuntimePlan(\n\tplan: unknown,\n): AthenaMaterializedRuntime {\n\tconst validated = validateRuntimePlan(plan);\n\tconst base = validated.config as AthenaClientConfig;\n\tconst withAuth = materializeAuth(base, validated);\n\tconst withDb = materializeDatabase(withAuth, validated);\n\tconst withStorage = materializeStorage(withDb, validated);\n\tconst withChat = materializeChat(withStorage, validated);\n\tconst billingProviderRegistry = materializeBilling(withChat, validated);\n\treturn {\n\t\tbillingProviderRegistry,\n\t\tconfig: withChat,\n\t\tplan: {\n\t\t\t...validated,\n\t\t\tconfig: withChat,\n\t\t},\n\t};\n}\n","/**\n * Browser-safe config fold: aliases, env, execution mode, edge bindings.\n * Does not materialize Node backends.\n */\n\nimport {\n\ttype AthenaClientConfig,\n\tnormalizeUniversalCreateClientConfig,\n} from \"../../v3-client-core.ts\";\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\n\nexport function normalizeUniversalConfig<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n\treturn normalizeUniversalCreateClientConfig(config);\n}\n","/**\n * Resolve an internal AthenaRuntimePlan from createClient config.\n */\n\nimport {\n\tdetectAthenaRuntimeEnvironment,\n\tinferEmbeddedAuthMode,\n\tresolveAthenaRuntime,\n\tresolveDatabaseUri,\n\ttype ResolveAthenaRuntimeOptions,\n\ttype ResolveConfigInput,\n} from \"../resolve.ts\";\nimport type { AthenaRuntimePlan } from \"./types.ts\";\n\nfunction trimOptional(value: string | null | undefined): string | undefined {\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nexport function resolveRuntimePlan(\n\tconfig: unknown,\n\toptions: ResolveAthenaRuntimeOptions = {},\n): AthenaRuntimePlan {\n\tconst input = (config ?? {}) as ResolveConfigInput;\n\tconst environment =\n\t\toptions.environment ?? detectAthenaRuntimeEnvironment();\n\tconst trustedNode = options.trustedNode ?? environment === \"node\";\n\tconst inferred = trustedNode ? inferEmbeddedAuthMode(input) : input;\n\tconst snapshot = resolveAthenaRuntime(inferred, {\n\t\tenvironment,\n\t\ttrustedNode,\n\t});\n\tconst storage = inferred.storage;\n\tconst root = trimOptional(storage?.root);\n\tconst prefix = trimOptional(storage?.prefix);\n\tconst bucket = trimOptional(storage?.bucket);\n\treturn {\n\t\tauth: { runtime: snapshot.auth.runtime },\n\t\tconfig: inferred,\n\t\tdb: {\n\t\t\thasD1: inferred.db?.d1 !== undefined && inferred.db?.d1 !== null,\n\t\t\thasPool: inferred.db?.pool !== undefined && inferred.db?.pool !== null,\n\t\t\tpgUri: resolveDatabaseUri(inferred),\n\t\t\ttransport: snapshot.db.transport,\n\t\t},\n\t\tenvironment,\n\t\tstorage: {\n\t\t\t...(bucket ? { bucket } : {}),\n\t\t\thasR2: storage?.r2 !== undefined && storage?.r2 !== null,\n\t\t\thasUrl: Boolean(trimOptional(storage?.url)),\n\t\t\t...(prefix ? { prefix } : {}),\n\t\t\t...(root ? { root } : {}),\n\t\t\ttransport: snapshot.storage.transport,\n\t\t\twantsLocal: storage?.provider === \"local\",\n\t\t\twantsS3: storage?.provider === \"s3\",\n\t\t},\n\t\ttrustedNode,\n\t};\n}\n","/**\n * Internal AthenaRuntimePlan. Not a public config surface.\n */\n\nimport type {\n\tAthenaAuthRuntime,\n\tAthenaDbTransport,\n\tAthenaRuntimeEnvironment,\n\tAthenaStorageTransport,\n\tResolvedAthenaRuntime,\n} from \"../resolve.ts\";\n\nexport interface AthenaRuntimePlanAuth {\n\truntime: AthenaAuthRuntime;\n}\n\nexport interface AthenaRuntimePlanDb {\n\thasD1: boolean;\n\thasPool: boolean;\n\tpgUri?: string;\n\ttransport: AthenaDbTransport;\n}\n\nexport interface AthenaRuntimePlanStorage {\n\tbucket?: string;\n\thasR2: boolean;\n\thasUrl: boolean;\n\tprefix?: string;\n\troot?: string;\n\ttransport: AthenaStorageTransport;\n\twantsLocal: boolean;\n\twantsS3: boolean;\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\tauth: AthenaRuntimePlanAuth;\n\tconfig: unknown;\n\tdb: AthenaRuntimePlanDb;\n\tenvironment: AthenaRuntimeEnvironment;\n\tstorage: AthenaRuntimePlanStorage;\n\ttrustedNode: boolean;\n}\n\nexport function toResolvedAthenaRuntime(\n\tplan: AthenaRuntimePlan,\n): ResolvedAthenaRuntime {\n\treturn {\n\t\tauth: { runtime: plan.auth.runtime },\n\t\tdb: { transport: plan.db.transport },\n\t\truntime: { environment: plan.environment },\n\t\tstorage: { transport: plan.storage.transport },\n\t};\n}\n"]}