@yielded/auth 0.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +18 -0
- package/dist/Atom.d.mts +5 -0
- package/dist/Atom.mjs +5 -0
- package/dist/Auth.d.mts +9 -0
- package/dist/Auth.mjs +7 -0
- package/dist/AuthContract.d.mts +4 -0
- package/dist/AuthContract.mjs +4 -0
- package/dist/AuthSession.d.mts +82 -0
- package/dist/AuthSession.mjs +138 -0
- package/dist/AuthSession.mjs.map +1 -0
- package/dist/AuthStore.d.mts +68 -0
- package/dist/AuthStore.mjs +194 -0
- package/dist/AuthStore.mjs.map +1 -0
- package/dist/AuthTokenCodec.d.mts +40 -0
- package/dist/AuthTokenCodec.mjs +104 -0
- package/dist/AuthTokenCodec.mjs.map +1 -0
- package/dist/Client.d.mts +2 -0
- package/dist/Client.mjs +2 -0
- package/dist/Cloudflare.d.mts +89 -0
- package/dist/Cloudflare.mjs +166 -0
- package/dist/Cloudflare.mjs.map +1 -0
- package/dist/Drizzle.d.mts +28 -0
- package/dist/Drizzle.mjs +27 -0
- package/dist/DrizzleD1.d.mts +935 -0
- package/dist/DrizzleD1.mjs +29 -0
- package/dist/DrizzleD1.mjs.map +1 -0
- package/dist/DrizzleLibsql.d.mts +2288 -0
- package/dist/DrizzleLibsql.mjs +85 -0
- package/dist/DrizzleLibsql.mjs.map +1 -0
- package/dist/DrizzleMysql2.d.mts +1809 -0
- package/dist/DrizzleMysql2.mjs +55 -0
- package/dist/DrizzleMysql2.mjs.map +1 -0
- package/dist/DrizzlePglite.d.mts +1808 -0
- package/dist/DrizzlePglite.mjs +45 -0
- package/dist/DrizzlePglite.mjs.map +1 -0
- package/dist/DrizzlePostgres.d.mts +1808 -0
- package/dist/DrizzlePostgres.mjs +45 -0
- package/dist/DrizzlePostgres.mjs.map +1 -0
- package/dist/DrizzleSqliteBun.d.mts +2287 -0
- package/dist/DrizzleSqliteBun.mjs +62 -0
- package/dist/DrizzleSqliteBun.mjs.map +1 -0
- package/dist/DrizzleSqliteDo.d.mts +2343 -0
- package/dist/DrizzleSqliteDo.mjs +105 -0
- package/dist/DrizzleSqliteDo.mjs.map +1 -0
- package/dist/DrizzleSqliteNode.d.mts +2287 -0
- package/dist/DrizzleSqliteNode.mjs +62 -0
- package/dist/DrizzleSqliteNode.mjs.map +1 -0
- package/dist/DrizzleSqliteWasm.d.mts +2287 -0
- package/dist/DrizzleSqliteWasm.mjs +62 -0
- package/dist/DrizzleSqliteWasm.mjs.map +1 -0
- package/dist/Email.d.mts +12 -0
- package/dist/Email.mjs +11 -0
- package/dist/EmailOtp.d.mts +42 -0
- package/dist/EmailOtp.mjs +120 -0
- package/dist/EmailOtp.mjs.map +1 -0
- package/dist/EmailOtpSender.d.mts +22 -0
- package/dist/EmailOtpSender.mjs +18 -0
- package/dist/EmailOtpSender.mjs.map +1 -0
- package/dist/Errors.d.mts +55 -0
- package/dist/Errors.mjs +31 -0
- package/dist/Errors.mjs.map +1 -0
- package/dist/GitHub.d.mts +5 -0
- package/dist/GitHub.mjs +4 -0
- package/dist/Hooks.d.mts +6 -0
- package/dist/Hooks.mjs +6 -0
- package/dist/Http.d.mts +12 -0
- package/dist/Http.mjs +12 -0
- package/dist/HttpServer.d.mts +103 -0
- package/dist/HttpServer.mjs +326 -0
- package/dist/HttpServer.mjs.map +1 -0
- package/dist/Identity.d.mts +9 -0
- package/dist/Identity.mjs +9 -0
- package/dist/IdentityResolver.d.mts +16 -0
- package/dist/IdentityResolver.mjs +12 -0
- package/dist/IdentityResolver.mjs.map +1 -0
- package/dist/OAuth.d.mts +36 -0
- package/dist/OAuth.mjs +35 -0
- package/dist/OpenIdClient.d.mts +3 -0
- package/dist/OpenIdClient.mjs +3 -0
- package/dist/OpenIdClientConnected.d.mts +4 -0
- package/dist/OpenIdClientConnected.mjs +3 -0
- package/dist/OperationHttp.d.mts +3 -0
- package/dist/OperationHttp.mjs +3 -0
- package/dist/OperationHttpClient.d.mts +2 -0
- package/dist/OperationHttpClient.mjs +2 -0
- package/dist/OperationHttpServer.d.mts +5 -0
- package/dist/OperationHttpServer.mjs +4 -0
- package/dist/Operations.d.mts +8 -0
- package/dist/Operations.mjs +8 -0
- package/dist/Passkey.d.mts +12 -0
- package/dist/Passkey.mjs +12 -0
- package/dist/PasskeyBrowser.d.mts +4 -0
- package/dist/PasskeyBrowser.mjs +4 -0
- package/dist/PasskeyContract.d.mts +641 -0
- package/dist/PasskeyContract.mjs +174 -0
- package/dist/PasskeyContract.mjs.map +1 -0
- package/dist/PasskeyPassword.d.mts +412 -0
- package/dist/PasskeyPassword.mjs +174 -0
- package/dist/PasskeyPassword.mjs.map +1 -0
- package/dist/PasskeySimpleWebAuthn.d.mts +3 -0
- package/dist/PasskeySimpleWebAuthn.mjs +3 -0
- package/dist/Password.d.mts +19 -0
- package/dist/Password.mjs +17 -0
- package/dist/PasswordAuth.d.mts +45 -0
- package/dist/PasswordAuth.mjs +79 -0
- package/dist/PasswordAuth.mjs.map +1 -0
- package/dist/PasswordCredentialStore.d.mts +46 -0
- package/dist/PasswordCredentialStore.mjs +62 -0
- package/dist/PasswordCredentialStore.mjs.map +1 -0
- package/dist/PasswordHasher.d.mts +31 -0
- package/dist/PasswordHasher.mjs +76 -0
- package/dist/PasswordHasher.mjs.map +1 -0
- package/dist/PhoneOtp.d.mts +11 -0
- package/dist/PhoneOtp.mjs +11 -0
- package/dist/Policy.d.mts +52 -0
- package/dist/Policy.mjs +36 -0
- package/dist/Policy.mjs.map +1 -0
- package/dist/Proofs.d.mts +14 -0
- package/dist/Proofs.mjs +13 -0
- package/dist/Rpc.d.mts +12 -0
- package/dist/Rpc.mjs +11 -0
- package/dist/Rpc.mjs.map +1 -0
- package/dist/Schema.d.mts +160 -0
- package/dist/Schema.mjs +141 -0
- package/dist/Schema.mjs.map +1 -0
- package/dist/SessionContract.d.mts +3 -0
- package/dist/SessionContract.mjs +3 -0
- package/dist/Sessions.d.mts +14 -0
- package/dist/Sessions.mjs +12 -0
- package/dist/Testing.d.mts +7 -0
- package/dist/Testing.mjs +7 -0
- package/dist/Totp.d.mts +8 -0
- package/dist/Totp.mjs +8 -0
- package/dist/TotpContract.d.mts +318 -0
- package/dist/TotpContract.mjs +119 -0
- package/dist/TotpContract.mjs.map +1 -0
- package/dist/WebCrypto.d.mts +28 -0
- package/dist/WebCrypto.mjs +42 -0
- package/dist/WebCrypto.mjs.map +1 -0
- package/dist/Workflows.d.mts +16 -0
- package/dist/Workflows.mjs +11 -0
- package/dist/Workflows.mjs.map +1 -0
- package/dist/atom/AuthAtomLifetime.d.mts +35 -0
- package/dist/atom/AuthAtomLifetime.mjs +50 -0
- package/dist/atom/AuthAtomLifetime.mjs.map +1 -0
- package/dist/atom/AuthAtomWorkflow.d.mts +17 -0
- package/dist/atom/AuthAtomWorkflow.mjs +9 -0
- package/dist/atom/AuthAtomWorkflow.mjs.map +1 -0
- package/dist/atom/client.d.mts +43 -0
- package/dist/atom/client.mjs +168 -0
- package/dist/atom/client.mjs.map +1 -0
- package/dist/atom/operations.d.mts +35 -0
- package/dist/atom/operations.mjs +58 -0
- package/dist/atom/operations.mjs.map +1 -0
- package/dist/atom/scoped-runtime.mjs +151 -0
- package/dist/atom/scoped-runtime.mjs.map +1 -0
- package/dist/auth/Auth.d.mts +7806 -0
- package/dist/auth/Auth.mjs +141 -0
- package/dist/auth/Auth.mjs.map +1 -0
- package/dist/auth/AuthConfigurationError.d.mts +10 -0
- package/dist/auth/AuthConfigurationError.mjs +14 -0
- package/dist/auth/AuthConfigurationError.mjs.map +1 -0
- package/dist/auth/AuthRequest.d.mts +21 -0
- package/dist/auth/AuthRequest.mjs +10 -0
- package/dist/auth/AuthRequest.mjs.map +1 -0
- package/dist/auth/AuthStrategy.d.mts +23 -0
- package/dist/auth/AuthStrategy.mjs +33 -0
- package/dist/auth/AuthStrategy.mjs.map +1 -0
- package/dist/auth/ConsumeDecision.d.mts +11 -0
- package/dist/auth/actions.d.mts +18 -0
- package/dist/auth/actions.mjs +70 -0
- package/dist/auth/actions.mjs.map +1 -0
- package/dist/auth/defaults.mjs +12 -0
- package/dist/auth/defaults.mjs.map +1 -0
- package/dist/auth/definition.d.mts +46 -0
- package/dist/auth/session.d.mts +27 -0
- package/dist/auth/session.mjs +56 -0
- package/dist/auth/session.mjs.map +1 -0
- package/dist/drizzle/D1BatchStatements.d.mts +11 -0
- package/dist/drizzle/D1BatchStatements.mjs +8 -0
- package/dist/drizzle/D1BatchStatements.mjs.map +1 -0
- package/dist/drizzle/PasswordPreparedPostconditions.mjs +12 -0
- package/dist/drizzle/PasswordPreparedPostconditions.mjs.map +1 -0
- package/dist/drizzle/SuppliedService.d.mts +10 -0
- package/dist/drizzle/d1-emails.d.mts +68 -0
- package/dist/drizzle/d1-emails.mjs +580 -0
- package/dist/drizzle/d1-emails.mjs.map +1 -0
- package/dist/drizzle/d1-generated-statement.mjs +79 -0
- package/dist/drizzle/d1-generated-statement.mjs.map +1 -0
- package/dist/drizzle/d1-identity.d.mts +33 -0
- package/dist/drizzle/d1-identity.mjs +120 -0
- package/dist/drizzle/d1-identity.mjs.map +1 -0
- package/dist/drizzle/d1-oauth.d.mts +316 -0
- package/dist/drizzle/d1-oauth.mjs +79 -0
- package/dist/drizzle/d1-oauth.mjs.map +1 -0
- package/dist/drizzle/d1-passkey.d.mts +52 -0
- package/dist/drizzle/d1-passkey.mjs +97 -0
- package/dist/drizzle/d1-passkey.mjs.map +1 -0
- package/dist/drizzle/d1-password-prepared.d.mts +27 -0
- package/dist/drizzle/d1-password-prepared.mjs +464 -0
- package/dist/drizzle/d1-password-prepared.mjs.map +1 -0
- package/dist/drizzle/d1-passwords.d.mts +96 -0
- package/dist/drizzle/d1-passwords.mjs +1008 -0
- package/dist/drizzle/d1-passwords.mjs.map +1 -0
- package/dist/drizzle/d1-phone.d.mts +29 -0
- package/dist/drizzle/d1-phone.mjs +33 -0
- package/dist/drizzle/d1-phone.mjs.map +1 -0
- package/dist/drizzle/d1-planning.d.mts +12 -0
- package/dist/drizzle/d1-planning.mjs +43 -0
- package/dist/drizzle/d1-planning.mjs.map +1 -0
- package/dist/drizzle/d1-proofs.d.mts +88 -0
- package/dist/drizzle/d1-proofs.mjs +833 -0
- package/dist/drizzle/d1-proofs.mjs.map +1 -0
- package/dist/drizzle/d1-sessions.d.mts +77 -0
- package/dist/drizzle/d1-sessions.mjs +970 -0
- package/dist/drizzle/d1-sessions.mjs.map +1 -0
- package/dist/drizzle/d1-totp.d.mts +27 -0
- package/dist/drizzle/d1-totp.mjs +28 -0
- package/dist/drizzle/d1-totp.mjs.map +1 -0
- package/dist/drizzle/email-model.d.mts +352 -0
- package/dist/drizzle/email-model.mjs +21 -0
- package/dist/drizzle/email-model.mjs.map +1 -0
- package/dist/drizzle/email-registration.d.mts +33 -0
- package/dist/drizzle/email-registration.mjs +238 -0
- package/dist/drizzle/email-registration.mjs.map +1 -0
- package/dist/drizzle/email-sql.d.mts +18 -0
- package/dist/drizzle/email-sql.mjs +473 -0
- package/dist/drizzle/email-sql.mjs.map +1 -0
- package/dist/drizzle/email-target.d.mts +28 -0
- package/dist/drizzle/email-target.mjs +75 -0
- package/dist/drizzle/email-target.mjs.map +1 -0
- package/dist/drizzle/model.d.mts +259 -0
- package/dist/drizzle/model.mjs +81 -0
- package/dist/drizzle/model.mjs.map +1 -0
- package/dist/drizzle/mysql-emails.d.mts +82 -0
- package/dist/drizzle/mysql-emails.mjs +38 -0
- package/dist/drizzle/mysql-emails.mjs.map +1 -0
- package/dist/drizzle/mysql-identity.d.mts +24 -0
- package/dist/drizzle/mysql-identity.mjs +95 -0
- package/dist/drizzle/mysql-identity.mjs.map +1 -0
- package/dist/drizzle/mysql-password-prepared.d.mts +32 -0
- package/dist/drizzle/mysql-password-prepared.mjs +16 -0
- package/dist/drizzle/mysql-password-prepared.mjs.map +1 -0
- package/dist/drizzle/mysql-passwords.d.mts +102 -0
- package/dist/drizzle/mysql-passwords.mjs +38 -0
- package/dist/drizzle/mysql-passwords.mjs.map +1 -0
- package/dist/drizzle/mysql-proofs.d.mts +83 -0
- package/dist/drizzle/mysql-proofs.mjs +23 -0
- package/dist/drizzle/mysql-proofs.mjs.map +1 -0
- package/dist/drizzle/mysql-sessions.d.mts +250 -0
- package/dist/drizzle/mysql-sessions.mjs +53 -0
- package/dist/drizzle/mysql-sessions.mjs.map +1 -0
- package/dist/drizzle/mysql.d.mts +73 -0
- package/dist/drizzle/mysql.mjs +221 -0
- package/dist/drizzle/mysql.mjs.map +1 -0
- package/dist/drizzle/oauth-accounts.mjs +361 -0
- package/dist/drizzle/oauth-accounts.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-access.mjs +210 -0
- package/dist/drizzle/oauth-connected-access.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-collection.mjs +202 -0
- package/dist/drizzle/oauth-connected-collection.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-custody.mjs +146 -0
- package/dist/drizzle/oauth-connected-custody.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-drivers.mjs +78 -0
- package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-flow.mjs +248 -0
- package/dist/drizzle/oauth-connected-flow.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-input.mjs +105 -0
- package/dist/drizzle/oauth-connected-input.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-maintenance.mjs +215 -0
- package/dist/drizzle/oauth-connected-maintenance.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-management.mjs +228 -0
- package/dist/drizzle/oauth-connected-management.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-model.d.mts +278 -0
- package/dist/drizzle/oauth-connected-model.mjs +22 -0
- package/dist/drizzle/oauth-connected-model.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-reference.d.mts +17 -0
- package/dist/drizzle/oauth-connected-reference.mjs +53 -0
- package/dist/drizzle/oauth-connected-reference.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-settlement.mjs +117 -0
- package/dist/drizzle/oauth-connected-settlement.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-state.d.mts +16 -0
- package/dist/drizzle/oauth-connected-state.mjs +422 -0
- package/dist/drizzle/oauth-connected-state.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-target.d.mts +114 -0
- package/dist/drizzle/oauth-connected-target.mjs +94 -0
- package/dist/drizzle/oauth-connected-target.mjs.map +1 -0
- package/dist/drizzle/oauth-drivers.mjs +53 -0
- package/dist/drizzle/oauth-drivers.mjs.map +1 -0
- package/dist/drizzle/oauth-flow.d.mts +7 -0
- package/dist/drizzle/oauth-flow.mjs +255 -0
- package/dist/drizzle/oauth-flow.mjs.map +1 -0
- package/dist/drizzle/oauth-input.mjs +130 -0
- package/dist/drizzle/oauth-input.mjs.map +1 -0
- package/dist/drizzle/oauth-model.d.mts +468 -0
- package/dist/drizzle/oauth-model.mjs +49 -0
- package/dist/drizzle/oauth-model.mjs.map +1 -0
- package/dist/drizzle/oauth-mysql.mjs +8 -0
- package/dist/drizzle/oauth-mysql.mjs.map +1 -0
- package/dist/drizzle/oauth-owner.d.mts +4 -0
- package/dist/drizzle/oauth-owner.mjs +10 -0
- package/dist/drizzle/oauth-owner.mjs.map +1 -0
- package/dist/drizzle/oauth-registration.d.mts +8 -0
- package/dist/drizzle/oauth-registration.mjs +375 -0
- package/dist/drizzle/oauth-registration.mjs.map +1 -0
- package/dist/drizzle/oauth-state.mjs +109 -0
- package/dist/drizzle/oauth-state.mjs.map +1 -0
- package/dist/drizzle/oauth-target.d.mts +125 -0
- package/dist/drizzle/oauth-target.mjs +252 -0
- package/dist/drizzle/oauth-target.mjs.map +1 -0
- package/dist/drizzle/passkey-admission.mjs +203 -0
- package/dist/drizzle/passkey-admission.mjs.map +1 -0
- package/dist/drizzle/passkey-credentials.mjs +239 -0
- package/dist/drizzle/passkey-credentials.mjs.map +1 -0
- package/dist/drizzle/passkey-drivers.mjs +34 -0
- package/dist/drizzle/passkey-drivers.mjs.map +1 -0
- package/dist/drizzle/passkey-enrollment.mjs +132 -0
- package/dist/drizzle/passkey-enrollment.mjs.map +1 -0
- package/dist/drizzle/passkey-flow.mjs +436 -0
- package/dist/drizzle/passkey-flow.mjs.map +1 -0
- package/dist/drizzle/passkey-management.mjs +225 -0
- package/dist/drizzle/passkey-management.mjs.map +1 -0
- package/dist/drizzle/passkey-model.d.mts +275 -0
- package/dist/drizzle/passkey-model.mjs +36 -0
- package/dist/drizzle/passkey-model.mjs.map +1 -0
- package/dist/drizzle/passkey-registration-ceremony-model.d.mts +50 -0
- package/dist/drizzle/passkey-registration-ceremony-model.mjs +18 -0
- package/dist/drizzle/passkey-registration-ceremony-model.mjs.map +1 -0
- package/dist/drizzle/passkey-registration-ceremony.mjs +124 -0
- package/dist/drizzle/passkey-registration-ceremony.mjs.map +1 -0
- package/dist/drizzle/passkey-registration-custody.mjs +51 -0
- package/dist/drizzle/passkey-registration-custody.mjs.map +1 -0
- package/dist/drizzle/passkey-registration-write.mjs +205 -0
- package/dist/drizzle/passkey-registration-write.mjs.map +1 -0
- package/dist/drizzle/passkey-state.d.mts +5 -0
- package/dist/drizzle/passkey-state.mjs +207 -0
- package/dist/drizzle/passkey-state.mjs.map +1 -0
- package/dist/drizzle/passkey-target.d.mts +16 -0
- package/dist/drizzle/passkey-target.mjs +174 -0
- package/dist/drizzle/passkey-target.mjs.map +1 -0
- package/dist/drizzle/passkey-write-drivers.mjs +33 -0
- package/dist/drizzle/passkey-write-drivers.mjs.map +1 -0
- package/dist/drizzle/passkey-write-model.d.mts +192 -0
- package/dist/drizzle/passkey-write-model.mjs +13 -0
- package/dist/drizzle/passkey-write-model.mjs.map +1 -0
- package/dist/drizzle/passkey-write-state.mjs +326 -0
- package/dist/drizzle/passkey-write-state.mjs.map +1 -0
- package/dist/drizzle/passkey-write-target.d.mts +14 -0
- package/dist/drizzle/passkey-write-target.mjs +185 -0
- package/dist/drizzle/passkey-write-target.mjs.map +1 -0
- package/dist/drizzle/password-model.d.mts +330 -0
- package/dist/drizzle/password-model.mjs +22 -0
- package/dist/drizzle/password-model.mjs.map +1 -0
- package/dist/drizzle/password-prepared-model.d.mts +93 -0
- package/dist/drizzle/password-prepared-model.mjs +11 -0
- package/dist/drizzle/password-prepared-model.mjs.map +1 -0
- package/dist/drizzle/password-prepared-sql.mjs +394 -0
- package/dist/drizzle/password-prepared-sql.mjs.map +1 -0
- package/dist/drizzle/password-prepared-state.mjs +107 -0
- package/dist/drizzle/password-prepared-state.mjs.map +1 -0
- package/dist/drizzle/password-prepared-target.d.mts +12 -0
- package/dist/drizzle/password-prepared-target.mjs +57 -0
- package/dist/drizzle/password-prepared-target.mjs.map +1 -0
- package/dist/drizzle/password-registration.d.mts +23 -0
- package/dist/drizzle/password-registration.mjs +136 -0
- package/dist/drizzle/password-registration.mjs.map +1 -0
- package/dist/drizzle/password-sql.d.mts +20 -0
- package/dist/drizzle/password-sql.mjs +702 -0
- package/dist/drizzle/password-sql.mjs.map +1 -0
- package/dist/drizzle/password-target.d.mts +25 -0
- package/dist/drizzle/password-target.mjs +63 -0
- package/dist/drizzle/password-target.mjs.map +1 -0
- package/dist/drizzle/pg-emails.d.mts +83 -0
- package/dist/drizzle/pg-emails.mjs +38 -0
- package/dist/drizzle/pg-emails.mjs.map +1 -0
- package/dist/drizzle/pg-password-prepared.d.mts +33 -0
- package/dist/drizzle/pg-password-prepared.mjs +16 -0
- package/dist/drizzle/pg-password-prepared.mjs.map +1 -0
- package/dist/drizzle/pg-passwords.d.mts +103 -0
- package/dist/drizzle/pg-passwords.mjs +38 -0
- package/dist/drizzle/pg-passwords.mjs.map +1 -0
- package/dist/drizzle/pg-proofs.d.mts +84 -0
- package/dist/drizzle/pg-proofs.mjs +22 -0
- package/dist/drizzle/pg-proofs.mjs.map +1 -0
- package/dist/drizzle/pg-sessions.d.mts +251 -0
- package/dist/drizzle/pg-sessions.mjs +53 -0
- package/dist/drizzle/pg-sessions.mjs.map +1 -0
- package/dist/drizzle/pg.d.mts +88 -0
- package/dist/drizzle/pg.mjs +294 -0
- package/dist/drizzle/pg.mjs.map +1 -0
- package/dist/drizzle/phone-model.d.mts +117 -0
- package/dist/drizzle/phone-model.mjs +39 -0
- package/dist/drizzle/phone-model.mjs.map +1 -0
- package/dist/drizzle/phone-state.mjs +426 -0
- package/dist/drizzle/phone-state.mjs.map +1 -0
- package/dist/drizzle/phone-target.d.mts +19 -0
- package/dist/drizzle/phone-target.mjs +171 -0
- package/dist/drizzle/phone-target.mjs.map +1 -0
- package/dist/drizzle/proof-model.d.mts +287 -0
- package/dist/drizzle/proof-model.mjs +17 -0
- package/dist/drizzle/proof-model.mjs.map +1 -0
- package/dist/drizzle/proof-sql.d.mts +16 -0
- package/dist/drizzle/proof-sql.mjs +618 -0
- package/dist/drizzle/proof-sql.mjs.map +1 -0
- package/dist/drizzle/proof-target.d.mts +17 -0
- package/dist/drizzle/proof-target.mjs +38 -0
- package/dist/drizzle/proof-target.mjs.map +1 -0
- package/dist/drizzle/session-model.d.mts +201 -0
- package/dist/drizzle/session-model.mjs +19 -0
- package/dist/drizzle/session-model.mjs.map +1 -0
- package/dist/drizzle/session-sql.mjs +732 -0
- package/dist/drizzle/session-sql.mjs.map +1 -0
- package/dist/drizzle/session-target.d.mts +37 -0
- package/dist/drizzle/session-target.mjs +47 -0
- package/dist/drizzle/session-target.mjs.map +1 -0
- package/dist/drizzle/sqlite-emails.mjs +45 -0
- package/dist/drizzle/sqlite-emails.mjs.map +1 -0
- package/dist/drizzle/sqlite-identity.mjs +92 -0
- package/dist/drizzle/sqlite-identity.mjs.map +1 -0
- package/dist/drizzle/sqlite-password-prepared.mjs +21 -0
- package/dist/drizzle/sqlite-password-prepared.mjs.map +1 -0
- package/dist/drizzle/sqlite-passwords.mjs +49 -0
- package/dist/drizzle/sqlite-passwords.mjs.map +1 -0
- package/dist/drizzle/sqlite-proofs.mjs +29 -0
- package/dist/drizzle/sqlite-proofs.mjs.map +1 -0
- package/dist/drizzle/sqlite-sessions.mjs +74 -0
- package/dist/drizzle/sqlite-sessions.mjs.map +1 -0
- package/dist/drizzle/sqlite.d.mts +81 -0
- package/dist/drizzle/sqlite.mjs +220 -0
- package/dist/drizzle/sqlite.mjs.map +1 -0
- package/dist/drizzle/standalone-guard.mjs +19 -0
- package/dist/drizzle/standalone-guard.mjs.map +1 -0
- package/dist/drizzle/step-up-model.d.mts +65 -0
- package/dist/drizzle/step-up-model.mjs +9 -0
- package/dist/drizzle/step-up-model.mjs.map +1 -0
- package/dist/drizzle/step-up-state.mjs +34 -0
- package/dist/drizzle/step-up-state.mjs.map +1 -0
- package/dist/drizzle/totp-model.d.mts +85 -0
- package/dist/drizzle/totp-model.mjs +13 -0
- package/dist/drizzle/totp-model.mjs.map +1 -0
- package/dist/drizzle/totp-state.d.mts +39 -0
- package/dist/drizzle/totp-state.mjs +288 -0
- package/dist/drizzle/totp-state.mjs.map +1 -0
- package/dist/drizzle/totp-target.d.mts +16 -0
- package/dist/drizzle/totp-target.mjs +83 -0
- package/dist/drizzle/totp-target.mjs.map +1 -0
- package/dist/drizzle/transaction-execution.d.mts +20 -0
- package/dist/drizzle/transaction-execution.mjs +111 -0
- package/dist/drizzle/transaction-execution.mjs.map +1 -0
- package/dist/drizzle/transaction-mysql.mjs +46 -0
- package/dist/drizzle/transaction-mysql.mjs.map +1 -0
- package/dist/drizzle/transaction-owner.d.mts +6 -0
- package/dist/drizzle/transaction-owner.mjs +252 -0
- package/dist/drizzle/transaction-owner.mjs.map +1 -0
- package/dist/email/EmailActionEvidence.d.mts +33 -0
- package/dist/email/EmailActionEvidence.mjs +15 -0
- package/dist/email/EmailActionEvidence.mjs.map +1 -0
- package/dist/email/EmailAddressPersistence.d.mts +63 -0
- package/dist/email/EmailAddressPersistence.mjs +19 -0
- package/dist/email/EmailAddressPersistence.mjs.map +1 -0
- package/dist/email/EmailIdentifierNotifier.d.mts +30 -0
- package/dist/email/EmailIdentifierNotifier.mjs +31 -0
- package/dist/email/EmailIdentifierNotifier.mjs.map +1 -0
- package/dist/email/EmailReturnTargets.d.mts +19 -0
- package/dist/email/EmailReturnTargets.mjs +29 -0
- package/dist/email/EmailReturnTargets.mjs.map +1 -0
- package/dist/email/EmailSignInTargets.d.mts +20 -0
- package/dist/email/EmailSignInTargets.mjs +12 -0
- package/dist/email/EmailSignInTargets.mjs.map +1 -0
- package/dist/email/addresses.d.mts +33 -0
- package/dist/email/addresses.mjs +404 -0
- package/dist/email/addresses.mjs.map +1 -0
- package/dist/email/definition.d.mts +10153 -0
- package/dist/email/definition.mjs +111 -0
- package/dist/email/definition.mjs.map +1 -0
- package/dist/email/errors.d.mts +15 -0
- package/dist/email/errors.mjs +11 -0
- package/dist/email/errors.mjs.map +1 -0
- package/dist/email/magicLink.d.mts +33 -0
- package/dist/email/magicLink.mjs +58 -0
- package/dist/email/magicLink.mjs.map +1 -0
- package/dist/email/models.d.mts +56 -0
- package/dist/email/models.mjs +31 -0
- package/dist/email/models.mjs.map +1 -0
- package/dist/email/module.d.mts +22296 -0
- package/dist/email/module.mjs +415 -0
- package/dist/email/module.mjs.map +1 -0
- package/dist/email/registration.d.mts +28 -0
- package/dist/email/registration.mjs +243 -0
- package/dist/email/registration.mjs.map +1 -0
- package/dist/email/snapshot.mjs +37 -0
- package/dist/email/snapshot.mjs.map +1 -0
- package/dist/hooks/LifecycleHooks.d.mts +34 -0
- package/dist/hooks/LifecycleHooks.mjs +74 -0
- package/dist/hooks/LifecycleHooks.mjs.map +1 -0
- package/dist/hooks/commit.d.mts +66 -0
- package/dist/hooks/commit.mjs +136 -0
- package/dist/hooks/commit.mjs.map +1 -0
- package/dist/hooks/models.d.mts +51 -0
- package/dist/hooks/models.mjs +87 -0
- package/dist/hooks/models.mjs.map +1 -0
- package/dist/hooks/plugins.d.mts +36 -0
- package/dist/hooks/plugins.mjs +60 -0
- package/dist/hooks/plugins.mjs.map +1 -0
- package/dist/hooks/transactions.d.mts +31 -0
- package/dist/hooks/transactions.mjs +38 -0
- package/dist/hooks/transactions.mjs.map +1 -0
- package/dist/http/auth-api.d.mts +9 -0
- package/dist/http/auth-api.mjs +13 -0
- package/dist/http/auth-api.mjs.map +1 -0
- package/dist/http/auth-contract.d.mts +84 -0
- package/dist/http/auth-contract.mjs +75 -0
- package/dist/http/auth-contract.mjs.map +1 -0
- package/dist/http/auth-http.d.mts +216 -0
- package/dist/http/auth-http.mjs +184 -0
- package/dist/http/auth-http.mjs.map +1 -0
- package/dist/http/endpoints/get-session.d.mts +8 -0
- package/dist/http/endpoints/get-session.mjs +12 -0
- package/dist/http/endpoints/get-session.mjs.map +1 -0
- package/dist/http/endpoints/password-sign-in.d.mts +8 -0
- package/dist/http/endpoints/password-sign-in.mjs +18 -0
- package/dist/http/endpoints/password-sign-in.mjs.map +1 -0
- package/dist/http/endpoints/request-email-otp.d.mts +8 -0
- package/dist/http/endpoints/request-email-otp.mjs +17 -0
- package/dist/http/endpoints/request-email-otp.mjs.map +1 -0
- package/dist/http/endpoints/set-password.d.mts +9 -0
- package/dist/http/endpoints/set-password.mjs +19 -0
- package/dist/http/endpoints/set-password.mjs.map +1 -0
- package/dist/http/endpoints/sign-out.d.mts +6 -0
- package/dist/http/endpoints/sign-out.mjs +7 -0
- package/dist/http/endpoints/sign-out.mjs.map +1 -0
- package/dist/http/endpoints/verify-email-otp.d.mts +9 -0
- package/dist/http/endpoints/verify-email-otp.mjs +18 -0
- package/dist/http/endpoints/verify-email-otp.mjs.map +1 -0
- package/dist/http/models.d.mts +49 -0
- package/dist/http/models.mjs +35 -0
- package/dist/http/models.mjs.map +1 -0
- package/dist/http/security.d.mts +91 -0
- package/dist/http/security.mjs +77 -0
- package/dist/http/security.mjs.map +1 -0
- package/dist/http/session-contract.d.mts +303 -0
- package/dist/http/session-contract.mjs +38 -0
- package/dist/http/session-contract.mjs.map +1 -0
- package/dist/http-operation/OperationHttpInvocation.d.mts +16 -0
- package/dist/http-operation/OperationHttpInvocation.mjs +11 -0
- package/dist/http-operation/OperationHttpInvocation.mjs.map +1 -0
- package/dist/http-operation/OperationHttpServerConfig.d.mts +18 -0
- package/dist/http-operation/OperationHttpServerConfig.mjs +72 -0
- package/dist/http-operation/OperationHttpServerConfig.mjs.map +1 -0
- package/dist/http-operation/auth-client.d.mts +75 -0
- package/dist/http-operation/auth-client.mjs +116 -0
- package/dist/http-operation/auth-client.mjs.map +1 -0
- package/dist/http-operation/client.d.mts +50 -0
- package/dist/http-operation/client.mjs +188 -0
- package/dist/http-operation/client.mjs.map +1 -0
- package/dist/http-operation/configuration-schema.mjs +19 -0
- package/dist/http-operation/configuration-schema.mjs.map +1 -0
- package/dist/http-operation/contract.d.mts +40 -0
- package/dist/http-operation/contract.mjs +37 -0
- package/dist/http-operation/contract.mjs.map +1 -0
- package/dist/http-operation/errors.d.mts +13 -0
- package/dist/http-operation/errors.mjs +31 -0
- package/dist/http-operation/errors.mjs.map +1 -0
- package/dist/http-operation/models.d.mts +32 -0
- package/dist/http-operation/models.mjs +14 -0
- package/dist/http-operation/models.mjs.map +1 -0
- package/dist/http-operation/private.mjs +35 -0
- package/dist/http-operation/private.mjs.map +1 -0
- package/dist/http-operation/security.mjs +58 -0
- package/dist/http-operation/security.mjs.map +1 -0
- package/dist/http-operation/server.d.mts +33 -0
- package/dist/http-operation/server.mjs +268 -0
- package/dist/http-operation/server.mjs.map +1 -0
- package/dist/identity/ExternalIdentityMutation.d.mts +15 -0
- package/dist/identity/ExternalIdentityMutation.mjs +11 -0
- package/dist/identity/ExternalIdentityMutation.mjs.map +1 -0
- package/dist/identity/IdentityMutation.d.mts +22 -0
- package/dist/identity/IdentityMutation.mjs +17 -0
- package/dist/identity/IdentityMutation.mjs.map +1 -0
- package/dist/identity/IdentityRepository.d.mts +20 -0
- package/dist/identity/IdentityRepository.mjs +11 -0
- package/dist/identity/IdentityRepository.mjs.map +1 -0
- package/dist/identity/SubjectLifecycle.d.mts +58 -0
- package/dist/identity/SubjectLifecycle.mjs +43 -0
- package/dist/identity/SubjectLifecycle.mjs.map +1 -0
- package/dist/identity/SubjectProvisioner.d.mts +37 -0
- package/dist/identity/SubjectProvisioner.mjs +20 -0
- package/dist/identity/SubjectProvisioner.mjs.map +1 -0
- package/dist/identity/codecs.d.mts +34 -0
- package/dist/identity/codecs.mjs +40 -0
- package/dist/identity/codecs.mjs.map +1 -0
- package/dist/identity/models.d.mts +62 -0
- package/dist/identity/models.mjs +51 -0
- package/dist/identity/models.mjs.map +1 -0
- package/dist/identity/operations.d.mts +118 -0
- package/dist/identity/operations.mjs +124 -0
- package/dist/identity/operations.mjs.map +1 -0
- package/dist/index.d.mts +23 -0
- package/dist/index.mjs +23 -0
- package/dist/internal/AuthStoreDecisions.d.mts +22 -0
- package/dist/internal/AuthStoreDecisions.mjs +8 -0
- package/dist/internal/AuthStoreDecisions.mjs.map +1 -0
- package/dist/internal/CurrentSession.d.mts +9 -0
- package/dist/internal/CurrentSession.mjs +8 -0
- package/dist/internal/CurrentSession.mjs.map +1 -0
- package/dist/internal/diagnostics.mjs +23 -0
- package/dist/internal/diagnostics.mjs.map +1 -0
- package/dist/oauth/GithubOAuthProvider.d.mts +43 -0
- package/dist/oauth/GithubOAuthProvider.mjs +66 -0
- package/dist/oauth/GithubOAuthProvider.mjs.map +1 -0
- package/dist/oauth/OAuth.d.mts +73 -0
- package/dist/oauth/OAuth.mjs +180 -0
- package/dist/oauth/OAuth.mjs.map +1 -0
- package/dist/oauth/OAuthAccountsPersistence.d.mts +109 -0
- package/dist/oauth/OAuthAccountsPersistence.mjs +12 -0
- package/dist/oauth/OAuthAccountsPersistence.mjs.map +1 -0
- package/dist/oauth/OAuthActionEvidence.d.mts +28 -0
- package/dist/oauth/OAuthActionEvidence.mjs +15 -0
- package/dist/oauth/OAuthActionEvidence.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedActionEvidence.d.mts +22 -0
- package/dist/oauth/OAuthConnectedActionEvidence.mjs +9 -0
- package/dist/oauth/OAuthConnectedActionEvidence.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedPersistence.d.mts +129 -0
- package/dist/oauth/OAuthConnectedPersistence.mjs +12 -0
- package/dist/oauth/OAuthConnectedPersistence.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedProtocol.d.mts +41 -0
- package/dist/oauth/OAuthConnectedProtocol.mjs +13 -0
- package/dist/oauth/OAuthConnectedProtocol.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedRevocations.d.mts +167 -0
- package/dist/oauth/OAuthConnectedRevocations.mjs +21 -0
- package/dist/oauth/OAuthConnectedRevocations.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedTokenProtector.d.mts +24 -0
- package/dist/oauth/OAuthConnectedTokenProtector.mjs +153 -0
- package/dist/oauth/OAuthConnectedTokenProtector.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedTransactionProtector.d.mts +23 -0
- package/dist/oauth/OAuthConnectedTransactionProtector.mjs +37 -0
- package/dist/oauth/OAuthConnectedTransactionProtector.mjs.map +1 -0
- package/dist/oauth/OAuthConnectedUseAuthority.d.mts +22 -0
- package/dist/oauth/OAuthConnectedUseAuthority.mjs +10 -0
- package/dist/oauth/OAuthConnectedUseAuthority.mjs.map +1 -0
- package/dist/oauth/OAuthConnectionStore.d.mts +33 -0
- package/dist/oauth/OAuthConnectionStore.mjs +38 -0
- package/dist/oauth/OAuthConnectionStore.mjs.map +1 -0
- package/dist/oauth/OAuthLinkTransactionProtector.d.mts +25 -0
- package/dist/oauth/OAuthLinkTransactionProtector.mjs +39 -0
- package/dist/oauth/OAuthLinkTransactionProtector.mjs.map +1 -0
- package/dist/oauth/OAuthProtocol.d.mts +33 -0
- package/dist/oauth/OAuthProtocol.mjs +16 -0
- package/dist/oauth/OAuthProtocol.mjs.map +1 -0
- package/dist/oauth/OAuthProvider.d.mts +70 -0
- package/dist/oauth/OAuthProvider.mjs +39 -0
- package/dist/oauth/OAuthProvider.mjs.map +1 -0
- package/dist/oauth/OAuthProviders.d.mts +27 -0
- package/dist/oauth/OAuthProviders.mjs +33 -0
- package/dist/oauth/OAuthProviders.mjs.map +1 -0
- package/dist/oauth/OAuthRegistrationIntents.d.mts +87 -0
- package/dist/oauth/OAuthRegistrationIntents.mjs +19 -0
- package/dist/oauth/OAuthRegistrationIntents.mjs.map +1 -0
- package/dist/oauth/OAuthReturnTargets.d.mts +15 -0
- package/dist/oauth/OAuthReturnTargets.mjs +24 -0
- package/dist/oauth/OAuthReturnTargets.mjs.map +1 -0
- package/dist/oauth/OAuthSignInPersistence.d.mts +68 -0
- package/dist/oauth/OAuthSignInPersistence.mjs +12 -0
- package/dist/oauth/OAuthSignInPersistence.mjs.map +1 -0
- package/dist/oauth/OAuthStateDecisions.d.mts +14 -0
- package/dist/oauth/OAuthStateDecisions.mjs +8 -0
- package/dist/oauth/OAuthStateDecisions.mjs.map +1 -0
- package/dist/oauth/OAuthStateStore.d.mts +35 -0
- package/dist/oauth/OAuthStateStore.mjs +64 -0
- package/dist/oauth/OAuthStateStore.mjs.map +1 -0
- package/dist/oauth/OAuthTransactionProtector.d.mts +26 -0
- package/dist/oauth/OAuthTransactionProtector.mjs +78 -0
- package/dist/oauth/OAuthTransactionProtector.mjs.map +1 -0
- package/dist/oauth/accounts.d.mts +29 -0
- package/dist/oauth/accounts.mjs +515 -0
- package/dist/oauth/accounts.mjs.map +1 -0
- package/dist/oauth/accountsModels.d.mts +463 -0
- package/dist/oauth/accountsModels.mjs +155 -0
- package/dist/oauth/accountsModels.mjs.map +1 -0
- package/dist/oauth/connected.d.mts +442 -0
- package/dist/oauth/connected.mjs +526 -0
- package/dist/oauth/connected.mjs.map +1 -0
- package/dist/oauth/connectedAccess.d.mts +20 -0
- package/dist/oauth/connectedAccess.mjs +279 -0
- package/dist/oauth/connectedAccess.mjs.map +1 -0
- package/dist/oauth/connectedMaintenance.d.mts +19 -0
- package/dist/oauth/connectedMaintenance.mjs +133 -0
- package/dist/oauth/connectedMaintenance.mjs.map +1 -0
- package/dist/oauth/connectedModels.d.mts +2023 -0
- package/dist/oauth/connectedModels.mjs +375 -0
- package/dist/oauth/connectedModels.mjs.map +1 -0
- package/dist/oauth/definition.d.mts +4396 -0
- package/dist/oauth/definition.mjs +120 -0
- package/dist/oauth/definition.mjs.map +1 -0
- package/dist/oauth/errors.d.mts +49 -0
- package/dist/oauth/errors.mjs +42 -0
- package/dist/oauth/errors.mjs.map +1 -0
- package/dist/oauth/github/identity.d.mts +8 -0
- package/dist/oauth/github/identity.mjs +24 -0
- package/dist/oauth/github/identity.mjs.map +1 -0
- package/dist/oauth/github/models.d.mts +34 -0
- package/dist/oauth/github/protocol.d.mts +54 -0
- package/dist/oauth/github/protocol.mjs +204 -0
- package/dist/oauth/github/protocol.mjs.map +1 -0
- package/dist/oauth/openid-client/ProviderRevocation.d.mts +4 -0
- package/dist/oauth/openid-client/ProviderRevocation.mjs +11 -0
- package/dist/oauth/openid-client/ProviderRevocation.mjs.map +1 -0
- package/dist/oauth/openid-client/compatibility.d.mts +1 -0
- package/dist/oauth/openid-client/compatibility.mjs +6 -0
- package/dist/oauth/openid-client/compatibility.mjs.map +1 -0
- package/dist/oauth/openid-client/configuration.mjs +305 -0
- package/dist/oauth/openid-client/configuration.mjs.map +1 -0
- package/dist/oauth/openid-client/connected/configuration.mjs +338 -0
- package/dist/oauth/openid-client/connected/configuration.mjs.map +1 -0
- package/dist/oauth/openid-client/connected/models.d.mts +42 -0
- package/dist/oauth/openid-client/connected/protocol.d.mts +16 -0
- package/dist/oauth/openid-client/connected/protocol.mjs +402 -0
- package/dist/oauth/openid-client/connected/protocol.mjs.map +1 -0
- package/dist/oauth/openid-client/models.d.mts +67 -0
- package/dist/oauth/openid-client/models.mjs +16 -0
- package/dist/oauth/openid-client/models.mjs.map +1 -0
- package/dist/oauth/openid-client/protocol.d.mts +27 -0
- package/dist/oauth/openid-client/protocol.mjs +218 -0
- package/dist/oauth/openid-client/protocol.mjs.map +1 -0
- package/dist/oauth/openid-client/transport.mjs +59 -0
- package/dist/oauth/openid-client/transport.mjs.map +1 -0
- package/dist/oauth/policy.d.mts +18 -0
- package/dist/oauth/policy.mjs +16 -0
- package/dist/oauth/policy.mjs.map +1 -0
- package/dist/oauth/registration.d.mts +24 -0
- package/dist/oauth/registration.mjs +177 -0
- package/dist/oauth/registration.mjs.map +1 -0
- package/dist/oauth/registrationModels.d.mts +152 -0
- package/dist/oauth/registrationModels.mjs +93 -0
- package/dist/oauth/registrationModels.mjs.map +1 -0
- package/dist/oauth/registrationSecrets.mjs +70 -0
- package/dist/oauth/registrationSecrets.mjs.map +1 -0
- package/dist/oauth/schema.d.mts +86 -0
- package/dist/oauth/schema.mjs +81 -0
- package/dist/oauth/schema.mjs.map +1 -0
- package/dist/oauth/signInErrors.d.mts +17 -0
- package/dist/oauth/signInErrors.mjs +16 -0
- package/dist/oauth/signInErrors.mjs.map +1 -0
- package/dist/oauth/signInModels.d.mts +343 -0
- package/dist/oauth/signInModels.mjs +181 -0
- package/dist/oauth/signInModels.mjs.map +1 -0
- package/dist/oauth/signInModule.d.mts +1546 -0
- package/dist/oauth/signInModule.mjs +430 -0
- package/dist/oauth/signInModule.mjs.map +1 -0
- package/dist/oauth/signInSnapshot.mjs +29 -0
- package/dist/oauth/signInSnapshot.mjs.map +1 -0
- package/dist/oauth/transactionEncryption.d.mts +14 -0
- package/dist/oauth/transactionEncryption.mjs +129 -0
- package/dist/oauth/transactionEncryption.mjs.map +1 -0
- package/dist/operations/RequestBindingConfig.d.mts +11 -0
- package/dist/operations/RequestBindingConfig.mjs +10 -0
- package/dist/operations/RequestBindingConfig.mjs.map +1 -0
- package/dist/operations/actions.d.mts +947 -0
- package/dist/operations/actions.mjs +148 -0
- package/dist/operations/actions.mjs.map +1 -0
- package/dist/operations/context.d.mts +63 -0
- package/dist/operations/context.mjs +55 -0
- package/dist/operations/context.mjs.map +1 -0
- package/dist/operations/credentials.d.mts +39 -0
- package/dist/operations/credentials.mjs +60 -0
- package/dist/operations/credentials.mjs.map +1 -0
- package/dist/operations/errors.d.mts +24 -0
- package/dist/operations/errors.mjs +31 -0
- package/dist/operations/errors.mjs.map +1 -0
- package/dist/operations/operation.d.mts +124 -0
- package/dist/operations/operation.mjs +220 -0
- package/dist/operations/operation.mjs.map +1 -0
- package/dist/operations/requestBinding.d.mts +46 -0
- package/dist/operations/requestBinding.mjs +130 -0
- package/dist/operations/requestBinding.mjs.map +1 -0
- package/dist/operations/requestBindingModels.d.mts +13 -0
- package/dist/operations/requestBindingModels.mjs +12 -0
- package/dist/operations/requestBindingModels.mjs.map +1 -0
- package/dist/operations/reveals.d.mts +28 -0
- package/dist/operations/reveals.mjs +88 -0
- package/dist/operations/reveals.mjs.map +1 -0
- package/dist/passkey/PasskeyActionEvidence.d.mts +22 -0
- package/dist/passkey/PasskeyActionEvidence.mjs +9 -0
- package/dist/passkey/PasskeyActionEvidence.mjs.map +1 -0
- package/dist/passkey/PasskeyCredentials.d.mts +16 -0
- package/dist/passkey/PasskeyCredentials.mjs +9 -0
- package/dist/passkey/PasskeyCredentials.mjs.map +1 -0
- package/dist/passkey/PasskeyEnrollmentContext.d.mts +22 -0
- package/dist/passkey/PasskeyEnrollmentContext.mjs +9 -0
- package/dist/passkey/PasskeyEnrollmentContext.mjs.map +1 -0
- package/dist/passkey/PasskeyManagementPersistence.d.mts +106 -0
- package/dist/passkey/PasskeyManagementPersistence.mjs +9 -0
- package/dist/passkey/PasskeyManagementPersistence.mjs.map +1 -0
- package/dist/passkey/PasskeyPersistence.d.mts +63 -0
- package/dist/passkey/PasskeyPersistence.mjs +10 -0
- package/dist/passkey/PasskeyPersistence.mjs.map +1 -0
- package/dist/passkey/PasskeyProtocol.d.mts +38 -0
- package/dist/passkey/PasskeyProtocol.mjs +11 -0
- package/dist/passkey/PasskeyProtocol.mjs.map +1 -0
- package/dist/passkey/actions.d.mts +50 -0
- package/dist/passkey/actions.mjs +376 -0
- package/dist/passkey/actions.mjs.map +1 -0
- package/dist/passkey/browser/PasskeyBrowser.d.mts +18 -0
- package/dist/passkey/browser/PasskeyBrowser.mjs +9 -0
- package/dist/passkey/browser/PasskeyBrowser.mjs.map +1 -0
- package/dist/passkey/browser/models.d.mts +38 -0
- package/dist/passkey/browser/models.mjs +41 -0
- package/dist/passkey/browser/models.mjs.map +1 -0
- package/dist/passkey/browser/simplewebauthn.d.mts +17 -0
- package/dist/passkey/browser/simplewebauthn.mjs +411 -0
- package/dist/passkey/browser/simplewebauthn.mjs.map +1 -0
- package/dist/passkey/definition.d.mts +5626 -0
- package/dist/passkey/definition.mjs +114 -0
- package/dist/passkey/definition.mjs.map +1 -0
- package/dist/passkey/errors.d.mts +20 -0
- package/dist/passkey/errors.mjs +20 -0
- package/dist/passkey/errors.mjs.map +1 -0
- package/dist/passkey/management.mjs +276 -0
- package/dist/passkey/management.mjs.map +1 -0
- package/dist/passkey/models.d.mts +1245 -0
- package/dist/passkey/models.mjs +301 -0
- package/dist/passkey/models.mjs.map +1 -0
- package/dist/passkey/module.d.mts +2132 -0
- package/dist/passkey/module.mjs +174 -0
- package/dist/passkey/module.mjs.map +1 -0
- package/dist/passkey/pending.mjs +99 -0
- package/dist/passkey/pending.mjs.map +1 -0
- package/dist/passkey/policy.d.mts +48 -0
- package/dist/passkey/policy.mjs +77 -0
- package/dist/passkey/policy.mjs.map +1 -0
- package/dist/passkey/registration.mjs +107 -0
- package/dist/passkey/registration.mjs.map +1 -0
- package/dist/passkey/simplewebauthn/configuration.mjs +45 -0
- package/dist/passkey/simplewebauthn/configuration.mjs.map +1 -0
- package/dist/passkey/simplewebauthn/models.d.mts +21 -0
- package/dist/passkey/simplewebauthn/models.mjs +8 -0
- package/dist/passkey/simplewebauthn/models.mjs.map +1 -0
- package/dist/passkey/simplewebauthn/protocol.d.mts +62 -0
- package/dist/passkey/simplewebauthn/protocol.mjs +402 -0
- package/dist/passkey/simplewebauthn/protocol.mjs.map +1 -0
- package/dist/passkey/snapshot.mjs +31 -0
- package/dist/passkey/snapshot.mjs.map +1 -0
- package/dist/passkey/stepUp.mjs +101 -0
- package/dist/passkey/stepUp.mjs.map +1 -0
- package/dist/password/CompromisedPasswords.d.mts +26 -0
- package/dist/password/CompromisedPasswords.mjs +23 -0
- package/dist/password/CompromisedPasswords.mjs.map +1 -0
- package/dist/password/NewPasswordCheck.d.mts +21 -0
- package/dist/password/NewPasswordCheck.mjs +39 -0
- package/dist/password/NewPasswordCheck.mjs.map +1 -0
- package/dist/password/PasswordHashing.d.mts +24 -0
- package/dist/password/PasswordHashing.mjs +96 -0
- package/dist/password/PasswordHashing.mjs.map +1 -0
- package/dist/password/PasswordKdfAdmission.d.mts +19 -0
- package/dist/password/PasswordKdfAdmission.mjs +25 -0
- package/dist/password/PasswordKdfAdmission.mjs.map +1 -0
- package/dist/password/configuration.d.mts +43 -0
- package/dist/password/configuration.mjs +64 -0
- package/dist/password/configuration.mjs.map +1 -0
- package/dist/password/defaults.mjs +13 -0
- package/dist/password/defaults.mjs.map +1 -0
- package/dist/password/encoding.mjs +64 -0
- package/dist/password/encoding.mjs.map +1 -0
- package/dist/password/errors.d.mts +28 -0
- package/dist/password/errors.mjs +25 -0
- package/dist/password/errors.mjs.map +1 -0
- package/dist/password/methods/PasswordActionEvidence.d.mts +38 -0
- package/dist/password/methods/PasswordActionEvidence.mjs +22 -0
- package/dist/password/methods/PasswordActionEvidence.mjs.map +1 -0
- package/dist/password/methods/PasswordPersistence.d.mts +102 -0
- package/dist/password/methods/PasswordPersistence.mjs +13 -0
- package/dist/password/methods/PasswordPersistence.mjs.map +1 -0
- package/dist/password/methods/PasswordPreparedPersistence.d.mts +111 -0
- package/dist/password/methods/contracts.d.mts +43 -0
- package/dist/password/methods/contracts.mjs +33 -0
- package/dist/password/methods/contracts.mjs.map +1 -0
- package/dist/password/methods/definition.d.mts +3813 -0
- package/dist/password/methods/definition.mjs +56 -0
- package/dist/password/methods/definition.mjs.map +1 -0
- package/dist/password/methods/errors.d.mts +15 -0
- package/dist/password/methods/errors.mjs +11 -0
- package/dist/password/methods/errors.mjs.map +1 -0
- package/dist/password/methods/models.d.mts +70 -0
- package/dist/password/methods/models.mjs +44 -0
- package/dist/password/methods/models.mjs.map +1 -0
- package/dist/password/methods/module.d.mts +3567 -0
- package/dist/password/methods/module.mjs +553 -0
- package/dist/password/methods/module.mjs.map +1 -0
- package/dist/password/methods/policy.d.mts +84 -0
- package/dist/password/methods/policy.mjs +80 -0
- package/dist/password/methods/policy.mjs.map +1 -0
- package/dist/password/methods/preparation.mjs +54 -0
- package/dist/password/methods/preparation.mjs.map +1 -0
- package/dist/password/methods/prepared.d.mts +53 -0
- package/dist/password/methods/prepared.mjs +610 -0
- package/dist/password/methods/prepared.mjs.map +1 -0
- package/dist/password/methods/preparedModels.d.mts +1295 -0
- package/dist/password/methods/preparedModels.mjs +278 -0
- package/dist/password/methods/preparedModels.mjs.map +1 -0
- package/dist/password/methods/signIn.d.mts +180 -0
- package/dist/password/methods/signIn.mjs +73 -0
- package/dist/password/methods/signIn.mjs.map +1 -0
- package/dist/password/methods/snapshot.mjs +38 -0
- package/dist/password/methods/snapshot.mjs.map +1 -0
- package/dist/password/methods/verification.mjs +138 -0
- package/dist/password/methods/verification.mjs.map +1 -0
- package/dist/password/models.d.mts +13 -0
- package/dist/password/models.mjs +12 -0
- package/dist/password/models.mjs.map +1 -0
- package/dist/password/policy.d.mts +33 -0
- package/dist/password/policy.mjs +37 -0
- package/dist/password/policy.mjs.map +1 -0
- package/dist/phone/PhoneActionEvidence.d.mts +23 -0
- package/dist/phone/PhoneActionEvidence.mjs +10 -0
- package/dist/phone/PhoneActionEvidence.mjs.map +1 -0
- package/dist/phone/PhoneAdmission.d.mts +29 -0
- package/dist/phone/PhoneAdmission.mjs +10 -0
- package/dist/phone/PhoneAdmission.mjs.map +1 -0
- package/dist/phone/PhoneDeliveryEligibility.d.mts +11 -0
- package/dist/phone/PhoneDeliveryEligibility.mjs +8 -0
- package/dist/phone/PhoneDeliveryEligibility.mjs.map +1 -0
- package/dist/phone/PhonePersistence.d.mts +33 -0
- package/dist/phone/PhonePersistence.mjs +10 -0
- package/dist/phone/PhonePersistence.mjs.map +1 -0
- package/dist/phone/PhoneRequestContext.d.mts +10 -0
- package/dist/phone/PhoneRequestContext.mjs +8 -0
- package/dist/phone/PhoneRequestContext.mjs.map +1 -0
- package/dist/phone/PhoneSignInTargets.d.mts +19 -0
- package/dist/phone/PhoneSignInTargets.mjs +13 -0
- package/dist/phone/PhoneSignInTargets.mjs.map +1 -0
- package/dist/phone/definition.d.mts +7190 -0
- package/dist/phone/definition.mjs +28 -0
- package/dist/phone/definition.mjs.map +1 -0
- package/dist/phone/failure.mjs +23 -0
- package/dist/phone/failure.mjs.map +1 -0
- package/dist/phone/lifecycle.mjs +427 -0
- package/dist/phone/lifecycle.mjs.map +1 -0
- package/dist/phone/lifecycleModels.d.mts +164 -0
- package/dist/phone/lifecycleModels.mjs +91 -0
- package/dist/phone/lifecycleModels.mjs.map +1 -0
- package/dist/phone/models.d.mts +41 -0
- package/dist/phone/models.mjs +29 -0
- package/dist/phone/models.mjs.map +1 -0
- package/dist/phone/module.d.mts +6027 -0
- package/dist/phone/module.mjs +293 -0
- package/dist/phone/module.mjs.map +1 -0
- package/dist/proofs/EmailProofDelivery.d.mts +13 -0
- package/dist/proofs/EmailProofDelivery.mjs +11 -0
- package/dist/proofs/EmailProofDelivery.mjs.map +1 -0
- package/dist/proofs/HostIngressLimiter.d.mts +20 -0
- package/dist/proofs/HostIngressLimiter.mjs +13 -0
- package/dist/proofs/HostIngressLimiter.mjs.map +1 -0
- package/dist/proofs/ProofPersistence.d.mts +140 -0
- package/dist/proofs/ProofPersistence.mjs +13 -0
- package/dist/proofs/ProofPersistence.mjs.map +1 -0
- package/dist/proofs/SmsProofDelivery.d.mts +13 -0
- package/dist/proofs/SmsProofDelivery.mjs +11 -0
- package/dist/proofs/SmsProofDelivery.mjs.map +1 -0
- package/dist/proofs/abuse.d.mts +15 -0
- package/dist/proofs/abuse.mjs +12 -0
- package/dist/proofs/abuse.mjs.map +1 -0
- package/dist/proofs/completion.d.mts +22 -0
- package/dist/proofs/crypto.d.mts +196 -0
- package/dist/proofs/crypto.mjs +189 -0
- package/dist/proofs/crypto.mjs.map +1 -0
- package/dist/proofs/definition.d.mts +335 -0
- package/dist/proofs/definition.mjs +10 -0
- package/dist/proofs/definition.mjs.map +1 -0
- package/dist/proofs/delivery.d.mts +30 -0
- package/dist/proofs/delivery.mjs +26 -0
- package/dist/proofs/delivery.mjs.map +1 -0
- package/dist/proofs/dispatch.d.mts +20 -0
- package/dist/proofs/dispatch.mjs +54 -0
- package/dist/proofs/dispatch.mjs.map +1 -0
- package/dist/proofs/errors.d.mts +21 -0
- package/dist/proofs/errors.mjs +25 -0
- package/dist/proofs/errors.mjs.map +1 -0
- package/dist/proofs/models.d.mts +141 -0
- package/dist/proofs/models.mjs +93 -0
- package/dist/proofs/models.mjs.map +1 -0
- package/dist/proofs/module.d.mts +344 -0
- package/dist/proofs/module.mjs +350 -0
- package/dist/proofs/module.mjs.map +1 -0
- package/dist/proofs/policy.d.mts +152 -0
- package/dist/proofs/policy.mjs +51 -0
- package/dist/proofs/policy.mjs.map +1 -0
- package/dist/sessions/AuthenticationAuthority.d.mts +31 -0
- package/dist/sessions/AuthenticationAuthority.mjs +8 -0
- package/dist/sessions/AuthenticationAuthority.mjs.map +1 -0
- package/dist/sessions/PendingAuthentication.d.mts +108 -0
- package/dist/sessions/PendingAuthentication.mjs +40 -0
- package/dist/sessions/PendingAuthentication.mjs.map +1 -0
- package/dist/sessions/SessionStepUpPersistence.d.mts +152 -0
- package/dist/sessions/SessionStepUpPersistence.mjs +63 -0
- package/dist/sessions/SessionStepUpPersistence.mjs.map +1 -0
- package/dist/sessions/assurance.d.mts +163 -0
- package/dist/sessions/assurance.mjs +95 -0
- package/dist/sessions/assurance.mjs.map +1 -0
- package/dist/sessions/commit.d.mts +13 -0
- package/dist/sessions/configuration.d.mts +46 -0
- package/dist/sessions/configuration.mjs +55 -0
- package/dist/sessions/configuration.mjs.map +1 -0
- package/dist/sessions/contract.d.mts +663 -0
- package/dist/sessions/contract.mjs +174 -0
- package/dist/sessions/contract.mjs.map +1 -0
- package/dist/sessions/crypto.d.mts +24 -0
- package/dist/sessions/crypto.mjs +106 -0
- package/dist/sessions/crypto.mjs.map +1 -0
- package/dist/sessions/definition.d.mts +11 -0
- package/dist/sessions/definition.mjs +10 -0
- package/dist/sessions/definition.mjs.map +1 -0
- package/dist/sessions/errors.d.mts +35 -0
- package/dist/sessions/errors.mjs +34 -0
- package/dist/sessions/errors.mjs.map +1 -0
- package/dist/sessions/invalidation.d.mts +23 -0
- package/dist/sessions/invalidation.mjs +33 -0
- package/dist/sessions/invalidation.mjs.map +1 -0
- package/dist/sessions/models.d.mts +143 -0
- package/dist/sessions/models.mjs +94 -0
- package/dist/sessions/models.mjs.map +1 -0
- package/dist/sessions/module.d.mts +1091 -0
- package/dist/sessions/module.mjs +943 -0
- package/dist/sessions/module.mjs.map +1 -0
- package/dist/sessions/persistence.d.mts +93 -0
- package/dist/sessions/policy.d.mts +80 -0
- package/dist/sessions/policy.mjs +66 -0
- package/dist/sessions/policy.mjs.map +1 -0
- package/dist/testing/conformance/AuthStore.d.mts +11 -0
- package/dist/testing/conformance/AuthStore.mjs +173 -0
- package/dist/testing/conformance/AuthStore.mjs.map +1 -0
- package/dist/testing/conformance/OAuthConnectionStore.d.mts +11 -0
- package/dist/testing/conformance/OAuthConnectionStore.mjs +102 -0
- package/dist/testing/conformance/OAuthConnectionStore.mjs.map +1 -0
- package/dist/testing/conformance/OAuthStateStore.d.mts +11 -0
- package/dist/testing/conformance/OAuthStateStore.mjs +45 -0
- package/dist/testing/conformance/OAuthStateStore.mjs.map +1 -0
- package/dist/testing/conformance/PasswordCredentialStore.d.mts +20 -0
- package/dist/testing/conformance/PasswordCredentialStore.mjs +103 -0
- package/dist/testing/conformance/PasswordCredentialStore.mjs.map +1 -0
- package/dist/testing/conformance/support.mjs +17 -0
- package/dist/testing/conformance/support.mjs.map +1 -0
- package/dist/testing/crypto.d.mts +11 -0
- package/dist/testing/crypto.mjs +41 -0
- package/dist/testing/crypto.mjs.map +1 -0
- package/dist/testing/keyring.d.mts +9 -0
- package/dist/testing/keyring.mjs +17 -0
- package/dist/testing/keyring.mjs.map +1 -0
- package/dist/totp/TotpActionEvidence.d.mts +18 -0
- package/dist/totp/TotpActionEvidence.mjs +8 -0
- package/dist/totp/TotpActionEvidence.mjs.map +1 -0
- package/dist/totp/TotpPersistence.d.mts +19 -0
- package/dist/totp/TotpPersistence.mjs +8 -0
- package/dist/totp/TotpPersistence.mjs.map +1 -0
- package/dist/totp/TotpSecretKeys.d.mts +15 -0
- package/dist/totp/TotpSecretKeys.mjs +8 -0
- package/dist/totp/TotpSecretKeys.mjs.map +1 -0
- package/dist/totp/crypto.mjs +96 -0
- package/dist/totp/crypto.mjs.map +1 -0
- package/dist/totp/definition.d.mts +764 -0
- package/dist/totp/definition.mjs +24 -0
- package/dist/totp/definition.mjs.map +1 -0
- package/dist/totp/errors.d.mts +16 -0
- package/dist/totp/errors.mjs +18 -0
- package/dist/totp/errors.mjs.map +1 -0
- package/dist/totp/models.d.mts +377 -0
- package/dist/totp/models.mjs +137 -0
- package/dist/totp/models.mjs.map +1 -0
- package/dist/totp/module.d.mts +737 -0
- package/dist/totp/module.mjs +355 -0
- package/dist/totp/module.mjs.map +1 -0
- package/package.json +1 -0
- package/src/Atom.ts +4 -0
- package/src/Auth.ts +16 -0
- package/src/AuthContract.ts +17 -0
- package/src/AuthSession.ts +298 -0
- package/src/AuthStore.ts +367 -0
- package/src/AuthTokenCodec.ts +226 -0
- package/src/Client.ts +9 -0
- package/src/Cloudflare.ts +345 -0
- package/src/Drizzle.ts +378 -0
- package/src/DrizzleD1.ts +136 -0
- package/src/DrizzleLibsql.ts +288 -0
- package/src/DrizzleMysql2.ts +184 -0
- package/src/DrizzlePglite.ts +160 -0
- package/src/DrizzlePostgres.ts +160 -0
- package/src/DrizzleSqliteBun.ts +244 -0
- package/src/DrizzleSqliteDo.ts +473 -0
- package/src/DrizzleSqliteNode.ts +245 -0
- package/src/DrizzleSqliteWasm.ts +245 -0
- package/src/Email.ts +55 -0
- package/src/EmailOtp.ts +250 -0
- package/src/EmailOtpSender.ts +28 -0
- package/src/Errors.ts +103 -0
- package/src/GitHub.ts +16 -0
- package/src/Hooks.ts +50 -0
- package/src/Http.ts +47 -0
- package/src/HttpServer.ts +742 -0
- package/src/Identity.ts +53 -0
- package/src/IdentityResolver.ts +18 -0
- package/src/OAuth.ts +242 -0
- package/src/OpenIdClient.ts +13 -0
- package/src/OpenIdClientConnected.ts +18 -0
- package/src/OperationHttp.ts +14 -0
- package/src/OperationHttpClient.ts +6 -0
- package/src/OperationHttpServer.ts +15 -0
- package/src/Operations.ts +69 -0
- package/src/Passkey.ts +81 -0
- package/src/PasskeyBrowser.ts +19 -0
- package/src/PasskeyContract.ts +212 -0
- package/src/PasskeyPassword.ts +319 -0
- package/src/PasskeySimpleWebAuthn.ts +6 -0
- package/src/Password.ts +113 -0
- package/src/PasswordAuth.ts +197 -0
- package/src/PasswordCredentialStore.ts +140 -0
- package/src/PasswordHasher.ts +147 -0
- package/src/PhoneOtp.ts +32 -0
- package/src/Policy.ts +95 -0
- package/src/Proofs.ts +71 -0
- package/src/Rpc.ts +15 -0
- package/src/Schema.ts +235 -0
- package/src/SessionContract.ts +2 -0
- package/src/Sessions.ts +105 -0
- package/src/Testing.ts +24 -0
- package/src/Totp.ts +28 -0
- package/src/TotpContract.ts +147 -0
- package/src/WebCrypto.ts +61 -0
- package/src/Workflows.ts +12 -0
- package/src/atom/AuthAtomLifetime.ts +87 -0
- package/src/atom/AuthAtomWorkflow.ts +27 -0
- package/src/atom/client.ts +364 -0
- package/src/atom/operations.ts +183 -0
- package/src/atom/scoped-runtime.ts +249 -0
- package/src/auth/Auth.ts +482 -0
- package/src/auth/AuthConfigurationError.ts +9 -0
- package/src/auth/AuthRequest.ts +21 -0
- package/src/auth/AuthStrategy.ts +116 -0
- package/src/auth/ConsumeDecision.ts +4 -0
- package/src/auth/actions.ts +220 -0
- package/src/auth/defaults.ts +23 -0
- package/src/auth/definition.ts +88 -0
- package/src/auth/session.ts +146 -0
- package/src/drizzle/D1BatchStatements.ts +10 -0
- package/src/drizzle/PasswordPreparedPostconditions.ts +30 -0
- package/src/drizzle/SuppliedService.ts +10 -0
- package/src/drizzle/d1-emails.ts +1808 -0
- package/src/drizzle/d1-generated-statement.ts +129 -0
- package/src/drizzle/d1-identity.ts +374 -0
- package/src/drizzle/d1-oauth.ts +338 -0
- package/src/drizzle/d1-passkey.ts +371 -0
- package/src/drizzle/d1-password-prepared.ts +1273 -0
- package/src/drizzle/d1-passwords.ts +2661 -0
- package/src/drizzle/d1-phone.ts +94 -0
- package/src/drizzle/d1-planning.ts +105 -0
- package/src/drizzle/d1-proofs.ts +2305 -0
- package/src/drizzle/d1-sessions.ts +2867 -0
- package/src/drizzle/d1-totp.ts +79 -0
- package/src/drizzle/email-model.ts +512 -0
- package/src/drizzle/email-registration.ts +696 -0
- package/src/drizzle/email-sql.ts +1468 -0
- package/src/drizzle/email-target.ts +243 -0
- package/src/drizzle/model.ts +492 -0
- package/src/drizzle/mysql-emails.ts +323 -0
- package/src/drizzle/mysql-identity.ts +323 -0
- package/src/drizzle/mysql-password-prepared.ts +206 -0
- package/src/drizzle/mysql-passwords.ts +341 -0
- package/src/drizzle/mysql-proofs.ts +183 -0
- package/src/drizzle/mysql-sessions.ts +742 -0
- package/src/drizzle/mysql.ts +686 -0
- package/src/drizzle/oauth-accounts.ts +801 -0
- package/src/drizzle/oauth-connected-access.ts +354 -0
- package/src/drizzle/oauth-connected-collection.ts +324 -0
- package/src/drizzle/oauth-connected-custody.ts +277 -0
- package/src/drizzle/oauth-connected-drivers.ts +463 -0
- package/src/drizzle/oauth-connected-flow.ts +439 -0
- package/src/drizzle/oauth-connected-input.ts +128 -0
- package/src/drizzle/oauth-connected-maintenance.ts +345 -0
- package/src/drizzle/oauth-connected-management.ts +365 -0
- package/src/drizzle/oauth-connected-model.ts +347 -0
- package/src/drizzle/oauth-connected-reference.ts +112 -0
- package/src/drizzle/oauth-connected-settlement.ts +226 -0
- package/src/drizzle/oauth-connected-state.ts +846 -0
- package/src/drizzle/oauth-connected-target.ts +264 -0
- package/src/drizzle/oauth-drivers.ts +567 -0
- package/src/drizzle/oauth-flow.ts +461 -0
- package/src/drizzle/oauth-input.ts +205 -0
- package/src/drizzle/oauth-model.ts +610 -0
- package/src/drizzle/oauth-mysql.ts +10 -0
- package/src/drizzle/oauth-owner.ts +29 -0
- package/src/drizzle/oauth-registration.ts +638 -0
- package/src/drizzle/oauth-state.ts +213 -0
- package/src/drizzle/oauth-target.ts +751 -0
- package/src/drizzle/passkey-admission.ts +333 -0
- package/src/drizzle/passkey-credentials.ts +465 -0
- package/src/drizzle/passkey-drivers.ts +385 -0
- package/src/drizzle/passkey-enrollment.ts +280 -0
- package/src/drizzle/passkey-flow.ts +983 -0
- package/src/drizzle/passkey-management.ts +369 -0
- package/src/drizzle/passkey-model.ts +350 -0
- package/src/drizzle/passkey-registration-ceremony-model.ts +69 -0
- package/src/drizzle/passkey-registration-ceremony.ts +254 -0
- package/src/drizzle/passkey-registration-custody.ts +82 -0
- package/src/drizzle/passkey-registration-write.ts +378 -0
- package/src/drizzle/passkey-state.ts +307 -0
- package/src/drizzle/passkey-target.ts +528 -0
- package/src/drizzle/passkey-write-drivers.ts +396 -0
- package/src/drizzle/passkey-write-model.ts +265 -0
- package/src/drizzle/passkey-write-state.ts +627 -0
- package/src/drizzle/passkey-write-target.ts +406 -0
- package/src/drizzle/password-model.ts +491 -0
- package/src/drizzle/password-prepared-model.ts +259 -0
- package/src/drizzle/password-prepared-sql.ts +1198 -0
- package/src/drizzle/password-prepared-state.ts +232 -0
- package/src/drizzle/password-prepared-target.ts +158 -0
- package/src/drizzle/password-registration.ts +372 -0
- package/src/drizzle/password-sql.ts +2082 -0
- package/src/drizzle/password-target.ts +223 -0
- package/src/drizzle/pg-emails.ts +323 -0
- package/src/drizzle/pg-password-prepared.ts +207 -0
- package/src/drizzle/pg-passwords.ts +340 -0
- package/src/drizzle/pg-proofs.ts +193 -0
- package/src/drizzle/pg-sessions.ts +751 -0
- package/src/drizzle/pg.ts +982 -0
- package/src/drizzle/phone-model.ts +185 -0
- package/src/drizzle/phone-state.ts +802 -0
- package/src/drizzle/phone-target.ts +471 -0
- package/src/drizzle/proof-model.ts +398 -0
- package/src/drizzle/proof-sql.ts +1912 -0
- package/src/drizzle/proof-target.ts +120 -0
- package/src/drizzle/session-model.ts +368 -0
- package/src/drizzle/session-sql.ts +2152 -0
- package/src/drizzle/session-target.ts +335 -0
- package/src/drizzle/sqlite-emails.ts +368 -0
- package/src/drizzle/sqlite-identity.ts +343 -0
- package/src/drizzle/sqlite-password-prepared.ts +262 -0
- package/src/drizzle/sqlite-passwords.ts +499 -0
- package/src/drizzle/sqlite-proofs.ts +204 -0
- package/src/drizzle/sqlite-sessions.ts +972 -0
- package/src/drizzle/sqlite.ts +704 -0
- package/src/drizzle/standalone-guard.ts +38 -0
- package/src/drizzle/step-up-model.ts +129 -0
- package/src/drizzle/step-up-state.ts +141 -0
- package/src/drizzle/totp-model.ts +91 -0
- package/src/drizzle/totp-state.ts +520 -0
- package/src/drizzle/totp-target.ts +304 -0
- package/src/drizzle/transaction-execution.ts +290 -0
- package/src/drizzle/transaction-mysql.ts +104 -0
- package/src/drizzle/transaction-owner.ts +570 -0
- package/src/email/EmailActionEvidence.ts +37 -0
- package/src/email/EmailAddressPersistence.ts +71 -0
- package/src/email/EmailIdentifierNotifier.ts +48 -0
- package/src/email/EmailReturnTargets.ts +50 -0
- package/src/email/EmailSignInTargets.ts +20 -0
- package/src/email/addresses.ts +630 -0
- package/src/email/definition.ts +309 -0
- package/src/email/errors.ts +23 -0
- package/src/email/magicLink.ts +84 -0
- package/src/email/models.ts +50 -0
- package/src/email/module.ts +664 -0
- package/src/email/registration.ts +415 -0
- package/src/email/snapshot.ts +51 -0
- package/src/hooks/LifecycleHooks.ts +136 -0
- package/src/hooks/commit.ts +271 -0
- package/src/hooks/models.ts +111 -0
- package/src/hooks/plugins.ts +87 -0
- package/src/hooks/transactions.ts +51 -0
- package/src/http/auth-api.ts +17 -0
- package/src/http/auth-contract.ts +148 -0
- package/src/http/auth-http.ts +467 -0
- package/src/http/endpoints/get-session.ts +9 -0
- package/src/http/endpoints/password-sign-in.ts +19 -0
- package/src/http/endpoints/request-email-otp.ts +10 -0
- package/src/http/endpoints/set-password.ts +18 -0
- package/src/http/endpoints/sign-out.ts +5 -0
- package/src/http/endpoints/verify-email-otp.ts +15 -0
- package/src/http/models.ts +80 -0
- package/src/http/security.ts +102 -0
- package/src/http/session-contract.ts +92 -0
- package/src/http-operation/OperationHttpInvocation.ts +39 -0
- package/src/http-operation/OperationHttpServerConfig.ts +124 -0
- package/src/http-operation/auth-client.ts +273 -0
- package/src/http-operation/client.ts +453 -0
- package/src/http-operation/configuration-schema.ts +19 -0
- package/src/http-operation/contract.ts +116 -0
- package/src/http-operation/errors.ts +38 -0
- package/src/http-operation/models.ts +42 -0
- package/src/http-operation/private.ts +50 -0
- package/src/http-operation/security.ts +93 -0
- package/src/http-operation/server.ts +544 -0
- package/src/identity/ExternalIdentityMutation.ts +18 -0
- package/src/identity/IdentityMutation.ts +41 -0
- package/src/identity/IdentityRepository.ts +37 -0
- package/src/identity/SubjectLifecycle.ts +80 -0
- package/src/identity/SubjectProvisioner.ts +40 -0
- package/src/identity/codecs.ts +54 -0
- package/src/identity/models.ts +82 -0
- package/src/identity/operations.ts +182 -0
- package/src/index.ts +23 -0
- package/src/internal/AuthStoreDecisions.ts +23 -0
- package/src/internal/CurrentSession.ts +8 -0
- package/src/internal/diagnostics.ts +71 -0
- package/src/oauth/GithubOAuthProvider.ts +106 -0
- package/src/oauth/OAuth.ts +436 -0
- package/src/oauth/OAuthAccountsPersistence.ts +142 -0
- package/src/oauth/OAuthActionEvidence.ts +31 -0
- package/src/oauth/OAuthConnectedActionEvidence.ts +28 -0
- package/src/oauth/OAuthConnectedPersistence.ts +163 -0
- package/src/oauth/OAuthConnectedProtocol.ts +54 -0
- package/src/oauth/OAuthConnectedRevocations.ts +48 -0
- package/src/oauth/OAuthConnectedTokenProtector.ts +240 -0
- package/src/oauth/OAuthConnectedTransactionProtector.ts +56 -0
- package/src/oauth/OAuthConnectedUseAuthority.ts +26 -0
- package/src/oauth/OAuthConnectionStore.ts +59 -0
- package/src/oauth/OAuthLinkTransactionProtector.ts +58 -0
- package/src/oauth/OAuthProtocol.ts +39 -0
- package/src/oauth/OAuthProvider.ts +126 -0
- package/src/oauth/OAuthProviders.ts +53 -0
- package/src/oauth/OAuthRegistrationIntents.ts +42 -0
- package/src/oauth/OAuthReturnTargets.ts +44 -0
- package/src/oauth/OAuthSignInPersistence.ts +91 -0
- package/src/oauth/OAuthStateDecisions.ts +16 -0
- package/src/oauth/OAuthStateStore.ts +102 -0
- package/src/oauth/OAuthTransactionProtector.ts +103 -0
- package/src/oauth/accounts.ts +987 -0
- package/src/oauth/accountsModels.ts +214 -0
- package/src/oauth/connected.ts +995 -0
- package/src/oauth/connectedAccess.ts +644 -0
- package/src/oauth/connectedMaintenance.ts +248 -0
- package/src/oauth/connectedModels.ts +495 -0
- package/src/oauth/definition.ts +414 -0
- package/src/oauth/errors.ts +78 -0
- package/src/oauth/github/identity.ts +26 -0
- package/src/oauth/github/models.ts +37 -0
- package/src/oauth/github/protocol.ts +329 -0
- package/src/oauth/openid-client/ProviderRevocation.ts +22 -0
- package/src/oauth/openid-client/compatibility.ts +47 -0
- package/src/oauth/openid-client/configuration.ts +472 -0
- package/src/oauth/openid-client/connected/configuration.ts +565 -0
- package/src/oauth/openid-client/connected/models.ts +58 -0
- package/src/oauth/openid-client/connected/protocol.ts +866 -0
- package/src/oauth/openid-client/models.ts +78 -0
- package/src/oauth/openid-client/protocol.ts +437 -0
- package/src/oauth/openid-client/transport.ts +67 -0
- package/src/oauth/policy.ts +26 -0
- package/src/oauth/registration.ts +410 -0
- package/src/oauth/registrationModels.ts +115 -0
- package/src/oauth/registrationSecrets.ts +127 -0
- package/src/oauth/schema.ts +102 -0
- package/src/oauth/signInErrors.ts +23 -0
- package/src/oauth/signInModels.ts +266 -0
- package/src/oauth/signInModule.ts +875 -0
- package/src/oauth/signInSnapshot.ts +37 -0
- package/src/oauth/transactionEncryption.ts +198 -0
- package/src/operations/RequestBindingConfig.ts +12 -0
- package/src/operations/actions.ts +342 -0
- package/src/operations/context.ts +130 -0
- package/src/operations/credentials.ts +121 -0
- package/src/operations/errors.ts +53 -0
- package/src/operations/operation.ts +740 -0
- package/src/operations/requestBinding.ts +237 -0
- package/src/operations/requestBindingModels.ts +18 -0
- package/src/operations/reveals.ts +147 -0
- package/src/passkey/PasskeyActionEvidence.ts +25 -0
- package/src/passkey/PasskeyCredentials.ts +16 -0
- package/src/passkey/PasskeyEnrollmentContext.ts +26 -0
- package/src/passkey/PasskeyManagementPersistence.ts +124 -0
- package/src/passkey/PasskeyPersistence.ts +85 -0
- package/src/passkey/PasskeyProtocol.ts +48 -0
- package/src/passkey/actions.ts +905 -0
- package/src/passkey/browser/PasskeyBrowser.ts +26 -0
- package/src/passkey/browser/models.ts +67 -0
- package/src/passkey/browser/simplewebauthn.ts +621 -0
- package/src/passkey/definition.ts +386 -0
- package/src/passkey/errors.ts +39 -0
- package/src/passkey/management.ts +552 -0
- package/src/passkey/models.ts +414 -0
- package/src/passkey/module.ts +367 -0
- package/src/passkey/pending.ts +203 -0
- package/src/passkey/policy.ts +88 -0
- package/src/passkey/registration.ts +251 -0
- package/src/passkey/simplewebauthn/configuration.ts +97 -0
- package/src/passkey/simplewebauthn/models.ts +9 -0
- package/src/passkey/simplewebauthn/protocol.ts +729 -0
- package/src/passkey/snapshot.ts +48 -0
- package/src/passkey/stepUp.ts +212 -0
- package/src/password/CompromisedPasswords.ts +36 -0
- package/src/password/NewPasswordCheck.ts +89 -0
- package/src/password/PasswordHashing.ts +209 -0
- package/src/password/PasswordKdfAdmission.ts +44 -0
- package/src/password/configuration.ts +52 -0
- package/src/password/defaults.ts +15 -0
- package/src/password/encoding.ts +137 -0
- package/src/password/errors.ts +43 -0
- package/src/password/methods/PasswordActionEvidence.ts +41 -0
- package/src/password/methods/PasswordPersistence.ts +128 -0
- package/src/password/methods/PasswordPreparedPersistence.ts +123 -0
- package/src/password/methods/contracts.ts +47 -0
- package/src/password/methods/definition.ts +199 -0
- package/src/password/methods/errors.ts +26 -0
- package/src/password/methods/models.ts +80 -0
- package/src/password/methods/module.ts +986 -0
- package/src/password/methods/policy.ts +68 -0
- package/src/password/methods/preparation.ts +73 -0
- package/src/password/methods/prepared.ts +1199 -0
- package/src/password/methods/preparedModels.ts +496 -0
- package/src/password/methods/signIn.ts +136 -0
- package/src/password/methods/snapshot.ts +53 -0
- package/src/password/methods/verification.ts +266 -0
- package/src/password/models.ts +15 -0
- package/src/password/policy.ts +41 -0
- package/src/phone/PhoneActionEvidence.ts +26 -0
- package/src/phone/PhoneAdmission.ts +29 -0
- package/src/phone/PhoneDeliveryEligibility.ts +9 -0
- package/src/phone/PhonePersistence.ts +43 -0
- package/src/phone/PhoneRequestContext.ts +7 -0
- package/src/phone/PhoneSignInTargets.ts +19 -0
- package/src/phone/definition.ts +87 -0
- package/src/phone/failure.ts +40 -0
- package/src/phone/lifecycle.ts +662 -0
- package/src/phone/lifecycleModels.ts +108 -0
- package/src/phone/models.ts +41 -0
- package/src/phone/module.ts +433 -0
- package/src/proofs/EmailProofDelivery.ts +19 -0
- package/src/proofs/HostIngressLimiter.ts +20 -0
- package/src/proofs/ProofPersistence.ts +172 -0
- package/src/proofs/SmsProofDelivery.ts +19 -0
- package/src/proofs/abuse.ts +23 -0
- package/src/proofs/completion.ts +23 -0
- package/src/proofs/crypto.ts +326 -0
- package/src/proofs/definition.ts +39 -0
- package/src/proofs/delivery.ts +73 -0
- package/src/proofs/dispatch.ts +99 -0
- package/src/proofs/errors.ts +46 -0
- package/src/proofs/models.ts +131 -0
- package/src/proofs/module.ts +620 -0
- package/src/proofs/policy.ts +77 -0
- package/src/sessions/AuthenticationAuthority.ts +51 -0
- package/src/sessions/PendingAuthentication.ts +121 -0
- package/src/sessions/SessionStepUpPersistence.ts +164 -0
- package/src/sessions/assurance.ts +192 -0
- package/src/sessions/commit.ts +13 -0
- package/src/sessions/configuration.ts +133 -0
- package/src/sessions/contract.ts +203 -0
- package/src/sessions/crypto.ts +181 -0
- package/src/sessions/definition.ts +25 -0
- package/src/sessions/errors.ts +68 -0
- package/src/sessions/invalidation.ts +46 -0
- package/src/sessions/models.ts +138 -0
- package/src/sessions/module.ts +1991 -0
- package/src/sessions/persistence.ts +135 -0
- package/src/sessions/policy.ts +103 -0
- package/src/testing/conformance/AuthStore.ts +314 -0
- package/src/testing/conformance/OAuthConnectionStore.ts +167 -0
- package/src/testing/conformance/OAuthStateStore.ts +105 -0
- package/src/testing/conformance/PasswordCredentialStore.ts +205 -0
- package/src/testing/conformance/support.ts +38 -0
- package/src/testing/crypto.ts +55 -0
- package/src/testing/keyring.ts +17 -0
- package/src/totp/TotpActionEvidence.ts +18 -0
- package/src/totp/TotpPersistence.ts +26 -0
- package/src/totp/TotpSecretKeys.ts +15 -0
- package/src/totp/crypto.ts +160 -0
- package/src/totp/definition.ts +78 -0
- package/src/totp/errors.ts +25 -0
- package/src/totp/models.ts +164 -0
- package/src/totp/module.ts +717 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { SessionSummary } from "./Schema.mjs";
|
|
2
|
+
import { AuthStoreError, AuthTokenError, AuthUnavailable, IdentityResolutionError, InvalidRegistration, RegistrationIncomplete } from "./Errors.mjs";
|
|
3
|
+
import { AuthSession, AuthSessionWithExtClass, IssuedSession } from "./AuthSession.mjs";
|
|
4
|
+
import { EmailOtp } from "./EmailOtp.mjs";
|
|
5
|
+
import { SessionStateAnonymous, SessionStateAuthenticated, SessionStateRegistrationRequired } from "./http/models.mjs";
|
|
6
|
+
import { ChallengeMiddleware, CurrentRegistration, RegistrationMiddleware, SessionMiddleware } from "./http/security.mjs";
|
|
7
|
+
import { AuthApi } from "./http/auth-api.mjs";
|
|
8
|
+
import { PasswordAuth } from "./PasswordAuth.mjs";
|
|
9
|
+
import { Effect, Layer } from "effect";
|
|
10
|
+
import { HttpApi, HttpApiEndpoint, HttpApiGroup, HttpApiSecurity } from "effect/unstable/httpapi";
|
|
11
|
+
import { HttpServerResponse } from "effect/unstable/http";
|
|
12
|
+
//#region src/HttpServer.d.ts
|
|
13
|
+
/** Registers a pre-response handler that expires one of the auth cookies. */
|
|
14
|
+
declare const expireSecurityCookie: (security: HttpApiSecurity.ApiKey) => Effect.Effect<void, never, import("effect/unstable/http/HttpServerRequest").HttpServerRequest>;
|
|
15
|
+
/**
|
|
16
|
+
* Bearer-transport counterpart of {@link expireSecurityCookie}: an empty
|
|
17
|
+
* `set-auth-token` header tells cookie-less clients to drop their stored
|
|
18
|
+
* session token. Without it, sign-out only expires the cookie and a bearer
|
|
19
|
+
* client races its own token cleanup against the session refetch — the
|
|
20
|
+
* stateless token keeps verifying and the client re-authenticates itself
|
|
21
|
+
* straight back into the session it just revoked.
|
|
22
|
+
*/
|
|
23
|
+
declare const expireAuthTokenHeader: Effect.Effect<void, never, import("effect/unstable/http/HttpServerRequest").HttpServerRequest>;
|
|
24
|
+
/**
|
|
25
|
+
* Applies the session to a concrete response for both transports. This is the
|
|
26
|
+
* raw-handler counterpart to {@link registerSession}; keeping both here makes
|
|
27
|
+
* the cookie and bearer-header contract a single source of truth.
|
|
28
|
+
*/
|
|
29
|
+
declare const setSessionOnResponse: (response: HttpServerResponse.HttpServerResponse, issued: IssuedSession) => HttpServerResponse.HttpServerResponse;
|
|
30
|
+
/**
|
|
31
|
+
* Registers the session on the response for both transports: the HttpOnly
|
|
32
|
+
* cookie for browsers, and the `set-auth-token` header for clients that
|
|
33
|
+
* cannot read the cookie and echo the token back as `Authorization: Bearer`.
|
|
34
|
+
* Every place that issues a session must go through this so the two
|
|
35
|
+
* transports never drift — including application-owned handlers that issue
|
|
36
|
+
* sessions outside this module's workflows.
|
|
37
|
+
*/
|
|
38
|
+
declare const registerSession: (issued: IssuedSession) => Effect.Effect<void, never, import("effect/unstable/http/HttpServerRequest").HttpServerRequest>;
|
|
39
|
+
/**
|
|
40
|
+
* Resolves the request's optional session and pending-registration credentials.
|
|
41
|
+
* Browser credentials prefer cookies; native clients can supply the same tokens
|
|
42
|
+
* through their corresponding headers.
|
|
43
|
+
* Invalid or expired credentials degrade to the next public state; failures
|
|
44
|
+
* in the token codec or auth store remain an explicit availability error.
|
|
45
|
+
*/
|
|
46
|
+
declare const resolveSessionState: Effect.Effect<SessionStateAnonymous | SessionStateAuthenticated | SessionStateRegistrationRequired, AuthUnavailable, AuthSession | EmailOtp | import("effect/unstable/http/HttpServerRequest").HttpServerRequest | import("effect/unstable/http/HttpServerRequest").ParsedSearchParams>;
|
|
47
|
+
declare const SessionMiddlewareLayer: Layer.Layer<SessionMiddleware, never, AuthSession>;
|
|
48
|
+
declare const RegistrationMiddlewareLayer: Layer.Layer<RegistrationMiddleware, never, EmailOtp>;
|
|
49
|
+
declare const ChallengeMiddlewareLayer: Layer.Layer<ChallengeMiddleware>;
|
|
50
|
+
/**
|
|
51
|
+
* Gate for the handler-layer factories: the consumer's API must contain an
|
|
52
|
+
* `auth` group with every canonical endpoint. API prefixes and middleware may
|
|
53
|
+
* wrap endpoint path and requirement types, so the check allows those two
|
|
54
|
+
* differences while preserving every transport schema.
|
|
55
|
+
*/
|
|
56
|
+
type AuthGroup<Groups> = Extract<Groups, {
|
|
57
|
+
readonly identifier: "auth";
|
|
58
|
+
}>;
|
|
59
|
+
type AuthGroupEndpoints<Groups> = AuthGroup<Groups> extends {
|
|
60
|
+
readonly endpoints: infer Endpoints;
|
|
61
|
+
} ? Endpoints : never;
|
|
62
|
+
type CanonicalAuthEndpoints = (typeof AuthApi)["endpoints"];
|
|
63
|
+
type AuthEndpoint<Groups, Name> = Name extends keyof AuthGroupEndpoints<Groups> ? AuthGroupEndpoints<Groups>[Name] : never;
|
|
64
|
+
type EndpointContract<Endpoint> = Endpoint extends HttpApiEndpoint.HttpApiEndpoint<infer Identifier, infer Method, infer _Path, infer Params, infer Query, infer Payload, infer Headers, infer Success, infer Error, infer _Middleware, infer _MiddlewareRequirements> ? [Identifier, Method, Params, Query, Payload, Headers, Success, Error] : never;
|
|
65
|
+
type EndpointPath<Endpoint> = Endpoint extends {
|
|
66
|
+
readonly path: infer Path extends string;
|
|
67
|
+
} ? Path : never;
|
|
68
|
+
type Equal<Left, Right> = [Left, Right] extends [Right, Left] ? true : false;
|
|
69
|
+
type CompatibleEndpoint<Candidate, Canonical> = Equal<EndpointContract<Candidate>, EndpointContract<Canonical>> extends true ? EndpointPath<Candidate> extends `${string}${EndpointPath<Canonical>}` ? true : false : false;
|
|
70
|
+
type IncompatibleAuthEndpoints<Groups> = { [Name in keyof CanonicalAuthEndpoints]: CompatibleEndpoint<AuthEndpoint<Groups, Name>, CanonicalAuthEndpoints[Name]> extends true ? never : Name; }[keyof CanonicalAuthEndpoints];
|
|
71
|
+
type RequiresAuthGroup<Groups> = [AuthGroup<Groups>] extends [never] ? {
|
|
72
|
+
readonly "~effect-auth": "the consumer HttpApi must include the AuthApi group";
|
|
73
|
+
} : [IncompatibleAuthEndpoints<Groups>] extends [never] ? unknown : {
|
|
74
|
+
readonly "~effect-auth": "the consumer auth group must preserve every AuthApi endpoint contract";
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Builds the handler layer for the `auth` group of a consumer `HttpApi` that
|
|
78
|
+
* includes {@link AuthApi}. The internal assertion re-anchors the builder on
|
|
79
|
+
* the canonical group so endpoint handlers type against it.
|
|
80
|
+
*/
|
|
81
|
+
declare const layerAuthHandlers: <ApiId extends string, Groups extends HttpApiGroup.Constraint, Self = never, Id extends string = string, A = never>(api: HttpApi.HttpApi<ApiId, Groups> & NoInfer<RequiresAuthGroup<Groups>>, sessionExt?: AuthSessionWithExtClass<Self, Id, A>) => Layer.Layer<HttpApiGroup.Service<ApiId, "auth">, never, AuthSession | ChallengeMiddleware | EmailOtp | PasswordAuth | SessionMiddleware | Exclude<Self, import("effect/Scope").Scope>>;
|
|
82
|
+
declare const establishSessionFromRegistration: Effect.Effect<SessionSummary, AuthStoreError | AuthTokenError | IdentityResolutionError | InvalidRegistration | RegistrationIncomplete, AuthSession | CurrentRegistration | EmailOtp | import("effect/unstable/http/HttpServerRequest").HttpServerRequest>;
|
|
83
|
+
/**
|
|
84
|
+
* Everything the auth group needs at the HTTP boundary: handlers plus the
|
|
85
|
+
* middleware implementations. Requires `EmailOtp`, `PasswordAuth`, and
|
|
86
|
+
* `AuthSession`.
|
|
87
|
+
*/
|
|
88
|
+
declare const layerAuthHttp: <ApiId extends string, Groups extends HttpApiGroup.Constraint, Self = never, Id extends string = string, A = never>(api: HttpApi.HttpApi<ApiId, Groups> & NoInfer<RequiresAuthGroup<Groups>>, sessionExt?: AuthSessionWithExtClass<Self, Id, A>) => Layer.Layer<RegistrationMiddleware | HttpApiGroup.Service<ApiId, "auth"> | SessionMiddleware, never, AuthSession | EmailOtp | PasswordAuth | Exclude<Exclude<Exclude<Self, import("effect/Scope").Scope>, ChallengeMiddleware>, RegistrationMiddleware | SessionMiddleware>>;
|
|
89
|
+
declare const withSession: <Self, Id extends string, A>(sessionExt: AuthSessionWithExtClass<Self, Id, A>) => {
|
|
90
|
+
readonly layerHandlers: <ApiId extends string, Groups extends HttpApiGroup.Constraint>(api: HttpApi.HttpApi<ApiId, Groups> & NoInfer<RequiresAuthGroup<Groups>>) => Layer.Layer<HttpApiGroup.Service<ApiId, "auth">, never, AuthSession | ChallengeMiddleware | EmailOtp | PasswordAuth | SessionMiddleware | Exclude<Self, import("effect/Scope").Scope>>;
|
|
91
|
+
readonly layer: <ApiId extends string, Groups extends HttpApiGroup.Constraint>(api: HttpApi.HttpApi<ApiId, Groups> & NoInfer<RequiresAuthGroup<Groups>>) => Layer.Layer<RegistrationMiddleware | HttpApiGroup.Service<ApiId, "auth"> | SessionMiddleware, never, AuthSession | EmailOtp | PasswordAuth | Exclude<Exclude<Exclude<Self, import("effect/Scope").Scope>, ChallengeMiddleware>, RegistrationMiddleware | SessionMiddleware>>;
|
|
92
|
+
readonly establishSessionFromRegistration: Effect.Effect<SessionSummary, AuthStoreError | AuthTokenError | IdentityResolutionError | InvalidRegistration | RegistrationIncomplete, Self | AuthSession | CurrentRegistration | EmailOtp | import("effect/unstable/http/HttpServerRequest").HttpServerRequest>;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Binds an app-typed session declaration to extension-aware HTTP handlers and
|
|
96
|
+
* registration issuance while retaining runtime services as Effect requirements.
|
|
97
|
+
*/
|
|
98
|
+
declare const AuthHttp: {
|
|
99
|
+
readonly withSession: typeof withSession;
|
|
100
|
+
};
|
|
101
|
+
//#endregion
|
|
102
|
+
export { AuthHttp, ChallengeMiddlewareLayer, RegistrationMiddlewareLayer, SessionMiddlewareLayer, establishSessionFromRegistration, expireAuthTokenHeader, expireSecurityCookie, layerAuthHandlers, layerAuthHttp, registerSession, resolveSessionState, setSessionOnResponse };
|
|
103
|
+
//# sourceMappingURL=HttpServer.d.mts.map
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import { Email, SessionSummary } from "./Schema.mjs";
|
|
2
|
+
import { AuthUnavailable, InvalidAuthRequest, InvalidEmailOtp, InvalidRegistration, Unauthorized } from "./Errors.mjs";
|
|
3
|
+
import { ExistingSessionResult, RegistrationRequiredResult, SessionStateAnonymous, SessionStateAuthenticated, SessionStateRegistrationRequired } from "./http/models.mjs";
|
|
4
|
+
import { CurrentSession } from "./internal/CurrentSession.mjs";
|
|
5
|
+
import { ChallengeMiddleware, ChallengeSecurity, CurrentChallenge, CurrentRegistration, RegistrationHeaderSecurity, RegistrationMiddleware, RegistrationSecurity, SessionBearerSecurity, SessionMiddleware, SessionSecurity, authChallengeHeaderName, authRegistrationHeaderName, authTokenHeaderName } from "./http/security.mjs";
|
|
6
|
+
import { AuthSession } from "./AuthSession.mjs";
|
|
7
|
+
import { EmailOtp } from "./EmailOtp.mjs";
|
|
8
|
+
import { PasswordAuth } from "./PasswordAuth.mjs";
|
|
9
|
+
import { DateTime, Effect, Layer, Option, Redacted, Schema } from "effect";
|
|
10
|
+
import { HttpApiBuilder } from "effect/unstable/httpapi";
|
|
11
|
+
import { HttpEffect, HttpServerResponse } from "effect/unstable/http";
|
|
12
|
+
//#region src/HttpServer.ts
|
|
13
|
+
const decodeEmail = Schema.decodeEffect(Email);
|
|
14
|
+
const issueSession = Effect.fn("effect-auth/issueSession")(function* (sessions, context, sessionExt) {
|
|
15
|
+
if (sessionExt === void 0) return yield* sessions.issue(context.subjectId);
|
|
16
|
+
return yield* sessionExt.issueFromContext(context);
|
|
17
|
+
});
|
|
18
|
+
const baseCookieOptions = {
|
|
19
|
+
path: "/",
|
|
20
|
+
sameSite: "lax",
|
|
21
|
+
secure: true,
|
|
22
|
+
httpOnly: true
|
|
23
|
+
};
|
|
24
|
+
const cookieOptionsUntil = (expiresAt) => ({
|
|
25
|
+
...baseCookieOptions,
|
|
26
|
+
expires: DateTime.toDateUtc(expiresAt)
|
|
27
|
+
});
|
|
28
|
+
/** Registers a pre-response handler that expires one of the auth cookies. */
|
|
29
|
+
const expireSecurityCookie = (security) => HttpEffect.appendPreResponseHandler((_request, response) => Effect.orDie(HttpServerResponse.expireCookie(response, security.key, baseCookieOptions)));
|
|
30
|
+
/**
|
|
31
|
+
* Bearer-transport counterpart of {@link expireSecurityCookie}: an empty
|
|
32
|
+
* `set-auth-token` header tells cookie-less clients to drop their stored
|
|
33
|
+
* session token. Without it, sign-out only expires the cookie and a bearer
|
|
34
|
+
* client races its own token cleanup against the session refetch — the
|
|
35
|
+
* stateless token keeps verifying and the client re-authenticates itself
|
|
36
|
+
* straight back into the session it just revoked.
|
|
37
|
+
*/
|
|
38
|
+
const expireAuthTokenHeader = HttpEffect.appendPreResponseHandler((_request, response) => Effect.succeed(HttpServerResponse.setHeader(response, authTokenHeaderName, "")));
|
|
39
|
+
/** Auth responses must never be cached. */
|
|
40
|
+
const noStore = HttpEffect.appendPreResponseHandler((_request, response) => Effect.succeed(HttpServerResponse.setHeader(response, "cache-control", "no-store")));
|
|
41
|
+
/**
|
|
42
|
+
* Applies the session to a concrete response for both transports. This is the
|
|
43
|
+
* raw-handler counterpart to {@link registerSession}; keeping both here makes
|
|
44
|
+
* the cookie and bearer-header contract a single source of truth.
|
|
45
|
+
*/
|
|
46
|
+
const setSessionOnResponse = (response, issued) => response.pipe(HttpServerResponse.setCookieUnsafe(SessionSecurity.key, issued.token, cookieOptionsUntil(issued.summary.expiresAt)), HttpServerResponse.setHeader(authTokenHeaderName, issued.token));
|
|
47
|
+
/**
|
|
48
|
+
* Registers the session on the response for both transports: the HttpOnly
|
|
49
|
+
* cookie for browsers, and the `set-auth-token` header for clients that
|
|
50
|
+
* cannot read the cookie and echo the token back as `Authorization: Bearer`.
|
|
51
|
+
* Every place that issues a session must go through this so the two
|
|
52
|
+
* transports never drift — including application-owned handlers that issue
|
|
53
|
+
* sessions outside this module's workflows.
|
|
54
|
+
*/
|
|
55
|
+
const registerSession = (issued) => HttpEffect.appendPreResponseHandler((_request, response) => Effect.succeed(setSessionOnResponse(response, issued)));
|
|
56
|
+
/**
|
|
57
|
+
* Mirrors a flow-intermediate token (challenge, registration) on a response
|
|
58
|
+
* header, the same dual-transport rule as {@link registerSession}: the
|
|
59
|
+
* SameSite cookie serves browsers, the header serves clients whose cookie
|
|
60
|
+
* store never carries it, which echo it back as the matching `x-auth-*`
|
|
61
|
+
* request header.
|
|
62
|
+
*/
|
|
63
|
+
const mirrorTokenHeader = (headerName, token) => HttpEffect.appendPreResponseHandler((_request, response) => Effect.succeed(HttpServerResponse.setHeader(response, headerName, Redacted.value(token))));
|
|
64
|
+
const failUnavailable = Effect.fn("failUnavailable")(function* (operation, fault, detail) {
|
|
65
|
+
yield* Effect.logError(`${operation} failed`).pipe(Effect.annotateLogs({
|
|
66
|
+
fault,
|
|
67
|
+
detail
|
|
68
|
+
}));
|
|
69
|
+
return yield* AuthUnavailable.make();
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* Resolves the request's optional session and pending-registration credentials.
|
|
73
|
+
* Browser credentials prefer cookies; native clients can supply the same tokens
|
|
74
|
+
* through their corresponding headers.
|
|
75
|
+
* Invalid or expired credentials degrade to the next public state; failures
|
|
76
|
+
* in the token codec or auth store remain an explicit availability error.
|
|
77
|
+
*/
|
|
78
|
+
const resolveSessionState = Effect.gen(function* () {
|
|
79
|
+
const sessions = yield* AuthSession;
|
|
80
|
+
const emailOtp = yield* EmailOtp;
|
|
81
|
+
const cookieCredential = yield* HttpApiBuilder.securityDecode(SessionSecurity);
|
|
82
|
+
const sessionCredential = Redacted.value(cookieCredential) !== "" ? cookieCredential : yield* HttpApiBuilder.securityDecode(SessionBearerSecurity);
|
|
83
|
+
if (Redacted.value(sessionCredential) !== "") {
|
|
84
|
+
const authenticated = yield* sessions.verifyAndRenew(sessionCredential).pipe(Effect.flatMap((verified) => Effect.gen(function* () {
|
|
85
|
+
if (Option.isSome(verified.renewal)) yield* registerSession(verified.renewal.value);
|
|
86
|
+
return Option.some(SessionStateAuthenticated.make({ session: SessionSummary.make({
|
|
87
|
+
subjectId: verified.claims.sub,
|
|
88
|
+
expiresAt: Option.match(verified.renewal, {
|
|
89
|
+
onNone: () => verified.claims.exp,
|
|
90
|
+
onSome: (renewal) => renewal.summary.expiresAt
|
|
91
|
+
})
|
|
92
|
+
}) }));
|
|
93
|
+
})), Effect.catchTags({
|
|
94
|
+
InvalidSession: () => Effect.succeed(Option.none()),
|
|
95
|
+
AuthTokenError: () => AuthUnavailable.make(),
|
|
96
|
+
IdentityResolutionError: () => AuthUnavailable.make()
|
|
97
|
+
}));
|
|
98
|
+
if (Option.isSome(authenticated)) return authenticated.value;
|
|
99
|
+
}
|
|
100
|
+
const registrationCookieCredential = yield* HttpApiBuilder.securityDecode(RegistrationSecurity);
|
|
101
|
+
const registrationCredential = Redacted.value(registrationCookieCredential) !== "" ? registrationCookieCredential : yield* HttpApiBuilder.securityDecode(RegistrationHeaderSecurity);
|
|
102
|
+
if (Redacted.value(registrationCredential) !== "") {
|
|
103
|
+
const pending = yield* emailOtp.inspectRegistration(registrationCredential).pipe(Effect.map((registration) => Option.some(SessionStateRegistrationRequired.make({
|
|
104
|
+
email: registration.email,
|
|
105
|
+
registrationExpiresAt: registration.expiresAt
|
|
106
|
+
}))), Effect.catchTags({
|
|
107
|
+
InvalidRegistration: () => Effect.succeed(Option.none()),
|
|
108
|
+
AuthStoreError: () => AuthUnavailable.make(),
|
|
109
|
+
AuthTokenError: () => AuthUnavailable.make()
|
|
110
|
+
}));
|
|
111
|
+
if (Option.isSome(pending)) return pending.value;
|
|
112
|
+
}
|
|
113
|
+
return SessionStateAnonymous.make();
|
|
114
|
+
}).pipe(Effect.withSpan("effect-auth.resolveSessionState"));
|
|
115
|
+
const SessionMiddlewareLayer = Layer.effect(SessionMiddleware)(Effect.map(AuthSession, (sessions) => {
|
|
116
|
+
const verifySession = Effect.fn("SessionMiddleware.session")(function* (httpEffect, { credential }) {
|
|
117
|
+
const sessionCredential = Redacted.value(credential) === "" ? yield* HttpApiBuilder.securityDecode(SessionSecurity) : credential;
|
|
118
|
+
if (Redacted.value(sessionCredential) === "") return yield* Unauthorized.make();
|
|
119
|
+
const verified = yield* sessions.verifyAndRenew(sessionCredential).pipe(Effect.catchTags({
|
|
120
|
+
InvalidSession: () => Unauthorized.make(),
|
|
121
|
+
AuthTokenError: () => AuthUnavailable.make(),
|
|
122
|
+
IdentityResolutionError: () => AuthUnavailable.make()
|
|
123
|
+
}));
|
|
124
|
+
const response = yield* Effect.provideService(httpEffect, CurrentSession, verified.claims);
|
|
125
|
+
if (Option.isSome(verified.renewal)) yield* registerSession(verified.renewal.value);
|
|
126
|
+
return response;
|
|
127
|
+
});
|
|
128
|
+
return SessionMiddleware.of({
|
|
129
|
+
session: verifySession,
|
|
130
|
+
sessionBearer: verifySession
|
|
131
|
+
});
|
|
132
|
+
}));
|
|
133
|
+
const RegistrationMiddlewareLayer = Layer.effect(RegistrationMiddleware)(Effect.map(EmailOtp, (emailOtp) => {
|
|
134
|
+
const verifyRegistration = Effect.fn("RegistrationMiddleware.registration")(function* (httpEffect, { credential }) {
|
|
135
|
+
if (Redacted.value(credential) === "") return yield* InvalidRegistration.make();
|
|
136
|
+
const registration = yield* emailOtp.inspectRegistration(credential).pipe(Effect.catchTags({
|
|
137
|
+
AuthStoreError: () => AuthUnavailable.make(),
|
|
138
|
+
AuthTokenError: () => AuthUnavailable.make()
|
|
139
|
+
}));
|
|
140
|
+
return yield* Effect.provideService(httpEffect, CurrentRegistration, {
|
|
141
|
+
registration,
|
|
142
|
+
token: credential
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
return RegistrationMiddleware.of({
|
|
146
|
+
registration: verifyRegistration,
|
|
147
|
+
registrationHeader: verifyRegistration
|
|
148
|
+
});
|
|
149
|
+
}));
|
|
150
|
+
const provideChallenge = (httpEffect, { credential }) => Redacted.value(credential) === "" ? Effect.fail(InvalidEmailOtp.make()) : Effect.provideService(httpEffect, CurrentChallenge, credential);
|
|
151
|
+
const provideChallengeHeader = (httpEffect, input) => Redacted.value(input.credential) === "" ? Effect.logInfo("Email OTP verification rejected").pipe(Effect.annotateLogs({
|
|
152
|
+
"auth.method": "email_otp",
|
|
153
|
+
"auth.outcome": "rejected",
|
|
154
|
+
"auth.reason": "missing_challenge_credential"
|
|
155
|
+
}), Effect.andThen(InvalidEmailOtp.make())) : provideChallenge(httpEffect, input);
|
|
156
|
+
const ChallengeMiddlewareLayer = Layer.succeed(ChallengeMiddleware)(ChallengeMiddleware.of({
|
|
157
|
+
challenge: provideChallenge,
|
|
158
|
+
challengeHeader: provideChallengeHeader
|
|
159
|
+
}));
|
|
160
|
+
/**
|
|
161
|
+
* Builds the handler layer for the `auth` group of a consumer `HttpApi` that
|
|
162
|
+
* includes {@link AuthApi}. The internal assertion re-anchors the builder on
|
|
163
|
+
* the canonical group so endpoint handlers type against it.
|
|
164
|
+
*/
|
|
165
|
+
const layerAuthHandlers = (api, sessionExt) => HttpApiBuilder.group(api, "auth", (handlers) => Effect.gen(function* () {
|
|
166
|
+
const emailOtp = yield* EmailOtp;
|
|
167
|
+
const sessions = yield* AuthSession;
|
|
168
|
+
const sessionsWithExt = sessionExt === void 0 ? void 0 : yield* sessionExt;
|
|
169
|
+
const passwords = yield* PasswordAuth;
|
|
170
|
+
const currentSessionState = resolveSessionState.pipe(Effect.provideService(EmailOtp, emailOtp), Effect.provideService(AuthSession, sessions));
|
|
171
|
+
return handlers.handle("requestEmailOtp", ({ payload }) => Effect.gen(function* () {
|
|
172
|
+
yield* noStore;
|
|
173
|
+
const email = yield* decodeEmail(payload.email).pipe(Effect.mapError(() => InvalidAuthRequest.make({ message: "A valid email address is required" })));
|
|
174
|
+
const challenge = yield* emailOtp.request(email).pipe(Effect.catchTags({
|
|
175
|
+
AuthStoreError: (error) => failUnavailable("Email OTP request", "auth store", error.message),
|
|
176
|
+
AuthTokenError: (error) => failUnavailable("Email OTP request", "token codec", error.message),
|
|
177
|
+
EmailDeliveryError: (error) => failUnavailable("Email OTP request", "email delivery", error.message)
|
|
178
|
+
}));
|
|
179
|
+
yield* HttpApiBuilder.securitySetCookie(ChallengeSecurity, challenge.challengeToken, cookieOptionsUntil(challenge.expiresAt));
|
|
180
|
+
yield* mirrorTokenHeader(authChallengeHeaderName, challenge.challengeToken);
|
|
181
|
+
yield* Effect.logInfo("Sign-in code requested").pipe(Effect.annotateLogs({
|
|
182
|
+
"auth.method": "email_otp",
|
|
183
|
+
"auth.outcome": "challenge_issued",
|
|
184
|
+
email,
|
|
185
|
+
expiresAt: DateTime.formatIso(challenge.expiresAt)
|
|
186
|
+
}));
|
|
187
|
+
})).handle("verifyEmailOtp", ({ payload }) => Effect.gen(function* () {
|
|
188
|
+
yield* noStore;
|
|
189
|
+
const challengeToken = yield* CurrentChallenge;
|
|
190
|
+
const outcome = yield* emailOtp.verify({
|
|
191
|
+
challengeToken,
|
|
192
|
+
code: payload.code
|
|
193
|
+
}).pipe(Effect.catchTags({
|
|
194
|
+
AuthStoreError: (error) => failUnavailable("Email OTP verification", "auth store", error.message),
|
|
195
|
+
AuthTokenError: (error) => failUnavailable("Email OTP verification", "token codec", error.message),
|
|
196
|
+
IdentityResolutionError: (error) => failUnavailable("Email OTP verification", "identity resolution", error.message)
|
|
197
|
+
}));
|
|
198
|
+
yield* expireSecurityCookie(ChallengeSecurity);
|
|
199
|
+
yield* Effect.logInfo("Sign-in code verified").pipe(Effect.annotateLogs({
|
|
200
|
+
"auth.method": "email_otp",
|
|
201
|
+
"auth.outcome": outcome._tag === "ExistingSubject" ? "existing_subject" : "registration_required"
|
|
202
|
+
}));
|
|
203
|
+
if (outcome._tag === "ExistingSubject") {
|
|
204
|
+
const issued = yield* issueSession(sessions, {
|
|
205
|
+
subjectId: outcome.subjectId,
|
|
206
|
+
email: outcome.email
|
|
207
|
+
}, sessionsWithExt).pipe(Effect.catchTag("AuthTokenError", (error) => failUnavailable("Session issuance", "token codec", error.message)));
|
|
208
|
+
yield* registerSession(issued);
|
|
209
|
+
yield* Effect.logInfo("Session issued").pipe(Effect.annotateLogs({
|
|
210
|
+
"auth.method": "email_otp",
|
|
211
|
+
"auth.outcome": "session_issued",
|
|
212
|
+
subjectId: outcome.subjectId,
|
|
213
|
+
expiresAt: DateTime.formatIso(issued.summary.expiresAt)
|
|
214
|
+
}));
|
|
215
|
+
return ExistingSessionResult.make({ session: issued.summary });
|
|
216
|
+
}
|
|
217
|
+
yield* HttpApiBuilder.securitySetCookie(RegistrationSecurity, outcome.registrationToken, cookieOptionsUntil(outcome.expiresAt));
|
|
218
|
+
yield* mirrorTokenHeader(authRegistrationHeaderName, outcome.registrationToken);
|
|
219
|
+
yield* Effect.logInfo("Registration required").pipe(Effect.annotateLogs({
|
|
220
|
+
"auth.method": "email_otp",
|
|
221
|
+
"auth.outcome": "registration_required",
|
|
222
|
+
email: outcome.email,
|
|
223
|
+
expiresAt: DateTime.formatIso(outcome.expiresAt)
|
|
224
|
+
}));
|
|
225
|
+
return RegistrationRequiredResult.make({
|
|
226
|
+
email: outcome.email,
|
|
227
|
+
registrationExpiresAt: outcome.expiresAt
|
|
228
|
+
});
|
|
229
|
+
})).handle("passwordSignIn", ({ payload }) => Effect.gen(function* () {
|
|
230
|
+
yield* noStore;
|
|
231
|
+
const email = yield* decodeEmail(payload.email).pipe(Effect.mapError(() => InvalidAuthRequest.make({ message: "A valid email address is required" })));
|
|
232
|
+
const subjectId = yield* passwords.signIn(email, payload.password).pipe(Effect.catchTags({
|
|
233
|
+
AuthStoreError: (error) => failUnavailable("Password sign-in", "credential store", error.message),
|
|
234
|
+
AuthTokenError: (error) => failUnavailable("Password sign-in", "password hasher", error.message)
|
|
235
|
+
}));
|
|
236
|
+
const issued = yield* issueSession(sessions, {
|
|
237
|
+
subjectId,
|
|
238
|
+
email
|
|
239
|
+
}, sessionsWithExt).pipe(Effect.catchTag("AuthTokenError", (error) => failUnavailable("Session issuance", "token codec", error.message)));
|
|
240
|
+
yield* registerSession(issued);
|
|
241
|
+
yield* Effect.logInfo("Session issued").pipe(Effect.annotateLogs({
|
|
242
|
+
"auth.method": "password",
|
|
243
|
+
"auth.outcome": "session_issued",
|
|
244
|
+
subjectId,
|
|
245
|
+
expiresAt: DateTime.formatIso(issued.summary.expiresAt)
|
|
246
|
+
}));
|
|
247
|
+
return SessionStateAuthenticated.make({ session: issued.summary });
|
|
248
|
+
})).handle("setPassword", ({ payload }) => Effect.gen(function* () {
|
|
249
|
+
yield* noStore;
|
|
250
|
+
const session = yield* CurrentSession;
|
|
251
|
+
yield* passwords.setPassword(session.sub, {
|
|
252
|
+
currentPassword: Option.fromNullishOr(payload.currentPassword),
|
|
253
|
+
newPassword: payload.newPassword
|
|
254
|
+
}).pipe(Effect.catchTags({
|
|
255
|
+
AuthStoreError: (error) => failUnavailable("Password change", "credential store", error.message),
|
|
256
|
+
AuthTokenError: (error) => failUnavailable("Password change", "password hasher", error.message)
|
|
257
|
+
}));
|
|
258
|
+
yield* Effect.logInfo("Password changed").pipe(Effect.annotateLogs({
|
|
259
|
+
"auth.method": "password",
|
|
260
|
+
"auth.outcome": "password_changed",
|
|
261
|
+
subjectId: session.sub
|
|
262
|
+
}));
|
|
263
|
+
})).handle("getSession", () => noStore.pipe(Effect.andThen(currentSessionState))).handle("signOut", () => Effect.gen(function* () {
|
|
264
|
+
yield* noStore;
|
|
265
|
+
yield* expireSecurityCookie(ChallengeSecurity);
|
|
266
|
+
yield* expireSecurityCookie(RegistrationSecurity);
|
|
267
|
+
yield* expireSecurityCookie(SessionSecurity);
|
|
268
|
+
yield* expireAuthTokenHeader;
|
|
269
|
+
yield* Effect.logInfo("Session signed out").pipe(Effect.annotateLogs({ "auth.outcome": "signed_out" }));
|
|
270
|
+
}));
|
|
271
|
+
}));
|
|
272
|
+
/**
|
|
273
|
+
* Real onboarding workflow for application-owned, registration-protected
|
|
274
|
+
* account endpoints: consumes the current pending registration, registers the
|
|
275
|
+
* session cookie on the
|
|
276
|
+
* response, and returns the session summary. Call it after the application has
|
|
277
|
+
* idempotently created the account and email mapping.
|
|
278
|
+
*/
|
|
279
|
+
const establishSessionFromRegistrationWith = Effect.fn("effect-auth/establishSessionFromRegistration")(function* (sessionExt) {
|
|
280
|
+
const { registration, token } = yield* CurrentRegistration;
|
|
281
|
+
const emailOtp = yield* EmailOtp;
|
|
282
|
+
const sessions = yield* AuthSession;
|
|
283
|
+
const subjectId = yield* emailOtp.completeRegistration(token);
|
|
284
|
+
const issued = yield* issueSession(sessions, {
|
|
285
|
+
subjectId,
|
|
286
|
+
email: registration.email
|
|
287
|
+
}, sessionExt);
|
|
288
|
+
yield* registerSession(issued);
|
|
289
|
+
yield* expireSecurityCookie(RegistrationSecurity);
|
|
290
|
+
yield* Effect.logInfo("Registration completed; session issued").pipe(Effect.annotateLogs({
|
|
291
|
+
"auth.method": "email_otp",
|
|
292
|
+
"auth.outcome": "registration_completed",
|
|
293
|
+
subjectId,
|
|
294
|
+
email: registration.email,
|
|
295
|
+
expiresAt: DateTime.formatIso(issued.summary.expiresAt)
|
|
296
|
+
}));
|
|
297
|
+
return issued.summary;
|
|
298
|
+
});
|
|
299
|
+
const establishSessionFromRegistration = establishSessionFromRegistrationWith();
|
|
300
|
+
/**
|
|
301
|
+
* Everything the auth group needs at the HTTP boundary: handlers plus the
|
|
302
|
+
* middleware implementations. Requires `EmailOtp`, `PasswordAuth`, and
|
|
303
|
+
* `AuthSession`.
|
|
304
|
+
*/
|
|
305
|
+
const layerAuthHttp = (api, sessionExt) => layerAuthHandlers(api, sessionExt).pipe(Layer.provide(ChallengeMiddlewareLayer), Layer.provideMerge(Layer.mergeAll(SessionMiddlewareLayer, RegistrationMiddlewareLayer)));
|
|
306
|
+
const withSession = (sessionExt) => {
|
|
307
|
+
const layerHandlers = (api) => layerAuthHandlers(api, sessionExt);
|
|
308
|
+
const layer = (api) => layerAuthHttp(api, sessionExt);
|
|
309
|
+
return {
|
|
310
|
+
layerHandlers,
|
|
311
|
+
layer,
|
|
312
|
+
establishSessionFromRegistration: Effect.gen(function* () {
|
|
313
|
+
const sessionsWithExt = yield* sessionExt;
|
|
314
|
+
return yield* establishSessionFromRegistrationWith(sessionsWithExt);
|
|
315
|
+
})
|
|
316
|
+
};
|
|
317
|
+
};
|
|
318
|
+
/**
|
|
319
|
+
* Binds an app-typed session declaration to extension-aware HTTP handlers and
|
|
320
|
+
* registration issuance while retaining runtime services as Effect requirements.
|
|
321
|
+
*/
|
|
322
|
+
const AuthHttp = { withSession };
|
|
323
|
+
//#endregion
|
|
324
|
+
export { AuthHttp, ChallengeMiddlewareLayer, RegistrationMiddlewareLayer, SessionMiddlewareLayer, establishSessionFromRegistration, expireAuthTokenHeader, expireSecurityCookie, layerAuthHandlers, layerAuthHttp, registerSession, resolveSessionState, setSessionOnResponse };
|
|
325
|
+
|
|
326
|
+
//# sourceMappingURL=HttpServer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpServer.mjs","names":[],"sources":["../src/HttpServer.ts"],"sourcesContent":["import { type Types, DateTime, Effect, Layer, Option, Redacted, Schema } from \"effect\";\nimport { type Cookies, HttpEffect, HttpServerResponse } from \"effect/unstable/http\";\nimport {\n type HttpApi,\n HttpApiBuilder,\n type HttpApiEndpoint,\n type HttpApiGroup,\n type HttpApiSecurity,\n} from \"effect/unstable/httpapi\";\n\nimport {\n type AuthSessionWithExtClass,\n type AuthSessionWithExtService,\n type IssuedSession,\n type SessionExtContext,\n AuthSession,\n} from \"./AuthSession\";\nimport { EmailOtp } from \"./EmailOtp\";\nimport {\n AuthUnavailable,\n InvalidAuthRequest,\n InvalidEmailOtp,\n InvalidRegistration,\n Unauthorized,\n} from \"./Errors\";\nimport { type AuthApi } from \"./http/auth-api\";\nimport {\n ExistingSessionResult,\n RegistrationRequiredResult,\n SessionStateAnonymous,\n SessionStateAuthenticated,\n SessionStateRegistrationRequired,\n} from \"./http/models\";\nimport {\n authChallengeHeaderName,\n authRegistrationHeaderName,\n authTokenHeaderName,\n ChallengeMiddleware,\n ChallengeSecurity,\n CurrentChallenge,\n CurrentRegistration,\n CurrentSession,\n RegistrationHeaderSecurity,\n RegistrationMiddleware,\n RegistrationSecurity,\n SessionBearerSecurity,\n SessionMiddleware,\n SessionSecurity,\n} from \"./http/security\";\nimport { PasswordAuth } from \"./PasswordAuth\";\nimport { Email, SessionSummary } from \"./Schema\";\n\nconst decodeEmail = Schema.decodeEffect(Email);\n\nconst issueSession = Effect.fn(\"effect-auth/issueSession\")(function* <A>(\n sessions: AuthSession[\"Service\"],\n context: SessionExtContext,\n sessionExt?: AuthSessionWithExtService<A>,\n) {\n if (sessionExt === undefined) {\n return yield* sessions.issue(context.subjectId);\n }\n\n return yield* sessionExt.issueFromContext(context);\n});\n\n// --- Cookie helpers ----------------------------------------------------------\n//\n// Handlers never build `Set-Cookie` headers or parse `Cookie` headers; cookies\n// go through the Effect security helpers and pre-response combinators.\n\nconst baseCookieOptions = {\n path: \"/\",\n sameSite: \"lax\",\n secure: true,\n httpOnly: true,\n} satisfies Cookies.Cookie[\"options\"];\n\nconst cookieOptionsUntil = (expiresAt: DateTime.Utc): Cookies.Cookie[\"options\"] => ({\n ...baseCookieOptions,\n expires: DateTime.toDateUtc(expiresAt),\n});\n\n/** Registers a pre-response handler that expires one of the auth cookies. */\nexport const expireSecurityCookie = (security: HttpApiSecurity.ApiKey) =>\n HttpEffect.appendPreResponseHandler((_request, response) =>\n Effect.orDie(HttpServerResponse.expireCookie(response, security.key, baseCookieOptions)),\n );\n\n/**\n * Bearer-transport counterpart of {@link expireSecurityCookie}: an empty\n * `set-auth-token` header tells cookie-less clients to drop their stored\n * session token. Without it, sign-out only expires the cookie and a bearer\n * client races its own token cleanup against the session refetch — the\n * stateless token keeps verifying and the client re-authenticates itself\n * straight back into the session it just revoked.\n */\nexport const expireAuthTokenHeader = HttpEffect.appendPreResponseHandler((_request, response) =>\n Effect.succeed(HttpServerResponse.setHeader(response, authTokenHeaderName, \"\")),\n);\n\n/** Auth responses must never be cached. */\nconst noStore = HttpEffect.appendPreResponseHandler((_request, response) =>\n Effect.succeed(HttpServerResponse.setHeader(response, \"cache-control\", \"no-store\")),\n);\n\n/**\n * Applies the session to a concrete response for both transports. This is the\n * raw-handler counterpart to {@link registerSession}; keeping both here makes\n * the cookie and bearer-header contract a single source of truth.\n */\nexport const setSessionOnResponse = (\n response: HttpServerResponse.HttpServerResponse,\n issued: IssuedSession,\n): HttpServerResponse.HttpServerResponse =>\n response.pipe(\n HttpServerResponse.setCookieUnsafe(\n SessionSecurity.key,\n issued.token,\n cookieOptionsUntil(issued.summary.expiresAt),\n ),\n HttpServerResponse.setHeader(authTokenHeaderName, issued.token),\n );\n\n/**\n * Registers the session on the response for both transports: the HttpOnly\n * cookie for browsers, and the `set-auth-token` header for clients that\n * cannot read the cookie and echo the token back as `Authorization: Bearer`.\n * Every place that issues a session must go through this so the two\n * transports never drift — including application-owned handlers that issue\n * sessions outside this module's workflows.\n */\nexport const registerSession = (issued: IssuedSession) =>\n HttpEffect.appendPreResponseHandler((_request, response) =>\n Effect.succeed(setSessionOnResponse(response, issued)),\n );\n\n/**\n * Mirrors a flow-intermediate token (challenge, registration) on a response\n * header, the same dual-transport rule as {@link registerSession}: the\n * SameSite cookie serves browsers, the header serves clients whose cookie\n * store never carries it, which echo it back as the matching `x-auth-*`\n * request header.\n */\nconst mirrorTokenHeader = (headerName: string, token: Redacted.Redacted<string>) =>\n HttpEffect.appendPreResponseHandler((_request, response) =>\n Effect.succeed(HttpServerResponse.setHeader(response, headerName, Redacted.value(token))),\n );\n\n// `AuthUnavailable` is all the caller should learn from a failed auth\n// operation, but collapsing distinct faults into one status leaves a 503 with\n// nothing to diagnose. Name the fault on the way past. Expected outcomes such\n// as rate limiting or invalid credentials are deliberately never logged.\nconst failUnavailable = Effect.fn(\"failUnavailable\")(function* (\n operation: string,\n fault: string,\n detail: string,\n): Effect.fn.Return<never, AuthUnavailable> {\n yield* Effect.logError(`${operation} failed`).pipe(Effect.annotateLogs({ fault, detail }));\n\n return yield* AuthUnavailable.make();\n});\n\n/**\n * Resolves the request's optional session and pending-registration credentials.\n * Browser credentials prefer cookies; native clients can supply the same tokens\n * through their corresponding headers.\n * Invalid or expired credentials degrade to the next public state; failures\n * in the token codec or auth store remain an explicit availability error.\n */\nexport const resolveSessionState = Effect.gen(function* () {\n const sessions = yield* AuthSession;\n const emailOtp = yield* EmailOtp;\n const cookieCredential = yield* HttpApiBuilder.securityDecode(SessionSecurity);\n\n const sessionCredential =\n Redacted.value(cookieCredential) !== \"\"\n ? cookieCredential\n : yield* HttpApiBuilder.securityDecode(SessionBearerSecurity);\n\n if (Redacted.value(sessionCredential) !== \"\") {\n const authenticated = yield* sessions.verifyAndRenew(sessionCredential).pipe(\n Effect.flatMap((verified) =>\n Effect.gen(function* () {\n if (Option.isSome(verified.renewal)) {\n yield* registerSession(verified.renewal.value);\n }\n\n return Option.some(\n SessionStateAuthenticated.make({\n session: SessionSummary.make({\n subjectId: verified.claims.sub,\n expiresAt: Option.match(verified.renewal, {\n onNone: () => verified.claims.exp,\n onSome: (renewal) => renewal.summary.expiresAt,\n }),\n }),\n }),\n );\n }),\n ),\n Effect.catchTags({\n InvalidSession: () => Effect.succeed(Option.none<SessionStateAuthenticated>()),\n AuthTokenError: () => AuthUnavailable.make(),\n IdentityResolutionError: () => AuthUnavailable.make(),\n }),\n );\n\n if (Option.isSome(authenticated)) {\n return authenticated.value;\n }\n }\n const registrationCookieCredential = yield* HttpApiBuilder.securityDecode(RegistrationSecurity);\n\n const registrationCredential =\n Redacted.value(registrationCookieCredential) !== \"\"\n ? registrationCookieCredential\n : yield* HttpApiBuilder.securityDecode(RegistrationHeaderSecurity);\n\n if (Redacted.value(registrationCredential) !== \"\") {\n const pending = yield* emailOtp.inspectRegistration(registrationCredential).pipe(\n Effect.map((registration) =>\n Option.some(\n SessionStateRegistrationRequired.make({\n email: registration.email,\n registrationExpiresAt: registration.expiresAt,\n }),\n ),\n ),\n Effect.catchTags({\n InvalidRegistration: () => Effect.succeed(Option.none<SessionStateRegistrationRequired>()),\n AuthStoreError: () => AuthUnavailable.make(),\n AuthTokenError: () => AuthUnavailable.make(),\n }),\n );\n\n if (Option.isSome(pending)) {\n return pending.value;\n }\n }\n\n return SessionStateAnonymous.make();\n}).pipe(Effect.withSpan(\"effect-auth.resolveSessionState\"));\n\n// --- Middleware implementations ------------------------------------------------\n\nexport const SessionMiddlewareLayer: Layer.Layer<SessionMiddleware, never, AuthSession> =\n Layer.effect(SessionMiddleware)(\n Effect.map(AuthSession, (sessions) => {\n // Cookie and bearer carry the same session token, so both securities\n // verify identically; failing on an absent credential is what lets the\n // security dispatch fall through to the other transport.\n const verifySession = Effect.fn(\"SessionMiddleware.session\")(function* (\n httpEffect: Effect.Effect<\n HttpServerResponse.HttpServerResponse,\n Types.unhandled,\n CurrentSession\n >,\n { credential }: { readonly credential: Redacted.Redacted<string> },\n ) {\n // An empty bearer fallback must not replace a cookie infrastructure\n // failure with Unauthorized after security dispatch tries both.\n const sessionCredential =\n Redacted.value(credential) === \"\"\n ? yield* HttpApiBuilder.securityDecode(SessionSecurity)\n : credential;\n\n if (Redacted.value(sessionCredential) === \"\") {\n return yield* Unauthorized.make();\n }\n\n const verified = yield* sessions.verifyAndRenew(sessionCredential).pipe(\n Effect.catchTags({\n InvalidSession: () => Unauthorized.make(),\n AuthTokenError: () => AuthUnavailable.make(),\n IdentityResolutionError: () => AuthUnavailable.make(),\n }),\n );\n\n const response = yield* Effect.provideService(httpEffect, CurrentSession, verified.claims);\n\n if (Option.isSome(verified.renewal)) {\n yield* registerSession(verified.renewal.value);\n }\n\n return response;\n });\n\n return SessionMiddleware.of({\n session: verifySession,\n sessionBearer: verifySession,\n });\n }),\n );\n\nexport const RegistrationMiddlewareLayer: Layer.Layer<RegistrationMiddleware, never, EmailOtp> =\n Layer.effect(RegistrationMiddleware)(\n Effect.map(EmailOtp, (emailOtp) => {\n // Cookie and header carry the same registration token; failing on an\n // absent credential lets the security dispatch fall through to the\n // other transport, same as SessionMiddleware.\n const verifyRegistration = Effect.fn(\"RegistrationMiddleware.registration\")(function* (\n httpEffect: Effect.Effect<\n HttpServerResponse.HttpServerResponse,\n Types.unhandled,\n CurrentRegistration\n >,\n { credential }: { readonly credential: Redacted.Redacted<string> },\n ) {\n if (Redacted.value(credential) === \"\") {\n return yield* InvalidRegistration.make();\n }\n\n const registration = yield* emailOtp.inspectRegistration(credential).pipe(\n Effect.catchTags({\n AuthStoreError: () => AuthUnavailable.make(),\n AuthTokenError: () => AuthUnavailable.make(),\n }),\n );\n\n return yield* Effect.provideService(httpEffect, CurrentRegistration, {\n registration,\n token: credential,\n });\n });\n\n return RegistrationMiddleware.of({\n registration: verifyRegistration,\n registrationHeader: verifyRegistration,\n });\n }),\n );\n\nconst provideChallenge = (\n httpEffect: Effect.Effect<\n HttpServerResponse.HttpServerResponse,\n Types.unhandled,\n CurrentChallenge\n >,\n { credential }: { readonly credential: Redacted.Redacted<string> },\n) =>\n Redacted.value(credential) === \"\"\n ? Effect.fail(InvalidEmailOtp.make())\n : Effect.provideService(httpEffect, CurrentChallenge, credential);\n\nconst provideChallengeHeader = (\n httpEffect: Effect.Effect<\n HttpServerResponse.HttpServerResponse,\n Types.unhandled,\n CurrentChallenge\n >,\n input: { readonly credential: Redacted.Redacted<string> },\n) =>\n Redacted.value(input.credential) === \"\"\n ? Effect.logInfo(\"Email OTP verification rejected\").pipe(\n Effect.annotateLogs({\n \"auth.method\": \"email_otp\",\n \"auth.outcome\": \"rejected\",\n \"auth.reason\": \"missing_challenge_credential\",\n }),\n Effect.andThen(InvalidEmailOtp.make()),\n )\n : provideChallenge(httpEffect, input);\n\nexport const ChallengeMiddlewareLayer: Layer.Layer<ChallengeMiddleware> = Layer.succeed(\n ChallengeMiddleware,\n)(\n ChallengeMiddleware.of({\n challenge: provideChallenge,\n challengeHeader: provideChallengeHeader,\n }),\n);\n\n// --- Handlers -------------------------------------------------------------------\n\n/**\n * Gate for the handler-layer factories: the consumer's API must contain an\n * `auth` group with every canonical endpoint. API prefixes and middleware may\n * wrap endpoint path and requirement types, so the check allows those two\n * differences while preserving every transport schema.\n */\ntype AuthGroup<Groups> = Extract<Groups, { readonly identifier: \"auth\" }>;\ntype AuthGroupEndpoints<Groups> =\n AuthGroup<Groups> extends {\n readonly endpoints: infer Endpoints;\n }\n ? Endpoints\n : never;\ntype CanonicalAuthEndpoints = (typeof AuthApi)[\"endpoints\"];\ntype AuthEndpoint<Groups, Name> = Name extends keyof AuthGroupEndpoints<Groups>\n ? AuthGroupEndpoints<Groups>[Name]\n : never;\ntype EndpointContract<Endpoint> =\n Endpoint extends HttpApiEndpoint.HttpApiEndpoint<\n infer Identifier,\n infer Method,\n infer _Path,\n infer Params,\n infer Query,\n infer Payload,\n infer Headers,\n infer Success,\n infer Error,\n infer _Middleware,\n infer _MiddlewareRequirements\n >\n ? [Identifier, Method, Params, Query, Payload, Headers, Success, Error]\n : never;\ntype EndpointPath<Endpoint> = Endpoint extends { readonly path: infer Path extends string }\n ? Path\n : never;\ntype Equal<Left, Right> = [Left, Right] extends [Right, Left] ? true : false;\ntype CompatibleEndpoint<Candidate, Canonical> =\n Equal<EndpointContract<Candidate>, EndpointContract<Canonical>> extends true\n ? EndpointPath<Candidate> extends `${string}${EndpointPath<Canonical>}`\n ? true\n : false\n : false;\ntype IncompatibleAuthEndpoints<Groups> = {\n [Name in keyof CanonicalAuthEndpoints]: CompatibleEndpoint<\n AuthEndpoint<Groups, Name>,\n CanonicalAuthEndpoints[Name]\n > extends true\n ? never\n : Name;\n}[keyof CanonicalAuthEndpoints];\ntype RequiresAuthGroup<Groups> = [AuthGroup<Groups>] extends [never]\n ? { readonly \"~effect-auth\": \"the consumer HttpApi must include the AuthApi group\" }\n : [IncompatibleAuthEndpoints<Groups>] extends [never]\n ? unknown\n : {\n readonly \"~effect-auth\": \"the consumer auth group must preserve every AuthApi endpoint contract\";\n };\n\n/**\n * Builds the handler layer for the `auth` group of a consumer `HttpApi` that\n * includes {@link AuthApi}. The internal assertion re-anchors the builder on\n * the canonical group so endpoint handlers type against it.\n */\nexport const layerAuthHandlers = <\n ApiId extends string,\n Groups extends HttpApiGroup.Constraint,\n Self = never,\n Id extends string = string,\n A = never,\n>(\n api: HttpApi.HttpApi<ApiId, Groups> & NoInfer<RequiresAuthGroup<Groups>>,\n sessionExt?: AuthSessionWithExtClass<Self, Id, A>,\n) =>\n HttpApiBuilder.group(\n api as unknown as HttpApi.HttpApi<ApiId, typeof AuthApi>,\n \"auth\",\n (handlers) =>\n Effect.gen(function* () {\n const emailOtp = yield* EmailOtp;\n const sessions = yield* AuthSession;\n const sessionsWithExt = sessionExt === undefined ? undefined : yield* sessionExt;\n const passwords = yield* PasswordAuth;\n\n const currentSessionState = resolveSessionState.pipe(\n Effect.provideService(EmailOtp, emailOtp),\n Effect.provideService(AuthSession, sessions),\n );\n\n return handlers\n .handle(\"requestEmailOtp\", ({ payload }) =>\n Effect.gen(function* () {\n yield* noStore;\n\n const email = yield* decodeEmail(payload.email).pipe(\n Effect.mapError(() =>\n InvalidAuthRequest.make({ message: \"A valid email address is required\" }),\n ),\n );\n\n const challenge = yield* emailOtp.request(email).pipe(\n Effect.catchTags({\n AuthStoreError: (error) =>\n failUnavailable(\"Email OTP request\", \"auth store\", error.message),\n AuthTokenError: (error) =>\n failUnavailable(\"Email OTP request\", \"token codec\", error.message),\n EmailDeliveryError: (error) =>\n failUnavailable(\"Email OTP request\", \"email delivery\", error.message),\n }),\n );\n\n yield* HttpApiBuilder.securitySetCookie(\n ChallengeSecurity,\n challenge.challengeToken,\n cookieOptionsUntil(challenge.expiresAt),\n );\n yield* mirrorTokenHeader(authChallengeHeaderName, challenge.challengeToken);\n yield* Effect.logInfo(\"Sign-in code requested\").pipe(\n Effect.annotateLogs({\n \"auth.method\": \"email_otp\",\n \"auth.outcome\": \"challenge_issued\",\n email,\n expiresAt: DateTime.formatIso(challenge.expiresAt),\n }),\n );\n }),\n )\n .handle(\"verifyEmailOtp\", ({ payload }) =>\n Effect.gen(function* () {\n yield* noStore;\n const challengeToken = yield* CurrentChallenge;\n\n const outcome = yield* emailOtp.verify({ challengeToken, code: payload.code }).pipe(\n Effect.catchTags({\n AuthStoreError: (error) =>\n failUnavailable(\"Email OTP verification\", \"auth store\", error.message),\n AuthTokenError: (error) =>\n failUnavailable(\"Email OTP verification\", \"token codec\", error.message),\n IdentityResolutionError: (error) =>\n failUnavailable(\"Email OTP verification\", \"identity resolution\", error.message),\n }),\n );\n\n yield* expireSecurityCookie(ChallengeSecurity);\n yield* Effect.logInfo(\"Sign-in code verified\").pipe(\n Effect.annotateLogs({\n \"auth.method\": \"email_otp\",\n \"auth.outcome\":\n outcome._tag === \"ExistingSubject\"\n ? \"existing_subject\"\n : \"registration_required\",\n }),\n );\n if (outcome._tag === \"ExistingSubject\") {\n const issued = yield* issueSession(\n sessions,\n { subjectId: outcome.subjectId, email: outcome.email },\n sessionsWithExt,\n ).pipe(\n Effect.catchTag(\"AuthTokenError\", (error) =>\n failUnavailable(\"Session issuance\", \"token codec\", error.message),\n ),\n );\n\n yield* registerSession(issued);\n yield* Effect.logInfo(\"Session issued\").pipe(\n Effect.annotateLogs({\n \"auth.method\": \"email_otp\",\n \"auth.outcome\": \"session_issued\",\n subjectId: outcome.subjectId,\n expiresAt: DateTime.formatIso(issued.summary.expiresAt),\n }),\n );\n\n return ExistingSessionResult.make({ session: issued.summary });\n }\n yield* HttpApiBuilder.securitySetCookie(\n RegistrationSecurity,\n outcome.registrationToken,\n cookieOptionsUntil(outcome.expiresAt),\n );\n yield* mirrorTokenHeader(authRegistrationHeaderName, outcome.registrationToken);\n yield* Effect.logInfo(\"Registration required\").pipe(\n Effect.annotateLogs({\n \"auth.method\": \"email_otp\",\n \"auth.outcome\": \"registration_required\",\n email: outcome.email,\n expiresAt: DateTime.formatIso(outcome.expiresAt),\n }),\n );\n\n return RegistrationRequiredResult.make({\n email: outcome.email,\n registrationExpiresAt: outcome.expiresAt,\n });\n }),\n )\n .handle(\"passwordSignIn\", ({ payload }) =>\n Effect.gen(function* () {\n yield* noStore;\n\n const email = yield* decodeEmail(payload.email).pipe(\n Effect.mapError(() =>\n InvalidAuthRequest.make({ message: \"A valid email address is required\" }),\n ),\n );\n\n const subjectId = yield* passwords.signIn(email, payload.password).pipe(\n Effect.catchTags({\n AuthStoreError: (error) =>\n failUnavailable(\"Password sign-in\", \"credential store\", error.message),\n AuthTokenError: (error) =>\n failUnavailable(\"Password sign-in\", \"password hasher\", error.message),\n }),\n );\n\n const issued = yield* issueSession(\n sessions,\n { subjectId, email },\n sessionsWithExt,\n ).pipe(\n Effect.catchTag(\"AuthTokenError\", (error) =>\n failUnavailable(\"Session issuance\", \"token codec\", error.message),\n ),\n );\n\n yield* registerSession(issued);\n yield* Effect.logInfo(\"Session issued\").pipe(\n Effect.annotateLogs({\n \"auth.method\": \"password\",\n \"auth.outcome\": \"session_issued\",\n subjectId,\n expiresAt: DateTime.formatIso(issued.summary.expiresAt),\n }),\n );\n\n return SessionStateAuthenticated.make({ session: issued.summary });\n }),\n )\n .handle(\"setPassword\", ({ payload }) =>\n Effect.gen(function* () {\n yield* noStore;\n const session = yield* CurrentSession;\n\n yield* passwords\n .setPassword(session.sub, {\n currentPassword: Option.fromNullishOr(payload.currentPassword),\n newPassword: payload.newPassword,\n })\n .pipe(\n Effect.catchTags({\n AuthStoreError: (error) =>\n failUnavailable(\"Password change\", \"credential store\", error.message),\n AuthTokenError: (error) =>\n failUnavailable(\"Password change\", \"password hasher\", error.message),\n }),\n );\n yield* Effect.logInfo(\"Password changed\").pipe(\n Effect.annotateLogs({\n \"auth.method\": \"password\",\n \"auth.outcome\": \"password_changed\",\n subjectId: session.sub,\n }),\n );\n }),\n )\n .handle(\"getSession\", () => noStore.pipe(Effect.andThen(currentSessionState)))\n .handle(\"signOut\", () =>\n Effect.gen(function* () {\n yield* noStore;\n yield* expireSecurityCookie(ChallengeSecurity);\n yield* expireSecurityCookie(RegistrationSecurity);\n yield* expireSecurityCookie(SessionSecurity);\n yield* expireAuthTokenHeader;\n yield* Effect.logInfo(\"Session signed out\").pipe(\n Effect.annotateLogs({ \"auth.outcome\": \"signed_out\" }),\n );\n }),\n );\n }),\n );\n\n/**\n * Real onboarding workflow for application-owned, registration-protected\n * account endpoints: consumes the current pending registration, registers the\n * session cookie on the\n * response, and returns the session summary. Call it after the application has\n * idempotently created the account and email mapping.\n */\nconst establishSessionFromRegistrationWith = Effect.fn(\n \"effect-auth/establishSessionFromRegistration\",\n)(function* <A>(sessionExt?: AuthSessionWithExtService<A>) {\n const { registration, token } = yield* CurrentRegistration;\n const emailOtp = yield* EmailOtp;\n const sessions = yield* AuthSession;\n const subjectId = yield* emailOtp.completeRegistration(token);\n\n const issued = yield* issueSession(\n sessions,\n { subjectId, email: registration.email },\n sessionExt,\n );\n\n yield* registerSession(issued);\n yield* expireSecurityCookie(RegistrationSecurity);\n yield* Effect.logInfo(\"Registration completed; session issued\").pipe(\n Effect.annotateLogs({\n \"auth.method\": \"email_otp\",\n \"auth.outcome\": \"registration_completed\",\n subjectId,\n email: registration.email,\n expiresAt: DateTime.formatIso(issued.summary.expiresAt),\n }),\n );\n\n return issued.summary;\n});\n\nexport const establishSessionFromRegistration = establishSessionFromRegistrationWith();\n\n/**\n * Everything the auth group needs at the HTTP boundary: handlers plus the\n * middleware implementations. Requires `EmailOtp`, `PasswordAuth`, and\n * `AuthSession`.\n */\nexport const layerAuthHttp = <\n ApiId extends string,\n Groups extends HttpApiGroup.Constraint,\n Self = never,\n Id extends string = string,\n A = never,\n>(\n api: HttpApi.HttpApi<ApiId, Groups> & NoInfer<RequiresAuthGroup<Groups>>,\n sessionExt?: AuthSessionWithExtClass<Self, Id, A>,\n) =>\n layerAuthHandlers(api, sessionExt).pipe(\n Layer.provide(ChallengeMiddlewareLayer),\n Layer.provideMerge(Layer.mergeAll(SessionMiddlewareLayer, RegistrationMiddlewareLayer)),\n );\n\nconst withSession = <Self, Id extends string, A>(\n sessionExt: AuthSessionWithExtClass<Self, Id, A>,\n) => {\n const layerHandlers = <ApiId extends string, Groups extends HttpApiGroup.Constraint>(\n api: HttpApi.HttpApi<ApiId, Groups> & NoInfer<RequiresAuthGroup<Groups>>,\n ) => layerAuthHandlers(api, sessionExt);\n\n const layer = <ApiId extends string, Groups extends HttpApiGroup.Constraint>(\n api: HttpApi.HttpApi<ApiId, Groups> & NoInfer<RequiresAuthGroup<Groups>>,\n ) => layerAuthHttp(api, sessionExt);\n\n const establishSessionFromRegistration = Effect.gen(function* () {\n const sessionsWithExt = yield* sessionExt;\n\n return yield* establishSessionFromRegistrationWith(sessionsWithExt);\n });\n\n return { layerHandlers, layer, establishSessionFromRegistration } as const;\n};\n\n/**\n * Binds an app-typed session declaration to extension-aware HTTP handlers and\n * registration issuance while retaining runtime services as Effect requirements.\n */\nexport const AuthHttp = {\n withSession,\n} as const;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CredentialId, CredentialSummary, ExternalIdentity, IdentifierBinding, IdentityConflict, IdentityUnavailable, LastSignInMethod, LoginIdentifier, ProvisioningPending, ProvisioningResult, RecoveryReference, SubjectInactive, SubjectProvisioned, SubjectSnapshot } from "./identity/models.mjs";
|
|
2
|
+
import { ExternalIdentityMutation } from "./identity/ExternalIdentityMutation.mjs";
|
|
3
|
+
import { SubjectProvisioner, SubjectProvisioningInput } from "./identity/SubjectProvisioner.mjs";
|
|
4
|
+
import { ExpiresBy, ImmediatelyInvalidated, InvalidationUnsupported, SubjectCleanupComplete, SubjectCleanupPending, SubjectCleanupResult, SubjectInvalidation, SubjectLifecycle, SubjectTerminationInput } from "./identity/SubjectLifecycle.mjs";
|
|
5
|
+
import { IdentityMutation } from "./identity/IdentityMutation.mjs";
|
|
6
|
+
import { IdentityRepository } from "./identity/IdentityRepository.mjs";
|
|
7
|
+
import { DeleteSubject, DisableSubject, InspectIdentity, ListCredentials, ListIdentifiers, identityQueryLayer, makeIdentityChanges, subjectLifecycleLayer } from "./identity/operations.mjs";
|
|
8
|
+
import { IdentityCodecError, bigintSubjectId, numericSubjectId, stringSubjectId, subjectIdCodec } from "./identity/codecs.mjs";
|
|
9
|
+
export { CredentialId, CredentialSummary, DeleteSubject, DisableSubject, ExpiresBy, ExternalIdentity, ExternalIdentityMutation, IdentifierBinding, IdentityCodecError, IdentityConflict, IdentityMutation, IdentityRepository, IdentityUnavailable, ImmediatelyInvalidated, InspectIdentity, InvalidationUnsupported, LastSignInMethod, ListCredentials, ListIdentifiers, LoginIdentifier, ProvisioningPending, ProvisioningResult, RecoveryReference, SubjectCleanupComplete, SubjectCleanupPending, SubjectCleanupResult, SubjectInactive, SubjectInvalidation, SubjectLifecycle, SubjectProvisioned, SubjectProvisioner, type SubjectProvisioningInput, SubjectSnapshot, type SubjectTerminationInput, bigintSubjectId, identityQueryLayer, makeIdentityChanges, numericSubjectId, stringSubjectId, subjectIdCodec, subjectLifecycleLayer };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CredentialId, CredentialSummary, ExternalIdentity, IdentifierBinding, IdentityConflict, IdentityUnavailable, LastSignInMethod, LoginIdentifier, ProvisioningPending, ProvisioningResult, RecoveryReference, SubjectInactive, SubjectProvisioned, SubjectSnapshot } from "./identity/models.mjs";
|
|
2
|
+
import { ExternalIdentityMutation } from "./identity/ExternalIdentityMutation.mjs";
|
|
3
|
+
import { SubjectProvisioner } from "./identity/SubjectProvisioner.mjs";
|
|
4
|
+
import { IdentityMutation } from "./identity/IdentityMutation.mjs";
|
|
5
|
+
import { IdentityRepository } from "./identity/IdentityRepository.mjs";
|
|
6
|
+
import { ExpiresBy, ImmediatelyInvalidated, InvalidationUnsupported, SubjectCleanupComplete, SubjectCleanupPending, SubjectCleanupResult, SubjectInvalidation, SubjectLifecycle } from "./identity/SubjectLifecycle.mjs";
|
|
7
|
+
import { DeleteSubject, DisableSubject, InspectIdentity, ListCredentials, ListIdentifiers, identityQueryLayer, makeIdentityChanges, subjectLifecycleLayer } from "./identity/operations.mjs";
|
|
8
|
+
import { IdentityCodecError, bigintSubjectId, numericSubjectId, stringSubjectId, subjectIdCodec } from "./identity/codecs.mjs";
|
|
9
|
+
export { CredentialId, CredentialSummary, DeleteSubject, DisableSubject, ExpiresBy, ExternalIdentity, ExternalIdentityMutation, IdentifierBinding, IdentityCodecError, IdentityConflict, IdentityMutation, IdentityRepository, IdentityUnavailable, ImmediatelyInvalidated, InspectIdentity, InvalidationUnsupported, LastSignInMethod, ListCredentials, ListIdentifiers, LoginIdentifier, ProvisioningPending, ProvisioningResult, RecoveryReference, SubjectCleanupComplete, SubjectCleanupPending, SubjectCleanupResult, SubjectInactive, SubjectInvalidation, SubjectLifecycle, SubjectProvisioned, SubjectProvisioner, SubjectSnapshot, bigintSubjectId, identityQueryLayer, makeIdentityChanges, numericSubjectId, stringSubjectId, subjectIdCodec, subjectLifecycleLayer };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Email, SubjectId } from "./Schema.mjs";
|
|
2
|
+
import { IdentityResolutionError } from "./Errors.mjs";
|
|
3
|
+
import { Context, Effect, Option } from "effect";
|
|
4
|
+
//#region src/IdentityResolver.d.ts
|
|
5
|
+
declare const IdentityResolver_base: Context.ServiceClass<IdentityResolver, "effect-auth/IdentityResolver", {
|
|
6
|
+
readonly findByVerifiedEmail: (email: Email) => Effect.Effect<Option.Option<SubjectId>, IdentityResolutionError>;
|
|
7
|
+
}>;
|
|
8
|
+
/**
|
|
9
|
+
* Read-only mapping from a verified canonical email to an existing subject.
|
|
10
|
+
* Must not auto-provision: account creation stays a separate, application-owned
|
|
11
|
+
* operation.
|
|
12
|
+
*/
|
|
13
|
+
declare class IdentityResolver extends IdentityResolver_base {}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { IdentityResolver };
|
|
16
|
+
//# sourceMappingURL=IdentityResolver.d.mts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Context } from "effect";
|
|
2
|
+
//#region src/IdentityResolver.ts
|
|
3
|
+
/**
|
|
4
|
+
* Read-only mapping from a verified canonical email to an existing subject.
|
|
5
|
+
* Must not auto-provision: account creation stays a separate, application-owned
|
|
6
|
+
* operation.
|
|
7
|
+
*/
|
|
8
|
+
var IdentityResolver = class extends Context.Service()("effect-auth/IdentityResolver") {};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { IdentityResolver };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=IdentityResolver.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdentityResolver.mjs","names":[],"sources":["../src/IdentityResolver.ts"],"sourcesContent":["import { type Effect, type Option, Context } from \"effect\";\n\nimport type { IdentityResolutionError } from \"./Errors\";\nimport type { Email, SubjectId } from \"./Schema\";\n\n/**\n * Read-only mapping from a verified canonical email to an existing subject.\n * Must not auto-provision: account creation stays a separate, application-owned\n * operation.\n */\nexport class IdentityResolver extends Context.Service<\n IdentityResolver,\n {\n readonly findByVerifiedEmail: (\n email: Email,\n ) => Effect.Effect<Option.Option<SubjectId>, IdentityResolutionError>;\n }\n>()(\"effect-auth/IdentityResolver\") {}\n"],"mappings":";;;;;;;AAUA,IAAa,mBAAb,cAAsC,QAAQ,QAO5C,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC"}
|