@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Daniel van der Merwe
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# @yielded/auth
|
|
2
|
+
|
|
3
|
+
Composable authentication workflows for Effect applications: sign-in, sessions,
|
|
4
|
+
OAuth, passwords, passkeys, email and phone proofs, and TOTP.
|
|
5
|
+
|
|
6
|
+
```sh
|
|
7
|
+
vp add @yielded/auth@beta effect@4.0.0-rc.112
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
The package owns security-sensitive workflow contracts. Applications own identity,
|
|
11
|
+
persistence, protocol verification, and delivery adapters. Resources live in the
|
|
12
|
+
caller’s Scope; credentials stay outside public results and telemetry.
|
|
13
|
+
|
|
14
|
+
Optional database, platform, browser, and OAuth adapters have separate exports.
|
|
15
|
+
The root import does not load their peer dependencies. Effect is supplied by the host.
|
|
16
|
+
|
|
17
|
+
See the [authentication guide](https://github.com/danieljvdm/effect-auth/blob/main/docs/guide/authentication.md)
|
|
18
|
+
and [consumer examples](https://github.com/danieljvdm/effect-auth/tree/main/examples/auth).
|
package/dist/Atom.d.mts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AuthAtomLifetime, AuthSubjectLifetime, makeLifetime } from "./atom/AuthAtomLifetime.mjs";
|
|
2
|
+
import { AuthAtomWorkflow } from "./atom/AuthAtomWorkflow.mjs";
|
|
3
|
+
import { ReactivityKeys, mutation, query, workflow } from "./atom/operations.mjs";
|
|
4
|
+
import { AuthActionAtom, AuthAtomOptions, AuthAtoms, make } from "./atom/client.mjs";
|
|
5
|
+
export { type AuthActionAtom, AuthAtomLifetime, type AuthAtomOptions, AuthAtomWorkflow, type AuthAtoms, type AuthSubjectLifetime, type ReactivityKeys, make, makeLifetime, mutation, query, workflow };
|
package/dist/Atom.mjs
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AuthAtomLifetime, makeLifetime } from "./atom/AuthAtomLifetime.mjs";
|
|
2
|
+
import { AuthAtomWorkflow } from "./atom/AuthAtomWorkflow.mjs";
|
|
3
|
+
import { mutation, query, workflow } from "./atom/operations.mjs";
|
|
4
|
+
import { make } from "./atom/client.mjs";
|
|
5
|
+
export { AuthAtomLifetime, AuthAtomWorkflow, make, makeLifetime, mutation, query, workflow };
|
package/dist/Auth.d.mts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AuthenticationRequired } from "./operations/errors.mjs";
|
|
2
|
+
import { RequestBindingConfig } from "./operations/RequestBindingConfig.mjs";
|
|
3
|
+
import { SessionApi, SessionApiError } from "./auth/session.mjs";
|
|
4
|
+
import { AuthRequest } from "./auth/AuthRequest.mjs";
|
|
5
|
+
import { AuthConfigurationError } from "./auth/AuthConfigurationError.mjs";
|
|
6
|
+
import { BindingOf, ClaimsCodec, StrategyBinding, StrategyDefinition, StrategyTypeLambda } from "./auth/definition.mjs";
|
|
7
|
+
import { AuthApi, AuthService, Options, Service, make } from "./auth/Auth.mjs";
|
|
8
|
+
import { AuthMethod, makeAuthStrategy } from "./auth/AuthStrategy.mjs";
|
|
9
|
+
export { type AuthApi, AuthConfigurationError, type AuthMethod, AuthRequest, type AuthService, AuthenticationRequired, type BindingOf, type ClaimsCodec, type Options, RequestBindingConfig, Service, type SessionApi, type SessionApiError, type StrategyBinding, type StrategyDefinition, type StrategyTypeLambda, make, makeAuthStrategy as makeStrategy };
|
package/dist/Auth.mjs
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AuthenticationRequired } from "./operations/errors.mjs";
|
|
2
|
+
import { AuthConfigurationError } from "./auth/AuthConfigurationError.mjs";
|
|
3
|
+
import { AuthRequest } from "./auth/AuthRequest.mjs";
|
|
4
|
+
import { Service, make } from "./auth/Auth.mjs";
|
|
5
|
+
import { makeAuthStrategy } from "./auth/AuthStrategy.mjs";
|
|
6
|
+
import { RequestBindingConfig } from "./operations/RequestBindingConfig.mjs";
|
|
7
|
+
export { AuthConfigurationError, AuthRequest, AuthenticationRequired, RequestBindingConfig, Service, make, makeAuthStrategy as makeStrategy };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ActionDefinitions, ActionError, ActionInput, ActionOptions, ActionSuccess, AnyAuthAction, AnyAuthContract, AuthActions, action, fromOperation, make } from "./operations/actions.mjs";
|
|
2
|
+
import { signIn } from "./password/methods/contracts.mjs";
|
|
3
|
+
import { httpGroup } from "./http/auth-contract.mjs";
|
|
4
|
+
export { type ActionDefinitions, type ActionError, type ActionInput, type ActionOptions, type ActionSuccess, type AnyAuthAction, type AnyAuthContract, type AuthActions, action, fromOperation, httpGroup, make, signIn as passwordSignIn };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Email, SessionClaims, SessionSummary, SubjectId } from "./Schema.mjs";
|
|
2
|
+
import { AuthTokenError, IdentityResolutionError, InvalidSession } from "./Errors.mjs";
|
|
3
|
+
import { AuthTokenCodec } from "./AuthTokenCodec.mjs";
|
|
4
|
+
import { Context, Crypto, Effect, Layer, Option, Redacted, Schema } from "effect";
|
|
5
|
+
//#region src/AuthSession.d.ts
|
|
6
|
+
declare const IssuedSession_base: Schema.Class<IssuedSession, Schema.Struct<{
|
|
7
|
+
readonly token: Schema.brand<Schema.NonEmptyString, "effect-auth/SessionToken">;
|
|
8
|
+
readonly summary: typeof SessionSummary;
|
|
9
|
+
}>, {}>;
|
|
10
|
+
declare class IssuedSession extends IssuedSession_base {}
|
|
11
|
+
/** A verified session and an optional replacement issued by rolling renewal. */
|
|
12
|
+
interface VerifiedSession {
|
|
13
|
+
readonly claims: SessionClaims;
|
|
14
|
+
readonly renewal: Option.Option<IssuedSession>;
|
|
15
|
+
}
|
|
16
|
+
interface IssueSessionOptions {
|
|
17
|
+
/** App-defined claims, signed into the envelope but opaque to effect-auth. */
|
|
18
|
+
readonly ext?: unknown;
|
|
19
|
+
}
|
|
20
|
+
/** Flow data available when effect-auth issues a session through its HTTP API. */
|
|
21
|
+
interface SessionExtContext {
|
|
22
|
+
readonly subjectId: SubjectId;
|
|
23
|
+
readonly email: Email;
|
|
24
|
+
}
|
|
25
|
+
/** A verified session whose app-defined extension has been decoded by its schema. */
|
|
26
|
+
interface VerifiedSessionWithExt<A> extends VerifiedSession {
|
|
27
|
+
readonly ext: Option.Option<A>;
|
|
28
|
+
}
|
|
29
|
+
interface AuthSessionWithExtService<A> {
|
|
30
|
+
readonly issue: (subjectId: SubjectId, ext: A) => Effect.Effect<IssuedSession, AuthTokenError>;
|
|
31
|
+
readonly verify: (token: Redacted.Redacted<string>) => Effect.Effect<VerifiedSessionWithExt<A>, InvalidSession | AuthTokenError>;
|
|
32
|
+
/** Verifies the token and renews it when the configured rolling interval is due. */
|
|
33
|
+
readonly verifyAndRenew: (token: Redacted.Redacted<string>) => Effect.Effect<VerifiedSessionWithExt<A>, InvalidSession | AuthTokenError | IdentityResolutionError>;
|
|
34
|
+
/** Issues from flow data using the optional builder in the declaration. */
|
|
35
|
+
readonly issueFromContext: (context: SessionExtContext) => Effect.Effect<IssuedSession, AuthTokenError>;
|
|
36
|
+
}
|
|
37
|
+
type SessionExtBuilder<A> = (context: SessionExtContext) => Effect.Effect<A>;
|
|
38
|
+
type AuthSessionWithExtOptions<S extends Schema.Codec<unknown, unknown>> = {
|
|
39
|
+
/** App-defined claims schema. The decoded type becomes the service extension type. */
|
|
40
|
+
readonly ext: S;
|
|
41
|
+
} & (SessionExtContext extends S["Encoded"] ? {
|
|
42
|
+
/** Overrides automatic decoding from the HTTP session context. */
|
|
43
|
+
readonly build?: SessionExtBuilder<NoInfer<S["Type"]>>;
|
|
44
|
+
} : {
|
|
45
|
+
/** Required when the schema cannot decode the HTTP session context directly. */
|
|
46
|
+
readonly build: SessionExtBuilder<NoInfer<S["Type"]>>;
|
|
47
|
+
});
|
|
48
|
+
type AuthSessionWithExtDefinition<S extends Schema.Codec<unknown, unknown>> = SessionExtContext extends S["Encoded"] ? S | AuthSessionWithExtOptions<S> : AuthSessionWithExtOptions<S>;
|
|
49
|
+
/** Context service class produced by {@link AuthSession.WithExt}. */
|
|
50
|
+
interface AuthSessionWithExtClass<Self, Id extends string, A> extends Context.ServiceClass<Self, Id, AuthSessionWithExtService<A>> {
|
|
51
|
+
readonly ext: Schema.Codec<A, unknown>;
|
|
52
|
+
readonly layer: Layer.Layer<Self, never, AuthSession>;
|
|
53
|
+
}
|
|
54
|
+
declare const makeAuthSessionWithExt: <Self>() => <const Id extends string, S extends Schema.Codec<unknown, unknown>>(id: Id, definition: AuthSessionWithExtDefinition<S>) => AuthSessionWithExtClass<Self, Id, S["Type"]>;
|
|
55
|
+
declare const AuthSession_base: Context.ServiceClass<AuthSession, "effect-auth/AuthSession", {
|
|
56
|
+
readonly issue: (subjectId: SubjectId, options?: IssueSessionOptions) => Effect.Effect<IssuedSession, AuthTokenError>;
|
|
57
|
+
readonly verify: (token: Redacted.Redacted<string>) => Effect.Effect<SessionClaims, InvalidSession | AuthTokenError>;
|
|
58
|
+
/** Verifies the token and issues a replacement when rolling renewal is due. */
|
|
59
|
+
readonly verifyAndRenew: (token: Redacted.Redacted<string>) => Effect.Effect<VerifiedSession, InvalidSession | AuthTokenError | IdentityResolutionError>;
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Stateless session issuance and verification. Each token has a fixed expiry;
|
|
63
|
+
* authenticated HTTP activity can replace it after the configured renewal
|
|
64
|
+
* interval. There is no per-session revocation. Sign-out removes the browser
|
|
65
|
+
* cookie, and bulk invalidation happens through key removal or by bumping the
|
|
66
|
+
* configured session generation.
|
|
67
|
+
*/
|
|
68
|
+
declare class AuthSession extends AuthSession_base {
|
|
69
|
+
/**
|
|
70
|
+
* Declares an app-typed session service from one extension schema. Passing
|
|
71
|
+
* the schema directly automatically constructs extensions from compatible
|
|
72
|
+
* HTTP session context; schemas with derived inputs provide a `build`
|
|
73
|
+
* override. The core service remains opaque: this wrapper encodes before
|
|
74
|
+
* issuance and decodes after verification, preserving `None` for legacy or
|
|
75
|
+
* undecodable extensions.
|
|
76
|
+
*/
|
|
77
|
+
static readonly WithExt: typeof makeAuthSessionWithExt;
|
|
78
|
+
static readonly layer: Layer.Layer<AuthSession, never, AuthTokenCodec | Crypto.Crypto>;
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { AuthSession, AuthSessionWithExtClass, AuthSessionWithExtService, IssueSessionOptions, IssuedSession, SessionExtBuilder, SessionExtContext, VerifiedSession, VerifiedSessionWithExt };
|
|
82
|
+
//# sourceMappingURL=AuthSession.d.mts.map
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { SessionClaims, SessionSummary, SessionToken, SessionTokenId } from "./Schema.mjs";
|
|
2
|
+
import { AuthTokenError } from "./Errors.mjs";
|
|
3
|
+
import { AuthTokenCodec } from "./AuthTokenCodec.mjs";
|
|
4
|
+
import { AuthPolicy, revalidateSessionClaims } from "./Policy.mjs";
|
|
5
|
+
import { Context, Crypto, DateTime, Duration, Effect, Layer, Option, Schema } from "effect";
|
|
6
|
+
//#region src/AuthSession.ts
|
|
7
|
+
var IssuedSession = class extends Schema.Class("effect-auth/IssuedSession")({
|
|
8
|
+
token: SessionToken,
|
|
9
|
+
summary: SessionSummary
|
|
10
|
+
}) {};
|
|
11
|
+
const decodeSessionTokenId = Schema.decodeEffect(SessionTokenId);
|
|
12
|
+
const makeAuthSessionWithExt = () => (id, definition) => {
|
|
13
|
+
const definitionIsSchema = Schema.isSchema(definition);
|
|
14
|
+
const ext = definitionIsSchema ? definition : definition.ext;
|
|
15
|
+
const build = definitionIsSchema ? void 0 : definition.build;
|
|
16
|
+
const Service = Context.Service()(id);
|
|
17
|
+
const extCodec = ext;
|
|
18
|
+
const encodeExt = Schema.encodeEffect(extCodec);
|
|
19
|
+
const decodeContext = Schema.decodeEffect(extCodec);
|
|
20
|
+
const decodeExt = Schema.decodeUnknownEffect(ext);
|
|
21
|
+
const layer = Layer.effect(Service, Effect.map(AuthSession, (sessions) => {
|
|
22
|
+
const issue = Effect.fn(`${id}.issue`)(function* (subjectId, ext) {
|
|
23
|
+
const encoded = yield* encodeExt(ext).pipe(Effect.mapError((error) => AuthTokenError.make({ message: `Session extension encoding failed: ${error.message}` })));
|
|
24
|
+
return yield* sessions.issue(subjectId, { ext: encoded });
|
|
25
|
+
});
|
|
26
|
+
return Service.of({
|
|
27
|
+
issue,
|
|
28
|
+
verify: Effect.fn(`${id}.verify`)(function* (token) {
|
|
29
|
+
const claims = yield* sessions.verify(token);
|
|
30
|
+
return {
|
|
31
|
+
claims,
|
|
32
|
+
ext: yield* Effect.option(decodeExt(claims.ext)),
|
|
33
|
+
renewal: Option.none()
|
|
34
|
+
};
|
|
35
|
+
}),
|
|
36
|
+
verifyAndRenew: Effect.fn(`${id}.verifyAndRenew`)(function* (token) {
|
|
37
|
+
const verified = yield* sessions.verifyAndRenew(token);
|
|
38
|
+
const ext = yield* Effect.option(decodeExt(verified.claims.ext));
|
|
39
|
+
return {
|
|
40
|
+
...verified,
|
|
41
|
+
ext
|
|
42
|
+
};
|
|
43
|
+
}),
|
|
44
|
+
issueFromContext: Effect.fn(`${id}.issueFromContext`)(function* (context) {
|
|
45
|
+
const ext = build === void 0 ? yield* decodeContext(context).pipe(Effect.mapError((error) => AuthTokenError.make({ message: `Session extension construction failed: ${error.message}` }))) : yield* build(context);
|
|
46
|
+
return yield* issue(context.subjectId, ext);
|
|
47
|
+
})
|
|
48
|
+
});
|
|
49
|
+
}));
|
|
50
|
+
return Object.assign(Service, {
|
|
51
|
+
ext,
|
|
52
|
+
layer
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Stateless session issuance and verification. Each token has a fixed expiry;
|
|
57
|
+
* authenticated HTTP activity can replace it after the configured renewal
|
|
58
|
+
* interval. There is no per-session revocation. Sign-out removes the browser
|
|
59
|
+
* cookie, and bulk invalidation happens through key removal or by bumping the
|
|
60
|
+
* configured session generation.
|
|
61
|
+
*/
|
|
62
|
+
var AuthSession = class AuthSession extends Context.Service()("effect-auth/AuthSession") {
|
|
63
|
+
/**
|
|
64
|
+
* Declares an app-typed session service from one extension schema. Passing
|
|
65
|
+
* the schema directly automatically constructs extensions from compatible
|
|
66
|
+
* HTTP session context; schemas with derived inputs provide a `build`
|
|
67
|
+
* override. The core service remains opaque: this wrapper encodes before
|
|
68
|
+
* issuance and decodes after verification, preserving `None` for legacy or
|
|
69
|
+
* undecodable extensions.
|
|
70
|
+
*/
|
|
71
|
+
static WithExt = makeAuthSessionWithExt;
|
|
72
|
+
static layer = Layer.effect(AuthSession)(Effect.gen(function* () {
|
|
73
|
+
const policy = yield* AuthPolicy;
|
|
74
|
+
const codec = yield* AuthTokenCodec;
|
|
75
|
+
const crypto = yield* Crypto.Crypto;
|
|
76
|
+
const issue = Effect.fn("AuthSession.issue")(function* (subjectId, options) {
|
|
77
|
+
const now = yield* DateTime.now;
|
|
78
|
+
const expiresAt = DateTime.addDuration(now, policy.sessionLifetime);
|
|
79
|
+
const uuid = yield* crypto.randomUUIDv4.pipe(Effect.mapError(() => AuthTokenError.make({ message: "Secure randomness unavailable" })));
|
|
80
|
+
const tokenId = yield* decodeSessionTokenId(uuid).pipe(Effect.orDie);
|
|
81
|
+
const claims = SessionClaims.make({
|
|
82
|
+
ver: 1,
|
|
83
|
+
gen: policy.sessionGeneration,
|
|
84
|
+
kid: codec.activeKeyId,
|
|
85
|
+
sub: subjectId,
|
|
86
|
+
...options?.ext === void 0 ? {} : { ext: options.ext },
|
|
87
|
+
iss: policy.issuer,
|
|
88
|
+
aud: policy.audience,
|
|
89
|
+
iat: now,
|
|
90
|
+
exp: expiresAt,
|
|
91
|
+
jti: tokenId
|
|
92
|
+
});
|
|
93
|
+
const token = yield* codec.encodeSession(claims);
|
|
94
|
+
return IssuedSession.make({
|
|
95
|
+
token,
|
|
96
|
+
summary: SessionSummary.make({
|
|
97
|
+
subjectId,
|
|
98
|
+
expiresAt
|
|
99
|
+
})
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
const verify = Effect.fn("AuthSession.verify")(function* (token) {
|
|
103
|
+
const claims = yield* codec.decodeSession(token);
|
|
104
|
+
return yield* revalidateSessionClaims(claims, {
|
|
105
|
+
issuer: policy.issuer,
|
|
106
|
+
audience: policy.audience,
|
|
107
|
+
sessionGeneration: policy.sessionGeneration,
|
|
108
|
+
allowedSigningKeyIds: new Set(codec.keyIds)
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
const renewIfDue = Effect.fn("AuthSession.renewIfDue")(function* (claims) {
|
|
112
|
+
const now = yield* DateTime.now;
|
|
113
|
+
const issuedAtMillis = DateTime.toEpochMillis(claims.iat);
|
|
114
|
+
const tokenLifetimeMillis = DateTime.toEpochMillis(claims.exp) - issuedAtMillis;
|
|
115
|
+
const tokenAgeMillis = DateTime.toEpochMillis(now) - issuedAtMillis;
|
|
116
|
+
const configuredLifetimeMillis = Duration.toMillis(policy.sessionLifetime);
|
|
117
|
+
const renewalIntervalMillis = Duration.toMillis(policy.sessionRenewalInterval);
|
|
118
|
+
if (!(tokenLifetimeMillis !== configuredLifetimeMillis || tokenAgeMillis >= renewalIntervalMillis)) return Option.none();
|
|
119
|
+
const renewed = yield* issue(claims.sub, claims.ext === void 0 ? void 0 : { ext: claims.ext });
|
|
120
|
+
return Option.some(renewed);
|
|
121
|
+
});
|
|
122
|
+
return AuthSession.of({
|
|
123
|
+
issue,
|
|
124
|
+
verify,
|
|
125
|
+
verifyAndRenew: Effect.fn("AuthSession.verifyAndRenew")(function* (token) {
|
|
126
|
+
const claims = yield* verify(token);
|
|
127
|
+
return {
|
|
128
|
+
claims,
|
|
129
|
+
renewal: yield* renewIfDue(claims)
|
|
130
|
+
};
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
}));
|
|
134
|
+
};
|
|
135
|
+
//#endregion
|
|
136
|
+
export { AuthSession, IssuedSession };
|
|
137
|
+
|
|
138
|
+
//# sourceMappingURL=AuthSession.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthSession.mjs","names":[],"sources":["../src/AuthSession.ts"],"sourcesContent":["import {\n Context,\n Crypto,\n DateTime,\n Duration,\n Effect,\n Layer,\n Option,\n type Redacted,\n Schema,\n} from \"effect\";\n\nimport { AuthTokenCodec } from \"./AuthTokenCodec\";\nimport type { IdentityResolutionError, InvalidSession } from \"./Errors\";\nimport { AuthTokenError } from \"./Errors\";\nimport { AuthPolicy, revalidateSessionClaims } from \"./Policy\";\nimport {\n type Email,\n type SubjectId,\n SessionClaims,\n SessionSummary,\n SessionToken,\n SessionTokenId,\n} from \"./Schema\";\n\nexport class IssuedSession extends Schema.Class<IssuedSession>(\"effect-auth/IssuedSession\")({\n token: SessionToken,\n summary: SessionSummary,\n}) {}\n\n/** A verified session and an optional replacement issued by rolling renewal. */\nexport interface VerifiedSession {\n readonly claims: SessionClaims;\n readonly renewal: Option.Option<IssuedSession>;\n}\n\nconst decodeSessionTokenId = Schema.decodeEffect(SessionTokenId);\n\nexport interface IssueSessionOptions {\n /** App-defined claims, signed into the envelope but opaque to effect-auth. */\n readonly ext?: unknown;\n}\n\n/** Flow data available when effect-auth issues a session through its HTTP API. */\nexport interface SessionExtContext {\n readonly subjectId: SubjectId;\n readonly email: Email;\n}\n\n/** A verified session whose app-defined extension has been decoded by its schema. */\nexport interface VerifiedSessionWithExt<A> extends VerifiedSession {\n readonly ext: Option.Option<A>;\n}\n\nexport interface AuthSessionWithExtService<A> {\n readonly issue: (subjectId: SubjectId, ext: A) => Effect.Effect<IssuedSession, AuthTokenError>;\n readonly verify: (\n token: Redacted.Redacted<string>,\n ) => Effect.Effect<VerifiedSessionWithExt<A>, InvalidSession | AuthTokenError>;\n /** Verifies the token and renews it when the configured rolling interval is due. */\n readonly verifyAndRenew: (\n token: Redacted.Redacted<string>,\n ) => Effect.Effect<\n VerifiedSessionWithExt<A>,\n InvalidSession | AuthTokenError | IdentityResolutionError\n >;\n /** Issues from flow data using the optional builder in the declaration. */\n readonly issueFromContext: (\n context: SessionExtContext,\n ) => Effect.Effect<IssuedSession, AuthTokenError>;\n}\n\nexport type SessionExtBuilder<A> = (context: SessionExtContext) => Effect.Effect<A>;\n\ntype AuthSessionWithExtOptions<S extends Schema.Codec<unknown, unknown>> = {\n /** App-defined claims schema. The decoded type becomes the service extension type. */\n readonly ext: S;\n} & (SessionExtContext extends S[\"Encoded\"]\n ? {\n /** Overrides automatic decoding from the HTTP session context. */\n readonly build?: SessionExtBuilder<NoInfer<S[\"Type\"]>>;\n }\n : {\n /** Required when the schema cannot decode the HTTP session context directly. */\n readonly build: SessionExtBuilder<NoInfer<S[\"Type\"]>>;\n });\n\ntype AuthSessionWithExtDefinition<S extends Schema.Codec<unknown, unknown>> =\n SessionExtContext extends S[\"Encoded\"]\n ? S | AuthSessionWithExtOptions<S>\n : AuthSessionWithExtOptions<S>;\n\n/** Context service class produced by {@link AuthSession.WithExt}. */\nexport interface AuthSessionWithExtClass<Self, Id extends string, A> extends Context.ServiceClass<\n Self,\n Id,\n AuthSessionWithExtService<A>\n> {\n readonly ext: Schema.Codec<A, unknown>;\n readonly layer: Layer.Layer<Self, never, AuthSession>;\n}\n\nconst makeAuthSessionWithExt =\n <Self>() =>\n <const Id extends string, S extends Schema.Codec<unknown, unknown>>(\n id: Id,\n definition: AuthSessionWithExtDefinition<S>,\n ): AuthSessionWithExtClass<Self, Id, S[\"Type\"]> => {\n const definitionIsSchema = Schema.isSchema(definition);\n const ext = definitionIsSchema ? (definition as S) : definition.ext;\n const build = definitionIsSchema ? undefined : definition.build;\n const Service = Context.Service<Self, AuthSessionWithExtService<S[\"Type\"]>>()(id);\n const extCodec: Schema.Codec<S[\"Type\"], S[\"Encoded\"]> = ext;\n const encodeExt = Schema.encodeEffect(extCodec);\n const decodeContext = Schema.decodeEffect(extCodec);\n // oxlint-disable-next-line no-restricted-properties -- SessionClaims.ext is an intentionally unknown wire boundary.\n const decodeExt = Schema.decodeUnknownEffect(ext);\n\n const layer = Layer.effect(\n Service,\n Effect.map(AuthSession, (sessions) => {\n const issue = Effect.fn(`${id}.issue`)(function* (subjectId: SubjectId, ext: S[\"Type\"]) {\n const encoded = yield* encodeExt(ext).pipe(\n Effect.mapError((error) =>\n AuthTokenError.make({\n message: `Session extension encoding failed: ${error.message}`,\n }),\n ),\n );\n\n return yield* sessions.issue(subjectId, { ext: encoded });\n });\n\n return Service.of({\n issue,\n verify: Effect.fn(`${id}.verify`)(function* (token) {\n const claims = yield* sessions.verify(token);\n const ext = yield* Effect.option(decodeExt(claims.ext));\n\n return { claims, ext, renewal: Option.none() };\n }),\n verifyAndRenew: Effect.fn(`${id}.verifyAndRenew`)(function* (token) {\n const verified = yield* sessions.verifyAndRenew(token);\n const ext = yield* Effect.option(decodeExt(verified.claims.ext));\n\n return { ...verified, ext };\n }),\n issueFromContext: Effect.fn(`${id}.issueFromContext`)(function* (context) {\n const ext =\n build === undefined\n ? // The options type admits this branch only when the context\n // structurally satisfies the schema's encoded input. TS does\n // not narrow indexed access types through that conditional.\n yield* decodeContext(context as S[\"Encoded\"]).pipe(\n Effect.mapError((error) =>\n AuthTokenError.make({\n message: `Session extension construction failed: ${error.message}`,\n }),\n ),\n )\n : yield* build(context);\n\n return yield* issue(context.subjectId, ext);\n }),\n });\n }),\n );\n\n return Object.assign(Service, {\n ext,\n layer,\n });\n };\n\n/**\n * Stateless session issuance and verification. Each token has a fixed expiry;\n * authenticated HTTP activity can replace it after the configured renewal\n * interval. There is no per-session revocation. Sign-out removes the browser\n * cookie, and bulk invalidation happens through key removal or by bumping the\n * configured session generation.\n */\nexport class AuthSession extends Context.Service<\n AuthSession,\n {\n readonly issue: (\n subjectId: SubjectId,\n options?: IssueSessionOptions,\n ) => Effect.Effect<IssuedSession, AuthTokenError>;\n readonly verify: (\n token: Redacted.Redacted<string>,\n ) => Effect.Effect<SessionClaims, InvalidSession | AuthTokenError>;\n /** Verifies the token and issues a replacement when rolling renewal is due. */\n readonly verifyAndRenew: (\n token: Redacted.Redacted<string>,\n ) => Effect.Effect<VerifiedSession, InvalidSession | AuthTokenError | IdentityResolutionError>;\n }\n>()(\"effect-auth/AuthSession\") {\n /**\n * Declares an app-typed session service from one extension schema. Passing\n * the schema directly automatically constructs extensions from compatible\n * HTTP session context; schemas with derived inputs provide a `build`\n * override. The core service remains opaque: this wrapper encodes before\n * issuance and decodes after verification, preserving `None` for legacy or\n * undecodable extensions.\n */\n static readonly WithExt = makeAuthSessionWithExt;\n\n static readonly layer: Layer.Layer<AuthSession, never, AuthTokenCodec | Crypto.Crypto> =\n Layer.effect(AuthSession)(\n Effect.gen(function* () {\n const policy = yield* AuthPolicy;\n const codec = yield* AuthTokenCodec;\n const crypto = yield* Crypto.Crypto;\n\n const issue = Effect.fn(\"AuthSession.issue\")(function* (\n subjectId: SubjectId,\n options?: IssueSessionOptions,\n ) {\n const now = yield* DateTime.now;\n const expiresAt = DateTime.addDuration(now, policy.sessionLifetime);\n\n const uuid = yield* crypto.randomUUIDv4.pipe(\n Effect.mapError(() =>\n AuthTokenError.make({ message: \"Secure randomness unavailable\" }),\n ),\n );\n\n const tokenId = yield* decodeSessionTokenId(uuid).pipe(Effect.orDie);\n\n const claims = SessionClaims.make({\n ver: 1,\n gen: policy.sessionGeneration,\n kid: codec.activeKeyId,\n sub: subjectId,\n ...(options?.ext === undefined ? {} : { ext: options.ext }),\n iss: policy.issuer,\n aud: policy.audience,\n iat: now,\n exp: expiresAt,\n jti: tokenId,\n });\n\n const token = yield* codec.encodeSession(claims);\n\n return IssuedSession.make({\n token,\n summary: SessionSummary.make({ subjectId, expiresAt }),\n });\n });\n\n const verify = Effect.fn(\"AuthSession.verify\")(function* (\n token: Redacted.Redacted<string>,\n ) {\n const claims = yield* codec.decodeSession(token);\n\n return yield* revalidateSessionClaims(claims, {\n issuer: policy.issuer,\n audience: policy.audience,\n sessionGeneration: policy.sessionGeneration,\n allowedSigningKeyIds: new Set(codec.keyIds),\n });\n });\n\n const renewIfDue = Effect.fn(\"AuthSession.renewIfDue\")(function* (claims: SessionClaims) {\n const now = yield* DateTime.now;\n const issuedAtMillis = DateTime.toEpochMillis(claims.iat);\n const tokenLifetimeMillis = DateTime.toEpochMillis(claims.exp) - issuedAtMillis;\n const tokenAgeMillis = DateTime.toEpochMillis(now) - issuedAtMillis;\n const configuredLifetimeMillis = Duration.toMillis(policy.sessionLifetime);\n const renewalIntervalMillis = Duration.toMillis(policy.sessionRenewalInterval);\n\n const renewalDue =\n tokenLifetimeMillis !== configuredLifetimeMillis ||\n tokenAgeMillis >= renewalIntervalMillis;\n\n if (!renewalDue) return Option.none<IssuedSession>();\n\n const renewed = yield* issue(\n claims.sub,\n claims.ext === undefined ? undefined : { ext: claims.ext },\n );\n\n return Option.some(renewed);\n });\n\n return AuthSession.of({\n issue,\n verify,\n verifyAndRenew: Effect.fn(\"AuthSession.verifyAndRenew\")(function* (token) {\n const claims = yield* verify(token);\n const renewal = yield* renewIfDue(claims);\n\n return { claims, renewal };\n }),\n });\n }),\n );\n}\n"],"mappings":";;;;;;AAyBA,IAAa,gBAAb,cAAmC,OAAO,MAAqB,2BAA2B,CAAC,CAAC;CAC1F,OAAO;CACP,SAAS;AACX,CAAC,CAAC,CAAC,CAAC;AAQJ,MAAM,uBAAuB,OAAO,aAAa,cAAc;AAkE/D,MAAM,gCAGF,IACA,eACiD;CACjD,MAAM,qBAAqB,OAAO,SAAS,UAAU;CACrD,MAAM,MAAM,qBAAsB,aAAmB,WAAW;CAChE,MAAM,QAAQ,qBAAqB,KAAA,IAAY,WAAW;CAC1D,MAAM,UAAU,QAAQ,QAAoD,CAAC,CAAC,EAAE;CAChF,MAAM,WAAkD;CACxD,MAAM,YAAY,OAAO,aAAa,QAAQ;CAC9C,MAAM,gBAAgB,OAAO,aAAa,QAAQ;CAElD,MAAM,YAAY,OAAO,oBAAoB,GAAG;CAEhD,MAAM,QAAQ,MAAM,OAClB,SACA,OAAO,IAAI,cAAc,aAAa;EACpC,MAAM,QAAQ,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC,WAAW,WAAsB,KAAgB;GACtF,MAAM,UAAU,OAAO,UAAU,GAAG,CAAC,CAAC,KACpC,OAAO,UAAU,UACf,eAAe,KAAK,EAClB,SAAS,sCAAsC,MAAM,UACvD,CAAC,CACH,CACF;GAEA,OAAO,OAAO,SAAS,MAAM,WAAW,EAAE,KAAK,QAAQ,CAAC;EAC1D,CAAC;EAED,OAAO,QAAQ,GAAG;GAChB;GACA,QAAQ,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC,WAAW,OAAO;IAClD,MAAM,SAAS,OAAO,SAAS,OAAO,KAAK;IAG3C,OAAO;KAAE;KAAQ,KAAA,OAFE,OAAO,OAAO,UAAU,OAAO,GAAG,CAAC;KAEhC,SAAS,OAAO,KAAK;IAAE;GAC/C,CAAC;GACD,gBAAgB,OAAO,GAAG,GAAG,GAAG,gBAAgB,CAAC,CAAC,WAAW,OAAO;IAClE,MAAM,WAAW,OAAO,SAAS,eAAe,KAAK;IACrD,MAAM,MAAM,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,GAAG,CAAC;IAE/D,OAAO;KAAE,GAAG;KAAU;IAAI;GAC5B,CAAC;GACD,kBAAkB,OAAO,GAAG,GAAG,GAAG,kBAAkB,CAAC,CAAC,WAAW,SAAS;IACxE,MAAM,MACJ,UAAU,KAAA,IAIN,OAAO,cAAc,OAAuB,CAAC,CAAC,KAC5C,OAAO,UAAU,UACf,eAAe,KAAK,EAClB,SAAS,0CAA0C,MAAM,UAC3D,CAAC,CACH,CACF,IACA,OAAO,MAAM,OAAO;IAE1B,OAAO,OAAO,MAAM,QAAQ,WAAW,GAAG;GAC5C,CAAC;EACH,CAAC;CACH,CAAC,CACH;CAEA,OAAO,OAAO,OAAO,SAAS;EAC5B;EACA;CACF,CAAC;AACH;;;;;;;;AASF,IAAa,cAAb,MAAa,oBAAoB,QAAQ,QAevC,CAAC,CAAC,yBAAyB,CAAC,CAAC;;;;;;;;;CAS7B,OAAgB,UAAU;CAE1B,OAAgB,QACd,MAAM,OAAO,WAAW,CAAC,CACvB,OAAO,IAAI,aAAa;EACtB,MAAM,SAAS,OAAO;EACtB,MAAM,QAAQ,OAAO;EACrB,MAAM,SAAS,OAAO,OAAO;EAE7B,MAAM,QAAQ,OAAO,GAAG,mBAAmB,CAAC,CAAC,WAC3C,WACA,SACA;GACA,MAAM,MAAM,OAAO,SAAS;GAC5B,MAAM,YAAY,SAAS,YAAY,KAAK,OAAO,eAAe;GAElE,MAAM,OAAO,OAAO,OAAO,aAAa,KACtC,OAAO,eACL,eAAe,KAAK,EAAE,SAAS,gCAAgC,CAAC,CAClE,CACF;GAEA,MAAM,UAAU,OAAO,qBAAqB,IAAI,CAAC,CAAC,KAAK,OAAO,KAAK;GAEnE,MAAM,SAAS,cAAc,KAAK;IAChC,KAAK;IACL,KAAK,OAAO;IACZ,KAAK,MAAM;IACX,KAAK;IACL,GAAI,SAAS,QAAQ,KAAA,IAAY,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI;IACzD,KAAK,OAAO;IACZ,KAAK,OAAO;IACZ,KAAK;IACL,KAAK;IACL,KAAK;GACP,CAAC;GAED,MAAM,QAAQ,OAAO,MAAM,cAAc,MAAM;GAE/C,OAAO,cAAc,KAAK;IACxB;IACA,SAAS,eAAe,KAAK;KAAE;KAAW;IAAU,CAAC;GACvD,CAAC;EACH,CAAC;EAED,MAAM,SAAS,OAAO,GAAG,oBAAoB,CAAC,CAAC,WAC7C,OACA;GACA,MAAM,SAAS,OAAO,MAAM,cAAc,KAAK;GAE/C,OAAO,OAAO,wBAAwB,QAAQ;IAC5C,QAAQ,OAAO;IACf,UAAU,OAAO;IACjB,mBAAmB,OAAO;IAC1B,sBAAsB,IAAI,IAAI,MAAM,MAAM;GAC5C,CAAC;EACH,CAAC;EAED,MAAM,aAAa,OAAO,GAAG,wBAAwB,CAAC,CAAC,WAAW,QAAuB;GACvF,MAAM,MAAM,OAAO,SAAS;GAC5B,MAAM,iBAAiB,SAAS,cAAc,OAAO,GAAG;GACxD,MAAM,sBAAsB,SAAS,cAAc,OAAO,GAAG,IAAI;GACjE,MAAM,iBAAiB,SAAS,cAAc,GAAG,IAAI;GACrD,MAAM,2BAA2B,SAAS,SAAS,OAAO,eAAe;GACzE,MAAM,wBAAwB,SAAS,SAAS,OAAO,sBAAsB;GAM7E,IAAI,EAHF,wBAAwB,4BACxB,kBAAkB,wBAEH,OAAO,OAAO,KAAoB;GAEnD,MAAM,UAAU,OAAO,MACrB,OAAO,KACP,OAAO,QAAQ,KAAA,IAAY,KAAA,IAAY,EAAE,KAAK,OAAO,IAAI,CAC3D;GAEA,OAAO,OAAO,KAAK,OAAO;EAC5B,CAAC;EAED,OAAO,YAAY,GAAG;GACpB;GACA;GACA,gBAAgB,OAAO,GAAG,4BAA4B,CAAC,CAAC,WAAW,OAAO;IACxE,MAAM,SAAS,OAAO,OAAO,KAAK;IAGlC,OAAO;KAAE;KAAQ,SAAA,OAFM,WAAW,MAAM;IAEf;GAC3B,CAAC;EACH,CAAC;CACH,CAAC,CACH;AACJ"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ConsumeChallenge, ConsumeRegistration, NewChallenge, NewRegistration, PendingRegistration, TokenDigest, VerifiedEmail } from "./Schema.mjs";
|
|
2
|
+
import { AuthRateLimited, AuthStoreError, InvalidRegistration } from "./Errors.mjs";
|
|
3
|
+
import { ConsumeDecision } from "./auth/ConsumeDecision.mjs";
|
|
4
|
+
import { AuthStoreDecisions, ChallengeConsumeDecision } from "./internal/AuthStoreDecisions.mjs";
|
|
5
|
+
import { Context, Effect, Layer, Schema } from "effect";
|
|
6
|
+
//#region src/AuthStore.d.ts
|
|
7
|
+
type IssueChallengeError = AuthRateLimited | AuthStoreError;
|
|
8
|
+
declare const EmailOtpRejectionReason: Schema.Literals<readonly ["missing_challenge", "consumed_challenge", "superseded_challenge", "expired_challenge", "missing_challenge_series", "attempts_exhausted", "bad_code"]>;
|
|
9
|
+
declare const EmailOtpRejected_base: Schema.Class<EmailOtpRejected, Schema.TaggedStruct<"EmailOtpRejected", {
|
|
10
|
+
readonly reason: Schema.Literals<readonly ["missing_challenge", "consumed_challenge", "superseded_challenge", "expired_challenge", "missing_challenge_series", "attempts_exhausted", "bad_code"]>;
|
|
11
|
+
}>, import("effect/Cause").YieldableError>;
|
|
12
|
+
/** Internal rejection detail that the HTTP workflow collapses to `InvalidEmailOtp`. */
|
|
13
|
+
declare class EmailOtpRejected extends EmailOtpRejected_base {}
|
|
14
|
+
declare const AuthStoreBackend_base: Context.ServiceClass<AuthStoreBackend, "effect-auth/AuthStoreBackend", {
|
|
15
|
+
/** Resolves the stored value for a key, or `undefined` when absent. */
|
|
16
|
+
readonly get: (key: string) => Effect.Effect<unknown, AuthStoreError>;
|
|
17
|
+
readonly put: (key: string, value: unknown) => Effect.Effect<void, AuthStoreError>;
|
|
18
|
+
readonly remove: (key: string) => Effect.Effect<void, AuthStoreError>;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Deliberately narrow storage driver behind the store state machine: the
|
|
22
|
+
* in-memory map, Durable Object storage, or any keyed store whose writes
|
|
23
|
+
* become visible in order. Values handed to `put` are already JSON-safe
|
|
24
|
+
* encoded rows, so `get` legitimately yields `unknown`.
|
|
25
|
+
* Retain challenge rows through their original expiry, including after consumption.
|
|
26
|
+
*/
|
|
27
|
+
declare class AuthStoreBackend extends AuthStoreBackend_base {
|
|
28
|
+
/** In-memory backend for tests and local development; never durable. */
|
|
29
|
+
static readonly layerMemory: Layer.Layer<AuthStoreBackend>;
|
|
30
|
+
}
|
|
31
|
+
declare const AuthStore_base: Context.ServiceClass<AuthStore, "effect-auth/AuthStore", {
|
|
32
|
+
readonly issueChallenge: (input: NewChallenge) => Effect.Effect<void, IssueChallengeError>;
|
|
33
|
+
/**
|
|
34
|
+
* Checks token digest, OTP digest, purpose, expiry, supersession,
|
|
35
|
+
* consumption, and attempt budget as one atomic operation. A failed
|
|
36
|
+
* comparison increments the rolling attempt budget; success consumes the
|
|
37
|
+
* challenge. The workflow logs the internal rejection reason, then
|
|
38
|
+
* collapses every failure to the public `InvalidEmailOtp`.
|
|
39
|
+
*/
|
|
40
|
+
readonly consumeChallenge: (input: ConsumeChallenge) => Effect.Effect<VerifiedEmail, EmailOtpRejected | AuthStoreError>;
|
|
41
|
+
readonly issueRegistration: (input: NewRegistration) => Effect.Effect<void, AuthStoreError>;
|
|
42
|
+
readonly inspectRegistration: (tokenDigest: TokenDigest) => Effect.Effect<PendingRegistration, InvalidRegistration | AuthStoreError>;
|
|
43
|
+
readonly consumeRegistration: (input: ConsumeRegistration) => Effect.Effect<void, InvalidRegistration | AuthStoreError>;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* Semantic persistence port for challenges and pending registrations, not
|
|
47
|
+
* CRUD. The consume operations must be atomic: exactly one of concurrent
|
|
48
|
+
* valid consumptions may succeed. Per-challenge attempts, resend cooldown,
|
|
49
|
+
* and email-scoped issuance limits live behind this contract; IP/network
|
|
50
|
+
* limits stay at the edge.
|
|
51
|
+
*
|
|
52
|
+
* Adapters either implement this interface directly against a store with real
|
|
53
|
+
* transactions, or provide an `AuthStoreBackend` to `layerBackend`. Either
|
|
54
|
+
* way, the conformance suite exported from `effect-auth/Testing` is the
|
|
55
|
+
* acceptance test.
|
|
56
|
+
*/
|
|
57
|
+
declare class AuthStore extends AuthStore_base {
|
|
58
|
+
/** The canonical state machine over whichever `AuthStoreBackend` is provided. */
|
|
59
|
+
static readonly layerBackend: Layer.Layer<AuthStore, never, AuthStoreBackend>;
|
|
60
|
+
/**
|
|
61
|
+
* In-memory adapter for tests and local development. Never a durable
|
|
62
|
+
* production adapter.
|
|
63
|
+
*/
|
|
64
|
+
static readonly layerMemory: Layer.Layer<AuthStore>;
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
export { AuthStore, AuthStoreBackend, AuthStoreDecisions, type ChallengeConsumeDecision, type ConsumeDecision, EmailOtpRejected, EmailOtpRejectionReason, IssueChallengeError };
|
|
68
|
+
//# sourceMappingURL=AuthStore.d.mts.map
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { NewChallenge, NewRegistration, PendingRegistration, VerifiedEmail, timingSafeStringEqual } from "./Schema.mjs";
|
|
2
|
+
import { AuthRateLimited, AuthStoreError, InvalidRegistration } from "./Errors.mjs";
|
|
3
|
+
import { AuthStoreDecisions } from "./internal/AuthStoreDecisions.mjs";
|
|
4
|
+
import { Context, DateTime, Duration, Effect, Layer, Schema, Semaphore } from "effect";
|
|
5
|
+
//#region src/AuthStore.ts
|
|
6
|
+
const EmailOtpRejectionReason = Schema.Literals([
|
|
7
|
+
"missing_challenge",
|
|
8
|
+
"consumed_challenge",
|
|
9
|
+
"superseded_challenge",
|
|
10
|
+
"expired_challenge",
|
|
11
|
+
"missing_challenge_series",
|
|
12
|
+
"attempts_exhausted",
|
|
13
|
+
"bad_code"
|
|
14
|
+
]);
|
|
15
|
+
/** Internal rejection detail that the HTTP workflow collapses to `InvalidEmailOtp`. */
|
|
16
|
+
var EmailOtpRejected = class extends Schema.TaggedError()("EmailOtpRejected", { reason: EmailOtpRejectionReason }) {};
|
|
17
|
+
/**
|
|
18
|
+
* Deliberately narrow storage driver behind the store state machine: the
|
|
19
|
+
* in-memory map, Durable Object storage, or any keyed store whose writes
|
|
20
|
+
* become visible in order. Values handed to `put` are already JSON-safe
|
|
21
|
+
* encoded rows, so `get` legitimately yields `unknown`.
|
|
22
|
+
* Retain challenge rows through their original expiry, including after consumption.
|
|
23
|
+
*/
|
|
24
|
+
var AuthStoreBackend = class AuthStoreBackend extends Context.Service()("effect-auth/AuthStoreBackend") {
|
|
25
|
+
/** In-memory backend for tests and local development; never durable. */
|
|
26
|
+
static layerMemory = Layer.sync(AuthStoreBackend)(() => {
|
|
27
|
+
const entries = /* @__PURE__ */ new Map();
|
|
28
|
+
return AuthStoreBackend.of({
|
|
29
|
+
get: (key) => Effect.sync(() => entries.get(key)),
|
|
30
|
+
put: (key, value) => Effect.sync(() => {
|
|
31
|
+
entries.set(key, value);
|
|
32
|
+
}),
|
|
33
|
+
remove: (key) => Effect.sync(() => {
|
|
34
|
+
entries.delete(key);
|
|
35
|
+
})
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
var StoredChallenge = class extends Schema.Class("effect-auth/StoredChallenge")({
|
|
40
|
+
challenge: NewChallenge,
|
|
41
|
+
consumed: Schema.Boolean,
|
|
42
|
+
superseded: Schema.Boolean
|
|
43
|
+
}) {};
|
|
44
|
+
var StoredEmailSeries = class extends Schema.Class("effect-auth/StoredEmailSeries")({
|
|
45
|
+
activeChallengeKey: Schema.UndefinedOr(Schema.String),
|
|
46
|
+
lastIssuedAt: Schema.DateTimeUtcFromMillis,
|
|
47
|
+
rollingAttempts: Schema.Natural,
|
|
48
|
+
windowExpiresAt: Schema.DateTimeUtcFromMillis
|
|
49
|
+
}) {};
|
|
50
|
+
var StoredRegistration = class extends Schema.Class("effect-auth/StoredRegistration")({
|
|
51
|
+
registration: NewRegistration,
|
|
52
|
+
consumed: Schema.Boolean
|
|
53
|
+
}) {};
|
|
54
|
+
const decodeChallengeRow = Schema.decodeUnknownEffect(StoredChallenge);
|
|
55
|
+
const encodeChallengeRow = Schema.encodeEffect(StoredChallenge);
|
|
56
|
+
const decodeSeriesRow = Schema.decodeUnknownEffect(StoredEmailSeries);
|
|
57
|
+
const encodeSeriesRow = Schema.encodeEffect(StoredEmailSeries);
|
|
58
|
+
const decodeRegistrationRow = Schema.decodeUnknownEffect(StoredRegistration);
|
|
59
|
+
const encodeRegistrationRow = Schema.encodeEffect(StoredRegistration);
|
|
60
|
+
const challengeKey = (tokenDigest) => `challenge:${tokenDigest}`;
|
|
61
|
+
const seriesKey = (purpose, email) => `series:${purpose}|${email}`;
|
|
62
|
+
const registrationKey = (tokenDigest) => `registration:${tokenDigest}`;
|
|
63
|
+
/**
|
|
64
|
+
* The canonical store state machine over an `AuthStoreBackend`. Operations are
|
|
65
|
+
* serialized through an internal semaphore, so the exactly-once consume
|
|
66
|
+
* guarantees hold even when the backend's reads and writes suspend. Runtimes
|
|
67
|
+
* that already serialize requests (a Durable Object's input gates) get a
|
|
68
|
+
* second, redundant layer of protection.
|
|
69
|
+
*/
|
|
70
|
+
const makeBackendAuthStore = Effect.gen(function* () {
|
|
71
|
+
const backend = yield* AuthStoreBackend;
|
|
72
|
+
const serialized = (yield* Semaphore.make(1)).withPermits(1);
|
|
73
|
+
const read = (key, decode) => backend.get(key).pipe(Effect.mapError(() => AuthStoreError.make({ message: "Auth store read failed" })), Effect.flatMap((value) => value === void 0 ? Effect.succeed(void 0) : decode(value).pipe(Effect.mapError(() => AuthStoreError.make({ message: "Corrupt auth store row" })))));
|
|
74
|
+
const write = (key, encode, row) => encode(row).pipe(Effect.mapError(() => AuthStoreError.make({ message: "Auth store write failed" })), Effect.flatMap((value) => backend.put(key, value).pipe(Effect.mapError(() => AuthStoreError.make({ message: "Auth store write failed" })))));
|
|
75
|
+
const issueChallenge = Effect.fn("AuthStore.issueChallenge")(function* (input) {
|
|
76
|
+
const now = DateTime.toEpochMillis(yield* DateTime.now);
|
|
77
|
+
if ((yield* read(challengeKey(input.tokenDigest), decodeChallengeRow)) !== void 0) return yield* AuthRateLimited.make({ retryAfterSeconds: 1 });
|
|
78
|
+
const key = seriesKey(input.purpose, input.email);
|
|
79
|
+
const series = yield* read(key, decodeSeriesRow);
|
|
80
|
+
const cooldownMillis = Duration.toMillis(input.resendCooldown);
|
|
81
|
+
if (series !== void 0) {
|
|
82
|
+
const lastIssuedAt = DateTime.toEpochMillis(series.lastIssuedAt);
|
|
83
|
+
if (now < lastIssuedAt + cooldownMillis) return yield* AuthRateLimited.make({ retryAfterSeconds: Math.ceil((lastIssuedAt + cooldownMillis - now) / 1e3) });
|
|
84
|
+
if (series.activeChallengeKey !== void 0) {
|
|
85
|
+
const active = yield* read(series.activeChallengeKey, decodeChallengeRow);
|
|
86
|
+
if (active !== void 0 && !active.superseded) yield* write(series.activeChallengeKey, encodeChallengeRow, StoredChallenge.make({
|
|
87
|
+
...active,
|
|
88
|
+
superseded: true
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const rollingAttempts = series !== void 0 && now < DateTime.toEpochMillis(series.windowExpiresAt) ? series.rollingAttempts : 0;
|
|
93
|
+
yield* write(challengeKey(input.tokenDigest), encodeChallengeRow, StoredChallenge.make({
|
|
94
|
+
challenge: input,
|
|
95
|
+
consumed: false,
|
|
96
|
+
superseded: false
|
|
97
|
+
}));
|
|
98
|
+
yield* write(key, encodeSeriesRow, StoredEmailSeries.make({
|
|
99
|
+
activeChallengeKey: challengeKey(input.tokenDigest),
|
|
100
|
+
lastIssuedAt: yield* DateTime.now,
|
|
101
|
+
rollingAttempts,
|
|
102
|
+
windowExpiresAt: input.expiresAt
|
|
103
|
+
}));
|
|
104
|
+
});
|
|
105
|
+
const consumeChallenge = Effect.fn("AuthStore.consumeChallenge")(function* (input) {
|
|
106
|
+
const reject = (reason) => EmailOtpRejected.make({ reason });
|
|
107
|
+
const now = DateTime.toEpochMillis(yield* DateTime.now);
|
|
108
|
+
const row = yield* read(challengeKey(input.tokenDigest), decodeChallengeRow);
|
|
109
|
+
if (row === void 0) return yield* reject("missing_challenge");
|
|
110
|
+
const key = seriesKey(row.challenge.purpose, row.challenge.email);
|
|
111
|
+
const series = yield* read(key, decodeSeriesRow);
|
|
112
|
+
if (row.consumed) return yield* reject("consumed_challenge");
|
|
113
|
+
if (row.superseded) return yield* reject("superseded_challenge");
|
|
114
|
+
if (now >= DateTime.toEpochMillis(row.challenge.expiresAt)) return yield* reject("expired_challenge");
|
|
115
|
+
if (series === void 0) return yield* reject("missing_challenge_series");
|
|
116
|
+
if (series.rollingAttempts >= row.challenge.attemptLimit) return yield* reject("attempts_exhausted");
|
|
117
|
+
const candidate = input.otpDigests[row.challenge.otpKeyId];
|
|
118
|
+
if (!(candidate !== void 0 && timingSafeStringEqual(candidate, row.challenge.otpDigest))) {
|
|
119
|
+
yield* write(key, encodeSeriesRow, StoredEmailSeries.make({
|
|
120
|
+
...series,
|
|
121
|
+
rollingAttempts: series.rollingAttempts + 1
|
|
122
|
+
}));
|
|
123
|
+
return yield* reject("bad_code");
|
|
124
|
+
}
|
|
125
|
+
yield* write(challengeKey(input.tokenDigest), encodeChallengeRow, StoredChallenge.make({
|
|
126
|
+
...row,
|
|
127
|
+
consumed: true
|
|
128
|
+
}));
|
|
129
|
+
yield* backend.remove(key).pipe(Effect.mapError(() => AuthStoreError.make({ message: "Auth store write failed" })));
|
|
130
|
+
return VerifiedEmail.make({
|
|
131
|
+
email: row.challenge.email,
|
|
132
|
+
purpose: row.challenge.purpose
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
const issueRegistration = Effect.fn("AuthStore.issueRegistration")(function* (input) {
|
|
136
|
+
yield* write(registrationKey(input.tokenDigest), encodeRegistrationRow, StoredRegistration.make({
|
|
137
|
+
registration: input,
|
|
138
|
+
consumed: false
|
|
139
|
+
}));
|
|
140
|
+
});
|
|
141
|
+
const inspectRegistration = Effect.fn("AuthStore.inspectRegistration")(function* (tokenDigest) {
|
|
142
|
+
const now = DateTime.toEpochMillis(yield* DateTime.now);
|
|
143
|
+
const row = yield* read(registrationKey(tokenDigest), decodeRegistrationRow);
|
|
144
|
+
if (row === void 0 || row.consumed || now >= DateTime.toEpochMillis(row.registration.expiresAt)) return yield* InvalidRegistration.make();
|
|
145
|
+
return PendingRegistration.make({
|
|
146
|
+
registrationId: row.registration.registrationId,
|
|
147
|
+
email: row.registration.email,
|
|
148
|
+
purpose: row.registration.purpose,
|
|
149
|
+
issuedAt: row.registration.issuedAt,
|
|
150
|
+
expiresAt: row.registration.expiresAt
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
const consumeRegistration = Effect.fn("AuthStore.consumeRegistration")(function* (input) {
|
|
154
|
+
const now = DateTime.toEpochMillis(yield* DateTime.now);
|
|
155
|
+
const row = yield* read(registrationKey(input.tokenDigest), decodeRegistrationRow);
|
|
156
|
+
if (row === void 0 || row.consumed || now >= DateTime.toEpochMillis(row.registration.expiresAt)) return yield* InvalidRegistration.make();
|
|
157
|
+
yield* write(registrationKey(input.tokenDigest), encodeRegistrationRow, StoredRegistration.make({
|
|
158
|
+
...row,
|
|
159
|
+
consumed: true
|
|
160
|
+
}));
|
|
161
|
+
});
|
|
162
|
+
return {
|
|
163
|
+
issueChallenge: (input) => serialized(issueChallenge(input)),
|
|
164
|
+
consumeChallenge: (input) => serialized(consumeChallenge(input)),
|
|
165
|
+
issueRegistration: (input) => serialized(issueRegistration(input)),
|
|
166
|
+
inspectRegistration: (tokenDigest) => serialized(inspectRegistration(tokenDigest)),
|
|
167
|
+
consumeRegistration: (input) => serialized(consumeRegistration(input))
|
|
168
|
+
};
|
|
169
|
+
});
|
|
170
|
+
/**
|
|
171
|
+
* Semantic persistence port for challenges and pending registrations, not
|
|
172
|
+
* CRUD. The consume operations must be atomic: exactly one of concurrent
|
|
173
|
+
* valid consumptions may succeed. Per-challenge attempts, resend cooldown,
|
|
174
|
+
* and email-scoped issuance limits live behind this contract; IP/network
|
|
175
|
+
* limits stay at the edge.
|
|
176
|
+
*
|
|
177
|
+
* Adapters either implement this interface directly against a store with real
|
|
178
|
+
* transactions, or provide an `AuthStoreBackend` to `layerBackend`. Either
|
|
179
|
+
* way, the conformance suite exported from `effect-auth/Testing` is the
|
|
180
|
+
* acceptance test.
|
|
181
|
+
*/
|
|
182
|
+
var AuthStore = class AuthStore extends Context.Service()("effect-auth/AuthStore") {
|
|
183
|
+
/** The canonical state machine over whichever `AuthStoreBackend` is provided. */
|
|
184
|
+
static layerBackend = Layer.effect(AuthStore)(makeBackendAuthStore);
|
|
185
|
+
/**
|
|
186
|
+
* In-memory adapter for tests and local development. Never a durable
|
|
187
|
+
* production adapter.
|
|
188
|
+
*/
|
|
189
|
+
static layerMemory = AuthStore.layerBackend.pipe(Layer.provide(AuthStoreBackend.layerMemory));
|
|
190
|
+
};
|
|
191
|
+
//#endregion
|
|
192
|
+
export { AuthStore, AuthStoreBackend, AuthStoreDecisions, EmailOtpRejected, EmailOtpRejectionReason };
|
|
193
|
+
|
|
194
|
+
//# sourceMappingURL=AuthStore.mjs.map
|