@yielded/auth 0.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +18 -0
- package/dist/Atom.d.mts +5 -0
- package/dist/Atom.mjs +5 -0
- package/dist/Auth.d.mts +9 -0
- package/dist/Auth.mjs +7 -0
- package/dist/AuthContract.d.mts +4 -0
- package/dist/AuthContract.mjs +4 -0
- package/dist/AuthSession.d.mts +82 -0
- package/dist/AuthSession.mjs +138 -0
- package/dist/AuthSession.mjs.map +1 -0
- package/dist/AuthStore.d.mts +68 -0
- package/dist/AuthStore.mjs +194 -0
- package/dist/AuthStore.mjs.map +1 -0
- package/dist/AuthTokenCodec.d.mts +40 -0
- package/dist/AuthTokenCodec.mjs +104 -0
- package/dist/AuthTokenCodec.mjs.map +1 -0
- package/dist/Client.d.mts +2 -0
- package/dist/Client.mjs +2 -0
- package/dist/Cloudflare.d.mts +89 -0
- package/dist/Cloudflare.mjs +166 -0
- package/dist/Cloudflare.mjs.map +1 -0
- package/dist/Drizzle.d.mts +28 -0
- package/dist/Drizzle.mjs +27 -0
- package/dist/DrizzleD1.d.mts +935 -0
- package/dist/DrizzleD1.mjs +29 -0
- package/dist/DrizzleD1.mjs.map +1 -0
- package/dist/DrizzleLibsql.d.mts +2288 -0
- package/dist/DrizzleLibsql.mjs +85 -0
- package/dist/DrizzleLibsql.mjs.map +1 -0
- package/dist/DrizzleMysql2.d.mts +1809 -0
- package/dist/DrizzleMysql2.mjs +55 -0
- package/dist/DrizzleMysql2.mjs.map +1 -0
- package/dist/DrizzlePglite.d.mts +1808 -0
- package/dist/DrizzlePglite.mjs +45 -0
- package/dist/DrizzlePglite.mjs.map +1 -0
- package/dist/DrizzlePostgres.d.mts +1808 -0
- package/dist/DrizzlePostgres.mjs +45 -0
- package/dist/DrizzlePostgres.mjs.map +1 -0
- package/dist/DrizzleSqliteBun.d.mts +2287 -0
- package/dist/DrizzleSqliteBun.mjs +62 -0
- package/dist/DrizzleSqliteBun.mjs.map +1 -0
- package/dist/DrizzleSqliteDo.d.mts +2343 -0
- package/dist/DrizzleSqliteDo.mjs +105 -0
- package/dist/DrizzleSqliteDo.mjs.map +1 -0
- package/dist/DrizzleSqliteNode.d.mts +2287 -0
- package/dist/DrizzleSqliteNode.mjs +62 -0
- package/dist/DrizzleSqliteNode.mjs.map +1 -0
- package/dist/DrizzleSqliteWasm.d.mts +2287 -0
- package/dist/DrizzleSqliteWasm.mjs +62 -0
- package/dist/DrizzleSqliteWasm.mjs.map +1 -0
- package/dist/Email.d.mts +12 -0
- package/dist/Email.mjs +11 -0
- package/dist/EmailOtp.d.mts +42 -0
- package/dist/EmailOtp.mjs +120 -0
- package/dist/EmailOtp.mjs.map +1 -0
- package/dist/EmailOtpSender.d.mts +22 -0
- package/dist/EmailOtpSender.mjs +18 -0
- package/dist/EmailOtpSender.mjs.map +1 -0
- package/dist/Errors.d.mts +55 -0
- package/dist/Errors.mjs +31 -0
- package/dist/Errors.mjs.map +1 -0
- package/dist/GitHub.d.mts +5 -0
- package/dist/GitHub.mjs +4 -0
- package/dist/Hooks.d.mts +6 -0
- package/dist/Hooks.mjs +6 -0
- package/dist/Http.d.mts +12 -0
- package/dist/Http.mjs +12 -0
- package/dist/HttpServer.d.mts +103 -0
- package/dist/HttpServer.mjs +326 -0
- package/dist/HttpServer.mjs.map +1 -0
- package/dist/Identity.d.mts +9 -0
- package/dist/Identity.mjs +9 -0
- package/dist/IdentityResolver.d.mts +16 -0
- package/dist/IdentityResolver.mjs +12 -0
- package/dist/IdentityResolver.mjs.map +1 -0
- package/dist/OAuth.d.mts +36 -0
- package/dist/OAuth.mjs +35 -0
- package/dist/OpenIdClient.d.mts +3 -0
- package/dist/OpenIdClient.mjs +3 -0
- package/dist/OpenIdClientConnected.d.mts +4 -0
- package/dist/OpenIdClientConnected.mjs +3 -0
- package/dist/OperationHttp.d.mts +3 -0
- package/dist/OperationHttp.mjs +3 -0
- package/dist/OperationHttpClient.d.mts +2 -0
- package/dist/OperationHttpClient.mjs +2 -0
- package/dist/OperationHttpServer.d.mts +5 -0
- package/dist/OperationHttpServer.mjs +4 -0
- package/dist/Operations.d.mts +8 -0
- package/dist/Operations.mjs +8 -0
- package/dist/Passkey.d.mts +12 -0
- package/dist/Passkey.mjs +12 -0
- package/dist/PasskeyBrowser.d.mts +4 -0
- package/dist/PasskeyBrowser.mjs +4 -0
- package/dist/PasskeyContract.d.mts +641 -0
- package/dist/PasskeyContract.mjs +174 -0
- package/dist/PasskeyContract.mjs.map +1 -0
- package/dist/PasskeyPassword.d.mts +412 -0
- package/dist/PasskeyPassword.mjs +174 -0
- package/dist/PasskeyPassword.mjs.map +1 -0
- package/dist/PasskeySimpleWebAuthn.d.mts +3 -0
- package/dist/PasskeySimpleWebAuthn.mjs +3 -0
- package/dist/Password.d.mts +19 -0
- package/dist/Password.mjs +17 -0
- package/dist/PasswordAuth.d.mts +45 -0
- package/dist/PasswordAuth.mjs +79 -0
- package/dist/PasswordAuth.mjs.map +1 -0
- package/dist/PasswordCredentialStore.d.mts +46 -0
- package/dist/PasswordCredentialStore.mjs +62 -0
- package/dist/PasswordCredentialStore.mjs.map +1 -0
- package/dist/PasswordHasher.d.mts +31 -0
- package/dist/PasswordHasher.mjs +76 -0
- package/dist/PasswordHasher.mjs.map +1 -0
- package/dist/PhoneOtp.d.mts +11 -0
- package/dist/PhoneOtp.mjs +11 -0
- package/dist/Policy.d.mts +52 -0
- package/dist/Policy.mjs +36 -0
- package/dist/Policy.mjs.map +1 -0
- package/dist/Proofs.d.mts +14 -0
- package/dist/Proofs.mjs +13 -0
- package/dist/Rpc.d.mts +12 -0
- package/dist/Rpc.mjs +11 -0
- package/dist/Rpc.mjs.map +1 -0
- package/dist/Schema.d.mts +160 -0
- package/dist/Schema.mjs +141 -0
- package/dist/Schema.mjs.map +1 -0
- package/dist/SessionContract.d.mts +3 -0
- package/dist/SessionContract.mjs +3 -0
- package/dist/Sessions.d.mts +14 -0
- package/dist/Sessions.mjs +12 -0
- package/dist/Testing.d.mts +7 -0
- package/dist/Testing.mjs +7 -0
- package/dist/Totp.d.mts +8 -0
- package/dist/Totp.mjs +8 -0
- package/dist/TotpContract.d.mts +318 -0
- package/dist/TotpContract.mjs +119 -0
- package/dist/TotpContract.mjs.map +1 -0
- package/dist/WebCrypto.d.mts +28 -0
- package/dist/WebCrypto.mjs +42 -0
- package/dist/WebCrypto.mjs.map +1 -0
- package/dist/Workflows.d.mts +16 -0
- package/dist/Workflows.mjs +11 -0
- package/dist/Workflows.mjs.map +1 -0
- package/dist/atom/AuthAtomLifetime.d.mts +35 -0
- package/dist/atom/AuthAtomLifetime.mjs +50 -0
- package/dist/atom/AuthAtomLifetime.mjs.map +1 -0
- package/dist/atom/AuthAtomWorkflow.d.mts +17 -0
- package/dist/atom/AuthAtomWorkflow.mjs +9 -0
- package/dist/atom/AuthAtomWorkflow.mjs.map +1 -0
- package/dist/atom/client.d.mts +43 -0
- package/dist/atom/client.mjs +168 -0
- package/dist/atom/client.mjs.map +1 -0
- package/dist/atom/operations.d.mts +35 -0
- package/dist/atom/operations.mjs +58 -0
- package/dist/atom/operations.mjs.map +1 -0
- package/dist/atom/scoped-runtime.mjs +151 -0
- package/dist/atom/scoped-runtime.mjs.map +1 -0
- package/dist/auth/Auth.d.mts +7806 -0
- package/dist/auth/Auth.mjs +141 -0
- package/dist/auth/Auth.mjs.map +1 -0
- package/dist/auth/AuthConfigurationError.d.mts +10 -0
- package/dist/auth/AuthConfigurationError.mjs +14 -0
- package/dist/auth/AuthConfigurationError.mjs.map +1 -0
- package/dist/auth/AuthRequest.d.mts +21 -0
- package/dist/auth/AuthRequest.mjs +10 -0
- package/dist/auth/AuthRequest.mjs.map +1 -0
- package/dist/auth/AuthStrategy.d.mts +23 -0
- package/dist/auth/AuthStrategy.mjs +33 -0
- package/dist/auth/AuthStrategy.mjs.map +1 -0
- package/dist/auth/ConsumeDecision.d.mts +11 -0
- package/dist/auth/actions.d.mts +18 -0
- package/dist/auth/actions.mjs +70 -0
- package/dist/auth/actions.mjs.map +1 -0
- package/dist/auth/defaults.mjs +12 -0
- package/dist/auth/defaults.mjs.map +1 -0
- package/dist/auth/definition.d.mts +46 -0
- package/dist/auth/session.d.mts +27 -0
- package/dist/auth/session.mjs +56 -0
- package/dist/auth/session.mjs.map +1 -0
- package/dist/drizzle/D1BatchStatements.d.mts +11 -0
- package/dist/drizzle/D1BatchStatements.mjs +8 -0
- package/dist/drizzle/D1BatchStatements.mjs.map +1 -0
- package/dist/drizzle/PasswordPreparedPostconditions.mjs +12 -0
- package/dist/drizzle/PasswordPreparedPostconditions.mjs.map +1 -0
- package/dist/drizzle/SuppliedService.d.mts +10 -0
- package/dist/drizzle/d1-emails.d.mts +68 -0
- package/dist/drizzle/d1-emails.mjs +580 -0
- package/dist/drizzle/d1-emails.mjs.map +1 -0
- package/dist/drizzle/d1-generated-statement.mjs +79 -0
- package/dist/drizzle/d1-generated-statement.mjs.map +1 -0
- package/dist/drizzle/d1-identity.d.mts +33 -0
- package/dist/drizzle/d1-identity.mjs +120 -0
- package/dist/drizzle/d1-identity.mjs.map +1 -0
- package/dist/drizzle/d1-oauth.d.mts +316 -0
- package/dist/drizzle/d1-oauth.mjs +79 -0
- package/dist/drizzle/d1-oauth.mjs.map +1 -0
- package/dist/drizzle/d1-passkey.d.mts +52 -0
- package/dist/drizzle/d1-passkey.mjs +97 -0
- package/dist/drizzle/d1-passkey.mjs.map +1 -0
- package/dist/drizzle/d1-password-prepared.d.mts +27 -0
- package/dist/drizzle/d1-password-prepared.mjs +464 -0
- package/dist/drizzle/d1-password-prepared.mjs.map +1 -0
- package/dist/drizzle/d1-passwords.d.mts +96 -0
- package/dist/drizzle/d1-passwords.mjs +1008 -0
- package/dist/drizzle/d1-passwords.mjs.map +1 -0
- package/dist/drizzle/d1-phone.d.mts +29 -0
- package/dist/drizzle/d1-phone.mjs +33 -0
- package/dist/drizzle/d1-phone.mjs.map +1 -0
- package/dist/drizzle/d1-planning.d.mts +12 -0
- package/dist/drizzle/d1-planning.mjs +43 -0
- package/dist/drizzle/d1-planning.mjs.map +1 -0
- package/dist/drizzle/d1-proofs.d.mts +88 -0
- package/dist/drizzle/d1-proofs.mjs +833 -0
- package/dist/drizzle/d1-proofs.mjs.map +1 -0
- package/dist/drizzle/d1-sessions.d.mts +77 -0
- package/dist/drizzle/d1-sessions.mjs +970 -0
- package/dist/drizzle/d1-sessions.mjs.map +1 -0
- package/dist/drizzle/d1-totp.d.mts +27 -0
- package/dist/drizzle/d1-totp.mjs +28 -0
- package/dist/drizzle/d1-totp.mjs.map +1 -0
- package/dist/drizzle/email-model.d.mts +352 -0
- package/dist/drizzle/email-model.mjs +21 -0
- package/dist/drizzle/email-model.mjs.map +1 -0
- package/dist/drizzle/email-registration.d.mts +33 -0
- package/dist/drizzle/email-registration.mjs +238 -0
- package/dist/drizzle/email-registration.mjs.map +1 -0
- package/dist/drizzle/email-sql.d.mts +18 -0
- package/dist/drizzle/email-sql.mjs +473 -0
- package/dist/drizzle/email-sql.mjs.map +1 -0
- package/dist/drizzle/email-target.d.mts +28 -0
- package/dist/drizzle/email-target.mjs +75 -0
- package/dist/drizzle/email-target.mjs.map +1 -0
- package/dist/drizzle/model.d.mts +259 -0
- package/dist/drizzle/model.mjs +81 -0
- package/dist/drizzle/model.mjs.map +1 -0
- package/dist/drizzle/mysql-emails.d.mts +82 -0
- package/dist/drizzle/mysql-emails.mjs +38 -0
- package/dist/drizzle/mysql-emails.mjs.map +1 -0
- package/dist/drizzle/mysql-identity.d.mts +24 -0
- package/dist/drizzle/mysql-identity.mjs +95 -0
- package/dist/drizzle/mysql-identity.mjs.map +1 -0
- package/dist/drizzle/mysql-password-prepared.d.mts +32 -0
- package/dist/drizzle/mysql-password-prepared.mjs +16 -0
- package/dist/drizzle/mysql-password-prepared.mjs.map +1 -0
- package/dist/drizzle/mysql-passwords.d.mts +102 -0
- package/dist/drizzle/mysql-passwords.mjs +38 -0
- package/dist/drizzle/mysql-passwords.mjs.map +1 -0
- package/dist/drizzle/mysql-proofs.d.mts +83 -0
- package/dist/drizzle/mysql-proofs.mjs +23 -0
- package/dist/drizzle/mysql-proofs.mjs.map +1 -0
- package/dist/drizzle/mysql-sessions.d.mts +250 -0
- package/dist/drizzle/mysql-sessions.mjs +53 -0
- package/dist/drizzle/mysql-sessions.mjs.map +1 -0
- package/dist/drizzle/mysql.d.mts +73 -0
- package/dist/drizzle/mysql.mjs +221 -0
- package/dist/drizzle/mysql.mjs.map +1 -0
- package/dist/drizzle/oauth-accounts.mjs +361 -0
- package/dist/drizzle/oauth-accounts.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-access.mjs +210 -0
- package/dist/drizzle/oauth-connected-access.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-collection.mjs +202 -0
- package/dist/drizzle/oauth-connected-collection.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-custody.mjs +146 -0
- package/dist/drizzle/oauth-connected-custody.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-drivers.mjs +78 -0
- package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-flow.mjs +248 -0
- package/dist/drizzle/oauth-connected-flow.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-input.mjs +105 -0
- package/dist/drizzle/oauth-connected-input.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-maintenance.mjs +215 -0
- package/dist/drizzle/oauth-connected-maintenance.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-management.mjs +228 -0
- package/dist/drizzle/oauth-connected-management.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-model.d.mts +278 -0
- package/dist/drizzle/oauth-connected-model.mjs +22 -0
- package/dist/drizzle/oauth-connected-model.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-reference.d.mts +17 -0
- package/dist/drizzle/oauth-connected-reference.mjs +53 -0
- package/dist/drizzle/oauth-connected-reference.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-settlement.mjs +117 -0
- package/dist/drizzle/oauth-connected-settlement.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-state.d.mts +16 -0
- package/dist/drizzle/oauth-connected-state.mjs +422 -0
- package/dist/drizzle/oauth-connected-state.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-target.d.mts +114 -0
- package/dist/drizzle/oauth-connected-target.mjs +94 -0
- package/dist/drizzle/oauth-connected-target.mjs.map +1 -0
- package/dist/drizzle/oauth-drivers.mjs +53 -0
- package/dist/drizzle/oauth-drivers.mjs.map +1 -0
- package/dist/drizzle/oauth-flow.d.mts +7 -0
- package/dist/drizzle/oauth-flow.mjs +255 -0
- package/dist/drizzle/oauth-flow.mjs.map +1 -0
- package/dist/drizzle/oauth-input.mjs +130 -0
- package/dist/drizzle/oauth-input.mjs.map +1 -0
- package/dist/drizzle/oauth-model.d.mts +468 -0
- package/dist/drizzle/oauth-model.mjs +49 -0
- package/dist/drizzle/oauth-model.mjs.map +1 -0
- package/dist/drizzle/oauth-mysql.mjs +8 -0
- package/dist/drizzle/oauth-mysql.mjs.map +1 -0
- package/dist/drizzle/oauth-owner.d.mts +4 -0
- package/dist/drizzle/oauth-owner.mjs +10 -0
- package/dist/drizzle/oauth-owner.mjs.map +1 -0
- package/dist/drizzle/oauth-registration.d.mts +8 -0
- package/dist/drizzle/oauth-registration.mjs +375 -0
- package/dist/drizzle/oauth-registration.mjs.map +1 -0
- package/dist/drizzle/oauth-state.mjs +109 -0
- package/dist/drizzle/oauth-state.mjs.map +1 -0
- package/dist/drizzle/oauth-target.d.mts +125 -0
- package/dist/drizzle/oauth-target.mjs +252 -0
- package/dist/drizzle/oauth-target.mjs.map +1 -0
- package/dist/drizzle/passkey-admission.mjs +203 -0
- package/dist/drizzle/passkey-admission.mjs.map +1 -0
- package/dist/drizzle/passkey-credentials.mjs +239 -0
- package/dist/drizzle/passkey-credentials.mjs.map +1 -0
- package/dist/drizzle/passkey-drivers.mjs +34 -0
- package/dist/drizzle/passkey-drivers.mjs.map +1 -0
- package/dist/drizzle/passkey-enrollment.mjs +132 -0
- package/dist/drizzle/passkey-enrollment.mjs.map +1 -0
- package/dist/drizzle/passkey-flow.mjs +436 -0
- package/dist/drizzle/passkey-flow.mjs.map +1 -0
- package/dist/drizzle/passkey-management.mjs +225 -0
- package/dist/drizzle/passkey-management.mjs.map +1 -0
- package/dist/drizzle/passkey-model.d.mts +275 -0
- package/dist/drizzle/passkey-model.mjs +36 -0
- package/dist/drizzle/passkey-model.mjs.map +1 -0
- package/dist/drizzle/passkey-registration-ceremony-model.d.mts +50 -0
- package/dist/drizzle/passkey-registration-ceremony-model.mjs +18 -0
- package/dist/drizzle/passkey-registration-ceremony-model.mjs.map +1 -0
- package/dist/drizzle/passkey-registration-ceremony.mjs +124 -0
- package/dist/drizzle/passkey-registration-ceremony.mjs.map +1 -0
- package/dist/drizzle/passkey-registration-custody.mjs +51 -0
- package/dist/drizzle/passkey-registration-custody.mjs.map +1 -0
- package/dist/drizzle/passkey-registration-write.mjs +205 -0
- package/dist/drizzle/passkey-registration-write.mjs.map +1 -0
- package/dist/drizzle/passkey-state.d.mts +5 -0
- package/dist/drizzle/passkey-state.mjs +207 -0
- package/dist/drizzle/passkey-state.mjs.map +1 -0
- package/dist/drizzle/passkey-target.d.mts +16 -0
- package/dist/drizzle/passkey-target.mjs +174 -0
- package/dist/drizzle/passkey-target.mjs.map +1 -0
- package/dist/drizzle/passkey-write-drivers.mjs +33 -0
- package/dist/drizzle/passkey-write-drivers.mjs.map +1 -0
- package/dist/drizzle/passkey-write-model.d.mts +192 -0
- package/dist/drizzle/passkey-write-model.mjs +13 -0
- package/dist/drizzle/passkey-write-model.mjs.map +1 -0
- package/dist/drizzle/passkey-write-state.mjs +326 -0
- package/dist/drizzle/passkey-write-state.mjs.map +1 -0
- package/dist/drizzle/passkey-write-target.d.mts +14 -0
- package/dist/drizzle/passkey-write-target.mjs +185 -0
- package/dist/drizzle/passkey-write-target.mjs.map +1 -0
- package/dist/drizzle/password-model.d.mts +330 -0
- package/dist/drizzle/password-model.mjs +22 -0
- package/dist/drizzle/password-model.mjs.map +1 -0
- package/dist/drizzle/password-prepared-model.d.mts +93 -0
- package/dist/drizzle/password-prepared-model.mjs +11 -0
- package/dist/drizzle/password-prepared-model.mjs.map +1 -0
- package/dist/drizzle/password-prepared-sql.mjs +394 -0
- package/dist/drizzle/password-prepared-sql.mjs.map +1 -0
- package/dist/drizzle/password-prepared-state.mjs +107 -0
- package/dist/drizzle/password-prepared-state.mjs.map +1 -0
- package/dist/drizzle/password-prepared-target.d.mts +12 -0
- package/dist/drizzle/password-prepared-target.mjs +57 -0
- package/dist/drizzle/password-prepared-target.mjs.map +1 -0
- package/dist/drizzle/password-registration.d.mts +23 -0
- package/dist/drizzle/password-registration.mjs +136 -0
- package/dist/drizzle/password-registration.mjs.map +1 -0
- package/dist/drizzle/password-sql.d.mts +20 -0
- package/dist/drizzle/password-sql.mjs +702 -0
- package/dist/drizzle/password-sql.mjs.map +1 -0
- package/dist/drizzle/password-target.d.mts +25 -0
- package/dist/drizzle/password-target.mjs +63 -0
- package/dist/drizzle/password-target.mjs.map +1 -0
- package/dist/drizzle/pg-emails.d.mts +83 -0
- package/dist/drizzle/pg-emails.mjs +38 -0
- package/dist/drizzle/pg-emails.mjs.map +1 -0
- package/dist/drizzle/pg-password-prepared.d.mts +33 -0
- package/dist/drizzle/pg-password-prepared.mjs +16 -0
- package/dist/drizzle/pg-password-prepared.mjs.map +1 -0
- package/dist/drizzle/pg-passwords.d.mts +103 -0
- package/dist/drizzle/pg-passwords.mjs +38 -0
- package/dist/drizzle/pg-passwords.mjs.map +1 -0
- package/dist/drizzle/pg-proofs.d.mts +84 -0
- package/dist/drizzle/pg-proofs.mjs +22 -0
- package/dist/drizzle/pg-proofs.mjs.map +1 -0
- package/dist/drizzle/pg-sessions.d.mts +251 -0
- package/dist/drizzle/pg-sessions.mjs +53 -0
- package/dist/drizzle/pg-sessions.mjs.map +1 -0
- package/dist/drizzle/pg.d.mts +88 -0
- package/dist/drizzle/pg.mjs +294 -0
- package/dist/drizzle/pg.mjs.map +1 -0
- package/dist/drizzle/phone-model.d.mts +117 -0
- package/dist/drizzle/phone-model.mjs +39 -0
- package/dist/drizzle/phone-model.mjs.map +1 -0
- package/dist/drizzle/phone-state.mjs +426 -0
- package/dist/drizzle/phone-state.mjs.map +1 -0
- package/dist/drizzle/phone-target.d.mts +19 -0
- package/dist/drizzle/phone-target.mjs +171 -0
- package/dist/drizzle/phone-target.mjs.map +1 -0
- package/dist/drizzle/proof-model.d.mts +287 -0
- package/dist/drizzle/proof-model.mjs +17 -0
- package/dist/drizzle/proof-model.mjs.map +1 -0
- package/dist/drizzle/proof-sql.d.mts +16 -0
- package/dist/drizzle/proof-sql.mjs +618 -0
- package/dist/drizzle/proof-sql.mjs.map +1 -0
- package/dist/drizzle/proof-target.d.mts +17 -0
- package/dist/drizzle/proof-target.mjs +38 -0
- package/dist/drizzle/proof-target.mjs.map +1 -0
- package/dist/drizzle/session-model.d.mts +201 -0
- package/dist/drizzle/session-model.mjs +19 -0
- package/dist/drizzle/session-model.mjs.map +1 -0
- package/dist/drizzle/session-sql.mjs +732 -0
- package/dist/drizzle/session-sql.mjs.map +1 -0
- package/dist/drizzle/session-target.d.mts +37 -0
- package/dist/drizzle/session-target.mjs +47 -0
- package/dist/drizzle/session-target.mjs.map +1 -0
- package/dist/drizzle/sqlite-emails.mjs +45 -0
- package/dist/drizzle/sqlite-emails.mjs.map +1 -0
- package/dist/drizzle/sqlite-identity.mjs +92 -0
- package/dist/drizzle/sqlite-identity.mjs.map +1 -0
- package/dist/drizzle/sqlite-password-prepared.mjs +21 -0
- package/dist/drizzle/sqlite-password-prepared.mjs.map +1 -0
- package/dist/drizzle/sqlite-passwords.mjs +49 -0
- package/dist/drizzle/sqlite-passwords.mjs.map +1 -0
- package/dist/drizzle/sqlite-proofs.mjs +29 -0
- package/dist/drizzle/sqlite-proofs.mjs.map +1 -0
- package/dist/drizzle/sqlite-sessions.mjs +74 -0
- package/dist/drizzle/sqlite-sessions.mjs.map +1 -0
- package/dist/drizzle/sqlite.d.mts +81 -0
- package/dist/drizzle/sqlite.mjs +220 -0
- package/dist/drizzle/sqlite.mjs.map +1 -0
- package/dist/drizzle/standalone-guard.mjs +19 -0
- package/dist/drizzle/standalone-guard.mjs.map +1 -0
- package/dist/drizzle/step-up-model.d.mts +65 -0
- package/dist/drizzle/step-up-model.mjs +9 -0
- package/dist/drizzle/step-up-model.mjs.map +1 -0
- package/dist/drizzle/step-up-state.mjs +34 -0
- package/dist/drizzle/step-up-state.mjs.map +1 -0
- package/dist/drizzle/totp-model.d.mts +85 -0
- package/dist/drizzle/totp-model.mjs +13 -0
- package/dist/drizzle/totp-model.mjs.map +1 -0
- package/dist/drizzle/totp-state.d.mts +39 -0
- package/dist/drizzle/totp-state.mjs +288 -0
- package/dist/drizzle/totp-state.mjs.map +1 -0
- package/dist/drizzle/totp-target.d.mts +16 -0
- package/dist/drizzle/totp-target.mjs +83 -0
- package/dist/drizzle/totp-target.mjs.map +1 -0
- package/dist/drizzle/transaction-execution.d.mts +20 -0
- package/dist/drizzle/transaction-execution.mjs +111 -0
- package/dist/drizzle/transaction-execution.mjs.map +1 -0
- package/dist/drizzle/transaction-mysql.mjs +46 -0
- package/dist/drizzle/transaction-mysql.mjs.map +1 -0
- package/dist/drizzle/transaction-owner.d.mts +6 -0
- package/dist/drizzle/transaction-owner.mjs +252 -0
- package/dist/drizzle/transaction-owner.mjs.map +1 -0
- package/dist/email/EmailActionEvidence.d.mts +33 -0
- package/dist/email/EmailActionEvidence.mjs +15 -0
- package/dist/email/EmailActionEvidence.mjs.map +1 -0
- package/dist/email/EmailAddressPersistence.d.mts +63 -0
- package/dist/email/EmailAddressPersistence.mjs +19 -0
- package/dist/email/EmailAddressPersistence.mjs.map +1 -0
- package/dist/email/EmailIdentifierNotifier.d.mts +30 -0
- package/dist/email/EmailIdentifierNotifier.mjs +31 -0
- package/dist/email/EmailIdentifierNotifier.mjs.map +1 -0
- package/dist/email/EmailReturnTargets.d.mts +19 -0
- package/dist/email/EmailReturnTargets.mjs +29 -0
- package/dist/email/EmailReturnTargets.mjs.map +1 -0
- package/dist/email/EmailSignInTargets.d.mts +20 -0
- package/dist/email/EmailSignInTargets.mjs +12 -0
- package/dist/email/EmailSignInTargets.mjs.map +1 -0
- package/dist/email/addresses.d.mts +33 -0
- package/dist/email/addresses.mjs +404 -0
- package/dist/email/addresses.mjs.map +1 -0
- package/dist/email/definition.d.mts +10153 -0
- package/dist/email/definition.mjs +111 -0
- package/dist/email/definition.mjs.map +1 -0
- package/dist/email/errors.d.mts +15 -0
- package/dist/email/errors.mjs +11 -0
- package/dist/email/errors.mjs.map +1 -0
- package/dist/email/magicLink.d.mts +33 -0
- package/dist/email/magicLink.mjs +58 -0
- package/dist/email/magicLink.mjs.map +1 -0
- package/dist/email/models.d.mts +56 -0
- package/dist/email/models.mjs +31 -0
- package/dist/email/models.mjs.map +1 -0
- package/dist/email/module.d.mts +22296 -0
- package/dist/email/module.mjs +415 -0
- package/dist/email/module.mjs.map +1 -0
- package/dist/email/registration.d.mts +28 -0
- package/dist/email/registration.mjs +243 -0
- package/dist/email/registration.mjs.map +1 -0
- package/dist/email/snapshot.mjs +37 -0
- package/dist/email/snapshot.mjs.map +1 -0
- package/dist/hooks/LifecycleHooks.d.mts +34 -0
- package/dist/hooks/LifecycleHooks.mjs +74 -0
- package/dist/hooks/LifecycleHooks.mjs.map +1 -0
- package/dist/hooks/commit.d.mts +66 -0
- package/dist/hooks/commit.mjs +136 -0
- package/dist/hooks/commit.mjs.map +1 -0
- package/dist/hooks/models.d.mts +51 -0
- package/dist/hooks/models.mjs +87 -0
- package/dist/hooks/models.mjs.map +1 -0
- package/dist/hooks/plugins.d.mts +36 -0
- package/dist/hooks/plugins.mjs +60 -0
- package/dist/hooks/plugins.mjs.map +1 -0
- package/dist/hooks/transactions.d.mts +31 -0
- package/dist/hooks/transactions.mjs +38 -0
- package/dist/hooks/transactions.mjs.map +1 -0
- package/dist/http/auth-api.d.mts +9 -0
- package/dist/http/auth-api.mjs +13 -0
- package/dist/http/auth-api.mjs.map +1 -0
- package/dist/http/auth-contract.d.mts +84 -0
- package/dist/http/auth-contract.mjs +75 -0
- package/dist/http/auth-contract.mjs.map +1 -0
- package/dist/http/auth-http.d.mts +216 -0
- package/dist/http/auth-http.mjs +184 -0
- package/dist/http/auth-http.mjs.map +1 -0
- package/dist/http/endpoints/get-session.d.mts +8 -0
- package/dist/http/endpoints/get-session.mjs +12 -0
- package/dist/http/endpoints/get-session.mjs.map +1 -0
- package/dist/http/endpoints/password-sign-in.d.mts +8 -0
- package/dist/http/endpoints/password-sign-in.mjs +18 -0
- package/dist/http/endpoints/password-sign-in.mjs.map +1 -0
- package/dist/http/endpoints/request-email-otp.d.mts +8 -0
- package/dist/http/endpoints/request-email-otp.mjs +17 -0
- package/dist/http/endpoints/request-email-otp.mjs.map +1 -0
- package/dist/http/endpoints/set-password.d.mts +9 -0
- package/dist/http/endpoints/set-password.mjs +19 -0
- package/dist/http/endpoints/set-password.mjs.map +1 -0
- package/dist/http/endpoints/sign-out.d.mts +6 -0
- package/dist/http/endpoints/sign-out.mjs +7 -0
- package/dist/http/endpoints/sign-out.mjs.map +1 -0
- package/dist/http/endpoints/verify-email-otp.d.mts +9 -0
- package/dist/http/endpoints/verify-email-otp.mjs +18 -0
- package/dist/http/endpoints/verify-email-otp.mjs.map +1 -0
- package/dist/http/models.d.mts +49 -0
- package/dist/http/models.mjs +35 -0
- package/dist/http/models.mjs.map +1 -0
- package/dist/http/security.d.mts +91 -0
- package/dist/http/security.mjs +77 -0
- package/dist/http/security.mjs.map +1 -0
- package/dist/http/session-contract.d.mts +303 -0
- package/dist/http/session-contract.mjs +38 -0
- package/dist/http/session-contract.mjs.map +1 -0
- package/dist/http-operation/OperationHttpInvocation.d.mts +16 -0
- package/dist/http-operation/OperationHttpInvocation.mjs +11 -0
- package/dist/http-operation/OperationHttpInvocation.mjs.map +1 -0
- package/dist/http-operation/OperationHttpServerConfig.d.mts +18 -0
- package/dist/http-operation/OperationHttpServerConfig.mjs +72 -0
- package/dist/http-operation/OperationHttpServerConfig.mjs.map +1 -0
- package/dist/http-operation/auth-client.d.mts +75 -0
- package/dist/http-operation/auth-client.mjs +116 -0
- package/dist/http-operation/auth-client.mjs.map +1 -0
- package/dist/http-operation/client.d.mts +50 -0
- package/dist/http-operation/client.mjs +188 -0
- package/dist/http-operation/client.mjs.map +1 -0
- package/dist/http-operation/configuration-schema.mjs +19 -0
- package/dist/http-operation/configuration-schema.mjs.map +1 -0
- package/dist/http-operation/contract.d.mts +40 -0
- package/dist/http-operation/contract.mjs +37 -0
- package/dist/http-operation/contract.mjs.map +1 -0
- package/dist/http-operation/errors.d.mts +13 -0
- package/dist/http-operation/errors.mjs +31 -0
- package/dist/http-operation/errors.mjs.map +1 -0
- package/dist/http-operation/models.d.mts +32 -0
- package/dist/http-operation/models.mjs +14 -0
- package/dist/http-operation/models.mjs.map +1 -0
- package/dist/http-operation/private.mjs +35 -0
- package/dist/http-operation/private.mjs.map +1 -0
- package/dist/http-operation/security.mjs +58 -0
- package/dist/http-operation/security.mjs.map +1 -0
- package/dist/http-operation/server.d.mts +33 -0
- package/dist/http-operation/server.mjs +268 -0
- package/dist/http-operation/server.mjs.map +1 -0
- package/dist/identity/ExternalIdentityMutation.d.mts +15 -0
- package/dist/identity/ExternalIdentityMutation.mjs +11 -0
- package/dist/identity/ExternalIdentityMutation.mjs.map +1 -0
- package/dist/identity/IdentityMutation.d.mts +22 -0
- package/dist/identity/IdentityMutation.mjs +17 -0
- package/dist/identity/IdentityMutation.mjs.map +1 -0
- package/dist/identity/IdentityRepository.d.mts +20 -0
- package/dist/identity/IdentityRepository.mjs +11 -0
- package/dist/identity/IdentityRepository.mjs.map +1 -0
- package/dist/identity/SubjectLifecycle.d.mts +58 -0
- package/dist/identity/SubjectLifecycle.mjs +43 -0
- package/dist/identity/SubjectLifecycle.mjs.map +1 -0
- package/dist/identity/SubjectProvisioner.d.mts +37 -0
- package/dist/identity/SubjectProvisioner.mjs +20 -0
- package/dist/identity/SubjectProvisioner.mjs.map +1 -0
- package/dist/identity/codecs.d.mts +34 -0
- package/dist/identity/codecs.mjs +40 -0
- package/dist/identity/codecs.mjs.map +1 -0
- package/dist/identity/models.d.mts +62 -0
- package/dist/identity/models.mjs +51 -0
- package/dist/identity/models.mjs.map +1 -0
- package/dist/identity/operations.d.mts +118 -0
- package/dist/identity/operations.mjs +124 -0
- package/dist/identity/operations.mjs.map +1 -0
- package/dist/index.d.mts +23 -0
- package/dist/index.mjs +23 -0
- package/dist/internal/AuthStoreDecisions.d.mts +22 -0
- package/dist/internal/AuthStoreDecisions.mjs +8 -0
- package/dist/internal/AuthStoreDecisions.mjs.map +1 -0
- package/dist/internal/CurrentSession.d.mts +9 -0
- package/dist/internal/CurrentSession.mjs +8 -0
- package/dist/internal/CurrentSession.mjs.map +1 -0
- package/dist/internal/diagnostics.mjs +23 -0
- package/dist/internal/diagnostics.mjs.map +1 -0
- package/dist/oauth/GithubOAuthProvider.d.mts +43 -0
- package/dist/oauth/GithubOAuthProvider.mjs +66 -0
- package/dist/oauth/GithubOAuthProvider.mjs.map +1 -0
- package/dist/oauth/OAuth.d.mts +73 -0
- package/dist/oauth/OAuth.mjs +180 -0
- package/dist/oauth/OAuth.mjs.map +1 -0
- package/dist/oauth/OAuthAccountsPersistence.d.mts +109 -0
- package/dist/oauth/OAuthAccountsPersistence.mjs +12 -0
- package/dist/oauth/OAuthAccountsPersistence.mjs.map +1 -0
- package/dist/oauth/OAuthActionEvidence.d.mts +28 -0
- package/dist/oauth/OAuthActionEvidence.mjs +15 -0
- package/dist/oauth/OAuthActionEvidence.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedActionEvidence.d.mts +22 -0
- package/dist/oauth/OAuthConnectedActionEvidence.mjs +9 -0
- package/dist/oauth/OAuthConnectedActionEvidence.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedPersistence.d.mts +129 -0
- package/dist/oauth/OAuthConnectedPersistence.mjs +12 -0
- package/dist/oauth/OAuthConnectedPersistence.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedProtocol.d.mts +41 -0
- package/dist/oauth/OAuthConnectedProtocol.mjs +13 -0
- package/dist/oauth/OAuthConnectedProtocol.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedRevocations.d.mts +167 -0
- package/dist/oauth/OAuthConnectedRevocations.mjs +21 -0
- package/dist/oauth/OAuthConnectedRevocations.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedTokenProtector.d.mts +24 -0
- package/dist/oauth/OAuthConnectedTokenProtector.mjs +153 -0
- package/dist/oauth/OAuthConnectedTokenProtector.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedTransactionProtector.d.mts +23 -0
- package/dist/oauth/OAuthConnectedTransactionProtector.mjs +37 -0
- package/dist/oauth/OAuthConnectedTransactionProtector.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedUseAuthority.d.mts +22 -0
- package/dist/oauth/OAuthConnectedUseAuthority.mjs +10 -0
- package/dist/oauth/OAuthConnectedUseAuthority.mjs.map +1 -0
- package/dist/oauth/OAuthConnectionStore.d.mts +33 -0
- package/dist/oauth/OAuthConnectionStore.mjs +38 -0
- package/dist/oauth/OAuthConnectionStore.mjs.map +1 -0
- package/dist/oauth/OAuthLinkTransactionProtector.d.mts +25 -0
- package/dist/oauth/OAuthLinkTransactionProtector.mjs +39 -0
- package/dist/oauth/OAuthLinkTransactionProtector.mjs.map +1 -0
- package/dist/oauth/OAuthProtocol.d.mts +33 -0
- package/dist/oauth/OAuthProtocol.mjs +16 -0
- package/dist/oauth/OAuthProtocol.mjs.map +1 -0
- package/dist/oauth/OAuthProvider.d.mts +70 -0
- package/dist/oauth/OAuthProvider.mjs +39 -0
- package/dist/oauth/OAuthProvider.mjs.map +1 -0
- package/dist/oauth/OAuthProviders.d.mts +27 -0
- package/dist/oauth/OAuthProviders.mjs +33 -0
- package/dist/oauth/OAuthProviders.mjs.map +1 -0
- package/dist/oauth/OAuthRegistrationIntents.d.mts +87 -0
- package/dist/oauth/OAuthRegistrationIntents.mjs +19 -0
- package/dist/oauth/OAuthRegistrationIntents.mjs.map +1 -0
- package/dist/oauth/OAuthReturnTargets.d.mts +15 -0
- package/dist/oauth/OAuthReturnTargets.mjs +24 -0
- package/dist/oauth/OAuthReturnTargets.mjs.map +1 -0
- package/dist/oauth/OAuthSignInPersistence.d.mts +68 -0
- package/dist/oauth/OAuthSignInPersistence.mjs +12 -0
- package/dist/oauth/OAuthSignInPersistence.mjs.map +1 -0
- package/dist/oauth/OAuthStateDecisions.d.mts +14 -0
- package/dist/oauth/OAuthStateDecisions.mjs +8 -0
- package/dist/oauth/OAuthStateDecisions.mjs.map +1 -0
- package/dist/oauth/OAuthStateStore.d.mts +35 -0
- package/dist/oauth/OAuthStateStore.mjs +64 -0
- package/dist/oauth/OAuthStateStore.mjs.map +1 -0
- package/dist/oauth/OAuthTransactionProtector.d.mts +26 -0
- package/dist/oauth/OAuthTransactionProtector.mjs +78 -0
- package/dist/oauth/OAuthTransactionProtector.mjs.map +1 -0
- package/dist/oauth/accounts.d.mts +29 -0
- package/dist/oauth/accounts.mjs +515 -0
- package/dist/oauth/accounts.mjs.map +1 -0
- package/dist/oauth/accountsModels.d.mts +463 -0
- package/dist/oauth/accountsModels.mjs +155 -0
- package/dist/oauth/accountsModels.mjs.map +1 -0
- package/dist/oauth/connected.d.mts +442 -0
- package/dist/oauth/connected.mjs +526 -0
- package/dist/oauth/connected.mjs.map +1 -0
- package/dist/oauth/connectedAccess.d.mts +20 -0
- package/dist/oauth/connectedAccess.mjs +279 -0
- package/dist/oauth/connectedAccess.mjs.map +1 -0
- package/dist/oauth/connectedMaintenance.d.mts +19 -0
- package/dist/oauth/connectedMaintenance.mjs +133 -0
- package/dist/oauth/connectedMaintenance.mjs.map +1 -0
- package/dist/oauth/connectedModels.d.mts +2023 -0
- package/dist/oauth/connectedModels.mjs +375 -0
- package/dist/oauth/connectedModels.mjs.map +1 -0
- package/dist/oauth/definition.d.mts +4396 -0
- package/dist/oauth/definition.mjs +120 -0
- package/dist/oauth/definition.mjs.map +1 -0
- package/dist/oauth/errors.d.mts +49 -0
- package/dist/oauth/errors.mjs +42 -0
- package/dist/oauth/errors.mjs.map +1 -0
- package/dist/oauth/github/identity.d.mts +8 -0
- package/dist/oauth/github/identity.mjs +24 -0
- package/dist/oauth/github/identity.mjs.map +1 -0
- package/dist/oauth/github/models.d.mts +34 -0
- package/dist/oauth/github/protocol.d.mts +54 -0
- package/dist/oauth/github/protocol.mjs +204 -0
- package/dist/oauth/github/protocol.mjs.map +1 -0
- package/dist/oauth/openid-client/ProviderRevocation.d.mts +4 -0
- package/dist/oauth/openid-client/ProviderRevocation.mjs +11 -0
- package/dist/oauth/openid-client/ProviderRevocation.mjs.map +1 -0
- package/dist/oauth/openid-client/compatibility.d.mts +1 -0
- package/dist/oauth/openid-client/compatibility.mjs +6 -0
- package/dist/oauth/openid-client/compatibility.mjs.map +1 -0
- package/dist/oauth/openid-client/configuration.mjs +305 -0
- package/dist/oauth/openid-client/configuration.mjs.map +1 -0
- package/dist/oauth/openid-client/connected/configuration.mjs +338 -0
- package/dist/oauth/openid-client/connected/configuration.mjs.map +1 -0
- package/dist/oauth/openid-client/connected/models.d.mts +42 -0
- package/dist/oauth/openid-client/connected/protocol.d.mts +16 -0
- package/dist/oauth/openid-client/connected/protocol.mjs +402 -0
- package/dist/oauth/openid-client/connected/protocol.mjs.map +1 -0
- package/dist/oauth/openid-client/models.d.mts +67 -0
- package/dist/oauth/openid-client/models.mjs +16 -0
- package/dist/oauth/openid-client/models.mjs.map +1 -0
- package/dist/oauth/openid-client/protocol.d.mts +27 -0
- package/dist/oauth/openid-client/protocol.mjs +218 -0
- package/dist/oauth/openid-client/protocol.mjs.map +1 -0
- package/dist/oauth/openid-client/transport.mjs +59 -0
- package/dist/oauth/openid-client/transport.mjs.map +1 -0
- package/dist/oauth/policy.d.mts +18 -0
- package/dist/oauth/policy.mjs +16 -0
- package/dist/oauth/policy.mjs.map +1 -0
- package/dist/oauth/registration.d.mts +24 -0
- package/dist/oauth/registration.mjs +177 -0
- package/dist/oauth/registration.mjs.map +1 -0
- package/dist/oauth/registrationModels.d.mts +152 -0
- package/dist/oauth/registrationModels.mjs +93 -0
- package/dist/oauth/registrationModels.mjs.map +1 -0
- package/dist/oauth/registrationSecrets.mjs +70 -0
- package/dist/oauth/registrationSecrets.mjs.map +1 -0
- package/dist/oauth/schema.d.mts +86 -0
- package/dist/oauth/schema.mjs +81 -0
- package/dist/oauth/schema.mjs.map +1 -0
- package/dist/oauth/signInErrors.d.mts +17 -0
- package/dist/oauth/signInErrors.mjs +16 -0
- package/dist/oauth/signInErrors.mjs.map +1 -0
- package/dist/oauth/signInModels.d.mts +343 -0
- package/dist/oauth/signInModels.mjs +181 -0
- package/dist/oauth/signInModels.mjs.map +1 -0
- package/dist/oauth/signInModule.d.mts +1546 -0
- package/dist/oauth/signInModule.mjs +430 -0
- package/dist/oauth/signInModule.mjs.map +1 -0
- package/dist/oauth/signInSnapshot.mjs +29 -0
- package/dist/oauth/signInSnapshot.mjs.map +1 -0
- package/dist/oauth/transactionEncryption.d.mts +14 -0
- package/dist/oauth/transactionEncryption.mjs +129 -0
- package/dist/oauth/transactionEncryption.mjs.map +1 -0
- package/dist/operations/RequestBindingConfig.d.mts +11 -0
- package/dist/operations/RequestBindingConfig.mjs +10 -0
- package/dist/operations/RequestBindingConfig.mjs.map +1 -0
- package/dist/operations/actions.d.mts +947 -0
- package/dist/operations/actions.mjs +148 -0
- package/dist/operations/actions.mjs.map +1 -0
- package/dist/operations/context.d.mts +63 -0
- package/dist/operations/context.mjs +55 -0
- package/dist/operations/context.mjs.map +1 -0
- package/dist/operations/credentials.d.mts +39 -0
- package/dist/operations/credentials.mjs +60 -0
- package/dist/operations/credentials.mjs.map +1 -0
- package/dist/operations/errors.d.mts +24 -0
- package/dist/operations/errors.mjs +31 -0
- package/dist/operations/errors.mjs.map +1 -0
- package/dist/operations/operation.d.mts +124 -0
- package/dist/operations/operation.mjs +220 -0
- package/dist/operations/operation.mjs.map +1 -0
- package/dist/operations/requestBinding.d.mts +46 -0
- package/dist/operations/requestBinding.mjs +130 -0
- package/dist/operations/requestBinding.mjs.map +1 -0
- package/dist/operations/requestBindingModels.d.mts +13 -0
- package/dist/operations/requestBindingModels.mjs +12 -0
- package/dist/operations/requestBindingModels.mjs.map +1 -0
- package/dist/operations/reveals.d.mts +28 -0
- package/dist/operations/reveals.mjs +88 -0
- package/dist/operations/reveals.mjs.map +1 -0
- package/dist/passkey/PasskeyActionEvidence.d.mts +22 -0
- package/dist/passkey/PasskeyActionEvidence.mjs +9 -0
- package/dist/passkey/PasskeyActionEvidence.mjs.map +1 -0
- package/dist/passkey/PasskeyCredentials.d.mts +16 -0
- package/dist/passkey/PasskeyCredentials.mjs +9 -0
- package/dist/passkey/PasskeyCredentials.mjs.map +1 -0
- package/dist/passkey/PasskeyEnrollmentContext.d.mts +22 -0
- package/dist/passkey/PasskeyEnrollmentContext.mjs +9 -0
- package/dist/passkey/PasskeyEnrollmentContext.mjs.map +1 -0
- package/dist/passkey/PasskeyManagementPersistence.d.mts +106 -0
- package/dist/passkey/PasskeyManagementPersistence.mjs +9 -0
- package/dist/passkey/PasskeyManagementPersistence.mjs.map +1 -0
- package/dist/passkey/PasskeyPersistence.d.mts +63 -0
- package/dist/passkey/PasskeyPersistence.mjs +10 -0
- package/dist/passkey/PasskeyPersistence.mjs.map +1 -0
- package/dist/passkey/PasskeyProtocol.d.mts +38 -0
- package/dist/passkey/PasskeyProtocol.mjs +11 -0
- package/dist/passkey/PasskeyProtocol.mjs.map +1 -0
- package/dist/passkey/actions.d.mts +50 -0
- package/dist/passkey/actions.mjs +376 -0
- package/dist/passkey/actions.mjs.map +1 -0
- package/dist/passkey/browser/PasskeyBrowser.d.mts +18 -0
- package/dist/passkey/browser/PasskeyBrowser.mjs +9 -0
- package/dist/passkey/browser/PasskeyBrowser.mjs.map +1 -0
- package/dist/passkey/browser/models.d.mts +38 -0
- package/dist/passkey/browser/models.mjs +41 -0
- package/dist/passkey/browser/models.mjs.map +1 -0
- package/dist/passkey/browser/simplewebauthn.d.mts +17 -0
- package/dist/passkey/browser/simplewebauthn.mjs +411 -0
- package/dist/passkey/browser/simplewebauthn.mjs.map +1 -0
- package/dist/passkey/definition.d.mts +5626 -0
- package/dist/passkey/definition.mjs +114 -0
- package/dist/passkey/definition.mjs.map +1 -0
- package/dist/passkey/errors.d.mts +20 -0
- package/dist/passkey/errors.mjs +20 -0
- package/dist/passkey/errors.mjs.map +1 -0
- package/dist/passkey/management.mjs +276 -0
- package/dist/passkey/management.mjs.map +1 -0
- package/dist/passkey/models.d.mts +1245 -0
- package/dist/passkey/models.mjs +301 -0
- package/dist/passkey/models.mjs.map +1 -0
- package/dist/passkey/module.d.mts +2132 -0
- package/dist/passkey/module.mjs +174 -0
- package/dist/passkey/module.mjs.map +1 -0
- package/dist/passkey/pending.mjs +99 -0
- package/dist/passkey/pending.mjs.map +1 -0
- package/dist/passkey/policy.d.mts +48 -0
- package/dist/passkey/policy.mjs +77 -0
- package/dist/passkey/policy.mjs.map +1 -0
- package/dist/passkey/registration.mjs +107 -0
- package/dist/passkey/registration.mjs.map +1 -0
- package/dist/passkey/simplewebauthn/configuration.mjs +45 -0
- package/dist/passkey/simplewebauthn/configuration.mjs.map +1 -0
- package/dist/passkey/simplewebauthn/models.d.mts +21 -0
- package/dist/passkey/simplewebauthn/models.mjs +8 -0
- package/dist/passkey/simplewebauthn/models.mjs.map +1 -0
- package/dist/passkey/simplewebauthn/protocol.d.mts +62 -0
- package/dist/passkey/simplewebauthn/protocol.mjs +402 -0
- package/dist/passkey/simplewebauthn/protocol.mjs.map +1 -0
- package/dist/passkey/snapshot.mjs +31 -0
- package/dist/passkey/snapshot.mjs.map +1 -0
- package/dist/passkey/stepUp.mjs +101 -0
- package/dist/passkey/stepUp.mjs.map +1 -0
- package/dist/password/CompromisedPasswords.d.mts +26 -0
- package/dist/password/CompromisedPasswords.mjs +23 -0
- package/dist/password/CompromisedPasswords.mjs.map +1 -0
- package/dist/password/NewPasswordCheck.d.mts +21 -0
- package/dist/password/NewPasswordCheck.mjs +39 -0
- package/dist/password/NewPasswordCheck.mjs.map +1 -0
- package/dist/password/PasswordHashing.d.mts +24 -0
- package/dist/password/PasswordHashing.mjs +96 -0
- package/dist/password/PasswordHashing.mjs.map +1 -0
- package/dist/password/PasswordKdfAdmission.d.mts +19 -0
- package/dist/password/PasswordKdfAdmission.mjs +25 -0
- package/dist/password/PasswordKdfAdmission.mjs.map +1 -0
- package/dist/password/configuration.d.mts +43 -0
- package/dist/password/configuration.mjs +64 -0
- package/dist/password/configuration.mjs.map +1 -0
- package/dist/password/defaults.mjs +13 -0
- package/dist/password/defaults.mjs.map +1 -0
- package/dist/password/encoding.mjs +64 -0
- package/dist/password/encoding.mjs.map +1 -0
- package/dist/password/errors.d.mts +28 -0
- package/dist/password/errors.mjs +25 -0
- package/dist/password/errors.mjs.map +1 -0
- package/dist/password/methods/PasswordActionEvidence.d.mts +38 -0
- package/dist/password/methods/PasswordActionEvidence.mjs +22 -0
- package/dist/password/methods/PasswordActionEvidence.mjs.map +1 -0
- package/dist/password/methods/PasswordPersistence.d.mts +102 -0
- package/dist/password/methods/PasswordPersistence.mjs +13 -0
- package/dist/password/methods/PasswordPersistence.mjs.map +1 -0
- package/dist/password/methods/PasswordPreparedPersistence.d.mts +111 -0
- package/dist/password/methods/contracts.d.mts +43 -0
- package/dist/password/methods/contracts.mjs +33 -0
- package/dist/password/methods/contracts.mjs.map +1 -0
- package/dist/password/methods/definition.d.mts +3813 -0
- package/dist/password/methods/definition.mjs +56 -0
- package/dist/password/methods/definition.mjs.map +1 -0
- package/dist/password/methods/errors.d.mts +15 -0
- package/dist/password/methods/errors.mjs +11 -0
- package/dist/password/methods/errors.mjs.map +1 -0
- package/dist/password/methods/models.d.mts +70 -0
- package/dist/password/methods/models.mjs +44 -0
- package/dist/password/methods/models.mjs.map +1 -0
- package/dist/password/methods/module.d.mts +3567 -0
- package/dist/password/methods/module.mjs +553 -0
- package/dist/password/methods/module.mjs.map +1 -0
- package/dist/password/methods/policy.d.mts +84 -0
- package/dist/password/methods/policy.mjs +80 -0
- package/dist/password/methods/policy.mjs.map +1 -0
- package/dist/password/methods/preparation.mjs +54 -0
- package/dist/password/methods/preparation.mjs.map +1 -0
- package/dist/password/methods/prepared.d.mts +53 -0
- package/dist/password/methods/prepared.mjs +610 -0
- package/dist/password/methods/prepared.mjs.map +1 -0
- package/dist/password/methods/preparedModels.d.mts +1295 -0
- package/dist/password/methods/preparedModels.mjs +278 -0
- package/dist/password/methods/preparedModels.mjs.map +1 -0
- package/dist/password/methods/signIn.d.mts +180 -0
- package/dist/password/methods/signIn.mjs +73 -0
- package/dist/password/methods/signIn.mjs.map +1 -0
- package/dist/password/methods/snapshot.mjs +38 -0
- package/dist/password/methods/snapshot.mjs.map +1 -0
- package/dist/password/methods/verification.mjs +138 -0
- package/dist/password/methods/verification.mjs.map +1 -0
- package/dist/password/models.d.mts +13 -0
- package/dist/password/models.mjs +12 -0
- package/dist/password/models.mjs.map +1 -0
- package/dist/password/policy.d.mts +33 -0
- package/dist/password/policy.mjs +37 -0
- package/dist/password/policy.mjs.map +1 -0
- package/dist/phone/PhoneActionEvidence.d.mts +23 -0
- package/dist/phone/PhoneActionEvidence.mjs +10 -0
- package/dist/phone/PhoneActionEvidence.mjs.map +1 -0
- package/dist/phone/PhoneAdmission.d.mts +29 -0
- package/dist/phone/PhoneAdmission.mjs +10 -0
- package/dist/phone/PhoneAdmission.mjs.map +1 -0
- package/dist/phone/PhoneDeliveryEligibility.d.mts +11 -0
- package/dist/phone/PhoneDeliveryEligibility.mjs +8 -0
- package/dist/phone/PhoneDeliveryEligibility.mjs.map +1 -0
- package/dist/phone/PhonePersistence.d.mts +33 -0
- package/dist/phone/PhonePersistence.mjs +10 -0
- package/dist/phone/PhonePersistence.mjs.map +1 -0
- package/dist/phone/PhoneRequestContext.d.mts +10 -0
- package/dist/phone/PhoneRequestContext.mjs +8 -0
- package/dist/phone/PhoneRequestContext.mjs.map +1 -0
- package/dist/phone/PhoneSignInTargets.d.mts +19 -0
- package/dist/phone/PhoneSignInTargets.mjs +13 -0
- package/dist/phone/PhoneSignInTargets.mjs.map +1 -0
- package/dist/phone/definition.d.mts +7190 -0
- package/dist/phone/definition.mjs +28 -0
- package/dist/phone/definition.mjs.map +1 -0
- package/dist/phone/failure.mjs +23 -0
- package/dist/phone/failure.mjs.map +1 -0
- package/dist/phone/lifecycle.mjs +427 -0
- package/dist/phone/lifecycle.mjs.map +1 -0
- package/dist/phone/lifecycleModels.d.mts +164 -0
- package/dist/phone/lifecycleModels.mjs +91 -0
- package/dist/phone/lifecycleModels.mjs.map +1 -0
- package/dist/phone/models.d.mts +41 -0
- package/dist/phone/models.mjs +29 -0
- package/dist/phone/models.mjs.map +1 -0
- package/dist/phone/module.d.mts +6027 -0
- package/dist/phone/module.mjs +293 -0
- package/dist/phone/module.mjs.map +1 -0
- package/dist/proofs/EmailProofDelivery.d.mts +13 -0
- package/dist/proofs/EmailProofDelivery.mjs +11 -0
- package/dist/proofs/EmailProofDelivery.mjs.map +1 -0
- package/dist/proofs/HostIngressLimiter.d.mts +20 -0
- package/dist/proofs/HostIngressLimiter.mjs +13 -0
- package/dist/proofs/HostIngressLimiter.mjs.map +1 -0
- package/dist/proofs/ProofPersistence.d.mts +140 -0
- package/dist/proofs/ProofPersistence.mjs +13 -0
- package/dist/proofs/ProofPersistence.mjs.map +1 -0
- package/dist/proofs/SmsProofDelivery.d.mts +13 -0
- package/dist/proofs/SmsProofDelivery.mjs +11 -0
- package/dist/proofs/SmsProofDelivery.mjs.map +1 -0
- package/dist/proofs/abuse.d.mts +15 -0
- package/dist/proofs/abuse.mjs +12 -0
- package/dist/proofs/abuse.mjs.map +1 -0
- package/dist/proofs/completion.d.mts +22 -0
- package/dist/proofs/crypto.d.mts +196 -0
- package/dist/proofs/crypto.mjs +189 -0
- package/dist/proofs/crypto.mjs.map +1 -0
- package/dist/proofs/definition.d.mts +335 -0
- package/dist/proofs/definition.mjs +10 -0
- package/dist/proofs/definition.mjs.map +1 -0
- package/dist/proofs/delivery.d.mts +30 -0
- package/dist/proofs/delivery.mjs +26 -0
- package/dist/proofs/delivery.mjs.map +1 -0
- package/dist/proofs/dispatch.d.mts +20 -0
- package/dist/proofs/dispatch.mjs +54 -0
- package/dist/proofs/dispatch.mjs.map +1 -0
- package/dist/proofs/errors.d.mts +21 -0
- package/dist/proofs/errors.mjs +25 -0
- package/dist/proofs/errors.mjs.map +1 -0
- package/dist/proofs/models.d.mts +141 -0
- package/dist/proofs/models.mjs +93 -0
- package/dist/proofs/models.mjs.map +1 -0
- package/dist/proofs/module.d.mts +344 -0
- package/dist/proofs/module.mjs +350 -0
- package/dist/proofs/module.mjs.map +1 -0
- package/dist/proofs/policy.d.mts +152 -0
- package/dist/proofs/policy.mjs +51 -0
- package/dist/proofs/policy.mjs.map +1 -0
- package/dist/sessions/AuthenticationAuthority.d.mts +31 -0
- package/dist/sessions/AuthenticationAuthority.mjs +8 -0
- package/dist/sessions/AuthenticationAuthority.mjs.map +1 -0
- package/dist/sessions/PendingAuthentication.d.mts +108 -0
- package/dist/sessions/PendingAuthentication.mjs +40 -0
- package/dist/sessions/PendingAuthentication.mjs.map +1 -0
- package/dist/sessions/SessionStepUpPersistence.d.mts +152 -0
- package/dist/sessions/SessionStepUpPersistence.mjs +63 -0
- package/dist/sessions/SessionStepUpPersistence.mjs.map +1 -0
- package/dist/sessions/assurance.d.mts +163 -0
- package/dist/sessions/assurance.mjs +95 -0
- package/dist/sessions/assurance.mjs.map +1 -0
- package/dist/sessions/commit.d.mts +13 -0
- package/dist/sessions/configuration.d.mts +46 -0
- package/dist/sessions/configuration.mjs +55 -0
- package/dist/sessions/configuration.mjs.map +1 -0
- package/dist/sessions/contract.d.mts +663 -0
- package/dist/sessions/contract.mjs +174 -0
- package/dist/sessions/contract.mjs.map +1 -0
- package/dist/sessions/crypto.d.mts +24 -0
- package/dist/sessions/crypto.mjs +106 -0
- package/dist/sessions/crypto.mjs.map +1 -0
- package/dist/sessions/definition.d.mts +11 -0
- package/dist/sessions/definition.mjs +10 -0
- package/dist/sessions/definition.mjs.map +1 -0
- package/dist/sessions/errors.d.mts +35 -0
- package/dist/sessions/errors.mjs +34 -0
- package/dist/sessions/errors.mjs.map +1 -0
- package/dist/sessions/invalidation.d.mts +23 -0
- package/dist/sessions/invalidation.mjs +33 -0
- package/dist/sessions/invalidation.mjs.map +1 -0
- package/dist/sessions/models.d.mts +143 -0
- package/dist/sessions/models.mjs +94 -0
- package/dist/sessions/models.mjs.map +1 -0
- package/dist/sessions/module.d.mts +1091 -0
- package/dist/sessions/module.mjs +943 -0
- package/dist/sessions/module.mjs.map +1 -0
- package/dist/sessions/persistence.d.mts +93 -0
- package/dist/sessions/policy.d.mts +80 -0
- package/dist/sessions/policy.mjs +66 -0
- package/dist/sessions/policy.mjs.map +1 -0
- package/dist/testing/conformance/AuthStore.d.mts +11 -0
- package/dist/testing/conformance/AuthStore.mjs +173 -0
- package/dist/testing/conformance/AuthStore.mjs.map +1 -0
- package/dist/testing/conformance/OAuthConnectionStore.d.mts +11 -0
- package/dist/testing/conformance/OAuthConnectionStore.mjs +102 -0
- package/dist/testing/conformance/OAuthConnectionStore.mjs.map +1 -0
- package/dist/testing/conformance/OAuthStateStore.d.mts +11 -0
- package/dist/testing/conformance/OAuthStateStore.mjs +45 -0
- package/dist/testing/conformance/OAuthStateStore.mjs.map +1 -0
- package/dist/testing/conformance/PasswordCredentialStore.d.mts +20 -0
- package/dist/testing/conformance/PasswordCredentialStore.mjs +103 -0
- package/dist/testing/conformance/PasswordCredentialStore.mjs.map +1 -0
- package/dist/testing/conformance/support.mjs +17 -0
- package/dist/testing/conformance/support.mjs.map +1 -0
- package/dist/testing/crypto.d.mts +11 -0
- package/dist/testing/crypto.mjs +41 -0
- package/dist/testing/crypto.mjs.map +1 -0
- package/dist/testing/keyring.d.mts +9 -0
- package/dist/testing/keyring.mjs +17 -0
- package/dist/testing/keyring.mjs.map +1 -0
- package/dist/totp/TotpActionEvidence.d.mts +18 -0
- package/dist/totp/TotpActionEvidence.mjs +8 -0
- package/dist/totp/TotpActionEvidence.mjs.map +1 -0
- package/dist/totp/TotpPersistence.d.mts +19 -0
- package/dist/totp/TotpPersistence.mjs +8 -0
- package/dist/totp/TotpPersistence.mjs.map +1 -0
- package/dist/totp/TotpSecretKeys.d.mts +15 -0
- package/dist/totp/TotpSecretKeys.mjs +8 -0
- package/dist/totp/TotpSecretKeys.mjs.map +1 -0
- package/dist/totp/crypto.mjs +96 -0
- package/dist/totp/crypto.mjs.map +1 -0
- package/dist/totp/definition.d.mts +764 -0
- package/dist/totp/definition.mjs +24 -0
- package/dist/totp/definition.mjs.map +1 -0
- package/dist/totp/errors.d.mts +16 -0
- package/dist/totp/errors.mjs +18 -0
- package/dist/totp/errors.mjs.map +1 -0
- package/dist/totp/models.d.mts +377 -0
- package/dist/totp/models.mjs +137 -0
- package/dist/totp/models.mjs.map +1 -0
- package/dist/totp/module.d.mts +737 -0
- package/dist/totp/module.mjs +355 -0
- package/dist/totp/module.mjs.map +1 -0
- package/package.json +1 -0
- package/src/Atom.ts +4 -0
- package/src/Auth.ts +16 -0
- package/src/AuthContract.ts +17 -0
- package/src/AuthSession.ts +298 -0
- package/src/AuthStore.ts +367 -0
- package/src/AuthTokenCodec.ts +226 -0
- package/src/Client.ts +9 -0
- package/src/Cloudflare.ts +345 -0
- package/src/Drizzle.ts +378 -0
- package/src/DrizzleD1.ts +136 -0
- package/src/DrizzleLibsql.ts +288 -0
- package/src/DrizzleMysql2.ts +184 -0
- package/src/DrizzlePglite.ts +160 -0
- package/src/DrizzlePostgres.ts +160 -0
- package/src/DrizzleSqliteBun.ts +244 -0
- package/src/DrizzleSqliteDo.ts +473 -0
- package/src/DrizzleSqliteNode.ts +245 -0
- package/src/DrizzleSqliteWasm.ts +245 -0
- package/src/Email.ts +55 -0
- package/src/EmailOtp.ts +250 -0
- package/src/EmailOtpSender.ts +28 -0
- package/src/Errors.ts +103 -0
- package/src/GitHub.ts +16 -0
- package/src/Hooks.ts +50 -0
- package/src/Http.ts +47 -0
- package/src/HttpServer.ts +742 -0
- package/src/Identity.ts +53 -0
- package/src/IdentityResolver.ts +18 -0
- package/src/OAuth.ts +242 -0
- package/src/OpenIdClient.ts +13 -0
- package/src/OpenIdClientConnected.ts +18 -0
- package/src/OperationHttp.ts +14 -0
- package/src/OperationHttpClient.ts +6 -0
- package/src/OperationHttpServer.ts +15 -0
- package/src/Operations.ts +69 -0
- package/src/Passkey.ts +81 -0
- package/src/PasskeyBrowser.ts +19 -0
- package/src/PasskeyContract.ts +212 -0
- package/src/PasskeyPassword.ts +319 -0
- package/src/PasskeySimpleWebAuthn.ts +6 -0
- package/src/Password.ts +113 -0
- package/src/PasswordAuth.ts +197 -0
- package/src/PasswordCredentialStore.ts +140 -0
- package/src/PasswordHasher.ts +147 -0
- package/src/PhoneOtp.ts +32 -0
- package/src/Policy.ts +95 -0
- package/src/Proofs.ts +71 -0
- package/src/Rpc.ts +15 -0
- package/src/Schema.ts +235 -0
- package/src/SessionContract.ts +2 -0
- package/src/Sessions.ts +105 -0
- package/src/Testing.ts +24 -0
- package/src/Totp.ts +28 -0
- package/src/TotpContract.ts +147 -0
- package/src/WebCrypto.ts +61 -0
- package/src/Workflows.ts +12 -0
- package/src/atom/AuthAtomLifetime.ts +87 -0
- package/src/atom/AuthAtomWorkflow.ts +27 -0
- package/src/atom/client.ts +364 -0
- package/src/atom/operations.ts +183 -0
- package/src/atom/scoped-runtime.ts +249 -0
- package/src/auth/Auth.ts +482 -0
- package/src/auth/AuthConfigurationError.ts +9 -0
- package/src/auth/AuthRequest.ts +21 -0
- package/src/auth/AuthStrategy.ts +116 -0
- package/src/auth/ConsumeDecision.ts +4 -0
- package/src/auth/actions.ts +220 -0
- package/src/auth/defaults.ts +23 -0
- package/src/auth/definition.ts +88 -0
- package/src/auth/session.ts +146 -0
- package/src/drizzle/D1BatchStatements.ts +10 -0
- package/src/drizzle/PasswordPreparedPostconditions.ts +30 -0
- package/src/drizzle/SuppliedService.ts +10 -0
- package/src/drizzle/d1-emails.ts +1808 -0
- package/src/drizzle/d1-generated-statement.ts +129 -0
- package/src/drizzle/d1-identity.ts +374 -0
- package/src/drizzle/d1-oauth.ts +338 -0
- package/src/drizzle/d1-passkey.ts +371 -0
- package/src/drizzle/d1-password-prepared.ts +1273 -0
- package/src/drizzle/d1-passwords.ts +2661 -0
- package/src/drizzle/d1-phone.ts +94 -0
- package/src/drizzle/d1-planning.ts +105 -0
- package/src/drizzle/d1-proofs.ts +2305 -0
- package/src/drizzle/d1-sessions.ts +2867 -0
- package/src/drizzle/d1-totp.ts +79 -0
- package/src/drizzle/email-model.ts +512 -0
- package/src/drizzle/email-registration.ts +696 -0
- package/src/drizzle/email-sql.ts +1468 -0
- package/src/drizzle/email-target.ts +243 -0
- package/src/drizzle/model.ts +492 -0
- package/src/drizzle/mysql-emails.ts +323 -0
- package/src/drizzle/mysql-identity.ts +323 -0
- package/src/drizzle/mysql-password-prepared.ts +206 -0
- package/src/drizzle/mysql-passwords.ts +341 -0
- package/src/drizzle/mysql-proofs.ts +183 -0
- package/src/drizzle/mysql-sessions.ts +742 -0
- package/src/drizzle/mysql.ts +686 -0
- package/src/drizzle/oauth-accounts.ts +801 -0
- package/src/drizzle/oauth-connected-access.ts +354 -0
- package/src/drizzle/oauth-connected-collection.ts +324 -0
- package/src/drizzle/oauth-connected-custody.ts +277 -0
- package/src/drizzle/oauth-connected-drivers.ts +463 -0
- package/src/drizzle/oauth-connected-flow.ts +439 -0
- package/src/drizzle/oauth-connected-input.ts +128 -0
- package/src/drizzle/oauth-connected-maintenance.ts +345 -0
- package/src/drizzle/oauth-connected-management.ts +365 -0
- package/src/drizzle/oauth-connected-model.ts +347 -0
- package/src/drizzle/oauth-connected-reference.ts +112 -0
- package/src/drizzle/oauth-connected-settlement.ts +226 -0
- package/src/drizzle/oauth-connected-state.ts +846 -0
- package/src/drizzle/oauth-connected-target.ts +264 -0
- package/src/drizzle/oauth-drivers.ts +567 -0
- package/src/drizzle/oauth-flow.ts +461 -0
- package/src/drizzle/oauth-input.ts +205 -0
- package/src/drizzle/oauth-model.ts +610 -0
- package/src/drizzle/oauth-mysql.ts +10 -0
- package/src/drizzle/oauth-owner.ts +29 -0
- package/src/drizzle/oauth-registration.ts +638 -0
- package/src/drizzle/oauth-state.ts +213 -0
- package/src/drizzle/oauth-target.ts +751 -0
- package/src/drizzle/passkey-admission.ts +333 -0
- package/src/drizzle/passkey-credentials.ts +465 -0
- package/src/drizzle/passkey-drivers.ts +385 -0
- package/src/drizzle/passkey-enrollment.ts +280 -0
- package/src/drizzle/passkey-flow.ts +983 -0
- package/src/drizzle/passkey-management.ts +369 -0
- package/src/drizzle/passkey-model.ts +350 -0
- package/src/drizzle/passkey-registration-ceremony-model.ts +69 -0
- package/src/drizzle/passkey-registration-ceremony.ts +254 -0
- package/src/drizzle/passkey-registration-custody.ts +82 -0
- package/src/drizzle/passkey-registration-write.ts +378 -0
- package/src/drizzle/passkey-state.ts +307 -0
- package/src/drizzle/passkey-target.ts +528 -0
- package/src/drizzle/passkey-write-drivers.ts +396 -0
- package/src/drizzle/passkey-write-model.ts +265 -0
- package/src/drizzle/passkey-write-state.ts +627 -0
- package/src/drizzle/passkey-write-target.ts +406 -0
- package/src/drizzle/password-model.ts +491 -0
- package/src/drizzle/password-prepared-model.ts +259 -0
- package/src/drizzle/password-prepared-sql.ts +1198 -0
- package/src/drizzle/password-prepared-state.ts +232 -0
- package/src/drizzle/password-prepared-target.ts +158 -0
- package/src/drizzle/password-registration.ts +372 -0
- package/src/drizzle/password-sql.ts +2082 -0
- package/src/drizzle/password-target.ts +223 -0
- package/src/drizzle/pg-emails.ts +323 -0
- package/src/drizzle/pg-password-prepared.ts +207 -0
- package/src/drizzle/pg-passwords.ts +340 -0
- package/src/drizzle/pg-proofs.ts +193 -0
- package/src/drizzle/pg-sessions.ts +751 -0
- package/src/drizzle/pg.ts +982 -0
- package/src/drizzle/phone-model.ts +185 -0
- package/src/drizzle/phone-state.ts +802 -0
- package/src/drizzle/phone-target.ts +471 -0
- package/src/drizzle/proof-model.ts +398 -0
- package/src/drizzle/proof-sql.ts +1912 -0
- package/src/drizzle/proof-target.ts +120 -0
- package/src/drizzle/session-model.ts +368 -0
- package/src/drizzle/session-sql.ts +2152 -0
- package/src/drizzle/session-target.ts +335 -0
- package/src/drizzle/sqlite-emails.ts +368 -0
- package/src/drizzle/sqlite-identity.ts +343 -0
- package/src/drizzle/sqlite-password-prepared.ts +262 -0
- package/src/drizzle/sqlite-passwords.ts +499 -0
- package/src/drizzle/sqlite-proofs.ts +204 -0
- package/src/drizzle/sqlite-sessions.ts +972 -0
- package/src/drizzle/sqlite.ts +704 -0
- package/src/drizzle/standalone-guard.ts +38 -0
- package/src/drizzle/step-up-model.ts +129 -0
- package/src/drizzle/step-up-state.ts +141 -0
- package/src/drizzle/totp-model.ts +91 -0
- package/src/drizzle/totp-state.ts +520 -0
- package/src/drizzle/totp-target.ts +304 -0
- package/src/drizzle/transaction-execution.ts +290 -0
- package/src/drizzle/transaction-mysql.ts +104 -0
- package/src/drizzle/transaction-owner.ts +570 -0
- package/src/email/EmailActionEvidence.ts +37 -0
- package/src/email/EmailAddressPersistence.ts +71 -0
- package/src/email/EmailIdentifierNotifier.ts +48 -0
- package/src/email/EmailReturnTargets.ts +50 -0
- package/src/email/EmailSignInTargets.ts +20 -0
- package/src/email/addresses.ts +630 -0
- package/src/email/definition.ts +309 -0
- package/src/email/errors.ts +23 -0
- package/src/email/magicLink.ts +84 -0
- package/src/email/models.ts +50 -0
- package/src/email/module.ts +664 -0
- package/src/email/registration.ts +415 -0
- package/src/email/snapshot.ts +51 -0
- package/src/hooks/LifecycleHooks.ts +136 -0
- package/src/hooks/commit.ts +271 -0
- package/src/hooks/models.ts +111 -0
- package/src/hooks/plugins.ts +87 -0
- package/src/hooks/transactions.ts +51 -0
- package/src/http/auth-api.ts +17 -0
- package/src/http/auth-contract.ts +148 -0
- package/src/http/auth-http.ts +467 -0
- package/src/http/endpoints/get-session.ts +9 -0
- package/src/http/endpoints/password-sign-in.ts +19 -0
- package/src/http/endpoints/request-email-otp.ts +10 -0
- package/src/http/endpoints/set-password.ts +18 -0
- package/src/http/endpoints/sign-out.ts +5 -0
- package/src/http/endpoints/verify-email-otp.ts +15 -0
- package/src/http/models.ts +80 -0
- package/src/http/security.ts +102 -0
- package/src/http/session-contract.ts +92 -0
- package/src/http-operation/OperationHttpInvocation.ts +39 -0
- package/src/http-operation/OperationHttpServerConfig.ts +124 -0
- package/src/http-operation/auth-client.ts +273 -0
- package/src/http-operation/client.ts +453 -0
- package/src/http-operation/configuration-schema.ts +19 -0
- package/src/http-operation/contract.ts +116 -0
- package/src/http-operation/errors.ts +38 -0
- package/src/http-operation/models.ts +42 -0
- package/src/http-operation/private.ts +50 -0
- package/src/http-operation/security.ts +93 -0
- package/src/http-operation/server.ts +544 -0
- package/src/identity/ExternalIdentityMutation.ts +18 -0
- package/src/identity/IdentityMutation.ts +41 -0
- package/src/identity/IdentityRepository.ts +37 -0
- package/src/identity/SubjectLifecycle.ts +80 -0
- package/src/identity/SubjectProvisioner.ts +40 -0
- package/src/identity/codecs.ts +54 -0
- package/src/identity/models.ts +82 -0
- package/src/identity/operations.ts +182 -0
- package/src/index.ts +23 -0
- package/src/internal/AuthStoreDecisions.ts +23 -0
- package/src/internal/CurrentSession.ts +8 -0
- package/src/internal/diagnostics.ts +71 -0
- package/src/oauth/GithubOAuthProvider.ts +106 -0
- package/src/oauth/OAuth.ts +436 -0
- package/src/oauth/OAuthAccountsPersistence.ts +142 -0
- package/src/oauth/OAuthActionEvidence.ts +31 -0
- package/src/oauth/OAuthConnectedActionEvidence.ts +28 -0
- package/src/oauth/OAuthConnectedPersistence.ts +163 -0
- package/src/oauth/OAuthConnectedProtocol.ts +54 -0
- package/src/oauth/OAuthConnectedRevocations.ts +48 -0
- package/src/oauth/OAuthConnectedTokenProtector.ts +240 -0
- package/src/oauth/OAuthConnectedTransactionProtector.ts +56 -0
- package/src/oauth/OAuthConnectedUseAuthority.ts +26 -0
- package/src/oauth/OAuthConnectionStore.ts +59 -0
- package/src/oauth/OAuthLinkTransactionProtector.ts +58 -0
- package/src/oauth/OAuthProtocol.ts +39 -0
- package/src/oauth/OAuthProvider.ts +126 -0
- package/src/oauth/OAuthProviders.ts +53 -0
- package/src/oauth/OAuthRegistrationIntents.ts +42 -0
- package/src/oauth/OAuthReturnTargets.ts +44 -0
- package/src/oauth/OAuthSignInPersistence.ts +91 -0
- package/src/oauth/OAuthStateDecisions.ts +16 -0
- package/src/oauth/OAuthStateStore.ts +102 -0
- package/src/oauth/OAuthTransactionProtector.ts +103 -0
- package/src/oauth/accounts.ts +987 -0
- package/src/oauth/accountsModels.ts +214 -0
- package/src/oauth/connected.ts +995 -0
- package/src/oauth/connectedAccess.ts +644 -0
- package/src/oauth/connectedMaintenance.ts +248 -0
- package/src/oauth/connectedModels.ts +495 -0
- package/src/oauth/definition.ts +414 -0
- package/src/oauth/errors.ts +78 -0
- package/src/oauth/github/identity.ts +26 -0
- package/src/oauth/github/models.ts +37 -0
- package/src/oauth/github/protocol.ts +329 -0
- package/src/oauth/openid-client/ProviderRevocation.ts +22 -0
- package/src/oauth/openid-client/compatibility.ts +47 -0
- package/src/oauth/openid-client/configuration.ts +472 -0
- package/src/oauth/openid-client/connected/configuration.ts +565 -0
- package/src/oauth/openid-client/connected/models.ts +58 -0
- package/src/oauth/openid-client/connected/protocol.ts +866 -0
- package/src/oauth/openid-client/models.ts +78 -0
- package/src/oauth/openid-client/protocol.ts +437 -0
- package/src/oauth/openid-client/transport.ts +67 -0
- package/src/oauth/policy.ts +26 -0
- package/src/oauth/registration.ts +410 -0
- package/src/oauth/registrationModels.ts +115 -0
- package/src/oauth/registrationSecrets.ts +127 -0
- package/src/oauth/schema.ts +102 -0
- package/src/oauth/signInErrors.ts +23 -0
- package/src/oauth/signInModels.ts +266 -0
- package/src/oauth/signInModule.ts +875 -0
- package/src/oauth/signInSnapshot.ts +37 -0
- package/src/oauth/transactionEncryption.ts +198 -0
- package/src/operations/RequestBindingConfig.ts +12 -0
- package/src/operations/actions.ts +342 -0
- package/src/operations/context.ts +130 -0
- package/src/operations/credentials.ts +121 -0
- package/src/operations/errors.ts +53 -0
- package/src/operations/operation.ts +740 -0
- package/src/operations/requestBinding.ts +237 -0
- package/src/operations/requestBindingModels.ts +18 -0
- package/src/operations/reveals.ts +147 -0
- package/src/passkey/PasskeyActionEvidence.ts +25 -0
- package/src/passkey/PasskeyCredentials.ts +16 -0
- package/src/passkey/PasskeyEnrollmentContext.ts +26 -0
- package/src/passkey/PasskeyManagementPersistence.ts +124 -0
- package/src/passkey/PasskeyPersistence.ts +85 -0
- package/src/passkey/PasskeyProtocol.ts +48 -0
- package/src/passkey/actions.ts +905 -0
- package/src/passkey/browser/PasskeyBrowser.ts +26 -0
- package/src/passkey/browser/models.ts +67 -0
- package/src/passkey/browser/simplewebauthn.ts +621 -0
- package/src/passkey/definition.ts +386 -0
- package/src/passkey/errors.ts +39 -0
- package/src/passkey/management.ts +552 -0
- package/src/passkey/models.ts +414 -0
- package/src/passkey/module.ts +367 -0
- package/src/passkey/pending.ts +203 -0
- package/src/passkey/policy.ts +88 -0
- package/src/passkey/registration.ts +251 -0
- package/src/passkey/simplewebauthn/configuration.ts +97 -0
- package/src/passkey/simplewebauthn/models.ts +9 -0
- package/src/passkey/simplewebauthn/protocol.ts +729 -0
- package/src/passkey/snapshot.ts +48 -0
- package/src/passkey/stepUp.ts +212 -0
- package/src/password/CompromisedPasswords.ts +36 -0
- package/src/password/NewPasswordCheck.ts +89 -0
- package/src/password/PasswordHashing.ts +209 -0
- package/src/password/PasswordKdfAdmission.ts +44 -0
- package/src/password/configuration.ts +52 -0
- package/src/password/defaults.ts +15 -0
- package/src/password/encoding.ts +137 -0
- package/src/password/errors.ts +43 -0
- package/src/password/methods/PasswordActionEvidence.ts +41 -0
- package/src/password/methods/PasswordPersistence.ts +128 -0
- package/src/password/methods/PasswordPreparedPersistence.ts +123 -0
- package/src/password/methods/contracts.ts +47 -0
- package/src/password/methods/definition.ts +199 -0
- package/src/password/methods/errors.ts +26 -0
- package/src/password/methods/models.ts +80 -0
- package/src/password/methods/module.ts +986 -0
- package/src/password/methods/policy.ts +68 -0
- package/src/password/methods/preparation.ts +73 -0
- package/src/password/methods/prepared.ts +1199 -0
- package/src/password/methods/preparedModels.ts +496 -0
- package/src/password/methods/signIn.ts +136 -0
- package/src/password/methods/snapshot.ts +53 -0
- package/src/password/methods/verification.ts +266 -0
- package/src/password/models.ts +15 -0
- package/src/password/policy.ts +41 -0
- package/src/phone/PhoneActionEvidence.ts +26 -0
- package/src/phone/PhoneAdmission.ts +29 -0
- package/src/phone/PhoneDeliveryEligibility.ts +9 -0
- package/src/phone/PhonePersistence.ts +43 -0
- package/src/phone/PhoneRequestContext.ts +7 -0
- package/src/phone/PhoneSignInTargets.ts +19 -0
- package/src/phone/definition.ts +87 -0
- package/src/phone/failure.ts +40 -0
- package/src/phone/lifecycle.ts +662 -0
- package/src/phone/lifecycleModels.ts +108 -0
- package/src/phone/models.ts +41 -0
- package/src/phone/module.ts +433 -0
- package/src/proofs/EmailProofDelivery.ts +19 -0
- package/src/proofs/HostIngressLimiter.ts +20 -0
- package/src/proofs/ProofPersistence.ts +172 -0
- package/src/proofs/SmsProofDelivery.ts +19 -0
- package/src/proofs/abuse.ts +23 -0
- package/src/proofs/completion.ts +23 -0
- package/src/proofs/crypto.ts +326 -0
- package/src/proofs/definition.ts +39 -0
- package/src/proofs/delivery.ts +73 -0
- package/src/proofs/dispatch.ts +99 -0
- package/src/proofs/errors.ts +46 -0
- package/src/proofs/models.ts +131 -0
- package/src/proofs/module.ts +620 -0
- package/src/proofs/policy.ts +77 -0
- package/src/sessions/AuthenticationAuthority.ts +51 -0
- package/src/sessions/PendingAuthentication.ts +121 -0
- package/src/sessions/SessionStepUpPersistence.ts +164 -0
- package/src/sessions/assurance.ts +192 -0
- package/src/sessions/commit.ts +13 -0
- package/src/sessions/configuration.ts +133 -0
- package/src/sessions/contract.ts +203 -0
- package/src/sessions/crypto.ts +181 -0
- package/src/sessions/definition.ts +25 -0
- package/src/sessions/errors.ts +68 -0
- package/src/sessions/invalidation.ts +46 -0
- package/src/sessions/models.ts +138 -0
- package/src/sessions/module.ts +1991 -0
- package/src/sessions/persistence.ts +135 -0
- package/src/sessions/policy.ts +103 -0
- package/src/testing/conformance/AuthStore.ts +314 -0
- package/src/testing/conformance/OAuthConnectionStore.ts +167 -0
- package/src/testing/conformance/OAuthStateStore.ts +105 -0
- package/src/testing/conformance/PasswordCredentialStore.ts +205 -0
- package/src/testing/conformance/support.ts +38 -0
- package/src/testing/crypto.ts +55 -0
- package/src/testing/keyring.ts +17 -0
- package/src/totp/TotpActionEvidence.ts +18 -0
- package/src/totp/TotpPersistence.ts +26 -0
- package/src/totp/TotpSecretKeys.ts +15 -0
- package/src/totp/crypto.ts +160 -0
- package/src/totp/definition.ts +78 -0
- package/src/totp/errors.ts +25 -0
- package/src/totp/models.ts +164 -0
- package/src/totp/module.ts +717 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { VerifiedEmail } from "../Schema.mjs";
|
|
2
|
+
import { reportPersistenceFailure } from "../internal/diagnostics.mjs";
|
|
3
|
+
import { AuthRateLimited, AuthStoreError, InvalidRegistration } from "../Errors.mjs";
|
|
4
|
+
import { AuthStoreDecisions } from "../internal/AuthStoreDecisions.mjs";
|
|
5
|
+
import { AuthStore, EmailOtpRejected } from "../AuthStore.mjs";
|
|
6
|
+
import { InvalidOAuthState } from "../oauth/errors.mjs";
|
|
7
|
+
import { OAuthStateStore } from "../oauth/OAuthStateStore.mjs";
|
|
8
|
+
import { column, requireStandaloneConsume, updateValues } from "./model.mjs";
|
|
9
|
+
import { OAuthStateDecisions } from "../oauth/OAuthStateDecisions.mjs";
|
|
10
|
+
import { Cause, Context, DateTime, Duration, Effect, Schema } from "effect";
|
|
11
|
+
import { and, eq, gt, lt, lte, ne, or, sql } from "drizzle-orm";
|
|
12
|
+
//#region src/drizzle/sqlite.ts
|
|
13
|
+
const storeReadError = () => AuthStoreError.make({ message: "Auth store read failed" });
|
|
14
|
+
const storeWriteError = () => AuthStoreError.make({ message: "Auth store write failed" });
|
|
15
|
+
const isStoreFailure = Schema.is(AuthStoreError);
|
|
16
|
+
const mapStoreFailure = (failure) => (effect) => reportPersistenceFailure(effect, isStoreFailure).pipe(Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, failure))));
|
|
17
|
+
const mapStoreReadFailure = mapStoreFailure(storeReadError);
|
|
18
|
+
const mapStoreWriteFailure = mapStoreFailure(storeWriteError);
|
|
19
|
+
const selected = (row) => row;
|
|
20
|
+
/**
|
|
21
|
+
* Shared SQLite semantics for libSQL, Node, Bun, WASM, Durable Objects and D1.
|
|
22
|
+
* Every mutation here is one conditional statement, so D1 never reaches its
|
|
23
|
+
* unsupported interactive transaction and Durable Objects never suspend in a
|
|
24
|
+
* transactionSync callback.
|
|
25
|
+
*/
|
|
26
|
+
const makeSqliteAuthStoreServices = (database, mapping, standaloneGuard) => {
|
|
27
|
+
const db = database;
|
|
28
|
+
const requireStandalone = standaloneGuard ?? Effect.suspend(() => db.$client === void 0 ? AuthStoreError.make({ message: "Use a root auth store or its decision transaction API" }) : requireStandaloneConsume({ $client: db.$client }));
|
|
29
|
+
const challengeTable = mapping.challenge.table;
|
|
30
|
+
const challengeColumns = mapping.challenge.columns;
|
|
31
|
+
const challenge = {
|
|
32
|
+
challengeId: column(challengeTable, challengeColumns.challengeId),
|
|
33
|
+
tokenDigest: column(challengeTable, challengeColumns.tokenDigest),
|
|
34
|
+
namespace: column(challengeTable, challengeColumns.namespace),
|
|
35
|
+
value: column(challengeTable, challengeColumns.value),
|
|
36
|
+
purpose: column(challengeTable, challengeColumns.purpose),
|
|
37
|
+
otpKeyId: column(challengeTable, challengeColumns.otpKeyId),
|
|
38
|
+
otpDigest: column(challengeTable, challengeColumns.otpDigest),
|
|
39
|
+
issuedAt: column(challengeTable, challengeColumns.issuedAt),
|
|
40
|
+
expiresAt: column(challengeTable, challengeColumns.expiresAt),
|
|
41
|
+
attemptLimit: column(challengeTable, challengeColumns.attemptLimit),
|
|
42
|
+
failedAttempts: column(challengeTable, challengeColumns.failedAttempts),
|
|
43
|
+
consumed: column(challengeTable, challengeColumns.consumed)
|
|
44
|
+
};
|
|
45
|
+
const registrationTable = mapping.registration.table;
|
|
46
|
+
const registrationColumns = mapping.registration.columns;
|
|
47
|
+
const registration = {
|
|
48
|
+
tokenDigest: column(registrationTable, registrationColumns.tokenDigest),
|
|
49
|
+
expiresAt: column(registrationTable, registrationColumns.expiresAt),
|
|
50
|
+
consumed: column(registrationTable, registrationColumns.consumed)
|
|
51
|
+
};
|
|
52
|
+
const issueChallenge = Effect.fn("DrizzleSqliteAuthStore.issueChallenge")(function* (input) {
|
|
53
|
+
const now = yield* DateTime.now;
|
|
54
|
+
const cooldownCutoff = DateTime.mapEpochMillis(now, (millis) => millis - Duration.toMillis(input.resendCooldown));
|
|
55
|
+
if ((yield* Effect.suspend(() => {
|
|
56
|
+
const values = mapping.challenge.encodeInsert(input, {
|
|
57
|
+
namespace: mapping.challenge.identifierNamespace,
|
|
58
|
+
failedAttempts: 0,
|
|
59
|
+
consumed: false
|
|
60
|
+
});
|
|
61
|
+
const nativeNow = mapping.challenge.encodeInstant(now);
|
|
62
|
+
const nativeCutoff = mapping.challenge.encodeInstant(cooldownCutoff);
|
|
63
|
+
const nativeIssuedAt = mapping.challenge.encodeInstant(input.issuedAt);
|
|
64
|
+
const preservedAttempts = sql`case when ${gt(challenge.expiresAt, nativeNow)} then ${challenge.failedAttempts} else 0 end`;
|
|
65
|
+
const update = mapping.challenge.encodeUpdate(input, {
|
|
66
|
+
namespace: mapping.challenge.identifierNamespace,
|
|
67
|
+
failedAttempts: preservedAttempts,
|
|
68
|
+
consumed: false
|
|
69
|
+
});
|
|
70
|
+
return db.insert(challengeTable).values(values).onConflictDoUpdate({
|
|
71
|
+
target: [
|
|
72
|
+
challenge.namespace,
|
|
73
|
+
challenge.value,
|
|
74
|
+
challenge.purpose
|
|
75
|
+
],
|
|
76
|
+
set: update,
|
|
77
|
+
setWhere: and(ne(challenge.challengeId, input.challengeId), lt(challenge.issuedAt, nativeIssuedAt), or(eq(challenge.consumed, true), lte(challenge.issuedAt, nativeCutoff)))
|
|
78
|
+
}).returning();
|
|
79
|
+
}).pipe(mapStoreWriteFailure)).length > 0) return;
|
|
80
|
+
const existing = yield* Effect.suspend(() => db.select().from(challengeTable).where(and(eq(challenge.namespace, mapping.challenge.identifierNamespace), eq(challenge.value, input.email), eq(challenge.purpose, input.purpose))).limit(1)).pipe(mapStoreReadFailure);
|
|
81
|
+
const decoded = existing[0] === void 0 ? void 0 : yield* Effect.suspend(() => mapping.challenge.decode(selected(existing[0]))).pipe(mapStoreReadFailure);
|
|
82
|
+
const retryAfterSeconds = decoded === void 0 ? Math.max(1, Math.ceil(Duration.toMillis(input.resendCooldown) / 1e3)) : Math.max(1, Math.ceil((DateTime.toEpochMillis(decoded.challenge.issuedAt) + Duration.toMillis(input.resendCooldown) - DateTime.toEpochMillis(now)) / 1e3));
|
|
83
|
+
return yield* AuthRateLimited.make({ retryAfterSeconds });
|
|
84
|
+
});
|
|
85
|
+
const consumeChallengeDecision = Effect.fn("DrizzleSqliteAuthStore.consumeChallengeDecision")(function* (input) {
|
|
86
|
+
const now = yield* DateTime.now;
|
|
87
|
+
const alternatives = Object.entries(input.otpDigests).map(([keyId, digest]) => and(eq(challenge.otpKeyId, keyId), eq(challenge.otpDigest, digest)));
|
|
88
|
+
const matches = alternatives.length === 0 ? sql`false` : or(...alternatives);
|
|
89
|
+
const rows = yield* Effect.suspend(() => db.update(challengeTable).set(updateValues([[challengeColumns.consumed, sql`case when ${matches} then true else ${challenge.consumed} end`], [challengeColumns.failedAttempts, sql`${challenge.failedAttempts} + case when ${matches} then 0 else 1 end`]])).where(and(eq(challenge.tokenDigest, input.tokenDigest), eq(challenge.consumed, false), gt(challenge.expiresAt, mapping.challenge.encodeInstant(now)), sql`${challenge.failedAttempts} < ${challenge.attemptLimit}`)).returning()).pipe(mapStoreWriteFailure);
|
|
90
|
+
if (rows[0] === void 0) return {
|
|
91
|
+
_tag: "rejected",
|
|
92
|
+
reason: "missing_challenge"
|
|
93
|
+
};
|
|
94
|
+
const decoded = yield* Effect.suspend(() => mapping.challenge.decode(selected(rows[0]))).pipe(mapStoreReadFailure);
|
|
95
|
+
if (!decoded.consumed) return {
|
|
96
|
+
_tag: "rejected",
|
|
97
|
+
reason: "bad_code"
|
|
98
|
+
};
|
|
99
|
+
return {
|
|
100
|
+
_tag: "accepted",
|
|
101
|
+
value: VerifiedEmail.make({
|
|
102
|
+
email: decoded.challenge.email,
|
|
103
|
+
purpose: decoded.challenge.purpose
|
|
104
|
+
})
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
const consumeChallenge = Effect.fn("DrizzleSqliteAuthStore.consumeChallenge")(function* (input) {
|
|
108
|
+
yield* requireStandalone;
|
|
109
|
+
const decision = yield* consumeChallengeDecision(input);
|
|
110
|
+
return decision._tag === "accepted" ? decision.value : yield* EmailOtpRejected.make({ reason: decision.reason });
|
|
111
|
+
});
|
|
112
|
+
const issueRegistration = Effect.fn("DrizzleSqliteAuthStore.issueRegistration")(function* (input) {
|
|
113
|
+
yield* Effect.suspend(() => db.insert(registrationTable).values(mapping.registration.encodeInsert(input, false))).pipe(mapStoreWriteFailure);
|
|
114
|
+
});
|
|
115
|
+
const inspectRegistration = Effect.fn("DrizzleSqliteAuthStore.inspectRegistration")(function* (tokenDigest) {
|
|
116
|
+
const now = yield* DateTime.now;
|
|
117
|
+
const rows = yield* Effect.suspend(() => db.select().from(registrationTable).where(and(eq(registration.tokenDigest, tokenDigest), eq(registration.consumed, false), gt(registration.expiresAt, mapping.registration.encodeInstant(now)))).limit(1)).pipe(mapStoreReadFailure);
|
|
118
|
+
if (rows[0] === void 0) return yield* InvalidRegistration.make();
|
|
119
|
+
return (yield* Effect.suspend(() => mapping.registration.decode(selected(rows[0]))).pipe(mapStoreReadFailure)).registration;
|
|
120
|
+
});
|
|
121
|
+
const consumeRegistrationDecision = Effect.fn("DrizzleSqliteAuthStore.consumeRegistrationDecision")(function* (input) {
|
|
122
|
+
const now = yield* DateTime.now;
|
|
123
|
+
return (yield* Effect.suspend(() => db.update(registrationTable).set(updateValues([[registrationColumns.consumed, true]])).where(and(eq(registration.tokenDigest, input.tokenDigest), eq(registration.consumed, false), gt(registration.expiresAt, mapping.registration.encodeInstant(now)))).returning({ consumed: registration.consumed })).pipe(mapStoreWriteFailure)).length === 0 ? { _tag: "rejected" } : {
|
|
124
|
+
_tag: "accepted",
|
|
125
|
+
value: void 0
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
const consumeRegistration = Effect.fn("DrizzleSqliteAuthStore.consumeRegistration")(function* (input) {
|
|
129
|
+
yield* requireStandalone;
|
|
130
|
+
if ((yield* consumeRegistrationDecision(input))._tag === "rejected") return yield* InvalidRegistration.make();
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
authStore: AuthStore.of({
|
|
134
|
+
issueChallenge,
|
|
135
|
+
consumeChallenge,
|
|
136
|
+
issueRegistration,
|
|
137
|
+
inspectRegistration,
|
|
138
|
+
consumeRegistration
|
|
139
|
+
}),
|
|
140
|
+
decisions: {
|
|
141
|
+
consumeChallenge: consumeChallengeDecision,
|
|
142
|
+
consumeRegistration: consumeRegistrationDecision
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
const makeSqliteOAuthStateServices = (database, mapping, standaloneGuard) => {
|
|
147
|
+
const db = database;
|
|
148
|
+
const requireStandalone = standaloneGuard ?? Effect.suspend(() => db.$client === void 0 ? AuthStoreError.make({ message: "Use a root auth store or its decision transaction API" }) : requireStandaloneConsume({ $client: db.$client }));
|
|
149
|
+
const stateTable = mapping.oauthState.table;
|
|
150
|
+
const stateColumns = mapping.oauthState.columns;
|
|
151
|
+
const state = {
|
|
152
|
+
stateDigest: column(stateTable, stateColumns.stateDigest),
|
|
153
|
+
expiresAt: column(stateTable, stateColumns.expiresAt),
|
|
154
|
+
consumed: column(stateTable, stateColumns.consumed)
|
|
155
|
+
};
|
|
156
|
+
const issue = Effect.fn("DrizzleSqliteOAuthStateStore.issue")(function* (input) {
|
|
157
|
+
yield* Effect.suspend(() => db.insert(stateTable).values(mapping.oauthState.encodeInsert(input, false))).pipe(mapStoreWriteFailure);
|
|
158
|
+
});
|
|
159
|
+
const consumeDecision = Effect.fn("DrizzleSqliteOAuthStateStore.consumeDecision")(function* (digest) {
|
|
160
|
+
const now = yield* DateTime.now;
|
|
161
|
+
const rows = yield* Effect.suspend(() => db.update(stateTable).set(updateValues([[stateColumns.consumed, true]])).where(and(eq(state.stateDigest, digest), eq(state.consumed, false), gt(state.expiresAt, mapping.oauthState.encodeInstant(now)))).returning()).pipe(mapStoreWriteFailure);
|
|
162
|
+
if (rows[0] === void 0) return { _tag: "rejected" };
|
|
163
|
+
return {
|
|
164
|
+
_tag: "accepted",
|
|
165
|
+
value: (yield* Effect.suspend(() => mapping.oauthState.decode(selected(rows[0]))).pipe(mapStoreReadFailure)).state
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
const consume = Effect.fn("DrizzleSqliteOAuthStateStore.consume")(function* (digest) {
|
|
169
|
+
yield* requireStandalone;
|
|
170
|
+
const decision = yield* consumeDecision(digest);
|
|
171
|
+
return decision._tag === "accepted" ? decision.value : yield* InvalidOAuthState.make();
|
|
172
|
+
});
|
|
173
|
+
return {
|
|
174
|
+
oauthStateStore: OAuthStateStore.of({
|
|
175
|
+
issue,
|
|
176
|
+
consume
|
|
177
|
+
}),
|
|
178
|
+
decisions: { consumeOAuthState: consumeDecision }
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
const makeSqliteAuthServices = (database, mapping, standaloneGuard) => {
|
|
182
|
+
const auth = makeSqliteAuthStoreServices(database, mapping, standaloneGuard);
|
|
183
|
+
const oauth = makeSqliteOAuthStateServices(database, mapping, standaloneGuard);
|
|
184
|
+
return {
|
|
185
|
+
...auth,
|
|
186
|
+
...oauth,
|
|
187
|
+
decisions: {
|
|
188
|
+
...auth.decisions,
|
|
189
|
+
...oauth.decisions
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
};
|
|
193
|
+
function coordinateSqliteAuthStoreTransaction(acquire, options, body) {
|
|
194
|
+
return Effect.flatMap(acquire, (database) => database.transaction((transaction) => {
|
|
195
|
+
const decisions = makeSqliteAuthStoreServices(transaction, options.mapping).decisions;
|
|
196
|
+
const provided = Context.make(AuthStoreDecisions, decisions);
|
|
197
|
+
const work = Effect.provideContext(body, provided);
|
|
198
|
+
return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
|
|
199
|
+
}));
|
|
200
|
+
}
|
|
201
|
+
function coordinateSqliteOAuthStateTransaction(acquire, options, body) {
|
|
202
|
+
return Effect.flatMap(acquire, (database) => database.transaction((transaction) => {
|
|
203
|
+
const decisions = makeSqliteOAuthStateServices(transaction, options.mapping).decisions;
|
|
204
|
+
const provided = Context.make(OAuthStateDecisions, decisions);
|
|
205
|
+
const work = Effect.provideContext(body, provided);
|
|
206
|
+
return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
209
|
+
function coordinateSqliteAuthTransaction(acquire, options, body) {
|
|
210
|
+
return Effect.flatMap(acquire, (database) => database.transaction((transaction) => {
|
|
211
|
+
const decisions = makeSqliteAuthServices(transaction, options.mapping).decisions;
|
|
212
|
+
const provided = Context.make(AuthStoreDecisions, decisions).pipe(Context.add(OAuthStateDecisions, decisions));
|
|
213
|
+
const work = Effect.provideContext(body, provided);
|
|
214
|
+
return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
|
|
215
|
+
}));
|
|
216
|
+
}
|
|
217
|
+
//#endregion
|
|
218
|
+
export { coordinateSqliteAuthStoreTransaction, coordinateSqliteAuthTransaction, coordinateSqliteOAuthStateTransaction, makeSqliteAuthServices, makeSqliteAuthStoreServices, makeSqliteOAuthStateServices };
|
|
219
|
+
|
|
220
|
+
//# sourceMappingURL=sqlite.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.mjs","names":[],"sources":["../../src/drizzle/sqlite.ts"],"sourcesContent":["/* oxlint-disable no-explicit-any -- Drizzle's generic query builders lose the concrete consumer table through a runtime column map. Assertions stay in this adapter. */\nimport {\n and,\n eq,\n gt,\n lt,\n lte,\n ne,\n or,\n sql,\n type AnyRelations,\n type InferSelectModel,\n} from \"drizzle-orm\";\nimport type { QueryEffectHKTBase } from \"drizzle-orm/effect-core\";\nimport type { SQLiteColumn, AnySQLiteTable } from \"drizzle-orm/sqlite-core\";\nimport type { SQLiteEffectDatabase } from \"drizzle-orm/sqlite-core/effect/db\";\nimport { Cause, Context, DateTime, Duration, Effect, Schema } from \"effect\";\nimport type { SqlError } from \"effect/unstable/sql/SqlError\";\n\nimport { AuthStore, EmailOtpRejected } from \"../AuthStore\";\nimport { AuthRateLimited, AuthStoreError, InvalidRegistration } from \"../Errors\";\nimport { AuthStoreDecisions } from \"../internal/AuthStoreDecisions\";\nimport { reportPersistenceFailure } from \"../internal/diagnostics\";\nimport { InvalidOAuthState } from \"../oauth/errors\";\nimport { OAuthStateDecisions } from \"../oauth/OAuthStateDecisions\";\nimport { OAuthStateStore } from \"../oauth/OAuthStateStore\";\nimport type { OAuthState } from \"../oauth/schema\";\nimport {\n VerifiedEmail,\n type ConsumeChallenge,\n type ConsumeRegistration,\n type NewChallenge,\n type NewRegistration,\n type TokenDigest,\n} from \"../Schema\";\nimport {\n column,\n requireStandaloneConsume,\n updateValues,\n type AuthTables,\n type AuthStoreTables,\n type ChallengeConsumeDecision,\n type ConsumeDecision,\n type OAuthStateTables,\n} from \"./model\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\ntype AnyDatabase = SQLiteEffectDatabase<any, any, AnyRelations>;\ntype ClosedQueryEffectHKT = QueryEffectHKTBase & { readonly context: never };\ntype RuntimeDatabase<HKT extends ClosedQueryEffectHKT, RunResult> = SQLiteEffectDatabase<\n HKT,\n RunResult,\n AnyRelations\n> &\n Partial<Parameters<typeof requireStandaloneConsume>[0]>;\ntype TransactionOf<D extends AnyDatabase> = Parameters<Parameters<D[\"transaction\"]>[0]>[0];\n\nconst storeReadError = () => AuthStoreError.make({ message: \"Auth store read failed\" });\nconst storeWriteError = () => AuthStoreError.make({ message: \"Auth store write failed\" });\nconst isStoreFailure = Schema.is(AuthStoreError);\n\nconst mapStoreFailure =\n (failure: () => AuthStoreError) =>\n <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, AuthStoreError, R> =>\n reportPersistenceFailure(effect, isStoreFailure).pipe(\n Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, failure))),\n );\n\nconst mapStoreReadFailure = mapStoreFailure(storeReadError);\nconst mapStoreWriteFailure = mapStoreFailure(storeWriteError);\n\nconst selected = <T extends AnySQLiteTable>(row: unknown): InferSelectModel<T> =>\n row as InferSelectModel<T>;\n\n/**\n * Shared SQLite semantics for libSQL, Node, Bun, WASM, Durable Objects and D1.\n * Every mutation here is one conditional statement, so D1 never reaches its\n * unsupported interactive transaction and Durable Objects never suspend in a\n * transactionSync callback.\n */\nexport const makeSqliteAuthStoreServices = <\n C extends AnySQLiteTable,\n R extends AnySQLiteTable,\n HKT extends ClosedQueryEffectHKT = ClosedQueryEffectHKT,\n RunResult = unknown,\n>(\n database: SQLiteEffectDatabase<HKT, RunResult, AnyRelations>,\n mapping: AuthStoreTables<C, R>,\n standaloneGuard?: Effect.Effect<void, AuthStoreError>,\n) => {\n const db = database as RuntimeDatabase<HKT, RunResult>;\n\n const requireStandalone =\n standaloneGuard ??\n Effect.suspend(() =>\n db.$client === undefined\n ? AuthStoreError.make({ message: \"Use a root auth store or its decision transaction API\" })\n : requireStandaloneConsume({ $client: db.$client }),\n );\n\n const challengeTable = mapping.challenge.table;\n const challengeColumns = mapping.challenge.columns;\n\n const challenge = {\n challengeId: column(challengeTable, challengeColumns.challengeId),\n tokenDigest: column(challengeTable, challengeColumns.tokenDigest),\n namespace: column(challengeTable, challengeColumns.namespace),\n value: column(challengeTable, challengeColumns.value),\n purpose: column(challengeTable, challengeColumns.purpose),\n otpKeyId: column(challengeTable, challengeColumns.otpKeyId),\n otpDigest: column(challengeTable, challengeColumns.otpDigest),\n issuedAt: column(challengeTable, challengeColumns.issuedAt),\n expiresAt: column(challengeTable, challengeColumns.expiresAt),\n attemptLimit: column(challengeTable, challengeColumns.attemptLimit),\n failedAttempts: column(challengeTable, challengeColumns.failedAttempts),\n consumed: column(challengeTable, challengeColumns.consumed),\n } as Record<string, SQLiteColumn>;\n\n const registrationTable = mapping.registration.table;\n const registrationColumns = mapping.registration.columns;\n\n const registration = {\n tokenDigest: column(registrationTable, registrationColumns.tokenDigest),\n expiresAt: column(registrationTable, registrationColumns.expiresAt),\n consumed: column(registrationTable, registrationColumns.consumed),\n } as Record<string, SQLiteColumn>;\n\n const issueChallenge = Effect.fn(\"DrizzleSqliteAuthStore.issueChallenge\")(function* (\n input: NewChallenge,\n ) {\n const now = yield* DateTime.now;\n\n const cooldownCutoff = DateTime.mapEpochMillis(\n now,\n (millis) => millis - Duration.toMillis(input.resendCooldown),\n );\n\n const rows = (yield* Effect.suspend(() => {\n const values = mapping.challenge.encodeInsert(input, {\n namespace: mapping.challenge.identifierNamespace,\n failedAttempts: 0,\n consumed: false,\n });\n\n const nativeNow = mapping.challenge.encodeInstant(now);\n const nativeCutoff = mapping.challenge.encodeInstant(cooldownCutoff);\n const nativeIssuedAt = mapping.challenge.encodeInstant(input.issuedAt);\n const preservedAttempts = sql`case when ${gt(challenge.expiresAt, nativeNow)} then ${challenge.failedAttempts} else 0 end`;\n\n const update = mapping.challenge.encodeUpdate(input, {\n namespace: mapping.challenge.identifierNamespace,\n failedAttempts: preservedAttempts as any,\n consumed: false,\n });\n\n return db\n .insert(challengeTable as any)\n .values(values as any)\n .onConflictDoUpdate({\n target: [challenge.namespace, challenge.value, challenge.purpose],\n set: update as any,\n setWhere: and(\n ne(challenge.challengeId, input.challengeId),\n lt(challenge.issuedAt, nativeIssuedAt),\n or(eq(challenge.consumed, true), lte(challenge.issuedAt, nativeCutoff)),\n ),\n })\n .returning();\n }).pipe(mapStoreWriteFailure)) as ReadonlyArray<unknown>;\n\n if (rows.length > 0) return;\n\n const existing = (yield* Effect.suspend(() =>\n db\n .select()\n .from(challengeTable as any)\n .where(\n and(\n eq(challenge.namespace, mapping.challenge.identifierNamespace),\n eq(challenge.value, input.email),\n eq(challenge.purpose, input.purpose),\n ),\n )\n .limit(1),\n ).pipe(mapStoreReadFailure)) as ReadonlyArray<unknown>;\n\n const decoded =\n existing[0] === undefined\n ? undefined\n : yield* Effect.suspend(() => mapping.challenge.decode(selected<C>(existing[0]))).pipe(\n mapStoreReadFailure,\n );\n\n const retryAfterSeconds =\n decoded === undefined\n ? Math.max(1, Math.ceil(Duration.toMillis(input.resendCooldown) / 1000))\n : Math.max(\n 1,\n Math.ceil(\n (DateTime.toEpochMillis(decoded.challenge.issuedAt) +\n Duration.toMillis(input.resendCooldown) -\n DateTime.toEpochMillis(now)) /\n 1000,\n ),\n );\n\n return yield* AuthRateLimited.make({ retryAfterSeconds });\n });\n\n const consumeChallengeDecision = Effect.fn(\"DrizzleSqliteAuthStore.consumeChallengeDecision\")(\n function* (\n input: ConsumeChallenge,\n ): Effect.fn.Return<ChallengeConsumeDecision, AuthStoreError> {\n const now = yield* DateTime.now;\n\n const alternatives = Object.entries(input.otpDigests).map(([keyId, digest]) =>\n and(eq(challenge.otpKeyId, keyId), eq(challenge.otpDigest, digest)),\n );\n\n const matches = alternatives.length === 0 ? sql<boolean>`false` : or(...alternatives)!;\n\n const rows = (yield* Effect.suspend(() =>\n db\n .update(challengeTable as any)\n .set(\n updateValues<C>([\n [\n challengeColumns.consumed,\n sql`case when ${matches} then true else ${challenge.consumed} end`,\n ],\n [\n challengeColumns.failedAttempts,\n sql`${challenge.failedAttempts} + case when ${matches} then 0 else 1 end`,\n ],\n ]) as any,\n )\n .where(\n and(\n eq(challenge.tokenDigest, input.tokenDigest),\n eq(challenge.consumed, false),\n gt(challenge.expiresAt, mapping.challenge.encodeInstant(now)),\n sql`${challenge.failedAttempts} < ${challenge.attemptLimit}`,\n ),\n )\n .returning(),\n ).pipe(mapStoreWriteFailure)) as ReadonlyArray<unknown>;\n\n if (rows[0] === undefined) {\n return { _tag: \"rejected\", reason: \"missing_challenge\" };\n }\n\n const decoded = yield* Effect.suspend(() =>\n mapping.challenge.decode(selected<C>(rows[0])),\n ).pipe(mapStoreReadFailure);\n\n if (!decoded.consumed) return { _tag: \"rejected\", reason: \"bad_code\" };\n\n return {\n _tag: \"accepted\",\n value: VerifiedEmail.make({\n email: decoded.challenge.email,\n purpose: decoded.challenge.purpose,\n }),\n };\n },\n );\n\n const consumeChallenge = Effect.fn(\"DrizzleSqliteAuthStore.consumeChallenge\")(function* (\n input: ConsumeChallenge,\n ) {\n yield* requireStandalone;\n const decision = yield* consumeChallengeDecision(input);\n\n return decision._tag === \"accepted\"\n ? decision.value\n : yield* EmailOtpRejected.make({ reason: decision.reason });\n });\n\n const issueRegistration = Effect.fn(\"DrizzleSqliteAuthStore.issueRegistration\")(function* (\n input: NewRegistration,\n ) {\n yield* Effect.suspend(() =>\n db\n .insert(registrationTable as any)\n .values(mapping.registration.encodeInsert(input, false) as any),\n ).pipe(mapStoreWriteFailure);\n });\n\n const inspectRegistration = Effect.fn(\"DrizzleSqliteAuthStore.inspectRegistration\")(function* (\n tokenDigest: TokenDigest,\n ) {\n const now = yield* DateTime.now;\n\n const rows = (yield* Effect.suspend(() =>\n db\n .select()\n .from(registrationTable as any)\n .where(\n and(\n eq(registration.tokenDigest, tokenDigest),\n eq(registration.consumed, false),\n gt(registration.expiresAt, mapping.registration.encodeInstant(now)),\n ),\n )\n .limit(1),\n ).pipe(mapStoreReadFailure)) as ReadonlyArray<unknown>;\n\n if (rows[0] === undefined) return yield* InvalidRegistration.make();\n\n const decoded = yield* Effect.suspend(() =>\n mapping.registration.decode(selected<R>(rows[0])),\n ).pipe(mapStoreReadFailure);\n\n return decoded.registration;\n });\n\n const consumeRegistrationDecision = Effect.fn(\n \"DrizzleSqliteAuthStore.consumeRegistrationDecision\",\n )(function* (\n input: ConsumeRegistration,\n ): Effect.fn.Return<ConsumeDecision<void>, AuthStoreError> {\n const now = yield* DateTime.now;\n\n const rows = (yield* Effect.suspend(() =>\n db\n .update(registrationTable as any)\n .set(updateValues<R>([[registrationColumns.consumed, true]]) as any)\n .where(\n and(\n eq(registration.tokenDigest, input.tokenDigest),\n eq(registration.consumed, false),\n gt(registration.expiresAt, mapping.registration.encodeInstant(now)),\n ),\n )\n .returning({ consumed: registration.consumed }),\n ).pipe(mapStoreWriteFailure)) as ReadonlyArray<unknown>;\n\n return rows.length === 0 ? { _tag: \"rejected\" } : { _tag: \"accepted\", value: undefined };\n });\n\n const consumeRegistration = Effect.fn(\"DrizzleSqliteAuthStore.consumeRegistration\")(function* (\n input: ConsumeRegistration,\n ) {\n yield* requireStandalone;\n const decision = yield* consumeRegistrationDecision(input);\n\n if (decision._tag === \"rejected\") return yield* InvalidRegistration.make();\n });\n\n return {\n authStore: AuthStore.of({\n issueChallenge,\n consumeChallenge,\n issueRegistration,\n inspectRegistration,\n consumeRegistration,\n }),\n decisions: {\n consumeChallenge: consumeChallengeDecision,\n consumeRegistration: consumeRegistrationDecision,\n },\n } as const;\n};\n\nexport const makeSqliteOAuthStateServices = <\n S extends AnySQLiteTable,\n HKT extends ClosedQueryEffectHKT = ClosedQueryEffectHKT,\n RunResult = unknown,\n>(\n database: SQLiteEffectDatabase<HKT, RunResult, AnyRelations>,\n mapping: OAuthStateTables<S>,\n standaloneGuard?: Effect.Effect<void, AuthStoreError>,\n) => {\n const db = database as RuntimeDatabase<HKT, RunResult>;\n\n const requireStandalone =\n standaloneGuard ??\n Effect.suspend(() =>\n db.$client === undefined\n ? AuthStoreError.make({ message: \"Use a root auth store or its decision transaction API\" })\n : requireStandaloneConsume({ $client: db.$client }),\n );\n\n const stateTable = mapping.oauthState.table;\n const stateColumns = mapping.oauthState.columns;\n\n const state = {\n stateDigest: column(stateTable, stateColumns.stateDigest),\n expiresAt: column(stateTable, stateColumns.expiresAt),\n consumed: column(stateTable, stateColumns.consumed),\n } as Record<string, SQLiteColumn>;\n\n const issue = Effect.fn(\"DrizzleSqliteOAuthStateStore.issue\")(function* (input: OAuthState) {\n yield* Effect.suspend(() =>\n db.insert(stateTable as any).values(mapping.oauthState.encodeInsert(input, false) as any),\n ).pipe(mapStoreWriteFailure);\n });\n\n const consumeDecision = Effect.fn(\"DrizzleSqliteOAuthStateStore.consumeDecision\")(function* (\n digest: TokenDigest,\n ): Effect.fn.Return<ConsumeDecision<OAuthState>, AuthStoreError> {\n const now = yield* DateTime.now;\n\n const rows = (yield* Effect.suspend(() =>\n db\n .update(stateTable as any)\n .set(updateValues<S>([[stateColumns.consumed, true]]) as any)\n .where(\n and(\n eq(state.stateDigest, digest),\n eq(state.consumed, false),\n gt(state.expiresAt, mapping.oauthState.encodeInstant(now)),\n ),\n )\n .returning(),\n ).pipe(mapStoreWriteFailure)) as ReadonlyArray<unknown>;\n\n if (rows[0] === undefined) return { _tag: \"rejected\" };\n\n const decoded = yield* Effect.suspend(() =>\n mapping.oauthState.decode(selected<S>(rows[0])),\n ).pipe(mapStoreReadFailure);\n\n return { _tag: \"accepted\", value: decoded.state };\n });\n\n const consume = Effect.fn(\"DrizzleSqliteOAuthStateStore.consume\")(function* (\n digest: TokenDigest,\n ) {\n yield* requireStandalone;\n const decision = yield* consumeDecision(digest);\n\n return decision._tag === \"accepted\" ? decision.value : yield* InvalidOAuthState.make();\n });\n\n return {\n oauthStateStore: OAuthStateStore.of({ issue, consume }),\n decisions: { consumeOAuthState: consumeDecision },\n } as const;\n};\n\nexport const makeSqliteAuthServices = <\n C extends AnySQLiteTable,\n R extends AnySQLiteTable,\n S extends AnySQLiteTable,\n HKT extends ClosedQueryEffectHKT = ClosedQueryEffectHKT,\n RunResult = unknown,\n>(\n database: SQLiteEffectDatabase<HKT, RunResult, AnyRelations>,\n mapping: AuthTables<C, R, S>,\n standaloneGuard?: Effect.Effect<void, AuthStoreError>,\n) => {\n const auth = makeSqliteAuthStoreServices(database, mapping, standaloneGuard);\n const oauth = makeSqliteOAuthStateServices(database, mapping, standaloneGuard);\n\n return { ...auth, ...oauth, decisions: { ...auth.decisions, ...oauth.decisions } } as const;\n};\n\n/**\n * Owns the native outer commit for interactive SQLite targets. Keep rejection\n * as a decision value inside the owner; interruption before commit rolls back.\n */\nexport function coordinateSqliteAuthStoreTransaction<\n D extends AnyDatabase,\n C extends AnySQLiteTable,\n R extends AnySQLiteTable,\n A,\n E,\n Requirements,\n DatabaseError,\n DatabaseRequirements,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: { readonly mapping: AuthStoreTables<C, R>; readonly transaction?: never },\n body: Effect.Effect<A, E, Requirements>,\n): Effect.Effect<\n A,\n E | DatabaseError | SqlError,\n Exclude<Requirements, AuthStoreDecisions> | DatabaseRequirements\n>;\n\nexport function coordinateSqliteAuthStoreTransaction<\n D extends AnyDatabase,\n C extends AnySQLiteTable,\n R extends AnySQLiteTable,\n A,\n E,\n Requirements,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: AuthStoreTables<C, R>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;\n },\n body: Effect.Effect<A, E, Requirements>,\n): Effect.Effect<\n A,\n E | DatabaseError | SqlError,\n Exclude<Requirements, AuthStoreDecisions | TxId> | DatabaseRequirements\n>;\n\nexport function coordinateSqliteAuthStoreTransaction<\n D extends AnyDatabase,\n C extends AnySQLiteTable,\n R extends AnySQLiteTable,\n A,\n E,\n Requirements,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: AuthStoreTables<C, R>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;\n },\n body: Effect.Effect<A, E, Requirements>,\n) {\n return Effect.flatMap(acquire, (database) =>\n database.transaction<A, E, Exclude<Requirements, AuthStoreDecisions>>((transaction) => {\n const decisions = makeSqliteAuthStoreServices(transaction, options.mapping).decisions;\n const provided = Context.make(AuthStoreDecisions, decisions);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(\n work,\n options.transaction,\n options.transaction.of(transaction as TransactionOf<D>),\n );\n }),\n );\n}\n\nexport function coordinateSqliteOAuthStateTransaction<\n D extends AnyDatabase,\n S extends AnySQLiteTable,\n A,\n E,\n Requirements,\n DatabaseError,\n DatabaseRequirements,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: { readonly mapping: OAuthStateTables<S>; readonly transaction?: never },\n body: Effect.Effect<A, E, Requirements>,\n): Effect.Effect<\n A,\n E | DatabaseError | SqlError,\n Exclude<Requirements, OAuthStateDecisions> | DatabaseRequirements\n>;\n\nexport function coordinateSqliteOAuthStateTransaction<\n D extends AnyDatabase,\n S extends AnySQLiteTable,\n A,\n E,\n Requirements,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: OAuthStateTables<S>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;\n },\n body: Effect.Effect<A, E, Requirements>,\n): Effect.Effect<\n A,\n E | DatabaseError | SqlError,\n Exclude<Requirements, OAuthStateDecisions | TxId> | DatabaseRequirements\n>;\n\nexport function coordinateSqliteOAuthStateTransaction<\n D extends AnyDatabase,\n S extends AnySQLiteTable,\n A,\n E,\n Requirements,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: OAuthStateTables<S>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;\n },\n body: Effect.Effect<A, E, Requirements>,\n) {\n return Effect.flatMap(acquire, (database) =>\n database.transaction<A, E, Exclude<Requirements, OAuthStateDecisions>>((transaction) => {\n const decisions = makeSqliteOAuthStateServices(transaction, options.mapping).decisions;\n const provided = Context.make(OAuthStateDecisions, decisions);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(\n work,\n options.transaction,\n options.transaction.of(transaction as TransactionOf<D>),\n );\n }),\n );\n}\n\nexport function coordinateSqliteAuthTransaction<\n D extends AnyDatabase,\n C extends AnySQLiteTable,\n R extends AnySQLiteTable,\n S extends AnySQLiteTable,\n A,\n E,\n Requirements,\n DatabaseError,\n DatabaseRequirements,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: { readonly mapping: AuthTables<C, R, S>; readonly transaction?: never },\n body: Effect.Effect<A, E, Requirements>,\n): Effect.Effect<\n A,\n E | DatabaseError | SqlError,\n Exclude<Requirements, AuthStoreDecisions | OAuthStateDecisions> | DatabaseRequirements\n>;\n\nexport function coordinateSqliteAuthTransaction<\n D extends AnyDatabase,\n C extends AnySQLiteTable,\n R extends AnySQLiteTable,\n S extends AnySQLiteTable,\n A,\n E,\n Requirements,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: AuthTables<C, R, S>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;\n },\n body: Effect.Effect<A, E, Requirements>,\n): Effect.Effect<\n A,\n E | DatabaseError | SqlError,\n Exclude<Requirements, AuthStoreDecisions | OAuthStateDecisions | TxId> | DatabaseRequirements\n>;\n\nexport function coordinateSqliteAuthTransaction<\n D extends AnyDatabase,\n C extends AnySQLiteTable,\n R extends AnySQLiteTable,\n S extends AnySQLiteTable,\n A,\n E,\n Requirements,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: AuthTables<C, R, S>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;\n },\n body: Effect.Effect<A, E, Requirements>,\n) {\n return Effect.flatMap(acquire, (database) =>\n database.transaction<A, E, Exclude<Requirements, AuthStoreDecisions | OAuthStateDecisions>>(\n (transaction) => {\n const decisions = makeSqliteAuthServices(transaction, options.mapping).decisions;\n\n const provided = Context.make(AuthStoreDecisions, decisions).pipe(\n Context.add(OAuthStateDecisions, decisions),\n );\n\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(\n work,\n options.transaction,\n options.transaction.of(transaction as TransactionOf<D>),\n );\n },\n ),\n );\n}\n"],"mappings":";;;;;;;;;;;;AAyDA,MAAM,uBAAuB,eAAe,KAAK,EAAE,SAAS,yBAAyB,CAAC;AACtF,MAAM,wBAAwB,eAAe,KAAK,EAAE,SAAS,0BAA0B,CAAC;AACxF,MAAM,iBAAiB,OAAO,GAAG,cAAc;AAE/C,MAAM,mBACH,aACS,WACR,yBAAyB,QAAQ,cAAc,CAAC,CAAC,KAC/C,OAAO,YAAY,UAAU,OAAO,UAAU,MAAM,IAAI,OAAO,OAAO,CAAC,CAAC,CAC1E;AAEJ,MAAM,sBAAsB,gBAAgB,cAAc;AAC1D,MAAM,uBAAuB,gBAAgB,eAAe;AAE5D,MAAM,YAAsC,QAC1C;;;;;;;AAQF,MAAa,+BAMX,UACA,SACA,oBACG;CACH,MAAM,KAAK;CAEX,MAAM,oBACJ,mBACA,OAAO,cACL,GAAG,YAAY,KAAA,IACX,eAAe,KAAK,EAAE,SAAS,wDAAwD,CAAC,IACxF,yBAAyB,EAAE,SAAS,GAAG,QAAQ,CAAC,CACtD;CAEF,MAAM,iBAAiB,QAAQ,UAAU;CACzC,MAAM,mBAAmB,QAAQ,UAAU;CAE3C,MAAM,YAAY;EAChB,aAAa,OAAO,gBAAgB,iBAAiB,WAAW;EAChE,aAAa,OAAO,gBAAgB,iBAAiB,WAAW;EAChE,WAAW,OAAO,gBAAgB,iBAAiB,SAAS;EAC5D,OAAO,OAAO,gBAAgB,iBAAiB,KAAK;EACpD,SAAS,OAAO,gBAAgB,iBAAiB,OAAO;EACxD,UAAU,OAAO,gBAAgB,iBAAiB,QAAQ;EAC1D,WAAW,OAAO,gBAAgB,iBAAiB,SAAS;EAC5D,UAAU,OAAO,gBAAgB,iBAAiB,QAAQ;EAC1D,WAAW,OAAO,gBAAgB,iBAAiB,SAAS;EAC5D,cAAc,OAAO,gBAAgB,iBAAiB,YAAY;EAClE,gBAAgB,OAAO,gBAAgB,iBAAiB,cAAc;EACtE,UAAU,OAAO,gBAAgB,iBAAiB,QAAQ;CAC5D;CAEA,MAAM,oBAAoB,QAAQ,aAAa;CAC/C,MAAM,sBAAsB,QAAQ,aAAa;CAEjD,MAAM,eAAe;EACnB,aAAa,OAAO,mBAAmB,oBAAoB,WAAW;EACtE,WAAW,OAAO,mBAAmB,oBAAoB,SAAS;EAClE,UAAU,OAAO,mBAAmB,oBAAoB,QAAQ;CAClE;CAEA,MAAM,iBAAiB,OAAO,GAAG,uCAAuC,CAAC,CAAC,WACxE,OACA;EACA,MAAM,MAAM,OAAO,SAAS;EAE5B,MAAM,iBAAiB,SAAS,eAC9B,MACC,WAAW,SAAS,SAAS,SAAS,MAAM,cAAc,CAC7D;EAmCA,KAAI,OAjCiB,OAAO,cAAc;GACxC,MAAM,SAAS,QAAQ,UAAU,aAAa,OAAO;IACnD,WAAW,QAAQ,UAAU;IAC7B,gBAAgB;IAChB,UAAU;GACZ,CAAC;GAED,MAAM,YAAY,QAAQ,UAAU,cAAc,GAAG;GACrD,MAAM,eAAe,QAAQ,UAAU,cAAc,cAAc;GACnE,MAAM,iBAAiB,QAAQ,UAAU,cAAc,MAAM,QAAQ;GACrE,MAAM,oBAAoB,GAAG,aAAa,GAAG,UAAU,WAAW,SAAS,EAAE,QAAQ,UAAU,eAAe;GAE9G,MAAM,SAAS,QAAQ,UAAU,aAAa,OAAO;IACnD,WAAW,QAAQ,UAAU;IAC7B,gBAAgB;IAChB,UAAU;GACZ,CAAC;GAED,OAAO,GACJ,OAAO,cAAqB,CAAC,CAC7B,OAAO,MAAa,CAAC,CACrB,mBAAmB;IAClB,QAAQ;KAAC,UAAU;KAAW,UAAU;KAAO,UAAU;IAAO;IAChE,KAAK;IACL,UAAU,IACR,GAAG,UAAU,aAAa,MAAM,WAAW,GAC3C,GAAG,UAAU,UAAU,cAAc,GACrC,GAAG,GAAG,UAAU,UAAU,IAAI,GAAG,IAAI,UAAU,UAAU,YAAY,CAAC,CACxE;GACF,CAAC,CAAC,CACD,UAAU;EACf,CAAC,CAAC,CAAC,KAAK,oBAAoB,EAAA,CAEnB,SAAS,GAAG;EAErB,MAAM,WAAY,OAAO,OAAO,cAC9B,GACG,OAAO,CAAC,CACR,KAAK,cAAqB,CAAC,CAC3B,MACC,IACE,GAAG,UAAU,WAAW,QAAQ,UAAU,mBAAmB,GAC7D,GAAG,UAAU,OAAO,MAAM,KAAK,GAC/B,GAAG,UAAU,SAAS,MAAM,OAAO,CACrC,CACF,CAAC,CACA,MAAM,CAAC,CACZ,CAAC,CAAC,KAAK,mBAAmB;EAE1B,MAAM,UACJ,SAAS,OAAO,KAAA,IACZ,KAAA,IACA,OAAO,OAAO,cAAc,QAAQ,UAAU,OAAO,SAAY,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,KAC9E,mBACF;EAEN,MAAM,oBACJ,YAAY,KAAA,IACR,KAAK,IAAI,GAAG,KAAK,KAAK,SAAS,SAAS,MAAM,cAAc,IAAI,GAAI,CAAC,IACrE,KAAK,IACH,GACA,KAAK,MACF,SAAS,cAAc,QAAQ,UAAU,QAAQ,IAChD,SAAS,SAAS,MAAM,cAAc,IACtC,SAAS,cAAc,GAAG,KAC1B,GACJ,CACF;EAEN,OAAO,OAAO,gBAAgB,KAAK,EAAE,kBAAkB,CAAC;CAC1D,CAAC;CAED,MAAM,2BAA2B,OAAO,GAAG,iDAAiD,CAAC,CAC3F,WACE,OAC4D;EAC5D,MAAM,MAAM,OAAO,SAAS;EAE5B,MAAM,eAAe,OAAO,QAAQ,MAAM,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,YACjE,IAAI,GAAG,UAAU,UAAU,KAAK,GAAG,GAAG,UAAU,WAAW,MAAM,CAAC,CACpE;EAEA,MAAM,UAAU,aAAa,WAAW,IAAI,GAAY,UAAU,GAAG,GAAG,YAAY;EAEpF,MAAM,OAAQ,OAAO,OAAO,cAC1B,GACG,OAAO,cAAqB,CAAC,CAC7B,IACC,aAAgB,CACd,CACE,iBAAiB,UACjB,GAAG,aAAa,QAAQ,kBAAkB,UAAU,SAAS,KAC/D,GACA,CACE,iBAAiB,gBACjB,GAAG,GAAG,UAAU,eAAe,eAAe,QAAQ,mBACxD,CACF,CAAC,CACH,CAAC,CACA,MACC,IACE,GAAG,UAAU,aAAa,MAAM,WAAW,GAC3C,GAAG,UAAU,UAAU,KAAK,GAC5B,GAAG,UAAU,WAAW,QAAQ,UAAU,cAAc,GAAG,CAAC,GAC5D,GAAG,GAAG,UAAU,eAAe,KAAK,UAAU,cAChD,CACF,CAAC,CACA,UAAU,CACf,CAAC,CAAC,KAAK,oBAAoB;EAE3B,IAAI,KAAK,OAAO,KAAA,GACd,OAAO;GAAE,MAAM;GAAY,QAAQ;EAAoB;EAGzD,MAAM,UAAU,OAAO,OAAO,cAC5B,QAAQ,UAAU,OAAO,SAAY,KAAK,EAAE,CAAC,CAC/C,CAAC,CAAC,KAAK,mBAAmB;EAE1B,IAAI,CAAC,QAAQ,UAAU,OAAO;GAAE,MAAM;GAAY,QAAQ;EAAW;EAErE,OAAO;GACL,MAAM;GACN,OAAO,cAAc,KAAK;IACxB,OAAO,QAAQ,UAAU;IACzB,SAAS,QAAQ,UAAU;GAC7B,CAAC;EACH;CACF,CACF;CAEA,MAAM,mBAAmB,OAAO,GAAG,yCAAyC,CAAC,CAAC,WAC5E,OACA;EACA,OAAO;EACP,MAAM,WAAW,OAAO,yBAAyB,KAAK;EAEtD,OAAO,SAAS,SAAS,aACrB,SAAS,QACT,OAAO,iBAAiB,KAAK,EAAE,QAAQ,SAAS,OAAO,CAAC;CAC9D,CAAC;CAED,MAAM,oBAAoB,OAAO,GAAG,0CAA0C,CAAC,CAAC,WAC9E,OACA;EACA,OAAO,OAAO,cACZ,GACG,OAAO,iBAAwB,CAAC,CAChC,OAAO,QAAQ,aAAa,aAAa,OAAO,KAAK,CAAQ,CAClE,CAAC,CAAC,KAAK,oBAAoB;CAC7B,CAAC;CAED,MAAM,sBAAsB,OAAO,GAAG,4CAA4C,CAAC,CAAC,WAClF,aACA;EACA,MAAM,MAAM,OAAO,SAAS;EAE5B,MAAM,OAAQ,OAAO,OAAO,cAC1B,GACG,OAAO,CAAC,CACR,KAAK,iBAAwB,CAAC,CAC9B,MACC,IACE,GAAG,aAAa,aAAa,WAAW,GACxC,GAAG,aAAa,UAAU,KAAK,GAC/B,GAAG,aAAa,WAAW,QAAQ,aAAa,cAAc,GAAG,CAAC,CACpE,CACF,CAAC,CACA,MAAM,CAAC,CACZ,CAAC,CAAC,KAAK,mBAAmB;EAE1B,IAAI,KAAK,OAAO,KAAA,GAAW,OAAO,OAAO,oBAAoB,KAAK;EAMlE,QAAO,OAJgB,OAAO,cAC5B,QAAQ,aAAa,OAAO,SAAY,KAAK,EAAE,CAAC,CAClD,CAAC,CAAC,KAAK,mBAAmB,EAAA,CAEX;CACjB,CAAC;CAED,MAAM,8BAA8B,OAAO,GACzC,oDACF,CAAC,CAAC,WACA,OACyD;EACzD,MAAM,MAAM,OAAO,SAAS;EAgB5B,QAAO,OAdc,OAAO,cAC1B,GACG,OAAO,iBAAwB,CAAC,CAChC,IAAI,aAAgB,CAAC,CAAC,oBAAoB,UAAU,IAAI,CAAC,CAAC,CAAQ,CAAC,CACnE,MACC,IACE,GAAG,aAAa,aAAa,MAAM,WAAW,GAC9C,GAAG,aAAa,UAAU,KAAK,GAC/B,GAAG,aAAa,WAAW,QAAQ,aAAa,cAAc,GAAG,CAAC,CACpE,CACF,CAAC,CACA,UAAU,EAAE,UAAU,aAAa,SAAS,CAAC,CAClD,CAAC,CAAC,KAAK,oBAAoB,EAAA,CAEf,WAAW,IAAI,EAAE,MAAM,WAAW,IAAI;GAAE,MAAM;GAAY,OAAO,KAAA;EAAU;CACzF,CAAC;CAED,MAAM,sBAAsB,OAAO,GAAG,4CAA4C,CAAC,CAAC,WAClF,OACA;EACA,OAAO;EAGP,KAAI,OAFoB,4BAA4B,KAAK,EAAA,CAE5C,SAAS,YAAY,OAAO,OAAO,oBAAoB,KAAK;CAC3E,CAAC;CAED,OAAO;EACL,WAAW,UAAU,GAAG;GACtB;GACA;GACA;GACA;GACA;EACF,CAAC;EACD,WAAW;GACT,kBAAkB;GAClB,qBAAqB;EACvB;CACF;AACF;AAEA,MAAa,gCAKX,UACA,SACA,oBACG;CACH,MAAM,KAAK;CAEX,MAAM,oBACJ,mBACA,OAAO,cACL,GAAG,YAAY,KAAA,IACX,eAAe,KAAK,EAAE,SAAS,wDAAwD,CAAC,IACxF,yBAAyB,EAAE,SAAS,GAAG,QAAQ,CAAC,CACtD;CAEF,MAAM,aAAa,QAAQ,WAAW;CACtC,MAAM,eAAe,QAAQ,WAAW;CAExC,MAAM,QAAQ;EACZ,aAAa,OAAO,YAAY,aAAa,WAAW;EACxD,WAAW,OAAO,YAAY,aAAa,SAAS;EACpD,UAAU,OAAO,YAAY,aAAa,QAAQ;CACpD;CAEA,MAAM,QAAQ,OAAO,GAAG,oCAAoC,CAAC,CAAC,WAAW,OAAmB;EAC1F,OAAO,OAAO,cACZ,GAAG,OAAO,UAAiB,CAAC,CAAC,OAAO,QAAQ,WAAW,aAAa,OAAO,KAAK,CAAQ,CAC1F,CAAC,CAAC,KAAK,oBAAoB;CAC7B,CAAC;CAED,MAAM,kBAAkB,OAAO,GAAG,8CAA8C,CAAC,CAAC,WAChF,QAC+D;EAC/D,MAAM,MAAM,OAAO,SAAS;EAE5B,MAAM,OAAQ,OAAO,OAAO,cAC1B,GACG,OAAO,UAAiB,CAAC,CACzB,IAAI,aAAgB,CAAC,CAAC,aAAa,UAAU,IAAI,CAAC,CAAC,CAAQ,CAAC,CAC5D,MACC,IACE,GAAG,MAAM,aAAa,MAAM,GAC5B,GAAG,MAAM,UAAU,KAAK,GACxB,GAAG,MAAM,WAAW,QAAQ,WAAW,cAAc,GAAG,CAAC,CAC3D,CACF,CAAC,CACA,UAAU,CACf,CAAC,CAAC,KAAK,oBAAoB;EAE3B,IAAI,KAAK,OAAO,KAAA,GAAW,OAAO,EAAE,MAAM,WAAW;EAMrD,OAAO;GAAE,MAAM;GAAY,QAAO,OAJX,OAAO,cAC5B,QAAQ,WAAW,OAAO,SAAY,KAAK,EAAE,CAAC,CAChD,CAAC,CAAC,KAAK,mBAAmB,EAAA,CAEgB;EAAM;CAClD,CAAC;CAED,MAAM,UAAU,OAAO,GAAG,sCAAsC,CAAC,CAAC,WAChE,QACA;EACA,OAAO;EACP,MAAM,WAAW,OAAO,gBAAgB,MAAM;EAE9C,OAAO,SAAS,SAAS,aAAa,SAAS,QAAQ,OAAO,kBAAkB,KAAK;CACvF,CAAC;CAED,OAAO;EACL,iBAAiB,gBAAgB,GAAG;GAAE;GAAO;EAAQ,CAAC;EACtD,WAAW,EAAE,mBAAmB,gBAAgB;CAClD;AACF;AAEA,MAAa,0BAOX,UACA,SACA,oBACG;CACH,MAAM,OAAO,4BAA4B,UAAU,SAAS,eAAe;CAC3E,MAAM,QAAQ,6BAA6B,UAAU,SAAS,eAAe;CAE7E,OAAO;EAAE,GAAG;EAAM,GAAG;EAAO,WAAW;GAAE,GAAG,KAAK;GAAW,GAAG,MAAM;EAAU;CAAE;AACnF;AAiDA,SAAgB,qCAYd,SACA,SAIA,MACA;CACA,OAAO,OAAO,QAAQ,UAAU,aAC9B,SAAS,aAA8D,gBAAgB;EACrF,MAAM,YAAY,4BAA4B,aAAa,QAAQ,OAAO,CAAC,CAAC;EAC5E,MAAM,WAAW,QAAQ,KAAK,oBAAoB,SAAS;EAC3D,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;EAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eACL,MACA,QAAQ,aACR,QAAQ,YAAY,GAAG,WAA+B,CACxD;CACN,CAAC,CACH;AACF;AA2CA,SAAgB,sCAWd,SACA,SAIA,MACA;CACA,OAAO,OAAO,QAAQ,UAAU,aAC9B,SAAS,aAA+D,gBAAgB;EACtF,MAAM,YAAY,6BAA6B,aAAa,QAAQ,OAAO,CAAC,CAAC;EAC7E,MAAM,WAAW,QAAQ,KAAK,qBAAqB,SAAS;EAC5D,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;EAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eACL,MACA,QAAQ,aACR,QAAQ,YAAY,GAAG,WAA+B,CACxD;CACN,CAAC,CACH;AACF;AA+CA,SAAgB,gCAad,SACA,SAIA,MACA;CACA,OAAO,OAAO,QAAQ,UAAU,aAC9B,SAAS,aACN,gBAAgB;EACf,MAAM,YAAY,uBAAuB,aAAa,QAAQ,OAAO,CAAC,CAAC;EAEvE,MAAM,WAAW,QAAQ,KAAK,oBAAoB,SAAS,CAAC,CAAC,KAC3D,QAAQ,IAAI,qBAAqB,SAAS,CAC5C;EAEA,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;EAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eACL,MACA,QAAQ,aACR,QAAQ,YAAY,GAAG,WAA+B,CACxD;CACN,CACF,CACF;AACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Context, Effect, Option, Predicate } from "effect";
|
|
2
|
+
//#region src/drizzle/standalone-guard.ts
|
|
3
|
+
const transactionService = (database) => {
|
|
4
|
+
if (!Predicate.hasProperty(database, "$client") || !Predicate.hasProperty(database.$client, "transactionService") || !Context.isKey(database.$client.transactionService)) return;
|
|
5
|
+
return database.$client.transactionService;
|
|
6
|
+
};
|
|
7
|
+
/** Bind the client-specific transaction marker at foreign adapter construction. */
|
|
8
|
+
const sqlClientStandaloneGuard = (database, unavailable) => {
|
|
9
|
+
const service = transactionService(database);
|
|
10
|
+
if (service === void 0) return Effect.suspend(() => Effect.fail(unavailable()));
|
|
11
|
+
return Effect.serviceOption(service).pipe(Effect.flatMap(Option.match({
|
|
12
|
+
onNone: () => Effect.void,
|
|
13
|
+
onSome: () => Effect.fail(unavailable())
|
|
14
|
+
})));
|
|
15
|
+
};
|
|
16
|
+
//#endregion
|
|
17
|
+
export { sqlClientStandaloneGuard };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=standalone-guard.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone-guard.mjs","names":[],"sources":["../../src/drizzle/standalone-guard.ts"],"sourcesContent":["import { Context, Effect, Option, Predicate } from \"effect\";\nimport type * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\ntype TransactionService = Context.Key<\n SqlClient.TransactionConnection,\n SqlClient.TransactionConnection.Service\n>;\n\nconst transactionService = (database: unknown): TransactionService | undefined => {\n if (\n !Predicate.hasProperty(database, \"$client\") ||\n !Predicate.hasProperty(database.$client, \"transactionService\") ||\n !Context.isKey(database.$client.transactionService)\n ) {\n return undefined;\n }\n\n return database.$client.transactionService;\n};\n\n/** Bind the client-specific transaction marker at foreign adapter construction. */\nexport const sqlClientStandaloneGuard = <Failure>(\n database: unknown,\n unavailable: () => Failure,\n): Effect.Effect<void, Failure> => {\n const service = transactionService(database);\n\n if (service === undefined) return Effect.suspend(() => Effect.fail(unavailable()));\n\n return Effect.serviceOption(service).pipe(\n Effect.flatMap(\n Option.match({\n onNone: () => Effect.void,\n onSome: () => Effect.fail(unavailable()),\n }),\n ),\n );\n};\n"],"mappings":";;AAQA,MAAM,sBAAsB,aAAsD;CAChF,IACE,CAAC,UAAU,YAAY,UAAU,SAAS,KAC1C,CAAC,UAAU,YAAY,SAAS,SAAS,oBAAoB,KAC7D,CAAC,QAAQ,MAAM,SAAS,QAAQ,kBAAkB,GAElD;CAGF,OAAO,SAAS,QAAQ;AAC1B;;AAGA,MAAa,4BACX,UACA,gBACiC;CACjC,MAAM,UAAU,mBAAmB,QAAQ;CAE3C,IAAI,YAAY,KAAA,GAAW,OAAO,OAAO,cAAc,OAAO,KAAK,YAAY,CAAC,CAAC;CAEjF,OAAO,OAAO,cAAc,OAAO,CAAC,CAAC,KACnC,OAAO,QACL,OAAO,MAAM;EACX,cAAc,OAAO;EACrB,cAAc,OAAO,KAAK,YAAY,CAAC;CACzC,CAAC,CACH,CACF;AACF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { SecurityRevision } from "../sessions/models.mjs";
|
|
2
|
+
import { SessionStepUpIntent } from "../sessions/SessionStepUpPersistence.mjs";
|
|
3
|
+
import { DrizzleMappingError } from "./model.mjs";
|
|
4
|
+
import { D1SessionClockMapping, SessionAuthorityTables, SessionConstraintClassifier, SessionIdCodec, SignedSessionValidityTables, StatefulSessionTables } from "./session-model.mjs";
|
|
5
|
+
import { DateTime, Effect } from "effect";
|
|
6
|
+
import { InferInsertModel, Table } from "drizzle-orm";
|
|
7
|
+
//#region src/drizzle/step-up-model.d.ts
|
|
8
|
+
type ColumnKey<T extends Table> = Extract<keyof T["_"]["columns"], string>;
|
|
9
|
+
/** Distinct from login-pending storage. Snapshot is TEXT encoded by the core's
|
|
10
|
+
* SessionStepUpIntent schema; it contains no Claims and needs no consumer decoder. */
|
|
11
|
+
interface SessionStepUpIntentTables<Intent extends Table, NativeSubjectId> {
|
|
12
|
+
readonly intent: {
|
|
13
|
+
readonly table: Intent;
|
|
14
|
+
readonly digest: ColumnKey<Intent>;
|
|
15
|
+
readonly version: ColumnKey<Intent>;
|
|
16
|
+
readonly flowId: ColumnKey<Intent>;
|
|
17
|
+
readonly subjectId: ColumnKey<Intent>;
|
|
18
|
+
readonly bindingDigest: ColumnKey<Intent>;
|
|
19
|
+
readonly snapshot: ColumnKey<Intent>;
|
|
20
|
+
readonly expiresAt: ColumnKey<Intent>;
|
|
21
|
+
readonly attemptLimit: ColumnKey<Intent>;
|
|
22
|
+
readonly failedAttempts: ColumnKey<Intent>;
|
|
23
|
+
readonly consumed: ColumnKey<Intent>;
|
|
24
|
+
readonly encodeInstant: (instant: DateTime.Utc) => unknown;
|
|
25
|
+
/** Consumer fields/defaults; the adapter sets all mapped security columns. */
|
|
26
|
+
readonly encodeInsert: (intent: SessionStepUpIntent, input: {
|
|
27
|
+
readonly subjectId: NativeSubjectId;
|
|
28
|
+
}) => InferInsertModel<Intent>;
|
|
29
|
+
readonly allocateVersion?: Effect.Effect<SecurityRevision, DrizzleMappingError>;
|
|
30
|
+
readonly allocateVersionSync?: () => SecurityRevision;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
interface RequiredSessionStepUpConstraints {
|
|
34
|
+
readonly intentDigest: "unique(intent.digest)";
|
|
35
|
+
readonly intentFlow: "unique(intent.flowId)";
|
|
36
|
+
}
|
|
37
|
+
declare const requiredSessionStepUpConstraints: RequiredSessionStepUpConstraints;
|
|
38
|
+
/** Fixed source discriminator is checked against every stored intent. A minimal
|
|
39
|
+
* pure-signed installation does not provide dummy session or tombstone tables. */
|
|
40
|
+
type SessionStepUpSourceTables<Claims, Session extends Table, Tombstone extends Table, NativeSubjectId, NativeSessionId> = {
|
|
41
|
+
readonly kind: "StatelessSigned";
|
|
42
|
+
} | ({
|
|
43
|
+
readonly kind: "StateAssistedSigned";
|
|
44
|
+
readonly constraints: {
|
|
45
|
+
readonly tombstoneOwner: "unique(tombstone.subjectId,tombstone.sessionId)";
|
|
46
|
+
};
|
|
47
|
+
} & SignedSessionValidityTables<Tombstone, NativeSubjectId, NativeSessionId>) | {
|
|
48
|
+
readonly kind: "Stateful";
|
|
49
|
+
readonly constraints: {
|
|
50
|
+
readonly sessionDigest: "unique(session.digest)";
|
|
51
|
+
};
|
|
52
|
+
readonly sessionId: SessionIdCodec<NativeSessionId>;
|
|
53
|
+
readonly session: StatefulSessionTables<Claims, Session, Table, NativeSubjectId, NativeSessionId>["session"] & {
|
|
54
|
+
readonly credentialVersion: ColumnKey<Session>;
|
|
55
|
+
readonly authenticatedAt: ColumnKey<Session>;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
type SessionStepUpMapping<Claims, Subject extends Table, Credential extends Table, Intent extends Table, Session extends Table, Tombstone extends Table, NativeSubjectId, NativeSessionId> = SessionAuthorityTables<Subject, Credential, NativeSubjectId> & SessionStepUpIntentTables<Intent, NativeSubjectId> & SessionConstraintClassifier & {
|
|
59
|
+
readonly source: SessionStepUpSourceTables<Claims, Session, Tombstone, NativeSubjectId, NativeSessionId>;
|
|
60
|
+
readonly constraints: RequiredSessionStepUpConstraints;
|
|
61
|
+
};
|
|
62
|
+
type D1SessionStepUpMapping<Claims, Subject extends Table, Credential extends Table, Intent extends Table, Session extends Table, Tombstone extends Table, NativeSubjectId, NativeSessionId> = SessionStepUpMapping<Claims, Subject, Credential, Intent, Session, Tombstone, NativeSubjectId, NativeSessionId> & D1SessionClockMapping;
|
|
63
|
+
//#endregion
|
|
64
|
+
export { D1SessionStepUpMapping, RequiredSessionStepUpConstraints, SessionStepUpIntentTables, SessionStepUpMapping, SessionStepUpSourceTables, requiredSessionStepUpConstraints };
|
|
65
|
+
//# sourceMappingURL=step-up-model.d.mts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/drizzle/step-up-model.ts
|
|
2
|
+
const requiredSessionStepUpConstraints = {
|
|
3
|
+
intentDigest: "unique(intent.digest)",
|
|
4
|
+
intentFlow: "unique(intent.flowId)"
|
|
5
|
+
};
|
|
6
|
+
//#endregion
|
|
7
|
+
export { requiredSessionStepUpConstraints };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=step-up-model.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-up-model.mjs","names":[],"sources":["../../src/drizzle/step-up-model.ts"],"sourcesContent":["import type { InferInsertModel, Table } from \"drizzle-orm\";\nimport type { DateTime, Effect } from \"effect\";\n\nimport type { SecurityRevision } from \"../sessions/models\";\nimport type { SessionStepUpIntent } from \"../sessions/SessionStepUpPersistence\";\nimport type { DrizzleMappingError } from \"./model\";\nimport type {\n D1SessionClockMapping,\n SessionAuthorityTables,\n SessionConstraintClassifier,\n SessionIdCodec,\n SignedSessionValidityTables,\n StatefulSessionTables,\n} from \"./session-model\";\n\ntype ColumnKey<T extends Table> = Extract<keyof T[\"_\"][\"columns\"], string>;\n\n/** Distinct from login-pending storage. Snapshot is TEXT encoded by the core's\n * SessionStepUpIntent schema; it contains no Claims and needs no consumer decoder. */\nexport interface SessionStepUpIntentTables<Intent extends Table, NativeSubjectId> {\n readonly intent: {\n readonly table: Intent;\n readonly digest: ColumnKey<Intent>;\n readonly version: ColumnKey<Intent>;\n readonly flowId: ColumnKey<Intent>;\n readonly subjectId: ColumnKey<Intent>;\n readonly bindingDigest: ColumnKey<Intent>;\n readonly snapshot: ColumnKey<Intent>;\n readonly expiresAt: ColumnKey<Intent>;\n readonly attemptLimit: ColumnKey<Intent>;\n readonly failedAttempts: ColumnKey<Intent>;\n readonly consumed: ColumnKey<Intent>;\n readonly encodeInstant: (instant: DateTime.Utc) => unknown;\n /** Consumer fields/defaults; the adapter sets all mapped security columns. */\n readonly encodeInsert: (\n intent: SessionStepUpIntent,\n input: { readonly subjectId: NativeSubjectId },\n ) => InferInsertModel<Intent>;\n readonly allocateVersion?: Effect.Effect<SecurityRevision, DrizzleMappingError>;\n readonly allocateVersionSync?: () => SecurityRevision;\n };\n}\n\nexport interface RequiredSessionStepUpConstraints {\n readonly intentDigest: \"unique(intent.digest)\";\n readonly intentFlow: \"unique(intent.flowId)\";\n}\n\nexport const requiredSessionStepUpConstraints: RequiredSessionStepUpConstraints = {\n intentDigest: \"unique(intent.digest)\",\n intentFlow: \"unique(intent.flowId)\",\n};\n\n/** Fixed source discriminator is checked against every stored intent. A minimal\n * pure-signed installation does not provide dummy session or tombstone tables. */\nexport type SessionStepUpSourceTables<\n Claims,\n Session extends Table,\n Tombstone extends Table,\n NativeSubjectId,\n NativeSessionId,\n> =\n | { readonly kind: \"StatelessSigned\" }\n | ({\n readonly kind: \"StateAssistedSigned\";\n readonly constraints: {\n readonly tombstoneOwner: \"unique(tombstone.subjectId,tombstone.sessionId)\";\n };\n } & SignedSessionValidityTables<Tombstone, NativeSubjectId, NativeSessionId>)\n | {\n readonly kind: \"Stateful\";\n readonly constraints: { readonly sessionDigest: \"unique(session.digest)\" };\n readonly sessionId: SessionIdCodec<NativeSessionId>;\n readonly session: StatefulSessionTables<\n Claims,\n Session,\n Table,\n NativeSubjectId,\n NativeSessionId\n >[\"session\"] & {\n readonly credentialVersion: ColumnKey<Session>;\n readonly authenticatedAt: ColumnKey<Session>;\n /** encodeRotation must persist the full replacement Claims/provenance and\n * these queryable security fields, never preserve the old proof payload. */\n };\n };\n\nexport type SessionStepUpMapping<\n Claims,\n Subject extends Table,\n Credential extends Table,\n Intent extends Table,\n Session extends Table,\n Tombstone extends Table,\n NativeSubjectId,\n NativeSessionId,\n> = SessionAuthorityTables<Subject, Credential, NativeSubjectId> &\n SessionStepUpIntentTables<Intent, NativeSubjectId> &\n SessionConstraintClassifier & {\n readonly source: SessionStepUpSourceTables<\n Claims,\n Session,\n Tombstone,\n NativeSubjectId,\n NativeSessionId\n >;\n readonly constraints: RequiredSessionStepUpConstraints;\n };\n\nexport type D1SessionStepUpMapping<\n Claims,\n Subject extends Table,\n Credential extends Table,\n Intent extends Table,\n Session extends Table,\n Tombstone extends Table,\n NativeSubjectId,\n NativeSessionId,\n> = SessionStepUpMapping<\n Claims,\n Subject,\n Credential,\n Intent,\n Session,\n Tombstone,\n NativeSubjectId,\n NativeSessionId\n> &\n D1SessionClockMapping;\n"],"mappings":";AAgDA,MAAa,mCAAqE;CAChF,cAAc;CACd,YAAY;AACd"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SessionStepUpInvalid, SessionUnavailable } from "../sessions/errors.mjs";
|
|
2
|
+
import { AuthenticationEvidence, SessionMetadata } from "../sessions/models.mjs";
|
|
3
|
+
import { SessionStepUpIntent, SessionStepUpRequirement } from "../sessions/SessionStepUpPersistence.mjs";
|
|
4
|
+
import { DateTime, Effect, Schema } from "effect";
|
|
5
|
+
//#region src/drizzle/step-up-state.ts
|
|
6
|
+
const stepUpIntentCodec = Schema.fromJsonString(SessionStepUpIntent);
|
|
7
|
+
const BoundedSnapshot = Schema.String.check(Schema.isMaxLength(131072));
|
|
8
|
+
const encodeStepUpIntent = (intent) => Schema.encodeEffect(stepUpIntentCodec)(intent).pipe(Effect.flatMap(Schema.decodeEffect(BoundedSnapshot)), Effect.mapError(() => SessionUnavailable.make({})));
|
|
9
|
+
const decodeStepUpIntent = (snapshot) => Schema.decodeEffect(BoundedSnapshot)(snapshot).pipe(Effect.flatMap(Schema.decodeEffect(stepUpIntentCodec)), Effect.mapError(() => SessionUnavailable.make({})));
|
|
10
|
+
const sameStepUpRevision = (left, right) => left.subjectId === right.subjectId && left.securityRevision === right.securityRevision && left.credentials.length === right.credentials.length && new Set(left.credentials.map((c) => c.credentialId)).size === left.credentials.length && left.credentials.every((item) => right.credentials.some((other) => item.credentialId === other.credentialId && item.revision === other.revision));
|
|
11
|
+
const stepUpIntentLive = (intent, kind, now) => {
|
|
12
|
+
const n = DateTime.toEpochMillis(now), authenticated = DateTime.toEpochMillis(intent.sourceAuthenticatedAt), idle = DateTime.toEpochMillis(intent.sourceExpiresAt), absolute = DateTime.toEpochMillis(intent.sourceAbsoluteExpiresAt), expires = DateTime.toEpochMillis(intent.expiresAt);
|
|
13
|
+
return intent.sourceKind === kind && authenticated <= n && n < expires && expires <= idle && idle <= absolute;
|
|
14
|
+
};
|
|
15
|
+
const evidenceEncoding = Schema.encodeSync(Schema.fromJsonString(AuthenticationEvidence));
|
|
16
|
+
const requirementEncoding = Schema.encodeSync(Schema.fromJsonString(SessionStepUpRequirement));
|
|
17
|
+
const metadataEncoding = Schema.encodeSync(Schema.fromJsonString(SessionMetadata));
|
|
18
|
+
/** Validate core-owned plans before driver allocation/SQL expansion. No bearer or Claims decoding. */
|
|
19
|
+
const validateStepUpPlan = Effect.fn("DrizzleStepUp.validatePlan")(function* (plan) {
|
|
20
|
+
const { intent, source, replacement, evidence } = plan;
|
|
21
|
+
const original = source.inspection;
|
|
22
|
+
if (requirementEncoding(plan.profileRequirement) !== requirementEncoding(intent.requirement) || replacement.inspection.session.subjectId !== evidence.revision.subjectId || replacement.inspection.session.securityRevision !== evidence.revision.securityRevision || intent.revision.credentials.some((item) => !evidence.revision.credentials.some((actual) => actual.credentialId === item.credentialId && actual.revision === item.revision))) return yield* SessionStepUpInvalid.make({});
|
|
23
|
+
if (intent.sourceKind !== source.guard._tag || intent.sourceKind !== replacement._tag || intent.sourceSessionId !== original.session.sessionId || intent.sourceCredentialVersion !== original.credentialVersion || !sameStepUpRevision(intent.revision, original.provenance.evidence.revision) || intent.revision.subjectId !== evidence.revision.subjectId || intent.revision.securityRevision !== evidence.revision.securityRevision || intent.flowId !== evidence.flowId || intent.bindingDigest !== evidence.bindingDigest || DateTime.toEpochMillis(intent.sourceAuthenticatedAt) !== DateTime.toEpochMillis(original.session.assurance.authenticatedAt) || DateTime.toEpochMillis(intent.sourceExpiresAt) !== DateTime.toEpochMillis(original.session.expiresAt) || DateTime.toEpochMillis(intent.sourceAbsoluteExpiresAt) !== DateTime.toEpochMillis(original.session.absoluteExpiresAt) || DateTime.toEpochMillis(intent.sourceAuthenticatedAt) !== DateTime.toEpochMillis(replacement.inspection.session.assurance.authenticatedAt) || DateTime.toEpochMillis(intent.sourceAbsoluteExpiresAt) !== DateTime.toEpochMillis(replacement.inspection.session.absoluteExpiresAt) || evidenceEncoding(replacement.inspection.provenance.evidence) !== evidenceEncoding(evidence)) return yield* SessionStepUpInvalid.make({});
|
|
24
|
+
if (replacement._tag === "Stateful" && (source.guard._tag !== "Stateful" || source.guard.digest !== replacement.expectedDigest || source.guard.rowVersion !== replacement.expectedRowVersion || replacement.inspection.session.sessionId !== intent.sourceSessionId)) return yield* SessionStepUpInvalid.make({});
|
|
25
|
+
if (replacement._tag === "StateAssistedSigned" && (replacement.tombstoneSessionId !== intent.sourceSessionId || DateTime.toEpochMillis(replacement.tombstoneUntil) !== DateTime.toEpochMillis(intent.sourceAbsoluteExpiresAt))) return yield* SessionStepUpInvalid.make({});
|
|
26
|
+
if (replacement._tag !== "Stateful" && replacement.inspection.session.sessionId === intent.sourceSessionId) return yield* SessionStepUpInvalid.make({});
|
|
27
|
+
});
|
|
28
|
+
/** Compare a consumer-decoded encoded update/readback with the intended rotation.
|
|
29
|
+
* Claims are consumer-owned; their lossless round trip remains the codec contract. */
|
|
30
|
+
const stepUpRotationMatches = (plan, record) => plan.replacement._tag === "Stateful" && record.digest === plan.replacement.nextDigest && record.credentialVersion === plan.replacement.inspection.credentialVersion && metadataEncoding(record) === metadataEncoding(plan.replacement.inspection.session) && evidenceEncoding(record.provenance.evidence) === evidenceEncoding(plan.evidence);
|
|
31
|
+
//#endregion
|
|
32
|
+
export { decodeStepUpIntent, encodeStepUpIntent, sameStepUpRevision, stepUpIntentCodec, stepUpIntentLive, stepUpRotationMatches, validateStepUpPlan };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=step-up-state.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-up-state.mjs","names":[],"sources":["../../src/drizzle/step-up-state.ts"],"sourcesContent":["import { DateTime, Effect, Schema } from \"effect\";\n\nimport { SessionStepUpInvalid, SessionUnavailable } from \"../sessions/errors\";\nimport {\n AuthenticationEvidence,\n type AuthenticationRevision,\n SessionMetadata,\n} from \"../sessions/models\";\nimport type { StatefulSessionRecord } from \"../sessions/persistence\";\nimport {\n SessionStepUpIntent,\n SessionStepUpRequirement,\n type SessionStepUpCompletionPlan,\n} from \"../sessions/SessionStepUpPersistence\";\n\nexport const stepUpIntentCodec = Schema.fromJsonString(SessionStepUpIntent);\nconst BoundedSnapshot = Schema.String.check(Schema.isMaxLength(131072));\n\nexport const encodeStepUpIntent = (intent: SessionStepUpIntent) =>\n Schema.encodeEffect(stepUpIntentCodec)(intent).pipe(\n Effect.flatMap(Schema.decodeEffect(BoundedSnapshot)),\n Effect.mapError(() => SessionUnavailable.make({})),\n );\n\nexport const decodeStepUpIntent = (snapshot: string) =>\n Schema.decodeEffect(BoundedSnapshot)(snapshot).pipe(\n Effect.flatMap(Schema.decodeEffect(stepUpIntentCodec)),\n Effect.mapError(() => SessionUnavailable.make({})),\n );\n\nexport const sameStepUpRevision = (left: AuthenticationRevision, right: AuthenticationRevision) =>\n left.subjectId === right.subjectId &&\n left.securityRevision === right.securityRevision &&\n left.credentials.length === right.credentials.length &&\n new Set(left.credentials.map((c) => c.credentialId)).size === left.credentials.length &&\n left.credentials.every((item) =>\n right.credentials.some(\n (other) => item.credentialId === other.credentialId && item.revision === other.revision,\n ),\n );\n\nexport const stepUpIntentLive = (\n intent: SessionStepUpIntent,\n kind: SessionStepUpIntent[\"sourceKind\"],\n now: DateTime.Utc,\n) => {\n const n = DateTime.toEpochMillis(now),\n authenticated = DateTime.toEpochMillis(intent.sourceAuthenticatedAt),\n idle = DateTime.toEpochMillis(intent.sourceExpiresAt),\n absolute = DateTime.toEpochMillis(intent.sourceAbsoluteExpiresAt),\n expires = DateTime.toEpochMillis(intent.expiresAt);\n\n return (\n intent.sourceKind === kind &&\n authenticated <= n &&\n n < expires &&\n expires <= idle &&\n idle <= absolute\n );\n};\n\nconst evidenceEncoding = Schema.encodeSync(Schema.fromJsonString(AuthenticationEvidence));\nconst requirementEncoding = Schema.encodeSync(Schema.fromJsonString(SessionStepUpRequirement));\nconst metadataEncoding = Schema.encodeSync(Schema.fromJsonString(SessionMetadata));\n\n/** Validate core-owned plans before driver allocation/SQL expansion. No bearer or Claims decoding. */\nexport const validateStepUpPlan = Effect.fn(\"DrizzleStepUp.validatePlan\")(function* <Claims>(\n plan: SessionStepUpCompletionPlan<Claims>,\n) {\n const { intent, source, replacement, evidence } = plan;\n const original = source.inspection;\n\n if (\n requirementEncoding(plan.profileRequirement) !== requirementEncoding(intent.requirement) ||\n replacement.inspection.session.subjectId !== evidence.revision.subjectId ||\n replacement.inspection.session.securityRevision !== evidence.revision.securityRevision ||\n intent.revision.credentials.some(\n (item) =>\n !evidence.revision.credentials.some(\n (actual) =>\n actual.credentialId === item.credentialId && actual.revision === item.revision,\n ),\n )\n )\n return yield* SessionStepUpInvalid.make({});\n if (\n intent.sourceKind !== source.guard._tag ||\n intent.sourceKind !== replacement._tag ||\n intent.sourceSessionId !== original.session.sessionId ||\n intent.sourceCredentialVersion !== original.credentialVersion ||\n !sameStepUpRevision(intent.revision, original.provenance.evidence.revision) ||\n intent.revision.subjectId !== evidence.revision.subjectId ||\n intent.revision.securityRevision !== evidence.revision.securityRevision ||\n intent.flowId !== evidence.flowId ||\n intent.bindingDigest !== evidence.bindingDigest ||\n DateTime.toEpochMillis(intent.sourceAuthenticatedAt) !==\n DateTime.toEpochMillis(original.session.assurance.authenticatedAt) ||\n DateTime.toEpochMillis(intent.sourceExpiresAt) !==\n DateTime.toEpochMillis(original.session.expiresAt) ||\n DateTime.toEpochMillis(intent.sourceAbsoluteExpiresAt) !==\n DateTime.toEpochMillis(original.session.absoluteExpiresAt) ||\n DateTime.toEpochMillis(intent.sourceAuthenticatedAt) !==\n DateTime.toEpochMillis(replacement.inspection.session.assurance.authenticatedAt) ||\n DateTime.toEpochMillis(intent.sourceAbsoluteExpiresAt) !==\n DateTime.toEpochMillis(replacement.inspection.session.absoluteExpiresAt) ||\n evidenceEncoding(replacement.inspection.provenance.evidence) !== evidenceEncoding(evidence)\n )\n return yield* SessionStepUpInvalid.make({});\n if (\n replacement._tag === \"Stateful\" &&\n (source.guard._tag !== \"Stateful\" ||\n source.guard.digest !== replacement.expectedDigest ||\n source.guard.rowVersion !== replacement.expectedRowVersion ||\n replacement.inspection.session.sessionId !== intent.sourceSessionId)\n )\n return yield* SessionStepUpInvalid.make({});\n if (\n replacement._tag === \"StateAssistedSigned\" &&\n (replacement.tombstoneSessionId !== intent.sourceSessionId ||\n DateTime.toEpochMillis(replacement.tombstoneUntil) !==\n DateTime.toEpochMillis(intent.sourceAbsoluteExpiresAt))\n )\n return yield* SessionStepUpInvalid.make({});\n if (\n replacement._tag !== \"Stateful\" &&\n replacement.inspection.session.sessionId === intent.sourceSessionId\n )\n return yield* SessionStepUpInvalid.make({});\n});\n\n/** Compare a consumer-decoded encoded update/readback with the intended rotation.\n * Claims are consumer-owned; their lossless round trip remains the codec contract. */\nexport const stepUpRotationMatches = <Claims>(\n plan: SessionStepUpCompletionPlan<Claims>,\n record: StatefulSessionRecord<Claims>,\n) =>\n plan.replacement._tag === \"Stateful\" &&\n record.digest === plan.replacement.nextDigest &&\n record.credentialVersion === plan.replacement.inspection.credentialVersion &&\n metadataEncoding(record) === metadataEncoding(plan.replacement.inspection.session) &&\n evidenceEncoding(record.provenance.evidence) === evidenceEncoding(plan.evidence);\n"],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { SubjectId } from "../Schema.mjs";
|
|
2
|
+
import { AuthenticationRequirement } from "../sessions/models.mjs";
|
|
3
|
+
import { PendingAuthenticationContext } from "../sessions/PendingAuthentication.mjs";
|
|
4
|
+
import { DrizzleMappingError } from "./model.mjs";
|
|
5
|
+
import { TotpPolicy } from "../totp/models.mjs";
|
|
6
|
+
import { TotpPersistence } from "../totp/TotpPersistence.mjs";
|
|
7
|
+
import { Effect, Layer } from "effect";
|
|
8
|
+
import { InferInsertModel, InferSelectModel, SQL, Table } from "drizzle-orm";
|
|
9
|
+
//#region src/drizzle/totp-model.d.ts
|
|
10
|
+
type TotpColumn<T extends Table> = Extract<keyof T["_"]["columns"], string>;
|
|
11
|
+
type TotpMappingSource<M, R = never> = M | Effect.Effect<M, DrizzleMappingError, R>;
|
|
12
|
+
declare const requiredTotpConstraints: {
|
|
13
|
+
readonly factor: "unique(scope)";
|
|
14
|
+
readonly credential: "unique(credentialId)";
|
|
15
|
+
readonly subject: "unique(id)";
|
|
16
|
+
};
|
|
17
|
+
/** A dedicated encrypted factor row plus the shared authentication credential authority.
|
|
18
|
+
* factorEnabled is the consumer's TOTP requirement bit; central primary methods must
|
|
19
|
+
* read it when choosing their AuthenticationRequirement. Other factor policy is untouched.
|
|
20
|
+
* State JSON stores ciphertext and recovery digests only. The same table retains
|
|
21
|
+
* domain-separated management command tombstones; retain them while command IDs
|
|
22
|
+
* can be replayed. Encoders and current requirement decoding cannot suspend.
|
|
23
|
+
*/
|
|
24
|
+
interface TotpMapping<S extends Table, F extends Table, C extends Table, N> {
|
|
25
|
+
readonly moduleId: string;
|
|
26
|
+
readonly policy: TotpPolicy;
|
|
27
|
+
readonly constraints: typeof requiredTotpConstraints;
|
|
28
|
+
readonly subjectIds: {
|
|
29
|
+
readonly toNative: (id: SubjectId) => N;
|
|
30
|
+
readonly toSubject: (id: N) => SubjectId;
|
|
31
|
+
};
|
|
32
|
+
readonly subject: {
|
|
33
|
+
readonly table: S;
|
|
34
|
+
readonly id: TotpColumn<S>;
|
|
35
|
+
readonly securityRevision: TotpColumn<S>;
|
|
36
|
+
readonly factorEnabled: TotpColumn<S>;
|
|
37
|
+
readonly activeCondition: SQL;
|
|
38
|
+
readonly encodeEnabled: (enabled: boolean) => unknown;
|
|
39
|
+
readonly decodeRequirement: (row: InferSelectModel<S>) => AuthenticationRequirement;
|
|
40
|
+
};
|
|
41
|
+
readonly factor: {
|
|
42
|
+
readonly table: F;
|
|
43
|
+
readonly scope: TotpColumn<F>;
|
|
44
|
+
readonly state: TotpColumn<F>;
|
|
45
|
+
readonly version: TotpColumn<F>;
|
|
46
|
+
readonly encodeInsert: (value: {
|
|
47
|
+
readonly scope: string;
|
|
48
|
+
readonly state: string;
|
|
49
|
+
readonly version: string;
|
|
50
|
+
}) => InferInsertModel<F>;
|
|
51
|
+
};
|
|
52
|
+
readonly credential: {
|
|
53
|
+
readonly table: C;
|
|
54
|
+
readonly id: TotpColumn<C>;
|
|
55
|
+
readonly subjectId: TotpColumn<C>;
|
|
56
|
+
readonly revision: TotpColumn<C>;
|
|
57
|
+
readonly status: TotpColumn<C>;
|
|
58
|
+
readonly activeCondition: SQL;
|
|
59
|
+
readonly encodeStatus: (active: boolean) => unknown;
|
|
60
|
+
readonly encodeInsert: (value: {
|
|
61
|
+
readonly credentialId: string;
|
|
62
|
+
readonly subjectId: N;
|
|
63
|
+
readonly revision: string;
|
|
64
|
+
readonly active: boolean;
|
|
65
|
+
}) => InferInsertModel<C>;
|
|
66
|
+
};
|
|
67
|
+
/** Unix epoch milliseconds, evaluated again at the final conditional write. */
|
|
68
|
+
readonly engineNowMillis: SQL;
|
|
69
|
+
/** Required for reset-with-recovery-code. Must assert the exact unconsumed,
|
|
70
|
+
* unexpired, unexhausted pending flow, binding digest and original credential
|
|
71
|
+
* revisions. No request-supplied SQL or external I/O is accepted. */
|
|
72
|
+
readonly pendingCondition?: (target: PendingAuthenticationContext, subjectId: N) => SQL;
|
|
73
|
+
}
|
|
74
|
+
interface D1TotpMapping {
|
|
75
|
+
readonly d1: {
|
|
76
|
+
readonly primary: true;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
interface TotpPersistenceServices {
|
|
80
|
+
readonly totpPersistence: TotpPersistence["Service"];
|
|
81
|
+
}
|
|
82
|
+
declare const totpPersistenceLayer: <E, R>(services: Effect.Effect<TotpPersistenceServices, E, R>) => Layer.Layer<TotpPersistence, E, Exclude<R, import("effect/Scope").Scope>>;
|
|
83
|
+
//#endregion
|
|
84
|
+
export { D1TotpMapping, TotpColumn, TotpMapping, TotpMappingSource, TotpPersistenceServices, requiredTotpConstraints, totpPersistenceLayer };
|
|
85
|
+
//# sourceMappingURL=totp-model.d.mts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TotpPersistence } from "../totp/TotpPersistence.mjs";
|
|
2
|
+
import { Effect, Layer } from "effect";
|
|
3
|
+
//#region src/drizzle/totp-model.ts
|
|
4
|
+
const requiredTotpConstraints = {
|
|
5
|
+
factor: "unique(scope)",
|
|
6
|
+
credential: "unique(credentialId)",
|
|
7
|
+
subject: "unique(id)"
|
|
8
|
+
};
|
|
9
|
+
const totpPersistenceLayer = (services) => Layer.effect(TotpPersistence, Effect.map(services, (value) => value.totpPersistence));
|
|
10
|
+
//#endregion
|
|
11
|
+
export { requiredTotpConstraints, totpPersistenceLayer };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=totp-model.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp-model.mjs","names":[],"sources":["../../src/drizzle/totp-model.ts"],"sourcesContent":["import type { InferInsertModel, InferSelectModel, SQL, Table } from \"drizzle-orm\";\nimport { Effect, Layer } from \"effect\";\n\nimport type { SubjectId } from \"../Schema\";\nimport type { AuthenticationRequirement } from \"../sessions/models\";\nimport type { PendingAuthenticationContext } from \"../sessions/PendingAuthentication\";\nimport type { TotpPolicy } from \"../totp/models\";\nimport { TotpPersistence } from \"../totp/TotpPersistence\";\nimport type { DrizzleMappingError } from \"./model\";\nexport type TotpColumn<T extends Table> = Extract<keyof T[\"_\"][\"columns\"], string>;\nexport type TotpMappingSource<M, R = never> = M | Effect.Effect<M, DrizzleMappingError, R>;\n\nexport const requiredTotpConstraints = {\n factor: \"unique(scope)\",\n credential: \"unique(credentialId)\",\n subject: \"unique(id)\",\n} as const;\n\n/** A dedicated encrypted factor row plus the shared authentication credential authority.\n * factorEnabled is the consumer's TOTP requirement bit; central primary methods must\n * read it when choosing their AuthenticationRequirement. Other factor policy is untouched.\n * State JSON stores ciphertext and recovery digests only. The same table retains\n * domain-separated management command tombstones; retain them while command IDs\n * can be replayed. Encoders and current requirement decoding cannot suspend.\n */\nexport interface TotpMapping<S extends Table, F extends Table, C extends Table, N> {\n readonly moduleId: string;\n readonly policy: TotpPolicy;\n readonly constraints: typeof requiredTotpConstraints;\n readonly subjectIds: {\n readonly toNative: (id: SubjectId) => N;\n readonly toSubject: (id: N) => SubjectId;\n };\n readonly subject: {\n readonly table: S;\n readonly id: TotpColumn<S>;\n readonly securityRevision: TotpColumn<S>;\n readonly factorEnabled: TotpColumn<S>;\n readonly activeCondition: SQL;\n readonly encodeEnabled: (enabled: boolean) => unknown;\n readonly decodeRequirement: (row: InferSelectModel<S>) => AuthenticationRequirement;\n };\n readonly factor: {\n readonly table: F;\n readonly scope: TotpColumn<F>;\n readonly state: TotpColumn<F>;\n readonly version: TotpColumn<F>;\n readonly encodeInsert: (value: {\n readonly scope: string;\n readonly state: string;\n readonly version: string;\n }) => InferInsertModel<F>;\n };\n readonly credential: {\n readonly table: C;\n readonly id: TotpColumn<C>;\n readonly subjectId: TotpColumn<C>;\n readonly revision: TotpColumn<C>;\n readonly status: TotpColumn<C>;\n readonly activeCondition: SQL;\n readonly encodeStatus: (active: boolean) => unknown;\n readonly encodeInsert: (value: {\n readonly credentialId: string;\n readonly subjectId: N;\n readonly revision: string;\n readonly active: boolean;\n }) => InferInsertModel<C>;\n };\n /** Unix epoch milliseconds, evaluated again at the final conditional write. */\n readonly engineNowMillis: SQL;\n /** Required for reset-with-recovery-code. Must assert the exact unconsumed,\n * unexpired, unexhausted pending flow, binding digest and original credential\n * revisions. No request-supplied SQL or external I/O is accepted. */\n readonly pendingCondition?: (target: PendingAuthenticationContext, subjectId: N) => SQL;\n}\n\nexport interface D1TotpMapping {\n readonly d1: { readonly primary: true };\n}\n\nexport interface TotpPersistenceServices {\n readonly totpPersistence: TotpPersistence[\"Service\"];\n}\n\nexport const totpPersistenceLayer = <E, R>(\n services: Effect.Effect<TotpPersistenceServices, E, R>,\n) =>\n Layer.effect(\n TotpPersistence,\n Effect.map(services, (value) => value.totpPersistence),\n );\n"],"mappings":";;;AAYA,MAAa,0BAA0B;CACrC,QAAQ;CACR,YAAY;CACZ,SAAS;AACX;AAoEA,MAAa,wBACX,aAEA,MAAM,OACJ,iBACA,OAAO,IAAI,WAAW,UAAU,MAAM,eAAe,CACvD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import "./transaction-owner.mjs";
|
|
2
|
+
import { TotpRecord } from "../totp/models.mjs";
|
|
3
|
+
import "../totp/errors.mjs";
|
|
4
|
+
import { Context, Effect } from "effect";
|
|
5
|
+
import { SQL } from "drizzle-orm";
|
|
6
|
+
//#region src/drizzle/totp-state.d.ts
|
|
7
|
+
declare const encodeTotpRecord: (record: TotpRecord) => string;
|
|
8
|
+
declare const decodeTotpRecord: (state: string) => {
|
|
9
|
+
readonly moduleId: string;
|
|
10
|
+
readonly subjectId: string & import("effect/Brand").Brand<"effect-auth/SubjectId">;
|
|
11
|
+
readonly credentialId: string;
|
|
12
|
+
readonly revision: string;
|
|
13
|
+
readonly version: string;
|
|
14
|
+
readonly secret: {
|
|
15
|
+
readonly keyId: string;
|
|
16
|
+
readonly nonce: string;
|
|
17
|
+
readonly ciphertext: string;
|
|
18
|
+
readonly revision: string;
|
|
19
|
+
} | null;
|
|
20
|
+
readonly pending: {
|
|
21
|
+
readonly revision: string;
|
|
22
|
+
readonly enrollmentId: string;
|
|
23
|
+
readonly secret: {
|
|
24
|
+
readonly keyId: string;
|
|
25
|
+
readonly nonce: string;
|
|
26
|
+
readonly ciphertext: string;
|
|
27
|
+
readonly revision: string;
|
|
28
|
+
};
|
|
29
|
+
readonly expiresAtMillis: number;
|
|
30
|
+
readonly failedAttempts: number;
|
|
31
|
+
} | null;
|
|
32
|
+
readonly recoveryDigests: readonly (string & import("effect/Brand").Brand<"effect-auth/TokenDigest">)[];
|
|
33
|
+
readonly acceptedStep: number;
|
|
34
|
+
readonly attemptWindow: number;
|
|
35
|
+
readonly failedAttempts: number;
|
|
36
|
+
};
|
|
37
|
+
//#endregion
|
|
38
|
+
export { decodeTotpRecord, encodeTotpRecord };
|
|
39
|
+
//# sourceMappingURL=totp-state.d.mts.map
|